From 0f3b695140fa09d2054372924f5045be846761a2 Mon Sep 17 00:00:00 2001 From: eddy Date: Wed, 29 Jul 2026 19:56:40 +0200 Subject: [PATCH] feat: add BleRelayManager sendRelayCommand and disconnect --- .../com/eddy/atomrelay/BleRelayManager.kt | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/java/com/eddy/atomrelay/BleRelayManager.kt b/android/app/src/main/java/com/eddy/atomrelay/BleRelayManager.kt index 27429fa..74672a0 100644 --- a/android/app/src/main/java/com/eddy/atomrelay/BleRelayManager.kt +++ b/android/app/src/main/java/com/eddy/atomrelay/BleRelayManager.kt @@ -142,8 +142,29 @@ class BleRelayManager( handler.removeCallbacksAndMessages(null) } - fun sendRelayCommand(cmd: Byte) {} - fun disconnect() {} + @SuppressLint("MissingPermission") + fun sendRelayCommand(cmd: Byte) { + val char = relayCharacteristic ?: return + val gatt = bluetoothGatt ?: return + val key = hmacKey ?: return + + val packet = buildPacket(cmd, key) + char.value = packet + char.writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE + gatt.writeCharacteristic(char) + seq++ + if (seq > PrefsHelper.SEQ_MAX) seq = 1 + PrefsHelper.getPrefs(context).edit().putInt(PrefsHelper.PREF_SEQ, seq).apply() + Log.d(TAG, "Sent relay cmd 0x${cmd.toString(16)} (seq=${seq - 1})") + } + + @SuppressLint("MissingPermission") + fun disconnect() { + handler.removeCallbacks(scanRunnable) + scanTimeoutRunnable?.let { handler.removeCallbacks(it) } + stopScan() + bluetoothGatt?.disconnect() + } fun updateKeys() { loadState() }