M module-bsp/board/linux/eink/LinuxEinkDisplay.cpp => module-bsp/board/linux/eink/LinuxEinkDisplay.cpp +8 -7
@@ 1,11 1,6 @@
-// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
-#include <board.h>
-
-#include <log/log.hpp>
-
-#include <cstring>
#include <memory>
#include "LinuxEinkDisplay.hpp"
@@ 47,6 42,11 @@ namespace hal::eink
displayColorMode = mode;
}
+ EinkDisplayColorMode LinuxEinkDisplay::getMode() const noexcept
+ {
+ return displayColorMode;
+ }
+
EinkStatus LinuxEinkDisplay::showImageUpdate(const std::vector<EinkFrame> &updateFrames,
const std::uint8_t *frameBuffer)
{
@@ 54,8 54,9 @@ namespace hal::eink
const std::uint8_t *buffer = frameBuffer + frame.pos_y * frame.size.width;
const auto status = translateStatus(
EinkUpdateFrame({frame.pos_x, frame.pos_y, frame.size.width, frame.size.height}, buffer));
- if (status != EinkStatus::EinkOK)
+ if (status != EinkStatus::EinkOK) {
return status;
+ }
}
return EinkStatus::EinkOK;
}
M module-bsp/board/linux/eink/LinuxEinkDisplay.hpp => module-bsp/board/linux/eink/LinuxEinkDisplay.hpp +3 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
@@ 15,6 15,8 @@ namespace hal::eink
private:
void setMode(const EinkDisplayColorMode mode) noexcept override;
+ EinkDisplayColorMode getMode() const noexcept override;
+
EinkStatus showImageUpdate(const std::vector<EinkFrame> &updateFrames,
const std::uint8_t *frameBuffer) override;
EinkStatus showImageRefresh(const EinkFrame &refreshFrame, const EinkRefreshMode refreshMode) override;
M module-bsp/board/rt1051/bsp/eink/EinkDisplay.cpp => module-bsp/board/rt1051/bsp/eink/EinkDisplay.cpp +6 -4
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "EinkDisplay.hpp"
@@ 283,14 283,11 @@ namespace hal::eink
switch (currentWaveform.mode) {
case EinkWaveformA2:
- [[fallthrough]];
case EinkWaveformDU2:
temperatureFine = abs(newTemperature - currentWaveform.temperature) <= 3;
break;
case EinkWaveformINIT:
- [[fallthrough]];
case EinkWaveformGLD16:
- [[fallthrough]];
case EinkWaveformGC16:
temperatureFine = abs(newTemperature - currentWaveform.temperature) <= 2;
break;
@@ 365,6 362,11 @@ namespace hal::eink
displayMode = mode;
}
+ EinkDisplayColorMode EinkDisplay::getMode() const noexcept
+ {
+ return displayMode;
+ }
+
std::int32_t EinkDisplay::getLastTemperature() const noexcept
{
return currentWaveform.temperature;
M module-bsp/board/rt1051/bsp/eink/EinkDisplay.hpp => module-bsp/board/rt1051/bsp/eink/EinkDisplay.hpp +3 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
@@ 26,6 26,8 @@ namespace hal::eink
~EinkDisplay() noexcept;
void setMode(EinkDisplayColorMode mode) noexcept override;
+ EinkDisplayColorMode getMode() const noexcept override;
+
EinkStatus showImageUpdate(const std::vector<EinkFrame> &updateFrames,
const std::uint8_t *frameBuffer) override;
EinkStatus showImageRefresh(const EinkFrame &refreshFrame, const EinkRefreshMode refreshMode) override;
M module-bsp/hal/include/hal/eink/AbstractEinkDisplay.hpp => module-bsp/hal/include/hal/eink/AbstractEinkDisplay.hpp +2 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
@@ 69,6 69,7 @@ namespace hal::eink
virtual ~AbstractEinkDisplay() = default;
virtual void setMode(const EinkDisplayColorMode mode) noexcept = 0;
+ virtual EinkDisplayColorMode getMode() const noexcept = 0;
virtual EinkStatus showImageUpdate(const std::vector<EinkFrame> &updateFrames,
const std::uint8_t *frameBuffer) = 0;
virtual EinkStatus showImageRefresh(const EinkFrame &refreshFrame, const EinkRefreshMode refreshMode) = 0;
M module-services/service-eink/ServiceEink.cpp => module-services/service-eink/ServiceEink.cpp +19 -6
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include <board.h>
@@ 6,7 6,6 @@
#include "internal/StaticData.hpp"
#include "messages/EinkModeMessage.hpp"
#include "messages/PrepareDisplayEarlyRequest.hpp"
-#include <time/ScopedTime.hpp>
#include <Timers/TimerFactory.hpp>
#include <log/log.hpp>
@@ 22,8 21,6 @@
#include <gsl/util>
#include "Utils.hpp"
-#include <service-gui/Common.hpp>
-
namespace service::eink
{
namespace
@@ 119,16 116,32 @@ namespace service::eink
sys::ReturnCodes ServiceEink::DeinitHandler()
{
- // Eink must be turn on before wiping out the display
+ // Eink must be turned on before wiping out the display
display->powerOn();
- if (exitAction == ExitAction::WipeOut) {
+
+ if ((exitAction == ExitAction::WipeOut) ||
+ ((display->getMode() == hal::eink::EinkDisplayColorMode::EinkDisplayColorModeInverted) &&
+ (systemCloseReason != sys::CloseReason::FactoryReset))) {
+ LOG_INFO("Performing low-level display wipeout");
display->wipeOut();
}
+
display->shutdown();
settings->deinit();
return sys::ReturnCodes::Success;
}
+ void ServiceEink::ProcessCloseReason(sys::CloseReason closeReason)
+ {
+ systemCloseReason = closeReason;
+ sendCloseReadyMessage(this);
+ }
+
+ void ServiceEink::ProcessCloseReasonHandler(sys::CloseReason closeReason)
+ {
+ ProcessCloseReason(closeReason);
+ }
+
sys::ReturnCodes ServiceEink::SwitchPowerModeHandler(const sys::ServicePowerMode mode)
{
LOG_INFO("PowerModeHandler: %s", c_str(mode));
M module-services/service-eink/ServiceEink.hpp => module-services/service-eink/ServiceEink.hpp +5 -1
@@ 1,4 1,4 @@
-// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
+// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once
@@ 40,6 40,8 @@ namespace service::eink
sys::MessagePointer DataReceivedHandler(sys::DataMessage *msgl, sys::ResponseMessage *response) override;
sys::ReturnCodes InitHandler() override;
sys::ReturnCodes DeinitHandler() override;
+ void ProcessCloseReason(sys::CloseReason closeReason) override;
+ void ProcessCloseReasonHandler(sys::CloseReason closeReason) override;
sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode) override;
private:
@@ 85,6 87,8 @@ namespace service::eink
hal::eink::EinkFrame refreshFramesSum;
hal::eink::EinkRefreshMode refreshModeSum = hal::eink::EinkRefreshMode::REFRESH_NONE;
bool isRefreshFramesSumValid = false;
+
+ sys::CloseReason systemCloseReason = sys::CloseReason::RegularPowerDown;
};
} // namespace service::eink