仕倫 林 / Mbed OS 12_1

Dependencies:   X_NUCLEO_IKS01A2

Files at this revision

API Documentation at this revision

Comitter:
lsl097
Date:
Thu Apr 30 14:28:59 2020 +0000
Parent:
1:b12ac7b02a21
Commit message:
FIN

Changed in this revision

source/ESS.h Show annotated file Show diff for this revision Revisions of this file
source/ESS2.h Show annotated file Show diff for this revision Revisions of this file
source/main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/source/ESS.h	Wed Apr 29 16:18:37 2020 +0000
+++ b/source/ESS.h	Thu Apr 30 14:28:59 2020 +0000
@@ -14,6 +14,7 @@
 #include "Gap.h"
 #include "GattServer.h"
 #include "BLEDeviceInstanceBase.h"
+#include "ble/BLE.h"
 
 //#include "BLEDevice.h"
 
@@ -25,6 +26,10 @@
 class EnvironmentalSensingService {
 
 public:
+    typedef int16_t  TemperatureType_t;
+    typedef uint16_t HumidityType_t;
+    typedef uint32_t PressureType_t;
+    typedef uint16_t WinddirectionType_t;
     /**
      * Constructor.
      *
@@ -35,44 +40,68 @@
      * param[in] temperature in degrees Celsius (16-bit signed, 2 decimals).
      *               initial value for the temperature
      */
-    EnvironmentalSensingService(BLEDevice &_ble, uint16_t humidity, int16_t temperature) :
+    /**
+     * @brief   EnvironmentalService constructor.
+     * @param   ble Reference to BLE device.
+     * @param   temperature_en Enable this characteristic.
+     * @param   humidity_en Enable this characteristic.
+     * @param   pressure_en Enable this characteristic.
+     */
+    EnvironmentalSensingService(BLE& _ble) :
         ble(_ble),
-
-                humiditychar(GattCharacteristic::UUID_HUMIDITY_CHAR, (uint8_t *)&humidity,
-                sizeof(uint16_t), sizeof(uint16_t),
-                GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
+        temperatureCharacteristic(GattCharacteristic::UUID_TEMPERATURE_CHAR, &temperature),
+        humidityCharacteristic(0x2A6F, &humidity),
+        pressureCharacteristic(GattCharacteristic::UUID_PRESSURE_CHAR, &pressure),
+        winddirectionCharacteristic(0x2A71, &winddirection)
+    {
+        static bool serviceAdded = false; /* We should only ever need to add the information service once. */
+        if (serviceAdded) {
+            return;
+        }
+ 
+        GattCharacteristic *charTable[] = { &humidityCharacteristic,
+                                            &pressureCharacteristic,
+                                            &temperatureCharacteristic,
+                                            &winddirectionCharacteristic };
+ 
+        GattService EnvironmentalService(0x181A, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
+ 
+        ble.gattServer().addService(EnvironmentalService);
+        serviceAdded = true;
+    }
+ 
 
-                temperaturechar(GattCharacteristic::UUID_TEMPERATURE_CHAR, (uint8_t *)&temperature,
-                sizeof(int16_t), sizeof(int16_t),
-                GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY)
-                
-
-                {   // Setup Service
-                    
-        GattCharacteristic *charTable[] = {&humiditychar, &temperaturechar, }; // 2 services. humidity and temp
-
-                GattService      EnvironmentalService(0x181A, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
-
-        ble.gattServer().addService(EnvironmentalService);
+    void updateHumidity(HumidityType_t newHumidityVal)
+    {
+        humidity = (HumidityType_t) (newHumidityVal * 100);
+        ble.gattServer().write(humidityCharacteristic.getValueHandle(), (uint8_t *) &humidity, sizeof(HumidityType_t));
     }
 
-
-    /* Set a new 16-bit value for the humidity measurement.  */
-    void updateHumidity(uint16_t humidity) {
-        ble.gattServer().write(humiditychar.getValueAttribute().getHandle(), (uint8_t *)&humidity, sizeof(uint16_t));
+    void updateTemperature(float newTemperatureVal)
+    {
+        temperature = (TemperatureType_t) (newTemperatureVal * 100);
+        ble.gattServer().write(temperatureCharacteristic.getValueHandle(), (uint8_t *) &temperature, sizeof(TemperatureType_t));
     }
-
-                 /* Set a new 16-bit value for the temperature measurement.  */
-    void updateTemperature(int16_t temperature) {
-        ble.gattServer().write(temperaturechar.getValueAttribute().getHandle(), (uint8_t *)&temperature, sizeof(int16_t));
+    void updatePressure(PressureType_t newPressureVal)
+    {
+        pressure = (PressureType_t) (newPressureVal * 10);
+        ble.gattServer().write(pressureCharacteristic.getValueHandle(), (uint8_t *) &pressure, sizeof(PressureType_t));
     }
-
+    void updateWinddirection(WinddirectionType_t winddirection) {
+        ble.gattServer().write(winddirectionCharacteristic.getValueHandle(), (uint8_t *)&winddirection, sizeof(WinddirectionType_t));
+    }      
 
         
 private:
-    BLEDevice                   &ble;
-    GattCharacteristic          humiditychar;
-    GattCharacteristic          temperaturechar;
+    BLE                  &ble;
+    ReadOnlyGattCharacteristic<HumidityType_t>  humidityCharacteristic;
+    ReadOnlyGattCharacteristic<TemperatureType_t> temperatureCharacteristic;
+    ReadOnlyGattCharacteristic<PressureType_t> pressureCharacteristic;
+    ReadOnlyGattCharacteristic<WinddirectionType_t>          winddirectionCharacteristic;
+    PressureType_t    pressure;
+    TemperatureType_t temperature;
+    HumidityType_t    humidity;
+    WinddirectionType_t winddirection;
 
 };
 
--- a/source/ESS2.h	Wed Apr 29 16:18:37 2020 +0000
+++ b/source/ESS2.h	Thu Apr 30 14:28:59 2020 +0000
@@ -53,9 +53,9 @@
 
                 GattCharacteristic *charTable[] = {  &winddirectionchar, &pressurechar };
 
-                GattService      EnvironmentalService(0x181A, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
+                GattService      EnvironmentalService2(0x181A, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
 
-        ble.gattServer().addService(EnvironmentalService);
+        ble.gattServer().addService(EnvironmentalService2);
     }
 
 
--- a/source/main.cpp	Wed Apr 29 16:18:37 2020 +0000
+++ b/source/main.cpp	Thu Apr 30 14:28:59 2020 +0000
@@ -33,6 +33,7 @@
 #include "XNucleoIKS01A2.h"
 #include "ESS.h"
 #include "ESS2.h"
+#include "EnvironmentalService.h"
 
 //const static char DEVICE_NAME[] = "Heartrate";
 
@@ -71,11 +72,12 @@
         _hr_counter(100),
         _bt_service(ble, 25),
         //_hr_service(ble, _hr_counter, HeartRateService::LOCATION_FINGER),
-        _deviceInfo(ble, "ST", "Nucleo", "SN1" ),
+        _deviceInfo(ble, "ST", "Nucleo", "SN1","","","" ),
         _adv_data_builder(_adv_buffer),
         
-        _air (ble, (uint16_t) HUMIDITY, (int16_t) TEMPERATURE_C ),
-        _wind (ble, (uint16_t) WIND_DIRECTION, (uint32_t) PRESSURE)
+        _air (ble)
+        //_es(ble),
+        //_wind (ble, (uint16_t) WIND_DIRECTION, (uint32_t) PRESSURE)
         { 
             uuid16_list = new UUID[1]{0x181A};
             //_uuid_list = new UUID(3);
@@ -164,8 +166,8 @@
             hum_temp->get_humidity((float *)&HUMIDITY);
             press_temp->get_pressure((float *)&PRESSURE);
             magnetometer->get_m_axes_raw((int16_t *)MAGNETIC);
-            TEMPERATURE_C = TEMPERATURE_C*100;  //2 decimals
-            HUMIDITY = HUMIDITY*100;                        //2 decimals
+            //TEMPERATURE_C = TEMPERATURE_C*100;  //2 decimals
+            //HUMIDITY = HUMIDITY*100;                        //2 decimals
             PRESSURE = PRESSURE*1000;           //hPa to Pa + 1 decimal
             
             
@@ -182,10 +184,13 @@
             
             WIND_DIRECTION *=100;                             //2 decimals
             
-            _air.updateTemperature((uint16_t)TEMPERATURE_C);   
-            _air.updateHumidity((uint16_t)HUMIDITY);
-            _wind.updateWinddirection((uint16_t)WIND_DIRECTION);
-            _wind.updatePressure((uint16_t)PRESSURE);
+            _air.updateTemperature((float)TEMPERATURE_C);   
+            //_es.updateTemperature((float)TEMPERATURE_C); 
+            _air.updateHumidity((uint16_t)1);
+            //_es.updateHumidity((uint16_t)1);
+            _air.updateWinddirection((uint16_t)WIND_DIRECTION);
+            _air.updatePressure((uint16_t)PRESSURE);
+            //_es.updatePressure((uint16_t)PRESSURE);
             
             
             TEMPERATURE_F = (TEMPERATURE_C * 1.8f) + 32.0f; //Convert the temperature from Celsius to Fahrenheit
@@ -230,7 +235,8 @@
     BatteryService _bt_service;
     
     EnvironmentalSensingService _air;
-    EnvironmentalSensingService2 _wind;
+    //EnvironmentalSensingService2 _wind;
+    //EnvironmentalService _es;
     
     UUID * uuid16_list;