2016-07-23 3 views
0

Мне сложно понять, как преобразовать команду bluetooth (от Gatttool) в код Bluez c.Перевести команду/запрос Gatttool на Bluez c

Можете ли вы помочь мне перевести следующую команду Gatttool (запрос bluetooth) на c?

[CON] [MY_MAC_ADDRESS] [LE]> углеродно записи REQ 0x00c0 0100

Так что моя ручка 0x00c0 и мои данные 0100 (на). Я не знаю, какие свойства структуры hci_request мне нужно заполнить (кроме дескриптора).

... I've successfully connected to the device (LE connection) 
struct hci_request rq = {0}; 
rq.ogf = ??; // should the handle go here? 
rq.ocf = ??; // should the data go here 
rq.cparam = ??; 
rq.clen = ??; 
rq.rparam = ??; 
rq.rlen = ??; 
rq.event = ??; // what would the event be? 

hci_send_req(dd, &rq, 1000); 

ответ

0

Почему лет не использовать стандартную команду Bluez Gatt т.е.

void WriteValue(array{byte} value, dict options) 

но объединить команду HCI самостоятельно?

Однако, если вы действительно хотите, чтобы объединить команду HCI (что означает, что вы пропустите/ATT/уровень L2CAP ГАТТ), формат «HCI ACL пакетов данных» определяется как «HCI_ACLDATA_PKT» в hci.h в Bluez: Ручка: ручка подключения вашего ACL. Packet_Boundary_Flag: 00/01/10 или 11 зависит от типа вашего L2cap. Broadcast_Flag: в основном 0x00, т. Е. Нет трансляции Data_Total_Length: длина вашего пакета. , тогда пакет должен включать длину PDU L2CAP и идентификатор канала (должен быть 0x0004 в качестве протокола ATT), затем добавить команду ATT pdu, код операции ввода (write command) att и данные.

+0

все в порядке, если вы хотите использовать команду «hci_send_req», эта команда используется для управления или настройки, а не для записи пакетов данных HCI. например когда вы читаете локальное имя, вы используете rq.ogf = OGF_HOST_CTL; \t rq.ocf = OCF_READ_LOCAL_NAME; \t rq.rparam = &rp; // формат ответа \t rq.rlen = READ_LOCAL_NAME_RP_SIZE; –

Смежные вопросы