当前位置:   article > 正文

一个BLE HCI ACLpacket的实例分析_acl-c packet

acl-c packet

一个BLE HCI ACLpacket的实例分析,原始数据如下

02 02 20 0f 00 0b 00 04 00 1b 2f 00 00 00 4f 00 00 00 00 00

 

1. 第1字节表示HCI packet的类型

Vol 4: Host Controller Interface [Transport Layer] -- Part A -- 2 protocol

  1. // bluedroid\hci\src\hci_h4.c
  2. /* HCI H4 message type definitions */
  3. #define H4_TYPE_COMMAND 1
  4. #define H4_TYPE_ACL_DATA 2
  5. #define H4_TYPE_SCO_DATA 3
  6. #define H4_TYPE_EVENT 4

02 表示这是一个HCI ACL Data packet

 

2. HCI ACL Data packet的第2、3字节代表Handle + PB Flag + BC Flag

 

 

小端模式的“02 20”实际值为0x2002,对应上图可知

Handle = 0x2002 & 0x0FFF = 0x0002

PB Flag = (0x20 >> 4) & 0x03 = 0x02,表示这是一个起始包

 

3. HCI ACL Data packet的第4、5字节代表该HCI ACL Data packet的Data Total Length

小端模式的“0f 00”实际值为0x000f,Data部分的数据总长度是15。

 

4. 起始包的第6、7字节代表该PDU的长度,如果PDU的长度超过了Data Total Length,将要分包发送

“0b 00” = 0x000b, L2CAP PDU的长度为11

 

5. 起始包的第8、9字节代表该L2CAP PDU的Channel ID

  1. // bluedroid\stack\include\l2cdefs.h
  2. /* L2CAP Predefined CIDs (0x0004-0x003E Reserved)
  3. */
  4. #define L2CAP_SIGNALLING_CID 1
  5. #define L2CAP_CONNECTIONLESS_CID 2
  6. #define L2CAP_AMP_CID 3
  7. #define L2CAP_ATT_CID 4
  8. #define L2CAP_BLE_SIGNALLING_CID 5
  9. #define L2CAP_SMP_CID 6
  10. #define L2CAP_AMP_TEST_CID 0x003F
  11. #define L2CAP_BASE_APPL_CID 0x0040

“04 00” = 0x0004,表示Attribute protocol

 

6. 第10字节代表Attribute protocol PDU的操作码Opcode

  1. // bluedroid\stack\include\gatt_api.h
  2. #define GATT_RSP_ERROR 0x01
  3. #define GATT_REQ_MTU 0x02
  4. #define GATT_RSP_MTU 0x03
  5. #define GATT_REQ_FIND_INFO 0x04
  6. #define GATT_RSP_FIND_INFO 0x05
  7. #define GATT_REQ_FIND_TYPE_VALUE 0x06
  8. #define GATT_RSP_FIND_TYPE_VALUE 0x07
  9. #define GATT_REQ_READ_BY_TYPE 0x08
  10. #define GATT_RSP_READ_BY_TYPE 0x09
  11. #define GATT_REQ_READ 0x0A
  12. #define GATT_RSP_READ 0x0B
  13. #define GATT_REQ_READ_BLOB 0x0C
  14. #define GATT_RSP_READ_BLOB 0x0D
  15. #define GATT_REQ_READ_MULTI 0x0E
  16. #define GATT_RSP_READ_MULTI 0x0F
  17. #define GATT_REQ_READ_BY_GRP_TYPE 0x10
  18. #define GATT_RSP_READ_BY_GRP_TYPE 0x11
  19. #define GATT_REQ_WRITE 0x12 /* 0001-0010 (write)*/
  20. #define GATT_RSP_WRITE 0x13
  21. #define GATT_CMD_WRITE 0x52 /* changed in V4.0 01001-0010(write cmd)*/
  22. #define GATT_REQ_PREPARE_WRITE 0x16
  23. #define GATT_RSP_PREPARE_WRITE 0x17
  24. #define GATT_REQ_EXEC_WRITE 0x18
  25. #define GATT_RSP_EXEC_WRITE 0x19
  26. #define GATT_HANDLE_VALUE_NOTIF 0x1B
  27. #define GATT_HANDLE_VALUE_IND 0x1D
  28. #define GATT_HANDLE_VALUE_CONF 0x1E
  29. #define GATT_SIGN_CMD_WRITE 0xD2 /* changed in V4.0 1101-0010 (signed write) see write cmd above*/
  30. #define GATT_OP_CODE_MAX GATT_HANDLE_VALUE_CONF + 1 /* 0x1E = 30 + 1 = 31*/

”1b“ GATT_HANDLE_VALUE_NOTIF

“2f 00” = 0x002f -- the handle of the attribute

“00 00 4f 00 00 00 00 00” -- the current value of the attribute

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/192338
推荐阅读
相关标签
  

闽ICP备14008679号