Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DiagnosticActivity.java
- Earlier this week
- Sun 4:11 PM
- A
- You shared an item
- Java
- DiagnosticActivity.java
- H
- Can edit
- Hugh Adrien
- Last week
- Mar 13
- A
- You edited an item
- Java
- DiagnosticActivity.java
- Earlier this month
- Mar 5
- A
- You edited an item
- Java
- DiagnosticActivity.java
- Last month
- Feb 18
- A
- You edited an item
- Java
- DiagnosticActivity.java
- Earlier this year
- Jan 29
- A
- You edited an item
- Java
- DiagnosticActivity.java
- Jan 29
- A
- You uploaded an item
- Java
- DiagnosticActivity.java
- package com.example.andrew.cartrackerapp;
- import android.content.Intent;
- import android.nfc.Tag;
- import android.provider.ContactsContract;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import android.util.Log;
- import android.view.View;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.SeekBar;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.jjoe64.graphview.GraphView;
- import com.jjoe64.graphview.series.BarGraphSeries;
- import com.jjoe64.graphview.series.DataPoint;
- import com.jjoe64.graphview.series.LineGraphSeries;
- import org.eclipse.paho.android.service.MqttAndroidClient;
- import org.eclipse.paho.client.mqttv3.IMqttActionListener;
- import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
- import org.eclipse.paho.client.mqttv3.IMqttToken;
- import org.eclipse.paho.client.mqttv3.MqttCallback;
- import org.eclipse.paho.client.mqttv3.MqttClient;
- import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
- import org.eclipse.paho.client.mqttv3.MqttException;
- import org.eclipse.paho.client.mqttv3.MqttMessage;
- import java.io.UnsupportedEncodingException;
- public class DiagnosticActivity extends AppCompatActivity {
- //******************Variable Declarations*************************
- private static final String TAG = "DiagnosticActivity";
- private static final String USER_VEHICLE_INPUT = "userVehicleInput";
- //IP Address of mosquito sever
- private final static String mosquittoIP = "tcp://10.0.0.10:1883";
- private final static String mosquittoUser = "adminUser";
- private final static String mosquittoPassword = "aev2020";
- // String declarations for MQTT
- public String connectionHeader = "AEV/CARS/";
- public String carID = "";
- public String carHeader = "";
- public String topicLWTFooter = "LWT";
- public String topicLWT = "";
- public String LWTPayload = "unexpectedDisconnect";
- public String diagnosticsRequestTopic = "DIAGNOSTICSREQUEST";
- public String diagnosticsGraphRequestTopic = "DIAGNOSTICSGRAPHREQUEST";
- public String seekBarSpeedPubTopic = "";
- public String seekBarTurnAnglePubTopic = "";
- public int qos = 1;
- int LWTSubscribe = 0;
- // MQTT defines
- public MqttAndroidClient client;
- public MqttConnectOptions options;
- // Button Defines
- Button batteryButton;
- Button cockpitButton;
- Button IMUGPSButton;
- Button diagnosticsButton;
- Button controlButton;
- public String menuState = "";
- public String lastButtonPressed = "";
- // SeekBar defines
- SeekBar seekBarSpeed;
- SeekBar seekBarTurnAngle;
- public int controlTurnAngleOffset = 45;
- public int controlSpeedOffset = 40;
- // Misc String Defines
- public String controlSpeedTextHeader = "";
- public String controlTurnAngleTextHeader = "";
- public String diagnosticsInfoTextBlank = "";
- public String diagTitleString = "";
- // TextView Defines
- TextView diagInfoText;
- TextView diagTitle;
- TextView controlSpeedText;
- TextView controlTurnAngleText;
- // GraphView Defines and Data
- GraphView lineGraphView;
- LineGraphSeries<DataPoint> lineGraphSeries;
- String numRequestPoints = "100";
- double x, y;
- int numDataPoints = 500;
- GraphView barGraphView;
- BarGraphSeries<DataPoint> barGraphSeries;
- public float greyOutAlpha = (float)0.3;
- //***************Variable Declarations END*************************
- //~~~~~~~~onCreate function, runs when activity is opened~~~~~~~~~
- @Override
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_diagnostic);
- Log.d(TAG, "onCreate: Started");
- //*********************AEV LOGO Define*************************
- ImageView aevLogo = findViewById(R.id.imageViewAEVLogo);
- int aevLogoResource = getResources().getIdentifier("@drawable/aev_logo_resource", null, this.getPackageName());
- aevLogo.setImageResource(aevLogoResource);
- //********************AEV LOGO Define END**********************
- //******************Button Defines******************************
- batteryButton = findViewById(R.id.buttonBattery);
- cockpitButton = findViewById(R.id.buttonCockpit);
- IMUGPSButton = findViewById(R.id.buttonIMUGPS);
- diagnosticsButton = findViewById(R.id.buttonToDiagnostics);
- controlButton = findViewById(R.id.buttonToControl);
- lastButtonPressed = getString(R.string.diagBatteryButText);
- //**************************************************************
- //******************TextView************************************
- diagInfoText = findViewById(R.id.textViewDiagInfo);
- diagTitle = findViewById(R.id.textViewDiagTitle);
- controlSpeedText = findViewById(R.id.textViewSpeed);
- controlTurnAngleText = findViewById(R.id.textViewTurnAngle);
- //**************************************************************
- //******************SeekBar*************************************
- seekBarSpeed = findViewById(R.id.seekBarVehicleSpeed);
- seekBarTurnAngle = findViewById(R.id.seekBarTurnAngle);
- //**************************************************************
- //*****************StringDefines********************************
- controlSpeedTextHeader = getString(R.string.speedText);
- controlTurnAngleTextHeader = getString(R.string.turnAngleText);
- diagnosticsInfoTextBlank = getString(R.string.diagInfoText);
- //**************************************************************
- //*****************Graph Define*********************************
- // Line
- lineGraphView = findViewById(R.id.lineGraphView);
- x = 0;
- lineGraphSeries = new LineGraphSeries<DataPoint>();
- for (int i = 0; i<numDataPoints; i++)
- {
- x += 0.1;
- y = 5 + Math.sin(x);
- lineGraphSeries.appendData(new DataPoint(x, y), true, numDataPoints);
- }
- lineGraphView.addSeries(lineGraphSeries);
- lineGraphView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- switchToBarGraph();
- }
- });
- // Bar
- barGraphView = findViewById(R.id.barGraphView);
- barGraphSeries = new BarGraphSeries<DataPoint>(new DataPoint[] {
- new DataPoint(0, -1),
- new DataPoint(1, 5),
- new DataPoint(2, 3),
- new DataPoint(3, 2),
- new DataPoint(4, 6)
- });
- barGraphView.addSeries(barGraphSeries);
- barGraphView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- switchToLineGraph();
- }
- });
- //**************************************************************
- //****Write text to include numberplate of selected vehicle****
- diagTitleString= getString(R.string.vehicleTitle);
- carID = getIntent().getStringExtra(USER_VEHICLE_INPUT);
- diagTitleString = diagTitleString + " " + carID;
- diagTitle.setText(diagTitleString);
- //*************************************************************
- //*******************Grey out buttons**************************
- menuButtonGreyAllOut();
- redrawMenuDiag();
- diagButtonGreyAllOut();
- diagInfoText.setText(getString(R.string.diagInfoNoConnect));
- //************************************************************
- //********************MQTT Initialisation**********************
- String clientId = MqttClient.generateClientId();
- carHeader = connectionHeader + carID + "/";
- seekBarSpeedPubTopic = carHeader + "CONTROL/SPEED";
- seekBarTurnAnglePubTopic = carHeader + "CONTROL/TURNANGLE";
- // Set options and LWT
- options = new MqttConnectOptions();
- byte[] payload = LWTPayload.getBytes();
- topicLWT = carHeader + topicLWTFooter;
- options.setWill(topicLWT, payload, 1, false);
- options.setAutomaticReconnect(true);
- options.setUserName(mosquittoUser);
- options.setPassword(mosquittoPassword.toCharArray());
- //~~~~~~~~~~~~~~~~Create client~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- client = new MqttAndroidClient(this.getApplicationContext(), mosquittoIP, clientId);
- //~~~~~~~~~~~~~~~~~~~~~~SET MQTT CALLBACKS~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- client.setCallback(new MqttCallback()
- {
- @Override
- public void connectionLost(Throwable cause)
- {
- Log.d(TAG, "connectionLost: Started");
- Toast.makeText(DiagnosticActivity.this, "Disconnected from MQTT server", Toast.LENGTH_SHORT).show();
- Intent toDiagnosticMenuIntent = new Intent(DiagnosticActivity.this, DiagnosticMenuActivity.class);
- startActivity(toDiagnosticMenuIntent);
- }
- @Override
- public void messageArrived(String topic, MqttMessage message)
- {
- String messagePayload = new String(message.getPayload());
- Log.d(TAG, "MqttCallback: messageArrived: " + messagePayload + ". Topic of " + topic);
- if (topic.equals(carHeader + "DIAGNOSTICSSEND"))
- {
- diagInfoText.setText(messagePayload);
- }
- if (topic.equals(carHeader + "DIAGNOSTICSGRAPHSEND"))
- {
- drawLineGraphData(messagePayload);
- }
- }
- @Override
- public void deliveryComplete(IMqttDeliveryToken token)
- {
- }
- });
- //~~~~~~~~~~~~~~~~~~~~MQTT CONNECT~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- try
- {
- IMqttToken token = client.connect(options);
- token.setActionCallback(new IMqttActionListener()
- {
- @Override
- public void onSuccess(IMqttToken asyncActionToken)
- {
- Log.d(TAG, "onSuccess: MQTT connect");
- //subscribe to required topics and request initial information
- MQTTSubscribe(client, "#"); //////////////////////////////////////////////FIX THIS////////////////////////
- menuButtonGreyOut(diagnosticsButton);
- diagButtonGreyOut(batteryButton);
- requestDiagnosticsBattery(client);
- }
- @Override
- public void onFailure(IMqttToken asyncActionToken, Throwable exception)
- {
- Toast.makeText(DiagnosticActivity.this, "MQTT connect FAIL", Toast.LENGTH_LONG).show();
- Log.d(TAG, "onFailure: MQTT could not connect");
- diagTitle.setText(getString(R.string.vehicleTitle) + " NO CONNECTION TO SERVER");
- }
- });
- } catch (MqttException e)
- {
- e.printStackTrace();
- }
- //~~~~~~~~~~~~~~~~~~~~~~~~~~Connect Client End~~~~~~~~~~~~~~~~~~~~~~~~~
- //********************MQTT Initialisation END**************************
- //*****************SET BUTTON LISTENERS***********************
- batteryButton.setOnClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- diagButtonGreyOut(batteryButton);
- requestDiagnosticsBattery(client);
- }
- });
- cockpitButton.setOnClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- diagButtonGreyOut(cockpitButton);
- requestDiagnosticsCockpit(client);
- }
- });
- IMUGPSButton.setOnClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- diagButtonGreyOut(IMUGPSButton);
- requestDiagnosticsIMUGPS(client);
- }
- });
- diagnosticsButton.setOnClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- menuButtonGreyOut(diagnosticsButton);
- redrawMenuDiag();
- }
- });
- controlButton.setOnClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View v)
- {
- menuButtonGreyOut(controlButton);
- redrawMenuControl();
- }
- });
- //*****************SET BUTTON LISTENERS END*******************
- //*****************SET SeekBar LISTENERS*********************
- seekBarSpeed.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
- {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
- {
- String temp = controlSpeedTextHeader + (progress - controlSpeedOffset);
- controlSpeedText.setText(temp);
- MQTTPublish(client, seekBarSpeedPubTopic, Integer.toString(progress - controlSpeedOffset));
- }
- @Override
- public void onStartTrackingTouch(SeekBar seekBar)
- {
- }
- @Override
- public void onStopTrackingTouch(SeekBar seekBar)
- {
- }
- });
- seekBarTurnAngle.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
- {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
- {
- String temp = controlTurnAngleTextHeader + (progress - controlTurnAngleOffset);
- controlTurnAngleText.setText(temp);
- MQTTPublish(client, seekBarTurnAnglePubTopic, Integer.toString(progress - controlTurnAngleOffset));
- }
- @Override
- public void onStartTrackingTouch(SeekBar seekBar)
- {
- }
- @Override
- public void onStopTrackingTouch(SeekBar seekBar)
- {
- }
- });
- }
- //~~~~~~~~~~~~~~~~~~~onCreate END~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- //-------------------------Functions------------------------------
- public void switchToBarGraph()
- {
- lineGraphView.setEnabled(false);
- lineGraphView.setVisibility(View.INVISIBLE);
- barGraphView.setEnabled(true);
- barGraphView.setVisibility(View.VISIBLE);
- }
- public void switchToLineGraph()
- {
- barGraphView.setEnabled(false);
- barGraphView.setVisibility(View.INVISIBLE);
- lineGraphView.setEnabled(true);
- lineGraphView.setVisibility(View.VISIBLE);
- }
- public void drawLineGraphData(String data)
- {
- String[] values = data.split("\\s*,\\s*");
- x = Double.parseDouble(values[0]);
- y = Double.parseDouble(values[1]);
- lineGraphSeries.appendData(new DataPoint(x, y), true, numDataPoints);
- lineGraphView.addSeries(lineGraphSeries);
- }
- public void menuButtonGreyAllOut()
- {
- controlButton.setClickable(false);
- controlButton.setEnabled(false);
- controlButton.setAlpha(greyOutAlpha);
- diagnosticsButton.setClickable(false);
- diagnosticsButton.setEnabled(false);
- diagnosticsButton.setAlpha(greyOutAlpha);
- }
- public void diagButtonGreyAllOut()
- {
- batteryButton.setClickable(false);
- batteryButton.setEnabled(false);
- batteryButton.setAlpha(greyOutAlpha);
- cockpitButton.setClickable(false);
- cockpitButton.setEnabled(false);
- cockpitButton.setAlpha(greyOutAlpha);
- IMUGPSButton.setClickable(false);
- IMUGPSButton.setEnabled(false);
- IMUGPSButton.setAlpha(greyOutAlpha);
- }
- public void redrawMenuDiag()
- {
- // Diagnostics Visibilities/enables
- batteryButton.setEnabled(true);
- batteryButton.setVisibility(View.VISIBLE);
- cockpitButton.setEnabled(true);
- cockpitButton.setVisibility(View.VISIBLE);
- IMUGPSButton.setEnabled(true);
- IMUGPSButton.setVisibility(View.VISIBLE);
- diagInfoText.setEnabled(true);
- diagInfoText.setVisibility(View.VISIBLE);
- lineGraphView.setEnabled(true);
- lineGraphView.setVisibility(View.VISIBLE);
- barGraphView.setEnabled(false);
- barGraphView.setVisibility(View.INVISIBLE);
- // Control Hides
- seekBarSpeed.setVisibility(View.INVISIBLE);
- seekBarSpeed.setEnabled(false);
- seekBarTurnAngle.setVisibility(View.INVISIBLE);
- seekBarTurnAngle.setEnabled(false);
- controlSpeedText.setVisibility(View.INVISIBLE);
- controlSpeedText.setEnabled(false);
- controlTurnAngleText.setVisibility(View.INVISIBLE);
- controlTurnAngleText.setEnabled(false);
- }
- public void redrawMenuControl()
- {
- // Diagnostics Hides
- batteryButton.setEnabled(false);
- batteryButton.setVisibility(View.INVISIBLE);
- cockpitButton.setEnabled(false);
- cockpitButton.setVisibility(View.INVISIBLE);
- IMUGPSButton.setEnabled(false);
- IMUGPSButton.setVisibility(View.INVISIBLE);
- diagInfoText.setEnabled(false);
- diagInfoText.setVisibility(View.INVISIBLE);
- lineGraphView.setEnabled(false);
- lineGraphView.setVisibility(View.INVISIBLE);
- barGraphView.setEnabled(false);
- barGraphView.setVisibility(View.INVISIBLE);
- // Control Enables/Visibilities
- seekBarSpeed.setVisibility(View.VISIBLE);
- seekBarSpeed.setProgress(40);
- seekBarSpeed.setEnabled(true);
- seekBarTurnAngle.setVisibility(View.VISIBLE);
- seekBarTurnAngle.setProgress(45);
- seekBarTurnAngle.setEnabled(true);
- controlSpeedText.setVisibility(View.VISIBLE);
- String temp = controlSpeedTextHeader + "0";
- controlSpeedText.setText(temp);
- controlSpeedText.setEnabled(true);
- controlTurnAngleText.setVisibility(View.VISIBLE);
- temp = controlTurnAngleTextHeader + "0";
- controlTurnAngleText.setText(temp);
- controlTurnAngleText.setEnabled(true);
- }
- public void menuButtonGreyOut(Button clickedButton)
- {
- controlButton.setClickable(true);
- controlButton.setEnabled(true);
- controlButton.setAlpha(1);
- diagnosticsButton.setClickable(true);
- diagnosticsButton.setEnabled(true);
- diagnosticsButton.setAlpha(1);
- clickedButton.setClickable(false);
- clickedButton.setEnabled(false);
- clickedButton.setAlpha(greyOutAlpha);
- }
- public void diagButtonGreyOut(Button clickedButton)
- {
- batteryButton.setClickable(true);
- batteryButton.setEnabled(true);
- batteryButton.setAlpha(1);
- cockpitButton.setClickable(true);
- cockpitButton.setEnabled(true);
- cockpitButton.setAlpha(1);
- IMUGPSButton.setClickable(true);
- IMUGPSButton.setEnabled(true);
- IMUGPSButton.setAlpha(1);
- clickedButton.setClickable(false);
- clickedButton.setEnabled(false);
- clickedButton.setAlpha(greyOutAlpha);
- }
- public void requestDiagnosticsBattery(MqttAndroidClient client)
- {
- String pubTopic = carHeader + diagnosticsRequestTopic + "/Battery";
- String messagePayload = numRequestPoints;
- diagInfoText.setText(diagnosticsInfoTextBlank);
- MQTTPublish(client, pubTopic, messagePayload);
- }
- public void requestDiagnosticsCockpit(MqttAndroidClient client)
- {
- String pubTopic = carHeader + diagnosticsRequestTopic + "/Cockpit";
- String messagePayload = numRequestPoints;
- diagInfoText.setText(diagnosticsInfoTextBlank);
- MQTTPublish(client, pubTopic, messagePayload);
- }
- public void requestDiagnosticsIMUGPS(MqttAndroidClient client) {
- String pubTopic = carHeader + diagnosticsRequestTopic + "/IMUGPS";
- String messagePayload = numRequestPoints;
- diagInfoText.setText(diagnosticsInfoTextBlank);
- MQTTPublish(client, pubTopic, messagePayload);
- }
- // MQTT publish
- public void MQTTPublish(MqttAndroidClient client, String pubTopic, String messagePayload)
- {
- Log.d(TAG, "MQTTPublish: attempting to publish " + messagePayload + " to topic " +pubTopic);
- byte [] encodedPayload;
- try {
- encodedPayload = messagePayload.getBytes("UTF-8");
- MqttMessage message = new MqttMessage(encodedPayload);
- client.publish(pubTopic, message);
- } catch (UnsupportedEncodingException | MqttException e) {e.printStackTrace();}
- }
- // MQTT subscribe
- public void MQTTSubscribe(MqttAndroidClient client, final String subTopic) {
- int qos = 1;
- try {
- IMqttToken subToken = client.subscribe(subTopic, qos);
- subToken.setActionCallback(new IMqttActionListener() {
- @Override
- public void onSuccess(IMqttToken asyncActionToken) {
- Log.d(TAG, "onSuccess: Subscribe to " + subTopic + " successful");
- }
- @Override
- public void onFailure(IMqttToken asyncActionToken,
- Throwable exception) {
- Log.d(TAG, "onFailure: Subscribe to " + subTopic + " failed");
- }
- });
- } catch (MqttException e) {
- e.printStackTrace();
- }
- }
- //------------------------Functions END---------------------------
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement