Skip to content

Commit 58a2721

Browse files
committed
rename _timer_callback to _measure_handler
add _notify_cb
1 parent a9dbd35 commit 58a2721

File tree

4 files changed

+65
-27
lines changed

4 files changed

+65
-27
lines changed

libraries/BLEAdafruitService/src/services/BLEAdafruitQuaternion.cpp

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ BLEAdafruitQuaternion::BLEAdafruitQuaternion(void)
6060
{
6161
_accel = _gyro = _mag = NULL;
6262
_filter = NULL;
63+
64+
// Setup Measurement Characteristic
65+
_measurement.setProperties(CHR_PROPS_READ | CHR_PROPS_NOTIFY);
66+
_measurement.setPermission(SECMODE_OPEN, SECMODE_NO_ACCESS);
67+
_measurement.setFixedLen(4*4);
6368
}
6469

6570
err_t BLEAdafruitQuaternion::begin(Adafruit_AHRS_FusionInterface* filter, Adafruit_Sensor* accel, Adafruit_Sensor* gyro, Adafruit_Sensor* mag)
@@ -69,13 +74,36 @@ err_t BLEAdafruitQuaternion::begin(Adafruit_AHRS_FusionInterface* filter, Adafru
6974
_gyro = gyro;
7075
_mag = mag;
7176

72-
// Setup Measurement Characteristic
73-
_measurement.setProperties(CHR_PROPS_READ | CHR_PROPS_NOTIFY);
74-
_measurement.setPermission(SECMODE_OPEN, SECMODE_NO_ACCESS);
75-
_measurement.setFixedLen(4*4);
76-
7777
// Invoke base class begin(), this will add Service, Measurement and Period characteristics
78-
VERIFY_STATUS( BLEAdafruitSensor::begin(DEFAULT_PERIOD) );
78+
VERIFY_STATUS( BLEAdafruitSensor::_begin(DEFAULT_PERIOD) );
7979

8080
return ERROR_NONE;
8181
}
82+
83+
// Invoked by period timer in Base class
84+
// Note invoked in RTOS Timer thread
85+
void BLEAdafruitQuaternion::_measure_handler(void)
86+
{
87+
// TODO multiple connections
88+
_measurement.notify("test", 4);
89+
90+
// // get sensor
91+
// sensors_event_t accel_evt, gyro_evt, mag_evt;
92+
//
93+
// _accel->getEvent(&accel_evt);
94+
// _gyro->getEvent(&gyro_evt);
95+
// _mag->getEvent(&mag_evt);
96+
//
97+
// // calibrate
98+
//
99+
//
100+
// // Convert gyro from Rad/s to Degree/s
101+
// gyro_evt.gyro.x *= SENSORS_RADS_TO_DPS;
102+
// gyro_evt.gyro.y *= SENSORS_RADS_TO_DPS;
103+
// gyro_evt.gyro.z *= SENSORS_RADS_TO_DPS;
104+
//
105+
// // apply filter, update 10 times before notify
106+
// filter->update(gyro_evt.gyro.x , gyro_evt.gyro.y, gyro_evt.gyro.z,
107+
// accel_evt.acceleration.x, accel_evt.acceleration.y, accel_evt.acceleration.z,
108+
// mag_evt.magnetic.x, mag_evt.magnetic.y, mag_evt.magnetic.z);
109+
}

libraries/BLEAdafruitService/src/services/BLEAdafruitQuaternion.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,16 @@ class BLEAdafruitQuaternion : public BLEAdafruitSensor
3838
BLEAdafruitQuaternion(void);
3939
err_t begin(Adafruit_AHRS_FusionInterface* filter, Adafruit_Sensor* accel, Adafruit_Sensor* gyro, Adafruit_Sensor* mag);
4040

41+
protected:
42+
virtual void _measure_handler(void);
43+
4144
private:
4245
Adafruit_Sensor* _accel;
4346
Adafruit_Sensor* _gyro;
4447
Adafruit_Sensor* _mag;
4548

4649
Adafruit_AHRS_FusionInterface* _filter;
50+
SoftwareTimer _filter_timer;
4751
};
4852

4953
#endif /* BLEADAFRUIT_QUATERNION_H_ */

libraries/BLEAdafruitService/src/services/BLEAdafruitSensor.cpp

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,27 @@ void BLEAdafruitSensor::setPeriod(int32_t period_ms)
7676
_update_timer(period_ms);
7777
}
7878

79+
//--------------------------------------------------------------------+
80+
// Internal API
81+
//--------------------------------------------------------------------+
82+
void BLEAdafruitSensor::_notify_cb(uint16_t conn_hdl, uint16_t value)
83+
{
84+
// notify enabled
85+
if (value & BLE_GATT_HVX_NOTIFICATION)
86+
{
87+
_timer.start();
88+
}else
89+
{
90+
_timer.stop();
91+
}
92+
93+
// send initial notification if period = 0
94+
// if ( 0 == svc._period.read32() )
95+
// {
96+
// svc._measurement.notify();
97+
// }
98+
}
99+
79100
void BLEAdafruitSensor::_update_timer(int32_t ms)
80101
{
81102
// TODO handle period = 0 which notify on changes ASAP
@@ -91,7 +112,7 @@ void BLEAdafruitSensor::_update_timer(int32_t ms)
91112
}
92113
}
93114

94-
void BLEAdafruitSensor::_timer_callback(void)
115+
void BLEAdafruitSensor::_measure_handler(void)
95116
{
96117
uint16_t len = _measurement.getMaxLen();
97118
uint8_t buf[len];
@@ -110,11 +131,9 @@ void BLEAdafruitSensor::_timer_callback(void)
110131
len = _measure_cb(buf, sizeof(buf));
111132
len = min(len, sizeof(buf));
112133
}
113-
// Invoke internal measure callback
114134
else
115135
{
116-
len = _internal_measure_cb(buf, sizeof(buf));
117-
if (len == 0) return; // nothing to measure
136+
return; // nothing to measure
118137
}
119138

120139
// Period = 0, compare with old data, only update on changes
@@ -138,7 +157,7 @@ void BLEAdafruitSensor::_timer_callback(void)
138157
void BLEAdafruitSensor::sensor_timer_cb(TimerHandle_t xTimer)
139158
{
140159
BLEAdafruitSensor* svc = (BLEAdafruitSensor*) pvTimerGetTimerID(xTimer);
141-
svc->_timer_callback();
160+
svc->_measure_handler();
142161
}
143162

144163
// Client update period, adjust timer accordingly
@@ -156,19 +175,6 @@ void BLEAdafruitSensor::sensor_data_cccd_cb(uint16_t conn_hdl, BLECharacteristic
156175
{
157176
BLEAdafruitSensor& svc = (BLEAdafruitSensor&) chr->parentService();
158177

159-
// notify enabled
160-
if (value & BLE_GATT_HVX_NOTIFICATION)
161-
{
162-
svc._timer.start();
163-
}else
164-
{
165-
svc._timer.stop();
166-
}
167-
168-
// send initial notification if period = 0
169-
// if ( 0 == svc._period.read32() )
170-
// {
171-
// svc._measurement.notify();
172-
// }
178+
svc._notify_cb(conn_hdl, value);
173179
}
174180

libraries/BLEAdafruitService/src/services/BLEAdafruitSensor.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ class BLEAdafruitSensor : public BLEService
5151

5252
err_t _begin(int32_t ms);
5353
void _update_timer(int32_t ms);
54-
void _timer_callback(void);
5554

56-
virtual uint16_t _internal_measure_cb(uint8_t* buf, uint16_t bufsize) { return 0; }
55+
virtual void _measure_handler(void);
56+
virtual void _notify_cb(uint16_t conn_hdl, uint16_t value);
5757

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

0 commit comments

Comments
 (0)