* This is the code for "BLE Device for motorbike". The device is attached on any bike at will. * User can control 2 switches and these switches can control anything that user wants ie: turn on * the bike, turn on the alarm system of the bike, turn on the light... * Temperature sensor is also included in the device. User can view the temperature when he/she gets * near the bike. * For the next version, humidity and air quality sensor are also added.
source/bike_service.h@2:65ed7cd0480c, 2017-11-02 (annotated)
- Committer:
- DuyLionTran
- Date:
- Thu Nov 02 18:38:02 2017 +0000
- Revision:
- 2:65ed7cd0480c
- Parent:
- 1:8db3d642a94f
- Child:
- 3:d6fbd4f3a3d4
Version 0.8 full service
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DuyLionTran | 0:ee08053aaf57 | 1 | #ifndef __BLE_BIKE_SERVICE_H__ |
DuyLionTran | 0:ee08053aaf57 | 2 | #define __BLE_BIKE_SERVICE_H__ |
DuyLionTran | 0:ee08053aaf57 | 3 | |
DuyLionTran | 0:ee08053aaf57 | 4 | #include "ble/BLE.h" |
DuyLionTran | 0:ee08053aaf57 | 5 | |
DuyLionTran | 0:ee08053aaf57 | 6 | /** |
DuyLionTran | 0:ee08053aaf57 | 7 | * @class bikeService |
DuyLionTran | 0:ee08053aaf57 | 8 | * @brief This is a customized service for a device controlling the bike via BLE |
DuyLionTran | 0:ee08053aaf57 | 9 | */ |
DuyLionTran | 0:ee08053aaf57 | 10 | class bikeService { |
DuyLionTran | 1:8db3d642a94f | 11 | public: |
DuyLionTran | 0:ee08053aaf57 | 12 | const static uint16_t BIKE_SERVICE_UUID = 0xA580; |
DuyLionTran | 0:ee08053aaf57 | 13 | const static uint16_t SWITCH_CONTROL_UUID = 0xA581; |
DuyLionTran | 1:8db3d642a94f | 14 | const static uint16_t TEMPERATURE_MEASURE_UUID = 0xA582; |
DuyLionTran | 2:65ed7cd0480c | 15 | const static uint16_t HUMIDITY_MEASURE_UUID = 0xA583; |
DuyLionTran | 2:65ed7cd0480c | 16 | const static uint16_t AIR_QUALITY_MEASURE_UUID = 0xA584; |
DuyLionTran | 1:8db3d642a94f | 17 | |
DuyLionTran | 0:ee08053aaf57 | 18 | |
DuyLionTran | 0:ee08053aaf57 | 19 | /** |
DuyLionTran | 0:ee08053aaf57 | 20 | * @param[in] _ble BLE object for the underlying controller. |
DuyLionTran | 0:ee08053aaf57 | 21 | * @param[in] currentTemperature The temperature measured from the sensor. |
DuyLionTran | 0:ee08053aaf57 | 22 | */ |
DuyLionTran | 0:ee08053aaf57 | 23 | |
DuyLionTran | 2:65ed7cd0480c | 24 | bikeService(BLE &_ble, bool initialSwitchState, int16_t currentTemperature, uint8_t currentHumidity, uint16_t airQuality) : |
DuyLionTran | 0:ee08053aaf57 | 25 | ble(_ble), |
DuyLionTran | 2:65ed7cd0480c | 26 | switchState(SWITCH_CONTROL_UUID, &initialSwitchState), |
DuyLionTran | 2:65ed7cd0480c | 27 | temperatureCharacteristic(GattCharacteristic::UUID_TEMPERATURE_CHAR, ¤tTemperature, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY), |
DuyLionTran | 2:65ed7cd0480c | 28 | humidityCharacteristic(GattCharacteristic::UUID_HUMIDITY_CHAR, ¤tHumidity, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY), |
DuyLionTran | 2:65ed7cd0480c | 29 | airQualityCharacteristic(AIR_QUALITY_MEASURE_UUID, &airQuality, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY) |
DuyLionTran | 0:ee08053aaf57 | 30 | { |
DuyLionTran | 0:ee08053aaf57 | 31 | /* Create and add the service */ |
DuyLionTran | 2:65ed7cd0480c | 32 | GattCharacteristic *charTable[] = {&switchState, &temperatureCharacteristic, &humidityCharacteristic, &airQualityCharacteristic}; |
DuyLionTran | 0:ee08053aaf57 | 33 | GattService bikeService(BIKE_SERVICE_UUID, charTable, sizeof(charTable) / sizeof(GattCharacteristic *)); |
DuyLionTran | 2:65ed7cd0480c | 34 | ble.gattServer().addService(bikeService); |
DuyLionTran | 0:ee08053aaf57 | 35 | } |
DuyLionTran | 0:ee08053aaf57 | 36 | |
DuyLionTran | 0:ee08053aaf57 | 37 | GattAttribute::Handle_t getValueHandle() const { |
DuyLionTran | 1:8db3d642a94f | 38 | return switchState.getValueHandle(); |
DuyLionTran | 0:ee08053aaf57 | 39 | } |
DuyLionTran | 0:ee08053aaf57 | 40 | |
DuyLionTran | 2:65ed7cd0480c | 41 | void updateTemperatureCharacteristic(int16_t newTemperature) { |
DuyLionTran | 2:65ed7cd0480c | 42 | currentTemperature = newTemperature; |
DuyLionTran | 2:65ed7cd0480c | 43 | ble.gattServer().write(temperatureCharacteristic.getValueHandle(), (uint8_t *) ¤tTemperature, sizeof(int16_t)); |
DuyLionTran | 2:65ed7cd0480c | 44 | } |
DuyLionTran | 2:65ed7cd0480c | 45 | |
DuyLionTran | 2:65ed7cd0480c | 46 | void updateAirQualityCharacteristic(uint8_t newHumidity) { |
DuyLionTran | 2:65ed7cd0480c | 47 | currentHumidity = newHumidity; |
DuyLionTran | 2:65ed7cd0480c | 48 | ble.gattServer().write(humidityCharacteristic.getValueHandle(), (uint8_t *) ¤tHumidity, sizeof(uint8_t)); |
DuyLionTran | 2:65ed7cd0480c | 49 | } |
DuyLionTran | 2:65ed7cd0480c | 50 | |
DuyLionTran | 2:65ed7cd0480c | 51 | void updateTemperatureCharacteristic(uint16_t newAirQuality) { |
DuyLionTran | 2:65ed7cd0480c | 52 | airQuality = newAirQuality; |
DuyLionTran | 2:65ed7cd0480c | 53 | ble.gattServer().write(airQualityCharacteristic.getValueHandle(), (uint8_t *) &airQuality, sizeof(uint16_t)); |
DuyLionTran | 2:65ed7cd0480c | 54 | } |
DuyLionTran | 2:65ed7cd0480c | 55 | |
DuyLionTran | 2:65ed7cd0480c | 56 | void updateAllCharacteristics(int16_t newTemperature, uint8_t newHumidity, uint16_t newAirQuality) { |
DuyLionTran | 1:8db3d642a94f | 57 | currentTemperature = newTemperature; |
DuyLionTran | 2:65ed7cd0480c | 58 | currentHumidity = newHumidity; |
DuyLionTran | 2:65ed7cd0480c | 59 | airQuality = newAirQuality; |
DuyLionTran | 1:8db3d642a94f | 60 | |
DuyLionTran | 2:65ed7cd0480c | 61 | ble.gattServer().write(temperatureCharacteristic.getValueHandle(), (uint8_t *) ¤tTemperature, sizeof(int16_t)); |
DuyLionTran | 2:65ed7cd0480c | 62 | ble.gattServer().write(humidityCharacteristic.getValueHandle(), (uint8_t *) ¤tHumidity, sizeof(uint8_t)); |
DuyLionTran | 2:65ed7cd0480c | 63 | ble.gattServer().write(airQualityCharacteristic.getValueHandle(), (uint8_t *) &airQuality, sizeof(uint16_t)); |
DuyLionTran | 1:8db3d642a94f | 64 | } |
DuyLionTran | 0:ee08053aaf57 | 65 | private: |
DuyLionTran | 1:8db3d642a94f | 66 | int16_t currentTemperature; |
DuyLionTran | 2:65ed7cd0480c | 67 | uint8_t currentHumidity; |
DuyLionTran | 2:65ed7cd0480c | 68 | uint16_t airQuality; |
DuyLionTran | 0:ee08053aaf57 | 69 | |
DuyLionTran | 2:65ed7cd0480c | 70 | BLE &ble; |
DuyLionTran | 1:8db3d642a94f | 71 | ReadWriteGattCharacteristic<bool> switchState; |
DuyLionTran | 2:65ed7cd0480c | 72 | ReadOnlyGattCharacteristic<int16_t> temperatureCharacteristic; |
DuyLionTran | 2:65ed7cd0480c | 73 | ReadOnlyGattCharacteristic<uint8_t> humidityCharacteristic; |
DuyLionTran | 2:65ed7cd0480c | 74 | ReadOnlyGattCharacteristic<uint16_t> airQualityCharacteristic; |
DuyLionTran | 0:ee08053aaf57 | 75 | }; |
DuyLionTran | 0:ee08053aaf57 | 76 | |
DuyLionTran | 0:ee08053aaf57 | 77 | #endif /* __BLE_BIKE_SERVICE_H__ */ |