发布网友 发布时间:2022-04-22 10:00
共1个回答
热心网友 时间:2023-10-09 18:25
通过HCI Packet包括四种,即Command,Event,ACL和SCO/eSCO,对应到MS-Stack中的定义,即为COMMAND_PACKET,EVENT_PACKET,DATA_PACKET_ACL和DATA_PACKET_SCO。
如下(详细参照bt_hcip.h):
enum HCI_TYPE {
COMMAND_PACKET = 1,
DATA_PACKET_ACL = 2,
DATA_PACKET_SCO = 3,
EVENT_PACKET = 4,
ETYPE_FINISH = 5
};
需要指出的是COMMAND_PACKET方向是从Host写入到Controller,EVENT_PACKET为Controller发送给Host,即单向的数据。而DATA_PACKET_ACL和DATA_PACKET_SCO为双向的数据,即可以HostàController,也可以ControlleràHost。
接下来看两个与发包和收包相关的函数的定义,如下:
int HCI_WritePacket(HCI_TYPE eType, BD_BUFFER *pBuff)
int HCI_ReadPacket(HCI_TYPE *peType, BD_BUFFER *pBuff)
其第一个参数etype就是用来表示R/W Packet的类型,第二个参数为包的具体数据,通过串口输出我们就可以获取到完整的HCI包的数据。
所以通过在HCI_WritePacket()/HCI_ReadPacket()中对eType值的判断,很容易知道是Command Packet,还是Event Packet。