ble nano hid over gatt
Dependencies: BLE_API mbed-dev nRF51822
DeviceInformationService.h
- Committer:
- cho45
- Date:
- 2016-09-15
- Revision:
- 86:e0fab77e669d
- Parent:
- 83:2e940d154f8b
File content as of revision 86:e0fab77e669d:
/* mbed Microcontroller Library * Copyright (c) 2006-2013 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __BLE_DEVICE_INFORMATION_SERVICE_H__ #define __BLE_DEVICE_INFORMATION_SERVICE_H__ #include "ble/BLE.h" // https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.pnp_id.xml #pragma pack(push, 1) typedef struct { uint8_t vendorID_source; uint16_t vendorID; uint16_t productID; uint16_t productVersion; } PnPID_t; #pragma pack(pop) /** * @class DeviceInformationService * @brief BLE Device Information Service * Service: https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.device_information.xml * Manufacturer Name String Char: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.manufacturer_name_string.xml */ class DeviceInformationService { public: /** * @brief Device Information Service Constructor: copies device-specific information * into the BLE stack. * * @param[in] _ble * A reference to a BLE object for the underlying controller. * @param[in] manufacturersName * The name of the manufacturer of the device. * @param[in] modelNumber * The model number that is assigned by the device vendor. * @param[in] serialNumber * The serial number for a particular instance of the device. * @param[in] hardwareRevision * The hardware revision for the hardware within the device. * @param[in] firmwareRevision * The device's firmware version. * @param[in] softwareRevision * The device's software version. */ DeviceInformationService( BLE &_ble, const char *manufacturersName = NULL, const char *modelNumber = NULL, const char *serialNumber = NULL, const char *hardwareRevision = NULL, const char *firmwareRevision = NULL, const char *softwareRevision = NULL, const PnPID_t *pnpID = NULL ) : ble(_ble), manufacturersNameStringCharacteristic( GattCharacteristic::UUID_MANUFACTURER_NAME_STRING_CHAR, (uint8_t *)manufacturersName, (manufacturersName != NULL) ? strlen(manufacturersName) : 0, /* Min length */ (manufacturersName != NULL) ? strlen(manufacturersName) : 0, /* Max length */ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ ), modelNumberStringCharacteristic( GattCharacteristic::UUID_MODEL_NUMBER_STRING_CHAR, (uint8_t *)modelNumber, (modelNumber != NULL) ? strlen(modelNumber) : 0, /* Min length */ (modelNumber != NULL) ? strlen(modelNumber) : 0, /* Max length */ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ ), serialNumberStringCharacteristic( GattCharacteristic::UUID_SERIAL_NUMBER_STRING_CHAR, (uint8_t *)serialNumber, (serialNumber != NULL) ? strlen(serialNumber) : 0, /* Min length */ (serialNumber != NULL) ? strlen(serialNumber) : 0, /* Max length */ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ ), hardwareRevisionStringCharacteristic( GattCharacteristic::UUID_HARDWARE_REVISION_STRING_CHAR, (uint8_t *)hardwareRevision, (hardwareRevision != NULL) ? strlen(hardwareRevision) : 0, /* Min length */ (hardwareRevision != NULL) ? strlen(hardwareRevision) : 0, /* Max length */ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ ), firmwareRevisionStringCharacteristic( GattCharacteristic::UUID_FIRMWARE_REVISION_STRING_CHAR, (uint8_t *)firmwareRevision, (firmwareRevision != NULL) ? strlen(firmwareRevision) : 0, /* Min length */ (firmwareRevision != NULL) ? strlen(firmwareRevision) : 0, /* Max length */ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ ), softwareRevisionStringCharacteristic( GattCharacteristic::UUID_SOFTWARE_REVISION_STRING_CHAR, (uint8_t *)softwareRevision, (softwareRevision != NULL) ? strlen(softwareRevision) : 0, /* Min length */ (softwareRevision != NULL) ? strlen(softwareRevision) : 0, /* Max length */ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ ), pnpIDCharacteristic( GattCharacteristic::UUID_PNP_ID_CHAR, const_cast<PnPID_t*>(pnpID) ) { static bool serviceAdded = false; /* We only add the information service once. */ if (serviceAdded) { return; } // required for OS X bonding pnpIDCharacteristic.requireSecurity(SecurityManager::SECURITY_MODE_ENCRYPTION_NO_MITM); GattCharacteristic *charTable[] = { &manufacturersNameStringCharacteristic, &modelNumberStringCharacteristic, &serialNumberStringCharacteristic, &hardwareRevisionStringCharacteristic, &firmwareRevisionStringCharacteristic, &softwareRevisionStringCharacteristic, &pnpIDCharacteristic}; GattService deviceInformationService( GattService::UUID_DEVICE_INFORMATION_SERVICE, charTable, sizeof(charTable) / sizeof(GattCharacteristic *) ); ble.addService(deviceInformationService); serviceAdded = true; } protected: /** * A reference to the BLE instance object to which the services and * characteristics will be added. */ BLE &ble; /** * BLE characterising to allow BLE peers access to the manufacturer's name. */ GattCharacteristic manufacturersNameStringCharacteristic; /** * BLE characterising to allow BLE peers access to the model number. */ GattCharacteristic modelNumberStringCharacteristic; /** * BLE characterising to allow BLE peers access to the serial number. */ GattCharacteristic serialNumberStringCharacteristic; /** * BLE characterising to allow BLE peers access to the hardware revision string. */ GattCharacteristic hardwareRevisionStringCharacteristic; /** * BLE characterising to allow BLE peers access to the firmware revision string. */ GattCharacteristic firmwareRevisionStringCharacteristic; /** * BLE characterising to allow BLE peers access to the software revision string. */ GattCharacteristic softwareRevisionStringCharacteristic; ReadOnlyGattCharacteristic<PnPID_t> pnpIDCharacteristic; }; #endif /* #ifndef __BLE_DEVICE_INFORMATION_SERVICE_H__*/