Hi,
hci的命令的格式定义的很明确,是5个bytes的头+内容。那么对应的hci命令的回复的格式和event格式的定义呢
我这边测试了一下,命令的回复都是19 01 02 01 00 00,对吗
如何解析hci command命令的回复及对应的event
已解决! 转到解答。
EVENT的格式和command是一样的,包头都是5个byte:19 xx xx xx xx
1. 第一个字节0x19为固定值
2. 第二个字节为event code,在WICED-HCI-Control-Protocol.pdf文档中,每个event介绍的operating code部分可以找到相应的值。例如,对于LE Connected Event,可以查到对应的operating code是0x05。在include/commen/hci_control_api.h中也可以找到相应的宏定义。
3. 第三个字节为group code,在WICED-HCI-Control-Protocol.pdf文档中Table 3-1中可以找到每个group对应的code,例如,LE对应的group code为0x01。在include/commen/hci_control_api.h有每个group的宏定义。
4. 第四和第五两个字节是长度,第四字节为low byte,第五字节为high byte。指的是纯数据的长度,不包含包头的五位。
请注意,WICED-HCI-Control-Protocol.pdf文档中列出的event并不全面,如果遇到找不到的,请到include/commen/hci_control_api.h中查看对应的说明。
你给出的19 01 02 01 00 00的event表示的是GATT group中的GATT Command Status的event。
event的格式明白了。hci命令的回复的格式呢?这些格式有什么相关的文档吗
不太明白你的问题,HCI Command的回复就是Event。你可以举个例子说明吗?
我理解的是hci command,hci command response,及对应的hci command event.
比如19 03 01 07 00 00 aa 55 44 33 22 11的命令发给模块,应该会有一条对应的这个命令的回复来表示这条命令是否设置成功(相关命令的ok或者err)? 然后如果成功的话,会有对应的event过来(比如说是connection up的event).
请参考command status的event,这个event会返回命令的执行情况。
参考哪里
WICED-Studio-6.2\Doc\WICED-HCI-Control-Protocol.pdf
我有个疑惑,以connect为例,
19 03 01 07 00 00 bb 55 44 33 22 11的命令发出去以后,有收到connected的event(19 05 01 0A 00 00 BB 55 44 33 22 11 01 00 00).但我怎么没有收到command status的回复?
1.应该是现有command status的回复再有connected的event过来。对吗?
2. command status的回复(正常执行的话)是19 01 01 00 00 00吗?
请查看一下代码中是否有发送回复的代码,下面是audio_gateway的BLE connect指令中的回复:
void hci_control_le_handle_connect_cmd( uint8_t addr_type, BD_ADDR addr )
{
int i;
wiced_bool_t status;
/* Initiate the connection */
STREAM_TO_BDADDR(hci_control_le_remote_bdaddr,addr);
status = wiced_bt_gatt_le_connect( hci_control_le_remote_bdaddr, addr_type, BLE_CONN_MODE_HIGH_DUTY,WICED_TRUE );
/* Start le connection timer */
if ( status == WICED_TRUE )
wiced_start_timer( &hci_control_le_connect_timer, LE_CONTROL_CONNECT_TIMEOUT );
WICED_BT_TRACE( "wiced_bt_gatt_connect status %d, BDA %B, Addr Type %x\n",
status, hci_control_le_remote_bdaddr, addr_type );
hci_control_send_command_status_evt( HCI_CONTROL_GATT_EVENT_COMMAND_STATUS,
status == WICED_TRUE ? HCI_CONTROL_STATUS_IN_PROGRESS : HCI_CONTROL_STATUS_FAILED);
}