Skip to content

Commit 8097e50

Browse files
committed
add sensor service notify callback
1 parent e87d1de commit 8097e50

File tree

5 files changed

+22
-7
lines changed

5 files changed

+22
-7
lines changed

libraries/BLEAdafruitService/src/services/BLEAdafruitQuaternion.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ void BLEAdafruitQuaternion::setCalibration(Adafruit_Sensor_Calibration* calib)
9595
_calib = calib;
9696
}
9797

98-
void BLEAdafruitQuaternion::_notify_cb(uint16_t conn_hdl, uint16_t value)
98+
void BLEAdafruitQuaternion::_notify_handler(uint16_t conn_hdl, uint16_t value)
9999
{
100100
// Start/Stop filter timer
101101
if (value & BLE_GATT_HVX_NOTIFICATION)
@@ -107,7 +107,7 @@ void BLEAdafruitQuaternion::_notify_cb(uint16_t conn_hdl, uint16_t value)
107107
}
108108

109109
// Call SuperClass function
110-
BLEAdafruitSensor::_notify_cb(conn_hdl, value);
110+
BLEAdafruitSensor::_notify_handler(conn_hdl, value);
111111
}
112112

113113
void BLEAdafruitQuaternion::_update_timer(int32_t ms)

libraries/BLEAdafruitService/src/services/BLEAdafruitQuaternion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class BLEAdafruitQuaternion : public BLEAdafruitSensor
4343
protected:
4444
void _update_timer(int32_t ms);
4545
void _measure_handler(void);
46-
void _notify_cb(uint16_t conn_hdl, uint16_t value);
46+
void _notify_handler(uint16_t conn_hdl, uint16_t value);
4747

4848
void _fitler_update(void);
4949

libraries/BLEAdafruitService/src/services/BLEAdafruitSensor.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@
3131
BLEAdafruitSensor::BLEAdafruitSensor(BLEUuid service_uuid, BLEUuid data_uuid)
3232
: BLEService(service_uuid), _measurement(data_uuid), _period(UUID128_CHR_ADAFRUIT_MEASUREMENT_PERIOD)
3333
{
34-
_measure_cb = NULL;
3534
_sensor = NULL;
35+
_measure_cb = NULL;
36+
_notify_cb = NULL;
3637
}
3738

3839
err_t BLEAdafruitSensor::_begin(int32_t ms)
@@ -76,10 +77,15 @@ void BLEAdafruitSensor::setPeriod(int32_t period_ms)
7677
_update_timer(period_ms);
7778
}
7879

80+
void BLEAdafruitSensor::setNotifyCallback(notify_callback_t fp)
81+
{
82+
_notify_cb = fp;
83+
}
84+
7985
//--------------------------------------------------------------------+
8086
// Internal API
8187
//--------------------------------------------------------------------+
82-
void BLEAdafruitSensor::_notify_cb(uint16_t conn_hdl, uint16_t value)
88+
void BLEAdafruitSensor::_notify_handler(uint16_t conn_hdl, uint16_t value)
8389
{
8490
// notify enabled
8591
if (value & BLE_GATT_HVX_NOTIFICATION)
@@ -90,6 +96,9 @@ void BLEAdafruitSensor::_notify_cb(uint16_t conn_hdl, uint16_t value)
9096
_timer.stop();
9197
}
9298

99+
// invoke callback if any
100+
if (_notify_cb) _notify_cb(conn_hdl, value);
101+
93102
// send initial notification if period = 0
94103
// if ( 0 == svc._period.read32() )
95104
// {
@@ -178,6 +187,6 @@ void BLEAdafruitSensor::sensor_data_cccd_cb(uint16_t conn_hdl, BLECharacteristic
178187
{
179188
BLEAdafruitSensor* svc = (BLEAdafruitSensor*) &chr->parentService();
180189

181-
svc->_notify_cb(conn_hdl, value);
190+
svc->_notify_handler(conn_hdl, value);
182191
}
183192

libraries/BLEAdafruitService/src/services/BLEAdafruitSensor.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class BLEAdafruitSensor : public BLEService
3131
{
3232
public:
3333
static const int32_t DEFAULT_PERIOD = 1000;
34+
35+
typedef void (*notify_callback_t)(uint16_t conn_hdl, bool enabled);
3436
typedef uint16_t (*measure_callback_t )(uint8_t* buf, uint16_t bufsize);
3537

3638
BLEAdafruitSensor(BLEUuid service_uuid, BLEUuid data_uuid);
@@ -39,6 +41,7 @@ class BLEAdafruitSensor : public BLEService
3941
virtual err_t begin(Adafruit_Sensor* sensor, int32_t ms = DEFAULT_PERIOD);
4042

4143
void setPeriod(int32_t period_ms);
44+
void setNotifyCallback(notify_callback_t fp);
4245

4346
protected:
4447
BLECharacteristic _period;
@@ -47,13 +50,15 @@ class BLEAdafruitSensor : public BLEService
4750
Adafruit_Sensor* _sensor;
4851

4952
measure_callback_t _measure_cb;
53+
notify_callback_t _notify_cb;
54+
5055
SoftwareTimer _timer;
5156

5257
err_t _begin(int32_t ms);
5358

5459
virtual void _update_timer(int32_t ms);
5560
virtual void _measure_handler(void);
56-
virtual void _notify_cb(uint16_t conn_hdl, uint16_t value);
61+
virtual void _notify_handler(uint16_t conn_hdl, uint16_t value);
5762

5863
static void sensor_timer_cb(TimerHandle_t xTimer);
5964
static void sensor_period_write_cb(uint16_t conn_hdl, BLECharacteristic* chr, uint8_t* data, uint16_t len);

variants/clue_nrf52840/variant.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ extern "C"
4343
// LEDs
4444
#define PIN_LED1 (17)
4545
#define PIN_NEOPIXEL (18)
46+
#define PIN_LED2 (43) // dual white LEDs
4647

4748
#define LED_BUILTIN PIN_LED1
4849

0 commit comments

Comments
 (0)