summaryrefslogtreecommitdiff
path: root/src/BLE
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2020-01-12 16:39:03 +0100
committerJF <jf@codingfield.com>2020-01-12 16:39:03 +0100
commit6abf12ffb7a26e8d42b1dcb41b1fa9bcccd3ac16 (patch)
tree8c0900f2cd0d51da67b5ed14ab5dec224f54fe5e /src/BLE
parent3c29a11c78c9cd06be8ccedd9a067cd129b85f28 (diff)
Detect BLE disconnection (in addition to BLE connection) and update the display accordingly.
Diffstat (limited to 'src/BLE')
-rw-r--r--src/BLE/BleManager.c23
-rw-r--r--src/BLE/BleManager.h5
2 files changed, 21 insertions, 7 deletions
diff --git a/src/BLE/BleManager.c b/src/BLE/BleManager.c
index b369ca23..22bf5b68 100644
--- a/src/BLE/BleManager.c
+++ b/src/BLE/BleManager.c
@@ -118,6 +118,22 @@ void ble_manager_init_stack() {
NRF_SDH_BLE_OBSERVER(m_ble_observer, BLE_MANAGER__OBSERVER_PRIO, ble_manager_event_handler, NULL);
}
+void (*OnNewTimeCallback)(current_time_char_t*);
+void ble_manager_set_new_time_callback(void (*OnNewTime)(current_time_char_t*)) {
+ OnNewTimeCallback = OnNewTime;
+}
+
+void (*OnBleConnectionCallback)();
+void ble_manager_set_ble_connection_callback(void (*OnBleConnection)()) {
+ OnBleConnectionCallback = OnBleConnection;
+}
+
+void (*OnBleDisconnectionCallback)();
+void ble_manager_set_ble_disconnection_callback(void (*OnBleDisconnection)()) {
+ OnBleDisconnectionCallback = OnBleDisconnection;
+}
+
+
void ble_manager_event_handler(ble_evt_t const *p_ble_evt, void *p_context) {
uint32_t err_code;
@@ -126,6 +142,7 @@ void ble_manager_event_handler(ble_evt_t const *p_ble_evt, void *p_context) {
NRF_LOG_INFO("Connected");
ble_manager_connection_handle = p_ble_evt->evt.gap_evt.conn_handle;
err_code = nrf_ble_qwr_conn_handle_assign(&ble_manager_queue_write, ble_manager_connection_handle);
+ OnBleConnectionCallback();
APP_ERROR_CHECK(err_code);
break;
@@ -135,6 +152,7 @@ void ble_manager_event_handler(ble_evt_t const *p_ble_evt, void *p_context) {
if (p_ble_evt->evt.gap_evt.conn_handle == ble_manager_cts_client.conn_handle) {
ble_manager_cts_client.conn_handle = BLE_CONN_HANDLE_INVALID;
}
+ OnBleDisconnectionCallback();
break;
case BLE_GAP_EVT_PHY_UPDATE_REQUEST: {
@@ -320,11 +338,6 @@ void ble_manager_start_advertising(void *p_erase_bonds) {
}
}
-void (*OnNewTimeCallback)(current_time_char_t*);
-void ble_manager_set_callback(void (*OnNewTime)(current_time_char_t*)) {
- OnNewTimeCallback = OnNewTime;
-}
-
void ble_manager_init_services() {
ret_code_t err_code;
ble_hrs_init_t hrs_init;
diff --git a/src/BLE/BleManager.h b/src/BLE/BleManager.h
index b664bacc..13b12a62 100644
--- a/src/BLE/BleManager.h
+++ b/src/BLE/BleManager.h
@@ -35,8 +35,9 @@ void ble_manager_init();
void ble_manager_start_advertising(void *p_erase_bonds);
// TODO use signals from RTOS to notify new time
-void ble_manager_set_callback(void (*OnNewTime)(current_time_char_t* currentTime));
-
+void ble_manager_set_new_time_callback(void (*OnNewTime)(current_time_char_t* currentTime));
+void ble_manager_set_ble_disconnection_callback(void (*OnBleDisconnection)());
+void ble_manager_set_ble_connection_callback(void (*OnBleConnection)());
#ifdef __cplusplus