M module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp => module-bsp/board/rt1051/bellpx/hal/battery_charger/BatteryCharger.cpp +1 -1
@@ 16,8 16,8 @@ namespace hal::battery
void BatteryCharger::init(xQueueHandle queueBatteryHandle, xQueueHandle)
{
- bsp::battery_charger::init(queueBatteryHandle);
bsp::fuel_gauge::init(queueBatteryHandle);
+ bsp::battery_charger::init(queueBatteryHandle);
Store::Battery::modify().state = Store::Battery::State::Discharging;
Store::Battery::modify().level = static_cast<unsigned int>(bsp::fuel_gauge::getBatteryLevel());
M products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp => products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp +43 -0
@@ 19,6 19,8 @@
#include <common/windows/BellFactoryReset.hpp>
#include <service-db/DBNotificationMessage.hpp>
#include <windows/Dialog.hpp>
+#include <service-appmgr/Controller.hpp>
+#include <system/messages/SystemManagerMessage.hpp>
#include <common/popups/BedtimeNotificationWindow.hpp>
namespace app
@@ 41,6 43,17 @@ namespace app
switchWindow(gui::BellWelcomeWindow::defaultName);
return actionHandled();
});
+
+ addActionReceiver(app::manager::actions::SystemBrownout, [this](auto &&data) {
+ setSystemCloseInProgress();
+ switchWindow(gui::window::name::bell_battery_shutdown, std::move(data));
+ return actionHandled();
+ });
+
+ addActionReceiver(app::manager::actions::DisplayLowBatteryScreen, [this](auto &&data) {
+ handleLowBatteryNotification(std::move(data));
+ return actionHandled();
+ });
}
sys::ReturnCodes ApplicationBellMain::InitHandler()
@@ 70,10 83,12 @@ namespace app
windowsFactory.attach(gui::window::name::bell_main_menu, [](ApplicationCommon *app, const std::string &name) {
return std::make_unique<gui::BellMainMenuWindow>(app);
});
+
windowsFactory.attach(gui::window::name::bell_battery_shutdown,
[](ApplicationCommon *app, const std::string &name) {
return std::make_unique<gui::BellBatteryShutdownWindow>(app);
});
+
windowsFactory.attach(gui::BellFactoryReset::name, [](ApplicationCommon *app, const std::string &name) {
return std::make_unique<gui::BellFactoryReset>(app, std::make_unique<gui::BellPowerOffPresenter>(app));
});
@@ 147,4 162,32 @@ namespace app
}
return ApplicationCommon::handleSwitchWindow(msgl);
}
+
+ bool ApplicationBellMain::isPopupPermitted([[maybe_unused]] gui::popup::ID popupId) const
+ {
+ if (blockAllPopups) {
+ return false;
+ }
+ return true;
+ }
+
+ void ApplicationBellMain::handleLowBatteryNotification(manager::actions::ActionParamsPtr &&data)
+ {
+ auto lowBatteryState = static_cast<manager::actions::LowBatteryNotificationParams *>(data.get());
+ auto currentWindow = getCurrentWindow();
+ if (currentWindow->getName() == gui::window::name::bell_battery_shutdown) {
+ data->ignoreCurrentWindowOnStack = true;
+ }
+
+ if (lowBatteryState->isActive()) {
+ blockAllPopups = true;
+ switchWindow(gui::window::name::bell_battery_shutdown, std::move(data));
+ }
+ else {
+ blockAllPopups = false;
+ if (currentWindow->getName() == gui::window::name::bell_battery_shutdown) {
+ app::manager::Controller::sendAction(this, app::manager::actions::Home, std::move(data));
+ }
+ }
+ }
} // namespace app
M products/BellHybrid/apps/application-bell-main/include/application-bell-main/ApplicationBellMain.hpp => products/BellHybrid/apps/application-bell-main/include/application-bell-main/ApplicationBellMain.hpp +9 -2
@@ 11,7 11,6 @@ namespace gui::window::name
inline constexpr auto bell_main_menu = "BellMainMenu";
inline constexpr auto bell_main_menu_dialog = "BellMainMenuDialog";
inline constexpr auto bell_battery_shutdown = "BellBatteryShutdown";
-
} // namespace gui::window::name
namespace app
@@ 41,17 40,25 @@ namespace app
}
private:
+ bool blockAllPopups = false;
+
+ bool isPopupPermitted([[maybe_unused]] gui::popup::ID popupId) const;
void showPopup(gui::popup::ID id, const gui::PopupRequestParams *params) override;
auto isHomeScreenFocused() -> bool;
void onStart() override;
sys::MessagePointer handleSwitchWindow(sys::Message *msgl) override;
+ void handleLowBatteryNotification(manager::actions::ActionParamsPtr &&data);
};
template <> struct ManifestTraits<ApplicationBellMain>
{
static auto GetManifest() -> manager::ApplicationManifest
{
- return {{manager::actions::Launch, manager::actions::ShowAlarm, manager::actions::DisplayLogoAtExit}};
+ return {{manager::actions::Launch,
+ manager::actions::ShowAlarm,
+ manager::actions::DisplayLogoAtExit,
+ manager::actions::DisplayLowBatteryScreen,
+ manager::actions::SystemBrownout}};
}
};
} // namespace app
M products/BellHybrid/apps/application-bell-main/widgets/BellBattery.cpp => products/BellHybrid/apps/application-bell-main/widgets/BellBattery.cpp +2 -1
@@ 8,7 8,8 @@
namespace
{
constexpr auto entries =
- std::array<battery_utils::BatteryLevelEntry, 6>{{{{5, 10}, {1, 5}, "bell_battery_empty"},
+ std::array<battery_utils::BatteryLevelEntry, 7>{{{{0, 5}, {1, 1}, "bell_battery_empty"},
+ {{5, 10}, {1, 5}, "bell_battery_empty"},
{{11, 30}, {6, 29}, "bell_battery_lvl1"},
{{31, 50}, {30, 53}, "bell_battery_lvl2"},
{{51, 70}, {54, 77}, "bell_battery_lvl3"},
M products/BellHybrid/apps/application-bell-main/windows/BellBatteryStatusWindow.cpp => products/BellHybrid/apps/application-bell-main/windows/BellBatteryStatusWindow.cpp +2 -1
@@ 15,7 15,8 @@ namespace
{
constexpr auto imageType = gui::ImageTypeSpecifier::W_G;
constexpr auto batteryEntries =
- std::array<battery_utils::BatteryLevelEntry, 6>{{{{5, 10}, {1, 5}, "bell_status_battery_lvl0"},
+ std::array<battery_utils::BatteryLevelEntry, 7>{{{{0, 5}, {1, 1}, "bell_status_battery_lvl0"},
+ {{5, 10}, {1, 5}, "bell_status_battery_lvl0"},
{{11, 30}, {6, 29}, "bell_status_battery_lvl1"},
{{31, 50}, {30, 53}, "bell_status_battery_lvl2"},
{{51, 70}, {54, 77}, "bell_status_battery_lvl3"},
M products/BellHybrid/services/appmgr/ApplicationManager.cpp => products/BellHybrid/services/appmgr/ApplicationManager.cpp +0 -9
@@ 36,18 36,9 @@ namespace app::manager
return rootApplicationName;
}
- auto ApplicationManager::handleDisplayLowBatteryScreen(ActionEntry &action) -> ActionProcessStatus
- {
- SwitchRequest switchRequest(
- service::name::appmgr, resolveHomeApplication(), gui::window::name::bell_battery_shutdown, nullptr);
- return handleSwitchApplication(&switchRequest) ? ActionProcessStatus::Accepted : ActionProcessStatus::Dropped;
- }
-
ActionProcessStatus ApplicationManager::handleAction(ActionEntry &action)
{
switch (action.actionId) {
- case actions::DisplayLowBatteryScreen:
- return handleDisplayLowBatteryScreen(action);
default:
return ApplicationManagerCommon::handleAction(action);
}
M products/BellHybrid/services/appmgr/include/appmgr/ApplicationManager.hpp => products/BellHybrid/services/appmgr/include/appmgr/ApplicationManager.hpp +0 -2
@@ 24,7 24,5 @@ namespace app::manager
auto startApplication(ApplicationHandle &app) -> bool override;
auto resolveHomeApplication() -> std::string override;
auto registerMessageHandlers() -> void override;
-
- auto handleDisplayLowBatteryScreen(ActionEntry &action) -> ActionProcessStatus;
};
} // namespace app::manager
M products/BellHybrid/sys/SystemManager.cpp => products/BellHybrid/sys/SystemManager.cpp +9 -0
@@ 4,6 4,8 @@
#include <sys/SystemManager.hpp>
#include <sys/messages/AlarmActivationStatusChangeRequest.hpp>
+#include <system/messages/SystemManagerMessage.hpp>
+
#include <appmgr/messages/AlarmMessage.hpp>
#include <appmgr/messages/BatteryShutdown.hpp>
#include <service-appmgr/messages/SwitchRequest.hpp>
@@ 48,4 50,11 @@ namespace sys
bus.sendUnicast(msg, service::name::appmgr);
SystemManagerCommon::batteryShutdownLevelAction();
}
+
+ void SystemManager::batteryCriticalLevelAction(bool charging)
+ {
+ SystemManagerCommon::batteryCriticalLevelAction(charging);
+ auto msg = std::make_shared<CriticalBatteryLevelNotification>(true, charging);
+ bus.sendUnicast(std::move(msg), service::name::appmgr);
+ }
} // namespace sys
M products/BellHybrid/sys/include/sys/SystemManager.hpp => products/BellHybrid/sys/include/sys/SystemManager.hpp +2 -0
@@ 20,5 20,7 @@ namespace sys
auto handleAlarmActivationStatusChangeRequest(AlarmActivationStatusChangeRequest *request) -> MessagePointer;
void batteryShutdownLevelAction() override;
+
+ void batteryCriticalLevelAction(bool charging) override;
};
} // namespace sys