Querying and Pairing Sample (Windows Embedded CE 6.0)
1/6/2010
The Btpair sample application performs querying, pairing, and authentication to illustrate the use of the Windows Embedded CEābased Bluetooth stack and security subsystem.
The compiled sample generates a Btpair.exe application. It relies on the BTHLINK sample device driver that needs to be compiled and copied to the device.
Usage
btpair.exe
Remarks
When executed, the application displays a dialog box that enables querying, pairing and authentication with other devices.
Querying
The query process is used to discover other Bluetooth devices in the area. This process is initiated by the BthNsLookupServiceBegin function.
int iErr = BthNsLookupServiceBegin (&wsaq, LUP_CONTAINERS, &hLookup);
If the function completes successfully, the discovered devices can be queried to determine which services they offer. The services are learned by calling the BthNsLookupServiceNext function.
While (iErr== ERROR_SUCCESS)
{
...
iErr = BthNsLookupServiceNext (
hLookup,
LUP_RETURN_ADDR,
&dwSize,
pwsaResults
);
...
if (iErr == ERROR_SUCCESS) {
/* store device information */
}
}
Pairing
The pairing process generates a common link key between two devices. The link key is generated from a PIN, the Bluetooth address, and a random number. To set the PIN up on a device, an IOCTL call is provided as BT_IOCTL_BthSetPIN.
BthSetPIN (&b, cPin, pin);
A common link is established between two devices to be paired. This example demonstrates how to use the BTHLINK protocol layer extension to make a connection at the lower protocol layer level.
The following example code loads the protocol layer extension DLL.
HANDLE hDev = RegisterDevice (L"BTL", 1, L"bthlink.dll", NULL);
HANDLE hFile = CreateFile (
L"BTL1:",
0, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL
);
Authentication
If the link key generates successfully, authentication can be performed. This process is initiated by calling BT_IOCTL_BthAuthenticate, which is provided by an IOCTL call.
iRes = BthAuthenticate (&b);
If the authentication is successful, the extension layer can be destroyed. The following example code demonstrates how to do this.
DeviceIoControl (
hFile, BTHLINK_IOCTL_DISCONNECT,
&p, sizeof(p), NULL, 0, NULL, NULL
);
DeregisterDevice (hDev);
Sample Location
**%_WINCEROOT%*\*Public\Common\Sdk\Samples\Bluetooth\Btpair
Note
This sample application has not been thoroughly tested and is not intended for production use.
See Also
Concepts
Bluetooth OS Design Development Samples
Bluetooth Samples