diff --git a/app/src/main/java/com/example/sensortestingapp/ConnectionManager.kt b/app/src/main/java/com/example/sensortestingapp/ConnectionManager.kt index ed0027f..c64c27e 100644 --- a/app/src/main/java/com/example/sensortestingapp/ConnectionManager.kt +++ b/app/src/main/java/com/example/sensortestingapp/ConnectionManager.kt @@ -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() private val operationQueue = ConcurrentLinkedQueue() private var pendingOperation: BleOperationType? = null + private var listeners = ArrayList() + + + 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 -> { diff --git a/app/src/main/java/com/example/sensortestingapp/MainActivity.kt b/app/src/main/java/com/example/sensortestingapp/MainActivity.kt index 388ebb7..70bf0d4 100644 --- a/app/src/main/java/com/example/sensortestingapp/MainActivity.kt +++ b/app/src/main/java/com/example/sensortestingapp/MainActivity.kt @@ -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() {