* 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.

Dependencies:   DHT22

Revision:
2:65ed7cd0480c
Parent:
1:8db3d642a94f
Child:
3:d6fbd4f3a3d4
--- a/source/bike_service.h	Thu Nov 02 17:44:51 2017 +0000
+++ b/source/bike_service.h	Thu Nov 02 18:38:02 2017 +0000
@@ -12,41 +12,66 @@
     const static uint16_t BIKE_SERVICE_UUID                   = 0xA580;
     const static uint16_t SWITCH_CONTROL_UUID                 = 0xA581;   
     const static uint16_t TEMPERATURE_MEASURE_UUID            = 0xA582;   
+    const static uint16_t HUMIDITY_MEASURE_UUID               = 0xA583;   
+    const static uint16_t AIR_QUALITY_MEASURE_UUID            = 0xA584;   
     
-//    void updateTemperatureState(uint16_t newTemperature);
      
 /** 
   * @param[in] _ble BLE object for the underlying controller.
   * @param[in] currentTemperature The temperature measured from the sensor.
   */
 
-    bikeService(BLEDevice &_ble, bool initialSwitchState) :
+    bikeService(BLE &_ble, bool initialSwitchState, int16_t currentTemperature, uint8_t currentHumidity, uint16_t airQuality) :
         ble(_ble), 
-        switchState(SWITCH_CONTROL_UUID, &initialSwitchState)
-//        temperatureState(TEMPERATURE_MEASURE_UUID, &currentTemperature)        
+        switchState(SWITCH_CONTROL_UUID, &initialSwitchState),
+        temperatureCharacteristic(GattCharacteristic::UUID_TEMPERATURE_CHAR, &currentTemperature, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
+        humidityCharacteristic(GattCharacteristic::UUID_HUMIDITY_CHAR, &currentHumidity, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
+        airQualityCharacteristic(AIR_QUALITY_MEASURE_UUID, &airQuality, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY)        
     {
             /* Create and add the service */    
-            GattCharacteristic *charTable[] = {&switchState};
+            GattCharacteristic *charTable[] = {&switchState, &temperatureCharacteristic, &humidityCharacteristic, &airQualityCharacteristic};
             GattService         bikeService(BIKE_SERVICE_UUID, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
-            ble.addService(bikeService);
+            ble.gattServer().addService(bikeService);
     }
 
     GattAttribute::Handle_t getValueHandle() const {
         return switchState.getValueHandle();
     }
 
-    void updateTemperatureState(uint16_t newTemperature) {
+    void updateTemperatureCharacteristic(int16_t newTemperature) {
+        currentTemperature = newTemperature; 
+        ble.gattServer().write(temperatureCharacteristic.getValueHandle(), (uint8_t *) &currentTemperature, sizeof(int16_t));
+    }
+    
+    void updateAirQualityCharacteristic(uint8_t newHumidity) {
+        currentHumidity = newHumidity; 
+        ble.gattServer().write(humidityCharacteristic.getValueHandle(), (uint8_t *) &currentHumidity, sizeof(uint8_t));
+    }
+    
+    void updateTemperatureCharacteristic(uint16_t newAirQuality) {
+        airQuality = newAirQuality;
+        ble.gattServer().write(airQualityCharacteristic.getValueHandle(), (uint8_t *) &airQuality, sizeof(uint16_t));
+    }
+    
+    void updateAllCharacteristics(int16_t newTemperature, uint8_t newHumidity, uint16_t newAirQuality) {
         currentTemperature = newTemperature;
+        currentHumidity = newHumidity;
+        airQuality = newAirQuality;
         
-        /* An error occured here, need to create a new GattServer class? */
-//        ble.gattServer().write(temperatureState.getValueHandle(), (uint16_t *) &currentTemperature, sizeof(uint16_t));
+        ble.gattServer().write(temperatureCharacteristic.getValueHandle(), (uint8_t *) &currentTemperature, sizeof(int16_t));
+        ble.gattServer().write(humidityCharacteristic.getValueHandle(), (uint8_t *) &currentHumidity, sizeof(uint8_t));
+        ble.gattServer().write(airQualityCharacteristic.getValueHandle(), (uint8_t *) &airQuality, sizeof(uint16_t));
     }
 private:
     int16_t currentTemperature;
+    uint8_t currentHumidity;
+    uint16_t airQuality;
 
-    BLEDevice                            &ble;
+    BLE                                  &ble;
     ReadWriteGattCharacteristic<bool>     switchState;
-//    ReadOnlyGattCharacteristic<int16_t>  temperatureState;
+    ReadOnlyGattCharacteristic<int16_t>   temperatureCharacteristic;
+    ReadOnlyGattCharacteristic<uint8_t>   humidityCharacteristic;
+    ReadOnlyGattCharacteristic<uint16_t>  airQualityCharacteristic;
 };
 
 #endif /* __BLE_BIKE_SERVICE_H__ */