第一部分:HCI协议(六)HCI command错误处理

六、command错误处理

一般来说,command对应event中任何参数提示error,那么就表示这个command没有被执行。

当一个command发生错误时:

(1)如果正常情况下这个command只返回HCI_Command_Complete event,则event的status参数会设置对应的错误码;这种情况下command没有被执行;

(2)如果正常情况下这个command返回HCI_Command_Status event和一个由command指定的completion event,有两种可能情况:

A、HCI_Command_Status event返回的参数中status不等于0,这种情况下,对应的command不会执行,另外也不会有其他completion event返回。

B、HCI_Command_Status event返回的参数中status等于0,这种情况表示在command指定的completion event的status参数里面会设置错误码。

注意:

A、如果是上面第(1)种错误,HCI_Command_Complete event中的参数可能只返回一部分,其中status是必须会返回的第一个参数,用来表示错误的原因,如果后面紧跟着一个Handle或者一个BD_ADDR参数,那么这两个参数也应该被返回,用来帮助host确定这个HCI_Command_Complete event对应的是哪个command;

B、如果是上面的第(2)种错误的B情况,command指定的completion event中status是必须会返回的第一个参数,用来表示错误的原因,如果后面紧跟着一个Handle或者一个BD_ADDR参数,那么这两个参数也应该被返回,用来帮助host确定这个HCI_Command_Complete event对应的是哪个command,但是也有几种特殊情况如下图所示:

第一部分:HCI协议(六)HCI command错误处理

C、HCI_LE_Meta事件的Subevent_Code参数(参见7.7.65节)不作为参数处理,并且始终有效

D、HCI_Read_BD_ADDR command对应的HCI_Command_Complete event中的BD_ADDR不能用来确定HCI_Command_Complete event对应哪个command