range notifications
This commit is contained in:
parent
776291df07
commit
490d8b578b
12
main/ble.c
12
main/ble.c
@ -42,6 +42,7 @@ static uint16_t range_handle[RANGE_CHRS_NUM];
|
||||
|
||||
static uint8_t cs_notify_state[INPUTS_NUM];
|
||||
static uint8_t ev_notify_state[INPUTS_NUM];
|
||||
static uint8_t range_notify_state;
|
||||
|
||||
static struct ble_context ev_ctxt[INPUTS_NUM];
|
||||
static struct ble_context cs_ctxt[INPUTS_NUM];
|
||||
@ -122,7 +123,7 @@ static struct ble_gatt_svc_def gatt_svr_svcs[] = {
|
||||
[CURRENT_RANGE_ID] = {
|
||||
.uuid = BLE_UUID16_DECLARE(ELECTRIC_CURRENT_RANGE_CHAR),
|
||||
.access_cb = gatt_char_access_range,
|
||||
.flags = BLE_GATT_CHR_F_READ | BLE_GATT_CHR_F_WRITE,
|
||||
.flags = BLE_GATT_CHR_F_READ | BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_NOTIFY,
|
||||
.min_key_size = 0,
|
||||
.val_handle = &range_handle[CURRENT_RANGE_ID],
|
||||
.arg = &range_ctxt[CURRENT_RANGE_ID],
|
||||
@ -230,12 +231,15 @@ static int ble_gap_event(struct ble_gap_event *event, void* arg){
|
||||
break;
|
||||
case BLE_GAP_EVENT_SUBSCRIBE:
|
||||
ESP_LOGI(TAG, "Subscribe %d", event->subscribe.attr_handle);
|
||||
|
||||
for(int i = 0; i < INPUTS_NUM; i++){
|
||||
if(event->subscribe.attr_handle == cs_handle[i])
|
||||
cs_notify_state[i] = event->subscribe.cur_notify;
|
||||
if(event->subscribe.attr_handle == ev_handle[i])
|
||||
ev_notify_state[i] = event->subscribe.cur_notify;
|
||||
}
|
||||
if(event->subscribe.attr_handle == range_handle[CURRENT_RANGE_ID])
|
||||
range_notify_state = event->subscribe.cur_notify;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -314,3 +318,9 @@ void notify_update(measurements* meas){
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void notify_range(configuration* conf){
|
||||
ESP_LOGI(TAG, "notify range");
|
||||
struct os_mbuf* om = ble_hs_mbuf_from_flat(&conf->range, sizeof(conf->range));
|
||||
ESP_ERROR_CHECK(ble_gattc_notify_custom(conn_handle, range_handle[CURRENT_RANGE_ID], om));
|
||||
}
|
||||
|
@ -16,3 +16,4 @@ struct ble_context {
|
||||
|
||||
void initBLE(configuration* conf, measurements* meas, measurements_ctxt* meas_ctxt);
|
||||
void notify_update(measurements* meas);
|
||||
void notify_range(configuration* conf);
|
@ -97,12 +97,15 @@ configuration main_conf = {
|
||||
.ranges_num = R_NUM,
|
||||
};
|
||||
|
||||
uint8_t notify_range_f = 0;
|
||||
|
||||
static void IRAM_ATTR overrange_handler(void* arg)
|
||||
{
|
||||
if(!main_conf.auto_range) return;
|
||||
|
||||
activate_range(ranges, 0, R_NUM - 1);
|
||||
main_conf.range = 0;
|
||||
notify_range_f = 1;
|
||||
}
|
||||
|
||||
void app_main(void){
|
||||
@ -188,9 +191,11 @@ void app_main(void){
|
||||
if(meas_volts[UNDERRANGE_SRC] < UNDERRANGE_MV){
|
||||
underrange_counter++;
|
||||
if(underrange_counter > UNDERRANGE_NUM && main_conf.auto_range){
|
||||
if(main_conf.range < R_NUM - 1)
|
||||
if(main_conf.range < R_NUM - 1){
|
||||
main_conf.range++;
|
||||
activate_range(ranges, main_conf.range, R_NUM - 1);
|
||||
notify_range_f = 1;
|
||||
}
|
||||
underrange_counter = 0;
|
||||
}
|
||||
}
|
||||
@ -199,6 +204,10 @@ void app_main(void){
|
||||
}
|
||||
|
||||
notify_update(&meas);
|
||||
if(notify_range_f){
|
||||
notify_range_f = 0;
|
||||
notify_range(&main_conf);
|
||||
}
|
||||
|
||||
vTaskDelay(main_conf.refresh_delay / portTICK_PERIOD_MS);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user