Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Introduction
Bluetooth is an industry-standard protocol that enables wireless connectivity for computers, handheld devices, mobile phones, and other devices.
RFCOMM emulates RS-232 (ITU-T V.24) serial ports. The emulation includes transfer of the state of the non-data circuits. RFCOMM has a built-in scheme for null modem emulation.
Service Definition Model
This blog will introduce how to use Windows Sockets functions to host a Bluetooth RFCOMM service, and use the Windows Runtime API to consume this service.
Steps:
#1 ask for Windows Sockets API (WSA) 2.2
The socket initialization only be required once for one process, so I put the initialization code in a static function.
#2 create a Windows socket
#3 create a Bluetooth address and bind to Windows socket
#4 register a Bluetooth service (SDP)
#5 listen to the Windows socket
# CODE #
RFCOMM Server (C++):
#include "stdafx.h"
#include "Winsock.h"
#include <WinSock2.h>
#include <ws2bth.h>
#include <bthsdpdef.h>
#include <bluetoothapis.h>
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "irprops.lib")
int main()
{
if (!Winsock::InitialzedForCurrentProcess())
{
return 1;
}
Winsock winsock = Winsock(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM);
if (!winsock.IsValid())
{
return 1;
}
winsock.Bind();
winsock.Listen();
winsock.RegisterServcie(_T("RFCOMM Server Demo Instance"), _T("Pushing data to PC"), OBEXObjectPushServiceClass_UUID);
winsock.OnConnected([](SOCKET s){
char buffer[1024] = { 0 };
memset(buffer, 0, sizeof(buffer));
int r = 0;
do
{
r = recv(s, (char*)buffer, sizeof(buffer), 0);
printf("result:%d, %s\n", r, buffer);
} while (r != 0);
closesocket(s);
});
winsock.Accept();
WSACleanup();
return 0;
}
Code on Github: https://github.com/dream-365/winapp/tree/master/BluetoothPlay