The Bluetooth specification defines commands and options that can be used with the various layers of the protocol.
The Bluetooth Sockets API provides some of the commands and options for configuring Sockets at various layers as described below:
Socket Configuration Options
The following Socket configuration options are provided by the Bluetooth Sockets API:
Host Controller
Interface (HCI) commands: provide a command interface to the baseband
controller and link manager. These are provided through asynchronous
I/O control (ioctl) commands on an L2CAP or RFCOMM socket, as there
is no direct Symbian platform interface to the HCI. Ioctls are issued
through RSocket::Ioctl()
. For details, see the
reference for the KHCIxxx
constants, such as KHCIAddSCOConnIoctl.
L2CAP-level
options: these are also issued through ioctls on an L2CAP socket.
For details, see the reference for the KL2CAPxxx
constants,
such as KL2CAPEchoRequestIoctl.
RFCOMM commands
and options: these are issued through ioctls on an RFCOMM socket,
and sockets option settings (RSocket::GetOpt()
and RSocket::GetOpt()
). For details, see the reference for
the KRFCOMMxxx
constants, such as KRFCOMMModemStatusCmdIoctl.
Example: Reading L2CAP Socket Class of Device
The
following example shows the HCI command Read_Class_of_Device being
issued on an L2CAP socket. The ioctl for this is KHCIReadDeviceClassIoctl, which returns a THCIDeviceClassIoctl
object
packaged in a THCIDeviceClassBuf package buffer.
The example extracts the device class into a variable majorClass
.
THCIDeviceClassBuf codbuf; TRequestStatus status; socket.Ioctl(KHCIReadDeviceClassIoctl, status, &codbuf, KSolBtHCI); User::WaitForRequest(status); TUint16 majorClass = codbuf().iMajorDeviceClass;