A link layer level ioctl
is provided to disconnect
an baseband link without first closing the open sockets using that
link. This provides the ability to quickly disconnect one or all current
Bluetooth asynchronous connection-oriented links (ACL) open on a device.
The TLMDisconnectACLIoctl
structure contains the device address
of the remote device to be disconnected and the reason code to be
supplied during the disconnection.
Basic Procedure
To directly disconnect individual Bluetooth ACL links:
Create a TLMDisconnectACLBuf packaged structure, which contains the address of the Bluetooth device to be disconnected and the reason to be given to the other device for its disconnection.
Call the KLMDisconnectACLIoctl
ioctl on the socket with the link
manager level KSolBtLM
, passing the package buffer.
Example: Disconnecting ACL links
Here is a simple disconnect example.
Starting with an open socket
RSocket sock; ret=sock.Open(ss,pInfo.iAddrFamily,pInfo.iSockType,pInfo.iProtocol);
Identify the Bluetooth device to be disconnected and provide a reason for the disconnect.
TLMDisconnectACLBuf aclConnBuf; aclConnBuf().iDevAddr = devAddr; // devAddr is a TBTDevAddr aclConnBuf().iReason = 0x13; // Remote User Ended Connection TRequestStatus stat;
Send Ioctl
command to disconnect.
sock.Ioctl(KLMDisconnectACLIoctl, stat, &aclConnBuf, KSolBtLM); User::WaitForRequest(stat);