HCI 数据格式
HCI COMMAND:

由16bit的Opcode(10bitOCF + 6bitOGF)+8bit数据总长位+数据组成
所以一整个HCI COMMAND的长度 =
packet[2] + sizeof(Opcode) + sizeof(packet[2]) + sizeof(type)
= packet[2] + 2 + 1 + 1
= packet[2] + 4;

关于OCF和OGF的值可以看 Core part e 7 HCI command2 and events

HCI ACL Data packets

由12bit handle + 2bit PB Flag + 2bit BC Flag + 16bit data length + data组成
一个HCI ACL Packet 的长度是:
(packet[3] << 8) + packet[2] + sizeof(handle + pb flag + bc flag) + sizeof( data length) + sizeof(type)
= (packet[3] << 8) + packet[2] + 2 + 2 + 1
= (packet[3] << 8) + packet[2] + 5;
PB Flag(Packet_Boundary_Flag):


BC Flag(Broadcast_Flag):

Handle 4C20: 010011000010 00(PC flag) 00(BC flag) 
HCI SCO(Synchronous) Data packet

由12bit Connection_Handle + 2bit Packet_Status_Flag + 2bit RFU(预留位) + 8bit data length + data组成
一个HCI SCO Packet 的长度是:
packet[2] + sizeof(Connection_Handle +Packet_Status_Flag + RFU) + sizeof(data length) + sizeof(type)
= packet[2] + 2 + 1 + 1
= packet[2] + 4


HCI Event packet

由8bit Event code + 8bit Parameter Total Length + Event Parameter
一个HCI Event Packet 的长度是:
packet[1] + sizeof(Event code) + sizeof(Parameter Total Length) + sizeof(type)
= packet[2] + 1+ 1 + 1
= packet[2] + 3

示例:


