仕倫 林 / Mbed OS 12_1

Dependencies:   X_NUCLEO_IKS01A2

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ESS.h Source File

ESS.h

00001 /* ARM University Program Microcontroller Library
00002  * 
00003  * Environmental Sensing Service
00004  *
00005  * This software is distributed under an "AS IS" BASIS,
00006  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00007  */
00008 
00009 #ifndef __BLE_ENVIRONMENTAL_SENSING_SERVICE_H__
00010 #define __BLE_ENVIRONMENTAL_SENSING_SERVICE_H__
00011 
00012 #include <mbed.h>
00013 #include "blecommon.h"
00014 #include "Gap.h"
00015 #include "GattServer.h"
00016 #include "BLEDeviceInstanceBase.h"
00017 #include "ble/BLE.h"
00018 
00019 //#include "BLEDevice.h"
00020 
00021 /* Environmental Sensing Service */
00022 /* Service:  https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.environmental_sensing.xml */
00023 /* Humidity characteristic: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.humidity.xml */
00024 /* Temperature: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.temperature.xml */
00025 
00026 class EnvironmentalSensingService {
00027 
00028 public:
00029     typedef int16_t  TemperatureType_t;
00030     typedef uint16_t HumidityType_t;
00031     typedef uint32_t PressureType_t;
00032     typedef uint16_t WinddirectionType_t;
00033     /**
00034      * Constructor.
00035      *
00036      * param[in] _ble
00037      *               Reference to the underlying BLEDevice.
00038      * param[in] humidity percentage (16-bit unsigned, 2 decimals).
00039      *               initial value for the humidity value.
00040      * param[in] temperature in degrees Celsius (16-bit signed, 2 decimals).
00041      *               initial value for the temperature
00042      */
00043     /**
00044      * @brief   EnvironmentalService constructor.
00045      * @param   ble Reference to BLE device.
00046      * @param   temperature_en Enable this characteristic.
00047      * @param   humidity_en Enable this characteristic.
00048      * @param   pressure_en Enable this characteristic.
00049      */
00050     EnvironmentalSensingService(BLE& _ble) :
00051         ble(_ble),
00052         temperatureCharacteristic(GattCharacteristic::UUID_TEMPERATURE_CHAR, &temperature),
00053         humidityCharacteristic(0x2A6F, &humidity),
00054         pressureCharacteristic(GattCharacteristic::UUID_PRESSURE_CHAR, &pressure),
00055         winddirectionCharacteristic(0x2A71, &winddirection)
00056     {
00057         static bool serviceAdded = false; /* We should only ever need to add the information service once. */
00058         if (serviceAdded) {
00059             return;
00060         }
00061  
00062         GattCharacteristic *charTable[] = { &humidityCharacteristic,
00063                                             &pressureCharacteristic,
00064                                             &temperatureCharacteristic,
00065                                             &winddirectionCharacteristic };
00066  
00067         GattService EnvironmentalService(0x181A, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
00068  
00069         ble.gattServer().addService(EnvironmentalService);
00070         serviceAdded = true;
00071     }
00072  
00073 
00074     void updateHumidity(HumidityType_t newHumidityVal)
00075     {
00076         humidity = (HumidityType_t) (newHumidityVal * 100);
00077         ble.gattServer().write(humidityCharacteristic.getValueHandle(), (uint8_t *) &humidity, sizeof(HumidityType_t));
00078     }
00079 
00080     void updateTemperature(float newTemperatureVal)
00081     {
00082         temperature = (TemperatureType_t) (newTemperatureVal * 100);
00083         ble.gattServer().write(temperatureCharacteristic.getValueHandle(), (uint8_t *) &temperature, sizeof(TemperatureType_t));
00084     }
00085     void updatePressure(PressureType_t newPressureVal)
00086     {
00087         pressure = (PressureType_t) (newPressureVal * 10);
00088         ble.gattServer().write(pressureCharacteristic.getValueHandle(), (uint8_t *) &pressure, sizeof(PressureType_t));
00089     }
00090     void updateWinddirection(WinddirectionType_t winddirection) {
00091         ble.gattServer().write(winddirectionCharacteristic.getValueHandle(), (uint8_t *)&winddirection, sizeof(WinddirectionType_t));
00092     }      
00093 
00094         
00095 private:
00096     BLE                  &ble;
00097     ReadOnlyGattCharacteristic<HumidityType_t>  humidityCharacteristic;
00098     ReadOnlyGattCharacteristic<TemperatureType_t> temperatureCharacteristic;
00099     ReadOnlyGattCharacteristic<PressureType_t> pressureCharacteristic;
00100     ReadOnlyGattCharacteristic<WinddirectionType_t>          winddirectionCharacteristic;
00101     PressureType_t    pressure;
00102     TemperatureType_t temperature;
00103     HumidityType_t    humidity;
00104     WinddirectionType_t winddirection;
00105 
00106 };
00107 
00108 #endif /* #ifndef __BLE_ENVIRONMENTAL_SENSING_SERVICE_H__*/
00109 
00110 
00111 // *******************************ARM University Program Copyright © ARM Ltd 2015*************************************//