Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: X_NUCLEO_IKS01A2
Revision 2:5da515ba10ff, committed 2020-04-30
- Comitter:
- lsl097
- Date:
- Thu Apr 30 14:28:59 2020 +0000
- Parent:
- 1:b12ac7b02a21
- Commit message:
- FIN
Changed in this revision
--- 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;