M module-services/service-desktop/include/service-desktop/ServiceDesktopDependencies.hpp => module-services/service-desktop/include/service-desktop/ServiceDesktopDependencies.hpp +2 -2
@@ 4,7 4,7 @@
#pragma once
#include "ServiceDesktopName.hpp"
-#include <service-eink/ServiceEinkDependencies.hpp>
+#include <service-gui/ServiceGUIDependencies.hpp>
#include <string>
#include <vector>
@@ 16,7 16,7 @@ namespace sys::dependencies
template <>
inline std::vector<std::string> getDependenciesFor<ServiceDesktop>()
{
- return sys::dependencies::getDependenciesTo<service::eink::ServiceEink>();
+ return sys::dependencies::getDependenciesTo<service::gui::ServiceGUI>();
}
template <>
M module-services/service-gui/ServiceGUI.cpp => module-services/service-gui/ServiceGUI.cpp +10 -4
@@ 100,6 100,7 @@ namespace service::gui
{
if (isInState(ServiceGUIState::Idle)) {
sendCloseReadyMessage(this);
+ setState(ServiceGUIState::ReadyToClose);
return;
}
else {
@@ 227,6 228,7 @@ namespace service::gui
sys::MessagePointer ServiceGUI::handleImageDisplayedNotification(sys::Message *message)
{
+ setState(ServiceGUIState::Idle);
const auto msg = static_cast<eink::ImageDisplayedNotification *>(message);
const auto contextId = msg->getContextId();
contextPool->returnContext(contextId);
@@ 234,14 236,15 @@ namespace service::gui
// Even if the next render is already cached, if any context in the pool is currently being processed, then
// we better wait for it.
+ if (isInState(ServiceGUIState::ReadyToClose)) {
+ LOG_WARN("Post closing notification.");
+ }
if (isNextFrameReady() and not isAnyFrameBeingRenderedOrDisplayed()) {
trySendNextFrame();
}
else if (isInState(ServiceGUIState::Closing)) {
sendCloseReadyMessage(this);
- }
- else {
- setState(ServiceGUIState::Idle);
+ setState(ServiceGUIState::ReadyToClose);
}
return sys::MessageNone{};
}
@@ 267,7 270,10 @@ namespace service::gui
void ServiceGUI::setState(const ServiceGUIState &nextState)
{
- if (isInState(ServiceGUIState::Closing)) {
+ if (isInState(ServiceGUIState::ReadyToClose)) {
+ return;
+ }
+ if (isInState(ServiceGUIState::Closing) && (nextState != ServiceGUIState::ReadyToClose)) {
return;
}
state = nextState;
M module-services/service-gui/service-gui/ServiceGUI.hpp => module-services/service-gui/service-gui/ServiceGUI.hpp +3 -2
@@ 34,10 34,11 @@ namespace service::gui
enum class ServiceGUIState
{
- Displaying,
+ Idle = 0,
Rendering,
+ Displaying,
Closing,
- Idle
+ ReadyToClose
};
public:
M module-services/service-gui/service-gui/ServiceGUIDependencies.hpp => module-services/service-gui/service-gui/ServiceGUIDependencies.hpp +2 -2
@@ 3,7 3,7 @@
#pragma once
-#include <service-desktop/ServiceDesktopDependencies.hpp>
+#include <service-eink/ServiceEinkDependencies.hpp>
#include <service-gui/ServiceGUIName.hpp>
#include <string>
#include <vector>
@@ 17,7 17,7 @@ namespace sys::dependencies
template <>
inline std::vector<std::string> getDependenciesFor<service::gui::ServiceGUI>()
{
- return sys::dependencies::getDependenciesTo<ServiceDesktop>();
+ return sys::dependencies::getDependenciesTo<service::eink::ServiceEink>();
}
template <>
M module-sys/SystemManager/SystemManagerCommon.cpp => module-sys/SystemManager/SystemManagerCommon.cpp +4 -0
@@ 473,6 473,10 @@ namespace sys
serviceCloseTimer.stop();
const auto message = static_cast<ReadyToCloseMessage *>(msg);
+ if (std::find(servicesToClose.begin(), servicesToClose.end(), message->sender) == servicesToClose.end()) {
+ LOG_ERROR("%s is not on the list. Further processing skipped.", message->sender.c_str());
+ return;
+ }
LOG_INFO("ready to close %s", message->sender.c_str());
servicesToClose.erase(std::remove(servicesToClose.begin(), servicesToClose.end(), message->sender),
servicesToClose.end());
M products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp => products/BellHybrid/apps/application-bell-main/ApplicationBellMain.cpp +3 -1
@@ 80,7 80,9 @@ namespace app
});
connect(typeid(sdesktop::usb::USBConfigured), [&](sys::Message *msg) -> sys::MessagePointer {
- homeScreenPresenter->setUSBStatusConnected();
+ if (getCurrentWindow()->getName() == gui::name::window::main_window) {
+ homeScreenPresenter->setUSBStatusConnected();
+ }
return sys::msgHandled();
});
connect(typeid(AlarmDeactivated), [this](sys::Message *request) -> sys::MessagePointer {