From 8da4ea2aaff5b75845a63066e809719553a0442a Mon Sep 17 00:00:00 2001 From: Matej Glejtek Date: Sun, 3 Sep 2023 20:42:55 +0200 Subject: [PATCH] feat: shorted BLE advertisements to max 31 bytes --- .../flutter_opendroneid/scanner/BluetoothScanner.kt | 6 ++++-- .../cz/dronetag/flutter_opendroneid/scanner/ODIDScanner.kt | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/android/src/main/kotlin/cz/dronetag/flutter_opendroneid/scanner/BluetoothScanner.kt b/android/src/main/kotlin/cz/dronetag/flutter_opendroneid/scanner/BluetoothScanner.kt index af3622e..6ee3b00 100644 --- a/android/src/main/kotlin/cz/dronetag/flutter_opendroneid/scanner/BluetoothScanner.kt +++ b/android/src/main/kotlin/cz/dronetag/flutter_opendroneid/scanner/BluetoothScanner.kt @@ -46,9 +46,11 @@ class BluetoothScanner( if (result.getPrimaryPhy() == BluetoothDevice.PHY_LE_CODED) source = Pigeon.MessageSource.BLUETOOTH_LONG_RANGE; } - + // if using BLE, max size of data is MAX_BLE_ADV_SIZE + // if using BT5, data can be longer up to 256 bytes + val isBLE = maxAdvDataLen() <= MAX_BLE_ADV_SIZE receiveData( - offsetData(bytes, BT_OFFSET), + if(isBLE) getDataFromIndex(bytes, BT_OFFSET, MAX_BLE_ADV_SIZE) else offsetData(bytes, BT_OFFSET), result.device.address, source, result.rssi.toLong(), diff --git a/android/src/main/kotlin/cz/dronetag/flutter_opendroneid/scanner/ODIDScanner.kt b/android/src/main/kotlin/cz/dronetag/flutter_opendroneid/scanner/ODIDScanner.kt index 5ce4401..8f776b6 100644 --- a/android/src/main/kotlin/cz/dronetag/flutter_opendroneid/scanner/ODIDScanner.kt +++ b/android/src/main/kotlin/cz/dronetag/flutter_opendroneid/scanner/ODIDScanner.kt @@ -15,6 +15,7 @@ abstract class ODIDScanner( companion object { const val MAX_MESSAGE_SIZE = 25 const val BT_OFFSET = 6 + const val MAX_BLE_ADV_SIZE = 31 const val WIFI_BEACON_OFFSET = 5 const val WIFI_NAN_OFFSET = 1 } @@ -62,4 +63,7 @@ abstract class ODIDScanner( /// returns ByteArray without first offset elements inline fun offsetData(data: ByteArray, offset: Int) : ByteArray = data.copyOfRange(offset, data.size) + + /// returns ByteArray with bytes from start to end + inline fun getDataFromIndex(data: ByteArray, start: Int, end: Int) : ByteArray = data.copyOfRange(start, end) } \ No newline at end of file