Simplify the project and adapt to thee GPS device coded in Zephyr
parent
2732d2d6f9
commit
12d8046c5c
|
@ -28,6 +28,7 @@ dependencies {
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||||
implementation 'com.android.support:appcompat-v7:28.0.0'
|
implementation 'com.android.support:appcompat-v7:28.0.0'
|
||||||
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
||||||
|
implementation 'com.github.Jasonchenlijian:FastBle:2.4.0'
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
androidTestImplementation 'com.android.support.test:runner:1.0.2'
|
||||||
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
|
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
|
||||||
|
|
Binary file not shown.
|
@ -16,7 +16,9 @@
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
<activity android:name=".MainActivity">
|
<activity android:name=".MainActivity"
|
||||||
|
android:launchMode="singleTask"
|
||||||
|
>
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
||||||
|
@ -24,7 +26,6 @@
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<service android:name=".BLEMockLocationService" ></service>
|
<service android:name=".BLEMockLocationService" ></service>
|
||||||
<service android:name=".BLEHRService" ></service>
|
|
||||||
<receiver android:name=".TaskerReceiver">
|
<receiver android:name=".TaskerReceiver">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="net.nigreon.blegps.TASKER_COMMAND" />
|
<action android:name="net.nigreon.blegps.TASKER_COMMAND" />
|
||||||
|
|
|
@ -1,224 +0,0 @@
|
||||||
package net.nigreon.blegps
|
|
||||||
|
|
||||||
import android.app.NotificationChannel
|
|
||||||
import android.app.NotificationManager
|
|
||||||
import android.app.Service
|
|
||||||
import android.bluetooth.BluetoothGatt
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Binder
|
|
||||||
import android.os.Build
|
|
||||||
import android.os.IBinder
|
|
||||||
import android.support.v4.app.NotificationCompat
|
|
||||||
import android.support.v4.content.LocalBroadcastManager
|
|
||||||
import android.util.Log
|
|
||||||
import com.clj.fastble.BleManager
|
|
||||||
import com.clj.fastble.callback.BleGattCallback
|
|
||||||
import com.clj.fastble.callback.BleNotifyCallback
|
|
||||||
import com.clj.fastble.callback.BleWriteCallback
|
|
||||||
import com.clj.fastble.data.BleDevice
|
|
||||||
import com.clj.fastble.exception.BleException
|
|
||||||
import java.nio.ByteBuffer
|
|
||||||
import java.nio.ByteOrder
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class BLEHRService : Service() {
|
|
||||||
private val LOG_TAG = "BLEHRService"
|
|
||||||
private val CHANNEL_ID = "NotifID2"
|
|
||||||
private val binder = sBinder()
|
|
||||||
|
|
||||||
val timerActivity = Timer()
|
|
||||||
|
|
||||||
private lateinit var bleDevice: BleDevice
|
|
||||||
private val serviceHeartRateUuid: String = "0000180d-0000-1000-8000-00805f9b34fb"
|
|
||||||
private val characteristicHRControlPointUuid: String = "00002a39-0000-1000-8000-00805f9b34fb"
|
|
||||||
private val characteristicHRMeasurementUuid: String = "00002a37-0000-1000-8000-00805f9b34fb"
|
|
||||||
|
|
||||||
private fun initNotificationHR() {
|
|
||||||
BleManager.getInstance().notify(
|
|
||||||
bleDevice,
|
|
||||||
serviceHeartRateUuid,
|
|
||||||
characteristicHRMeasurementUuid,
|
|
||||||
object : BleNotifyCallback() {
|
|
||||||
override fun onNotifySuccess() {
|
|
||||||
Log.v(LOG_TAG, "Notify HR Success")
|
|
||||||
//initNotificationPressure()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onNotifyFailure(exception: BleException) {
|
|
||||||
Log.v(LOG_TAG, "BLE Notify HR Failure $exception")
|
|
||||||
//initNotificationPressure()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCharacteristicChanged(data: ByteArray) {
|
|
||||||
//Log.v(LOG_TAG, "Notify Temperature Characteristic changed")
|
|
||||||
val buffer = ByteBuffer.wrap(data)
|
|
||||||
buffer.order(ByteOrder.LITTLE_ENDIAN)
|
|
||||||
//texttemp.text = buffer.float.toString()
|
|
||||||
LocalBroadcastManager.getInstance(baseContext).sendBroadcast(
|
|
||||||
Intent(ServicesConstants.BROADCAST_FILTER.FILTERBTHRM).putExtra(ServicesConstants.BROADCAST_KEY.KEYBTHRM, buffer.get(1))
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun startHRBLE() {
|
|
||||||
BleManager.getInstance().connect("CC:2C:24:71:9C:BC", object : BleGattCallback() {
|
|
||||||
override fun onStartConnect() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onConnectFail(bleDevice: BleDevice, exception: BleException) {
|
|
||||||
Log.v(LOG_TAG, "BLE HR Connection Failed $exception")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onConnectSuccess(
|
|
||||||
bleDeviceConnect: BleDevice,
|
|
||||||
gattConnect: BluetoothGatt,
|
|
||||||
status: Int
|
|
||||||
) {
|
|
||||||
Log.v(LOG_TAG, "BLE HR Connection OK")
|
|
||||||
LocalBroadcastManager.getInstance(baseContext).sendBroadcast(
|
|
||||||
Intent(ServicesConstants.BROADCAST_FILTER.FILTERBTHR).putExtra(
|
|
||||||
ServicesConstants.BROADCAST_KEY.KEYBTSTATUSHR,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
)
|
|
||||||
bleDevice = bleDeviceConnect
|
|
||||||
|
|
||||||
initNotificationHR()
|
|
||||||
|
|
||||||
val t = object : TimerTask() {
|
|
||||||
override fun run() {
|
|
||||||
startHRBLEActivity()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
timerActivity.scheduleAtFixedRate(t, 0, 9500)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDisConnected(
|
|
||||||
isActiveDisConnected: Boolean,
|
|
||||||
bleDevice: BleDevice,
|
|
||||||
gatt: BluetoothGatt,
|
|
||||||
status: Int
|
|
||||||
) {
|
|
||||||
LocalBroadcastManager.getInstance(baseContext).sendBroadcast(
|
|
||||||
Intent(ServicesConstants.BROADCAST_FILTER.FILTERBTHR).putExtra(
|
|
||||||
ServicesConstants.BROADCAST_KEY.KEYBTSTATUSHR,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
timerActivity.cancel()
|
|
||||||
Log.v(LOG_TAG, "BLE HR Disconnected")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun stopHRBLE() {
|
|
||||||
LocalBroadcastManager.getInstance(baseContext).sendBroadcast(
|
|
||||||
Intent(ServicesConstants.BROADCAST_FILTER.FILTERBTHR).putExtra(ServicesConstants.BROADCAST_KEY.KEYBTSTATUSHR, false)
|
|
||||||
)
|
|
||||||
|
|
||||||
BleManager.getInstance().disconnect(bleDevice)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun startHRBLEActivity() {
|
|
||||||
val data: ByteArray = byteArrayOf(0x15,0x01,0x01)
|
|
||||||
BleManager.getInstance().write(
|
|
||||||
bleDevice,
|
|
||||||
serviceHeartRateUuid,
|
|
||||||
characteristicHRControlPointUuid,
|
|
||||||
data,
|
|
||||||
object : BleWriteCallback() {
|
|
||||||
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray) {
|
|
||||||
//Log.v(LOG_TAG, "Start Activity sended")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onWriteFailure(exception: BleException) {
|
|
||||||
Log.v(LOG_TAG, "Start Activity Failure $exception")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun stopHRBLEActivity() {
|
|
||||||
val data: ByteArray = byteArrayOf(0x15,0x01,0x00)
|
|
||||||
BleManager.getInstance().write(
|
|
||||||
bleDevice,
|
|
||||||
serviceHeartRateUuid,
|
|
||||||
characteristicHRControlPointUuid,
|
|
||||||
data,
|
|
||||||
object : BleWriteCallback() {
|
|
||||||
override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray) {
|
|
||||||
Log.v(LOG_TAG, "Stop Activity sended")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onWriteFailure(exception: BleException) {
|
|
||||||
Log.v(LOG_TAG, "Stop Activity send Failure $exception")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
|
|
||||||
if(intent.action == ServicesConstants.HRSERVICEACTION.STARTFOREGROUND_ACTION) {
|
|
||||||
Log.i(LOG_TAG, "Received Start Foreground Intent ")
|
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
||||||
// Create the NotificationChannel
|
|
||||||
val name = "ChannelName"
|
|
||||||
val descriptionText = "ChannelDescription"
|
|
||||||
val importance = NotificationManager.IMPORTANCE_DEFAULT
|
|
||||||
val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
|
|
||||||
mChannel.description = descriptionText
|
|
||||||
// Register the channel with the system; you can't change the importance
|
|
||||||
// or other notification behaviors after this
|
|
||||||
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
|
|
||||||
notificationManager.createNotificationChannel(mChannel)
|
|
||||||
}
|
|
||||||
|
|
||||||
var notification = NotificationCompat.Builder(this, CHANNEL_ID)
|
|
||||||
.setSmallIcon(R.drawable.ic_launcher_foreground)
|
|
||||||
.setContentTitle("BLE HR")
|
|
||||||
.setContentText("BLE HR active")
|
|
||||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
|
||||||
//.setContentIntent(pendingIntent)
|
|
||||||
.build()
|
|
||||||
|
|
||||||
//pBLE = BLEProvider(application, baseContext)
|
|
||||||
startHRBLE()
|
|
||||||
|
|
||||||
startForeground(ServicesConstants.NOTIFICATION_ID.FOREGROUND_HR_SERVICE,notification)
|
|
||||||
} else if(intent.action == ServicesConstants.HRSERVICEACTION.STOPFOREGROUND_ACTION) {
|
|
||||||
Log.i(LOG_TAG, "Received Stop Foreground Intent ")
|
|
||||||
//pBLE.disconnectBLE()
|
|
||||||
stopHRBLE()
|
|
||||||
stopForeground(true)
|
|
||||||
stopSelf()
|
|
||||||
}
|
|
||||||
return START_STICKY
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroy() {
|
|
||||||
super.onDestroy()
|
|
||||||
Log.i(LOG_TAG, "In onDestroy")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBind(intent: Intent): IBinder? {
|
|
||||||
Log.v(LOG_TAG, "in onBind")
|
|
||||||
return binder
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRebind(intent: Intent) {
|
|
||||||
Log.v(LOG_TAG, "in onRebind")
|
|
||||||
super.onRebind(intent)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onUnbind(intent: Intent): Boolean {
|
|
||||||
Log.v(LOG_TAG, "in onUnbind")
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
inner class sBinder : Binder() {
|
|
||||||
// Return this instance of LocalService so clients can call public methods
|
|
||||||
fun getService(): BLEHRService = this@BLEHRService
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,15 +2,14 @@ package net.nigreon.blegps
|
||||||
|
|
||||||
import android.app.NotificationChannel
|
import android.app.NotificationChannel
|
||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
|
import android.app.PendingIntent
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.BroadcastReceiver
|
import android.content.*
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.IntentFilter
|
|
||||||
import android.location.LocationManager
|
import android.location.LocationManager
|
||||||
import android.os.*
|
import android.os.*
|
||||||
import android.support.v4.app.NotificationCompat
|
import android.support.v4.app.NotificationCompat
|
||||||
import android.support.v4.content.LocalBroadcastManager
|
import android.support.v4.content.LocalBroadcastManager
|
||||||
|
import android.support.v7.app.AppCompatActivity
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileNotFoundException
|
import java.io.FileNotFoundException
|
||||||
|
@ -31,12 +30,11 @@ class BLEMockLocationService : Service() {
|
||||||
private lateinit var mockGPS: MockLocationProvider
|
private lateinit var mockGPS: MockLocationProvider
|
||||||
private var locationReceived = false
|
private var locationReceived = false
|
||||||
private var qualityReceived = false
|
private var qualityReceived = false
|
||||||
private var gpsverbose = false
|
|
||||||
private var gpxopened = false
|
|
||||||
private var hrenable = false
|
|
||||||
private var tempenable = false
|
private var tempenable = false
|
||||||
private lateinit var gpxoutputstream: FileOutputStream
|
private lateinit var gpxoutputstream: FileOutputStream
|
||||||
|
|
||||||
|
private lateinit var sharedPreferences: SharedPreferences
|
||||||
|
|
||||||
var gpsConf: GPSConfiguration = GPSConfiguration()
|
var gpsConf: GPSConfiguration = GPSConfiguration()
|
||||||
|
|
||||||
// Location
|
// Location
|
||||||
|
@ -50,11 +48,8 @@ class BLEMockLocationService : Service() {
|
||||||
private var currentEVPE: Float = -1.0f
|
private var currentEVPE: Float = -1.0f
|
||||||
private var currentHDOP: Float = -1.0f
|
private var currentHDOP: Float = -1.0f
|
||||||
private var currentVDOP: Float = -1.0f
|
private var currentVDOP: Float = -1.0f
|
||||||
private var currentSatview: Byte = -1
|
|
||||||
private var currentSatused: Byte = -1
|
|
||||||
private var currentElevationGPS: Double = -1.0
|
private var currentElevationGPS: Double = -1.0
|
||||||
|
|
||||||
private var currentHR: Byte = 0
|
|
||||||
private var currentTemperature: Float = 0.0f
|
private var currentTemperature: Float = 0.0f
|
||||||
|
|
||||||
private val binder = sBinder()
|
private val binder = sBinder()
|
||||||
|
@ -70,7 +65,6 @@ class BLEMockLocationService : Service() {
|
||||||
currentHeading = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYLOCATIONHEADING,-1.0f)
|
currentHeading = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYLOCATIONHEADING,-1.0f)
|
||||||
mockGPS.pushLocation(currentLatitude,currentLongitude,currentElevation, currentSpeed, currentHeading, currentEHPE)
|
mockGPS.pushLocation(currentLatitude,currentLongitude,currentElevation, currentSpeed, currentHeading, currentEHPE)
|
||||||
locationReceived = true
|
locationReceived = true
|
||||||
storeGPX()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun qualityChanged(intent: Intent)
|
fun qualityChanged(intent: Intent)
|
||||||
|
@ -80,16 +74,8 @@ class BLEMockLocationService : Service() {
|
||||||
currentEVPE = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEVPE,-1.0f)
|
currentEVPE = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEVPE,-1.0f)
|
||||||
currentHDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYHDOP,-1.0f)
|
currentHDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYHDOP,-1.0f)
|
||||||
currentVDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYVDOP,-1.0f)
|
currentVDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYVDOP,-1.0f)
|
||||||
currentSatview = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATVIEW,-1)
|
|
||||||
currentSatused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATUSED,-1)
|
|
||||||
currentElevationGPS = intent.getDoubleExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYELEGPS,-1.0)
|
currentElevationGPS = intent.getDoubleExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYELEGPS,-1.0)
|
||||||
qualityReceived = true
|
qualityReceived = true
|
||||||
storeGPX()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun HRChanged(intent: Intent)
|
|
||||||
{
|
|
||||||
currentHR = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYBTHRM,-1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun bmpStatusChanged(intent: Intent)
|
fun bmpStatusChanged(intent: Intent)
|
||||||
|
@ -105,71 +91,25 @@ class BLEMockLocationService : Service() {
|
||||||
fun taskerChanged(bundle: Bundle) {
|
fun taskerChanged(bundle: Bundle) {
|
||||||
Log.v(LOG_TAG, "taskerChanged")
|
Log.v(LOG_TAG, "taskerChanged")
|
||||||
if(bundle.containsKey(ServicesConstants.BROADCAST_KEY.KEYBOOST)) {
|
if(bundle.containsKey(ServicesConstants.BROADCAST_KEY.KEYBOOST)) {
|
||||||
/*if (bundle.getBoolean(ServicesConstants.BROADCAST_KEY.KEYBOOST)) {
|
if (bundle.getBoolean(ServicesConstants.BROADCAST_KEY.KEYBOOST)) {
|
||||||
//gpsConf.gpsBoost = intent.getBooleanExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, false)
|
//gpsConf.gpsBoost = intent.getBooleanExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, false)
|
||||||
gpsConf.gpsBoost = true
|
sendConfBLE(2)
|
||||||
} else {
|
} else {
|
||||||
gpsConf.gpsBoost = false
|
sendConfBLE(1)
|
||||||
}*/
|
|
||||||
gpsConf.gpsBoost = bundle.getBoolean(ServicesConstants.BROADCAST_KEY.KEYBOOST)
|
|
||||||
sendConfBLE(gpsConf)
|
|
||||||
Log.v(LOG_TAG, "Received Tasker Intent : Boost ${gpsConf.gpsBoost}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun storeGPX()
|
|
||||||
{
|
|
||||||
if(gpxopened) {
|
|
||||||
if(!gpsverbose and locationReceived)
|
|
||||||
{
|
|
||||||
//writeGPX("${SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(Date())} $currentLatitude $currentLongitude $currentElevation m\n")
|
|
||||||
writeGPX("<trkpt lat=\"$currentLatitude\" lon=\"$currentLongitude\"><ele>$currentElevation</ele><time>${SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(Date())}</time></trkpt>\n")
|
|
||||||
locationReceived = false
|
|
||||||
qualityReceived = false
|
|
||||||
} else if(gpsverbose and locationReceived and qualityReceived) {
|
|
||||||
//writeGPX("${SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(Date())} $currentLatitude $currentLongitude $currentElevation m\n")
|
|
||||||
//writeGPX("$currentEHPE m $currentEVPE m $currentHDOP $currentVDOP $currentSatused/$currentSatview $currentElevationGPS m\n")
|
|
||||||
//if(hrenable) { writeGPX("$currentHR bpm\n")}
|
|
||||||
//if(tempenable) { writeGPX("${currentTemperature}°C\n")}
|
|
||||||
writeGPX("<trkpt lat=\"$currentLatitude\" lon=\"$currentLongitude\"><ele>$currentElevation</ele><time>${SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(Date())}</time>\n" +
|
|
||||||
"<extensions>\n")
|
|
||||||
if(hrenable or tempenable)
|
|
||||||
{
|
|
||||||
writeGPX("<gpxtpx:TrackPointExtension>")
|
|
||||||
if(hrenable)
|
|
||||||
{
|
|
||||||
writeGPX("<gpxtpx:atemp>$currentHR</gpxtpx:atemp>")
|
|
||||||
}
|
|
||||||
if(tempenable)
|
|
||||||
{
|
|
||||||
writeGPX("<gpxtpx:atemp>$currentTemperature</gpxtpx:atemp>")
|
|
||||||
}
|
|
||||||
writeGPX("</gpxtpx:TrackPointExtension>\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
writeGPX("<blegps:BLEGPSExtension><blegps:ehpe>$currentEHPE</blegps:ehpe><blegps:evpe>$currentEVPE</blegps:evpe><blegps:hdop>$currentHDOP</blegps:hdop><blegps:vdop>$currentVDOP</blegps:vdop><blegps:satused>$currentSatused</blegps:satused><blegps:satview>$currentSatview</blegps:satview><blegps:gpselevation>$currentElevationGPS</blegps:gpselevation></blegps:BLEGPSExtension>\n")
|
|
||||||
writeGPX("</extensions>\n</trkpt>\n")
|
|
||||||
locationReceived = false
|
|
||||||
qualityReceived = false
|
|
||||||
}
|
}
|
||||||
}
|
//gpsConf.gpsBoost = bundle.getBoolean(ServicesConstants.BROADCAST_KEY.KEYBOOST)
|
||||||
}
|
|
||||||
|
|
||||||
fun writeGPX(str: String)
|
//Log.v(LOG_TAG, "Received Tasker Intent : Boost ${gpsConf.gpsBoost}")
|
||||||
{
|
|
||||||
try {
|
|
||||||
gpxoutputstream.write(str.toByteArray())
|
|
||||||
} catch (e: FileNotFoundException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
} catch (e: IOException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
|
||||||
|
sharedPreferences = baseContext.getSharedPreferences("blegps_config",
|
||||||
|
AppCompatActivity.MODE_PRIVATE
|
||||||
|
)
|
||||||
|
|
||||||
mockGPS = MockLocationProvider(LocationManager.GPS_PROVIDER, baseContext)
|
mockGPS = MockLocationProvider(LocationManager.GPS_PROVIDER, baseContext)
|
||||||
|
|
||||||
val brReceiver = object : BroadcastReceiver() {
|
val brReceiver = object : BroadcastReceiver() {
|
||||||
|
@ -177,7 +117,6 @@ class BLEMockLocationService : Service() {
|
||||||
when (intent?.action) {
|
when (intent?.action) {
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERLOCATION -> locationChanged(intent)
|
ServicesConstants.BROADCAST_FILTER.FILTERLOCATION -> locationChanged(intent)
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERQUALITY-> qualityChanged(intent)
|
ServicesConstants.BROADCAST_FILTER.FILTERQUALITY-> qualityChanged(intent)
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERBTHRM-> HRChanged(intent)
|
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERTEMP-> tempChanged(intent)
|
ServicesConstants.BROADCAST_FILTER.FILTERTEMP-> tempChanged(intent)
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERBMP-> bmpStatusChanged(intent)
|
ServicesConstants.BROADCAST_FILTER.FILTERBMP-> bmpStatusChanged(intent)
|
||||||
|
|
||||||
|
@ -190,7 +129,6 @@ class BLEMockLocationService : Service() {
|
||||||
val manager = LocalBroadcastManager.getInstance(this)
|
val manager = LocalBroadcastManager.getInstance(this)
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERLOCATION))
|
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERLOCATION))
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERQUALITY))
|
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERQUALITY))
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBTHRM))
|
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERTEMP))
|
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERTEMP))
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBMP))
|
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBMP))
|
||||||
//pBLE.registerBMP()
|
//pBLE.registerBMP()
|
||||||
|
@ -200,11 +138,10 @@ class BLEMockLocationService : Service() {
|
||||||
if(intent.action == ServicesConstants.MOCKSERVICEACTION.STARTFOREGROUND_ACTION) {
|
if(intent.action == ServicesConstants.MOCKSERVICEACTION.STARTFOREGROUND_ACTION) {
|
||||||
Log.i(LOG_TAG, "Received Start Foreground Intent ")
|
Log.i(LOG_TAG, "Received Start Foreground Intent ")
|
||||||
|
|
||||||
// val intentNotif = Intent(this, MainActivity::class.java)
|
val startIntent = Intent(this, MainActivity::class.java)
|
||||||
// intentNotif.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
startIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
|
||||||
// intentNotif.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACT
|
val contentIntent = PendingIntent.getActivity(this, 0, startIntent,
|
||||||
|
PendingIntent.FLAG_UPDATE_CURRENT)
|
||||||
//val pendingIntent = PendingIntent.getActivity(this, 0, intentNotif, 0)
|
|
||||||
|
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
@ -225,7 +162,8 @@ class BLEMockLocationService : Service() {
|
||||||
.setContentTitle("BLE GPS")
|
.setContentTitle("BLE GPS")
|
||||||
.setContentText("BLE & Mock active")
|
.setContentText("BLE & Mock active")
|
||||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||||
//.setContentIntent(pendingIntent)
|
.setContentIntent(contentIntent)
|
||||||
|
.setAutoCancel(false)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
pBLE = BLEProvider(application, baseContext)
|
pBLE = BLEProvider(application, baseContext)
|
||||||
|
@ -239,7 +177,9 @@ class BLEMockLocationService : Service() {
|
||||||
stopSelf()
|
stopSelf()
|
||||||
} else if(intent.action == ServicesConstants.MOCKSERVICEACTION.TASKER_ACTION){
|
} else if(intent.action == ServicesConstants.MOCKSERVICEACTION.TASKER_ACTION){
|
||||||
Log.i(LOG_TAG, "intent action : ${intent.action}")
|
Log.i(LOG_TAG, "intent action : ${intent.action}")
|
||||||
taskerChanged(intent.extras)
|
if(this::pBLE.isInitialized) {
|
||||||
|
taskerChanged(intent.extras)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return START_STICKY
|
return START_STICKY
|
||||||
}
|
}
|
||||||
|
@ -271,103 +211,25 @@ class BLEMockLocationService : Service() {
|
||||||
pBLE.sendCalibrate(buffer.array())
|
pBLE.sendCalibrate(buffer.array())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun HRStatusChanged(enable: Boolean)
|
//fun sendConfBLE(bmpnrf: Boolean, bmpble: Boolean, bmp2gps: Boolean, exttemp: Boolean, gpsble: Boolean, gpsbleverb: Boolean, gpsserial: Boolean, gpsmode: Int, gpspoller: Short, gpssendbt: Short, bmppoller: Short) {
|
||||||
{
|
fun sendConfBLE(mode: Int) {
|
||||||
hrenable = enable
|
val buffer = ByteBuffer.allocate(2)
|
||||||
}
|
|
||||||
|
|
||||||
fun openGPX(datefilename: String) {
|
|
||||||
//val datefilename: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
|
|
||||||
var gpxfilename = File(
|
|
||||||
Environment.getExternalStorageDirectory().path + File.separator + "BTGPS",
|
|
||||||
datefilename + ".gpx"
|
|
||||||
)
|
|
||||||
var gpxdir = File(Environment.getExternalStorageDirectory().path + File.separator + "BTGPS")
|
|
||||||
var success = true;
|
|
||||||
if (!gpxdir.exists()) {
|
|
||||||
success = gpxdir.mkdir();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (success) {
|
|
||||||
if(!gpxfilename.exists()) {
|
|
||||||
try {
|
|
||||||
gpxoutputstream = FileOutputStream(gpxfilename, true)
|
|
||||||
//val gpxheader = "GPX Header\n"
|
|
||||||
val gpxheader =
|
|
||||||
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>\n" +
|
|
||||||
"<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" " +
|
|
||||||
"xmlns:gpxtpx=\"http://www.garmin.com/xmlschemas/TrackPointExtension/v1\" " +
|
|
||||||
"xmlns:blegps=\"https://www.nigreon.net\"" +
|
|
||||||
">\n" +
|
|
||||||
"<metadata>" +
|
|
||||||
"<name>${datefilename}</name>" +
|
|
||||||
"<desc>${datefilename}</desc>\n" +
|
|
||||||
"<time>${SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(Date())}</time>\n" +
|
|
||||||
"</metadata>\n" +
|
|
||||||
"<trk>\n" +
|
|
||||||
"<name>${datefilename}</name>\n" +
|
|
||||||
"<trkseg>\n"
|
|
||||||
writeGPX(gpxheader)
|
|
||||||
} catch (e: FileNotFoundException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
} catch (e: IOException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
gpxoutputstream = FileOutputStream(gpxfilename, true)
|
|
||||||
} catch (e: FileNotFoundException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
} catch (e: IOException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
gpxopened = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun closeGPX()
|
|
||||||
{
|
|
||||||
//val gpxfooter = "GPX Footer\n"
|
|
||||||
val gpxfooter = "</trkseg></trk></gpx>\n"
|
|
||||||
writeGPX(gpxfooter)
|
|
||||||
gpxoutputstream.close()
|
|
||||||
gpxopened = false
|
|
||||||
}
|
|
||||||
|
|
||||||
//fun sendConfBLE(bmpnrf: Boolean, bmpble: Boolean, bmp2gps: Boolean, exttemp: Boolean, gpsble: Boolean, gpsbleverb: Boolean, gpsserial: Boolean, gpsmode: Int, gpspoller: Short, gpssendbt: Short, bmppoller: Short) {
|
|
||||||
fun sendConfBLE(gpsConfNew: GPSConfiguration) {
|
|
||||||
gpsConf = gpsConfNew
|
|
||||||
val buffer = ByteBuffer.allocate(8)
|
|
||||||
buffer.order(ByteOrder.LITTLE_ENDIAN)
|
buffer.order(ByteOrder.LITTLE_ENDIAN)
|
||||||
var activateByte1: Byte = 0
|
var activateByte1: Byte = 0
|
||||||
var activateByte2: Byte = 0
|
var activateByte2: Byte = 0
|
||||||
|
|
||||||
if(gpsConf.bmpNrf) { activateByte1 = activateByte1.or(0x01) }
|
if(sharedPreferences.getBoolean("swbmp2gps", false)) { activateByte1 = activateByte1.or(0x01) }
|
||||||
if(gpsConf.bmpBT) { activateByte1 = activateByte1.or(0x02) }
|
if(mode == 1) {
|
||||||
if(gpsConf.bmp2gps) { activateByte1 = activateByte1.or(0x04) }
|
activateByte2 = activateByte2.or(0x01)
|
||||||
if(gpsConf.extTemp) { activateByte1 = activateByte1.or(0x08) }
|
} else if(mode == 2) {
|
||||||
|
activateByte2 = activateByte2.or(0x02)
|
||||||
if(gpsConf.gpsBLE) { activateByte2 = activateByte2.or(0x01) }
|
} else if(mode == 3) {
|
||||||
if(gpsConf.gpsVerbose) { activateByte2 = activateByte2.or(0x02) }
|
activateByte2 = activateByte2.or(0x04)
|
||||||
if(gpsConf.gpsSerial) { activateByte2 = activateByte2.or(0x04) }
|
|
||||||
if(gpsConf.gpsMode == 1 || gpsConf.gpsBoost) {
|
|
||||||
activateByte2 = activateByte2.or(0x08)
|
|
||||||
} else if(gpsConf.gpsMode == 2) {
|
|
||||||
activateByte2 = activateByte2.or(0x10)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer.put(activateByte1)
|
buffer.put(activateByte1)
|
||||||
buffer.put(activateByte2)
|
buffer.put(activateByte2)
|
||||||
if(gpsConf.gpsBoost) {
|
|
||||||
buffer.putShort(4)
|
|
||||||
buffer.putShort(gpsConf.bmpPollerSend)
|
|
||||||
buffer.putShort(4)
|
|
||||||
} else {
|
|
||||||
buffer.putShort(gpsConf.gpsPollerSend)
|
|
||||||
buffer.putShort(gpsConf.bmpPollerSend)
|
|
||||||
buffer.putShort(gpsConf.gpsSendBTSend)
|
|
||||||
}
|
|
||||||
pBLE.sendConf(buffer.array())
|
pBLE.sendConf(buffer.array())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,19 +3,19 @@ import android.app.Application
|
||||||
import android.bluetooth.BluetoothGatt
|
import android.bluetooth.BluetoothGatt
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.SharedPreferences
|
||||||
import android.support.v4.content.LocalBroadcastManager
|
import android.support.v4.content.LocalBroadcastManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.clj.fastble.BleManager
|
import com.clj.fastble.BleManager
|
||||||
import com.clj.fastble.data.BleDevice
|
import com.clj.fastble.data.BleDevice
|
||||||
import com.clj.fastble.exception.BleException
|
import com.clj.fastble.exception.BleException
|
||||||
import com.clj.fastble.callback.BleGattCallback
|
|
||||||
import com.clj.fastble.callback.BleNotifyCallback
|
|
||||||
import com.clj.fastble.callback.BleReadCallback
|
|
||||||
import com.clj.fastble.callback.BleWriteCallback
|
|
||||||
import java.nio.ByteBuffer
|
import java.nio.ByteBuffer
|
||||||
import java.nio.ByteOrder
|
import java.nio.ByteOrder
|
||||||
import android.os.CountDownTimer
|
import android.os.CountDownTimer
|
||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
|
import android.support.v7.app.AppCompatActivity
|
||||||
|
import com.clj.fastble.callback.*
|
||||||
|
import com.clj.fastble.scan.BleScanRuleConfig
|
||||||
|
|
||||||
|
|
||||||
class BLEProvider(val application: Application, val baseContext: Context)
|
class BLEProvider(val application: Application, val baseContext: Context)
|
||||||
|
@ -36,13 +36,17 @@ class BLEProvider(val application: Application, val baseContext: Context)
|
||||||
private var connected = false
|
private var connected = false
|
||||||
private var reconnectcount = 0
|
private var reconnectcount = 0
|
||||||
|
|
||||||
|
|
||||||
private val LOG_TAG = "BLEProvider"
|
private val LOG_TAG = "BLEProvider"
|
||||||
//private lateinit var baseContext: Context
|
//private lateinit var baseContext: Context
|
||||||
|
|
||||||
|
private lateinit var sharedPreferences: SharedPreferences
|
||||||
|
|
||||||
init
|
init
|
||||||
{
|
{
|
||||||
|
sharedPreferences = baseContext.getSharedPreferences("blegps_config",
|
||||||
|
AppCompatActivity.MODE_PRIVATE
|
||||||
|
)
|
||||||
|
BleManager.getInstance().enableBluetooth()
|
||||||
connectBLE()
|
connectBLE()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,7 +54,27 @@ class BLEProvider(val application: Application, val baseContext: Context)
|
||||||
Handler().postDelayed(function, delay)
|
Handler().postDelayed(function, delay)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun connectBLE()
|
private fun connectBLE() {
|
||||||
|
val scanRuleConfig = BleScanRuleConfig.Builder()
|
||||||
|
//.setServiceUuids(serviceUuids)
|
||||||
|
//.setDeviceName(true, names)
|
||||||
|
//.setDeviceMac(mac)
|
||||||
|
//.setAutoConnect(isAutoConnect)
|
||||||
|
.setScanTimeOut(5000)
|
||||||
|
.build()
|
||||||
|
BleManager.getInstance().initScanRule(scanRuleConfig)
|
||||||
|
|
||||||
|
BleManager.getInstance().scan(object : BleScanCallback() {
|
||||||
|
override fun onScanStarted(success: Boolean) {}
|
||||||
|
override fun onScanning(bleDevice: BleDevice) {}
|
||||||
|
override fun onScanFinished(scanResultList: List<BleDevice>) {
|
||||||
|
connectBLE2()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun connectBLE2()
|
||||||
{
|
{
|
||||||
//BleManager.getInstance().init(application)
|
//BleManager.getInstance().init(application)
|
||||||
/*BleManager.getInstance()
|
/*BleManager.getInstance()
|
||||||
|
@ -59,7 +83,8 @@ class BLEProvider(val application: Application, val baseContext: Context)
|
||||||
|
|
||||||
//BleManager.getInstance().operateTimeout = 5000
|
//BleManager.getInstance().operateTimeout = 5000
|
||||||
//BleManager.getInstance().connect("24:6F:28:16:C1:F2", object : BleGattCallback() {
|
//BleManager.getInstance().connect("24:6F:28:16:C1:F2", object : BleGattCallback() {
|
||||||
BleManager.getInstance().connect("E9:8E:8A:12:6F:3F", object : BleGattCallback() {
|
var macaddr = sharedPreferences.getString("macaddr", null)
|
||||||
|
BleManager.getInstance().connect(macaddr, object : BleGattCallback() {
|
||||||
override fun onStartConnect() {
|
override fun onStartConnect() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -266,17 +291,18 @@ class BLEProvider(val application: Application, val baseContext: Context)
|
||||||
val buffer = ByteBuffer.wrap(data)
|
val buffer = ByteBuffer.wrap(data)
|
||||||
buffer.order(ByteOrder.LITTLE_ENDIAN)
|
buffer.order(ByteOrder.LITTLE_ENDIAN)
|
||||||
//val flags = buffer.short
|
//val flags = buffer.short
|
||||||
val sat_view: Byte = buffer.get().toUByte().toByte()
|
//val sat_view: Byte = buffer.get().toUByte().toByte()
|
||||||
val sat_used: Byte = buffer.get().toUByte().toByte()
|
//val sat_used: Byte = buffer.get().toUByte().toByte()
|
||||||
val ehpe: Float = buffer.int.toUInt().toFloat()/100.0f
|
val ehpe: Float = buffer.int.toUInt().toFloat()/100.0f
|
||||||
val evpe: Float = buffer.int.toUInt().toFloat()/100.0f
|
val evpe: Float = buffer.int.toUInt().toFloat()/100.0f
|
||||||
val hdop: Float = buffer.get().toUByte().toByte()*2/10.0f
|
val hdop: Float = buffer.get().toUByte().toByte()*2/10.0f
|
||||||
val vdop: Float = buffer.get().toUByte().toByte()*2/10.0f
|
val vdop: Float = buffer.get().toUByte().toByte()*2/10.0f
|
||||||
val elevation_gps: Double = buffer.int/100.0
|
val elevation_gps: Double = buffer.int/100.0
|
||||||
Log.v(LOG_TAG, "PQ $sat_view $sat_used $ehpe $evpe $hdop $vdop $elevation_gps")
|
Log.v(LOG_TAG, "PQ $ehpe $evpe $hdop $vdop $elevation_gps")
|
||||||
LocalBroadcastManager.getInstance(baseContext).sendBroadcast(
|
LocalBroadcastManager.getInstance(baseContext).sendBroadcast(
|
||||||
Intent(ServicesConstants.BROADCAST_FILTER.FILTERQUALITY).putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATVIEW, sat_view)
|
Intent(ServicesConstants.BROADCAST_FILTER.FILTERQUALITY)
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATUSED, sat_used)
|
//.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATVIEW, sat_view)
|
||||||
|
//.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATUSED, sat_used)
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEHPE, ehpe)
|
.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEHPE, ehpe)
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEVPE, evpe)
|
.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEVPE, evpe)
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYHDOP, hdop)
|
.putExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYHDOP, hdop)
|
||||||
|
@ -308,13 +334,14 @@ class BLEProvider(val application: Application, val baseContext: Context)
|
||||||
val buffer = ByteBuffer.wrap(data)
|
val buffer = ByteBuffer.wrap(data)
|
||||||
buffer.order(ByteOrder.LITTLE_ENDIAN)
|
buffer.order(ByteOrder.LITTLE_ENDIAN)
|
||||||
LocalBroadcastManager.getInstance(baseContext).sendBroadcast(
|
LocalBroadcastManager.getInstance(baseContext).sendBroadcast(
|
||||||
Intent(ServicesConstants.BROADCAST_FILTER.FILTERSAT).putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSALL, buffer.get())
|
Intent(ServicesConstants.BROADCAST_FILTER.FILTERSAT)
|
||||||
|
//.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSALL, buffer.get())
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSUSED, buffer.get())
|
.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSUSED, buffer.get())
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASALL, buffer.get())
|
//.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASALL, buffer.get())
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASUSED, buffer.get())
|
//.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASUSED, buffer.get())
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSALL, buffer.get())
|
//.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSALL, buffer.get())
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSUSED, buffer.get())
|
.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSUSED, buffer.get())
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOALL, buffer.get())
|
//.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOALL, buffer.get())
|
||||||
.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOUSED, buffer.get())
|
.putExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOUSED, buffer.get())
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,6 @@
|
||||||
package net.nigreon.blegps
|
package net.nigreon.blegps
|
||||||
|
|
||||||
class GPSConfiguration {
|
class GPSConfiguration {
|
||||||
var bmpNrf: Boolean = false
|
|
||||||
var bmpBT: Boolean = false
|
|
||||||
var bmp2gps: Boolean = false
|
var bmp2gps: Boolean = false
|
||||||
var extTemp: Boolean = false
|
|
||||||
var gpsBLE: Boolean = false
|
|
||||||
var gpsVerbose: Boolean = false
|
|
||||||
var gpsSerial: Boolean = false
|
|
||||||
var gpsMode: Int = 0
|
var gpsMode: Int = 0
|
||||||
var gpsBoost: Boolean = false
|
|
||||||
var gpsPollerSend: Short = 0
|
|
||||||
var gpsSendBTSend: Short = 0
|
|
||||||
var bmpPollerSend: Short = 0
|
|
||||||
}
|
}
|
|
@ -35,17 +35,12 @@ class MainActivity : AppCompatActivity() {
|
||||||
private lateinit var mBoundService: BLEMockLocationService
|
private lateinit var mBoundService: BLEMockLocationService
|
||||||
var mServiceBound = false
|
var mServiceBound = false
|
||||||
|
|
||||||
private lateinit var mBoundServiceHR: BLEHRService
|
|
||||||
var mServiceBoundHR = false
|
|
||||||
|
|
||||||
var currentPressure: Int = -1
|
var currentPressure: Int = -1
|
||||||
var currentTemperature: Float = -1.0f
|
var currentTemperature: Float = -1.0f
|
||||||
var BTConnected = false
|
var BTConnected = false
|
||||||
var BTHRConnected = false
|
|
||||||
var lastLocation: Location = Location("LastLocation")
|
var lastLocation: Location = Location("LastLocation")
|
||||||
|
|
||||||
private lateinit var gpxfilename: String
|
var resumeActivityState: Boolean = true;
|
||||||
private var gpxopened = false
|
|
||||||
|
|
||||||
private lateinit var sharedPreferences: SharedPreferences
|
private lateinit var sharedPreferences: SharedPreferences
|
||||||
|
|
||||||
|
@ -70,16 +65,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
mServiceBound = false
|
mServiceBound = false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun disconnectBTHR()
|
|
||||||
{
|
|
||||||
Intent(this, BLEHRService::class.java).also { intent ->
|
|
||||||
intent.action = ServicesConstants.HRSERVICEACTION.STOPFOREGROUND_ACTION
|
|
||||||
startService(intent)
|
|
||||||
}
|
|
||||||
unbindService(mServiceConnectionHR)
|
|
||||||
mServiceBoundHR = false
|
|
||||||
}
|
|
||||||
|
|
||||||
fun filter01changed(intent: Intent)
|
fun filter01changed(intent: Intent)
|
||||||
{
|
{
|
||||||
Log.v(LOG_TAG, "Filter01 Broadcast received")
|
Log.v(LOG_TAG, "Filter01 Broadcast received")
|
||||||
|
@ -104,46 +89,19 @@ class MainActivity : AppCompatActivity() {
|
||||||
val connected = intent.getBooleanExtra(ServicesConstants.BROADCAST_KEY.KEYBTSTATUS,false)
|
val connected = intent.getBooleanExtra(ServicesConstants.BROADCAST_KEY.KEYBTSTATUS,false)
|
||||||
if(connected) {
|
if(connected) {
|
||||||
BTConnected=true
|
BTConnected=true
|
||||||
|
if(resumeActivityState == true) { sendGPSModeToBLEService(3) }
|
||||||
text01.text = "BT Connected"
|
text01.text = "BT Connected"
|
||||||
|
buttonconnectbt.text = "Disconnect"
|
||||||
Log.v(LOG_TAG, "BT Connected Broadcast received")
|
Log.v(LOG_TAG, "BT Connected Broadcast received")
|
||||||
mBoundService.HRStatusChanged(BTHRConnected)
|
|
||||||
sendConfToBLEService()
|
|
||||||
if(swlog2file.isChecked())
|
|
||||||
{
|
|
||||||
mBoundService.openGPX(gpxfilename)
|
|
||||||
gpxopened = true
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
text01.text = "BT Disconnected"
|
text01.text = "BT Disconnected"
|
||||||
|
buttonconnectbt.text = "Connect"
|
||||||
Log.v(LOG_TAG, "BT Disconnected Broadcast received")
|
Log.v(LOG_TAG, "BT Disconnected Broadcast received")
|
||||||
BTConnected=false
|
BTConnected=false
|
||||||
swblepower.setChecked(false)
|
|
||||||
}
|
}
|
||||||
writeBMPText()
|
writeBMPText()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun BTChangedHR(intent: Intent)
|
|
||||||
{
|
|
||||||
val connected = intent.getBooleanExtra(ServicesConstants.BROADCAST_KEY.KEYBTSTATUSHR,false)
|
|
||||||
if(connected) {
|
|
||||||
BTHRConnected=true
|
|
||||||
text01.text = "BT HR Connected"
|
|
||||||
Log.v(LOG_TAG, "BT HR Connected Broadcast received")
|
|
||||||
if(BTConnected) { mBoundService.HRStatusChanged(true) }
|
|
||||||
} else {
|
|
||||||
text01.text = "BT HR Disconnected"
|
|
||||||
Log.v(LOG_TAG, "BT HR Disconnected Broadcast received")
|
|
||||||
BTHRConnected=false
|
|
||||||
if(BTConnected) { mBoundService.HRStatusChanged(false) }
|
|
||||||
}
|
|
||||||
writeBMPText()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun BTChangedHRM(intent: Intent)
|
|
||||||
{
|
|
||||||
texthr.text = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYBTHRM,0).toString() + " bpm"
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun convertLatLon(latitude: Double, longitude: Double): String {
|
private fun convertLatLon(latitude: Double, longitude: Double): String {
|
||||||
val builder = StringBuilder()
|
val builder = StringBuilder()
|
||||||
|
|
||||||
|
@ -204,11 +162,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
textlocation.text = "${convertLatLon(currentLatitude, currentLongitude)} $currentElevation m \n $currentLatitude $currentLongitude $currentElevation m"
|
textlocation.text = "${convertLatLon(currentLatitude, currentLongitude)} $currentElevation m \n $currentLatitude $currentLongitude $currentElevation m"
|
||||||
textspeedheading.text = "$currentSpeed km/h $currentHeading° ${currentLocation.distanceTo(lastLocation)} m"
|
textspeedheading.text = "$currentSpeed km/h $currentHeading° ${currentLocation.distanceTo(lastLocation)} m"
|
||||||
lastLocation = currentLocation
|
lastLocation = currentLocation
|
||||||
|
|
||||||
if(swblegpsverbose.isChecked == false) {
|
|
||||||
textquality.text = "$currentEHPE m"
|
|
||||||
textsatellites.text = "Satellites in verbose"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun writeQualityText(intent: Intent)
|
fun writeQualityText(intent: Intent)
|
||||||
|
@ -217,23 +170,16 @@ class MainActivity : AppCompatActivity() {
|
||||||
val currentEVPE = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEVPE,-1.0f)
|
val currentEVPE = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYEVPE,-1.0f)
|
||||||
val currentHDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYHDOP,-1.0f)
|
val currentHDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYHDOP,-1.0f)
|
||||||
val currentVDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYVDOP,-1.0f)
|
val currentVDOP = intent.getFloatExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYVDOP,-1.0f)
|
||||||
val sat_view = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATVIEW,-1)
|
|
||||||
val sat_used = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYSATUSED,-1)
|
|
||||||
val elevation_gps = intent.getDoubleExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYELEGPS,-1.0)
|
val elevation_gps = intent.getDoubleExtra(ServicesConstants.BROADCAST_KEY.KEYQUALITYELEGPS,-1.0)
|
||||||
textquality.text = "$currentEHPE m $currentEVPE m $currentHDOP $currentVDOP $sat_used/$sat_view $elevation_gps m"
|
textquality.text = "$currentEHPE m $currentEVPE m $currentHDOP $currentVDOP $elevation_gps m"
|
||||||
}
|
}
|
||||||
|
|
||||||
fun writeSatText(intent: Intent)
|
fun writeSatText(intent: Intent)
|
||||||
{
|
{
|
||||||
val gpsall = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSALL,-1)
|
|
||||||
val gpsused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSUSED,-1)
|
val gpsused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGPSUSED,-1)
|
||||||
val sbasall = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASALL,-1)
|
|
||||||
val sbasused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATSBASUSED,-1)
|
|
||||||
val glonassall = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSALL,-1)
|
|
||||||
val glonassused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSUSED,-1)
|
val glonassused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGLONASSUSED,-1)
|
||||||
val galileoall = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOALL,-1)
|
|
||||||
val galileoused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOUSED,-1)
|
val galileoused = intent.getByteExtra(ServicesConstants.BROADCAST_KEY.KEYSATGALILEOUSED,-1)
|
||||||
textsatellites.text = "GPS: $gpsused/$gpsall SBAS: $sbasused/$sbasall GLONASS: $glonassused/$glonassall GALILEO: $galileoused/$galileoall"
|
textsatellites.text = "GPS: $gpsused GLONASS: $glonassused GALILEO: $galileoused"
|
||||||
}
|
}
|
||||||
private fun sendCalibrateToBLEService()
|
private fun sendCalibrateToBLEService()
|
||||||
{
|
{
|
||||||
|
@ -242,72 +188,14 @@ class MainActivity : AppCompatActivity() {
|
||||||
mBoundService.sendCalibrateBLE(calibrateval)
|
mBoundService.sendCalibrateBLE(calibrateval)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private fun sendConfToBLEService()
|
|
||||||
|
private fun sendGPSModeToBLEService(gpsmode: Int)
|
||||||
{
|
{
|
||||||
if(BTConnected) {
|
if(BTConnected) {
|
||||||
val bmppollersend: Float = resources.getStringArray(R.array.pollerval)[spinbmp.selectedItemPosition].toFloat() * 4
|
mBoundService.sendConfBLE(gpsmode)
|
||||||
var gpspollersend: Float
|
|
||||||
var gpssendbtsend: Float
|
|
||||||
var gpsmode: Int
|
|
||||||
|
|
||||||
/*if(swblegpsboost.isChecked)
|
|
||||||
{
|
|
||||||
gpspollersend = 4f
|
|
||||||
gpssendbtsend = 4f
|
|
||||||
gpsmode = 1
|
|
||||||
} else {*/
|
|
||||||
gpspollersend = resources.getStringArray(R.array.pollerval)[spingps.selectedItemPosition].toFloat() * 4
|
|
||||||
gpssendbtsend = resources.getStringArray(R.array.pollerval)[spingpssendbt.selectedItemPosition].toFloat() * 4
|
|
||||||
gpsmode = spingpsmode.selectedItemPosition
|
|
||||||
//}
|
|
||||||
|
|
||||||
var gpsConf: GPSConfiguration = GPSConfiguration()
|
|
||||||
|
|
||||||
gpsConf.bmpNrf = swbmpnrf.isChecked
|
|
||||||
gpsConf.bmpBT = swbmpbt.isChecked
|
|
||||||
gpsConf.bmp2gps = swbmp2gps.isChecked
|
|
||||||
gpsConf.extTemp = swexttemp.isChecked
|
|
||||||
gpsConf.gpsBLE = swgpsble.isChecked
|
|
||||||
gpsConf.gpsVerbose = swblegpsverbose.isChecked
|
|
||||||
//gpsConf.gpsBoost = swblegpsboost.isChecked
|
|
||||||
gpsConf.gpsSerial = swgpsserial.isChecked
|
|
||||||
gpsConf.gpsMode = gpsmode
|
|
||||||
gpsConf.gpsPollerSend = gpspollersend.toShort()
|
|
||||||
gpsConf.gpsSendBTSend = gpssendbtsend.toShort()
|
|
||||||
gpsConf.bmpPollerSend = bmppollersend.toShort()
|
|
||||||
|
|
||||||
mBoundService.sendConfBLE(gpsConf)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private fun sendStopConfToBLEService()
|
|
||||||
{
|
|
||||||
if(BTConnected) {
|
|
||||||
val gpspollersend: Float =
|
|
||||||
resources.getStringArray(R.array.pollerval)[spingps.selectedItemPosition].toFloat() * 4
|
|
||||||
val bmppollersend: Float =
|
|
||||||
resources.getStringArray(R.array.pollerval)[spinbmp.selectedItemPosition].toFloat() * 4
|
|
||||||
val gpssendbtsend: Float =
|
|
||||||
resources.getStringArray(R.array.pollerval)[spingpssendbt.selectedItemPosition].toFloat() * 4
|
|
||||||
|
|
||||||
var gpsConf: GPSConfiguration = GPSConfiguration()
|
|
||||||
|
|
||||||
gpsConf.bmpNrf = false
|
|
||||||
gpsConf.bmpBT = false
|
|
||||||
gpsConf.bmp2gps = false
|
|
||||||
gpsConf.extTemp = false
|
|
||||||
gpsConf.gpsBLE = false
|
|
||||||
gpsConf.gpsVerbose = false
|
|
||||||
gpsConf.gpsSerial = false
|
|
||||||
gpsConf.gpsMode = spingpsmode.selectedItemPosition
|
|
||||||
gpsConf.gpsPollerSend = gpspollersend.toShort()
|
|
||||||
gpsConf.gpsSendBTSend = gpssendbtsend.toShort()
|
|
||||||
gpsConf.bmpPollerSend = bmppollersend.toShort()
|
|
||||||
|
|
||||||
mBoundService.sendConfBLE(gpsConf)
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
@ -326,8 +214,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
when (intent?.action) {
|
when (intent?.action) {
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTER01 -> filter01changed(intent)
|
ServicesConstants.BROADCAST_FILTER.FILTER01 -> filter01changed(intent)
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERBT -> BTChanged(intent)
|
ServicesConstants.BROADCAST_FILTER.FILTERBT -> BTChanged(intent)
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERBTHR -> BTChangedHR(intent)
|
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERBTHRM -> BTChangedHRM(intent)
|
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERTEMP -> temperatureChanged(intent)
|
ServicesConstants.BROADCAST_FILTER.FILTERTEMP -> temperatureChanged(intent)
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERPRESSURE -> pressureChanged(intent)
|
ServicesConstants.BROADCAST_FILTER.FILTERPRESSURE -> pressureChanged(intent)
|
||||||
ServicesConstants.BROADCAST_FILTER.FILTERLOCATION -> writeLocationText(intent)
|
ServicesConstants.BROADCAST_FILTER.FILTERLOCATION -> writeLocationText(intent)
|
||||||
|
@ -339,16 +225,14 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spinbmp.setSelection(11)
|
|
||||||
spingps.setSelection(3)
|
|
||||||
spingpsmode.setSelection(1)
|
|
||||||
spingpssendbt.setSelection(10)
|
|
||||||
|
|
||||||
lastLocation.latitude = 0.0
|
lastLocation.latitude = 0.0
|
||||||
lastLocation.longitude = 0.0
|
lastLocation.longitude = 0.0
|
||||||
|
|
||||||
sharedPreferences = baseContext.getSharedPreferences("blegps_config", MODE_PRIVATE)
|
sharedPreferences = baseContext.getSharedPreferences("blegps_config", MODE_PRIVATE)
|
||||||
|
|
||||||
|
editbtaddr.setText(sharedPreferences.getString("macaddr", ""))
|
||||||
|
swbmp2gps.isChecked = sharedPreferences.getBoolean("swbmp2gps", false)
|
||||||
|
|
||||||
/*sharedPreferences
|
/*sharedPreferences
|
||||||
.edit()
|
.edit()
|
||||||
.putInt("inttest", 64)
|
.putInt("inttest", 64)
|
||||||
|
@ -396,144 +280,34 @@ class MainActivity : AppCompatActivity() {
|
||||||
)
|
)
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
swblepower.setOnCheckedChangeListener { _, isChecked ->
|
buttonconnectbt.setOnClickListener {
|
||||||
if(isChecked) {
|
if(BTConnected == false && editbtaddr.text.toString() != "") {
|
||||||
|
sharedPreferences
|
||||||
|
.edit()
|
||||||
|
.putString("macaddr", editbtaddr.text.toString())
|
||||||
|
.apply()
|
||||||
Intent(this, BLEMockLocationService::class.java).also { intent ->
|
Intent(this, BLEMockLocationService::class.java).also { intent ->
|
||||||
bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE)
|
bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE)
|
||||||
intent.action = ServicesConstants.MOCKSERVICEACTION.STARTFOREGROUND_ACTION
|
intent.action = ServicesConstants.MOCKSERVICEACTION.STARTFOREGROUND_ACTION
|
||||||
startService(intent)
|
startService(intent)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sendStopConfToBLEService()
|
delayFunction({ disconnectBT() }, 1500)
|
||||||
delayFunction({ disconnectBT() }, 1500)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
swblehrpower.setOnCheckedChangeListener { _, isChecked ->
|
|
||||||
if(isChecked) {
|
|
||||||
Intent(this, BLEHRService::class.java).also { intent ->
|
|
||||||
bindService(intent, mServiceConnectionHR, Context.BIND_AUTO_CREATE)
|
|
||||||
intent.action = ServicesConstants.HRSERVICEACTION.STARTFOREGROUND_ACTION
|
|
||||||
startService(intent)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//sendStopConfToBLEService()
|
|
||||||
delayFunction({ disconnectBTHR() }, 1500)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
swbmpnrf.setOnCheckedChangeListener { _,_ ->
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
swbmpbt.setOnCheckedChangeListener { _, checked ->
|
|
||||||
if(checked) {
|
|
||||||
LocalBroadcastManager.getInstance(baseContext).sendBroadcast(
|
|
||||||
Intent(ServicesConstants.BROADCAST_FILTER.FILTERBMP).putExtra(ServicesConstants.BROADCAST_KEY.KEYBMPSTATUS, true)
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
LocalBroadcastManager.getInstance(baseContext).sendBroadcast(
|
|
||||||
Intent(ServicesConstants.BROADCAST_FILTER.FILTERBMP).putExtra(ServicesConstants.BROADCAST_KEY.KEYBMPSTATUS, false)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
swbmp2gps.setOnCheckedChangeListener { _,_ ->
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
swexttemp.setOnCheckedChangeListener { _,_ ->
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
swgpsble.setOnCheckedChangeListener { _,_ ->
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
swblegpsverbose.setOnCheckedChangeListener { _, _ ->
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
swgpsserial.setOnCheckedChangeListener { _,_ ->
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
/*swblegpsboost.setOnCheckedChangeListener { _,_ ->
|
|
||||||
sendConfToBLEService()
|
|
||||||
}*/
|
|
||||||
swlog2file.setOnCheckedChangeListener { _, checked ->
|
|
||||||
if(checked) {
|
|
||||||
gpxfilename = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
|
|
||||||
if (BTConnected) {
|
|
||||||
mBoundService.openGPX(gpxfilename)
|
|
||||||
gpxopened = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(BTConnected) {
|
|
||||||
mBoundService.closeGPX()
|
|
||||||
} else if(gpxopened) {
|
|
||||||
var gpxhandle = File(
|
|
||||||
Environment.getExternalStorageDirectory().path + File.separator + "BTGPS",
|
|
||||||
gpxfilename + ".gpx"
|
|
||||||
)
|
|
||||||
var gpxoutputstream = FileOutputStream(gpxhandle, true)
|
|
||||||
try {
|
|
||||||
val gpxfooter = "</trkseg></trk></gpx>\n"
|
|
||||||
gpxoutputstream.write(gpxfooter.toByteArray())
|
|
||||||
} catch (e: FileNotFoundException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
} catch (e: IOException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
}
|
|
||||||
gpxoutputstream.close()
|
|
||||||
}
|
|
||||||
gpxopened = false
|
|
||||||
}
|
|
||||||
//sendConfToBLEService()
|
|
||||||
}
|
|
||||||
|
|
||||||
spingpsmode.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
|
||||||
override fun onNothingSelected(p0: AdapterView<*>?) {
|
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
spinbmp.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
|
||||||
override fun onNothingSelected(p0: AdapterView<*>?) {
|
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
spingps.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
|
||||||
override fun onNothingSelected(p0: AdapterView<*>?) {
|
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
spingpssendbt.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
|
||||||
override fun onNothingSelected(p0: AdapterView<*>?) {
|
|
||||||
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
|
|
||||||
sendConfToBLEService()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
buttoncalibratebmp2gps.setOnClickListener {
|
buttoncalibratebmp2gps.setOnClickListener {
|
||||||
//text01.text = editcalibratebmp2gps.text
|
//text01.text = editcalibratebmp2gps.text
|
||||||
sendCalibrateToBLEService()
|
sendCalibrateToBLEService()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
swbmp2gps.setOnClickListener {
|
||||||
|
sharedPreferences
|
||||||
|
.edit()
|
||||||
|
.putBoolean("swbmp2gps", swbmp2gps.isChecked)
|
||||||
|
.apply()
|
||||||
|
}
|
||||||
|
|
||||||
/*startmock.setOnClickListener {
|
/*startmock.setOnClickListener {
|
||||||
//val startIntent = Intent(this,BLEMockLocationService::class.java)
|
//val startIntent = Intent(this,BLEMockLocationService::class.java)
|
||||||
//startIntent.action = ServicesConstants.MOCKSERVICEACTION.STARTFOREGROUND_ACTION
|
//startIntent.action = ServicesConstants.MOCKSERVICEACTION.STARTFOREGROUND_ACTION
|
||||||
|
@ -566,8 +340,6 @@ class MainActivity : AppCompatActivity() {
|
||||||
val manager = LocalBroadcastManager.getInstance(this)
|
val manager = LocalBroadcastManager.getInstance(this)
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTER01))
|
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTER01))
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBT))
|
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBT))
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBTHR))
|
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERBTHRM))
|
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERTEMP))
|
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERTEMP))
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERPRESSURE))
|
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERPRESSURE))
|
||||||
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERLOCATION))
|
manager.registerReceiver(brReceiver, IntentFilter(ServicesConstants.BROADCAST_FILTER.FILTERLOCATION))
|
||||||
|
@ -580,9 +352,14 @@ class MainActivity : AppCompatActivity() {
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
if(!swlog2file.isChecked) {
|
resumeActivityState = false
|
||||||
swblegpsverbose.setChecked(false)
|
sendGPSModeToBLEService(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
resumeActivityState = true
|
||||||
|
sendGPSModeToBLEService(3)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val mServiceConnection = object : ServiceConnection {
|
private val mServiceConnection = object : ServiceConnection {
|
||||||
|
@ -598,17 +375,4 @@ class MainActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val mServiceConnectionHR = object : ServiceConnection {
|
|
||||||
|
|
||||||
override fun onServiceDisconnected(name: ComponentName) {
|
|
||||||
mServiceBoundHR = false
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onServiceConnected(name: ComponentName, service: IBinder) {
|
|
||||||
val binderHR = service as BLEHRService.sBinder
|
|
||||||
mBoundServiceHR = binderHR.getService()
|
|
||||||
mServiceBoundHR = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,19 +4,37 @@ import android.content.Context
|
||||||
import android.location.Location
|
import android.location.Location
|
||||||
import android.location.LocationManager
|
import android.location.LocationManager
|
||||||
import android.os.SystemClock
|
import android.os.SystemClock
|
||||||
|
import android.util.Log
|
||||||
|
|
||||||
class MockLocationProvider(val providerName: String, val ctx: Context) {
|
class MockLocationProvider(val providerName: String, val ctx: Context) {
|
||||||
|
|
||||||
|
private val LOG_TAG = "MockLocationProvider"
|
||||||
|
|
||||||
private val lm = ctx.getSystemService(
|
private val lm = ctx.getSystemService(
|
||||||
Context.LOCATION_SERVICE
|
Context.LOCATION_SERVICE
|
||||||
) as LocationManager
|
) as LocationManager
|
||||||
|
|
||||||
fun start() {
|
fun start() {
|
||||||
|
try {
|
||||||
lm.addTestProvider(
|
lm.removeTestProvider(providerName)
|
||||||
providerName, false, false, false, false, true,
|
} catch(exception: Exception) {
|
||||||
true, true, 0, 5
|
Log.w(LOG_TAG,"No TestProvider to remove")
|
||||||
)
|
}
|
||||||
|
/* if(providerName in lm.getAllProviders()) {
|
||||||
|
lm.removeTestProvider(providerName)
|
||||||
|
}*/
|
||||||
|
//try {
|
||||||
|
lm.addTestProvider(
|
||||||
|
providerName, false, false, false, false, true,
|
||||||
|
true, true, 0, 5
|
||||||
|
)
|
||||||
|
/*} catch() {
|
||||||
|
lm.removeTestProvider(providerName)
|
||||||
|
lm.addTestProvider(
|
||||||
|
providerName, false, false, false, false, true,
|
||||||
|
true, true, 0, 5
|
||||||
|
)
|
||||||
|
}*/
|
||||||
lm.setTestProviderEnabled(providerName, true)
|
lm.setTestProviderEnabled(providerName, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,6 @@ class ServicesConstants {
|
||||||
const val FILTER01 = "just.a.filter"
|
const val FILTER01 = "just.a.filter"
|
||||||
const val FILTERBT = "filter.bt"
|
const val FILTERBT = "filter.bt"
|
||||||
const val FILTERBMP = "filter.bmp"
|
const val FILTERBMP = "filter.bmp"
|
||||||
const val FILTERBTHR = "filter.bthr"
|
|
||||||
const val FILTERBTHRM = "filter.bthrm"
|
|
||||||
const val FILTERTEMP = "filter.temp"
|
const val FILTERTEMP = "filter.temp"
|
||||||
const val FILTERPRESSURE = "filter.pressure"
|
const val FILTERPRESSURE = "filter.pressure"
|
||||||
const val FILTERLOCATION = "filter.location"
|
const val FILTERLOCATION = "filter.location"
|
||||||
|
@ -41,8 +39,6 @@ class ServicesConstants {
|
||||||
companion object {
|
companion object {
|
||||||
const val KEY01 = "key01"
|
const val KEY01 = "key01"
|
||||||
const val KEYBTSTATUS = "btstatus"
|
const val KEYBTSTATUS = "btstatus"
|
||||||
const val KEYBTSTATUSHR = "btstatushr"
|
|
||||||
const val KEYBTHRM = "bthrm"
|
|
||||||
const val KEYBMPSTATUS = "bmpstatus"
|
const val KEYBMPSTATUS = "bmpstatus"
|
||||||
const val KEYTEMP = "temperature"
|
const val KEYTEMP = "temperature"
|
||||||
const val KEYPRESSURE = "pressure"
|
const val KEYPRESSURE = "pressure"
|
||||||
|
@ -60,13 +56,8 @@ class ServicesConstants {
|
||||||
const val KEYQUALITYHDOP = "hdop"
|
const val KEYQUALITYHDOP = "hdop"
|
||||||
const val KEYQUALITYVDOP = "vdop"
|
const val KEYQUALITYVDOP = "vdop"
|
||||||
const val KEYQUALITYELEGPS = "elevation_gps"
|
const val KEYQUALITYELEGPS = "elevation_gps"
|
||||||
const val KEYSATGPSALL = "gpsall"
|
|
||||||
const val KEYSATGPSUSED = "gpsused"
|
const val KEYSATGPSUSED = "gpsused"
|
||||||
const val KEYSATSBASALL = "sbasall"
|
|
||||||
const val KEYSATSBASUSED = "sbasused"
|
|
||||||
const val KEYSATGLONASSALL = "glonassall"
|
|
||||||
const val KEYSATGLONASSUSED = "glonassused"
|
const val KEYSATGLONASSUSED = "glonassused"
|
||||||
const val KEYSATGALILEOALL = "galileoall"
|
|
||||||
const val KEYSATGALILEOUSED = "galileoused"
|
const val KEYSATGALILEOUSED = "galileoused"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,14 +10,19 @@ import android.util.Log
|
||||||
class TaskerReceiver: BroadcastReceiver() {
|
class TaskerReceiver: BroadcastReceiver() {
|
||||||
private val LOG_TAG = "TaskerReceiver"
|
private val LOG_TAG = "TaskerReceiver"
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
Log.v(LOG_TAG, "Receive")
|
val screen = intent.extras.getBoolean("screen")
|
||||||
|
Log.v(LOG_TAG, "Receive Tasker $screen")
|
||||||
|
|
||||||
|
|
||||||
val serviceIntent = Intent(context, BLEMockLocationService::class.java)
|
val serviceIntent = Intent(context, BLEMockLocationService::class.java)
|
||||||
serviceIntent.action=ServicesConstants.MOCKSERVICEACTION.TASKER_ACTION
|
serviceIntent.action=ServicesConstants.MOCKSERVICEACTION.TASKER_ACTION
|
||||||
|
|
||||||
//serviceIntent.putExtras(Intent(ServicesConstants.BROADCAST_FILTER.FILTERTASKER).putExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, false))
|
serviceIntent.putExtras(Intent(ServicesConstants.BROADCAST_FILTER.FILTERTASKER).putExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, screen))
|
||||||
serviceIntent.putExtras(intent)
|
//serviceIntent.putExtras(intent)
|
||||||
|
|
||||||
//LocalBroadcastManager.getInstance(context).sendBroadcast(
|
//LocalBroadcastManager.getInstance(context).sendBroadcast(
|
||||||
// Intent(ServicesConstants.BROADCAST_FILTER.FILTERTASKER).putExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, true))
|
// Intent(ServicesConstants.BROADCAST_FILTER.FILTERTASKER).putExtra(ServicesConstants.BROADCAST_KEY.KEYBOOST, screen))
|
||||||
ContextCompat.startForegroundService(context, serviceIntent)
|
ContextCompat.startForegroundService(context, serviceIntent)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -11,85 +11,40 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
tools:context=".MainActivity">
|
tools:context=".MainActivity">
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:context=".MainActivity">
|
tools:context=".MainActivity"
|
||||||
<Switch
|
android:focusableInTouchMode="true">
|
||||||
android:text="BLE GPS Power"
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swblepower">
|
|
||||||
|
|
||||||
</Switch>
|
|
||||||
<Switch
|
|
||||||
android:text="BLE HR Power"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swblehrpower"/>
|
|
||||||
<!--<Button
|
|
||||||
android:text="Start Mock"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="10dp"
|
android:text="BT Address"
|
||||||
|
android:layout_margin="0dp"
|
||||||
android:padding="10dp"
|
android:padding="10dp"
|
||||||
android:id="@+id/startmock"/>
|
android:layout_gravity="center_horizontal"
|
||||||
<Button
|
android:id="@+id/textbtaddr"/>
|
||||||
android:text="Stop Mock"
|
|
||||||
android:layout_width="wrap_content"
|
<EditText
|
||||||
|
android:id="@+id/editbtaddr"
|
||||||
|
android:layout_width="200dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="10dp"
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_margin="0dp"
|
||||||
android:padding="10dp"
|
android:padding="10dp"
|
||||||
android:id="@+id/stopmock"/>-->
|
android:maxLength="17"
|
||||||
</LinearLayout>
|
android:inputType="textCapCharacters" />
|
||||||
<LinearLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
tools:context=".MainActivity">
|
|
||||||
<Switch
|
|
||||||
android:text="BMP nRF"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swbmpnrf"/>
|
|
||||||
<Switch
|
|
||||||
android:text="BMP BT"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swbmpbt"/>
|
|
||||||
|
|
||||||
<Switch
|
|
||||||
android:text="Ext Temp"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swexttemp"/>
|
|
||||||
</LinearLayout>
|
|
||||||
<LinearLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
tools:context=".MainActivity">
|
|
||||||
|
|
||||||
<Switch
|
|
||||||
android:text="GPS BLE"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swgpsble"/>
|
|
||||||
<Switch
|
|
||||||
android:text="GPS Serial"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swgpsserial"/>
|
|
||||||
<Switch
|
|
||||||
android:text="BMP2GPS"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swbmp2gps"/>
|
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Connect"
|
||||||
|
android:layout_margin="0dp"
|
||||||
|
android:padding="10dp"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:id="@+id/buttonconnectbt"/>
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -130,31 +85,6 @@
|
||||||
android:padding="10dp"
|
android:padding="10dp"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:id="@+id/textspeedheading"/>
|
android:id="@+id/textspeedheading"/>
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="HR"
|
|
||||||
android:layout_margin="0dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:id="@+id/texthr"/>
|
|
||||||
<LinearLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
tools:context=".MainActivity">
|
|
||||||
<Switch
|
|
||||||
android:text="BLE GPS Verbose"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swblegpsverbose"/>
|
|
||||||
<Switch
|
|
||||||
android:text="Log2File"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swlog2file"/>
|
|
||||||
</LinearLayout>
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -171,21 +101,6 @@
|
||||||
android:padding="10dp"
|
android:padding="10dp"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
android:id="@+id/textsatellites"/>
|
android:id="@+id/textsatellites"/>
|
||||||
<!-- <TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="Read"
|
|
||||||
android:layout_margin="0dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:id="@+id/textread"/>
|
|
||||||
<EditText
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_margin="0dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:hint="Value Hint"
|
|
||||||
android:id="@+id/edit01"/>
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
@ -194,113 +109,11 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
tools:context=".MainActivity">
|
tools:context=".MainActivity">
|
||||||
<Button
|
<Switch
|
||||||
android:text="Read"
|
android:text="BMP2GPS"
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_margin="10dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:id="@+id/buttonread"/>
|
|
||||||
<Button
|
|
||||||
android:text="Write"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_margin="10dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:id="@+id/buttonwrite"/>
|
|
||||||
<Button
|
|
||||||
android:text="Get Counter"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content" android:id="@+id/swbmp2gps"/>
|
||||||
android:layout_margin="10dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:id="@+id/bCounter"/>
|
|
||||||
</LinearLayout>-->
|
|
||||||
<LinearLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
tools:context=".MainActivity">
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="BMP Poller"
|
|
||||||
android:layout_margin="0dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:id="@+id/textspinbmp"/>
|
|
||||||
<Spinner
|
|
||||||
android:id="@+id/spinbmp"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:entries="@array/poller" />
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
tools:context=".MainActivity">
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="GPS Mode"
|
|
||||||
android:layout_margin="0dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:id="@+id/textspingpsmode"/>
|
|
||||||
<Spinner
|
|
||||||
android:id="@+id/spingpsmode"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:entries="@array/gpsmode"/>
|
|
||||||
<!--<Switch
|
|
||||||
android:text="BLE GPS Boost"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" android:id="@+id/swblegpsboost"/>-->
|
|
||||||
</LinearLayout>
|
|
||||||
<LinearLayout
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
tools:context=".MainActivity">
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="GPS Poller"
|
|
||||||
android:layout_margin="0dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:id="@+id/textspingps"/>
|
|
||||||
<Spinner
|
|
||||||
android:id="@+id/spingps"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:entries="@array/poller"/>
|
|
||||||
<TextView
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="GPS BT"
|
|
||||||
android:layout_margin="0dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:layout_gravity="center_horizontal"
|
|
||||||
android:id="@+id/textspingpssendbt"/>
|
|
||||||
<Spinner
|
|
||||||
android:id="@+id/spingpssendbt"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:entries="@array/poller"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
|
@ -5,7 +5,7 @@ buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.4.2'
|
classpath 'com.android.tools.build:gradle:3.4.2'
|
||||||
|
@ -19,6 +19,7 @@ allprojects {
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
maven { url 'https://jitpack.io' }
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue