Multiplatform Bluetooth serial port communication library
Based on Bluetooth serial port communication for Node.js
Prequisites on Linux
- CMake
- Needs Bluetooth development packages to build
apt-get install libbluetooth-dev cmake gcc-c++
zypper install bluez-devel cmake gcc-c++
Prequisites on OS X
- CMake from MacPorts
- Needs XCode and XCode command line tools installed.
Prequisites on Windows
- CMake
- Visual Studio
Documentation
Basic usage
#include <iostream>
#include <vector>
#include <memory>
#include "../src/DeviceINQ.h"
using namespace std;
void main()
{
unique_ptr<DeviceINQ> inq(DeviceINQ::Create());
vector<device> devices = inq->Inquire();
for (const auto& d : devices)
{
cout << d.name << " " << d.address << endl;
}
cout << endl << "done, found " << devices.size() << " device(s)" << endl;
}
API
DeviceINQ
DeviceINQ::Create()
Returns new instance of DeviceINQ object
DeviceINQ::Inquire()
Returns list of bluetooth devices in range
struct device
{
string address; // bluetooth address of the device
string name; // name of the device
time_t lastSeen; // last time device was seen in the inquiry (windows, osx)
time_t lastUsed; // last time device was used (windows)
bool connected; // true if device is connected (windows, osx)
bool remembered; // true if device is remembered (windows, osx)
bool authenticated; // true if device is authenticated (windows, osx)
DeviceClass deviceClass; // class of device
DeviceClass majorDeviceClass; // major class of device
ServiceClass serviceClass; // service class flags
};
DeviceINQ::SdpSearch(address)
Returns serial port channelID for device at given address
- address: string containing bluetooth address of the device
Note: This method seems to fail on Windows, use value 1 for channelID instead
BTSerialPortBinding
BTSerialPortBinding::Create(address, channelID)
Returns new instance of BTSerialPortBinding object
- address: string containint bluetooth address of the device
- channelID: ID of the serial port channel
Note: channelID should be always 1 for serial port
BTSerialPortBinding::Connect()
Connects to the device, needs to be called before any Read/Write calls
BTSerialPortBinding::Close()
Closes connection to the device
BTSerialPortBinding::Read(buffer, length)
Reads data from the device, returns numbe rof bytes read
- buffer: pointer to buffer to hold received data
- length: maximum namber of bytes to read
BTSerialPortBinding::Write(buffer, length)
Writes data to the device
- buffer: pointer to buffer with data to send
- length: number of bytes to send
BTSerialPortBinding::IsDataAvailable(buffer, length)
Returns true if there is data in the buffer ready to be read (not implemented for OSX - always returns false)
Other
GetDeviceClassString(deviceClass)
Returns text representation of deviceClass enum value
GetServiceClassString(serviceClass)
Returns text representation of serviceClass enum value
LICENSE
This module is available under a FreeBSD license, see the LICENSE file for details.