#include "ble/Bluetooth.h" #include "BluetoothImpl.h" #include #include namespace trygvis { namespace bluetooth { using namespace std; const uint8_t BluetoothGattDescriptor::DISABLE_NOTIFICATION_VALUE[] = {0x00, 0x00}; const uint8_t BluetoothGattDescriptor::ENABLE_INDICATION_VALUE[] = {0x02, 0x00}; const uint8_t BluetoothGattDescriptor::ENABLE_NOTIFICATION_VALUE[] = {0x01, 0x00}; // ----------------------------------------------------------------------- // Mac // ----------------------------------------------------------------------- string Mac::str() const { std::ostringstream buf; buf << setw(2) << hex << setfill('0') << (int) bytes[0] << ":" << setw(2) << hex << setfill('0') << (int) bytes[1] << ":" << setw(2) << hex << setfill('0') << (int) bytes[2] << ":" << setw(2) << hex << setfill('0') << (int) bytes[3] << ":" << setw(2) << hex << setfill('0') << (int) bytes[4] << ":" << setw(2) << hex << setfill('0') << (int) bytes[5]; return buf.str(); } bool operator==(const Mac &a, const Mac &b) { return memcmp(a.bytes, b.bytes, sizeof(a.bytes)) == 0; } bool operator!=(const Mac &a, const Mac &b) { return !(a == b); } bool operator<(const Mac &a, const Mac &b) { return memcmp(a.bytes, b.bytes, sizeof(a.bytes)) < 0; } std::ostream& operator<<(std::ostream& os, const Mac& mac) { os << mac.str(); return os; } void Mac::copy(uint8_t &_0, uint8_t &_1, uint8_t &_2, uint8_t &_3, uint8_t &_4, uint8_t &_5) const { _0 = bytes[0]; _1 = bytes[1]; _2 = bytes[2]; _3 = bytes[3]; _4 = bytes[4]; _5 = bytes[5]; } Mac Mac::parseMac(string s) { unsigned int bytes[6]; int count = sscanf(s.c_str(), "%02x:%02x:%02x:%02x:%02x:%02x", &bytes[0], &bytes[1], &bytes[2], &bytes[3], &bytes[4], &bytes[5]); if (count != 6) { throw BluetoothException("Unable to parseAttributeData mac: " + s); } return Mac((uint8_t) bytes[0], (uint8_t) bytes[1], (uint8_t) bytes[2], (uint8_t) bytes[3], (uint8_t) bytes[4], (uint8_t) bytes[5]); } // ----------------------------------------------------------------------- // Gatt // ----------------------------------------------------------------------- BluetoothGatt::BluetoothGatt() = default; BluetoothGatt::~BluetoothGatt() = default; // ----------------------------------------------------------------------- // Device // ----------------------------------------------------------------------- BluetoothDevice::BluetoothDevice() = default; BluetoothDevice::~BluetoothDevice() = default; // ----------------------------------------------------------------------- // Adapter // ----------------------------------------------------------------------- BluetoothAdapter::BluetoothAdapter() = default; BluetoothAdapter::~BluetoothAdapter() = default; // ----------------------------------------------------------------------- // Bluetooth System. This is not sub-classed by implementations. // ----------------------------------------------------------------------- BluetoothSystem::BluetoothSystem() = default; BluetoothSystem::~BluetoothSystem() { adapters.clear(); } shared_ptr BluetoothSystem::getAdapter(string name) { auto it = adapters.find(name); if (it == adapters.end()) { auto adapter = adapters[name] = getAdapterImpl(name); return adapter; } return it->second; } } // namespace bluetooth } // namespace trygvis