zephyr/tests/bluetooth/tester/btp_spec.txt

1280 lines
37 KiB
Plaintext

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.