/bluetooth-serial-port

multi-platform bluetooth serial port library for C++

Primary LanguageCOtherNOASSERTION

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.