From 450ab070d0fefec1837d94499419a9636d7b047e Mon Sep 17 00:00:00 2001 From: crankyoldgit Date: Sun, 12 Sep 2021 13:18:19 +1000 Subject: [PATCH] Tcl: Add positions for SwingV * Add/name the correct swingv positions. * Update Unit Tests. For #1486 --- src/ir_Tcl.cpp | 26 +++++++++++++++++++++----- src/ir_Tcl.h | 9 +++++++-- test/ir_Tcl_test.cpp | 10 ++++++++++ test/ir_Teknopoint_test.cpp | 4 ++-- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/ir_Tcl.cpp b/src/ir_Tcl.cpp index 9a534d06c..5cb7ba5d2 100644 --- a/src/ir_Tcl.cpp +++ b/src/ir_Tcl.cpp @@ -287,6 +287,11 @@ bool IRTcl112Ac::getSwingHorizontal(void) const { return _.SwingH; } void IRTcl112Ac::setSwingVertical(const uint8_t setting) { switch (setting) { case kTcl112AcSwingVOff: + case kTcl112AcSwingVHighest: + case kTcl112AcSwingVHigh: + case kTcl112AcSwingVMiddle: + case kTcl112AcSwingVLow: + case kTcl112AcSwingVLowest: case kTcl112AcSwingVOn: _.SwingV = setting; } @@ -403,8 +408,13 @@ stdAc::opmode_t IRTcl112Ac::toCommonMode(const uint8_t mode) { /// @return The native equivalent of the enum. uint8_t IRTcl112Ac::convertSwingV(const stdAc::swingv_t position) { switch (position) { - case stdAc::swingv_t::kOff: return kTcl112AcSwingVOff; - default: return kTcl112AcSwingVOn; + case stdAc::swingv_t::kOff: return kTcl112AcSwingVOff; + case stdAc::swingv_t::kHighest: return kTcl112AcSwingVHighest; + case stdAc::swingv_t::kHigh: return kTcl112AcSwingVHigh; + case stdAc::swingv_t::kMiddle: return kTcl112AcSwingVMiddle; + case stdAc::swingv_t::kLow: return kTcl112AcSwingVLow; + case stdAc::swingv_t::kLowest: return kTcl112AcSwingVLowest; + default: return kTcl112AcSwingVOn; } } @@ -483,10 +493,16 @@ String IRTcl112Ac::toString(void) const { result += addBoolToString(_.Turbo, kTurboStr); result += addBoolToString(_.SwingH, kSwingHStr); result += addSwingVToString(_.SwingV, kTcl112AcSwingVOff, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, // Unused + kTcl112AcSwingVHighest, + kTcl112AcSwingVHigh, + 0xFF, // unused + kTcl112AcSwingVMiddle, + 0xFF, // unused + kTcl112AcSwingVLow, + kTcl112AcSwingVLowest, + kTcl112AcSwingVOff, kTcl112AcSwingVOn, // Swing - 0xFF, 0xFF); // Unused + 0xFF, 0xFF); // Both Unused result += addBoolToString(getLight(), kLightStr); result += addLabeledString( _.OnTimerEnabled ? minsToString(getOnTimer()) : kOffStr, diff --git a/src/ir_Tcl.h b/src/ir_Tcl.h index 83944a6b0..b4db92cd9 100644 --- a/src/ir_Tcl.h +++ b/src/ir_Tcl.h @@ -103,8 +103,13 @@ const uint8_t kTcl112AcFanNight = kTcl112AcFanMin; const float kTcl112AcTempMax = 31.0; const float kTcl112AcTempMin = 16.0; -const uint8_t kTcl112AcSwingVOn = 0b111; -const uint8_t kTcl112AcSwingVOff = 0b000; +const uint8_t kTcl112AcSwingVOff = 0b000; +const uint8_t kTcl112AcSwingVHighest = 0b001; +const uint8_t kTcl112AcSwingVHigh = 0b010; +const uint8_t kTcl112AcSwingVMiddle = 0b011; +const uint8_t kTcl112AcSwingVLow = 0b100; +const uint8_t kTcl112AcSwingVLowest = 0b101; +const uint8_t kTcl112AcSwingVOn = 0b111; // MsgType const uint8_t kTcl112AcNormal = 0b01; const uint8_t kTcl112AcSpecial = 0b10; diff --git a/test/ir_Tcl_test.cpp b/test/ir_Tcl_test.cpp index 836ced957..14b41d330 100644 --- a/test/ir_Tcl_test.cpp +++ b/test/ir_Tcl_test.cpp @@ -361,8 +361,18 @@ TEST(TestTcl112AcClass, SwingVertical) { EXPECT_EQ(kTcl112AcSwingVOff, ac.getSwingVertical()); ac.setSwingVertical(kTcl112AcSwingVOn); EXPECT_EQ(kTcl112AcSwingVOn, ac.getSwingVertical()); + ac.setSwingVertical(kTcl112AcSwingVHigh); + EXPECT_EQ(kTcl112AcSwingVHigh, ac.getSwingVertical()); ac.setSwingVertical(kTcl112AcSwingVOff); EXPECT_EQ(kTcl112AcSwingVOff, ac.getSwingVertical()); + ac.setSwingVertical(0xFF); // Unused value so shouldn't change from previous. + EXPECT_EQ(kTcl112AcSwingVOff, ac.getSwingVertical()); + + const uint8_t highest[kTcl112AcStateLength] = { + 0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03, + 0x0F, 0x08, 0x00, 0x00, 0x00, 0x00, 0x53}; + ac.setRaw(highest); + EXPECT_EQ(kTcl112AcSwingVHighest, ac.getSwingVertical()); } TEST(TestTcl112AcClass, Turbo) { diff --git a/test/ir_Teknopoint_test.cpp b/test/ir_Teknopoint_test.cpp index 61b5852cf..6551ad68f 100644 --- a/test/ir_Teknopoint_test.cpp +++ b/test/ir_Teknopoint_test.cpp @@ -46,7 +46,7 @@ TEST(TestDecodeTeknopoint, RealExample) { EXPECT_EQ( "Model: 2 (GZ055BE1), Type: 1, Power: On, Mode: 3 (Cool), Temp: 16C, " "Fan: 0 (Auto), Econo: Off, Health: Off, Turbo: Off, " - "Swing(H): Off, Swing(V): 1 (UNKNOWN), Light: On, " + "Swing(H): Off, Swing(V): 1 (Highest), Light: On, " "On Timer: Off, Off Timer: Off", IRAcUtils::resultAcToString(&irsend.capture)); } @@ -72,7 +72,7 @@ TEST(TestDecodeTeknopoint, SyntheticExample) { EXPECT_EQ( "Model: 2 (GZ055BE1), Type: 1, Power: On, Mode: 3 (Cool), Temp: 16C, " "Fan: 0 (Auto), Econo: Off, Health: Off, Turbo: Off, " - "Swing(H): Off, Swing(V): 1 (UNKNOWN), Light: On, " + "Swing(H): Off, Swing(V): 1 (Highest), Light: On, " "On Timer: Off, Off Timer: Off", IRAcUtils::resultAcToString(&irsend.capture));