Performing Low-level Configuration

The Bluetooth specification defines commands and options that can be used with the various layers of the protocol.

How to perform low-level configuration

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:

  1. 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 .

  2. 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 .

  3. 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);
TUint16 majorClass = codbuf().iMajorDeviceClass;

Where Next?

This tutorial set takes you through all the steps involved in setting up and communicating over a Bluetooth connection.