Я пишу приложение для 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).)
Любая помощь будет оценена