| Tester protocol for Bluetooth stack |
| *********************************** |
| |
| Copyright (C) 2015 Intel Corporation |
| |
| |
| Overview |
| ======== |
| |
| This document describes the format of data used for communicating between tester |
| and implementation under test (IUT). |
| |
| The protocol is SOCK_STREAM based and follows a strict PDU specification |
| with a generic header and initial registration exchange. The communication is |
| driver from tester with commands/response exchange. The protocol is single PDU |
| exchanged based, meaning every command requires a response. IUT will use events |
| to signal notifications. |
| |
| Commands and events use single socket. All services are multi-plexed over same |
| socket. |
| |
| .-- IUT --. .--Tester--. |
| | | | | |
| | | Command | | |
| | | <-------------------------- | | |
| | | | | |
| | | Response | | |
| | | --------------------------> | | |
| | | | | |
| | | Event | | |
| | | --------------------------> | | |
| | | | | |
| '-----------' '----------' |
| |
| |
| Packet Structures |
| ================= |
| |
| Every packet will follow the basic header to support simple multi-plexing |
| over the same socket. It will also support a basic control channel with service |
| id 0. Due to use of single socket for command/response and events it is |
| possible that event(s) will be received before response to command. |
| |
| 0 8 16 24 40 |
| +------------+--------+------------------+-------------+ |
| | Service ID | Opcode | Controller Index | Data Length | |
| +------------+--------+------------------+-------------+ |
| | | |
| |
| The unique service ID is assigned by this specification for each service |
| supported by tester. |
| |
| As general rule of thumb, the opcode for command matches the opcode for a |
| response. Or the opcode 0x00 for an error is returned. |
| |
| Events opcodes start from 0x80. |
| |
| All fields are in little-endian byte order (least significant byte first). |
| |
| Controller Index can have a special value <non-controller> to indicate that |
| command or event is not related to any controller. Possible values: |
| |
| <controller id> 0x00 to 0xFE |
| <non-controller> 0xFF |
| |
| Error response is common for all services and has fixed structure: |
| |
| Opcode 0x00 - Error response |
| |
| Response parameters: Status (1 octet) |
| |
| Valid status values: 0x01 = Fail |
| 0x02 = Unknown Command |
| 0x03 = Not ready |
| 0x04 = Invalid Index |
| |
| Core Service (ID 0) |
| =================== |
| |
| Commands and responses: |
| |
| Opcode 0x00 - Error response |
| |
| Opcode 0x01 - Read Supported Commands command/response |
| |
| Controller Index: <non-controller> |
| Command parameters: <none> |
| Response parameters: <supported commands> (variable) |
| |
| Each bit in response is a flag indicating if command with |
| opcode matching bit number is supported. Bit set to 1 means |
| that command is supported. Bit 0 is reserved and shall always |
| be set to 0. If specific bit is not present in response (less |
| than required bytes received) it shall be assumed that command |
| is not supported. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x02 - Read Supported Services command/response |
| |
| Controller Index: <non-controller> |
| Command parameters: <none> |
| Response parameters: <supported services> (variable) |
| |
| Each bit in response is a flag indicating if service with ID |
| matching bit number is supported. Bit set to 1 means that |
| service is supported. If specific bit is not present in response |
| (less than required bytes received) it shall be assumed that |
| service is not supported. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x03 - Register Service command/response |
| |
| Controller Index: <non-controller> |
| Command parameters: Service ID (1 octet) |
| Response parameters: <none> |
| |
| In case a command is sent for an undeclared service ID, it will |
| be rejected. Also there will be no events for undeclared |
| service ID. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x04 - Unregister Service command/response |
| |
| Controller Index: <non-controller> |
| Command parameters: Service ID (1 octet) |
| Response parameters: <none> |
| |
| In case of an error, the error response will be returned. |
| |
| Events: |
| Opcode 0x80 - IUT ready event |
| |
| Controller Index: <non-controller> |
| Event parameters: <none> |
| |
| This event indicates that IUT has been initialized and is ready to |
| receive BTP commands. |
| Tester shall wait for this event before sending any command to the IUT. |
| |
| GAP Service (ID 1) |
| ================== |
| |
| Commands and responses: |
| |
| Opcode 0x00 - Error response |
| |
| Opcode 0x01 - Read Supported Commands command/response |
| |
| Controller Index: <non-controller> |
| Command parameters: <none> |
| Response parameters: <supported commands> (variable) |
| |
| Each bit in response is a flag indicating if command with |
| opcode matching bit number is supported. Bit set to 1 means |
| that command is supported. Bit 0 is reserved and shall always |
| be set to 0. If specific bit is not present in response (less |
| than required bytes received) it shall be assumed that command |
| is not supported. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x02 - Read Controller Index List command/response |
| |
| Controller Index: <non-controller> |
| Command parameters: <none> |
| Response parameters: Number of Controllers (1 octet) |
| Controller Index[i] (1 octet) |
| |
| This command returns the list of controllers. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x03 - Read Controller Information command/response |
| |
| Controller Index: <controller id> |
| Command parameters: <none> |
| Response parameters: Address (6 Octets) |
| Supported_Settings (4 Octets) |
| Current_Settings (4 Octets) |
| Class_Of_Device (3 Octets) |
| Name (249 Octets) |
| Short_Name (11 Octets) |
| |
| This command is used to retrieve the current state and basic |
| information of a controller. It is typically used right after |
| getting the response to the Read Controller Index List command |
| |
| Current_Settings and Supported_Settings is a bitmask with |
| currently the following available bits: |
| |
| 0 Powered |
| 1 Connectable |
| 2 Fast Connectable |
| 3 Discoverable |
| 4 Bondable |
| 5 Link Level Security (Sec. mode 3) |
| 6 Secure Simple Pairing |
| 7 Basic Rate/Enhanced Data Rate |
| 8 High Speed |
| 9 Low Energy |
| 10 Advertising |
| 11 Secure Connections |
| 12 Debug Keys |
| 13 Privacy |
| 14 Controller Configuration |
| 15 Static Address |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x04 - Reset command/response |
| |
| Controller Index: <controller id> |
| Command parameters: <none> |
| Response parameters: Current_Settings (4 Octets) |
| |
| This allows to clean up any state data (eg. keys) and restore |
| controller to its default system state. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x05 - Set Powered command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Powered (1 octet) |
| Response parameters: Current_Settings (4 Octets) |
| |
| Valid Powered values: 0x00 = Off |
| 0x01 = On |
| |
| This command is used to power on or off a controller. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x06 - Set Connectable command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Connectable (1 octet) |
| Response parameters: Current_Settings (4 Octets) |
| |
| Valid Connectable values: 0x00 = Off |
| 0x01 = On |
| |
| This command is used to set controller connectable. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x07 - Set Fast Connectable command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Fast Connectable (1 octet) |
| Response parameters: Current_Settings (4 Octets) |
| |
| Valid Fast Connectable values: 0x00 = Off |
| 0x01 = On |
| |
| This command is used to set controller fast connectable. |
| This command is only available for BR/EDR capable controllers. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x08 - Set Discoverable command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Discoverable (1 octet) |
| Response parameters: Current_Settings (4 Octets) |
| |
| Valid Discoverable values: 0x00 = Off |
| 0x01 = General Discoverable |
| 0x02 = Limited Discoverable |
| |
| This command is used to set controller discoverable. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x09 - Set Bondable command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Bondable (1 octet) |
| Response parameters: Current_Settings (4 Octets) |
| |
| Valid Bondable values: 0x00 = Off |
| 0x01 = On |
| |
| This command is used to set controller bondable. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0a - Start Advertising command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Adv_Data_Len (1 octet) |
| Scan_Rsp_len (1 octet) |
| Adv_Data (0-255 octets) |
| Scan_Rsp (0-255 octets) |
| Return Parameters: Current_Settings (4 Octets) |
| |
| This command is used to start advertising. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0b - Stop Advertising command/response |
| |
| Controller Index: <controller id> |
| Command parameters: <none> |
| Return Parameters: Current_Settings (4 Octets) |
| |
| This command is used to stop advertising. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0c - Start Discovery command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Flags (1 octet) |
| Return Parameters: <none> |
| |
| Possible values for the Flags parameter are a bit-wise or |
| of the following bits: |
| 0 = LE scan |
| 1 = BR/EDR scan |
| 2 = Use limited discovery procedure |
| 3 = Use active scan type |
| 4 = Use observation procedure |
| |
| This command is used to start discovery. |
| |
| Observation Procedure allows to receive advertisements |
| (and scan responses) from broadcasters (that are not visible |
| during General or Limited discovery, because those are not |
| discoverable). This procedure can use either passive or active |
| scan type. If "Use observation procedure" (bit 4) is set, |
| "Use limited discovery procedure" (bit 2) is excluded. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0d - Stop Discovery command/response |
| |
| Controller Index: <controller id> |
| Command parameters: <none> |
| Return Parameters: <none> |
| |
| This command is used to stop discovery. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0e - Connect command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Return Parameters: <none> |
| |
| Valid Address_Type parameter values: |
| 0x00 = Public |
| 0x01 = Random |
| |
| This command is used to create a Link Layer connection with |
| remote device. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0f - Disconnect command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Return Parameters: <none> |
| |
| Valid Address_Type parameter values: |
| 0x00 = Public |
| 0x01 = Random |
| |
| This command is used to terminate an existing connection or |
| to cancel pending connection attempt. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x10 - Set IO Capability command/response |
| |
| Controller Index: <controller id> |
| Command parameters: IO_Capability (1 octet) |
| Return Parameters: <none> |
| |
| Valid IO_Capabilities parameter values: |
| 0x00 = Display Only |
| 0x01 = Display Yes/No |
| 0x02 = Keyboard Only |
| 0x03 = No Input, No Output |
| 0x04 = Keyboard Display |
| |
| This command is used to set IO capability. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x11 - Pair command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Return Parameters: <none> |
| |
| This command is used to initiate pairing with remote. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x12 - Unpair command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Return Parameters: <none> |
| |
| This command is used to unpair with remote. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x13 - Passkey Entry Response command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Passkey (4 octets) |
| Return Parameters: <none> |
| |
| This command is used to response with passkey for pairing |
| request. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x14 - Passkey Confirmation Response command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Match (1 octet) |
| Return Parameters: <none> |
| |
| This command is used to response for pairing request with |
| confirmation in accordance with initiator and responder |
| passkey. |
| |
| In case of an error, the error response will be returned. |
| |
| Events: |
| Opcode 0x80 - New Settings event |
| |
| Controller Index: <controller id> |
| Event parameters: Current_Settings (4 octets) |
| |
| This event indicates that one or more of the settings for a |
| controller has changed. |
| |
| Opcode 0x81 - Device Found event |
| |
| Controller Index: <controller id> |
| Event parameters: Address (6 octets) |
| Address_Type (1 octet) |
| RSSI (1 octet) |
| Flags (1 octet) |
| EIR_Data_Length (2 Octets) |
| EIR_Data (0-65535 Octets) |
| |
| Possible values for the Flags parameter are a bit-wise or |
| of the following bits: |
| 0 = RSSI valid |
| 1 = Adv_Data included |
| 2 = Scan_Rsp included |
| |
| This event indicates that a device was found during device |
| discovery. |
| |
| Opcode 0x82 - Device Connected event |
| |
| Controller Index: <controller id> |
| Event parameters: Address_Type (1 octet) |
| Address (6 octets) |
| |
| This event indicates that a device was connected. |
| |
| Opcode 0x83 - Device Disconnected event |
| |
| Controller Index: <controller id> |
| Event parameters: Address_Type (1 octet) |
| Address (6 octets) |
| |
| This event indicates that a device was disconnected. |
| |
| Opcode 0x84 - Passkey Display event |
| |
| Controller Index: <controller id> |
| Event parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Passkey (4 octets) |
| |
| This event indicates that passkey was received and it needs to |
| be confirmed on remote side. |
| |
| Opcode 0x85 - Passkey Enter Request event |
| |
| Controller Index: <controller id> |
| Event parameters: Address_Type (1 octet) |
| Address (6 octets) |
| |
| This event indicates that remote requests for passkey enter. |
| |
| Opcode 0x86 - Passkey Confirm Request event |
| |
| Controller Index: <controller id> |
| Event parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Passkey (4 octets) |
| |
| This event indicates that passkey needs to be confirmed. |
| |
| Opcode 0x87 - Identity Resolved event |
| |
| Controller Index: <controller id> |
| Event parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Identity_Address_Type (1 octet) |
| Identity_Address (6 octets) |
| |
| This event indicates that the remote Identity Address has been |
| resolved. |
| |
| GATT Service (ID 2) |
| =================== |
| |
| Commands and responses: |
| |
| Opcode 0x00 - Error response |
| |
| Opcode 0x01 - Read Supported Commands command/response |
| |
| Controller Index: <non-controller> |
| Command parameters: <none> |
| Response parameters: <supported commands> (variable) |
| |
| Each bit in response is a flag indicating if command with |
| opcode matching bit number is supported. Bit set to 1 means |
| that command is supported. Bit 0 is reserved and shall always |
| be set to 0. If specific bit is not present in response (less |
| than required bytes received) it shall be assumed that command |
| is not supported. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x02 - Add Service |
| |
| Controller Index: <controller id> |
| Command parameters: Type (1 octet) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| Response parameters: Service_ID (2 octets) |
| |
| Valid Type parameter values: |
| 0x00 = Primary |
| 0x01 = Secondary |
| |
| Valid UUID_Length parameter values: |
| 0x02 = UUID16 |
| 0x10 = UUID128 |
| |
| This command is used to add new service to GATT Server. |
| Service ID of service declaration is returned in the response. |
| Attribute database shall be initiated sequentially. |
| After this issuing this command tester shall add characteristics |
| or included services this service contains. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x03 - Add Characteristic |
| |
| Controller Index: <controller id> |
| Command parameters: Service_ID (2 octets) |
| Properties (1 octet) |
| Permissions (1 octet) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| Response parameters: Characteristic_ID (2 octets) |
| |
| Possible values for Service_ID: |
| 0x0000 = Add in sequence |
| 0x0001-0xffff = Add to service |
| |
| Possible response parameters: |
| 0x0000 = Relative ID, will be set after |
| start_server |
| 0x0001-0xffff = ID in db |
| |
| Possible values for the Properties parameter are a bit-wise |
| of the following bits: |
| |
| 0 Broadcast |
| 1 Read |
| 2 Write Without Response |
| 3 Write |
| 4 Notify |
| 5 Indicate |
| 6 Authenticated Signed Writes |
| 7 Extended Properties |
| |
| Possible values for the Permissions parameter are a bit-wise |
| of the following bits: |
| |
| 0 Read |
| 1 Write |
| 2 Read with Encryption |
| 3 Write with Encryption |
| 4 Read with Authentication |
| 5 Write with Authentication |
| 6 Read with Authorization |
| 7 Write with Authorization |
| |
| This command is used to add new characteristic to GATT Server. |
| Characteristic ID of characteristic declaration is returned in |
| the response. |
| Attribute's database shall be initiated sequentially. |
| After issuing this command tester can add descriptors to this |
| characteristic. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x04 - Add Descriptor |
| |
| Controller Index: <controller id> |
| Command parameters: Characteristic_ID (2 octets) |
| Permissions (1 octet) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| Response parameters: Descriptor_ID (2 octets) |
| |
| Possible values for Characteristic_ID: |
| 0x0000 = Add in sequence |
| 0x0001-0xffff = Add to characteristic |
| |
| Possible response parameters: |
| 0x0000 = Relative ID, will be set after |
| start_server |
| 0x0001-0xffff = ID in db |
| |
| This command is used to add new characteristic descriptor |
| to GATT Server. The command shall be used right after |
| Add Characteristic or previous Add Descriptor command. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x05 - Add Included Service |
| |
| Controller Index: <controller id> |
| Command parameters: Service_ID (2 octets) |
| Response parameters: Included_Service_ID (2 octets) |
| |
| This command is used to add new included service declaration |
| to GATT Server. Service that is going to be included has to be |
| already added to the server. Attribute_ID of include |
| declaration is returned in the response. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x06 - Set Characteristic/Descriptor Value |
| |
| Controller Index: <controller id> |
| Command parameters: Attribute_ID (2 octets) |
| Value_Length (2 octet) |
| Value (1-512 octets) |
| Response parameters: <none> |
| |
| Possible values for Characteristic_ID: |
| 0x0000 = Set last attribute in db value |
| 0x0001-0xffff = Set value of attribute |
| under ID |
| |
| This command is used to set the value of characteristic |
| or descriptor. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x07 - Start Server |
| |
| Controller Index: <controller id> |
| Command parameters: <none> |
| Response parameters: Database_Attribute_Offset (2 octets) |
| Database_Attribute_Count (1 octet) |
| |
| This command is used to start server with previously prepared |
| attributes database. Device database may contain predefined |
| attributes. Predefined attributes should be registered before |
| attempt to register sequential database. |
| Subsequent calls of this command shall return an error. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x08 - Reset Server |
| |
| Controller Index: <controller id> |
| Command parameters: <none> |
| Response parameters: <none> |
| |
| This command is used to clear the server from attributes. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x09 - Set Required Encryption Key Size |
| |
| Controller Index: <controller id> |
| Command parameters: Attribute_ID (2 octets) |
| Encryption_Key_Size (1 octet) |
| Response parameters: <none> |
| |
| Possible values for Attribute_ID: |
| 0x0000 = Set encryption key of last |
| added attribute |
| 0x0001-0xffff = Set enctryption of |
| attribute under ID |
| |
| This command is used to set required Encryption Key Size of an |
| attribute. It shall be used only if encryption or authentication |
| is needed to have access to this attribute. Otherwise an error |
| shall be returned. |
| |
| Possible values for Encryption_Key_Size parameter are: |
| <0x07, 0x0f> |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0a - Exchange MTU |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Response parameters: <none> |
| |
| This command is used by GATT Client to configure ATT protocol. |
| IUT is expected to send Exchange MTU Request to negotiate |
| MTU size. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0b - Discover All Primary Services |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Response parameters: Services_Count (1 octet) |
| [array] Service (variable) |
| |
| Object Service is defined as: |
| Start_Handle (2 octets) |
| End_Group_Handle (2 octets) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| |
| Valid UUID_Length parameter values: |
| 0x02 = UUID16 |
| 0x10 = UUID128 |
| |
| This procedure is used by a client to discover all primary |
| services on a server. |
| Services found during discovery are returned in the response. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0c - Discover Primary Service by UUID |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| Response parameters: Services_Count (1 octet) |
| [array] Service (variable) |
| |
| Object Service is defined as: |
| Start_Handle (2 octets) |
| End_Group_Handle (2 octets) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| |
| Valid UUID_Length parameter values: |
| 0x02 = UUID16 |
| 0x10 = UUID128 |
| |
| This procedure is used by a client to discover primary services |
| with specific UUID on a server. |
| Services found during discovery are returned in the response. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0d - Find Included Services |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Service_Start_Handle (2 octets) |
| Service_End_Handle (2 octets) |
| Response parameters: Services_Count (1 octet) |
| [array] Included_Service (variable) |
| |
| Object Included_Service is defined as: |
| Included_Handle (2 octets) |
| Type (1 octet) |
| Service (7 or 21 octets) |
| |
| Valid Type parameter values: |
| 0x00 = Primary |
| 0x01 = Secondary |
| |
| Object Service is defined as: |
| Start_Handle (2 octets) |
| End_Group_Handle (2 octets) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| |
| Valid UUID_Length parameter values: |
| 0x02 = UUID16 |
| 0x10 = UUID128 |
| |
| This procedure is used by a client to discover service |
| relationships to other services. |
| Services found during discovery are returned in the response. |
| |
| Opcode 0x0e - Discover All Characteristics of a Service |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Service_Start_Handle (2 octets) |
| Service_End_Handle (2 octets) |
| Response parameters: Characteristics_Count (1 octet) |
| [array] Characteristic (variable) |
| |
| Object Characteristic is defined as: |
| Characteristic_Handle (2 octets) |
| Value_Handle (2 octets) |
| Properties (1 octet) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| |
| Valid UUID_Length parameter values: |
| 0x02 = UUID16 |
| 0x10 = UUID128 |
| |
| This procedure is used by a client to discover all |
| characteristics within specified service range. |
| Characteristics found during discovery are returned in the |
| response. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x0f - Discover Characteristics by UUID |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Start_Handle (2 octets) |
| End_Handle (2 octets) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| Response parameters: Characteristics_Count (1 octet) |
| [array] Characteristic (variable) |
| |
| Object Characteristic is defined as: |
| Characteristic_Handle (2 octets) |
| Value_Handle (2 octets) |
| Properties (1 octet) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| |
| Valid UUID_Length parameter values: |
| 0x02 = UUID16 |
| 0x10 = UUID128 |
| |
| This procedure is used by a client to discover characteristic |
| declarations with given UUID on a server. |
| Characteristics found during discovery are returned in the |
| response. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x10 - Discover All Characteristic Descriptors |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Start_Handle (2 octets) |
| End_Handle (2 octets) |
| Response parameters: Descriptors_Count (1 octet) |
| [array] Descriptor (variable) |
| |
| Object Descriptor is defined as: |
| Descriptor_Handle (2 octets) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| |
| Valid UUID_Length parameter values: |
| 0x02 = UUID16 |
| 0x10 = UUID128 |
| |
| This procedure is used by a client to discover all the |
| characteristic descriptors contained within characteristic. |
| Descriptors found during discovery are returned in the |
| response. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x11 - Read Characteristic Value/Descriptor |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Handle (2 octets) |
| Response parameters: ATT_Response (1 octet) |
| Data_Length (2 octets) |
| Data (variable) |
| |
| This procedure is used to read a Characteristic Value or |
| Characteristic Descriptor from a server. |
| Read results are returned in the response to this command. |
| ATT_Response shall be set to 0x00, if Read has been completed |
| successfully. Otherwise it shall be set to ATT error code |
| received. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x12 - Read Using Characteristic UUID |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Start_Handle (2 octets) |
| End_Handle (2 octets) |
| UUID_Length (1 octet) |
| UUID (2 or 16 octets) |
| Response parameters: ATT_Response (1 octet)s |
| Data_Length (2 octets) |
| Data (variable) |
| |
| Valid UUID_Length parameter values: |
| 0x02 = UUID16 |
| 0x10 = UUID128 |
| |
| This procedure is used to read a Characteristic Value from a |
| server when characteristic UUID is known. |
| Read results are returned in the response to this command. |
| ATT_Response shall be set to 0x00, if Read has been completed |
| successfully. Otherwise it shall be set to ATT error code |
| received. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x13 - Read Long Characteristic Value/Descriptor |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Handle (2 octets) |
| Offset (2 octets) |
| Response parameters: ATT_Response (1 octet) |
| Data_Length (2 octets) |
| Data (variable) |
| |
| This procedure is used to read Long Characteristic Value or |
| Long Characteristic Descriptor from a server. |
| Read results are returned in the response to this command. |
| ATT_Response shall be set to 0x00, if Read has been completed |
| successfully. Otherwise it shall be set to ATT error code |
| received. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x14 - Read Multiple Characteristic Values |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Handles_Count (1 octet) |
| Handles (variable) |
| Response parameters: ATT_Response (1 octet) |
| Data_Length (2 octets) |
| Data (variable) |
| |
| This procedure is used to read multiple Characteristic Values |
| from a server. |
| Read results are returned in the response to this command. |
| ATT_Response shall be set to 0x00, if Read has been completed |
| successfully. Otherwise it shall be set to ATT error code |
| received. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x15 - Write Without Response |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Handle (2 octets) |
| Data_Length (2 octets) |
| Data (variable) |
| Response parameters: <none> |
| |
| This procedure is used to write a Characteristic Value to a |
| server. There is no acknowledgment that the write was |
| successfully performed. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x16 - Signed Write Without Response |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Handle (2 octets) |
| Data_Length (2 octets) |
| Data (variable) |
| Response parameters: <none> |
| |
| This procedure is used to write a Characteristic Value to a |
| server. There is no acknowledgment that the write was |
| successfully performed. This procedure is intended to be used |
| if client and server are bonded, and connected using |
| non-encrypted link. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x17 - Write Characteristic Value/Descriptor |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Handle (2 octets) |
| Data_Length (2 octets) |
| Data (variable) |
| Response parameters: ATT_Response (1 octet) |
| |
| This procedure is used to write a Characteristic Value or |
| Characteristic Descriptor to a server. |
| ATT_Response shall be set to 0x00, if Write has been completed |
| successfully. Otherwise it shall be set to ATT error code |
| received. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x18 - Write Long Characteristic Value/Descriptor |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Handle (2 octets) |
| Offset (2 octets) |
| Data_Length (2 octets) |
| Data (variable) |
| Response parameters: ATT_Response (1 octet) |
| |
| This procedure is used to write a Long Characteristic Value or |
| Long Characteristic Descriptor to a server. |
| ATT_Response shall be set to 0x00, if Write has been completed |
| successfully. Otherwise it shall be set to ATT error code |
| received. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x19 - Reliable Write |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Handle (2 octets) |
| Offset (2 octets) |
| Data_Length (2 octets) |
| Data (variable) |
| Response parameters: ATT_Response (1 octet) |
| |
| This procedure is used to write a Characteristic Value to |
| a server and assurance is required that the correct |
| Characteristic Value is going to be written. |
| ATT_Response shall be set to 0x00, if Write has been completed |
| successfully. Otherwise it shall be set to ATT error code |
| received. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x1a - Configure Notifications |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Enable (1 octet) |
| CCC_Handle (2 octets) |
| Response parameters: <none> |
| |
| This procedure is used to configure server to notify |
| characteristic value to a client. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x1b - Configure Indications |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Enable (1 octet) |
| CCC_Handle (2 octets) |
| Response parameters: <none> |
| |
| This procedure is used to configure server to indicate |
| characteristic value to a client. |
| |
| In case of an error, the error response will be returned. |
| |
| Events: |
| Opcode 0x80 - Notification/Indication Received |
| |
| Controller Index: <controller id> |
| Event parameters: Address_Type (1 octet) |
| Address (6 octets) |
| Type (1 octet) |
| Handle (2 octets) |
| Data_Length (2 octets) |
| Data (variable) |
| |
| Valid Type parameter values: |
| 0x01 = Notification |
| 0x02 = Indication |
| |
| This event indicates that IUT has received notification |
| or notification. |
| |
| L2CAP Service (ID 3) |
| ================== |
| |
| Commands and responses: |
| |
| Opcode 0x00 - Error response |
| |
| Opcode 0x01 - Read Supported Commands command/response |
| |
| Controller Index: <controller id> |
| Command parameters: <none> |
| Response parameters: <supported commands> (variable) |
| |
| Each bit in response is a flag indicating if command with |
| opcode matching bit number is supported. Bit set to 1 means |
| that command is supported. Bit 0 is reserved and shall always |
| be set to 0. If specific bit is not present in response (less |
| than required bytes received) it shall be assumed that command |
| is not supported. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x02 - Connect command/response |
| |
| Controller Index: <controller id> |
| Command parameters: Address_Type (1 octet) |
| Address (6 octets) |
| PSM (2 octets) |
| Response parameters: Chan_ID (1 octet) |
| |
| This command is used to create an L2CAP channel. |
| Chan_ID is returned in the response to this command to allow |
| cancellation of this connection request using Disconnect |
| command. |
| Connected Event (or Disconnected Event in case of an error) |
| shall be expected after issuing this command. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x03 - Disconnect command |
| |
| Controller Index: <controller id> |
| Command parameters: Chan_ID (1 octet) |
| Response parameters: <none> |
| |
| This command is used to close an L2CAP channel. |
| Chan_ID is the internal application number that identifies |
| L2CAP channel. |
| Disconnected Event shall be expected after issuing this command. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x04 - Send Data command |
| |
| Controller Index: <controller id> |
| Command parameters: Chan_ID (1 octet) |
| Data_Length (2 octets) |
| Data (Data_Length octets) |
| Response parameters: <none> |
| |
| This command is used to send data over L2CAP channel. |
| Chan_ID is the internal application number that identifies |
| L2CAP channel. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x05 - Listen command |
| |
| Controller Index: <controller id> |
| Command parameters: PSM (2 octets) |
| Transport (1 octet) |
| Response parameters: <none> |
| |
| Valid Transport parameter values: |
| 0x00 = BR/EDR |
| 0x01 = LE |
| |
| This command is used to register L2CAP PSM and listen for |
| incoming data. |
| |
| In case of an error, the error response will be returned. |
| |
| Opcode 0x06 - Accept Connection Request |
| |
| Controller Index: <controller id> |
| Command parameters: Chan_ID (1 octet) |
| Result (2 octets) |
| Return Parameters: <none> |
| |
| This command is used to accept/reject incoming connection |
| request. Connection can be rejected with non-zero Result value |
| (refer to the L2CAP <LE Credit Based> Connection Result values). |
| Connected Event shall be expected after issuing this command. |
| |
| In case of an error, the error response will be returned. |
| |
| Events: |
| Opcode 0x80 - Connection Request Event |
| |
| Controller Index: <controller id> |
| Event parameters: Chan_ID (1 octet) |
| PSM (2 octets) |
| Address_Type (1 octet) |
| Address (6 octets) |
| |
| This event indicates incoming request for L2CAP connection. |
| Connection Request needs to be accepted/rejected with result |
| code using Accept Connection Request command. |
| |
| Opcode 0x81 - Connected Event |
| |
| Controller Index: <controller id> |
| Event parameters: Chan_ID (1 octet) |
| PSM (2 octets) |
| Address_Type (1 octet) |
| Address (6 octets) |
| |
| This event indicates new L2CAP connection. |
| Chan_ID is the internal application number that identifies |
| L2CAP channel. |
| |
| Opcode 0x82 - Disconnected Event |
| |
| Controller Index: <controller id> |
| Event parameters: Result (2 octets) |
| Chan_ID (1 octet) |
| PSM (2 octets) |
| Address_Type (1 octet) |
| Address (6 octets) |
| |
| This event indicates L2CAP disconnection. |
| Result value is returned in the response, if remote rejected |
| connection request only. Otherwise it shall be set to zero. |
| Please refer to the Core Specification for possible |
| L2CAP <LE Credit Based> Connection Result values. |
| Chan_ID is the internal application number that identifies |
| L2CAP channel. |
| |
| Opcode 0x83 - Data Received Event |
| |
| Controller Index: <controller id> |
| Event parameters: Chan_ID (1 octet) |
| Data_Length (2 octets) |
| Data (Data_Length octets) |
| |
| This event forwards data received over L2CAP channel. |
| Chan_ID is the internal application number that identifies |
| L2CAP channel. |