Based on Bluetooth serial port communication for Node.js
- CMake
- Needs Bluetooth development packages to build
apt-get install libbluetooth-dev cmake gcc-c++
zypper install bluez-devel cmake gcc-c++
- CMake from MacPorts
- Needs XCode and XCode command line tools installed.
- CMake
- Visual Studio
#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;
}
Returns new instance of DeviceINQ object
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
};
Note for Mac users: DeviceINQ
relies on a separate executable named btScan
built together with the library which has to be in the same directory as the
library (the code searching for it is at the top of DeviceINQ::Inquire()
and
can be modified according to your needs). The reason for this is that
IOBluetoothDeviceInquiry
has the undocumented requirement that the RunLoop of
the application's main thread be executed. While almost any GUI application will
fulfill this requirement, a simple command line tool such as the bundled example
won't. Since we can't just hijack the application's main thread, this is the only
way to guarantee that the device search functions correctly.
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
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
Connects to the device, needs to be called before any Read/Write calls
Closes connection to the device
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
Writes data to the device
- buffer: pointer to buffer with data to send
- length: number of bytes to send
Returns true if there is data in the buffer ready to be read (not implemented for OSX - always returns false)
Returns text representation of deviceClass enum value
Returns text representation of serviceClass enum value
This module is available under a FreeBSD license, see the LICENSE file for details.