Improvements and fixes (#595)
- Fix BluetoothSettings app not updating when toggling on Bluetooth on - Fix BluetoothSettings app crash when closing while scanning - Fix BluetoothSettings app crash when turning BT off while scanning - WebServer doesn't save config anymore as a side-effect of reading the config - Add missing license headers - Use TactilityKernel's time and delay functions instead of TactilityFreeRtos ones
This commit is contained in:
committed by
GitHub
parent
e6e1dcd0ca
commit
bd108cc3c4
@@ -8,6 +8,9 @@
|
||||
#include <Tactility/bluetooth/Bluetooth.h>
|
||||
#include <tactility/drivers/bluetooth.h>
|
||||
|
||||
#include <atomic>
|
||||
#include <memory>
|
||||
|
||||
namespace tt::app::btmanage {
|
||||
|
||||
class BtManage final : public App {
|
||||
@@ -18,6 +21,15 @@ class BtManage final : public App {
|
||||
View view = View(&bindings, &state);
|
||||
bool isViewEnabled = false;
|
||||
Device* btDevice = nullptr;
|
||||
bool callbackRegistered = false;
|
||||
|
||||
// Bumped by onHide() to invalidate any BT event already dispatched to the main
|
||||
// task for this show/hide session (BtManage is reused across hide/show cycles -
|
||||
// e.g. launching BtPeerSettings pushes it on top and hides this instance without
|
||||
// destroying it). Kept in its own heap allocation, independent of BtManage's
|
||||
// lifetime, so a dispatched callback can check it without touching a possibly
|
||||
// already-destroyed `this`.
|
||||
std::shared_ptr<std::atomic<int>> generation = std::make_shared<std::atomic<int>>(0);
|
||||
|
||||
public:
|
||||
|
||||
@@ -35,6 +47,20 @@ public:
|
||||
State& getState() { return state; }
|
||||
|
||||
void requestViewUpdate();
|
||||
|
||||
std::shared_ptr<std::atomic<int>> getGeneration() const { return generation; }
|
||||
|
||||
// Re-attempts registering the device event callback. Needed because the BLE driver
|
||||
// only allocates its callback list while the device is started/on: a registration
|
||||
// attempted while the radio is off silently no-ops, so this must be called again
|
||||
// right after a successful bluetooth::start(). Idempotent: no-ops if already
|
||||
// registered for this device, so it's safe to call from both onShow() and here.
|
||||
void registerDeviceCallback(Device* dev);
|
||||
|
||||
// Call after bluetooth::stop(): the driver frees its callback list on stop, so the
|
||||
// registration state must be cleared here too, without touching the (now-dangling)
|
||||
// driver-side list.
|
||||
void forgetCallbackRegistration();
|
||||
};
|
||||
|
||||
} // namespace tt::app::btmanage
|
||||
|
||||
Reference in New Issue
Block a user