Что означает спецификация уровня заряда батареи (0x2A1B) Bluetooth? - PullRequest
0 голосов
/ 11 сентября 2018

Состояние уровня заряда батареи (0x2A1B) не указано в спецификации Срок службы батареи в документации Bluetooth, только значение Уровень заряда батареи (0x2A19) . Однако при считывании характеристики Состояние уровня заряда батареи (0x2A1B) в разделе «Обслуживание батареи» обнаруживается характеристика 0x2A1B, и вместо ошибки или null возвращается false.

Найден пример , где true возвращается при чтении уровня заряда батареи (0x2A19 , org.bluetooth.characteristic.battery_level), который указан как одно из значений поля в описании Состояние уровня заряда батареи (0x2A1B) .

Уровень заряда батареи "включает в себя" Уровень заряда батареи, согласно характеристикам :

Battery Level State Description

РЕДАКТИРОВАТЬ: при чтении Состояние уровня заряда батареи (0x2A1B) с помощью приложения Nordic Connect Android, это значение: Invalid data syntax: (0x) 64, "d".

Вопросы:

  1. Какая служба Bluetooth поддерживает Состояние уровня заряда батареи (0x2A1B) падает ниже? Battery Service , когда false успешно возвращено? Другой вопрос StackOverflow задает этот вопрос Состояние питания батареи (0x2A1A) , которое также указано в Состояние уровня заряда батареи . Как это работает?
  2. Что обозначают false и true как возвращенные из чтения характеристик?

-

Справочная информация: Я пытаюсь прочитать уровень заряда батареи через приложение Android из модуля nRF51822 (на основе Adafruit Bluefruit 32u4 LE ).

Среди обнаруженных служб и характеристик: Battery Service (0x180F) и Характеристика состояния уровня заряда батареи (0x2A1B) . Также попытался добавить пользовательскую характеристику для чтения уровня заряда батареи, согласно Adafruit tutorial , но недавно добавленная характеристика не найдена приложением Android. Однако чтение характеристики с использованием AT-команд работает - модуль возвращает int.

Я читаю 0x2A1B характеристику в пределах onServicesDiscovered. Другие характеристики я могу прочитать успешно. Вот код в приложении для Android, основанный на этой теме :

static String BATTERY_SERVICE_UUID = "0000180f-0000-1000-8000-00805f9b34fb";
static String BATTERY_LEVEL_UUID = "00002a1b-0000-1000-8000-00805f9b34fb";

@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
    if (status == BluetoothGatt.GATT_SUCCESS) {
        //Read the battery level
        getbattery(gatt);
    } 
}

void getbattery(BluetoothGatt mGatt) {
    BluetoothGattService batteryService = mGatt.getService(BATTERY_SERVICE_UUID);
    if(batteryService == null) {
        Log.i("BATTERYX", "Battery service not found!");
        return;
    }
    Log.i("BATTERYX", "Battery service found!");

    BluetoothGattCharacteristic batteryLevel = batteryService.getCharacteristic(BATTERY_LEVEL_UUID);
    if(batteryLevel == null) {
        Log.i("BATTERY", "Battery characteristic not found!");
        return;
    } Log.i("BATTERYX", "Battery characteristic found!");
    Log.i("BATTERYX", String.valueOf(mGatt.readCharacteristic(batteryLevel)));
}

Вот полный список обнаруженных услуг и характеристик.

## SERVICES
[{UUID=00001800-0000-1000-8000-00805f9b34fb, NAME=Service Unknown}, 
{UUID=00001801-0000-1000-8000-00805f9b34fb, NAME=Service Unknown}, 
{UUID=00001530-1212-efde-1523-785feabcd123, NAME=Service Unknown}, 
{UUID=0000180a-0000-1000-8000-00805f9b34fb, NAME=Service Unknown}, 
{UUID=6e400001-b5a3-f393-e0a9-e50e24dcca9e, NAME=SERIAL_TRANSFER_SERVICE_UUID}, 
{UUID=0000180f-0000-1000-8000-00805f9b34fb, NAME=BATTERY_SERVICE_UUID}]


## CHARACTERISTICS
[[{UUID=00002a00-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown}, //Device
{UUID=00002a01-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown},   //Appearance
{UUID=00002a04-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown}],  //Peripheral Preferred Connection Parameters
[{UUID=00002a05-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown}], //Service Changed

[{UUID=00001532-1212-efde-1523-785feabcd123, NAME=Characteristic Unknown}, 
{UUID=00001531-1212-efde-1523-785feabcd123, NAME=Characteristic Unknown}, 
{UUID=00001534-1212-efde-1523-785feabcd123, NAME=Characteristic Unknown}],

[{UUID=00002a29-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown}, //Manufacturer Name String
{UUID=00002a24-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown},  //Model Number String
{UUID=00002a28-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown},  //Software Revision String
{UUID=00002a26-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown},  //Firmware Revision String
{UUID=00002a27-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown}], //Hardware Revision String

[{UUID=6e400003-b5a3-f393-e0a9-e50e24dcca9e, NAME=SERIAL_TRANSFER_CHARACTERISTIC}, 
{UUID=6e400002-b5a3-f393-e0a9-e50e24dcca9e, NAME=Characteristic Unknown}],

[{UUID=00002a1b-0000-1000-8000-00805f9b34fb, NAME=Characteristic Unknown}]] //Battery level state

1 Ответ

0 голосов
/ 12 сентября 2018

Уровень заряда батареи должен отображать уровень заряда батареи от 0 до 64 (100) процентов

...