Считать значение структуры данных, привязанное к дескриптору Bluetooth LE в Android - PullRequest
0 голосов
/ 24 августа 2018

Я пишу приложение для Android, которое считывает данные, отправленные с процессора руки через BLE (с характеристиками и дескрипторами).в аппаратной части я использую функцию ниже:

tBleStatus aci_gatt_add_char_desc   (   uint16_t    serviceHandle,
uint16_t    charHandle,
uint8_t     descUuidType, //16 or 128 bit
const uint8_t *     uuid, //descriptor uuid
uint8_t     descValueMaxLen,
uint8_t     descValueLen,
const void *    descValue, //actual data
uint8_t     secPermissions,
uint8_t     accPermissions,
uint8_t     gattEvtMask,
uint8_t     encryKeySize,
uint8_t     isVariable,
uint16_t *  descHandle 
)   

И если мы передадим descValue в виде строки или общеизвестного значения типа, мы можем легко извлечь значение на стороне андроида, как показано ниже:

byte[] descValue = Descriptor.getValue();
String DescString = new String(descValue, "ISO_8859_1");  

или для числа с плавающей запятой, который я использую:

float wrapped = ByteBuffer.wrap(descValue).order(ByteOrder.LITTLE_ENDIAN).getFloat();

Однако вместо строки или любого отдельного типа данных я хочу отправить структуру в C (например, Формат представления характеристики (0x2904 UUID):

typedef __packed struct _charactFormat {
uint8_t format;
int8_t exp;
uint16_t unit;
uint8_t name_space;
uint16_t desc;
} PACKED charactFormat;

Но проблема в том, что когда мы вызываем функцию getValue() в Android, она возвращает байтовый массив, и я не знаю, как интерпретировать этот байтовый массив и извлечь из него данные

Я ищу способ отправки struct и не совсем ищу форму Char Pres. (Это возможно, поскольку приложение nRF connect может считывать структуру данных, но исходный код недоступен (даже в их наборе инструментов nRF).)

Любая помощь будет оценена

1 Ответ

0 голосов
/ 29 августа 2018

Я нашел свой ответ. Поскольку данные принимаются на стороне Android с помощью байтового массива, мы можем переводить каждый бит, если мы знаем структуру данных. Например, первый байт относительно формата может быть интерпретирован как int. если у нас есть строка (например, в случае добавления строки в вышеупомянутую структуру), наша строка будет начинаться с 8-го байта или байта 7. Таким образом, на стороне Android мы должны декодировать байт с 7 до последнего в строку.

...