Bluetooth: Classic: L2CAP Shell

This document describes how to run the Bluetooth Classic L2CAP functionality. The br l2cap command exposes the Bluetooth Classic L2CAP Shell commands.

Commands

The br l2cap commands:

uart:~$ br l2cap
l2cap - [none]
Subcommands:
  register    : <psm> <mode: none, ret, fc, eret, stream> [hold_credit]
                [mode_optional] [extended_control]
  connect     : <psm> <mode: none, ret, fc, eret, stream> [hold_credit]
                [mode_optional] [extended_control]
  disconnect  : [none]
  send        : [number of packets] [length of packet(s)]
  credits     : [none]
  echo        : L2CAP BR ECHO commands
  connless    : L2CAP connectionless commands

The br l2cap echo commands:

uart:~$ br l2cap echo
echo - L2CAP BR ECHO commands
Subcommands:
  register    : [none]
  unregister  : [none]
  req         : <length of data>
  rsp         : <identifier> <length of data>

The br l2cap connless commands:

uart:~$ br l2cap connless
connless - L2CAP connectionless commands
Subcommands:
  register    : <psm> [sec level]
  unregister  : [none]
  send        : <psm> <length of data>

Connection-oriented L2CAP

  1. [Server] Register L2CAP Server:

When the Bluetooth stack has been initialized (bt init), the L2CAP server can be registered by calling br l2cap register.

uart:~$ br l2cap register 1001 none
L2CAP psm 4097 registered
  1. [Client] Create L2CAP connection:

The command can only be used after the ACL connection has been established.

uart:~$ br l2cap connect 1001 none
L2CAP connection pending
  1. L2CAP connection is established:

uart:~$
Security changed: XX:XX:XX:XX:XX:XX level 2
Incoming BR/EDR conn 0x20004848
Channel 0x20000b18 connected
It is basic mode
  1. Send L2CAP data to remote:

uart:~$ br l2cap send
Rem 0
  1. L2CAP data is received:

uart:~$
Incoming data channel 0x20000b18 len 200
00000000: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
00000010: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
00000020: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
00000030: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
00000040: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
00000050: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
00000060: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
00000070: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
00000080: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
00000090: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
000000A0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
000000B0: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |........ ........|
000000C0: 00 00 00 00 00 00 00 00                          |........         |
  1. Disconnect L2CAP connection:

uart:~$ br l2cap disconnect
  1. L2CAP connection is broken:

Channel 0x20000b18 disconnected

L2CAP echo

The echo subcommand provides functionality for L2CAP echo requests and responses in Bluetooth Classic.

The commands can only be used after the ACL connection has been established.

  1. Listen for L2CAP echo request an L2CAP echo response:

uart:~$ br l2cap echo register
  1. Stop listening for L2CAP echo request an L2CAP echo response:

uart:~$ br l2cap echo unregister
  1. Send L2CAP echo request:

uart:~$ br l2cap echo req 1
  1. Echo request is received:

Incoming ECHO REQ data identifier 4 len 1
00000000: 00                                               |.                |
  1. Send L2CAP echo response:

uart:~$ br l2cap echo rsp 4 1
  1. Echo response is received:

uart:~$
Incoming ECHO RSP data len 1
00000000: 00                                               |.                |

Connectionless L2CAP

The connless subcommand provides functionality for connectionless L2CAP communication in Bluetooth Classic, allowing packet transmission without establishing a L2CAP connection.

The subcommand is controlled by CONFIG_BT_L2CAP_CONNLESS.

The commands can only be used after the ACL connection has been established.

  1. Listen for connectionless L2CAP packets:

uart:~$ br l2cap connless register 1001
Register connectionless callbacks with PSM 0x1001
  1. Send data

uart:~$ br l2cap connless send 1001 1
Sending connectionless data with PSM 0x1001
  1. Connectionless data is received:

Incoming connectionless data psm 0x1001 len 1
00000000: 00                                               |.                |