feat: decode demo characteristic

This commit is contained in:
Fabian Christoffel
2023-06-20 15:40:22 +02:00
parent 96d1cb985d
commit a787e00dec
2 changed files with 44 additions and 0 deletions

View File

@@ -64,6 +64,15 @@ data class DiscoverServicesRequest(
) : BleOperationType()
open class BleListener {
open fun onSuccessfulCharRead(
gatt: BluetoothGatt,
characteristic: BluetoothGattCharacteristic
) {
}
}
private fun BluetoothGatt.printGattTable() {
if (services.isEmpty()) {
Log.i(
@@ -106,6 +115,16 @@ object ConnectionManager {
private val deviceGattMap = ConcurrentHashMap<BluetoothDevice, BluetoothGatt>()
private val operationQueue = ConcurrentLinkedQueue<BleOperationType>()
private var pendingOperation: BleOperationType? = null
private var listeners = ArrayList<BleListener>()
fun register(listener: BleListener) {
listeners.add(listener)
}
private fun notifyListeners(notifier: (listener: BleListener) -> Unit) {
listeners.forEach(notifier)
}
fun connect(device: BluetoothDevice, context: Context) {
@@ -310,6 +329,12 @@ object ConnectionManager {
"ConnectionManager",
"Read characteristic $uuid (service: ${service.uuid}): ${value.toHexString()}"
)
notifyListeners { listener ->
listener.onSuccessfulCharRead(
gatt,
characteristic
)
}
}
BluetoothGatt.GATT_READ_NOT_PERMITTED -> {

View File

@@ -5,6 +5,8 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.app.AlertDialog
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothGatt
import android.bluetooth.BluetoothGattCharacteristic
import android.bluetooth.BluetoothManager
import android.bluetooth.le.ScanCallback
import android.bluetooth.le.ScanResult
@@ -26,6 +28,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.SimpleItemAnimator
import com.example.sensortestingapp.databinding.ActivityMainBinding
import com.punchthrough.blestarterappandroid.ble.BleListener
import com.punchthrough.blestarterappandroid.ble.ConnectionManager
import java.nio.ByteBuffer
import java.nio.ByteOrder
@@ -139,6 +142,20 @@ class MainActivity : AppCompatActivity() {
}
}
private val bleListener = object : BleListener() {
override fun onSuccessfulCharRead(
gatt: BluetoothGatt,
characteristic: BluetoothGattCharacteristic
) {
if (characteristic.service.uuid == DEMO_SERVICE_UUID && characteristic.uuid == DEMO_CHAR_UUID) {
val payload = decodeDemoPayload(characteristic.value)
Log.i("BleListener", "Demo char received: $payload")
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, false)
@@ -164,6 +181,8 @@ class MainActivity : AppCompatActivity() {
setupRecyclerView()
ConnectionManager.register(bleListener)
}
private fun setupRecyclerView() {