Перевести команду/запрос Gatttool в Bluez c

Мне трудно понять, как преобразовать мою команду Bluetooth (из Gatttool) в код Bluez c.

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

[CON][MY_MAC_ADDRESS][LE]> char-write-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);

person sazr    schedule 23.07.2016    source источник


Ответы (1)


Почему бы вам не использовать стандартную команду bluez gatt, т.е.

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

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

Однако, если вы действительно хотите объединить команду HCI (что означает, что вы пропускаете уровень GATT/ATT/L2CAP), используйте формат «Пакеты данных ACL HCI», определенный как «HCI_ACLDATA_PKT» в hci.h в BlueZ: Handle:The Connection Handle. вашего списка контроля доступа. Packet_Boundary_Flag:00/01/10 или 11 зависит от типа вашего пакета L2cap. Broadcast_Flag: в основном это 0x00, т.е. нет широковещательной передачи Data_Total_Length: длина вашего пакета. затем пакет должен включать длину PDU L2CAP и идентификатор канала (должен быть 0x0004 в качестве протокола ATT), затем добавить тип pdu ATT, код операции (команда записи), дескриптор att и данные.

person Guo Xingmin    schedule 25.07.2016
comment
все в порядке, если вы хотите использовать команду hci_send_req, эта команда используется для управления или настройки, а не для записи пакета данных HCI. например когда вы читаете локальное имя, вы используете rq.ogf = OGF_HOST_CTL; rq.ocf = OCF_READ_LOCAL_NAME; rq.rparam = // формат ответа rq.rlen = READ_LOCAL_NAME_RP_SIZE; - person Guo Xingmin; 25.07.2016