L2CAP Extension Vendor Specific API

L2CAP Extension Commands

All L2CAP commands have the following format (this is also displayed for each command description):

Name

Size (bytes)

Description

Opcode

2

connectionHandle, CID, or PSM

2

Connection Handle, Channel ID, or Protocol/Service Multiplexer

Command PDU

Variable

Command Parameters

For the command parameters, please see the corresponding command description below.

Note: The connection handle of 0xFFFE is considered as the loopback connection. All message sent to this connection will be looped back to the local host.

LE Protocol/Service Multiplexer (PSM) values are separated into two ranges: - Fixed (0x0001 – 0x007F): Values in the first range are assigned by the Bluetooth SIG and indicate protocols. - Dynamic (0x0080 – 0x00FF): Values in the second rage are dynamically allocated and used in conjunction with services defined in the GATT server.

L2CAP_SendData

Opcode

0xFCF0

Command Description

The L2CAP Data command is used to send an SDU on a Connection Oriented Channel established with the peer device.

Command Parameters

CID

Local Channel ID

Size

2 byte(s)

Default

0x0040

Range

0x0040 - 0x007F

SDU

SDU to be sent on the channel

Size

input byte(s)

Default

“”

Range

to L2CAP_SDU_SIZE octets

Events Generated

When this command is received, the host will send the CommandStatus Event. When the SDU transmission is done to the peer device, the L2CAP Send SDU Done Event (L2CAP_SendSduDone) will be generated. If the local channel runs out of credits required to send the SDU, the L2CAP Out of Credit Event (L2CAP_OutOfCredit) will be generated.

L2CAP_RegisterPsm

Opcode

0xFCF1

Command Description

The L2CAP Register PSM command is used to register a Protocol/Service Multiplexer (PSM) with the L2CAP layer.

Command Parameters

PSM

Local Protocol/Service Multiplexer (PSM)

Size

2 byte(s)

Default

0x0001

Range

0x0001 - 0x00FF

MTU

Maximum SDU size that can be received by PSM

Size

2 byte(s)

Default

0x0017

Range

Any 2 byte value

initialPeerCredits

Number of packets that peer device can send to local device

Size

2 byte(s)

Default

0x0001

Range

Any 2 byte value

peerCreditThreshold

Low threshold for peer credits

Size

2 byte(s)

Default

0x0000

Range

Any 2 byte value

maxNumChannels

Maximum number of Connection Oriented Channels supported by PSM

Size

1 byte(s)

Default

0x01

Range

Any 1 byte value

enableSecurityVerification

Indicates whether to enable security verification by the application for any incoming connection request

Size

1 byte(s)

Default

0x00

Range

Value

Description

0x00

No

0x01

Yes

Events Generated

When this command is received, the local device will send the CommandStatus Event. If the application wishes to perform its own security verification (by setting enableSecurityVerification to TRUE) for any incoming connection request then an L2CAP Connection Request (L2CAP_ConnectReq) event will be sent up to the application, which must then send an L2CAP Connection Response (L2CAP_ConnectRsp) command back. When the peer credit count reaches the peer credit threshold (specified by peerCreditThreshold), the L2CAP Peer Credit Threshold Event (L2CAP_PeerCreditThreshold) will be generated.

L2CAP_DeregisterPsm

Opcode

0xFCF2

Command Description

The L2CAP Deregister PSM command is sent to deregister a Protocol/Service Multiplexer (PSM) with the L2CAP layer.

Command Parameters

PSM

Local Protocol/Service Multiplexer (PSM) to be deregistered with L2CAP

Size

2 byte(s)

Default

0x0001

Range

0x0001 - 0x00FF

Events Generated

When this request is received, the local device will send the CommandStatus Event.

L2CAP_PsmInfo

Opcode

0xFCF3

Command Description

The L2CAP PSM Info command is used to get the current information about a given PSM registered with the L2CAP layer.

Command Parameters

PSM

Local Protocol/Service Multiplexer (PSM)

Size

2 byte(s)

Default

0x0001

Range

0x0001 - 0x00FF

Events Generated

When this request is received, the local device will send the CommandStatus Event.

Additional Command Status Return Parameters

dataLen
Size

1 byte(s)

Range

MTU
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

MPS
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

initialPeerCredits
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

peerCreditThreshold
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

maxNumChannels
Condition

( StatStatus==0x00)

Size

1 byte(s)

Range

numActiveChannels
Condition

( StatStatus==0x00)

Size

1 byte(s)

Range

L2CAP_PsmChannels

Opcode

0xFCF4

Command Description

The L2CAP PSM Channels command is used to get the list of all the active Connection Oriented Channels for a given PSM registered with the L2CAP layer.

Command Parameters

PSM

Local Protocol/Service Multiplexer (PSM)

Size

2 byte(s)

Default

0x0001

Range

0x0001 - 0x00FF

Events Generated

When this request is received, the local device will send the CommandStatus Event.

Additional Command Status Return Parameters

dataLen
Size

1 byte(s)

Range

An array of size “dataLen/2” will be returned containing the parameters starting here:

CID
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

The array of parameters ends here.

L2CAP_ChannelInfo

Opcode

0xFCF5

Command Description

The L2CAP Channel Info command is used to get the current information about an active Connection Oriented Channel.

Command Parameters

CID

Local Channel ID

Size

2 byte(s)

Default

0x0040

Range

0x0040 - 0x007F

Events Generated

When this request is received, the local device will send the CommandStatus Event.

Additional Command Status Return Parameters

dataLen
Size

1 byte(s)

Range

state
Condition

( StatStatus==0x00)

Size

1 byte(s)

Range

Value

Description

0x0000

L2CAP_CLOSED

0x0001

L2CAP_OPEN

0x0002

L2CAP_PENDING_CONN_RSP

0x0003

L2CAP_PENDING_DISCONN_RSP

0x0004

L2CAP_PENDING_PARAM_UPDATE_RSP

0x0005

L2CAP_PENDING_INFO_RSP

0x0006

L2CAP_PENDING_SEC_VERIFY

PSM
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

CID
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

MTU
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

MPS
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

credits
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

peerCID
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

peerMTU
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

peerMPS
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

peerCredits
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

peerCreditThreshold
Condition

( StatStatus==0x00)

Size

2 byte(s)

Range

L2CAP_ConnectReq

Opcode

0xFC94

Command Description

The L2CAP Connection Request command is used to create and configure a Connection Oriented Channel between the local and the peer device.

Command Parameters

Connection Handle

Identifies the connection.

Size

2 byte(s)

Default

0x0000

Range

0x0000 to 0xFFFD

PSM

Local Protocol/Service Multiplexer (PSM)

Size

2 byte(s)

Default

0x0001

Range

0x0001 - 0x00FF

peerPSM

Peer Protocol/Service Multiplexer (PSM)

Size

2 byte(s)

Default

0x0001

Range

0x0001 - 0x00FF

Events Generated

When this command is received, the local device will send the CommandStatus Event with the Status parameter after sending an LE Credit Based Connection Request to the peer device. When a new channel has been established, the L2CAP Channel Established Event (L2CAP_ChannelEstablished) will be generated.

L2CAP_ConnectRsp

Opcode

0xFC95

Command Description

When a device receives an LE Credit Based Connection Request, it must send an LE Credit Based Connection Response back, which is done automatically by the L2CAP layer. However, if the application wishes to perform its own security verification (configurable at PSM registration), then a Connection Request (L2CAP_ConnectReq) event will be sent up to the application which must then send a Connection Response (L2CAP_ConnectRsp) command back indicating the outcome of the connection request.

Command Parameters

Connection Handle

Identifies the connection.

Size

2 byte(s)

Default

0x0000

Range

0x0000 to 0xFFFD

id

Identifier to match responses with requests

Size

1 byte(s)

Default

0x01

Range

0x01 - 0xFF

result

Indicates outcome of connection request

Size

2 byte(s)

Default

0x0000

Range

Value

Description

0x0000

L2CAP_CONN_SUCCESS

0x0001

Reserved

0x0002

L2CAP_CONN_PSM_NOT_SUPPORTED

0x0003

Reserved

0x0004

L2CAP_CONN_NO_RESOURCES

0x0005

L2CAP_CONN_INSUFFICIENT_AUTHEN

0x0006

L2CAP_CONN_INSUFFICIENT_AUTHOR

0x0007

L2CAP_CONN_INSUFFICIENT_KEY_SIZE

0x0008

L2CAP_CONN_INSUFFICIENT_ENCRYPT

0x0009

L2CAP_CONN_INVALID_SRC_CID

0x000A

L2CAP_CONN_SRC_CID_ALREADY_ALLOC

Events Generated

When this request is received, the local device will send the CommandStatus Event with the Status parameter after sending an LE Credit Based Connection Response back to the peer device.

L2CAP_DisconnectReq

Opcode

0xFC86

Command Description

The L2CAP Disconnection Request is sent to terminate a Connection Oriented Channel established between the local and the peer device.

Command Parameters

CID

Local Channel ID

Size

2 byte(s)

Default

0x0040

Range

0x0040 - 0x007F

Events Generated

When this command is received, the local device will send the CommandStatus Event with the Status parameter after forwarding the request to the peer device. When the channel is terminated, the L2CAP Channel Terminated Event (L2CAP_ChannelTerminated) will be generated.

L2CAP_FlowCtrlCredit

Opcode

0xFC96

Command Description

The LE Flow Control Credit commands are sent when the local device is capable of receiving additional LE-frames on an established L2CAP channel.

Command Parameters

CID

Local Channel ID

Size

2 byte(s)

Default

0x0040

Range

0x0040 - 0x007F

peerCredits

Number of LE-frames that can be sent to local device

Size

2 byte(s)

Default

0x0001

Range

0x0001 - 0xFFFF

Events Generated

When this request is received, the local device will send the CommandStatus Event with the Status parameter after forwarding the request to the peer device. When the peer credit count reaches a specified low threshold (configurable at PSM registration), the L2CAP Peer Credit Threshold Event (L2CAP_PeerCreditThreshold) will be generated.

L2CAP_InfoReq

Opcode

0xFC8A

Command Description

L2CAP Info Request

Command Parameters

Connection Handle

Identifies the connection.

Size

2 byte(s)

Default

0x0000

Range

0x0000 to 0xFFFD

infoType

The type of implementation specific information being requested

Size

2 byte(s)

Default

0x0002

Range

Value

Description

0x0001

CONNECTIONLESS_MTU

0x0002

EXTENDED_FEATURES

0x0003

FIXED_CHANNELS

Events Generated

When this request is received, the local device will send the CommandStatus Event with the Status parameter after forwarding the request to the peer device. After receiving a response from the peer device, the L2CAP_InfoRsp will be generated.

L2CAP_ConnParamUpdateReq

Opcode

0xFC92

Command Description

The Connection Parameter Update Request is sent from the LE slave device to the LE master device. This request allows the LE slave Host to request a set of new connection parameters.

Command Parameters

Connection Handle

Identifies the connection.

Size

2 byte(s)

Default

0x0000

Range

0x0000 to 0xFFFD

intervalMin

The minimum value for the connection event interval

Size

2 byte(s)

Default

80

Range

6 - 3200

intervalMax

The maximum value for the connection event interval

Size

2 byte(s)

Default

160

Range

6 - 3200

slaveLatency

The slave latency parameter

Size

2 byte(s)

Default

0

Range

0 - 500

timeoutMultiplier

The connection timeout parameter

Size

2 byte(s)

Default

1000

Range

10 - 3200

Events Generated

When this request is received, the LE slave host will send the CommandStatus Event with the Status parameter after forwarding the request to the LE master host. The LE master host will send the Connection Parameter Update Response (L2CAP_ConnParamUpdateRsp) event back. If the LE slave host receives this request, it will respond with a Command Reject (L2CAP_CmdReject) with reason 0x0000 (command not understood).

L2CAP Extension Events

All L2CAP event have the following format (this is also displayed for each event description):

Name

Size (bytes)

Description

Opcode

2

PDU operation code

Status

1

Event Status

Connection Handle

2

Connection handle of the link

Event PDU

Variable

Event parameters

For the event parameters, please see the corresponding section below.

L2CAP_CmdReject

Opcode

0x0481

Event Description

The Command Reject is sent in response to a command with an unknown command code or when sending the corresponding response is inappropriate

Event Parameters

Status
Size

1 byte(s)

Range

Value

Description

0x00

SUCCESS

0x12

bleIncorrectMode

0x02

INVALIDPARAMETER

connectionHandle

Connection handle of the link.

Size

2 byte(s)

Range

reason

Reason for rejection.

Size

2 byte(s)

Range

Value

Description

0x0000

CMD_NOT_UNDERSTOOD

0x0001

SIGNAL_MTU_EXCEED

0x0002

REJECT_INVALID_CID

signalingMTU
Condition

( CmdRejectReason==0x0001)

Size

2 byte(s)

Range

localCID
Condition

( CmdRejectReason==0x0002)

Size

2 byte(s)

Range

remoteCID
Condition

( CmdRejectReason==0x0002)

Size

2 byte(s)

Range

L2CAP_ConnectReq

Opcode

0x0494

Event Description

This Connection Request event is sent to the application since the application has wished to perform its own security verification (configured at PSM registration). After receiving a Connection Request, the application must respond back with a Connection Response (L2CAP_ConnectRsp) command indicating the outcome of the connection request.

Event Parameters

Status
Size

1 byte(s)

Range

Value

Description

0x00

SUCCESS

0x12

bleIncorrectMode

0x02

INVALIDPARAMETER

connectionHandle

Connection handle of the link

Size

2 byte(s)

Range

Any 2 byte value

id

Identifier to match responses with requests (i.e., id to send back with L2CAP Connect Response command)

Condition

( bStatus==0x00)

Size

1 byte(s)

Range

PSM

Local PSM receiving connect request

Condition

( bStatus==0x00)

Size

2 byte(s)

Range

sourceCID

Represents CID on device sending connect request and receiving connect response (i.e., peer CID)

Condition

( bStatus==0x00)

Size

2 byte(s)

Range

MTU

Specifies maximum SDU size that can be received on this channel on the peer device

Condition

( bStatus==0x00)

Size

2 byte(s)

Range

MPS

Specifies maximum payload size that can be received on this channel on the peer device

Condition

( bStatus==0x00)

Size

2 byte(s)

Range

initialCredits

Indicates number of LE-frames that peer device can receive on this channel

Condition

( bStatus==0x00)

Size

2 byte(s)

Range

L2CAP_ConnParamUpdateRsp

Opcode

0x0493

Event Description

This Connection Parameter Update Response is sent from the LE master device to the LE slave device. This response is sent by the master Host when it receives a Connection Parameter Update Request packet.

Event Parameters

Status
Size

1 byte(s)

Range

Value

Description

0x00

SUCCESS

0x12

bleIncorrectMode

0x02

INVALIDPARAMETER

connectionHandle

Connection handle of the link

Size

2 byte(s)

Range

Any 2 byte value

result

Result of the update.

Condition

( bStatus==0x00)

Size

2 byte(s)

Range

Value

Description

0x0000

CONN_PARAMS_ACCEPTED

0x0001

CONN_PARAMS_REJECTED

L2CAP_ChannelEstablished

Opcode

0x04E0

Event Description

This Channel Established Event is generated when a Connection Oriented Channel has been established with the peer device. If result is successful (0x0000) then all other fields of the event will be present and can be accessed.

Event Parameters

Status
Size

1 byte(s)

Range

Value

Description

0x00

SUCCESS

0x12

bleIncorrectMode

0x02

INVALIDPARAMETER

connectionHandle

Connection handle of the link

Size

2 byte(s)

Range

Any 2 byte value

result
Condition

( bStatus==0x00)

Size

2 byte(s)

Range

Value

Description

0x0000

L2CAP_CONN_SUCCESS

0x0001

Reserved

0x0002

L2CAP_CONN_PSM_NOT_SUPPORTED

0x0003

Reserved

0x0004

L2CAP_CONN_NO_RESOURCES

0x0005

L2CAP_CONN_INSUFFICIENT_AUTHEN

0x0006

L2CAP_CONN_INSUFFICIENT_AUTHOR

0x0007

L2CAP_CONN_INSUFFICIENT_KEY_SIZE

0x0008

L2CAP_CONN_INSUFFICIENT_ENCRYPT

0x0009

L2CAP_CONN_INVALID_SRC_CID

0x000A

L2CAP_CONN_SRC_CID_ALREADY_ALLOC

PSM

Local PSM that channel belongs to

Condition

( bStatus==0x00 resultValue==0x0000)

Size

2 byte(s)

Range

CID

Local Channel ID

Condition

( bStatus==0x00 resultValue==0x0000)

Size

2 byte(s)

Range

MTU

Maximum SDU size that can be received by the local device on this channel

Condition

( bStatus==0x00 resultValue==0x0000)

Size

2 byte(s)

Range

MPS

Maximum payload size that can be received by the local device

Condition

( bStatus==0x00 resultValue==0x0000)

Size

2 byte(s)

Range

credits

Number of LE-frames that the local device can send

Condition

( bStatus==0x00 resultValue==0x0000)

Size

2 byte(s)

Range

peerCID

Remote Channel ID

Condition

( bStatus==0x00 resultValue==0x0000)

Size

2 byte(s)

Range

peerMTU

Maximum SDU size that can be received by the peer device

Condition

( bStatus==0x00 resultValue==0x0000)

Size

2 byte(s)

Range

peerMPS

Maximum payload size that can be received by the peer device

Condition

( bStatus==0x00 resultValue==0x0000)

Size

2 byte(s)

Range

peerCredits

Number of LE-frames that the peer device can send

Condition

( bStatus==0x00 resultValue==0x0000)

Size

2 byte(s)

Range

peerCreditThreshold

Low threshold for the peer credit count

Condition

( bStatus==0x00 resultValue==0x0000)

Size

2 byte(s)

Range

L2CAP_ChannelTerminated

Opcode

0x04E1

Event Description

This Channel Terminated Event is generated when a Connection Oriented Channel has been terminated between the local and the peer device.

Event Parameters

Status
Size

1 byte(s)

Range

Value

Description

0x00

SUCCESS

0x12

bleIncorrectMode

0x02

INVALIDPARAMETER

connectionHandle

Connection handle of the link

Size

2 byte(s)

Range

Any 2 byte value

CID

Local Channel ID

Condition

( bStatus==0x00)

Size

2 byte(s)

Range

peerCID

Remote Channel ID

Condition

( bStatus==0x00)

Size

2 byte(s)

Range

reason

Reason Channel was termianted

Condition

( bStatus==0x00)

Size

2 byte(s)

Range

Value

Description

0x0000

L2CAP_TERM_LINK_DOWN

0x0001

L2CAP_TERM_BY_PSM

0x0002

L2CAP_TERM_BY_PEER_PSM

0x0003

L2CAP_TERM_MAX_CREDIT_EXCEED

0x0004

L2CAP_TERM_SDU_LEN_EXCEED

0x0005

L2CAP_TERM_PSM_MTU_EXCEED

0x0006

L2CAP_TERM_RX_PKT_NO_CREDIT

0x0007

L2CAP_TERM_RX_ERROR

0x0008

L2CAP_TERM_TX_ERROR

0x0009

L2CAP_TERM_MEM_ALLOC_ERROR

L2CAP_OutOfCredit

Opcode

0x04E2

Event Description

This Out Of Credit Event is generated when a Connection Oriented Channel runs out of credits needed to transmit an SDU to the peer device.

Event Parameters

Status
Size

1 byte(s)

Range

Value

Description

0x00

SUCCESS

0x12

bleIncorrectMode

0x02

INVALIDPARAMETER

connectionHandle

Connection handle of the link

Size

2 byte(s)

Range

Any 2 byte value

CID

Local Channel ID

Size

2 byte(s)

Range

peerCID

Remote Channel ID

Size

2 byte(s)

Range

creditsNeeded

Number of credits needed to transmit the remaining part of the current SDU

Size

2 byte(s)

Range

L2CAP_PeerCreditThreshold

Opcode

0x04E3

Event Description

This Peer Credit Threshold Event is generated when an L2CAP Connection Oriented Channel reaches a low threshold specified for the peer credit count (configured at PSM registration).

Event Parameters

Status
Size

1 byte(s)

Range

Value

Description

0x00

SUCCESS

0x12

bleIncorrectMode

0x02

INVALIDPARAMETER

connectionHandle

Connection handle of the link

Size

2 byte(s)

Range

Any 2 byte value

CID

Local Channel ID

Size

2 byte(s)

Range

peerCID

Remote Channel ID

Size

2 byte(s)

Range

peerCreditThreshold

Low threshold for the peer credit count

Size

2 byte(s)

Range

L2CAP_SendSduDone

Opcode

0x04E4

Event Description

This Send SDU Done Event is generated when the transmission of an SDU is completed on a Connection Oriented Channel established with the peer device.

Event Parameters

Status
Size

1 byte(s)

Range

Value

Description

0x00

SUCCESS

0x12

bleIncorrectMode

0x02

INVALIDPARAMETER

connectionHandle

Connection handle of the link

Size

2 byte(s)

Range

Any 2 byte value

CID

Local Channel ID

Size

2 byte(s)

Range

credits

Remaining local credits

Size

2 byte(s)

Range

peerCID

Remote Channel ID

Size

2 byte(s)

Range

peerCredits

Remaining peer credits

Size

2 byte(s)

Range

totalLen

Total length of the SDU being transmitted

Size

2 byte(s)

Range

txLen

Total number of octets transmitted

Size

2 byte(s)

Range

L2CAP_SendData

Opcode

0x04F0

Event Description

This Data Event is generated when an SDU is received on a Connection Oriented Channel from the peer device.

Event Parameters

Status
Size

1 byte(s)

Range

Value

Description

0x00

SUCCESS

0x12

bleIncorrectMode

0x02

INVALIDPARAMETER

connectionHandle

Connection handle of the link

Size

2 byte(s)

Range

Any 2 byte value

CID

Local Channel ID

Size

2 byte(s)

Range

len

Total length of the SDU being received

Size

2 byte(s)

Range

SDU

Received SDU

Size

payloadLen byte(s)

Range