summaryrefslogtreecommitdiff
path: root/src/components/ble
diff options
context:
space:
mode:
authorRasmus Schenstrom <element_004@hotmail.com>2020-10-27 19:51:06 +0100
committerpetter <39340152+petterhs@users.noreply.github.com>2021-01-21 23:15:29 +0100
commit10ba20876f37c8e18307dfbc8d06d70bb94d5fae (patch)
tree18d4a9d143162420452be53ee27fa8370ce465cc /src/components/ble
parent7e27bc873315589ae4076780607720aa5278c5a1 (diff)
Add incoming call functionality
Add categories to AlertNotification Add new alert notification screens bases Add Incoming Call Add Modal Add event to AlertNotification Co-authored-by: Robin Karlsson <robin.karlsson@protonmail.com>
Diffstat (limited to 'src/components/ble')
-rw-r--r--src/components/ble/AlertNotificationClient.h2
-rw-r--r--src/components/ble/AlertNotificationService.cpp34
-rw-r--r--src/components/ble/AlertNotificationService.h27
-rw-r--r--src/components/ble/NimbleController.h1
4 files changed, 60 insertions, 4 deletions
diff --git a/src/components/ble/AlertNotificationClient.h b/src/components/ble/AlertNotificationClient.h
index fa10456c..d49205e3 100644
--- a/src/components/ble/AlertNotificationClient.h
+++ b/src/components/ble/AlertNotificationClient.h
@@ -83,4 +83,4 @@ namespace Pinetime {
bool isDescriptorFound = false;
};
}
-} \ No newline at end of file
+}
diff --git a/src/components/ble/AlertNotificationService.cpp b/src/components/ble/AlertNotificationService.cpp
index 3156470c..9b9b4e9e 100644
--- a/src/components/ble/AlertNotificationService.cpp
+++ b/src/components/ble/AlertNotificationService.cpp
@@ -9,6 +9,7 @@ using namespace Pinetime::Controllers;
constexpr ble_uuid16_t AlertNotificationService::ansUuid;
constexpr ble_uuid16_t AlertNotificationService::ansCharUuid;
+constexpr ble_uuid16_t AlertNotificationService::ansEventUuid;
int AlertNotificationCallback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg) {
@@ -34,6 +35,13 @@ AlertNotificationService::AlertNotificationService ( System::SystemTask& systemT
.flags = BLE_GATT_CHR_F_WRITE
},
{
+ .uuid = (ble_uuid_t *) &ansEventUuid,
+ .access_cb = AlertNotificationCallback,
+ .arg = this,
+ .flags = BLE_GATT_CHR_F_NOTIFY,
+ .val_handle = &eventHandle
+ },
+ {
0
}
},
@@ -61,14 +69,36 @@ int AlertNotificationService::OnAlert(uint16_t conn_handle, uint16_t attr_handle
const auto dbgPacketLen = OS_MBUF_PKTLEN(ctxt->om);
size_t bufferSize = std::min(dbgPacketLen + stringTerminatorSize, maxBufferSize);
auto messageSize = std::min(maxMessageSize, (bufferSize-headerSize));
+ uint8_t* category = new uint8_t[1];
NotificationManager::Notification notif;
os_mbuf_copydata(ctxt->om, headerSize, messageSize-1, notif.message.data());
+ os_mbuf_copydata(ctxt->om, 0, 1, category);
notif.message[messageSize-1] = '\0';
notif.category = Pinetime::Controllers::NotificationManager::Categories::SimpleAlert;
- notificationManager.Push(std::move(notif));
+ Pinetime::System::SystemTask::Messages event = Pinetime::System::SystemTask::Messages::OnNewNotification;
+
+ switch(*category) {
+ case (uint8_t) 0x05:
+ notif.category = Pinetime::Controllers::NotificationManager::Categories::IncomingCall;
+ event = Pinetime::System::SystemTask::Messages::OnNewCall;
+ break;
+ }
- systemTask.PushMessage(Pinetime::System::SystemTask::Messages::OnNewNotification);
+ notificationManager.Push(std::move(notif));
+ systemTask.PushMessage(event);
}
return 0;
}
+
+void AlertNotificationService::event(char event) {
+ auto *om = ble_hs_mbuf_from_flat(&event, 1);
+
+ uint16_t connectionHandle = systemTask.nimble().connHandle();
+
+ if (connectionHandle == 0 || connectionHandle == BLE_HS_CONN_HANDLE_NONE) {
+ return;
+ }
+
+ ble_gattc_notify_custom(connectionHandle, eventHandle, om);
+}
diff --git a/src/components/ble/AlertNotificationService.h b/src/components/ble/AlertNotificationService.h
index 120312d2..558cdf54 100644
--- a/src/components/ble/AlertNotificationService.h
+++ b/src/components/ble/AlertNotificationService.h
@@ -24,10 +24,28 @@ namespace Pinetime {
int OnAlert(uint16_t conn_handle, uint16_t attr_handle,
struct ble_gatt_access_ctxt *ctxt);
+ void event(char event);
+
+ static const char EVENT_HANG_UP_CALL = 0x00;
+ static const char EVENT_ANSWER_CALL = 0x01;
+
private:
+ static const char ALERT_UNKNOWN = 0x01;
+ static const char ALERT_SIMPLE_ALERT = 0x02;
+ static const char ALERT_EMAIL = 0x03;
+ static const char ALERT_NEWS = 0x04;
+ static const char ALERT_INCOMING_CALL = 0x05;
+ static const char ALERT_MISSED_CALL = 0x06;
+ static const char ALERT_SMS = 0x07;
+ static const char ALERT_VOICE_MAIL = 0x08;
+ static const char ALERT_SCHEDULE = 0x09;
+ static const char ALERT_HIGH_PRIORITY_ALERT = 0x0a;
+ static const char ALERT_INSTANT_MESSAGE = 0x0b;
+
static constexpr uint16_t ansId {0x1811};
static constexpr uint16_t ansCharId {0x2a46};
+ static constexpr uint16_t ansEventCharId = {0x2a47};
static constexpr ble_uuid16_t ansUuid {
.u { .type = BLE_UUID_TYPE_16 },
@@ -39,11 +57,18 @@ namespace Pinetime {
.value = ansCharId
};
- struct ble_gatt_chr_def characteristicDefinition[2];
+ static constexpr ble_uuid16_t ansEventUuid {
+ .u { .type = BLE_UUID_TYPE_16 },
+ .value = ansEventCharId
+ };
+
+ struct ble_gatt_chr_def characteristicDefinition[3];
struct ble_gatt_svc_def serviceDefinition[2];
Pinetime::System::SystemTask &systemTask;
NotificationManager &notificationManager;
+
+ uint16_t eventHandle;
};
}
}
diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h
index a109800c..7bb135da 100644
--- a/src/components/ble/NimbleController.h
+++ b/src/components/ble/NimbleController.h
@@ -58,6 +58,7 @@ namespace Pinetime {
Pinetime::Controllers::MusicService& music() {return musicService;};
Pinetime::Controllers::NavigationService& navigation() {return navService;};
+ Pinetime::Controllers::AlertNotificationService& alertService() {return anService;};
uint16_t connHandle();