diff --git a/app/src/main/java/de/ccc/events/badge/card10/Constants.kt b/app/src/main/java/de/ccc/events/badge/card10/Constants.kt index 6abb6f8ad80da8e2de427dd7706314ad5ecf7d63..c69454e7f3410cbe81f04e98a49e80ea5828282a 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/Constants.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/Constants.kt @@ -24,6 +24,8 @@ package de.ccc.events.badge.card10 import java.util.* +const val CARD10_BLUETOOTH_MAC_PREFIX = "CA:4D:10" + val GENERIC_ACCESS_SERVICE_UUID = UUID.fromString("00001800-0000-1000-8000-00805f9b34fb") val DEVICE_NAME_CHARACTERISTIC_UUID = UUID.fromString("00002a00-0000-1000-8000-00805f9b34fb") diff --git a/app/src/main/java/de/ccc/events/badge/card10/background/UpdateClockJob.kt b/app/src/main/java/de/ccc/events/badge/card10/background/UpdateClockJob.kt index e3e655a108cdcafb47ea714bb1aa7cb8a977995c..ea34deb1f045829b27080549dd721560bcc4805e 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/background/UpdateClockJob.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/background/UpdateClockJob.kt @@ -29,6 +29,7 @@ import android.bluetooth.BluetoothGattCharacteristic import android.content.Context import androidx.work.Worker import androidx.work.WorkerParameters +import de.ccc.events.badge.card10.CARD10_BLUETOOTH_MAC_PREFIX import de.ccc.events.badge.card10.CARD10_SERVICE_UUID import de.ccc.events.badge.card10.TIME_CHARACTERISTIC_UUID import java.nio.ByteBuffer @@ -41,55 +42,57 @@ class UpdateClockJob(context: Context, workerParameters: WorkerParameters) : Wor override fun doWork(): Result { System.out.println("=== doWork() job started") for (device in bluetoothAdapter.bondedDevices) { - System.out.println("=== doWork() ${device}") - var gatt: BluetoothGatt? = null - try { - val gattLatch = CountDownLatch(1); - var writeLatch: CountDownLatch? = null - var timeCharacteristic: BluetoothGattCharacteristic? = null - val callback = object : BluetoothGattCallback() { - override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) { - System.out.println("=== doWork() onConnectionStateChange " + gatt + " / " + status + " / " + newState) - if (newState == BluetoothGatt.STATE_CONNECTED) - gatt.discoverServices() - } + if (device.address.startsWith(CARD10_BLUETOOTH_MAC_PREFIX, true)) { + System.out.println("=== doWork() ${device}") + var gatt: BluetoothGatt? = null + try { + val gattLatch = CountDownLatch(1); + var writeLatch: CountDownLatch? = null + var timeCharacteristic: BluetoothGattCharacteristic? = null + val callback = object : BluetoothGattCallback() { + override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) { + System.out.println("=== doWork() onConnectionStateChange " + gatt + " / " + status + " / " + newState) + if (newState == BluetoothGatt.STATE_CONNECTED) + gatt.discoverServices() + } - override fun onServicesDiscovered(gatt: BluetoothGatt, status: Int) { - System.out.println("=== doWork() onServicesDiscovered " + gatt + " / " + status) - val card10Service = gatt.getService(CARD10_SERVICE_UUID) - timeCharacteristic = card10Service.getCharacteristic(TIME_CHARACTERISTIC_UUID) - gattLatch.countDown() - } + override fun onServicesDiscovered(gatt: BluetoothGatt, status: Int) { + System.out.println("=== doWork() onServicesDiscovered " + gatt + " / " + status) + val card10Service = gatt.getService(CARD10_SERVICE_UUID) + timeCharacteristic = card10Service.getCharacteristic(TIME_CHARACTERISTIC_UUID) + gattLatch.countDown() + } - override fun onCharacteristicWrite( - gatt: BluetoothGatt?, - characteristic: BluetoothGattCharacteristic?, - status: Int - ) { - writeLatch?.countDown() + override fun onCharacteristicWrite( + gatt: BluetoothGatt?, + characteristic: BluetoothGattCharacteristic?, + status: Int + ) { + writeLatch?.countDown() + } } - } - gatt = device.connectGatt(applicationContext, true, callback) - if (!gattLatch.await(1, TimeUnit.MINUTES)) - return Result.retry() + gatt = device.connectGatt(applicationContext, true, callback) + if (!gattLatch.await(1, TimeUnit.MINUTES)) + return Result.retry() - val buffer = ByteBuffer.allocate(8) - buffer.putLong(System.currentTimeMillis()) - timeCharacteristic?.value = buffer.array() - if (gatt.writeCharacteristic(timeCharacteristic)) { - writeLatch = CountDownLatch(1) - if (!writeLatch.await(1, TimeUnit.MINUTES)) - return Result.failure() - System.out.println("=== doWork() updated time") + val buffer = ByteBuffer.allocate(8) + buffer.putLong(System.currentTimeMillis()) + timeCharacteristic?.value = buffer.array() + if (gatt.writeCharacteristic(timeCharacteristic)) { + writeLatch = CountDownLatch(1) + if (!writeLatch.await(1, TimeUnit.MINUTES)) + return Result.failure() + System.out.println("=== doWork() updated time") + } + } catch (x: Exception) { + x.printStackTrace() + } finally { + gatt?.close(); } - } catch (x: Exception) { - x.printStackTrace() - } finally { - gatt?.close(); - System.out.println("=== doWork() job finished") } } + System.out.println("=== doWork() job finished (success)") return Result.success() } } diff --git a/app/src/main/java/de/ccc/events/badge/card10/mood/MoodFragment.kt b/app/src/main/java/de/ccc/events/badge/card10/mood/MoodFragment.kt index cde86d42cb7ed85140e70f74d53af0be87472d89..c55e75a9a9b5fb6e133bd88150cea0e8fe74248a 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/mood/MoodFragment.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/mood/MoodFragment.kt @@ -40,7 +40,7 @@ import java.util.concurrent.CountDownLatch class MoodFragment : Fragment() { // TODO pick from list of paired card10s, possibly present selection - private val REMOTE_DEVICE_BLUETOOTH_MAC = "00:05:8B:44:02:03" + private val REMOTE_DEVICE_BLUETOOTH_MAC = "CA:4D:10:44:02:03" private lateinit var gatt: BluetoothGatt private var rocketsCharacteristic: BluetoothGattCharacteristic? = null diff --git a/app/src/main/java/de/ccc/events/badge/card10/scanner/ScannerFragment.kt b/app/src/main/java/de/ccc/events/badge/card10/scanner/ScannerFragment.kt index 21ec56b6438a317e707717e66b5952d2a84415cb..8721fb046dbefa3d87dcf79ef0318497993e0f41 100644 --- a/app/src/main/java/de/ccc/events/badge/card10/scanner/ScannerFragment.kt +++ b/app/src/main/java/de/ccc/events/badge/card10/scanner/ScannerFragment.kt @@ -36,6 +36,7 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager +import de.ccc.events.badge.card10.CARD10_BLUETOOTH_MAC_PREFIX import de.ccc.events.badge.card10.R import kotlinx.android.synthetic.main.scanner_fragment.* @@ -47,15 +48,15 @@ class ScannerFragment : Fragment() { val callback = object : ScanCallback() { override fun onScanResult(callbackType: Int, result: ScanResult) { val device = result.device - if (device.name == null) - return - listAdapter.put( - Device( - btMac = device.address, - name = device.name, - paired = device.bondState == BluetoothDevice.BOND_BONDED + if (device.address.startsWith(CARD10_BLUETOOTH_MAC_PREFIX, true)) { + listAdapter.put( + Device( + btMac = device.address, + name = device.name, + paired = device.bondState == BluetoothDevice.BOND_BONDED + ) ) - ) + } } }