2016-07-23 24 views
0

Ich habe Schwierigkeiten herauszufinden, wie ich meinen Bluetooth-Befehl (von Gatttool) in Bluez c-Code konvertieren.Übersetzen Gatttool Befehl/Anfrage an Bluez c

Können Sie mir helfen, den folgenden Gatttool-Befehl (Bluetooth-Anfrage) in c zu übersetzen?

[CON] [MY_MAC_ADDRESS] [LE]> char-write-req 0x00c0 0100

Also mein Griff 0x00c0 und meine Daten ist 0100 (on). Ich weiß nicht, welche hci_request Struktureigenschaften ich (außer für den Griff) füllen muss.

... 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); 

Antwort

0

Warum yo nicht den Standard bluez gatt Befehl verwenden, das heißt

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

aber die HCI-Befehl selbst kombinieren?

Allerdings, wenn Sie wirklich die HCI Befehl kombinieren möchten (was bedeutet, dass Sie das GATT/ATT/L2CAP Ebene überspringen), das Format „HCI ACL Datenpakete“ definiert als „HCI_ACLDATA_PKT“ bei hci.h bei BlueZ: Handle: Der Verbindungsgriff Ihrer ACL. Packet_Boundary_Flag: 00/01/10 oder 11 hängt vom L2cap-Pakettyp ab. Broadcast_Flag: im Grunde ist 0x00, d. H. Keine Broadcast Data_Total_Length: Länge Ihres Pakets. dann das Paket muss die L2CAP PDU Länge und Kanal-ID (sollte 0x0004 als ATT-Protokoll sein), dann den ATT pdu Typ, Opcode (Schreibbefehl) att Handle und Daten anhängen.

+0

alles für den Fall, wenn Sie den Befehl "hci_send_req" verwenden möchten, wird dieser Befehl für Steuerungs- oder Einstellungszwecke verwendet, nicht für das Schreiben von HCI-Datenpaketen. z.B. Wenn Sie den lokalen Namen lesen, verwenden Sie rq.ogf = OGF_HOST_CTL; \t rq.ocf = OCF_READ_LOCAL_NAME; \t rq.rparam = &rp; // Antwortformat \t rq.rlen = READ_LOCAL_NAME_RP_SIZE; –