| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- BTSnoop/Monitor protocol formats
- ********************************
- Opcode definitions
- ==================
- New Index
- ---------
- Code: 0x0000
- Parameters: Type (1 Octet
- Bus (1 Octet)
- BD_Addr (6 Octets)
- Name (8 Octets)
- This opcode indicates that a new controller instance with a
- given index was added. With some protocols, like the TTY-based
- one there is only a single supported controller, meaning the
- index is implicitly 0.
- Deleted Index
- -------------
- Code: 0x0001
- This opcode indicates that the controller with a specific index
- was removed.
- Command Packet
- --------------
- Code: 0x0002
- HCI command packet.
- Event Packet
- ------------
- Code: 0x0003
- HCI event packet.
- ACL TX Packet
- -------------
- Code: 0x0004
- Outgoing ACL packet.
- ACL RX Packet
- -------------
- Code: 0x0005
- Incoming ACL packet.
- SCO TX Packet
- --------------
- Code: 0x0006
- Outgoing SCO packet.
- SCO RX Packet
- -------------
- Code: 0x0007
- Incomnig SCO packet.
- Open Index
- ----------
- Code: 0x0008
- The HCI transport for the specified controller has been opened.
- Close Index
- -----------
- Code: 0x0009
- The HCI transport for the specified controller has been closed.
- Index Information
- -----------------
- Code: 0x000a
- Parameters: BD_Addr (6 Octets)
- Manufacturer (2 Octets)
- Information about a specific controller.
- Vendor Diagnostics
- ------------------
- Code: 0x000b
- Vendor diagnostic information.
- System Note
- -----------
- Code: 0x000c
- System note.
- User Logging
- ------------
- Code: 0x000d
- Parameters: Priority (1 Octet)
- Ident_Length (1 Octet)
- Ident (Ident_Length Octets)
- User logging information.
- TTY-based protocol
- ==================
- This section covers the protocol that can be parsed by btmon when
- passing it the --tty parameter. The protocol is little endian, packet
- based, and has the following header for each packet:
- struct tty_hdr {
- uint16_t data_len;
- uint16_t opcode;
- uint8_t flags;
- uint8_t hdr_len;
- uint8_t ext_hdr[0];
- } __attribute__ ((packed));
- The actual payload starts at ext_hdr + hdr_len and has the length of
- data_len - 4 - hdr_len. Each field of the header is defined as follows:
- data_len:
- This is the total length of the entire packet, excuding the
- data_len field itself.
- opcode:
- The BTSnoop opcode
- flags:
- Special flags for the packet. Currently no flags are defined.
- hdr_len:
- Length of the extended header.
- ext_hdr:
- This is a sequence of header extension fields formatted as:
- struct {
- uint8_t type;
- uint8_t value[length];
- }
- The length of the value is dependent on the type. Currently the
- following types are defined:
- Type Length Meaning
- ----------------------------------------------------------------
- 1 Command drops 1 byte Dropped HCI command packets
- 2 Event drops 1 byte Dropped HCI event packets
- 3 ACL TX drops 1 byte Dropped ACL TX packets
- 4 ACL RX drops 1 byte Dropped ACL RX packets
- 5 SCO TX drops 1 byte Dropped SCO TX packets
- 6 SCO RX drops 1 byte Dropped SCO RX packets
- 7 Other drops 1 byte Dropped other packets
- 8 32-bit timestamp 4 bytes Timestamp in 1/10th ms
- The drops fields indicate the number of packets that the
- implementation had to drop (e.g. due to lack of buffers) since
- the last reported drop count.
- The fields of the extended header must be sorted by increasing
- type. This is essential so that unknown types can be ignored and
- the parser can jump to processing the payload.
|