diff options
| author | Dāvis Mošenkovs <davikovs@gmail.com> | 2025-09-03 21:50:13 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-03 20:50:13 +0200 |
| commit | e03414ce6d96c3acdc6bb56be59c50fb6a1721fc (patch) | |
| tree | fb36f10fc657c821d1bdb4fd4476a1f41f71d179 /src/components/ble/DfuService.cpp | |
| parent | 9afc23cba9bcf938d8c49d6e15e7662ee8e6385d (diff) | |
Setting to disable DFU and FS access (#1891)
* Expose SystemTask dependency controllers
Expose NotificationManager and Settings for use by the feature in next commit.
This is a memory efficient way for accessing SystemTask dependencies from
controllers that have SystemTask injected as a dependency.
Looks like each direct dependency injection uses 4 bytes RAM.
As InfiniTime is close to running out of RAM (using 16 more bytes causes build
to fail with "ld: region RAM overflowed with stack") it might be helpful to use
this approach more.
* Add setting to disable DFU and FS access
Diffstat (limited to 'src/components/ble/DfuService.cpp')
| -rw-r--r-- | src/components/ble/DfuService.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/components/ble/DfuService.cpp b/src/components/ble/DfuService.cpp index 2427513d..ad9c99e9 100644 --- a/src/components/ble/DfuService.cpp +++ b/src/components/ble/DfuService.cpp @@ -1,6 +1,8 @@ #include "components/ble/DfuService.h" #include <cstring> #include "components/ble/BleController.h" +#include "components/ble/NotificationManager.h" +#include "components/settings/Settings.h" #include "drivers/SpiNorFlash.h" #include "systemtask/SystemTask.h" #include <nrf_log.h> @@ -78,6 +80,18 @@ void DfuService::Init() { } int DfuService::OnServiceData(uint16_t connectionHandle, uint16_t attributeHandle, ble_gatt_access_ctxt* context) { +#ifndef PINETIME_IS_RECOVERY + if (systemTask.GetSettings().GetDfuAndFsMode() == Pinetime::Controllers::Settings::DfuAndFsMode::Disabled) { + Pinetime::Controllers::NotificationManager::Notification notif; + memcpy(notif.message.data(), denyAlert, denyAlertLength); + notif.size = denyAlertLength; + notif.category = Pinetime::Controllers::NotificationManager::Categories::SimpleAlert; + systemTask.GetNotificationManager().Push(std::move(notif)); + systemTask.PushMessage(Pinetime::System::Messages::OnNewNotification); + return BLE_ATT_ERR_INSUFFICIENT_AUTHOR; + } +#endif + if (bleController.IsFirmwareUpdating()) { xTimerStart(timeoutTimer, 0); } |
