Ersa Wearable Platform
Embedded smartwatch firmware and application framework
Loading...
Searching...
No Matches
bluetooth_manager.h
Go to the documentation of this file.
1#pragma once
2
6#include "ersa/common/types.h"
7
8namespace ersa {
9namespace services {
10
12enum class CallState : uint8_t {
13 Idle = 0,
15 Active,
16 Ended
17};
18
20struct RecentCall {
22 char name[32];
24 char number[20];
27};
28
31 char title[32];
32 char message[64];
33 char app[20];
34 uint32_t uid;
37};
38
49public:
50 using WakeCallback = void (*)(void* user);
52 static BluetoothManager& instance();
54 static void setInstance(BluetoothManager* inst);
55
58
62 void tick();
67 void setWakeCallback(WakeCallback callback, void* user) { wakeCallback_ = callback; wakeUserData_ = user; }
69 bool canDial() const { return source_.isAvailable() && source_.capabilities().dial; }
71 bool canHangup() const { return source_.isAvailable() && source_.capabilities().hangup; }
75 bool mediaReady() const { return source_.isAvailable() && source_.capabilities().media; }
77 const char* companionSourceId() const { return source_.sourceId(); }
81 bool companionSourceAvailable() const { return source_.isAvailable(); }
83 bool bleConnected() const { return ble_.isConnected(); }
84
86 bool isConnected() const;
88 bool isAdvertising() const { return ble_.isAdvertising(); }
90 uint32_t nextWakeDelayMs(uint32_t nowMs) const { return ble_.nextWakeDelayMs(nowMs); }
92 const char* getDeviceName() const;
94 const char* getDeviceAddress() const;
96 void restartAdvertising();
97
98 // Call state & telephony actions
102 const char* getCallerName() const { return currentCaller_; }
104 const char* getCallerNumber() const { return currentNumber_; }
106 uint32_t getCallDurationSec() const;
107
109 bool acceptCall();
111 bool rejectCall();
113 bool hangupCall();
118 bool dial(const char* number, const char* name = nullptr);
120 bool dialRecent(size_t index = 0);
121
122 // Recent calls history
124 size_t getRecentCallCount() const { return recentCount_; }
126 const RecentCall& getRecentCall(size_t index) const;
128 void addRecentCall(const char* name, const char* number);
129
130 // Media playback state & control
132 bool isPlaying() const { return mediaPlaying_; }
134 const char* getMediaTitle() const { return mediaTitle_; }
136 const char* getMediaArtist() const { return mediaArtist_; }
137
139 bool mediaPlay();
141 bool mediaPause();
143 bool mediaToggle();
145 bool mediaNext();
147 bool mediaPrevious();
148
149 // Testing / Simulation hooks
151 void simulateIncomingCall(const char* name, const char* number);
153 void simulateMedia(const char* title, const char* artist, bool playing);
155 void simulateNotification(const char* title, const char* message, const char* app = "Messages");
156
157 // Notifications history
159 size_t getNotificationCount() const { return notifCount_; }
161 const AppNotification& getNotification(size_t index) const;
166 bool dismissNotification(size_t index);
168 void addNotification(const char* title, const char* message, const char* app, uint32_t uid, bool canDismissRemotely = false);
170 void clearNotifications();
171
172private:
173 static void onSourceCall(hal::CompanionCallAction action, const char* caller, const char* number, void* user);
174 static void onSourceMedia(bool playing, const char* title, const char* artist, void* user);
175 static void onBleConnection(bool connected, void* user);
176 static void onSourceAvailability(bool available, void* user);
177 static void onSourceNotification(const char* title, const char* message, const char* app, uint32_t uid, bool canDismissRemotely, void* user);
178
179 void receive(const events::Event& event);
180 void apply(const events::Event& event);
181#if defined(ARDUINO)
182 void* incomingQueue_{nullptr};
183 void* timeSyncQueue_{nullptr};
184#endif
186 void* wakeUserData_{nullptr};
190
192 char currentCaller_[32]{""};
193 char currentNumber_[20]{""};
194 uint32_t callStartMs_{0};
195
196 static constexpr size_t MAX_RECENTS = 5;
198 size_t recentCount_{0};
199
200 static constexpr size_t MAX_NOTIFS = 10;
202 size_t notifCount_{0};
203 static constexpr size_t MAX_DISMISSED_UIDS = 16;
206
207 bool mediaPlaying_{false};
208 char mediaTitle_[32]{"No Media"};
209 char mediaArtist_[32]{"Bluetooth Idle"};
210 bool initialized_{false};
211};
212
213} // namespace services
214} // namespace ersa
Definition types.h:52
Definition event_bus.h:48
Definition bluetooth.h:20
virtual bool isAdvertising() const
Definition bluetooth.h:40
virtual bool isConnected() const =0
virtual uint32_t nextWakeDelayMs(uint32_t nowMs) const
Definition bluetooth.h:46
Definition companion_source.h:49
virtual const char * sourceId() const =0
virtual CompanionCapabilities capabilities() const =0
virtual bool isAvailable() const =0
Definition bluetooth_manager.h:48
bool dismissNotification(size_t index)
Definition bluetooth_manager.cpp:446
static void onSourceMedia(bool playing, const char *title, const char *artist, void *user)
Definition bluetooth_manager.cpp:418
bool mediaNext()
Request the next media item.
Definition bluetooth_manager.cpp:281
const char * getDeviceName() const
Return the local BLE device name.
Definition bluetooth_manager.cpp:135
const char * getCallerNumber() const
Return the current caller number, if provided by the source.
Definition bluetooth_manager.h:104
const AppNotification & getNotification(size_t index) const
Return a notification entry by index.
Definition bluetooth_manager.cpp:438
bool canHangup() const
Definition bluetooth_manager.h:71
char currentNumber_[20]
Definition bluetooth_manager.h:193
bool mediaPause()
Request media pause.
Definition bluetooth_manager.cpp:273
uint32_t nextWakeDelayMs(uint32_t nowMs) const
Definition bluetooth_manager.h:90
void receive(const events::Event &event)
Definition bluetooth_manager.cpp:297
hal::CompanionCapabilities companionCapabilities() const
Return the active source's current capabilities.
Definition bluetooth_manager.h:79
void(*)(void *user) WakeCallback
Definition bluetooth_manager.h:50
const RecentCall & getRecentCall(size_t index) const
Return a recent-call entry by index.
Definition bluetooth_manager.cpp:202
uint32_t dismissedUids_[MAX_DISMISSED_UIDS]
Definition bluetooth_manager.h:204
AppNotification notifications_[MAX_NOTIFS]
Definition bluetooth_manager.h:201
bool notificationsReady() const
Definition bluetooth_manager.h:73
bool isConnected() const
Definition bluetooth_manager.cpp:131
bool initialized_
Definition bluetooth_manager.h:210
const char * getCallerName() const
Return the current caller name, if provided by the source.
Definition bluetooth_manager.h:102
void addNotification(const char *title, const char *message, const char *app, uint32_t uid, bool canDismissRemotely=false)
Add or update a notification entry.
Definition bluetooth_manager.cpp:463
void clearNotifications()
Clear all retained notifications and dismissed UID state.
Definition bluetooth_manager.cpp:493
char currentCaller_[32]
Definition bluetooth_manager.h:192
events::EventBus & bus_
Definition bluetooth_manager.h:189
void restartAdvertising()
Definition bluetooth_manager.cpp:143
bool dial(const char *number, const char *name=nullptr)
Definition bluetooth_manager.cpp:169
static void onSourceNotification(const char *title, const char *message, const char *app, uint32_t uid, bool canDismissRemotely, void *user)
Definition bluetooth_manager.cpp:497
CallState getCallState() const
Return normalized call state.
Definition bluetooth_manager.h:100
bool mediaPlaying_
Definition bluetooth_manager.h:207
static constexpr size_t MAX_DISMISSED_UIDS
Definition bluetooth_manager.h:203
uint32_t callStartMs_
Definition bluetooth_manager.h:194
void apply(const events::Event &event)
Definition bluetooth_manager.cpp:342
const char * getMediaArtist() const
Return the latest companion artist name.
Definition bluetooth_manager.h:136
hal::IBluetooth & ble_
Definition bluetooth_manager.h:187
char mediaTitle_[32]
Definition bluetooth_manager.h:208
static constexpr size_t MAX_NOTIFS
Definition bluetooth_manager.h:200
static BluetoothManager & instance()
Return the installed process-wide Bluetooth manager.
Definition bluetooth_manager.cpp:51
bool mediaPrevious()
Request the previous media item.
Definition bluetooth_manager.cpp:285
bool isPlaying() const
Return whether the latest companion media state is playing.
Definition bluetooth_manager.h:132
static void onSourceCall(hal::CompanionCallAction action, const char *caller, const char *number, void *user)
Definition bluetooth_manager.cpp:410
CallState callState_
Definition bluetooth_manager.h:191
bool isAdvertising() const
Return BLE advertising state.
Definition bluetooth_manager.h:88
bool mediaPlay()
Request media playback.
Definition bluetooth_manager.cpp:269
bool dialRecent(size_t index=0)
Definition bluetooth_manager.cpp:195
size_t notifCount_
Definition bluetooth_manager.h:202
bool mediaReady() const
Definition bluetooth_manager.h:75
size_t getRecentCallCount() const
Return the number of retained recent-call entries.
Definition bluetooth_manager.h:124
static void setInstance(BluetoothManager *inst)
Install the process-wide Bluetooth manager.
Definition bluetooth_manager.cpp:61
size_t getNotificationCount() const
Return the number of retained notification entries.
Definition bluetooth_manager.h:159
bool rejectCall()
Definition bluetooth_manager.cpp:160
const char * getDeviceAddress() const
Return the local BLE address.
Definition bluetooth_manager.cpp:139
size_t dismissedCount_
Definition bluetooth_manager.h:205
hal::ICompanionSource & source_
Definition bluetooth_manager.h:188
size_t recentCount_
Definition bluetooth_manager.h:198
bool bleConnected() const
Return BLE transport link state.
Definition bluetooth_manager.h:83
WakeCallback wakeCallback_
Definition bluetooth_manager.h:185
void simulateNotification(const char *title, const char *message, const char *app="Messages")
Inject a notification event for host simulation.
Definition bluetooth_manager.cpp:434
bool acceptCall()
Definition bluetooth_manager.cpp:155
bool canDial() const
Definition bluetooth_manager.h:69
const char * companionSourceId() const
Return the active source's stable machine-readable identifier.
Definition bluetooth_manager.h:77
const char * getMediaTitle() const
Return the latest companion track title.
Definition bluetooth_manager.h:134
void simulateIncomingCall(const char *name, const char *number)
Inject an incoming call event for host simulation.
Definition bluetooth_manager.cpp:289
char mediaArtist_[32]
Definition bluetooth_manager.h:209
RecentCall recents_[MAX_RECENTS]
Definition bluetooth_manager.h:197
static void onSourceAvailability(bool available, void *user)
Definition bluetooth_manager.cpp:428
void tick()
Definition bluetooth_manager.cpp:318
bool hangupCall()
Definition bluetooth_manager.cpp:165
uint32_t getCallDurationSec() const
Return elapsed seconds for the current active call.
Definition bluetooth_manager.cpp:149
void simulateMedia(const char *title, const char *artist, bool playing)
Inject media metadata and state for host simulation.
Definition bluetooth_manager.cpp:293
bool mediaToggle()
Request media play/pause toggle.
Definition bluetooth_manager.cpp:277
void * wakeUserData_
Definition bluetooth_manager.h:186
bool companionSourceAvailable() const
Return whether the active source is available.
Definition bluetooth_manager.h:81
void addRecentCall(const char *name, const char *number)
Definition bluetooth_manager.cpp:210
static constexpr size_t MAX_RECENTS
Definition bluetooth_manager.h:196
void setWakeCallback(WakeCallback callback, void *user)
Definition bluetooth_manager.h:67
static void onBleConnection(bool connected, void *user)
Definition bluetooth_manager.cpp:423
Result< void > init()
Initialize the transport, source, and event callbacks.
Definition bluetooth_manager.cpp:68
CompanionCallAction
Definition companion_source.h:13
CallState
Definition bluetooth_manager.h:12
Definition application.h:10
Definition event.h:134
Definition companion_source.h:31
bool hangup
Definition companion_source.h:36
bool notifications
Definition companion_source.h:32
bool dial
Definition companion_source.h:37
bool media
Definition companion_source.h:33
Definition bluetooth_manager.h:30
uint32_t uid
Definition bluetooth_manager.h:34
char message[64]
Definition bluetooth_manager.h:32
char title[32]
Definition bluetooth_manager.h:31
uint32_t timestampEpoch
Definition bluetooth_manager.h:35
char app[20]
Definition bluetooth_manager.h:33
bool canDismissRemotely
Definition bluetooth_manager.h:36
Definition bluetooth_manager.h:20
uint32_t timestampEpoch
Definition bluetooth_manager.h:26
char number[20]
Definition bluetooth_manager.h:24
char name[32]
Definition bluetooth_manager.h:22