#ifndef BLUETOOTH_IMPL_H #define BLUETOOTH_IMPL_H #include "Bluetooth.h" #include #define BLUETOOTH_UUID_INITIALIZER \ { \ 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, \ 0x10, 0x00, \ 0x80, 0x00, \ 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb \ }; namespace trygvis { namespace bluetooth { typedef boost::uuids::uuid uuid_t; class DefaultBluetoothGattCharacteristic : public BluetoothGattCharacteristic { public: DefaultBluetoothGattCharacteristic(BluetoothGattService &service, uint16_t handle, uuid_t uuid, uint8_t properties, uint16_t valueHandle) : service(service), handle(handle), uuid(uuid), properties(properties), valueHandle(valueHandle) { } virtual ~DefaultBluetoothGattCharacteristic() { } BluetoothGattService &getService() const { return service; } uint16_t getHandle() const { return handle; } const uuid_t getUuid() const { return uuid; } uint8_t getProperties() const { return properties; } uint16_t getValueHandle() const { return valueHandle; } protected: BluetoothGattService &service; uint16_t handle; uuid_t uuid; uint8_t properties; uint16_t valueHandle; }; class DefaultBluetoothGattService : public BluetoothGattService { public: DefaultBluetoothGattService(BluetoothDevice &device, const uuid_t uuid, const uint16_t handle, const uint16_t endGroupHandle) : device(device), uuid(uuid), handle(handle), endGroupHandle(endGroupHandle) { DF; } virtual ~DefaultBluetoothGattService() { DF; removeCharacteristics(); } virtual BluetoothDevice &getDevice() const { return device; } virtual uuid_t getUuid() const { return uuid; } virtual uint16_t getHandle() const { return handle; } virtual uint16_t getEndGroupHandle() const { return endGroupHandle; } virtual const vector getCharacteristics() const { return characteristics; } virtual void addCharacteristic(BluetoothGattCharacteristic *characteristic) { characteristics.push_back(characteristic); } protected: BluetoothDevice &device; const uuid_t uuid; const uint16_t handle; const uint16_t endGroupHandle; vector characteristics; void removeCharacteristics() { DF; for (auto &c: characteristics) { delete c; } characteristics.clear(); } }; class DefaultBluetoothDevice : public BluetoothDevice { public: virtual const vector getServices() const { return services; }; virtual void addService(BluetoothGattService *service) { services.push_back(service); } protected: DefaultBluetoothDevice() { DF; } virtual ~DefaultBluetoothDevice() { DF; removeServices(); } void removeServices() { for (auto s: services) { delete s; } services.clear(); } vector services; }; BluetoothAdapter &getAdapterImpl(int hciDevice); void shutdownImpl(); } }; #endif