Как прочитать всю длину данных из BLE в android, когда мои данные содержат 0x0a и 0x0d? - PullRequest
0 голосов
/ 04 апреля 2020

Я могу правильно подключиться к устройству, и оно может без ошибок получать характеристики c. Но что-то не так, когда полученные данные содержат 0x0a и 0x0d.

Например, устройство отправляет данные как 0b710a6000179c21346fb23feec651b c в мобильное приложение. Приложение получит сообщение, как показано ниже. Приложение разделило данные на 2 данных.

D / BluetoothLeService: получение данных = 0B71

D / BluetoothLeService: получение данных = 6000179C21346FB23FEEC651B C

Это сообщение журнала от функции broadcastUpdate

private void broadcastUpdate(final String action,
                             final BluetoothGattCharacteristic characteristic) {
    final Intent intent = new Intent(action);

    if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid())) {
        ...
    } else {
        // For all other profiles, writes the data formatted in HEX.
        final byte[] data = characteristic.getValue();
        if (data != null && data.length > 0) {
            String hexData=DeviceControlActivity.bytesToHex(data);
            Log.d(TAG, "Receive Data = "+hexData);
            intent.putExtra(EXTRA_DATA, data);
        }
    }
    sendBroadcast(intent);
}

Я пытался использовать приложение nRF Connect для проверки записи / чтения BLE, но оно также выдает тот же вывод, что и выше. Затем я обнаружил, что 0x0A - это символ новой строки \n, а 0x0D - это возвращаемые символы \r.

Можно ли получить полную длину данных, если они содержат 0x0A и 0x0D? Таким образом, приложение может получать полные данные как 0B710A6000179C21346FB23FEEC651BC. Пожалуйста посоветуй. Спасибо

1 Ответ

0 голосов
/ 04 апреля 2020

BLE-стеки вообще не анализируют данные.

Это должно быть приложение, запущенное на удаленном устройстве, которое перед отправкой разбивает данные на две части.

...