// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include #include "LinuxEinkDisplay.hpp" #include "ED028TC1.h" namespace hal::eink { EinkStatus translateStatus(const EinkStatus_e status_e) { switch (status_e) { case EinkOK: return EinkStatus::EinkOK; case EinkError: return EinkStatus::EinkError; case EinkSPIErr: return EinkStatus::EinkSPIErr; case EinkSPINotInitializedErr: return EinkStatus::EinkSPINotInitializedErr; case EinkDMAErr: return EinkStatus::EinkDMAErr; case EinkInitErr: return EinkStatus::EinkInitErr; case EinkTimeout: return EinkStatus::EinkTimeout; case EinkNoMem: return EinkStatus::EinkNoMem; case EinkWaveformsFileOpenFail: return EinkStatus::EinkWaveformsFileOpenFail; default: return EinkStatus::EinkUnknown; } } LinuxEinkDisplay::LinuxEinkDisplay(FrameSize size) : size{size} {} void LinuxEinkDisplay::setMode(const EinkDisplayColorMode mode) noexcept { displayColorMode = mode; } EinkDisplayColorMode LinuxEinkDisplay::getMode() const noexcept { return displayColorMode; } EinkStatus LinuxEinkDisplay::showImageUpdate(const std::vector &updateFrames, const std::uint8_t *frameBuffer) { for (const EinkFrame &frame : updateFrames) { 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) { return status; } } return EinkStatus::EinkOK; } EinkStatus LinuxEinkDisplay::showImageRefresh(const EinkFrame &refreshFrame, const EinkRefreshMode refreshMode) { return EinkStatus::EinkOK; } EinkStatus LinuxEinkDisplay::showImage(const std::vector &updateFrames, const EinkFrame &refreshFrame, const std::uint8_t *frameBuffer, const EinkRefreshMode refreshMode) { return showImageUpdate(updateFrames, frameBuffer); } void LinuxEinkDisplay::prepareEarlyRequest([[maybe_unused]] const EinkRefreshMode refreshMode, [[maybe_unused]] const WaveformTemperature behaviour) {} EinkStatus LinuxEinkDisplay::dither() { return EinkStatus::EinkOK; } EinkStatus LinuxEinkDisplay::powerOn() { EinkPowerOn(); return EinkStatus::EinkOK; } EinkStatus LinuxEinkDisplay::powerOff() { EinkPowerOff(); return EinkStatus::EinkOK; } EinkStatus LinuxEinkDisplay::shutdown() { return EinkStatus::EinkOK; } EinkStatus LinuxEinkDisplay::wipeOut() { return translateStatus(EinkFillScreenWithColor(EinkDisplayColorFilling_e::EinkDisplayColorWhite)); } EinkStatus LinuxEinkDisplay::resetAndInit() { EinkResetAndInitialize(); return EinkStatus::EinkOK; } EinkStatus LinuxEinkDisplay::reinitAndPowerOn() { resetAndInit(); return EinkStatus::EinkOK; } [[nodiscard]] auto LinuxEinkDisplay::getDevice() const noexcept -> std::shared_ptr { return {}; } std::unique_ptr AbstractEinkDisplay::Factory::create(FrameSize size) { return std::make_unique(size); } } // namespace hal::eink