From be674ccdac0b00f1bdca7e5b0dcc7fee218d3f2e Mon Sep 17 00:00:00 2001 From: Yann Locatelli Date: Tue, 30 Jan 2024 17:32:00 +0100 Subject: [PATCH 1/3] :sparkles: (CorePwm): Add period --- drivers/CorePwm/include/CorePwm.h | 2 ++ drivers/CorePwm/source/CorePwm.cpp | 5 +++++ drivers/CorePwm/tests/CorePwm_test.cpp | 10 ++++++++++ include/interface/drivers/PwmOut.h | 2 ++ tests/unit/mocks/mocks/leka/PwmOut.h | 1 + 5 files changed, 20 insertions(+) diff --git a/drivers/CorePwm/include/CorePwm.h b/drivers/CorePwm/include/CorePwm.h index 4ee702af64..a0b2f97730 100644 --- a/drivers/CorePwm/include/CorePwm.h +++ b/drivers/CorePwm/include/CorePwm.h @@ -18,6 +18,8 @@ class CorePwm : public interface::PwmOut auto read() -> float final; void write(float value) final; + void period(float value) final; + void suspend() final; void resume() final; diff --git a/drivers/CorePwm/source/CorePwm.cpp b/drivers/CorePwm/source/CorePwm.cpp index e8c8bc4487..be62035d69 100644 --- a/drivers/CorePwm/source/CorePwm.cpp +++ b/drivers/CorePwm/source/CorePwm.cpp @@ -16,6 +16,11 @@ void CorePwm::write(float value) _pwm.write(value); } +void CorePwm::period(float value) +{ + _pwm.period(value); +} + void CorePwm::suspend() { if (_is_suspended) { diff --git a/drivers/CorePwm/tests/CorePwm_test.cpp b/drivers/CorePwm/tests/CorePwm_test.cpp index 68d185d9fb..15c6b1c6bb 100644 --- a/drivers/CorePwm/tests/CorePwm_test.cpp +++ b/drivers/CorePwm/tests/CorePwm_test.cpp @@ -43,6 +43,16 @@ TEST(CorePwmTest, read) ASSERT_EQ(val, 0.5f); } +TEST(CorePwmTest, period) +{ + auto corepwm = CorePwm {NC}; + auto value = 1.F / 100.F; + + corepwm.period(value); + + ASSERT_EQ(spy_PwmOut_getPeriod(), value); +} + TEST(CorePwmTest, suspend) { auto corepwm = CorePwm {NC}; diff --git a/include/interface/drivers/PwmOut.h b/include/interface/drivers/PwmOut.h index c008659ead..7e471a68bf 100644 --- a/include/interface/drivers/PwmOut.h +++ b/include/interface/drivers/PwmOut.h @@ -11,6 +11,8 @@ class PwmOut public: virtual ~PwmOut() = default; + virtual void period(float value) = 0; + virtual auto read() -> float = 0; virtual void write(float value) = 0; diff --git a/tests/unit/mocks/mocks/leka/PwmOut.h b/tests/unit/mocks/mocks/leka/PwmOut.h index 89480d274b..418a1b94c0 100644 --- a/tests/unit/mocks/mocks/leka/PwmOut.h +++ b/tests/unit/mocks/mocks/leka/PwmOut.h @@ -14,6 +14,7 @@ class PwmOut : public interface::PwmOut public: MOCK_METHOD(float, read, (), (override)); MOCK_METHOD(void, write, (float), (override)); + MOCK_METHOD(void, period, (float), (override)); MOCK_METHOD(void, suspend, (), (override)); MOCK_METHOD(void, resume, (), (override)); }; From 9222a8a951590795417d715a9d546e033b17b1a4 Mon Sep 17 00:00:00 2001 From: Yann Locatelli Date: Tue, 30 Jan 2024 17:26:19 +0100 Subject: [PATCH 2/3] :recycle: (CoreLCDDriver): Use PwmOut from Leka --- app/os/main.cpp | 3 ++- .../include/CoreLCDDriverOTM8009A.hpp | 8 +++--- .../source/CoreLCDDriverOTM8009A.cpp | 1 + .../tests/CoreLCDDriverOTM8009A_test.cpp | 27 +++++++++---------- spikes/lk_activity_kit/main.cpp | 3 ++- spikes/lk_behavior_kit/main.cpp | 3 ++- spikes/lk_cg_animations/CMakeLists.txt | 1 + spikes/lk_cg_animations/main.cpp | 5 +++- spikes/lk_command_kit/main.cpp | 3 ++- spikes/lk_fs/main.cpp | 3 ++- spikes/lk_lcd/CMakeLists.txt | 1 + spikes/lk_lcd/main.cpp | 4 ++- spikes/lk_reinforcer/main.cpp | 3 ++- 13 files changed, 39 insertions(+), 26 deletions(-) diff --git a/app/os/main.cpp b/app/os/main.cpp index 6cf597ac1b..13f6636019 100644 --- a/app/os/main.cpp +++ b/app/os/main.cpp @@ -232,6 +232,7 @@ namespace motors { namespace display::internal { auto event_loop = EventLoopKit {}; + auto backlight = CorePwm {SCREEN_BACKLIGHT_PWM}; auto corell = CoreLL {}; auto pixel = CGPixel {corell}; @@ -242,7 +243,7 @@ namespace display::internal { auto coreltdc = CoreLTDC {hal}; auto coregraphics = CoreGraphics {coredma2d}; auto corefont = CoreFont {pixel}; - auto coreotm = CoreLCDDriverOTM8009A {coredsi, PinName::SCREEN_BACKLIGHT_PWM}; + auto coreotm = CoreLCDDriverOTM8009A {coredsi, backlight}; auto corelcd = CoreLCD {coreotm}; auto _corejpegmode = CoreJPEGModeDMA {hal}; auto corejpeg = CoreJPEG {hal, _corejpegmode}; diff --git a/drivers/CoreVideo/include/CoreLCDDriverOTM8009A.hpp b/drivers/CoreVideo/include/CoreLCDDriverOTM8009A.hpp index e16b30a447..d21eec5247 100644 --- a/drivers/CoreVideo/include/CoreLCDDriverOTM8009A.hpp +++ b/drivers/CoreVideo/include/CoreLCDDriverOTM8009A.hpp @@ -6,10 +6,9 @@ #include -#include "drivers/PwmOut.h" - #include "interface/DSI.hpp" #include "interface/LCDDriver.hpp" +#include "interface/drivers/PwmOut.h" namespace leka { @@ -19,7 +18,8 @@ namespace leka { class CoreLCDDriverOTM8009A : public interface::LCDDriver { public: - CoreLCDDriverOTM8009A(interface::DSIBase &dsi, PinName backlight) : _dsi {dsi}, _backlight {backlight} {}; + CoreLCDDriverOTM8009A(interface::DSIBase &dsi, interface::PwmOut &backlight) + : _dsi {dsi}, _backlight {backlight} {}; void initialize() final; void setLandscapeOrientation() final; @@ -31,7 +31,7 @@ class CoreLCDDriverOTM8009A : public interface::LCDDriver private: interface::DSIBase &_dsi; - mbed::PwmOut _backlight; + interface::PwmOut &_backlight; float _previous_brightness_value = {1.F}; }; diff --git a/drivers/CoreVideo/source/CoreLCDDriverOTM8009A.cpp b/drivers/CoreVideo/source/CoreLCDDriverOTM8009A.cpp index afcd4c4135..e64bea2655 100644 --- a/drivers/CoreVideo/source/CoreLCDDriverOTM8009A.cpp +++ b/drivers/CoreVideo/source/CoreLCDDriverOTM8009A.cpp @@ -3,6 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 #include +#include #include "rtos/ThisThread.h" diff --git a/drivers/CoreVideo/tests/CoreLCDDriverOTM8009A_test.cpp b/drivers/CoreVideo/tests/CoreLCDDriverOTM8009A_test.cpp index b89e4e0484..c009154c34 100644 --- a/drivers/CoreVideo/tests/CoreLCDDriverOTM8009A_test.cpp +++ b/drivers/CoreVideo/tests/CoreLCDDriverOTM8009A_test.cpp @@ -8,23 +8,24 @@ #include "gtest/gtest.h" #include "mocks/leka/CoreDSI.h" #include "mocks/leka/CoreSTM32Hal.h" -#include "stubs/mbed/PwmOut.h" +#include "mocks/leka/PwmOut.h" using namespace leka; using ::testing::_; -using ::testing::Args; using ::testing::ElementsAre; using ::testing::InSequence; class CoreOTM8009ATest : public ::testing::Test { protected: - CoreOTM8009ATest() : otm(dsimock, PinName::SCREEN_BACKLIGHT_PWM) {} + CoreOTM8009ATest() : otm(dsimock, backlightmock) {} // void SetUp() override {} // void TearDown() override {} + mock::PwmOut backlightmock; + mock::CoreDSI dsimock; CoreLCDDriverOTM8009A otm; }; @@ -36,11 +37,10 @@ TEST_F(CoreOTM8009ATest, instantiation) TEST_F(CoreOTM8009ATest, initialize) { + EXPECT_CALL(backlightmock, period(0.01F)); EXPECT_CALL(dsimock, write(_)).Times(101); otm.initialize(); - - EXPECT_EQ(spy_PwmOut_getPeriod(), 0.01f); } TEST_F(CoreOTM8009ATest, setLandscapeOrientation) @@ -72,6 +72,7 @@ TEST_F(CoreOTM8009ATest, turnOn) { auto expected_instruction_array = ElementsAre(lcd::otm8009a::display::turn_on::command, 0x00); + EXPECT_CALL(backlightmock, write(1)); EXPECT_CALL(dsimock, write(expected_instruction_array)).Times(1); otm.turnOn(); @@ -81,6 +82,7 @@ TEST_F(CoreOTM8009ATest, turnOff) { auto expected_instruction_array = ElementsAre(lcd::otm8009a::display::turn_off::command, 0x00); + EXPECT_CALL(backlightmock, write(0)); EXPECT_CALL(dsimock, write(expected_instruction_array)).Times(1); otm.turnOff(); @@ -88,27 +90,24 @@ TEST_F(CoreOTM8009ATest, turnOff) TEST_F(CoreOTM8009ATest, setBrightness) { - otm.setBrightness(0.5); + auto value = 0.5F; + EXPECT_CALL(backlightmock, write(value)); - EXPECT_EQ(spy_PwmOut_getValue(), 0.5); + otm.setBrightness(value); } TEST_F(CoreOTM8009ATest, setBrightnessTurnOffThenTurnOn) { auto initial_brightness_value = 0.4F; + EXPECT_CALL(backlightmock, write(initial_brightness_value)); otm.setBrightness(initial_brightness_value); - EXPECT_EQ(spy_PwmOut_getValue(), initial_brightness_value); - + EXPECT_CALL(backlightmock, write(0)); EXPECT_CALL(dsimock, write(_)).Times(1); otm.turnOff(); - EXPECT_EQ(spy_PwmOut_getValue(), 0); - EXPECT_NE(spy_PwmOut_getValue(), initial_brightness_value); - + EXPECT_CALL(backlightmock, write(initial_brightness_value)); EXPECT_CALL(dsimock, write(_)).Times(1); otm.turnOn(); - - EXPECT_EQ(spy_PwmOut_getValue(), initial_brightness_value); } diff --git a/spikes/lk_activity_kit/main.cpp b/spikes/lk_activity_kit/main.cpp index a8742d2cdf..453d817223 100644 --- a/spikes/lk_activity_kit/main.cpp +++ b/spikes/lk_activity_kit/main.cpp @@ -163,6 +163,7 @@ namespace motors { namespace display::internal { auto event_loop = EventLoopKit {}; + auto backlight = CorePwm {SCREEN_BACKLIGHT_PWM}; auto corell = CoreLL {}; auto pixel = CGPixel {corell}; @@ -173,7 +174,7 @@ namespace display::internal { auto coreltdc = CoreLTDC {hal}; auto coregraphics = CoreGraphics {coredma2d}; auto corefont = CoreFont {pixel}; - auto coreotm = CoreLCDDriverOTM8009A {coredsi, PinName::SCREEN_BACKLIGHT_PWM}; + auto coreotm = CoreLCDDriverOTM8009A {coredsi, backlight}; auto corelcd = CoreLCD {coreotm}; auto _corejpegmode = CoreJPEGModeDMA {hal}; auto corejpeg = CoreJPEG {hal, _corejpegmode}; diff --git a/spikes/lk_behavior_kit/main.cpp b/spikes/lk_behavior_kit/main.cpp index fbcb10f2e2..5eb6f7c0c8 100644 --- a/spikes/lk_behavior_kit/main.cpp +++ b/spikes/lk_behavior_kit/main.cpp @@ -147,6 +147,7 @@ namespace display { namespace internal { auto event_loop = EventLoopKit {}; + auto backlight = CorePwm {SCREEN_BACKLIGHT_PWM}; auto corell = CoreLL {}; auto pixel = CGPixel {corell}; @@ -157,7 +158,7 @@ namespace display { auto coreltdc = CoreLTDC {hal}; auto coregraphics = CoreGraphics {coredma2d}; auto corefont = CoreFont {pixel}; - auto coreotm = CoreLCDDriverOTM8009A {coredsi, PinName::SCREEN_BACKLIGHT_PWM}; + auto coreotm = CoreLCDDriverOTM8009A {coredsi, backlight}; auto corelcd = CoreLCD {coreotm}; auto _corejpegmode = CoreJPEGModeDMA {hal}; auto corejpeg = CoreJPEG {hal, _corejpegmode}; diff --git a/spikes/lk_cg_animations/CMakeLists.txt b/spikes/lk_cg_animations/CMakeLists.txt index 09f13d5e9d..2762164807 100644 --- a/spikes/lk_cg_animations/CMakeLists.txt +++ b/spikes/lk_cg_animations/CMakeLists.txt @@ -18,6 +18,7 @@ target_link_libraries(spike_lk_cg_animations CoreVideo CoreLL CoreSTM32Hal + CorePwm FileManagerKit UIAnimationKit ) diff --git a/spikes/lk_cg_animations/main.cpp b/spikes/lk_cg_animations/main.cpp index 578c0dce15..cd75668b34 100644 --- a/spikes/lk_cg_animations/main.cpp +++ b/spikes/lk_cg_animations/main.cpp @@ -20,6 +20,7 @@ #include "CoreLCDDriverOTM8009A.hpp" #include "CoreLL.h" #include "CoreLTDC.hpp" +#include "CorePwm.h" #include "CoreSDRAM.hpp" #include "CoreSTM32Hal.h" #include "CoreVideo.hpp" @@ -38,6 +39,8 @@ HelloWorld hello; SDBlockDevice sd_blockdevice(SD_SPI_MOSI, SD_SPI_MISO, SD_SPI_SCK); FATFileSystem fatfs("fs"); +CorePwm backlight(SCREEN_BACKLIGHT_PWM); + CoreLL corell; CGPixel pixel(corell); CoreSTM32Hal hal; @@ -47,7 +50,7 @@ CoreDSI coredsi(hal); CoreLTDC coreltdc(hal); CoreGraphics coregraphics(coredma2d); CoreFont corefont(pixel); -CoreLCDDriverOTM8009A coreotm(coredsi, PinName::SCREEN_BACKLIGHT_PWM); +CoreLCDDriverOTM8009A coreotm(coredsi, backlight); CoreLCD corelcd(coreotm); CoreJPEGModeDMA _corejpegmode {hal}; CoreJPEG corejpeg {hal, _corejpegmode}; diff --git a/spikes/lk_command_kit/main.cpp b/spikes/lk_command_kit/main.cpp index 0b0061d0bb..030837fa1f 100644 --- a/spikes/lk_command_kit/main.cpp +++ b/spikes/lk_command_kit/main.cpp @@ -122,6 +122,7 @@ namespace display { namespace internal { auto event_loop = EventLoopKit {}; + auto backlight = CorePwm {SCREEN_BACKLIGHT_PWM}; auto corell = CoreLL {}; auto pixel = CGPixel {corell}; @@ -132,7 +133,7 @@ namespace internal { auto coreltdc = CoreLTDC {hal}; auto coregraphics = CoreGraphics {coredma2d}; auto corefont = CoreFont {pixel}; - auto coreotm = CoreLCDDriverOTM8009A {coredsi, PinName::SCREEN_BACKLIGHT_PWM}; + auto coreotm = CoreLCDDriverOTM8009A {coredsi, backlight}; auto corelcd = CoreLCD {coreotm}; auto _corejpegmode = CoreJPEGModeDMA {hal}; auto corejpeg = CoreJPEG {hal, _corejpegmode}; diff --git a/spikes/lk_fs/main.cpp b/spikes/lk_fs/main.cpp index d122856396..5d608c7a0f 100644 --- a/spikes/lk_fs/main.cpp +++ b/spikes/lk_fs/main.cpp @@ -60,6 +60,7 @@ namespace sd { namespace display::internal { auto event_loop = EventLoopKit {}; + auto backlight = CorePwm {SCREEN_BACKLIGHT_PWM}; auto corell = CoreLL {}; auto pixel = CGPixel {corell}; @@ -70,7 +71,7 @@ namespace display::internal { auto coreltdc = CoreLTDC {hal}; auto coregraphics = CoreGraphics {coredma2d}; auto corefont = CoreFont {pixel}; - auto coreotm = CoreLCDDriverOTM8009A {coredsi, PinName::SCREEN_BACKLIGHT_PWM}; + auto coreotm = CoreLCDDriverOTM8009A {coredsi, backlight}; auto corelcd = CoreLCD {coreotm}; auto _corejpegmode = CoreJPEGModeDMA {hal}; auto corejpeg = CoreJPEG {hal, _corejpegmode}; diff --git a/spikes/lk_lcd/CMakeLists.txt b/spikes/lk_lcd/CMakeLists.txt index 05a7c65b86..b5ae9457d0 100644 --- a/spikes/lk_lcd/CMakeLists.txt +++ b/spikes/lk_lcd/CMakeLists.txt @@ -18,6 +18,7 @@ target_link_libraries(spike_lk_lcd CoreVideo CoreLL CoreSTM32Hal + CorePwm EventLoopKit FileManagerKit VideoKit diff --git a/spikes/lk_lcd/main.cpp b/spikes/lk_lcd/main.cpp index 0599d37ce3..51c25ff1e8 100644 --- a/spikes/lk_lcd/main.cpp +++ b/spikes/lk_lcd/main.cpp @@ -20,6 +20,7 @@ #include "CoreLCDDriverOTM8009A.hpp" #include "CoreLL.h" #include "CoreLTDC.hpp" +#include "CorePwm.h" #include "CoreSDRAM.hpp" #include "CoreSTM32Hal.h" #include "CoreVideo.hpp" @@ -40,6 +41,7 @@ FATFileSystem fatfs("fs"); namespace display::internal { auto event_loop = EventLoopKit {}; +auto backlight = CorePwm {SCREEN_BACKLIGHT_PWM}; auto corell = CoreLL {}; auto pixel = CGPixel {corell}; @@ -50,7 +52,7 @@ auto coredsi = CoreDSI {hal}; auto coreltdc = CoreLTDC {hal}; auto coregraphics = CoreGraphics {coredma2d}; auto corefont = CoreFont {pixel}; -auto coreotm = CoreLCDDriverOTM8009A {coredsi, PinName::SCREEN_BACKLIGHT_PWM}; +auto coreotm = CoreLCDDriverOTM8009A {coredsi, backlight}; auto corelcd = CoreLCD {coreotm}; auto _corejpegmode = CoreJPEGModeDMA {hal}; auto corejpeg = CoreJPEG {hal, _corejpegmode}; diff --git a/spikes/lk_reinforcer/main.cpp b/spikes/lk_reinforcer/main.cpp index 4e6c5947df..478f9000fa 100644 --- a/spikes/lk_reinforcer/main.cpp +++ b/spikes/lk_reinforcer/main.cpp @@ -159,6 +159,7 @@ auto motionkit = MotionKit {motor::left, motor::right, imukit, motion::internal: namespace display::internal { auto event_loop = EventLoopKit {}; + auto backlight = CorePwm {SCREEN_BACKLIGHT_PWM}; auto corell = CoreLL {}; auto pixel = CGPixel {corell}; @@ -169,7 +170,7 @@ namespace display::internal { auto coreltdc = CoreLTDC {hal}; auto coregraphics = CoreGraphics {coredma2d}; auto corefont = CoreFont {pixel}; - auto coreotm = CoreLCDDriverOTM8009A {coredsi, PinName::SCREEN_BACKLIGHT_PWM}; + auto coreotm = CoreLCDDriverOTM8009A {coredsi, backlight}; auto corelcd = CoreLCD {coreotm}; auto _corejpegmode = CoreJPEGModeDMA {hal}; auto corejpeg = CoreJPEG {hal, _corejpegmode}; From 736a2559e7def2b30579b34a46a05e4e74ec6665 Mon Sep 17 00:00:00 2001 From: Yann Locatelli Date: Wed, 31 Jan 2024 10:05:00 +0100 Subject: [PATCH 3/3] :fire: (LCD): Clean UTs from unused elements --- drivers/CoreVideo/tests/CoreLCD_test.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/drivers/CoreVideo/tests/CoreLCD_test.cpp b/drivers/CoreVideo/tests/CoreLCD_test.cpp index f0f2f15e2f..b3c8aca222 100644 --- a/drivers/CoreVideo/tests/CoreLCD_test.cpp +++ b/drivers/CoreVideo/tests/CoreLCD_test.cpp @@ -6,14 +6,10 @@ #include "gtest/gtest.h" #include "mocks/leka/CoreLCDDriver.h" -#include "stubs/mbed/PwmOut.h" using namespace leka; -using ::testing::_; + using ::testing::An; -using ::testing::Args; -using ::testing::AtLeast; -using ::testing::ElementsAre; using ::testing::InSequence; class CoreLCDTest : public ::testing::Test