Initial commit

This commit is contained in:
Robert Goodall
2026-07-29 00:39:00 -04:00
commit 346229dd64
30 changed files with 15309 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
#ifndef CLASSIC_BLUETOOTH_H
#define CLASSIC_BLUETOOTH_H
#include <string>
#include <vector>
#include <functional>
// C++ interface for Classic Bluetooth scanning (wraps IOBluetooth Objective-C API)
namespace ClassicBluetooth {
// Device class information
struct DeviceClass {
std::string major_class; // Computer, Phone, Audio, Peripheral, etc.
std::string minor_class; // Smartphone, Laptop, Headset, etc.
uint32_t class_of_device; // Raw CoD value
};
// SDP service record
struct SDPService {
std::string uuid; // Service UUID
std::string name; // Human-readable name (OBEX, SPP, HID, etc.)
uint8_t rfcomm_channel; // RFCOMM channel ID (if applicable)
};
// Classic Bluetooth device info
struct ClassicDevice {
std::string address; // MAC address (XX:XX:XX:XX:XX:XX)
std::string name; // Device name
int16_t rssi; // Signal strength
DeviceClass device_class; // Device class info
std::vector<SDPService> services; // SDP services
bool is_connected; // Connection status
bool is_paired; // Pairing status
std::string last_seen; // Timestamp
};
// Callback for device discovery
using DeviceFoundCallback = std::function<void(const ClassicDevice&)>;
using InquiryCompleteCallback = std::function<void(bool success, const std::string& error)>;
// Scanner interface
class Scanner {
public:
Scanner();
~Scanner();
// Start Classic Bluetooth inquiry
bool start_inquiry(int duration_seconds = 10);
// Stop inquiry
void stop_inquiry();
// Check if inquiry is running
bool is_scanning() const;
// Set callback for when devices are found
void set_device_found_callback(DeviceFoundCallback callback);
// Set callback for when inquiry completes
void set_inquiry_complete_callback(InquiryCompleteCallback callback);
// Perform SDP query on a specific device
std::vector<SDPService> query_sdp_services(const std::string& address);
// Get device class information
DeviceClass get_device_class(const std::string& address);
// Get all discovered devices (synchronous, for one-shot queries)
std::vector<ClassicDevice> get_discovered_devices();
private:
class Impl; // Forward declaration for PIMPL
Impl* pImpl; // Pointer to implementation (hides Objective-C from C++ header)
};
// Utility functions
std::string decode_device_class_major(uint32_t cod);
std::string decode_device_class_minor(uint32_t cod);
std::string decode_service_uuid(const std::string& uuid);
} // namespace ClassicBluetooth
#endif // CLASSIC_BLUETOOTH_H