diff --git a/.gitignore b/.gitignore index bdd9c4bb1..250a1a2a5 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ configMemory.bin /sim_lastPublish_long.txt /sim_lastPublishes.txt /sim_lastPublish.txt +/lastEnumTemplate.txt /lastHTTPPacket.txt /lastMQTTPublishSentByOBK.txt *.sln diff --git a/src/selftest/selftest_ws2812b.c b/src/selftest/selftest_ws2812b.c index 8eb406efb..db49a22d8 100644 --- a/src/selftest/selftest_ws2812b.c +++ b/src/selftest/selftest_ws2812b.c @@ -237,6 +237,87 @@ void SIM_WaitForDDPPacket() { } } +} +void Test_WS2812B_and_PWM_CW() { + // reset whole device + SIM_ClearOBK(0); + + CFG_SetFlag(OBK_FLAG_LED_USE_OLD_LINEAR_MODE, 1); + + PIN_SetPinRoleForPinIndex(24, IOR_PWM); + PIN_SetPinChannelForPinIndex(24, 3); + + PIN_SetPinRoleForPinIndex(26, IOR_PWM); + PIN_SetPinChannelForPinIndex(26, 4); + + CMD_ExecuteCommand("startDriver SM16703P", 0); + CMD_ExecuteCommand("SM16703P_Init 3", 0); + CMD_ExecuteCommand("led_basecolor_rgb FF0080", 0); + CMD_ExecuteCommand("led_enableAll 1", 0); + + SELFTEST_ASSERT_PIXEL(0, 255, 0, 128); + SELFTEST_ASSERT_PIXEL(1, 255, 0, 128); + SELFTEST_ASSERT_PIXEL(2, 255, 0, 128); + + CMD_ExecuteCommand("led_dimmer 50", 0); + SELFTEST_ASSERT_PIXEL(0, 127, 0, 64); + SELFTEST_ASSERT_PIXEL(1, 127, 0, 64); + SELFTEST_ASSERT_PIXEL(2, 127, 0, 64); + + // set 100% Warm + CMD_ExecuteCommand("led_temperature 500", 0); + CMD_ExecuteCommand("led_dimmer 100", 0); + + SELFTEST_ASSERT_CHANNEL(3, 0); // Cool + SELFTEST_ASSERT_CHANNEL(4, 100); // Warm + SELFTEST_ASSERT_PIXEL(0, 0, 0, 0); + SELFTEST_ASSERT_PIXEL(1, 0, 0, 0); + SELFTEST_ASSERT_PIXEL(2, 0, 0, 0); + + // 50% Warm + CMD_ExecuteCommand("led_dimmer 50", 0); + SELFTEST_ASSERT_CHANNEL(3, 0); // Cool + SELFTEST_ASSERT_CHANNEL(4, 50); // Warm + SELFTEST_ASSERT_PIXEL(0, 0, 0, 0); + SELFTEST_ASSERT_PIXEL(1, 0, 0, 0); + SELFTEST_ASSERT_PIXEL(2, 0, 0, 0); + + // set 100% Cool + CMD_ExecuteCommand("led_temperature 154", 0); + CMD_ExecuteCommand("led_dimmer 100", 0); + SELFTEST_ASSERT_CHANNEL(3, 100); // Cool + SELFTEST_ASSERT_CHANNEL(4, 0); // Warm + SELFTEST_ASSERT_PIXEL(0, 0, 0, 0); + SELFTEST_ASSERT_PIXEL(1, 0, 0, 0); + SELFTEST_ASSERT_PIXEL(2, 0, 0, 0); +} +void Test_WS2812B_and_PWM_White() { + // reset whole device + SIM_ClearOBK(0); + + CFG_SetFlag(OBK_FLAG_LED_USE_OLD_LINEAR_MODE, 1); + + PIN_SetPinRoleForPinIndex(26, IOR_PWM); + PIN_SetPinChannelForPinIndex(26, 4); + + CMD_ExecuteCommand("startDriver SM16703P", 0); + CMD_ExecuteCommand("SM16703P_Init 3", 0); + CMD_ExecuteCommand("led_basecolor_rgb FF0080", 0); + CMD_ExecuteCommand("led_enableAll 1", 0); + + SELFTEST_ASSERT_PIXEL(0, 255, 0, 128); + SELFTEST_ASSERT_PIXEL(1, 255, 0, 128); + SELFTEST_ASSERT_PIXEL(2, 255, 0, 128); + + CMD_ExecuteCommand("led_dimmer 50", 0); + SELFTEST_ASSERT_PIXEL(0, 127, 0, 64); + SELFTEST_ASSERT_PIXEL(1, 127, 0, 64); + SELFTEST_ASSERT_PIXEL(2, 127, 0, 64); + + // set 100% Warm + CMD_ExecuteCommand("led_temperature 500", 0); + CMD_ExecuteCommand("led_dimmer 100", 0); + } void Test_WS2812B() { // reset whole device @@ -510,6 +591,8 @@ void Test_LEDstrips() { Test_DMX_RGBW(); Test_DMX_RGBCW(); Test_WS2812B(); + Test_WS2812B_and_PWM_CW(); + Test_WS2812B_and_PWM_White(); } #endif diff --git a/src/win_main.c b/src/win_main.c index 5516e36bb..d3ada1b29 100644 --- a/src/win_main.c +++ b/src/win_main.c @@ -177,6 +177,7 @@ void SIM_ClearOBK(const char *flashPath) { void Win_DoUnitTests() { //SELFTEST_ASSERT_EXPRESSION("sqrt(4)", 2) + Test_LEDstrips(); Test_Commands_Channels(); Test_Driver_TCL_AC(); @@ -196,7 +197,6 @@ void Win_DoUnitTests() { Test_Enums(); Test_Backlog(); Test_DoorSensor(); - Test_LEDstrips(); Test_Command_If_Else(); Test_MQTT(); Test_ChargeLimitDriver();