display external gnss on UI

This commit is contained in:
Hendrik Schutter 2022-04-25 18:09:07 +02:00
parent 031df4b3ca
commit 316fbb4fdb
2 changed files with 191 additions and 42 deletions

View File

@ -5,7 +5,9 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.location.LocationListener;
import android.location.LocationManager;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
@ -22,7 +24,7 @@ import java.util.concurrent.LinkedBlockingQueue;
public class MainActivity extends AppCompatActivity {
private TextView output;
private LocationManager locationManager= null;
private LocationManager locationManager = null;
private SerialUSB serialUSB = null;
private NMEAParser nmeaParser = null;
private boolean doRun = true;
@ -31,6 +33,7 @@ public class MainActivity extends AppCompatActivity {
private static final String INTENT_ACTION_GRANT_USB = BuildConfig.APPLICATION_ID + ".GRANT_USB";
private boolean bChange = true;
private BlockingQueue<Byte> rawSerialByteDataQueue = null;
private double lastInternFixLat, lastInternFixLon;
@Override
public void onCreate(Bundle savedInstanceState) {
@ -42,6 +45,17 @@ public class MainActivity extends AppCompatActivity {
// start extern GNSS and display stats on UI
startExternGNSS();
setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.diffGNSSDistanceNumber), "no signal");
}
// From https://github.com/googlesamples/easypermissions
@ -53,13 +67,13 @@ public class MainActivity extends AppCompatActivity {
}
private void startExternGNSS(){
private void startExternGNSS() {
rawSerialByteDataQueue = new LinkedBlockingQueue<>();
serialUSB = new SerialUSB(this, rawSerialByteDataQueue);
if(serialUSB.findSerialDevice()){
if (serialUSB.findSerialDevice()) {
serialUSB.connect(9600, 0);
if (serialUSB.isConnected()){
if (serialUSB.isConnected()) {
nmeaParser = new NMEAParser();
nmeaParser.setReceiveByteStream(rawSerialByteDataQueue);
}
@ -117,43 +131,45 @@ public class MainActivity extends AppCompatActivity {
public void run() {
while (doRun) {
if (locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) != null) {
setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), String.format( "%.6f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude()));
setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), String.format( "%.6f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude()));
setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), String.format( "%.2f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getAltitude()) + " m");
setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), String.format( "%.2f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getAccuracy()) + " m");
lastInternFixLat = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLatitude();
lastInternFixLon = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getLongitude();
setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), String.format("%.6f", lastInternFixLat));
setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), String.format("%.6f", lastInternFixLon));
setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), String.format("%.2f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getAltitude()) + " m");
setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), String.format("%.2f", locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getAccuracy()) + " m");
setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), Integer.toString(locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER).getExtras().getInt("satellites")));
}else{
} else {
setEditTextLabel((EditText) findViewById(R.id.interngnssLatNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.interngnssLongNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.interngnssAltitudeNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.interngnssAccuracyNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber),"no signal");
setEditTextLabel((EditText) findViewById(R.id.interngnssSatCountNumber), "no signal");
}
if(serialUSB != null){
if(serialUSB.isConnected()){
if ((serialUSB != null) && (nmeaParser != null)) {
if (serialUSB.isConnected()) {
nmeaParser.handleReceiveByteStream();
if (nmeaParser.checkFix() == true) {
//System.out.println(parser.getLatitude() + " " + parser.getLongitude());
//System.out.println(parser.calcDistance(fixedPosLat, fixedPosLng));
//nmeaParser.getLatitude();
//nmeaParser.getLongitude();
Log.i("ExternGNSS", "Fix! Lat: " + String.valueOf(nmeaParser.getLatitude()) + " Lon: " + String.valueOf(nmeaParser.getLongitude()));
// distance.add(nmeaParser.calcDistance(fixedPosLat, fixedPosLng));
// satCount.add(nmeaParser.getSatCount());
//Log.i("ExternGNSS", "Fix! Lat: " + String.valueOf(nmeaParser.getLatitude()) + " Lon: " + String.valueOf(nmeaParser.getLongitude()));
setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), String.format("%.6f", nmeaParser.getLatitude()));
setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), String.format("%.6f", nmeaParser.getLongitude()));
setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), Integer.toString(nmeaParser.getSatCount()));
}
} else {
setEditTextLabel((EditText) findViewById(R.id.externgnssLatNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.externgnssLongNumber), "no signal");
setEditTextLabel((EditText) findViewById(R.id.externgnssSatCountNumber), "no signal");
}
if ((locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER) != null) && (serialUSB != null) && (nmeaParser != null)) {
if (nmeaParser.checkFix() == true) {
setEditTextLabel((EditText) findViewById(R.id.diffGNSSDistanceNumber), String.format("%.6f", nmeaParser.calcDistance(lastInternFixLat, lastInternFixLon)) + " m");
}
} else {
setEditTextLabel((EditText) findViewById(R.id.diffGNSSDistanceNumber), "no signal");
}
}
runOnUiThread(new Runnable() {
@Override
public void run() {
//Update
}
});
try {
sleep(10000);
} catch (InterruptedException e) {
@ -180,10 +196,10 @@ public class MainActivity extends AppCompatActivity {
Toast.makeText(cntxToastInternGNSSUpdate, "Internal GNSS updated", Toast.LENGTH_LONG).show();
}
@Override
@Override
// This callback will never be invoked on Android Q and above.
public void onStatusChanged(String provider, int status, Bundle extras) {
// Toast.makeText(mContext, "Status Changed", Toast.LENGTH_LONG).show();
// Toast.makeText(mContext, "Status Changed", Toast.LENGTH_LONG).show();
}
@Override

View File

@ -33,7 +33,7 @@
android:layout_width="70dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginBottom="8dp"
android:text="Altitude:"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="@+id/interngnssAltitudeNumber"
@ -47,7 +47,7 @@
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:clickable="false"
android:text="Intern GNSS Receiver"
android:text="Intern GNSS receiver"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
@ -80,7 +80,6 @@
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="128dp"
android:layout_marginLeft="128dp"
android:clickable="false"
android:cursorVisible="false"
android:ems="16"
@ -89,14 +88,14 @@
android:inputType="numberDecimal"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/interngnssNameTextView" />
app:layout_constraintTop_toBottomOf="@+id/interngnssNameTextView"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
<EditText
android:id="@+id/interngnssLongNumber"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="128dp"
android:layout_marginLeft="128dp"
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
@ -104,14 +103,14 @@
android:inputType="numberDecimal"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/interngnssLatNumber" />
app:layout_constraintTop_toBottomOf="@+id/interngnssLatNumber"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
<EditText
android:id="@+id/interngnssAltitudeNumber"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="128dp"
android:layout_marginLeft="128dp"
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
@ -119,14 +118,14 @@
android:inputType="numberDecimal"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/interngnssLongNumber" />
app:layout_constraintTop_toBottomOf="@+id/interngnssLongNumber"
tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck" />
<EditText
android:id="@+id/interngnssAccuracyNumber"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="128dp"
android:layout_marginLeft="128dp"
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
@ -134,14 +133,14 @@
android:inputType="numberDecimal"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/interngnssAltitudeNumber" />
app:layout_constraintTop_toBottomOf="@+id/interngnssAltitudeNumber"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck" />
<EditText
android:id="@+id/interngnssSatCountNumber"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="128dp"
android:layout_marginLeft="128dp"
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
@ -149,6 +148,140 @@
android:inputType="number"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/interngnssAccuracyNumber" />
app:layout_constraintTop_toBottomOf="@+id/interngnssAccuracyNumber"
tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck" />
<TextView
android:id="@+id/externgnssNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="272dp"
android:clickable="false"
android:text="Extern GNSS receiver"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/externgnssLongTextView"
android:layout_width="70dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:text="Long:"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="@+id/externgnssLongNumber"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/externgnssLatTextView"
android:layout_width="70dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:text="Lat:"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="@+id/externgnssLatNumber"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/externgnssSatCountTextView"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:text="Satellites:"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="@+id/externgnssSatCountNumber"
app:layout_constraintStart_toStartOf="parent" />
<EditText
android:id="@+id/externgnssLatNumber"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="128dp"
android:clickable="false"
android:cursorVisible="false"
android:ems="16"
android:focusable="false"
android:focusableInTouchMode="false"
android:inputType="numberDecimal"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/externgnssNameTextView"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck"
tools:text="no signal" />
<EditText
android:id="@+id/externgnssLongNumber"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="128dp"
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:inputType="numberDecimal"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/externgnssLatNumber"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck"
tools:text="no signal" />
<EditText
android:id="@+id/externgnssSatCountNumber"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="128dp"
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false"
android:inputType="number"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/externgnssLongNumber"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck"
tools:text="no signal" />
<TextView
android:id="@+id/diffGNSSNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="450dp"
android:clickable="false"
android:text="GNSS difference"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/diffGNSSDistanceTextView"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_marginStart="20dp"
android:text="Distance:"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="@+id/diffGNSSDistanceNumber"
app:layout_constraintStart_toStartOf="parent" />
<EditText
android:id="@+id/diffGNSSDistanceNumber"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="120dp"
android:layout_marginTop="184dp"
android:clickable="false"
android:cursorVisible="false"
android:ems="16"
android:focusable="false"
android:focusableInTouchMode="false"
android:inputType="numberDecimal"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/externgnssNameTextView"
tools:ignore="SpeakableTextPresentCheck,TouchTargetSizeCheck"
tools:text="no signal" />
</androidx.constraintlayout.widget.ConstraintLayout>