85 lines
2.8 KiB
C++
85 lines
2.8 KiB
C++
#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
|