aboutsummaryrefslogtreecommitdiffstats
path: root/src/Components/Ble/NimbleController.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Components/Ble/NimbleController.cpp')
-rw-r--r--src/Components/Ble/NimbleController.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/Components/Ble/NimbleController.cpp b/src/Components/Ble/NimbleController.cpp
index 64ec379d..23bd3e2f 100644
--- a/src/Components/Ble/NimbleController.cpp
+++ b/src/Components/Ble/NimbleController.cpp
@@ -29,6 +29,7 @@ NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask,
bleController{bleController},
dateTimeController{dateTimeController},
notificationManager{notificationManager},
+ dfuService{systemTask, bleController},
currentTimeClient{dateTimeController},
alertNotificationClient{systemTask, notificationManager} {
@@ -73,7 +74,7 @@ void NimbleController::Init() {
ble_svc_gatt_init();
deviceInformationService.Init();
- currentTimeClient.Init();
+ dfuService.Init();
int res;
res = ble_hs_util_ensure_addr(0);
ASSERT(res == 0);
@@ -110,8 +111,9 @@ void NimbleController::StartAdvertising() {
// fields.uuids128 = BLE_UUID128(BLE_UUID128_DECLARE(
// 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
// 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff));
- fields.num_uuids128 = 0;
- fields.uuids128_is_complete = 0;;
+ fields.uuids128 = &dfuServiceUuid;
+ fields.num_uuids128 = 1;
+ fields.uuids128_is_complete = 1;
fields.tx_pwr_lvl = BLE_HS_ADV_TX_PWR_LVL_AUTO;
rsp_fields.name = (uint8_t *)"Pinetime-JF";
@@ -159,8 +161,9 @@ int NimbleController::OnGAPEvent(ble_gap_event *event) {
bleController.Disconnect();
} else {
bleController.Connect();
+ systemTask.PushMessage(Pinetime::System::SystemTask::Messages::BleConnected);
connectionHandle = event->connect.conn_handle;
- ble_gattc_disc_all_svcs(connectionHandle, OnAllSvrDisco, this);
+ // Service discovery is deffered via systemtask
}
}
break;
@@ -169,6 +172,7 @@ int NimbleController::OnGAPEvent(ble_gap_event *event) {
NRF_LOG_INFO("disconnect; reason=%d", event->disconnect.reason);
/* Connection terminated; resume advertising. */
+ connectionHandle = BLE_HS_CONN_HANDLE_NONE;
bleController.Disconnect();
StartAdvertising();
break;
@@ -234,7 +238,7 @@ int NimbleController::OnGAPEvent(ble_gap_event *event) {
/* Attribute data is contained in event->notify_rx.attr_data. */
default:
- NRF_LOG_INFO("Advertising event : %d", event->type);
+// NRF_LOG_INFO("Advertising event : %d", event->type);
break;
}
return 0;
@@ -251,7 +255,6 @@ int NimbleController::OnDiscoveryEvent(uint16_t i, const ble_gatt_error *error,
ble_gattc_disc_all_chrs(connectionHandle, alertNotificationClient.StartHandle(), alertNotificationClient.EndHandle(),
AlertNotificationCharacteristicDiscoveredCallback, this);
}
- return 0;
}
alertNotificationClient.OnDiscoveryEvent(i, error, service);
@@ -298,6 +301,10 @@ int NimbleController::OnANSDescriptorDiscoveryEventCallback(uint16_t connectionH
return alertNotificationClient.OnDescriptorDiscoveryEventCallback(connectionHandle, error, characteristicValueHandle, descriptor);
}
+void NimbleController::StartDiscovery() {
+ ble_gattc_disc_all_svcs(connectionHandle, OnAllSvrDisco, this);
+}
+