Update IRRemote ESP8266 to 2.6.2 and add ESP32 support
This commit is contained in:
1 parent
2ee18320be
commit
24bcdbc97c
195 files changed
+22963
-4737
No files matched your search
@@ -0,0 +1,998 @@
|
||||
// Copyright 2019 David Conran
|
||||
|
||||
#include <string>
|
||||
#include "ir_Argo.h"
|
||||
#include "ir_Daikin.h"
|
||||
#include "ir_Fujitsu.h"
|
||||
#include "ir_Goodweather.h"
|
||||
#include "ir_Gree.h"
|
||||
#include "ir_Haier.h"
|
||||
#include "ir_Hitachi.h"
|
||||
#include "ir_Kelvinator.h"
|
||||
#include "ir_Midea.h"
|
||||
#include "ir_Mitsubishi.h"
|
||||
#include "ir_MitsubishiHeavy.h"
|
||||
#include "ir_Panasonic.h"
|
||||
#include "ir_Samsung.h"
|
||||
#include "ir_Sharp.h"
|
||||
#include "ir_Tcl.h"
|
||||
#include "ir_Teco.h"
|
||||
#include "ir_Toshiba.h"
|
||||
#include "ir_Trotec.h"
|
||||
#include "ir_Vestel.h"
|
||||
#include "ir_Whirlpool.h"
|
||||
#include "IRac.h"
|
||||
#include "IRrecv.h"
|
||||
#include "IRrecv_test.h"
|
||||
#include "IRremoteESP8266.h"
|
||||
#include "IRsend.h"
|
||||
#include "IRsend_test.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
// Tests for IRac class.
|
||||
|
||||
TEST(TestIRac, Argo) {
|
||||
IRArgoAC ac(0);
|
||||
IRac irac(0);
|
||||
|
||||
ac.begin();
|
||||
irac.argo(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kHeat, // Mode
|
||||
21, // Celsius
|
||||
stdAc::fanspeed_t::kHigh, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
false, // Turbo
|
||||
-1); // Sleep
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
EXPECT_EQ(kArgoHeat, ac.getMode());
|
||||
EXPECT_EQ(21, ac.getTemp());
|
||||
EXPECT_EQ(kArgoFlapAuto, ac.getFlap());
|
||||
EXPECT_FALSE(ac.getMax()); // Turbo
|
||||
EXPECT_FALSE(ac.getNight()); // Sleep
|
||||
}
|
||||
|
||||
TEST(TestIRac, Coolix) {
|
||||
IRCoolixAC ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 3 (HEAT), Fan: 1 (MAX), Temp: 21C, Zone Follow: Off, "
|
||||
"Sensor Temp: Ignored";
|
||||
|
||||
ac.begin();
|
||||
irac.coolix(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kHeat, // Mode
|
||||
21, // Celsius
|
||||
stdAc::fanspeed_t::kHigh, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
stdAc::swingh_t::kOff, // Horizontal swing
|
||||
false, // Turbo
|
||||
false, // Light
|
||||
false, // Clean
|
||||
-1); // Sleep
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(COOLIX, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kCoolixBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.value);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
// Confirm we are sending with a repeat of 1. i.e. two messages.
|
||||
EXPECT_EQ(
|
||||
"f38000d50" // 38kHz Frequency and 50% duty-cycle.
|
||||
// Start of message #1 (i.e. Repeat '0')
|
||||
// Header
|
||||
"m4480s4480"
|
||||
// Data
|
||||
"m560s1680m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560"
|
||||
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680"
|
||||
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
|
||||
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s1680m560s1680m560s560m560s1680m560s1680m560s560m560s560"
|
||||
"m560s1680m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
|
||||
// Footer
|
||||
"m560s5040"
|
||||
// End of message #1 (i.e. Repeat '0')
|
||||
// Start of message #2 (i.e. Repeat '1')
|
||||
// Header
|
||||
"m4480s4480"
|
||||
// Data
|
||||
"m560s1680m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560"
|
||||
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680"
|
||||
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
|
||||
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s1680m560s1680m560s560m560s1680m560s1680m560s560m560s560"
|
||||
"m560s1680m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
|
||||
// Footer
|
||||
"m560s5040",
|
||||
// End of message #2 (i.e. Repeat '1')
|
||||
// Note: the two messages (#1 & #2) are identical.
|
||||
ac._irsend.outputStr());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Daikin) {
|
||||
IRDaikinESP ac(0);
|
||||
IRac irac(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 3 (COOL), Temp: 19C, Fan: 2, Powerful: Off, "
|
||||
"Quiet: Off, Sensor: Off, Mold: On, Comfort: Off, "
|
||||
"Swing (Horizontal): Off, Swing (Vertical): Off, "
|
||||
"Current Time: 0:00, Current Day: (UNKNOWN), On Time: Off, "
|
||||
"Off Time: Off, Weekly Timer: On";
|
||||
|
||||
ac.begin();
|
||||
irac.daikin(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
19, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
stdAc::swingh_t::kOff, // Horizontal swing
|
||||
false, // Quiet
|
||||
false, // Turbo
|
||||
true, // Filter
|
||||
true); // Clean
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Daikin2) {
|
||||
IRDaikin2 ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 3 (COOL), Temp: 19C, Fan: 2, Swing (V): 14 (Auto), "
|
||||
"Swing (H): 0, Clock: 0:00, On Time: Off, Off Time: Off, "
|
||||
"Sleep Time: Off, Beep: 1 (Quiet), Light: 1 (Bright), Mold: On, "
|
||||
"Clean: Off, Fresh Air: Off, Eye: Off, Eye Auto: Off, Quiet: Off, "
|
||||
"Powerful: Off, Purify: On, Econo: Off";
|
||||
|
||||
ac.begin();
|
||||
irac.daikin2(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
19, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
stdAc::swingh_t::kOff, // Horizontal swing
|
||||
false, // Quiet
|
||||
false, // Turbo
|
||||
true, // Light
|
||||
false, // Econo
|
||||
true, // Filter
|
||||
true, // Clean (aka Mold)
|
||||
-1, // Sleep time
|
||||
-1); // Current time
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(DAIKIN2, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kDaikin2Bits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Daikin216) {
|
||||
IRDaikin216 ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 4 (HEAT), Temp: 31C, Fan: 11 (QUIET), "
|
||||
"Swing (Horizontal): On, Swing (Vertical): On, Quiet: On, Powerful: Off";
|
||||
|
||||
ac.begin();
|
||||
irac.daikin216(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kHeat, // Mode
|
||||
31, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kAuto, // Veritcal swing
|
||||
stdAc::swingh_t::kLeft, // Horizontal swing
|
||||
true, // Quiet
|
||||
false); // Turbo (Powerful)
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(DAIKIN216, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kDaikin216Bits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Fujitsu) {
|
||||
IRFujitsuAC ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
std::string ardb1_expected =
|
||||
"Model: 2 (ARDB1), Power: On, Mode: 1 (COOL), Temp: 19C, Fan: 2 (MED), "
|
||||
"Command: N/A";
|
||||
std::string arrah2e_expected =
|
||||
"Model: 1 (ARRAH2E), Power: On, Mode: 1 (COOL), Temp: 19C, Fan: 2 (MED), "
|
||||
"Swing: Off, Command: N/A";
|
||||
|
||||
ac.begin();
|
||||
irac.fujitsu(&ac,
|
||||
ARDB1, // Model
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
19, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
stdAc::swingh_t::kOff, // Horizontal swing
|
||||
false, // Quiet
|
||||
false, // Turbo (Powerful)
|
||||
false); // Econo
|
||||
ASSERT_EQ(ardb1_expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kFujitsuAcBits - 8, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state, ac._irsend.capture.bits / 8);
|
||||
ASSERT_EQ(ardb1_expected, ac.toString());
|
||||
|
||||
ac._irsend.reset();
|
||||
irac.fujitsu(&ac,
|
||||
ARRAH2E, // Model
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
19, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
stdAc::swingh_t::kOff, // Horizontal swing
|
||||
false, // Quiet
|
||||
false, // Turbo (Powerful)
|
||||
false); // Econo
|
||||
ASSERT_EQ(arrah2e_expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kFujitsuAcBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state, ac._irsend.capture.bits / 8);
|
||||
ASSERT_EQ(arrah2e_expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Goodweather) {
|
||||
IRGoodweatherAc ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 1 (COOL), Temp: 19C, Fan: 2 (MED), Turbo: Toggle, "
|
||||
"Light: Toggle, Sleep: Toggle, Swing: 1 (Slow), Command: 0 (Power)";
|
||||
|
||||
ac.begin();
|
||||
irac.goodweather(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
19, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kHigh, // Veritcal swing
|
||||
true, // Turbo
|
||||
true, // Light
|
||||
8 * 60 + 0); // Sleep time
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(GOODWEATHER, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kGoodweatherBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.value);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Gree) {
|
||||
IRGreeAC ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 1 (COOL), Temp: 22C, Fan: 2, Turbo: Off, XFan: On, "
|
||||
"Light: On, Sleep: On, Swing Vertical Mode: Manual, "
|
||||
"Swing Vertical Pos: 3";
|
||||
|
||||
ac.begin();
|
||||
irac.gree(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
22, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kHigh, // Veritcal swing
|
||||
false, // Turbo
|
||||
true, // Light
|
||||
true, // Clean (aka Mold/XFan)
|
||||
8 * 60 + 0); // Sleep time
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(GREE, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kGreeBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Haier) {
|
||||
IRHaierAC ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Command: 1 (On), Mode: 1 (COOL), Temp: 24C, Fan: 2, Swing: 1 (Up), "
|
||||
"Sleep: On, Health: On, Current Time: 13:45, On Timer: Off, "
|
||||
"Off Timer: Off";
|
||||
|
||||
ac.begin();
|
||||
irac.haier(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
24, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kHigh, // Veritcal swing
|
||||
true, // Filter
|
||||
8 * 60 + 0, // Sleep time
|
||||
13 * 60 + 45); // Clock
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(HAIER_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kHaierACBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestIRac, HaierYrwo2) {
|
||||
IRHaierACYRW02 ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Button: 5 (Power), Mode: 2 (Cool), Temp: 23C, Fan: 4 (Med), "
|
||||
"Turbo: 1 (High), Swing: 1 (Top), Sleep: On, Health: On";
|
||||
|
||||
ac.begin();
|
||||
irac.haierYrwo2(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
23, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kHigh, // Veritcal swing
|
||||
true, // Turbo
|
||||
true, // Filter
|
||||
8 * 60 + 0); // Sleep time
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(HAIER_AC_YRW02, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kHaierACYRW02Bits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Hitachi) {
|
||||
IRHitachiAc ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 2 (AUTO), Temp: 22C, Fan: 3 (UNKNOWN), "
|
||||
"Swing (Vertical): Off, Swing (Horizontal): On";
|
||||
|
||||
ac.begin();
|
||||
irac.hitachi(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kAuto, // Mode
|
||||
22, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
stdAc::swingh_t::kAuto); // Horizontal swing
|
||||
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(HITACHI_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kHitachiAcBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Kelvinator) {
|
||||
IRKelvinatorAC ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 1 (COOL), Temp: 19C, Fan: 3, Turbo: Off, Quiet: Off, "
|
||||
"XFan: On, IonFilter: On, Light: On, Swing (Horizontal): Off, "
|
||||
"Swing (Vertical): Off";
|
||||
|
||||
ac.begin();
|
||||
irac.kelvinator(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
19, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
stdAc::swingh_t::kOff, // Horizontal swing
|
||||
false, // Quiet
|
||||
false, // Turbo
|
||||
true, // Light
|
||||
true, // Filter
|
||||
true); // Clean
|
||||
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(KELVINATOR, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kKelvinatorBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Midea) {
|
||||
IRMideaAC ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 1 (DRY), Temp: 27C/81F, Fan: 2 (MED), Sleep: On";
|
||||
|
||||
ac.begin();
|
||||
irac.midea(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kDry, // Mode
|
||||
27, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
8 * 60 + 0); // Sleep time
|
||||
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(MIDEA, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kMideaBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.value);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Mitsubishi) {
|
||||
IRMitsubishiAC ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On (COOL), Temp: 20C, FAN: 2, VANE: AUTO, Time: 14:30, "
|
||||
"On timer: 00:00, Off timer: 00:00, Timer: -";
|
||||
|
||||
ac.begin();
|
||||
irac.mitsubishi(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
20, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
false, // Silent
|
||||
14 * 60 + 35); // Clock
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(MITSUBISHI_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kMitsubishiACBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, MitsubishiHeavy88) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 1 (Cool), Temp: 21C, Fan: 3 (Med), "
|
||||
"Swing (V): 16 (Auto), Swing (H): 0 (Off), Turbo: Off, Econo: Off, "
|
||||
"3D: Off, Clean: On";
|
||||
|
||||
ac.begin();
|
||||
irac.mitsubishiHeavy88(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
21, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kAuto, // Veritcal swing
|
||||
stdAc::swingh_t::kOff, // Horizontal swing
|
||||
false, // Turbo
|
||||
false, // Econo
|
||||
true); // Clean
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(MITSUBISHI_HEAVY_88, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kMitsubishiHeavy88Bits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, MitsubishiHeavy152) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 1 (Cool), Temp: 20C, Fan: 6 (Econo), "
|
||||
"Swing (V): 6 (Off), Swing (H): 0 (Auto), Silent: On, Turbo: Off, "
|
||||
"Econo: On, Night: On, Filter: On, 3D: Off, Clean: Off";
|
||||
|
||||
ac.begin();
|
||||
irac.mitsubishiHeavy152(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
20, // Celsius
|
||||
stdAc::fanspeed_t::kLow, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
stdAc::swingh_t::kAuto, // Horizontal swing
|
||||
true, // Silent
|
||||
false, // Turbo
|
||||
true, // Econo
|
||||
true, // Filter
|
||||
false, // Clean
|
||||
8 * 60); // Sleep
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(MITSUBISHI_HEAVY_152, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kMitsubishiHeavy152Bits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Panasonic) {
|
||||
IRPanasonicAc ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected_nke[] =
|
||||
"Model: 2 (NKE), Power: On, Mode: 4 (HEAT), Temp: 28C, Fan: 2 (UNKNOWN), "
|
||||
"Swing (Vertical): 15 (AUTO), Swing (Horizontal): 6 (Middle), Quiet: On, "
|
||||
"Powerful: Off, Clock: 19:17, On Timer: Off, Off Timer: Off";
|
||||
|
||||
ac.begin();
|
||||
irac.panasonic(&ac,
|
||||
kPanasonicNke, // Model
|
||||
true, // Power
|
||||
stdAc::opmode_t::kHeat, // Mode
|
||||
28, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kAuto, // Veritcal swing
|
||||
stdAc::swingh_t::kLeft, // Horizontal swing
|
||||
true, // Quiet
|
||||
false, // Turbo
|
||||
19 * 60 + 17); // Clock
|
||||
ASSERT_EQ(expected_nke, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(PANASONIC_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kPanasonicAcBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected_nke, ac.toString());
|
||||
|
||||
char expected_dke[] =
|
||||
"Model: 3 (DKE), Power: On, Mode: 3 (COOL), Temp: 18C, Fan: 4 (MAX), "
|
||||
"Swing (Vertical): 1 (Full Up), Swing (Horizontal): 6 (Middle), "
|
||||
"Quiet: Off, Powerful: On, Clock: 19:17, On Timer: Off, Off Timer: Off";
|
||||
ac._irsend.reset();
|
||||
irac.panasonic(&ac,
|
||||
kPanasonicDke, // Model
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
18, // Celsius
|
||||
stdAc::fanspeed_t::kMax, // Fan speed
|
||||
stdAc::swingv_t::kHigh, // Veritcal swing
|
||||
stdAc::swingh_t::kMiddle, // Horizontal swing
|
||||
false, // Quiet
|
||||
true, // Turbo
|
||||
19 * 60 + 17); // Clock
|
||||
ASSERT_EQ(expected_dke, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(PANASONIC_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kPanasonicAcBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected_dke, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Samsung) {
|
||||
IRSamsungAc ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 0 (AUTO), Temp: 28C, Fan: 6 (AUTO), Swing: On, "
|
||||
"Beep: On, Clean: On, Quiet: On, Powerful: Off";
|
||||
|
||||
ac.begin();
|
||||
irac.samsung(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kAuto, // Mode
|
||||
28, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kAuto, // Veritcal swing
|
||||
true, // Quiet
|
||||
false, // Turbo
|
||||
true, // Clean
|
||||
true, // Beep
|
||||
false); // with dopower Off
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(SAMSUNG_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kSamsungAcBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
|
||||
ac._irsend.reset();
|
||||
irac.samsung(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kAuto, // Mode
|
||||
28, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kAuto, // Veritcal swing
|
||||
true, // Quiet
|
||||
false, // Turbo
|
||||
true, // Clean
|
||||
true, // Beep
|
||||
true); // with dopower On
|
||||
ASSERT_EQ(expected, ac.toString()); // Class should be in the desired mode.
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(SAMSUNG_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kSamsungAcExtendedBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
// However, we expect a plain "on" state as it should be sent before the
|
||||
// desired state.
|
||||
char expected_on[] =
|
||||
"Power: On, Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off";
|
||||
ASSERT_EQ(expected_on, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Sharp) {
|
||||
IRSharpAc ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 2 (COOL), Temp: 28C, Fan: 3 (MED)";
|
||||
|
||||
ac.begin();
|
||||
irac.sharp(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
28, // Celsius
|
||||
stdAc::fanspeed_t::kMedium); // Fan speed
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(SHARP_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kSharpAcBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
TEST(TestIRac, Tcl112) {
|
||||
IRTcl112Ac ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 3 (COOL), Temp: 20C, Fan: 3 (Med), Econo: On, "
|
||||
"Health: On, Light: On, Turbo: Off, Swing (H): On, Swing (V): Off";
|
||||
|
||||
ac.begin();
|
||||
irac.tcl112(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
20, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kOff, // Veritcal swing
|
||||
stdAc::swingh_t::kAuto, // Horizontal swing
|
||||
false, // Turbo
|
||||
true, // Light
|
||||
true, // Econo
|
||||
true); // Filter (aka. Health)
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(TCL112AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kTcl112AcBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Teco) {
|
||||
IRTecoAc ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 0 (AUTO), Temp: 21C, Fan: 2 (Med), Sleep: On, "
|
||||
"Swing: On";
|
||||
|
||||
ac.begin();
|
||||
irac.teco(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kAuto, // Mode
|
||||
21, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kAuto, // Veritcal swing
|
||||
8 * 60 + 30); // Sleep
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(TECO, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kTecoBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.value);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Toshiba) {
|
||||
IRToshibaAC ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] = "Power: On, Mode: 2 (DRY), Temp: 29C, Fan: 2";
|
||||
|
||||
ac.begin();
|
||||
irac.toshiba(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kDry, // Mode
|
||||
29, // Celsius
|
||||
stdAc::fanspeed_t::kLow); // Fan speed
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(TOSHIBA_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kToshibaACBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Trotec) {
|
||||
IRTrotecESP ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 1 (COOL), Temp: 18C, Fan Speed: 3 (High), Sleep: On";
|
||||
|
||||
ac.begin();
|
||||
irac.trotec(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kCool, // Mode
|
||||
18, // Celsius
|
||||
stdAc::fanspeed_t::kHigh, // Fan speed
|
||||
8 * 60 + 17); // Sleep
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
EXPECT_EQ(kTrotecCool, ac.getMode());
|
||||
EXPECT_EQ(18, ac.getTemp());
|
||||
EXPECT_EQ(kTrotecFanHigh, ac.getSpeed());
|
||||
EXPECT_TRUE(ac.getSleep());
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(TROTEC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kTrotecBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, Vestel) {
|
||||
IRVestelAc ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Power: On, Mode: 0 (AUTO), Temp: 22C, Fan: 5 (LOW), Sleep: On, "
|
||||
"Turbo: Off, Ion: On, Swing: On";
|
||||
|
||||
ac.begin();
|
||||
irac.vestel(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kAuto, // Mode
|
||||
22, // Celsius
|
||||
stdAc::fanspeed_t::kLow, // Fan speed
|
||||
stdAc::swingv_t::kHigh, // Veritcal swing
|
||||
false, // Turbo
|
||||
true, // Filter
|
||||
8 * 60 + 0); // Sleep time
|
||||
// 13 * 60 + 45); // Clock
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(VESTEL_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kVestelAcBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
|
||||
ac._irsend.reset();
|
||||
char expected_clocks[] =
|
||||
"Time: 13:45, Timer: Off, On Timer: Off, Off Timer: Off";
|
||||
|
||||
ac.begin();
|
||||
irac.vestel(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kAuto, // Mode
|
||||
22, // Celsius
|
||||
stdAc::fanspeed_t::kLow, // Fan speed
|
||||
stdAc::swingv_t::kHigh, // Veritcal swing
|
||||
false, // Turbo
|
||||
true, // Filter
|
||||
8 * 60 + 0, // Sleep time
|
||||
13 * 60 + 45, // Clock
|
||||
false); // Don't send the normal message.
|
||||
// Just for testing purposes.
|
||||
ASSERT_EQ(expected_clocks, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(VESTEL_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kVestelAcBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected_clocks, ac.toString());
|
||||
|
||||
// Now check it sends both messages during normal operation when the
|
||||
// clock is set.
|
||||
ac._irsend.reset();
|
||||
ac.begin();
|
||||
irac.vestel(&ac,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kAuto, // Mode
|
||||
22, // Celsius
|
||||
stdAc::fanspeed_t::kLow, // Fan speed
|
||||
stdAc::swingv_t::kHigh, // Veritcal swing
|
||||
false, // Turbo
|
||||
true, // Filter
|
||||
8 * 60 + 0, // Sleep time
|
||||
13 * 60 + 45); // Clock
|
||||
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3110s9066"
|
||||
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
|
||||
"m520s480m520s1535m520s480m520s480m520s480m520s480m520s480m520s480"
|
||||
"m520s1535m520s1535m520s1535m520s1535m520s480m520s1535m520s480m520s1535"
|
||||
"m520s1535m520s1535m520s480m520s480m520s480m520s480m520s480m520s480"
|
||||
"m520s480m520s480m520s480m520s480m520s480m520s1535m520s1535m520s480"
|
||||
"m520s1535m520s480m520s1535m520s480m520s480m520s480m520s480m520s480"
|
||||
"m520s480m520s480m520s1535m520s480m520s1535m520s1535m520s1535m520s1535"
|
||||
"m520s100000"
|
||||
"m3110s9066"
|
||||
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
|
||||
"m520s480m520s1535m520s480m520s480m520s480m520s1535m520s1535m520s480"
|
||||
"m520s1535m520s1535m520s1535m520s1535m520s480m520s480m520s480m520s480"
|
||||
"m520s480m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
|
||||
"m520s480m520s480m520s480m520s480m520s1535m520s480m520s1535m520s1535"
|
||||
"m520s480m520s480m520s480m520s480m520s1535m520s480m520s1535m520s1535"
|
||||
"m520s480m520s1535m520s480m520s480m520s480m520s480m520s480m520s480"
|
||||
"m520s100000", ac._irsend.outputStr());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestIRac, Whirlpool) {
|
||||
IRWhirlpoolAc ac(0);
|
||||
IRac irac(0);
|
||||
IRrecv capture(0);
|
||||
char expected[] =
|
||||
"Model: 1 (DG11J13A), Power toggle: On, Mode: 1 (AUTO), Temp: 21C, "
|
||||
"Fan: 3 (LOW), Swing: On, Light: On, Clock: 23:58, On Timer: Off, "
|
||||
"Off Timer: Off, Sleep: On, Super: Off, Command: 1 (POWER)";
|
||||
|
||||
ac.begin();
|
||||
irac.whirlpool(&ac,
|
||||
DG11J13A,
|
||||
true, // Power
|
||||
stdAc::opmode_t::kAuto, // Mode
|
||||
21, // Celsius
|
||||
stdAc::fanspeed_t::kMedium, // Fan speed
|
||||
stdAc::swingv_t::kAuto, // Veritcal swing
|
||||
false, // Turbo
|
||||
true, // Light
|
||||
8 * 60 + 30, // Sleep
|
||||
23 * 60 + 58); // Clock
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(capture.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(WHIRLPOOL_AC, ac._irsend.capture.decode_type);
|
||||
ASSERT_EQ(kWhirlpoolAcBits, ac._irsend.capture.bits);
|
||||
ac.setRaw(ac._irsend.capture.state);
|
||||
ASSERT_EQ(expected, ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRac, strToBool) {
|
||||
EXPECT_TRUE(IRac::strToBool("ON"));
|
||||
EXPECT_TRUE(IRac::strToBool("1"));
|
||||
EXPECT_TRUE(IRac::strToBool("TRUE"));
|
||||
EXPECT_TRUE(IRac::strToBool("YES"));
|
||||
EXPECT_FALSE(IRac::strToBool("OFF"));
|
||||
EXPECT_FALSE(IRac::strToBool("0"));
|
||||
EXPECT_FALSE(IRac::strToBool("FALSE"));
|
||||
EXPECT_FALSE(IRac::strToBool("NO"));
|
||||
EXPECT_FALSE(IRac::strToBool("FOOBAR"));
|
||||
EXPECT_TRUE(IRac::strToBool("FOOBAR", true));
|
||||
}
|
||||
|
||||
TEST(TestIRac, strToOpmode) {
|
||||
EXPECT_EQ(stdAc::opmode_t::kAuto, IRac::strToOpmode("AUTO"));
|
||||
EXPECT_EQ(stdAc::opmode_t::kCool, IRac::strToOpmode("COOL"));
|
||||
EXPECT_EQ(stdAc::opmode_t::kHeat, IRac::strToOpmode("HEAT"));
|
||||
EXPECT_EQ(stdAc::opmode_t::kDry, IRac::strToOpmode("DRY"));
|
||||
EXPECT_EQ(stdAc::opmode_t::kFan, IRac::strToOpmode("FAN"));
|
||||
EXPECT_EQ(stdAc::opmode_t::kFan, IRac::strToOpmode("FAN_ONLY"));
|
||||
EXPECT_EQ(stdAc::opmode_t::kAuto, IRac::strToOpmode("FOOBAR"));
|
||||
EXPECT_EQ(stdAc::opmode_t::kOff, IRac::strToOpmode("OFF"));
|
||||
EXPECT_EQ(stdAc::opmode_t::kOff, IRac::strToOpmode("FOOBAR",
|
||||
stdAc::opmode_t::kOff));
|
||||
}
|
||||
|
||||
TEST(TestIRac, strToFanspeed) {
|
||||
EXPECT_EQ(stdAc::fanspeed_t::kAuto, IRac::strToFanspeed("AUTO"));
|
||||
EXPECT_EQ(stdAc::fanspeed_t::kMin, IRac::strToFanspeed("MIN"));
|
||||
EXPECT_EQ(stdAc::fanspeed_t::kLow, IRac::strToFanspeed("LOW"));
|
||||
EXPECT_EQ(stdAc::fanspeed_t::kMedium, IRac::strToFanspeed("MEDIUM"));
|
||||
EXPECT_EQ(stdAc::fanspeed_t::kHigh, IRac::strToFanspeed("HIGH"));
|
||||
EXPECT_EQ(stdAc::fanspeed_t::kMax, IRac::strToFanspeed("MAX"));
|
||||
EXPECT_EQ(stdAc::fanspeed_t::kAuto, IRac::strToFanspeed("FOOBAR"));
|
||||
EXPECT_EQ(stdAc::fanspeed_t::kMin,
|
||||
IRac::strToFanspeed("FOOBAR", stdAc::fanspeed_t::kMin));
|
||||
}
|
||||
|
||||
TEST(TestIRac, strToSwingV) {
|
||||
EXPECT_EQ(stdAc::swingv_t::kAuto, IRac::strToSwingV("AUTO"));
|
||||
EXPECT_EQ(stdAc::swingv_t::kLowest, IRac::strToSwingV("LOWEST"));
|
||||
EXPECT_EQ(stdAc::swingv_t::kLow, IRac::strToSwingV("LOW"));
|
||||
EXPECT_EQ(stdAc::swingv_t::kMiddle, IRac::strToSwingV("MIDDLE"));
|
||||
EXPECT_EQ(stdAc::swingv_t::kHigh, IRac::strToSwingV("HIGH"));
|
||||
EXPECT_EQ(stdAc::swingv_t::kHighest, IRac::strToSwingV("HIGHEST"));
|
||||
EXPECT_EQ(stdAc::swingv_t::kOff, IRac::strToSwingV("OFF"));
|
||||
EXPECT_EQ(stdAc::swingv_t::kOff, IRac::strToSwingV("FOOBAR"));
|
||||
EXPECT_EQ(stdAc::swingv_t::kAuto,
|
||||
IRac::strToSwingV("FOOBAR", stdAc::swingv_t::kAuto));
|
||||
}
|
||||
|
||||
TEST(TestIRac, strToSwingH) {
|
||||
EXPECT_EQ(stdAc::swingh_t::kAuto, IRac::strToSwingH("AUTO"));
|
||||
EXPECT_EQ(stdAc::swingh_t::kLeftMax, IRac::strToSwingH("MAX LEFT"));
|
||||
EXPECT_EQ(stdAc::swingh_t::kLeft, IRac::strToSwingH("LEFT"));
|
||||
EXPECT_EQ(stdAc::swingh_t::kMiddle, IRac::strToSwingH("CENTRE"));
|
||||
EXPECT_EQ(stdAc::swingh_t::kRight, IRac::strToSwingH("RIGHT"));
|
||||
EXPECT_EQ(stdAc::swingh_t::kRightMax, IRac::strToSwingH("RIGHTMAX"));
|
||||
EXPECT_EQ(stdAc::swingh_t::kOff, IRac::strToSwingH("OFF"));
|
||||
EXPECT_EQ(stdAc::swingh_t::kOff, IRac::strToSwingH("FOOBAR"));
|
||||
EXPECT_EQ(stdAc::swingh_t::kAuto,
|
||||
IRac::strToSwingH("FOOBAR", stdAc::swingh_t::kAuto));
|
||||
}
|
||||
|
||||
TEST(TestIRac, strToModel) {
|
||||
EXPECT_EQ(panasonic_ac_remote_model_t::kPanasonicLke,
|
||||
IRac::strToModel("LKE"));
|
||||
EXPECT_EQ(panasonic_ac_remote_model_t::kPanasonicLke,
|
||||
IRac::strToModel("PANASONICLKE"));
|
||||
EXPECT_EQ(fujitsu_ac_remote_model_t::ARRAH2E,
|
||||
IRac::strToModel("ARRAH2E"));
|
||||
EXPECT_EQ(whirlpool_ac_remote_model_t::DG11J13A,
|
||||
IRac::strToModel("DG11J13A"));
|
||||
EXPECT_EQ(1, IRac::strToModel("1"));
|
||||
EXPECT_EQ(10, IRac::strToModel("10"));
|
||||
EXPECT_EQ(-1, IRac::strToModel("0"));
|
||||
EXPECT_EQ(-1, IRac::strToModel("FOOBAR"));
|
||||
EXPECT_EQ(0, IRac::strToModel("FOOBAR", 0));
|
||||
}
|
||||
|
||||
TEST(TestIRac, boolToString) {
|
||||
EXPECT_EQ("on", IRac::boolToString(true));
|
||||
EXPECT_EQ("off", IRac::boolToString(false));
|
||||
}
|
||||
|
||||
TEST(TestIRac, opmodeToString) {
|
||||
EXPECT_EQ("off", IRac::opmodeToString(stdAc::opmode_t::kOff));
|
||||
EXPECT_EQ("auto", IRac::opmodeToString(stdAc::opmode_t::kAuto));
|
||||
EXPECT_EQ("cool", IRac::opmodeToString(stdAc::opmode_t::kCool));
|
||||
EXPECT_EQ("unknown", IRac::opmodeToString((stdAc::opmode_t)500));
|
||||
}
|
||||
|
||||
TEST(TestIRac, fanspeedToString) {
|
||||
EXPECT_EQ("low", IRac::fanspeedToString(stdAc::fanspeed_t::kLow));
|
||||
EXPECT_EQ("auto", IRac::fanspeedToString(stdAc::fanspeed_t::kAuto));
|
||||
EXPECT_EQ("unknown", IRac::fanspeedToString((stdAc::fanspeed_t)500));
|
||||
}
|
||||
|
||||
TEST(TestIRac, swingvToString) {
|
||||
EXPECT_EQ("off", IRac::swingvToString(stdAc::swingv_t::kOff));
|
||||
EXPECT_EQ("low", IRac::swingvToString(stdAc::swingv_t::kLow));
|
||||
EXPECT_EQ("auto", IRac::swingvToString(stdAc::swingv_t::kAuto));
|
||||
EXPECT_EQ("unknown", IRac::swingvToString((stdAc::swingv_t)500));
|
||||
}
|
||||
|
||||
TEST(TestIRac, swinghToString) {
|
||||
EXPECT_EQ("off", IRac::swinghToString(stdAc::swingh_t::kOff));
|
||||
EXPECT_EQ("left", IRac::swinghToString(stdAc::swingh_t::kLeft));
|
||||
EXPECT_EQ("auto", IRac::swinghToString(stdAc::swingh_t::kAuto));
|
||||
EXPECT_EQ("unknown", IRac::swinghToString((stdAc::swingh_t)500));
|
||||
}
|
||||
@@ -399,7 +399,7 @@ TEST(TestDecode, DecodeDenon) {
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(DENON, irsend.capture.decode_type);
|
||||
EXPECT_EQ(DENON_BITS, irsend.capture.bits);
|
||||
EXPECT_EQ(kDenonBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x2278, irsend.capture.value);
|
||||
// Legacy Denon 14-bit message.
|
||||
irsend.reset();
|
||||
@@ -407,15 +407,15 @@ TEST(TestDecode, DecodeDenon) {
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(DENON, irsend.capture.decode_type);
|
||||
EXPECT_EQ(DENON_BITS, irsend.capture.bits);
|
||||
EXPECT_EQ(kDenonBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x1278, irsend.capture.value);
|
||||
// Normal Denon 48-bit message. (Panasonic/Kaseikyo)
|
||||
irsend.reset();
|
||||
irsend.sendDenon(0x2A4C028D6CE3, DENON_48_BITS);
|
||||
irsend.sendDenon(0x2A4C028D6CE3, kDenon48Bits);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(DENON, irsend.capture.decode_type);
|
||||
EXPECT_EQ(DENON_48_BITS, irsend.capture.bits);
|
||||
EXPECT_EQ(kDenon48Bits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x2A4C028D6CE3, irsend.capture.value);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// Copyright 2017,2019 David Conran
|
||||
|
||||
#include "IRsend_test.h"
|
||||
#include "IRrecv_test.h"
|
||||
#include "IRsend.h"
|
||||
#include "IRutils.h"
|
||||
#include "gtest/gtest.h"
|
||||
@@ -20,9 +21,9 @@ TEST(TestSendData, SendSingleBit) {
|
||||
IRsendTest irsend(4);
|
||||
irsend.begin();
|
||||
irsend.sendData(1, 2, 3, 4, 0b1, 1, true);
|
||||
EXPECT_EQ("m1s2", irsend.outputStr());
|
||||
EXPECT_EQ("d50m1s2", irsend.outputStr());
|
||||
irsend.sendData(1, 2, 3, 4, 0b0, 1, true);
|
||||
EXPECT_EQ("m3s4", irsend.outputStr());
|
||||
EXPECT_EQ("d50m3s4", irsend.outputStr());
|
||||
}
|
||||
|
||||
// Test sending bit order.
|
||||
@@ -30,11 +31,11 @@ TEST(TestSendData, TestingBitSendOrder) {
|
||||
IRsendTest irsend(4);
|
||||
irsend.begin();
|
||||
irsend.sendData(1, 2, 3, 4, 0b10, 2, true);
|
||||
EXPECT_EQ("m1s2m3s4", irsend.outputStr());
|
||||
EXPECT_EQ("d50m1s2m3s4", irsend.outputStr());
|
||||
irsend.sendData(1, 2, 3, 4, 0b10, 2, false);
|
||||
EXPECT_EQ("m3s4m1s2", irsend.outputStr());
|
||||
EXPECT_EQ("d50m3s4m1s2", irsend.outputStr());
|
||||
irsend.sendData(1, 2, 3, 4, 0b0001, 4, false);
|
||||
EXPECT_EQ("m1s2m3s4m3s4m3s4", irsend.outputStr());
|
||||
EXPECT_EQ("d50m1s2m3s4m3s4m3s4", irsend.outputStr());
|
||||
}
|
||||
|
||||
// Test sending typical data.
|
||||
@@ -42,10 +43,12 @@ TEST(TestSendData, SendTypicalData) {
|
||||
IRsendTest irsend(4);
|
||||
irsend.begin();
|
||||
irsend.sendData(1, 2, 3, 4, 0b1010110011110000, 16, true);
|
||||
EXPECT_EQ("m1s2m3s4m1s2m3s4m1s2m1s2m3s4m3s4m1s2m1s2m1s2m1s2m3s4m3s4m3s4m3s4",
|
||||
irsend.outputStr());
|
||||
EXPECT_EQ(
|
||||
"d50m1s2m3s4m1s2m3s4m1s2m1s2m3s4m3s4m1s2m1s2m1s2m1s2m3s4m3s4m3s4m3s4",
|
||||
irsend.outputStr());
|
||||
irsend.sendData(1, 2, 3, 4, 0x1234567890ABCDEF, 64, true);
|
||||
EXPECT_EQ(
|
||||
"d50"
|
||||
"m3s4m3s4m3s4m1s2m3s4m3s4m1s2m3s4m3s4m3s4m1s2m1s2m3s4m1s2m3s4m3s4"
|
||||
"m3s4m1s2m3s4m1s2m3s4m1s2m1s2m3s4m3s4m1s2m1s2m1s2m1s2m3s4m3s4m3s4"
|
||||
"m1s2m3s4m3s4m1s2m3s4m3s4m3s4m3s4m1s2m3s4m1s2m3s4m1s2m3s4m1s2m1s2"
|
||||
@@ -59,6 +62,7 @@ TEST(TestSendData, SendOverLargeData) {
|
||||
irsend.begin();
|
||||
irsend.sendData(1, 2, 3, 4, 0xFFFFFFFFFFFFFFFF, 70, true);
|
||||
EXPECT_EQ(
|
||||
"d50"
|
||||
"m3s4m3s4m3s4m3s4m3s4m3s4"
|
||||
"m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2"
|
||||
"m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2m1s2"
|
||||
@@ -72,9 +76,92 @@ TEST(TestIRSend, InvertedOutput) {
|
||||
IRsendTest irsend(4, true);
|
||||
irsend.begin();
|
||||
irsend.sendData(1, 2, 3, 4, 0b1, 1, true);
|
||||
EXPECT_EQ("s1m2", irsend.outputStr());
|
||||
EXPECT_EQ("d50s1m2", irsend.outputStr());
|
||||
irsend.sendData(1, 2, 3, 4, 0b0, 1, true);
|
||||
EXPECT_EQ("s3m4", irsend.outputStr());
|
||||
EXPECT_EQ("d50s3m4", irsend.outputStr());
|
||||
}
|
||||
|
||||
// Test we correctly pick up frequency changes.
|
||||
TEST(TestIRSend, DetectFreqChanges) {
|
||||
IRsendTest irsend(0);
|
||||
|
||||
irsend.begin();
|
||||
irsend.enableIROut(40); // 40kHz
|
||||
irsend.sendData(1, 2, 3, 4, 0b1, 1, true);
|
||||
irsend.enableIROut(38); // 40kHz
|
||||
irsend.sendData(1, 2, 3, 4, 0b1, 1, true);
|
||||
irsend.enableIROut(40); // 40kHz
|
||||
irsend.sendData(1, 2, 3, 4, 0b1, 1, true);
|
||||
irsend.enableIROut(38); // 40kHz
|
||||
irsend.sendData(1, 2, 3, 4, 0b1, 1, true);
|
||||
EXPECT_EQ(
|
||||
"f40000d50"
|
||||
"m1s2"
|
||||
"f38000"
|
||||
"m1s2"
|
||||
"f40000"
|
||||
"m1s2"
|
||||
"f38000"
|
||||
"m1s2",
|
||||
irsend.outputStr());
|
||||
irsend.reset();
|
||||
irsend.enableIROut(40); // 40kHz
|
||||
irsend.sendData(1, 2, 3, 4, 0b1, 1, true);
|
||||
irsend.enableIROut(40); // 40kHz
|
||||
irsend.sendData(1, 2, 3, 4, 0b1, 1, true);
|
||||
irsend.enableIROut(38); // 40kHz
|
||||
irsend.sendData(1, 2, 3, 4, 0b1, 1, true);
|
||||
irsend.enableIROut(38); // 40kHz
|
||||
irsend.sendData(1, 2, 3, 4, 0b1, 1, true);
|
||||
EXPECT_EQ(
|
||||
"f40000d50"
|
||||
"m1s2m1s2"
|
||||
"f38000m1s2m1s2",
|
||||
irsend.outputStr());
|
||||
}
|
||||
|
||||
// Test we correctly pick up duty cycle changes.
|
||||
TEST(TestIRSend, DetectDutyChanges) {
|
||||
IRsendTest irsend(0);
|
||||
|
||||
irsend.begin();
|
||||
irsend.sendGeneric(1, 2, 3, 4, 5, 6, 7, 8, 0b1, 1, 38000, true, 0, 33);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m1s2m3s4m7s8",
|
||||
irsend.outputStr());
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendGeneric(1, 2, 3, 4, 5, 6, 7, 8, 0b1, 1, 38000, true, 0, 50);
|
||||
irsend.sendGeneric(1, 2, 3, 4, 5, 6, 7, 8, 0b1, 1, 38000, true, 0, 33);
|
||||
irsend.sendGeneric(1, 2, 3, 4, 5, 6, 7, 8, 0b1, 1, 38000, true, 0, 25);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m1s2m3s4m7s8"
|
||||
"d33"
|
||||
"m1s2m3s4m7s8"
|
||||
"d25"
|
||||
"m1s2m3s4m7s8",
|
||||
irsend.outputStr());
|
||||
}
|
||||
|
||||
|
||||
// Test we correctly pick up frequency AND duty changes.
|
||||
TEST(TestIRSend, DetectFreqAndDutyChanges) {
|
||||
IRsendTest irsend(0);
|
||||
|
||||
irsend.begin();
|
||||
irsend.sendGeneric(1, 2, 3, 4, 5, 6, 7, 8, 0b1, 1, 38000, true, 0, 50);
|
||||
irsend.sendGeneric(1, 2, 3, 4, 5, 6, 7, 8, 0b1, 1, 38000, true, 0, 33);
|
||||
irsend.sendGeneric(1, 2, 3, 4, 5, 6, 7, 8, 0b1, 1, 40000, true, 0, 25);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m1s2m3s4m7s8"
|
||||
"d33"
|
||||
"m1s2m3s4m7s8"
|
||||
"f40000d25"
|
||||
"m1s2m3s4m7s8",
|
||||
irsend.outputStr());
|
||||
}
|
||||
|
||||
// Test typical use of sendRaw().
|
||||
@@ -94,6 +181,7 @@ TEST(TestSendRaw, GeneralUse) {
|
||||
|
||||
irsend.sendRaw(rawData, 67, 38);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8950s4500"
|
||||
"m550s1650m600s1650m550s550m600s500m600s550m550s550m600s1650m550s1650"
|
||||
"m600s1650m600s1650m550s1700m550s550m600s550m550s550m600s500m600s550"
|
||||
@@ -110,6 +198,7 @@ TEST(TestSendRaw, GeneralUse) {
|
||||
EXPECT_EQ(32, irsend.capture.bits);
|
||||
EXPECT_EQ(0xC3E0E0E8, irsend.capture.value);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8950s4500"
|
||||
"m550s1650m600s1650m550s550m600s500m600s550m550s550m600s1650m550s1650"
|
||||
"m600s1650m600s1650m550s1700m550s550m600s550m550s550m600s500m600s550"
|
||||
@@ -290,7 +379,7 @@ TEST(TestLowLevelSend, SpaceNoModulation) {
|
||||
EXPECT_EQ("[Off]1000usecs", irsend.low_level_sequence);
|
||||
}
|
||||
|
||||
// Test expected to work/produce a message for irsend:send()
|
||||
// Test expected to work/produce a message for simple irsend:send()
|
||||
TEST(TestSend, GenericSimpleSendMethod) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
@@ -569,7 +658,7 @@ TEST(TestSend, GenericSimpleSendMethod) {
|
||||
EXPECT_EQ(0x1234, irsend.capture.value);
|
||||
}
|
||||
|
||||
// Test some expected types to NOT work/produce a message via irsend:send()
|
||||
// Test some expected types to NOT work/produce a message via irsend:send()
|
||||
TEST(TestSend, GenericSimpleSendMethodFailure) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
@@ -582,17 +671,71 @@ TEST(TestSend, GenericSimpleSendMethodFailure) {
|
||||
ASSERT_FALSE(irrecv.decode(&irsend.capture));
|
||||
|
||||
// For every A/C protocol which decodes to having a state[].
|
||||
for (int i = 0; i < 200; i++) {
|
||||
for (int i = 0; i <= kLastDecodeType; i++) {
|
||||
if (hasACState((decode_type_t)i) && i != GREE) { // Gree is an exception.
|
||||
// Check it fails.
|
||||
ASSERT_FALSE(irsend.send((decode_type_t)i, 0, 0));
|
||||
ASSERT_FALSE(irsend.send((decode_type_t)i, (uint64_t)0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
// Test some other special cases.
|
||||
ASSERT_FALSE(irsend.send(UNKNOWN, 0, 0));
|
||||
ASSERT_FALSE(irsend.send(UNUSED, 0, 0));
|
||||
ASSERT_FALSE(irsend.send(RAW, 0, 0));
|
||||
ASSERT_FALSE(irsend.send(PRONTO, 0, 0));
|
||||
ASSERT_FALSE(irsend.send(GLOBALCACHE, 0, 0));
|
||||
ASSERT_FALSE(irsend.send(UNKNOWN, (uint64_t)0, 0));
|
||||
ASSERT_FALSE(irsend.send(UNUSED, (uint64_t)0, 0));
|
||||
ASSERT_FALSE(irsend.send(RAW, (uint64_t)0, 0));
|
||||
ASSERT_FALSE(irsend.send(PRONTO, (uint64_t)0, 0));
|
||||
ASSERT_FALSE(irsend.send(GLOBALCACHE, (uint64_t)0, 0));
|
||||
}
|
||||
|
||||
// Test expected to work/produce a message for complex irsend:send()
|
||||
TEST(TestSend, GenericComplexSendMethod) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
uint8_t kelvinator[kKelvinatorStateLength] = {
|
||||
0x19, 0x0B, 0x80, 0x50, 0x00, 0x00, 0x00, 0xE0,
|
||||
0x19, 0x0B, 0x80, 0x70, 0x00, 0x00, 0x10, 0xF0};
|
||||
ASSERT_TRUE(irsend.send(KELVINATOR, kelvinator, kKelvinatorStateLength));
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(KELVINATOR, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kKelvinatorStateLength * 8, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(kelvinator, irsend.capture.state, irsend.capture.bits / 8);
|
||||
|
||||
irsend.reset();
|
||||
uint8_t panasonic[kPanasonicAcStateLength] = {
|
||||
0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02,
|
||||
0x20, 0xE0, 0x04, 0x00, 0x4E, 0x2E, 0x80, 0xAF, 0x00,
|
||||
0x00, 0x0E, 0xE0, 0x11, 0x00, 0x01, 0x00, 0x06, 0xB7};
|
||||
ASSERT_TRUE(irsend.send(PANASONIC_AC, panasonic, kPanasonicAcStateLength));
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(PANASONIC_AC, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kPanasonicAcStateLength * 8, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(panasonic, irsend.capture.state, irsend.capture.bits / 8);
|
||||
}
|
||||
|
||||
// Test some expected types to NOT work/produce a complex message via
|
||||
// irsend:send()
|
||||
TEST(TestSend, GenericComplexSendMethodFailure) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
// Check nothing is sent for unexpected protocols
|
||||
uint8_t state[kStateSizeMax] = {};
|
||||
irsend.reset();
|
||||
ASSERT_FALSE(irsend.send(NEC, state, kNECBits));
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_FALSE(irrecv.decode(&irsend.capture));
|
||||
|
||||
// For every A/C protocol which DOESN'T decode to having a state[].
|
||||
for (int i = -1; i <= kLastDecodeType; i++) {
|
||||
if (!hasACState((decode_type_t)i))
|
||||
// Check it fails.
|
||||
ASSERT_FALSE(irsend.send((decode_type_t)i, state, 0));
|
||||
else // Or if it is okay.
|
||||
ASSERT_TRUE(irsend.send((decode_type_t)i, state, 0));
|
||||
}
|
||||
}
|
||||
@@ -17,12 +17,14 @@
|
||||
|
||||
#ifdef UNIT_TEST
|
||||
// Used to help simulate elapsed time in unit tests.
|
||||
uint32_t _IRtimer_unittest_now = 0;
|
||||
extern uint32_t _IRtimer_unittest_now;
|
||||
#endif // UNIT_TEST
|
||||
|
||||
class IRsendTest : public IRsend {
|
||||
public:
|
||||
uint32_t output[OUTPUT_BUF];
|
||||
uint32_t freq[OUTPUT_BUF];
|
||||
uint8_t duty[OUTPUT_BUF];
|
||||
uint16_t last;
|
||||
uint16_t rawbuf[RAW_BUF];
|
||||
decode_results capture;
|
||||
@@ -40,8 +42,22 @@ class IRsendTest : public IRsend {
|
||||
|
||||
std::string outputStr() {
|
||||
std::stringstream result;
|
||||
uint8_t lastduty = UINT8_MAX; // An impossible duty cycle value.
|
||||
uint32_t lastfreq = 0; // An impossible frequency value.
|
||||
if (last == 0 && output[0] == 0) return "";
|
||||
for (uint16_t i = 0; i <= last; i++) {
|
||||
// Display the frequency only if it changes.
|
||||
if (freq[i] != lastfreq) {
|
||||
result << "f";
|
||||
result << freq[i];
|
||||
lastfreq = freq[i];
|
||||
}
|
||||
// Display the duty cycle only if it changes.
|
||||
if (duty[i] != lastduty) {
|
||||
result << "d";
|
||||
result << static_cast<uint16_t>(duty[i]);
|
||||
lastduty = duty[i];
|
||||
}
|
||||
if ((i & 1) != outputOff) // Odd XOR outputOff
|
||||
result << "s";
|
||||
else
|
||||
@@ -92,6 +108,8 @@ class IRsendTest : public IRsend {
|
||||
output[++last] = usec;
|
||||
else
|
||||
output[last] += usec;
|
||||
duty[last] = _dutycycle;
|
||||
freq[last] = _freq_unittest;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -103,6 +121,8 @@ class IRsendTest : public IRsend {
|
||||
} else {
|
||||
output[++last] = time;
|
||||
}
|
||||
duty[last] = _dutycycle;
|
||||
freq[last] = _freq_unittest;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "IRutils.h"
|
||||
#include <stdint.h>
|
||||
#include "IRrecv.h"
|
||||
#include "IRrecv_test.h"
|
||||
#include "IRsend.h"
|
||||
#include "IRsend_test.h"
|
||||
#include "gtest/gtest.h"
|
||||
@@ -395,3 +396,96 @@ TEST(TestCountBits, Integer) {
|
||||
ASSERT_EQ(64, countBits(data, 64));
|
||||
ASSERT_EQ(0, countBits(data, 64, false));
|
||||
}
|
||||
|
||||
TEST(TestStrToDecodeType, strToDecodeType) {
|
||||
EXPECT_EQ(decode_type_t::NEC, strToDecodeType("NEC"));
|
||||
EXPECT_EQ(decode_type_t::KELVINATOR, strToDecodeType("KELVINATOR"));
|
||||
EXPECT_EQ(decode_type_t::UNKNOWN, strToDecodeType("foo"));
|
||||
}
|
||||
|
||||
TEST(TestUtils, htmlEscape) {
|
||||
EXPECT_EQ("", htmlEscape(""));
|
||||
EXPECT_EQ("No Changes", htmlEscape("No Changes"));
|
||||
EXPECT_EQ("No\tChanges+_%^$@~`\n:\\", htmlEscape("No\tChanges+_%^$@~`\n:\\"));
|
||||
EXPECT_EQ(""With Changes"", htmlEscape("\"With Changes\""));
|
||||
EXPECT_EQ(
|
||||
"';!‐"<>&#equals;&#{}"
|
||||
"()", htmlEscape("';!-\"<>=&#{}()"));
|
||||
EXPECT_EQ("""", htmlEscape("\"\""));
|
||||
EXPECT_EQ(
|
||||
"&quot;&lt;&apos;&gt;&amp;",
|
||||
htmlEscape(""<'>&"));
|
||||
}
|
||||
|
||||
TEST(TestUtils, TemperatureConversion) {
|
||||
// Freezing point of water.
|
||||
ASSERT_EQ(32.0, celsiusToFahrenheit(0.0));
|
||||
ASSERT_EQ(0.0, fahrenheitToCelsius(32.0));
|
||||
// Boiling point of water.
|
||||
ASSERT_EQ(212.0, celsiusToFahrenheit(100.0));
|
||||
ASSERT_EQ(100.0, fahrenheitToCelsius(212.0));
|
||||
// Room Temp. (RTP)
|
||||
ASSERT_EQ(77.0, celsiusToFahrenheit(25.0));
|
||||
ASSERT_EQ(25.0, fahrenheitToCelsius(77.0));
|
||||
// Misc
|
||||
ASSERT_EQ(-40.0, fahrenheitToCelsius(-40.0));
|
||||
}
|
||||
|
||||
TEST(TestResultToRawArray, TypicalCase) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(1);
|
||||
irsend.begin();
|
||||
|
||||
// Generate a known message.
|
||||
irsend.reset();
|
||||
irsend.sendNikai(0xD0F2F);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(NIKAI, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kNikaiBits, irsend.capture.bits);
|
||||
EXPECT_EQ(
|
||||
"uint16_t rawData[52] = {4000, 4000, 500, 2000, 500, 2000, "
|
||||
"500, 2000, 500, 2000, 500, 1000, 500, 1000, 500, 2000, 500, 1000, "
|
||||
"500, 2000, 500, 2000, 500, 2000, 500, 2000, 500, 1000, 500, 1000, "
|
||||
"500, 1000, 500, 1000, 500, 2000, 500, 2000, 500, 1000, 500, 2000, "
|
||||
"500, 1000, 500, 1000, 500, 1000, 500, 1000, 500, 8500 };"
|
||||
" // NIKAI D0F2F\n"
|
||||
"uint64_t data = 0xD0F2F;\n",
|
||||
resultToSourceCode(&irsend.capture));
|
||||
uint16_t rawData[52] = { // Data taken from above.
|
||||
4000, 4000, 500, 2000, 500, 2000, 500, 2000, 500, 2000, 500, 1000, 500,
|
||||
1000, 500, 2000, 500, 1000, 500, 2000, 500, 2000, 500, 2000, 500, 2000,
|
||||
500, 1000, 500, 1000, 500, 1000, 500, 1000, 500, 2000, 500, 2000, 500,
|
||||
1000, 500, 2000, 500, 1000, 500, 1000, 500, 1000, 500, 1000, 500, 8500};
|
||||
uint16_t * result = resultToRawArray(&irsend.capture);
|
||||
ASSERT_EQ(52, getCorrectedRawLength(&irsend.capture));
|
||||
EXPECT_STATE_EQ(rawData, result, getCorrectedRawLength(&irsend.capture));
|
||||
if (result != NULL) delete[] result;
|
||||
}
|
||||
|
||||
TEST(TestResultToRawArray, LargeValues) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(1);
|
||||
uint16_t test_data[9] = {10, 20, 30, 40, 50, 60, 70, 80, 90};
|
||||
irsend.begin();
|
||||
irsend.reset();
|
||||
irsend.sendRaw(test_data, 9, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
irrecv.decode(&irsend.capture);
|
||||
uint16_t * result = resultToRawArray(&irsend.capture);
|
||||
ASSERT_EQ(9, getCorrectedRawLength(&irsend.capture));
|
||||
EXPECT_STATE_EQ(test_data, result, 9);
|
||||
if (result != NULL) delete[] result;
|
||||
// Stick in some large values.
|
||||
irsend.capture.rawbuf[3] = 60000;
|
||||
EXPECT_EQ(
|
||||
"uint16_t rawData[11] = {10, 20, 65535, 0, 54465, 40, 50, 60, 70, "
|
||||
"80, 90}; // UNKNOWN 54051FFD\n",
|
||||
resultToSourceCode(&irsend.capture));
|
||||
uint16_t large_test_data[11] = {
|
||||
10, 20, 65535, 0, 54465, 40, 50, 60, 70, 80, 90};
|
||||
ASSERT_EQ(11, getCorrectedRawLength(&irsend.capture));
|
||||
result = resultToRawArray(&irsend.capture);
|
||||
EXPECT_STATE_EQ(large_test_data, result, 11);
|
||||
if (result != NULL) delete[] result;
|
||||
}
|
||||
@@ -16,6 +16,7 @@ GTEST_DIR = ../lib/googletest/googletest
|
||||
|
||||
# Where to find user code.
|
||||
USER_DIR = ../src
|
||||
INCLUDES = -I$(USER_DIR) -I.
|
||||
|
||||
# Flags passed to the preprocessor.
|
||||
# Set Google Test's header directory as a system directory, such that
|
||||
@@ -23,7 +24,7 @@ USER_DIR = ../src
|
||||
CPPFLAGS += -isystem $(GTEST_DIR)/include -DUNIT_TEST
|
||||
|
||||
# Flags passed to the C++ compiler.
|
||||
CXXFLAGS += -g -Wall -Wextra -pthread
|
||||
CXXFLAGS += -g -Wall -Wextra -pthread -std=gnu++11
|
||||
|
||||
# All tests produced by this Makefile. Remember to add new tests you
|
||||
# created to the list.
|
||||
@@ -36,7 +37,9 @@ TESTS = IRutils_test IRsend_test ir_NEC_test ir_GlobalCache_test \
|
||||
ir_Toshiba_test ir_Midea_test ir_Magiquest_test ir_Lasertag_test \
|
||||
ir_Carrier_test ir_Haier_test ir_Hitachi_test ir_GICable_test \
|
||||
ir_Whirlpool_test ir_Lutron_test ir_Electra_test ir_Pioneer_test \
|
||||
ir_MWM_test ir_Vestel_test ir_Teco_test ir_Tcl_test
|
||||
ir_MWM_test ir_Vestel_test ir_Teco_test ir_Tcl_test ir_Lego_test IRac_test \
|
||||
ir_MitsubishiHeavy_test ir_Trotec_test ir_Argo_test ir_Goodweather_test \
|
||||
ir_Inax_test
|
||||
|
||||
# All Google Test headers. Usually you shouldn't change this
|
||||
# definition.
|
||||
@@ -80,7 +83,8 @@ PROTOCOLS = ir_NEC.o ir_Sony.o ir_Samsung.o ir_JVC.o ir_RCMM.o ir_RC5_RC6.o \
|
||||
ir_Kelvinator.o ir_Daikin.o ir_Gree.o ir_Pronto.o ir_Nikai.o ir_Toshiba.o \
|
||||
ir_Midea.o ir_Magiquest.o ir_Lasertag.o ir_Carrier.o ir_Haier.o \
|
||||
ir_Hitachi.o ir_GICable.o ir_Whirlpool.o ir_Lutron.o ir_Electra.o \
|
||||
ir_Pioneer.o ir_MWM.o ir_Vestel.o ir_Teco.o ir_Tcl.o
|
||||
ir_Pioneer.o ir_MWM.o ir_Vestel.o ir_Teco.o ir_Tcl.o ir_Lego.o ir_Argo.o \
|
||||
ir_Trotec.o ir_MitsubishiHeavy.o ir_Goodweather.o ir_Inax.o
|
||||
|
||||
# All the IR Protocol header files.
|
||||
PROTOCOLS_H = $(USER_DIR)/ir_Argo.h \
|
||||
@@ -91,9 +95,12 @@ PROTOCOLS_H = $(USER_DIR)/ir_Argo.h \
|
||||
$(USER_DIR)/ir_Midea.h \
|
||||
$(USER_DIR)/ir_Toshiba.h \
|
||||
$(USER_DIR)/ir_Daikin.h \
|
||||
$(USER_DIR)/ir_Goodweather.h \
|
||||
$(USER_DIR)/ir_Kelvinator.h \
|
||||
$(USER_DIR)/ir_Mitsubishi.h \
|
||||
$(USER_DIR)/ir_MitsubishiHeavy.h \
|
||||
$(USER_DIR)/ir_NEC.h \
|
||||
$(USER_DIR)/ir_Sharp.h \
|
||||
$(USER_DIR)/ir_Samsung.h \
|
||||
$(USER_DIR)/ir_Trotec.h \
|
||||
$(USER_DIR)/ir_Fujitsu.h \
|
||||
@@ -102,14 +109,15 @@ PROTOCOLS_H = $(USER_DIR)/ir_Argo.h \
|
||||
$(USER_DIR)/ir_Whirlpool.h \
|
||||
$(USER_DIR)/ir_Vestel.h \
|
||||
$(USER_DIR)/ir_Tcl.h \
|
||||
$(USER_DIR)/ir_Teco.h
|
||||
$(USER_DIR)/ir_Teco.h \
|
||||
$(USER_DIR)/ir_Trotec.h
|
||||
# Common object files
|
||||
COMMON_OBJ = IRutils.o IRtimer.o IRsend.o IRrecv.o ir_GlobalCache.o \
|
||||
COMMON_OBJ = IRutils.o IRtimer.o IRsend.o IRrecv.o IRac.o ir_GlobalCache.o \
|
||||
$(PROTOCOLS) gtest_main.a
|
||||
# Common dependencies
|
||||
COMMON_DEPS = $(USER_DIR)/IRrecv.h $(USER_DIR)/IRsend.h $(USER_DIR)/IRtimer.h \
|
||||
$(USER_DIR)/IRutils.h $(USER_DIR)/IRremoteESP8266.h \
|
||||
$(PROTOCOLS_H)
|
||||
$(USER_DIR)/IRac.h $(PROTOCOLS_H)
|
||||
|
||||
# Common test dependencies
|
||||
COMMON_TEST_DEPS = $(COMMON_DEPS) IRrecv_test.h IRsend_test.h
|
||||
@@ -140,7 +148,7 @@ IRutils.o : $(USER_DIR)/IRutils.cpp $(USER_DIR)/IRutils.h $(USER_DIR)/IRremoteES
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/IRutils.cpp
|
||||
|
||||
IRutils_test.o : IRutils_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c IRutils_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c IRutils_test.cpp
|
||||
|
||||
IRutils_test : IRutils_test.o ir_NEC.o ir_Nikai.o ir_Toshiba.o $(COMMON_OBJ) gtest_main.a
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -152,7 +160,7 @@ IRsend.o : $(USER_DIR)/IRsend.cpp $(USER_DIR)/IRsend.h $(USER_DIR)/IRremoteESP82
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/IRsend.cpp
|
||||
|
||||
IRsend_test.o : IRsend_test.cpp $(USER_DIR)/IRsend.h $(USER_DIR)/IRrecv.h IRsend_test.h $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c IRsend_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c IRsend_test.cpp
|
||||
|
||||
IRsend_test : IRsend_test.o $(COMMON_OBJ)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -161,16 +169,25 @@ IRrecv.o : $(USER_DIR)/IRrecv.cpp $(USER_DIR)/IRrecv.h $(USER_DIR)/IRremoteESP82
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/IRrecv.cpp
|
||||
|
||||
IRrecv_test.o : IRrecv_test.cpp $(USER_DIR)/IRsend.h $(USER_DIR)/IRrecv.h IRsend_test.h $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c IRrecv_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c IRrecv_test.cpp
|
||||
|
||||
IRrecv_test : IRrecv_test.o $(COMMON_OBJ)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
IRac.o : $(USER_DIR)/IRac.cpp $(USER_DIR)/IRac.h $(COMMON_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/IRac.cpp
|
||||
|
||||
IRac_test.o : IRac_test.cpp $(USER_DIR)/IRac.h $(COMMON_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c IRac_test.cpp
|
||||
|
||||
IRac_test : IRac_test.o $(COMMON_OBJ)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_NEC.o : $(USER_DIR)/ir_NEC.cpp $(USER_DIR)/ir_NEC.h $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_NEC.cpp
|
||||
|
||||
ir_NEC_test.o : ir_NEC_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_NEC_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_NEC_test.cpp
|
||||
|
||||
ir_NEC_test : $(COMMON_OBJ) ir_NEC_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -179,7 +196,7 @@ ir_GlobalCache.o : $(USER_DIR)/ir_GlobalCache.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_GlobalCache.cpp
|
||||
|
||||
ir_GlobalCache_test.o : ir_GlobalCache_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_GlobalCache_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_GlobalCache_test.cpp
|
||||
|
||||
ir_GlobalCache_test : $(COMMON_OBJ) ir_GlobalCache_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -188,7 +205,7 @@ ir_Sherwood.o : $(USER_DIR)/ir_Sherwood.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Sherwood.cpp
|
||||
|
||||
ir_Sherwood_test.o : ir_Sherwood_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Sherwood_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Sherwood_test.cpp
|
||||
|
||||
ir_Sherwood_test : $(COMMON_OBJ) ir_Sherwood_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -197,25 +214,25 @@ ir_Sony.o : $(USER_DIR)/ir_Sony.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Sony.cpp
|
||||
|
||||
ir_Sony_test.o : ir_Sony_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Sony_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Sony_test.cpp
|
||||
|
||||
ir_Sony_test : $(COMMON_OBJ) ir_Sony_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Samsung.o : $(USER_DIR)/ir_Samsung.cpp $(USER_DIR)/ir_Samsung.h $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Samsung.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Samsung.cpp
|
||||
|
||||
ir_Samsung_test.o : ir_Samsung_test.cpp $(USER_DIR)/ir_Samsung.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Samsung_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Samsung_test.cpp
|
||||
|
||||
ir_Samsung_test : $(COMMON_OBJ) ir_Samsung_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Kelvinator.o : $(USER_DIR)/ir_Kelvinator.cpp $(USER_DIR)/ir_Kelvinator.h $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Kelvinator.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Kelvinator.cpp
|
||||
|
||||
ir_Kelvinator_test.o : ir_Kelvinator_test.cpp $(USER_DIR)/ir_Kelvinator.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Kelvinator_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Kelvinator_test.cpp
|
||||
|
||||
ir_Kelvinator_test : $(COMMON_OBJ) ir_Kelvinator_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -224,7 +241,7 @@ ir_JVC.o : $(USER_DIR)/ir_JVC.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_JVC.cpp
|
||||
|
||||
ir_JVC_test.o : ir_JVC_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_JVC_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_JVC_test.cpp
|
||||
|
||||
ir_JVC_test : $(COMMON_OBJ) ir_JVC_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -233,7 +250,7 @@ ir_RCMM.o : $(USER_DIR)/ir_RCMM.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_RCMM.cpp
|
||||
|
||||
ir_RCMM_test.o : ir_RCMM_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_RCMM_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_RCMM_test.cpp
|
||||
|
||||
ir_RCMM_test : $(COMMON_OBJ) ir_RCMM_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -242,34 +259,43 @@ ir_LG.o : $(USER_DIR)/ir_LG.h $(USER_DIR)/ir_LG.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_LG.cpp
|
||||
|
||||
ir_LG_test.o : ir_LG_test.cpp $(USER_DIR)/ir_LG.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_LG_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_LG_test.cpp
|
||||
|
||||
ir_LG_test : $(COMMON_OBJ) ir_LG_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Mitsubishi.o : $(USER_DIR)/ir_Mitsubishi.h $(USER_DIR)/ir_Mitsubishi.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Mitsubishi.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Mitsubishi.cpp
|
||||
|
||||
ir_Mitsubishi_test.o : ir_Mitsubishi_test.cpp $(USER_DIR)/ir_Mitsubishi.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Mitsubishi_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Mitsubishi_test.cpp
|
||||
|
||||
ir_Mitsubishi_test : $(COMMON_OBJ) ir_Mitsubishi_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_MitsubishiHeavy.o : $(USER_DIR)/ir_MitsubishiHeavy.h $(USER_DIR)/ir_MitsubishiHeavy.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_MitsubishiHeavy.cpp
|
||||
|
||||
ir_MitsubishiHeavy_test.o : ir_MitsubishiHeavy_test.cpp $(USER_DIR)/ir_MitsubishiHeavy.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_MitsubishiHeavy_test.cpp
|
||||
|
||||
ir_MitsubishiHeavy_test : $(COMMON_OBJ) ir_MitsubishiHeavy_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Fujitsu.o : $(USER_DIR)/ir_Fujitsu.h $(USER_DIR)/ir_Fujitsu.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Fujitsu.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Fujitsu.cpp
|
||||
|
||||
ir_Fujitsu_test.o : ir_Fujitsu_test.cpp $(USER_DIR)/ir_Fujitsu.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Fujitsu_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Fujitsu_test.cpp
|
||||
|
||||
ir_Fujitsu_test : $(COMMON_OBJ) ir_Fujitsu_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Sharp.o : $(USER_DIR)/ir_Sharp.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Sharp.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Sharp.cpp
|
||||
|
||||
ir_Sharp_test.o : ir_Sharp_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Sharp_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Sharp_test.cpp
|
||||
|
||||
ir_Sharp_test : $(COMMON_OBJ) ir_Sharp_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -278,16 +304,16 @@ ir_RC5_RC6.o : $(USER_DIR)/ir_RC5_RC6.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_RC5_RC6.cpp
|
||||
|
||||
ir_RC5_RC6_test.o : ir_RC5_RC6_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_RC5_RC6_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_RC5_RC6_test.cpp
|
||||
|
||||
ir_RC5_RC6_test : $(COMMON_OBJ) ir_RC5_RC6_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Panasonic.o : $(USER_DIR)/ir_Panasonic.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Panasonic.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Panasonic.cpp
|
||||
|
||||
ir_Panasonic_test.o : ir_Panasonic_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Panasonic_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Panasonic_test.cpp
|
||||
|
||||
ir_Panasonic_test : $(COMMON_OBJ) ir_Panasonic_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -296,7 +322,7 @@ ir_Dish.o : $(USER_DIR)/ir_Dish.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Dish.cpp
|
||||
|
||||
ir_Dish_test.o : ir_Dish_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Dish_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Dish_test.cpp
|
||||
|
||||
ir_Dish_test : $(COMMON_OBJ) ir_Dish_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -305,16 +331,16 @@ ir_Whynter.o : $(USER_DIR)/ir_Whynter.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Whynter.cpp
|
||||
|
||||
ir_Whynter_test.o : ir_Whynter_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Whynter_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Whynter_test.cpp
|
||||
|
||||
ir_Whynter_test : $(COMMON_OBJ) ir_Whynter_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Coolix.o : $(USER_DIR)/ir_Coolix.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Coolix.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Coolix.cpp
|
||||
|
||||
ir_Coolix_test.o : ir_Coolix_test.cpp $(USER_DIR)/ir_Coolix.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Coolix_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Coolix_test.cpp
|
||||
|
||||
ir_Coolix_test : $(COMMON_OBJ) ir_Coolix_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -323,7 +349,7 @@ ir_Aiwa.o : $(USER_DIR)/ir_Aiwa.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Aiwa.cpp
|
||||
|
||||
ir_Aiwa_test.o : ir_Aiwa_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Aiwa_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Aiwa_test.cpp
|
||||
|
||||
ir_Aiwa_test : $(COMMON_OBJ) ir_Aiwa_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -332,7 +358,7 @@ ir_Denon.o : $(USER_DIR)/ir_Denon.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Denon.cpp
|
||||
|
||||
ir_Denon_test.o : ir_Denon_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Denon_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Denon_test.cpp
|
||||
|
||||
ir_Denon_test : $(COMMON_OBJ) ir_Denon_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -341,25 +367,25 @@ ir_Sanyo.o : $(USER_DIR)/ir_Sanyo.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Sanyo.cpp
|
||||
|
||||
ir_Sanyo_test.o : ir_Sanyo_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Sanyo_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Sanyo_test.cpp
|
||||
|
||||
ir_Sanyo_test : $(COMMON_OBJ) ir_Sanyo_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Daikin.o : $(USER_DIR)/ir_Daikin.cpp $(USER_DIR)/ir_Daikin.h $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Daikin.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Daikin.cpp
|
||||
|
||||
ir_Daikin_test.o : ir_Daikin_test.cpp $(USER_DIR)/ir_Daikin.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Daikin_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Daikin_test.cpp
|
||||
|
||||
ir_Daikin_test : $(COMMON_OBJ) ir_Daikin_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Gree.o : $(USER_DIR)/ir_Gree.cpp $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Gree.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Gree.cpp
|
||||
|
||||
ir_Gree_test.o : ir_Gree_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Gree_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Gree_test.cpp
|
||||
|
||||
ir_Gree_test : $(COMMON_OBJ) ir_Gree_test.o ir_Kelvinator.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -368,7 +394,7 @@ ir_Pronto.o : $(USER_DIR)/ir_Pronto.cpp $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Pronto.cpp
|
||||
|
||||
ir_Pronto_test.o : ir_Pronto_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Pronto_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Pronto_test.cpp
|
||||
|
||||
ir_Pronto_test : $(COMMON_OBJ) ir_Pronto_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -377,25 +403,25 @@ ir_Nikai.o : $(USER_DIR)/ir_Nikai.cpp $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Nikai.cpp
|
||||
|
||||
ir_Nikai_test.o : ir_Nikai_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Nikai_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Nikai_test.cpp
|
||||
|
||||
ir_Nikai_test : $(COMMON_OBJ) ir_Nikai_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Toshiba.o : $(USER_DIR)/ir_Toshiba.cpp $(USER_DIR)/ir_Toshiba.h $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Toshiba.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Toshiba.cpp
|
||||
|
||||
ir_Toshiba_test.o : ir_Toshiba_test.cpp $(USER_DIR)/ir_Toshiba.h $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Toshiba_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Toshiba_test.cpp
|
||||
|
||||
ir_Toshiba_test : $(COMMON_OBJ) ir_Toshiba_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Midea.o : $(USER_DIR)/ir_Midea.cpp $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Midea.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Midea.cpp
|
||||
|
||||
ir_Midea_test.o : ir_Midea_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Midea_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Midea_test.cpp
|
||||
|
||||
ir_Midea_test : $(COMMON_OBJ) ir_Midea_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -404,7 +430,7 @@ ir_Magiquest.o : $(USER_DIR)/ir_Magiquest.cpp $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Magiquest.cpp
|
||||
|
||||
ir_Magiquest_test.o : ir_Magiquest_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Magiquest_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Magiquest_test.cpp
|
||||
|
||||
ir_Magiquest_test : $(COMMON_OBJ) ir_Magiquest_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -413,7 +439,7 @@ ir_Lasertag.o : $(USER_DIR)/ir_Lasertag.cpp $(USER_DIR)/ir_RC5_RC6.cpp $(GTEST_H
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Lasertag.cpp
|
||||
|
||||
ir_Lasertag_test.o : ir_Lasertag_test.cpp $(USER_DIR)/ir_RC5_RC6.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Lasertag_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Lasertag_test.cpp
|
||||
|
||||
ir_Lasertag_test : $(COMMON_OBJ) ir_Lasertag_test.o ir_RC5_RC6.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -422,25 +448,25 @@ ir_Carrier.o : $(USER_DIR)/ir_Carrier.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Carrier.cpp
|
||||
|
||||
ir_Carrier_test.o : ir_Carrier_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Carrier_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Carrier_test.cpp
|
||||
|
||||
ir_Carrier_test : $(COMMON_OBJ) ir_Carrier_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Haier.o : $(USER_DIR)/ir_Haier.cpp $(USER_DIR)/ir_Haier.h $(COMMON_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Haier.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Haier.cpp
|
||||
|
||||
ir_Haier_test.o : ir_Haier_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Haier_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Haier_test.cpp
|
||||
|
||||
ir_Haier_test : $(COMMON_OBJ) ir_Haier_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Hitachi.o : $(USER_DIR)/ir_Hitachi.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Hitachi.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Hitachi.cpp
|
||||
|
||||
ir_Hitachi_test.o : ir_Hitachi_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Hitachi_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Hitachi_test.cpp
|
||||
|
||||
ir_Hitachi_test : $(COMMON_OBJ) ir_Hitachi_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -449,16 +475,16 @@ ir_GICable.o : $(USER_DIR)/ir_GICable.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_GICable.cpp
|
||||
|
||||
ir_GICable_test.o : ir_GICable_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_GICable_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_GICable_test.cpp
|
||||
|
||||
ir_GICable_test : $(COMMON_OBJ) ir_GICable_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Whirlpool.o : $(USER_DIR)/ir_Whirlpool.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Whirlpool.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Whirlpool.cpp
|
||||
|
||||
ir_Whirlpool_test.o : ir_Whirlpool_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Whirlpool_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Whirlpool_test.cpp
|
||||
|
||||
ir_Whirlpool_test : $(COMMON_OBJ) ir_Whirlpool_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -467,7 +493,7 @@ ir_Lutron.o : $(USER_DIR)/ir_Lutron.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Lutron.cpp
|
||||
|
||||
ir_Lutron_test.o : ir_Lutron_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Lutron_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Lutron_test.cpp
|
||||
|
||||
ir_Lutron_test : $(COMMON_OBJ) ir_Lutron_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -476,7 +502,7 @@ ir_Electra.o : $(USER_DIR)/ir_Electra.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Electra.cpp
|
||||
|
||||
ir_Electra_test.o : ir_Electra_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Electra_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Electra_test.cpp
|
||||
|
||||
ir_Electra_test : $(COMMON_OBJ) ir_Electra_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -485,7 +511,7 @@ ir_Pioneer.o : $(USER_DIR)/ir_Pioneer.cpp $(COMMON_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Pioneer.cpp
|
||||
|
||||
ir_Pioneer_test.o : ir_Pioneer_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Pioneer_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Pioneer_test.cpp
|
||||
|
||||
ir_Pioneer_test : $(COMMON_OBJ) ir_Pioneer_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -494,34 +520,79 @@ ir_MWM.o : $(USER_DIR)/ir_MWM.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_MWM.cpp
|
||||
|
||||
ir_MWM_test.o : ir_MWM_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_MWM_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_MWM_test.cpp
|
||||
|
||||
ir_MWM_test : $(COMMON_OBJ) ir_MWM_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Vestel.o : $(USER_DIR)/ir_Vestel.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Vestel.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Vestel.cpp
|
||||
|
||||
ir_Vestel_test.o : ir_Vestel_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Vestel_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Vestel_test.cpp
|
||||
|
||||
ir_Vestel_test : $(COMMON_OBJ) ir_Vestel_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Teco.o : $(USER_DIR)/ir_Teco.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Teco.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Teco.cpp
|
||||
|
||||
ir_Teco_test.o : ir_Teco_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Teco_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Teco_test.cpp
|
||||
|
||||
ir_Teco_test : $(COMMON_OBJ) ir_Teco_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Tcl.o : $(USER_DIR)/ir_Tcl.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Tcl.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Tcl.cpp
|
||||
|
||||
ir_Tcl_test.o : ir_Tcl_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -I$(USER_DIR) -c ir_Tcl_test.cpp
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Tcl_test.cpp
|
||||
|
||||
ir_Tcl_test : $(COMMON_OBJ) ir_Tcl_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Lego.o : $(USER_DIR)/ir_Lego.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/ir_Lego.cpp
|
||||
|
||||
ir_Lego_test.o : ir_Lego_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Lego_test.cpp
|
||||
|
||||
ir_Lego_test : $(COMMON_OBJ) ir_Lego_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Argo.o : $(USER_DIR)/ir_Argo.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Argo.cpp
|
||||
|
||||
ir_Argo_test.o : ir_Argo_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Argo_test.cpp
|
||||
|
||||
ir_Argo_test : $(COMMON_OBJ) ir_Argo_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Trotec.o : $(USER_DIR)/ir_Trotec.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Trotec.cpp
|
||||
|
||||
ir_Trotec_test.o : ir_Trotec_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Trotec_test.cpp
|
||||
|
||||
ir_Trotec_test : $(COMMON_OBJ) ir_Trotec_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Goodweather.o : $(USER_DIR)/ir_Goodweather.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Goodweather.cpp
|
||||
|
||||
ir_Goodweather_test.o : ir_Goodweather_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Goodweather_test.cpp
|
||||
|
||||
ir_Goodweather_test : $(COMMON_OBJ) ir_Goodweather_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
|
||||
ir_Inax.o : $(USER_DIR)/ir_Inax.cpp $(COMMON_DEPS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c $(USER_DIR)/ir_Inax.cpp
|
||||
|
||||
ir_Inax_test.o : ir_Inax_test.cpp $(COMMON_TEST_DEPS) $(GTEST_HEADERS)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDES) -c ir_Inax_test.cpp
|
||||
|
||||
ir_Inax_test : $(COMMON_OBJ) ir_Inax_test.o
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
|
||||
@@ -14,6 +14,7 @@ TEST(TestSendAiwa, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendAiwaRCT501(0x7F); // Aiwa Power Toggle.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
@@ -43,6 +44,7 @@ TEST(TestSendAiwa, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendAiwaRCT501(0x7F, kAiwaRcT501Bits, 0); // No repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
@@ -54,6 +56,7 @@ TEST(TestSendAiwa, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendAiwaRCT501(0x7F, kAiwaRcT501Bits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
@@ -66,6 +69,7 @@ TEST(TestSendAiwa, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendAiwaRCT501(0x7F, kAiwaRcT501Bits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
@@ -86,6 +90,7 @@ TEST(TestSendAiwa, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendAiwaRCT501(0x12, 8);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
@@ -98,6 +103,7 @@ TEST(TestSendAiwa, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendAiwaRCT501(0x1234567890, 37);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
|
||||
@@ -0,0 +1,221 @@
|
||||
// Copyright 2019 David Conran
|
||||
#include "ir_Argo.h"
|
||||
#include "IRrecv.h"
|
||||
#include "IRrecv_test.h"
|
||||
#include "IRsend.h"
|
||||
#include "IRsend_test.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
|
||||
TEST(TestArgoACClass, toCommon) {
|
||||
IRArgoAC ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kArgoCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kArgoFan3);
|
||||
ac.setMax(true);
|
||||
ac.setNight(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::ARGO, ac.toCommon().protocol);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(0, ac.toCommon().sleep);
|
||||
ASSERT_TRUE(ac.toCommon().turbo);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
|
||||
TEST(TestArgoACClass, MessageConstructon) {
|
||||
IRArgoAC ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setTemp(20);
|
||||
ac.setMode(kArgoCool);
|
||||
ac.setFan(kArgoFanAuto);
|
||||
ac.setRoomTemp(21);
|
||||
ac.setiFeel(true);
|
||||
ac.setMax(true);
|
||||
ac.setNight(true);
|
||||
|
||||
// Don't implicitly trust this. It's just a guess.
|
||||
uint8_t expected[kArgoStateLength] = {
|
||||
0xAC, 0xF5, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xD6, 0x01};
|
||||
EXPECT_STATE_EQ(expected, ac.getRaw(), kArgoBits);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 0 (COOL), Fan: 0 (AUTO), Temp: 20C, Room Temp: 21C, "
|
||||
"Max: On, iFeel: On, Night: On",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
// Tests for sendArgo().
|
||||
|
||||
// Test sending typical data only.
|
||||
TEST(TestSendArgo, SendDataOnly) {
|
||||
IRsendTest irsend(0);
|
||||
irsend.begin();
|
||||
uint8_t data[kArgoStateLength] = {
|
||||
0xAC, 0xF5, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xD6, 0x01};
|
||||
|
||||
irsend.sendArgo(data);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m6400s3300"
|
||||
"m400s900m400s900m400s2200m400s2200m400s900m400s2200m400s900m400s2200"
|
||||
"m400s2200m400s900m400s2200m400s900m400s2200m400s2200m400s2200m400s2200"
|
||||
"m400s900m400s900m400s900m400s900m400s900m400s900m400s900m400s900"
|
||||
"m400s900m400s900m400s2200m400s900m400s900m400s2200m400s900m400s900"
|
||||
"m400s900m400s2200m400s900m400s900m400s900m400s900m400s900m400s900"
|
||||
"m400s900m400s900m400s900m400s900m400s900m400s900m400s900m400s900"
|
||||
"m400s900m400s900m400s900m400s900m400s900m400s900m400s900m400s900"
|
||||
"m400s900m400s900m400s900m400s900m400s900m400s900m400s900m400s900"
|
||||
"m400s900m400s900m400s900m400s900m400s900m400s900m400s900m400s900"
|
||||
"m400s900m400s900m400s2200m400s2200m400s900m400s2200m400s900m400s2200"
|
||||
"m400s900m400s2200m400s2200m400s900m400s2200m400s900m400s2200m400s2200"
|
||||
"m400s2200m400s900m400s900m400s900m400s900m400s900m400s900"
|
||||
"m400s900",
|
||||
irsend.outputStr());
|
||||
}
|
||||
|
||||
// Tests for decodeArgo().
|
||||
// Decode normal Argo messages.
|
||||
|
||||
TEST(TestDecodeArgo, SyntheticDecode) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
// Synthesised Normal Argo message.
|
||||
irsend.reset();
|
||||
uint8_t expectedState[kArgoStateLength] = {
|
||||
0xAC, 0xF5, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0xAC, 0xD6, 0x01};
|
||||
irsend.sendArgo(expectedState);
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(decode_type_t::ARGO, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kArgoBits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
|
||||
}
|
||||
|
||||
|
||||
TEST(TestArgoACClass, SetAndGetTemp) {
|
||||
IRArgoAC ac(0);
|
||||
|
||||
ac.setTemp(25);
|
||||
EXPECT_EQ(25, ac.getTemp());
|
||||
ac.setTemp(kArgoMinTemp);
|
||||
EXPECT_EQ(kArgoMinTemp, ac.getTemp());
|
||||
ac.setTemp(kArgoMaxTemp);
|
||||
EXPECT_EQ(kArgoMaxTemp, ac.getTemp());
|
||||
ac.setTemp(kArgoMinTemp - 1);
|
||||
EXPECT_EQ(kArgoMinTemp, ac.getTemp());
|
||||
ac.setTemp(kArgoMaxTemp + 1);
|
||||
EXPECT_EQ(kArgoMaxTemp, ac.getTemp());
|
||||
}
|
||||
|
||||
TEST(TestArgoACClass, SetAndGetRoomTemp) {
|
||||
IRArgoAC ac(0);
|
||||
|
||||
ac.setRoomTemp(25);
|
||||
EXPECT_EQ(25, ac.getRoomTemp());
|
||||
ac.setRoomTemp(kArgoTempOffset);
|
||||
EXPECT_EQ(kArgoTempOffset, ac.getRoomTemp());
|
||||
ac.setRoomTemp(kArgoMaxRoomTemp);
|
||||
EXPECT_EQ(kArgoMaxRoomTemp, ac.getRoomTemp());
|
||||
ac.setRoomTemp(kArgoTempOffset - 1);
|
||||
EXPECT_EQ(kArgoTempOffset, ac.getRoomTemp());
|
||||
ac.setRoomTemp(kArgoMaxRoomTemp + 1);
|
||||
EXPECT_EQ(kArgoMaxRoomTemp, ac.getRoomTemp());
|
||||
}
|
||||
|
||||
TEST(TestArgoACClass, SetAndGetMode) {
|
||||
IRArgoAC ac(0);
|
||||
|
||||
ac.setMode(kArgoHeat);
|
||||
EXPECT_EQ(kArgoHeat, ac.getMode());
|
||||
ac.setMode(kArgoCool);
|
||||
EXPECT_EQ(kArgoCool, ac.getMode());
|
||||
ac.setMode(kArgoDry);
|
||||
EXPECT_EQ(kArgoDry, ac.getMode());
|
||||
ac.setMode(kArgoAuto);
|
||||
EXPECT_EQ(kArgoAuto, ac.getMode());
|
||||
ac.setMode(kArgoHeatAuto);
|
||||
EXPECT_EQ(kArgoHeatAuto, ac.getMode());
|
||||
ac.setMode(kArgoOff);
|
||||
EXPECT_EQ(kArgoOff, ac.getMode());
|
||||
ac.setMode(255);
|
||||
EXPECT_EQ(kArgoAuto, ac.getMode());
|
||||
}
|
||||
|
||||
TEST(TestArgoACClass, SetAndGetFan) {
|
||||
IRArgoAC ac(0);
|
||||
|
||||
ac.setFan(kArgoFan3);
|
||||
EXPECT_EQ(kArgoFan3, ac.getFan());
|
||||
ac.setFan(kArgoFan1);
|
||||
EXPECT_EQ(kArgoFan1, ac.getFan());
|
||||
ac.setFan(kArgoFanAuto);
|
||||
EXPECT_EQ(kArgoFanAuto, ac.getFan());
|
||||
ac.setFan(kArgoFan3);
|
||||
EXPECT_EQ(kArgoFan3, ac.getFan());
|
||||
ASSERT_NE(7, kArgoFan3);
|
||||
// Now try some unexpected value.
|
||||
ac.setFan(7);
|
||||
EXPECT_EQ(kArgoFan3, ac.getFan());
|
||||
}
|
||||
|
||||
TEST(TestArgoACClass, Night) {
|
||||
IRArgoAC ac(0);
|
||||
ac.setNight(false);
|
||||
ASSERT_FALSE(ac.getNight());
|
||||
ac.setNight(true);
|
||||
ASSERT_TRUE(ac.getNight());
|
||||
ac.setNight(false);
|
||||
ASSERT_FALSE(ac.getNight());
|
||||
}
|
||||
|
||||
TEST(TestArgoACClass, iFeel) {
|
||||
IRArgoAC ac(0);
|
||||
ac.setiFeel(false);
|
||||
ASSERT_FALSE(ac.getiFeel());
|
||||
ac.setiFeel(true);
|
||||
ASSERT_TRUE(ac.getiFeel());
|
||||
ac.setiFeel(false);
|
||||
ASSERT_FALSE(ac.getiFeel());
|
||||
}
|
||||
|
||||
TEST(TestArgoACClass, Power) {
|
||||
IRArgoAC ac(0);
|
||||
ac.setPower(false);
|
||||
ASSERT_FALSE(ac.getPower());
|
||||
ac.setPower(true);
|
||||
ASSERT_TRUE(ac.getPower());
|
||||
ac.setPower(false);
|
||||
ASSERT_FALSE(ac.getPower());
|
||||
}
|
||||
|
||||
TEST(TestArgoACClass, Max) {
|
||||
IRArgoAC ac(0);
|
||||
ac.setMax(false);
|
||||
ASSERT_FALSE(ac.getMax());
|
||||
ac.setMax(true);
|
||||
ASSERT_TRUE(ac.getMax());
|
||||
ac.setMax(false);
|
||||
ASSERT_FALSE(ac.getMax());
|
||||
}
|
||||
|
||||
TEST(TestUtils, Housekeeping) {
|
||||
ASSERT_EQ("ARGO", typeToString(decode_type_t::ARGO));
|
||||
ASSERT_EQ(decode_type_t::ARGO, strToDecodeType("ARGO"));
|
||||
ASSERT_TRUE(hasACState(decode_type_t::ARGO));
|
||||
}
|
||||
@@ -15,6 +15,7 @@ TEST(TestSendCarrierAC, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendCarrierAC(0x0);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8532s4228"
|
||||
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
|
||||
"m628s532m628s532m628s532m628s532m628s532m628s532m628s532m628s532"
|
||||
@@ -37,6 +38,7 @@ TEST(TestSendCarrierAC, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendCarrierAC(0x12345678);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8532s4228"
|
||||
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
|
||||
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
|
||||
@@ -60,6 +62,7 @@ TEST(TestSendCarrierAC, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendCarrierAC(0x4CCA541D);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8532s4228"
|
||||
"m628s532m628s1320m628s532m628s532m628s1320m628s1320m628s532m628s532"
|
||||
"m628s1320m628s1320m628s532m628s532m628s1320m628s532m628s1320m628s532"
|
||||
@@ -89,6 +92,7 @@ TEST(TestSendCarrierAC, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendCarrierAC(0x12345678, kCarrierAcBits, 2); // two repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8532s4228"
|
||||
"m628s532m628s532m628s532m628s1320m628s532m628s532m628s1320m628s532"
|
||||
"m628s532m628s532m628s1320m628s1320m628s532m628s1320m628s532m628s532"
|
||||
|
||||
@@ -15,6 +15,7 @@ TEST(TestSendCoolix, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendCOOLIX(0x0);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
|
||||
@@ -36,6 +37,7 @@ TEST(TestSendCoolix, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendCOOLIX(0xAA55AA);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
|
||||
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
|
||||
@@ -57,6 +59,7 @@ TEST(TestSendCoolix, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendCOOLIX(0xFFFFFF);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
@@ -84,6 +87,7 @@ TEST(TestSendCoolix, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendCOOLIX(0xAA55AA, kCoolixBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
|
||||
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
|
||||
@@ -103,6 +107,7 @@ TEST(TestSendCoolix, SendWithRepeats) {
|
||||
irsend.outputStr());
|
||||
irsend.sendCOOLIX(0xAA55AA, kCoolixBits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
|
||||
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
|
||||
@@ -138,6 +143,7 @@ TEST(TestSendCoolix, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendCOOLIX(0x0, 8);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
|
||||
@@ -151,6 +157,7 @@ TEST(TestSendCoolix, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendCOOLIX(0x1234567890ABCDEF, 64);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s1680m560s560m560s560m560s1680m560s560"
|
||||
"m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560m560s1680"
|
||||
@@ -388,6 +395,8 @@ TEST(TestCoolixACClass, SetAndGetMode) {
|
||||
TEST(TestCoolixACClass, SetAndGetFan) {
|
||||
IRCoolixAC ircoolix(0);
|
||||
|
||||
// This mode allows pretty much everything except Auto0 speed.
|
||||
ircoolix.setMode(kCoolixCool);
|
||||
ircoolix.setFan(kCoolixFanMax);
|
||||
EXPECT_EQ(kCoolixFanMax, ircoolix.getFan());
|
||||
ircoolix.setFan(kCoolixFanMin);
|
||||
@@ -396,12 +405,29 @@ TEST(TestCoolixACClass, SetAndGetFan) {
|
||||
EXPECT_EQ(kCoolixFanZoneFollow, ircoolix.getFan());
|
||||
ircoolix.setFan(kCoolixFanAuto);
|
||||
EXPECT_EQ(kCoolixFanAuto, ircoolix.getFan());
|
||||
ircoolix.setFan(kCoolixFanAuto0);
|
||||
EXPECT_EQ(kCoolixFanAuto, ircoolix.getFan());
|
||||
ircoolix.setFan(kCoolixFanMax);
|
||||
EXPECT_EQ(kCoolixFanMax, ircoolix.getFan());
|
||||
ASSERT_NE(3, kCoolixFanAuto);
|
||||
// Now try some unexpected value.
|
||||
ircoolix.setFan(3);
|
||||
EXPECT_EQ(kCoolixFanAuto, ircoolix.getFan());
|
||||
|
||||
// These modes allows pretty much everything except Auto speed.
|
||||
ircoolix.setMode(kCoolixDry);
|
||||
EXPECT_EQ(kCoolixFanAuto0, ircoolix.getFan());
|
||||
ircoolix.setFan(kCoolixFanMax);
|
||||
EXPECT_EQ(kCoolixFanMax, ircoolix.getFan());
|
||||
ircoolix.setFan(kCoolixFanAuto);
|
||||
EXPECT_EQ(kCoolixFanAuto0, ircoolix.getFan());
|
||||
|
||||
ircoolix.setMode(kCoolixAuto);
|
||||
EXPECT_EQ(kCoolixFanAuto0, ircoolix.getFan());
|
||||
ircoolix.setFan(kCoolixFanMax);
|
||||
EXPECT_EQ(kCoolixFanMax, ircoolix.getFan());
|
||||
ircoolix.setFan(kCoolixFanAuto0);
|
||||
EXPECT_EQ(kCoolixFanAuto0, ircoolix.getFan());
|
||||
}
|
||||
|
||||
TEST(TestCoolixACClass, SetGetClearSensorTempAndZoneFollow) {
|
||||
@@ -590,3 +616,132 @@ TEST(TestCoolixACClass, Issue624HandleSpecialStatesBetter) {
|
||||
ac.toString());
|
||||
EXPECT_EQ(0xB2BF40, ac.getRaw());
|
||||
}
|
||||
|
||||
TEST(TestCoolixACClass, toCommon) {
|
||||
IRCoolixAC ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kCoolixCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kCoolixFanMax);
|
||||
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::COOLIX, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
// Unsupported.
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
|
||||
TEST(TestCoolixACClass, Issue722) {
|
||||
IRrecv irrecv(0);
|
||||
IRCoolixAC ac(0);
|
||||
|
||||
// Auto 17C ON pressed
|
||||
uint32_t on_auto_17c_fan_auto0 = 0xB21F08;
|
||||
ac.begin();
|
||||
ac.setPower(true);
|
||||
ac.setMode(kCoolixAuto);
|
||||
ac.setFan(kCoolixFanAuto);
|
||||
ac.setTemp(17);
|
||||
EXPECT_EQ(on_auto_17c_fan_auto0, ac.getRaw());
|
||||
|
||||
// Off
|
||||
uint32_t off = 0xB27BE0;
|
||||
ac.off();
|
||||
EXPECT_EQ(off, ac.getRaw());
|
||||
|
||||
// ON Auto Temp 18C
|
||||
uint32_t on_auto_18c_fan_auto0 = 0xB21F18;
|
||||
ac.setTemp(18);
|
||||
EXPECT_EQ(on_auto_18c_fan_auto0, ac.getRaw());
|
||||
|
||||
// Set Mode Cool 18C
|
||||
uint32_t on_cool_18c_fan_auto = 0xB2BF10;
|
||||
ac.setMode(kCoolixCool);
|
||||
EXPECT_EQ(on_cool_18c_fan_auto, ac.getRaw());
|
||||
|
||||
// Set Mode DRY 18C
|
||||
uint32_t on_dry_18c_fan_auto0 = 0xB21F14;
|
||||
ac.setMode(kCoolixDry);
|
||||
EXPECT_EQ(on_dry_18c_fan_auto0, ac.getRaw());
|
||||
|
||||
// Set Mode HEAT 18C
|
||||
uint32_t on_heat_18c_fan_auto = 0xB2BF1C;
|
||||
ac.setMode(kCoolixHeat);
|
||||
EXPECT_EQ(on_heat_18c_fan_auto, ac.getRaw());
|
||||
|
||||
// Set mode FAN
|
||||
uint32_t on_fan_18c_fan_auto = 0xB2BFE4;
|
||||
ac.setMode(kCoolixFan);
|
||||
EXPECT_EQ(on_fan_18c_fan_auto, ac.getRaw());
|
||||
|
||||
// Fan level 2 (initial was auto)
|
||||
uint32_t on_fan_18c_fan_min = 0xB29FE4;
|
||||
ac.setFan(kCoolixFanMin);
|
||||
EXPECT_EQ(on_fan_18c_fan_min, ac.getRaw());
|
||||
|
||||
// Fan level 3
|
||||
uint32_t on_fan_18c_fan_med = 0xB25FE4;
|
||||
ac.setFan(kCoolixFanMed);
|
||||
EXPECT_EQ(on_fan_18c_fan_med, ac.getRaw());
|
||||
|
||||
// Fan level 4
|
||||
uint32_t on_fan_18c_fan_max = 0xB23FE4;
|
||||
ac.setFan(kCoolixFanMax);
|
||||
EXPECT_EQ(on_fan_18c_fan_max, ac.getRaw());
|
||||
|
||||
// Test sending the last message to verify the class send() method works.
|
||||
ac.send();
|
||||
ac._irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&ac._irsend.capture));
|
||||
EXPECT_EQ(COOLIX, ac._irsend.capture.decode_type);
|
||||
EXPECT_EQ(kCoolixBits, ac._irsend.capture.bits);
|
||||
EXPECT_EQ(on_fan_18c_fan_max, ac._irsend.capture.value);
|
||||
EXPECT_EQ(0x0, ac._irsend.capture.address);
|
||||
EXPECT_EQ(0x0, ac._irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
// Raw data supplied by @mariusmotea
|
||||
"f38000d50"
|
||||
// 4434,4376,
|
||||
"m4480s4480"
|
||||
// 566,1614,592,504,566,1618,566,1616,568,528,564,532,564,1616,568,532,
|
||||
"m560s1680m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560"
|
||||
// 566,530,566,1620,568,528,566,530,566,1618,564,1618,566,530,564,1624,
|
||||
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680"
|
||||
// 538,560,566,530,564,1620,566,1618,566,1618,566,1616,566,1616,566,1620,
|
||||
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
|
||||
// 568,1620,566,1616,566,530,566,530,564,530,562,532,564,530,566,530,
|
||||
"m560s1680m560s1680m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
// 566,1622,566,1616,540,1642,566,528,566,530,566,1616,566,530,566,532,
|
||||
"m560s1680m560s1680m560s1680m560s560m560s560m560s1680m560s560m560s560"
|
||||
// 564,532,564,530,566,530,566,1614,566,1616,562,532,564,1620,566,1618,
|
||||
"m560s560m560s560m560s560m560s1680m560s1680m560s560m560s1680m560s1680"
|
||||
// 538,5254,4432,4364,566,1616,568,530,564,1620,568,1616,564,532,564,530,
|
||||
"m560s5040m4480s4480m560s1680m560s560m560s1680m560s1680m560s560m560s560"
|
||||
// 566,1616,566,532,564,532,566,1620,568,528,566,530,566,1616,564,1618,
|
||||
"m560s1680m560s560m560s560m560s1680m560s560m560s560m560s1680m560s1680"
|
||||
// 566,530,566,1622,566,532,566,528,566,1620,568,1614,566,1618,566,1618,
|
||||
"m560s560m560s1680m560s560m560s560m560s1680m560s1680m560s1680m560s1680"
|
||||
// 566,1614,568,1618,566,1622,568,1616,566,530,564,530,566,530,566,528,
|
||||
"m560s1680m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
|
||||
// 564,530,566,532,566,1622,564,1616,566,1616,564,532,564,530,564,1616,
|
||||
"m560s560m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s1680"
|
||||
// 564,530,564,532,566,530,564,530,566,528,564,1618,564,1618,564,532,
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s1680m560s560"
|
||||
// 564,1620,566,1618,562 // Raw data matches what is expected.
|
||||
"m560s1680m560s1680m560s5040", ac._irsend.outputStr());
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
@@ -14,6 +14,7 @@ TEST(TestSendDenon, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendDenon(0x2278); // Denon AVR Power On. (Sharp)
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s780m260s1820m260s780m260s780m260s780m260s1820m260s780m260s780"
|
||||
"m260s1820m260s1820m260s1820m260s1820m260s780m260s780m260s780"
|
||||
"m260s43602"
|
||||
@@ -24,8 +25,9 @@ TEST(TestSendDenon, SendDataOnly) {
|
||||
|
||||
irsend.reset();
|
||||
// Denon Eco Mode On. (Panasonic/Kaseikyo)
|
||||
irsend.sendDenon(0x2A4C028D6CE3, DENON_48_BITS);
|
||||
irsend.sendDenon(0x2A4C028D6CE3, kDenon48Bits);
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s432m432s1296m432s432m432s1296m432s432m432s1296m432s432"
|
||||
"m432s432m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s432"
|
||||
@@ -43,8 +45,9 @@ TEST(TestSendDenon, SendNormalWithRepeats) {
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendDenon(0x2278, DENON_BITS, 1); // 1 repeat.
|
||||
irsend.sendDenon(0x2278, kDenonBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s780m260s1820m260s780m260s780m260s780m260s1820m260s780m260s780"
|
||||
"m260s1820m260s1820m260s1820m260s1820m260s780m260s780m260s780"
|
||||
"m260s43602"
|
||||
@@ -58,8 +61,9 @@ TEST(TestSendDenon, SendNormalWithRepeats) {
|
||||
"m260s780m260s780m260s780m260s780m260s1820m260s1820m260s1820"
|
||||
"m260s43602",
|
||||
irsend.outputStr());
|
||||
irsend.sendDenon(0x2278, DENON_BITS, 2); // 2 repeats.
|
||||
irsend.sendDenon(0x2278, kDenonBits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s780m260s1820m260s780m260s780m260s780m260s1820m260s780m260s780"
|
||||
"m260s1820m260s1820m260s1820m260s1820m260s780m260s780m260s780"
|
||||
"m260s43602"
|
||||
@@ -86,8 +90,9 @@ TEST(TestSendDenon, Send48BitWithRepeats) {
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendDenon(0x2A4C028D6CE3, DENON_48_BITS, 1); // 1 repeat.
|
||||
irsend.sendDenon(0x2A4C028D6CE3, kDenon48Bits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s432m432s1296m432s432m432s1296m432s432m432s1296m432s432"
|
||||
"m432s432m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s432"
|
||||
@@ -105,8 +110,9 @@ TEST(TestSendDenon, Send48BitWithRepeats) {
|
||||
"m432s1296m432s1296m432s1296m432s432m432s432m432s432m432s1296m432s1296"
|
||||
"m432s98928",
|
||||
irsend.outputStr());
|
||||
irsend.sendDenon(0x2A4C028D6CE3, DENON_48_BITS, 2); // 2 repeats.
|
||||
irsend.sendDenon(0x2A4C028D6CE3, kDenon48Bits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s432m432s1296m432s432m432s1296m432s432m432s1296m432s432"
|
||||
"m432s432m432s1296m432s432m432s432m432s1296m432s1296m432s432m432s432"
|
||||
@@ -142,6 +148,7 @@ TEST(TestSendDenon, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendDenon(0x12, 8);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s780m260s780m260s780m260s1820m260s780m260s780m260s1820m260s780"
|
||||
"m260s43602"
|
||||
"m260s1820m260s1820m260s1820m260s780m260s1820m260s1820m260s780m260s1820"
|
||||
@@ -151,6 +158,7 @@ TEST(TestSendDenon, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendDenon(0x1234567890ABCDEF, 64);
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s432m432s432m432s1296m432s432m432s432m432s1296m432s432"
|
||||
"m432s432m432s432m432s1296m432s1296m432s432m432s1296m432s432m432s432"
|
||||
@@ -177,9 +185,9 @@ TEST(TestDecodeDenon, NormalDecodeWithStrict) {
|
||||
irsend.sendDenon(0x2278);
|
||||
irsend.makeDecodeResult();
|
||||
|
||||
ASSERT_TRUE(irrecv.decodeDenon(&irsend.capture, DENON_BITS, true));
|
||||
ASSERT_TRUE(irrecv.decodeDenon(&irsend.capture, kDenonBits, true));
|
||||
EXPECT_EQ(DENON, irsend.capture.decode_type);
|
||||
EXPECT_EQ(DENON_BITS, irsend.capture.bits);
|
||||
EXPECT_EQ(kDenonBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x2278, irsend.capture.value);
|
||||
EXPECT_EQ(0x2, irsend.capture.address);
|
||||
EXPECT_EQ(0x79, irsend.capture.command);
|
||||
@@ -200,11 +208,11 @@ TEST(TestDecodeDenon, NormalDecodeWithStrict) {
|
||||
|
||||
// Normal Denon 48-bit message. (Panasonic/Kaseikyo)
|
||||
irsend.reset();
|
||||
irsend.sendDenon(0x2A4C028D6CE3, DENON_48_BITS);
|
||||
irsend.sendDenon(0x2A4C028D6CE3, kDenon48Bits);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decodeDenon(&irsend.capture, DENON_48_BITS, true));
|
||||
ASSERT_TRUE(irrecv.decodeDenon(&irsend.capture, kDenon48Bits, true));
|
||||
EXPECT_EQ(DENON, irsend.capture.decode_type);
|
||||
EXPECT_EQ(DENON_48_BITS, irsend.capture.bits);
|
||||
EXPECT_EQ(kDenon48Bits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x2A4C028D6CE3, irsend.capture.value);
|
||||
EXPECT_EQ(0x2A4C, irsend.capture.address);
|
||||
EXPECT_EQ(0x028D6CE3, irsend.capture.command);
|
||||
@@ -227,9 +235,9 @@ TEST(TestDecodeDenon, DecodeGlobalCacheExample) {
|
||||
irsend.sendGC(gc_test_power, 67);
|
||||
irsend.makeDecodeResult();
|
||||
|
||||
ASSERT_TRUE(irrecv.decodeDenon(&irsend.capture, DENON_BITS, true));
|
||||
ASSERT_TRUE(irrecv.decodeDenon(&irsend.capture, kDenonBits, true));
|
||||
EXPECT_EQ(DENON, irsend.capture.decode_type);
|
||||
EXPECT_EQ(DENON_BITS, irsend.capture.bits);
|
||||
EXPECT_EQ(kDenonBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x2278, irsend.capture.value);
|
||||
EXPECT_EQ(0x2, irsend.capture.address);
|
||||
EXPECT_EQ(0x79, irsend.capture.command);
|
||||
@@ -248,9 +256,9 @@ TEST(TestDecodeDenon, DecodeGlobalCacheExample) {
|
||||
irsend.sendGC(gc_test_eco, 103);
|
||||
irsend.makeDecodeResult();
|
||||
|
||||
ASSERT_TRUE(irrecv.decodeDenon(&irsend.capture, DENON_48_BITS, true));
|
||||
ASSERT_TRUE(irrecv.decodeDenon(&irsend.capture, kDenon48Bits, true));
|
||||
EXPECT_EQ(DENON, irsend.capture.decode_type);
|
||||
EXPECT_EQ(DENON_48_BITS, irsend.capture.bits);
|
||||
EXPECT_EQ(kDenon48Bits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x2A4C028D6CE3, irsend.capture.value);
|
||||
EXPECT_EQ(0x2A4C, irsend.capture.address);
|
||||
EXPECT_EQ(0x028D6CE3, irsend.capture.command);
|
||||
@@ -273,6 +281,6 @@ TEST(TestDecodeDenon, FailToDecodeNonDenonExample) {
|
||||
|
||||
ASSERT_FALSE(irrecv.decodeDenon(&irsend.capture));
|
||||
ASSERT_FALSE(irrecv.decodeDenon(&irsend.capture, kDenonLegacyBits, false));
|
||||
ASSERT_FALSE(irrecv.decodeDenon(&irsend.capture, DENON_BITS, false));
|
||||
ASSERT_FALSE(irrecv.decodeDenon(&irsend.capture, DENON_48_BITS, false));
|
||||
ASSERT_FALSE(irrecv.decodeDenon(&irsend.capture, kDenonBits, false));
|
||||
ASSERT_FALSE(irrecv.decodeDenon(&irsend.capture, kDenon48Bits, false));
|
||||
}
|
||||
@@ -14,6 +14,7 @@ TEST(TestSendDish, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendDISH(0x0);
|
||||
EXPECT_EQ(
|
||||
"f57600d50"
|
||||
"m400s6100"
|
||||
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
|
||||
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
|
||||
@@ -32,6 +33,7 @@ TEST(TestSendDish, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendDISH(0x9C00); // Power on.
|
||||
EXPECT_EQ(
|
||||
"f57600d50"
|
||||
"m400s6100"
|
||||
"m400s1700m400s2800m400s2800m400s1700m400s1700m400s1700m400s2800m400s2800"
|
||||
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
|
||||
@@ -50,6 +52,7 @@ TEST(TestSendDish, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendDISH(0xFFFF);
|
||||
EXPECT_EQ(
|
||||
"f57600d50"
|
||||
"m400s6100"
|
||||
"m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700"
|
||||
"m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700m400s1700"
|
||||
@@ -74,6 +77,7 @@ TEST(TestSendDish, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendDISH(0x9C00, kDishBits, 0); // 0 repeats.
|
||||
EXPECT_EQ(
|
||||
"f57600d50"
|
||||
"m400s6100"
|
||||
"m400s1700m400s2800m400s2800m400s1700m400s1700m400s1700m400s2800m400s2800"
|
||||
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
|
||||
@@ -83,6 +87,7 @@ TEST(TestSendDish, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendDISH(0x9C00, kDishBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f57600d50"
|
||||
"m400s6100"
|
||||
"m400s1700m400s2800m400s2800m400s1700m400s1700m400s1700m400s2800m400s2800"
|
||||
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
|
||||
@@ -94,6 +99,7 @@ TEST(TestSendDish, SendWithRepeats) {
|
||||
|
||||
irsend.sendDISH(0x9C00, kDishBits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f57600d50"
|
||||
"m400s6100"
|
||||
"m400s1700m400s2800m400s2800m400s1700m400s1700m400s1700m400s2800m400s2800"
|
||||
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
|
||||
@@ -115,6 +121,7 @@ TEST(TestSendDish, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendDISH(0x0, 8);
|
||||
EXPECT_EQ(
|
||||
"f57600d50"
|
||||
"m400s6100"
|
||||
"m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800m400s2800"
|
||||
"m400s6100"
|
||||
@@ -129,6 +136,7 @@ TEST(TestSendDish, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendDISH(0x1234567890ABCDEF, 64);
|
||||
EXPECT_EQ(
|
||||
"f57600d50"
|
||||
"m400s6100"
|
||||
"m400s2800m400s2800m400s2800m400s1700m400s2800m400s2800m400s1700m400s2800"
|
||||
"m400s2800m400s2800m400s1700m400s1700m400s2800m400s1700m400s2800m400s2800"
|
||||
|
||||
@@ -12,12 +12,13 @@
|
||||
TEST(TestSendElectraAC, SendDataOnly) {
|
||||
IRsendTest irsend(0);
|
||||
irsend.begin();
|
||||
uint8_t data[kElectraAcStateLength] = {0xC3, 0xE1, 0x6F, 0x14, 0x06,
|
||||
0x00, 0x04, 0x00, 0x00, 0x04,
|
||||
0x00, 0xA0, 0xB0};
|
||||
uint8_t data[kElectraAcStateLength] = {0xC3, 0x87, 0xF6, 0x28, 0x60,
|
||||
0x00, 0x20, 0x00, 0x00, 0x20,
|
||||
0x00, 0x05, 0x0D};
|
||||
|
||||
irsend.sendElectraAC(data);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m9166s4470"
|
||||
"m646s1647m646s1647m646s547m646s547m646s547m646s547m646s1647m646s1647"
|
||||
"m646s1647m646s1647m646s1647m646s547m646s547m646s547m646s547m646s1647"
|
||||
@@ -46,9 +47,9 @@ TEST(TestDecodeElectraAC, SyntheticDecode) {
|
||||
|
||||
// Synthesised Normal ElectraAC message.
|
||||
irsend.reset();
|
||||
uint8_t expectedState[kElectraAcStateLength] = {0xC3, 0xE1, 0x6F, 0x14, 0x06,
|
||||
0x00, 0x04, 0x00, 0x00, 0x04,
|
||||
0x00, 0xA0, 0xB0};
|
||||
uint8_t expectedState[kElectraAcStateLength] = {0xC3, 0x87, 0xF6, 0x28, 0x60,
|
||||
0x00, 0x20, 0x00, 0x00, 0x20,
|
||||
0x00, 0x05, 0x0D};
|
||||
irsend.sendElectraAC(expectedState);
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
@@ -84,9 +85,9 @@ TEST(TestDecodeElectraAC, RealExampleDecode) {
|
||||
662, 562, 642, 1686, 582, 570, 634, 566, 604, 576, 636, 566,
|
||||
610, 578, 634, 1664, 584, 590, 660, 1636, 610, 1642, 664, 590,
|
||||
610, 590, 636, 566, 634, 568, 686}; // UNKNOWN 9AD8CDB5
|
||||
uint8_t expectedState[kElectraAcStateLength] = {0xC3, 0xE1, 0x6F, 0x14, 0x06,
|
||||
0x00, 0x04, 0x00, 0x00, 0x04,
|
||||
0x00, 0xA0, 0xB0};
|
||||
uint8_t expectedState[kElectraAcStateLength] = {0xC3, 0x87, 0xF6, 0x28, 0x60,
|
||||
0x00, 0x20, 0x00, 0x00, 0x20,
|
||||
0x00, 0x05, 0x0D};
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendRaw(rawData, 211, 38000);
|
||||
|
||||
@@ -6,183 +6,177 @@
|
||||
#include "ir_Fujitsu.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
template<typename T, size_t size>
|
||||
::testing::AssertionResult ArraysMatch(const T (&expected)[size],
|
||||
const T* actual) {
|
||||
for (size_t i(0); i < size; ++i) {
|
||||
if (expected[i] != actual[i]) {
|
||||
int e = expected[i];
|
||||
int a = actual[i];
|
||||
return ::testing::AssertionFailure() << "array[" << i
|
||||
<< "] (" << std::hex << a << std::dec << ") != expected[" << i
|
||||
<< "] (" << std::hex << e << std::dec << ")";
|
||||
}
|
||||
}
|
||||
return ::testing::AssertionSuccess();
|
||||
}
|
||||
// Tests for Fujitsu A/C methods.
|
||||
|
||||
// Test sending typical data only.
|
||||
TEST(TestIRFujitsuACClass, GetRawDefault) {
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(4); // AR-RAH2E
|
||||
fujitsu.setCmd(kFujitsuAcCmdTurnOn);
|
||||
fujitsu.setSwing(kFujitsuAcSwingBoth);
|
||||
fujitsu.setMode(kFujitsuAcModeCool);
|
||||
fujitsu.setFanSpeed(kFujitsuAcFanHigh);
|
||||
fujitsu.setTemp(24);
|
||||
IRFujitsuAC ac(0); // AR-RAH2E
|
||||
ac.setSwing(kFujitsuAcSwingBoth);
|
||||
ac.setMode(kFujitsuAcModeCool);
|
||||
ac.setFanSpeed(kFujitsuAcFanHigh);
|
||||
ac.setTemp(24);
|
||||
ac.setCmd(kFujitsuAcCmdTurnOn);
|
||||
uint8_t expected_arrah2e[16] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
|
||||
0x81, 0x01, 0x31, 0x00, 0x00, 0x00, 0x20, 0xFD};
|
||||
EXPECT_TRUE(ArraysMatch(expected_arrah2e, fujitsu.getRaw()));
|
||||
EXPECT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
|
||||
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected_arrah2e, ac.getRaw(), 16 * 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 1 (ARRAH2E), Power: On, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 1 (HIGH), Swing: Vert + Horiz, Command: N/A",
|
||||
ac.toString());
|
||||
|
||||
uint8_t expected_ardb1[15] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
|
||||
0x81, 0x01, 0x31, 0x00, 0x00, 0x00, 0x1D};
|
||||
fujitsu.setModel(ARDB1);
|
||||
EXPECT_TRUE(ArraysMatch(expected_ardb1, fujitsu.getRaw()));
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
|
||||
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
|
||||
0x81, 0x01, 0x01, 0x00, 0x00, 0x00, 0x4D};
|
||||
ac.setModel(ARDB1);
|
||||
EXPECT_STATE_EQ(expected_ardb1, ac.getRaw(), 15 * 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 2 (ARDB1), Power: On, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 1 (HIGH), Command: N/A",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRFujitsuACClass, GetRawTurnOff) {
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(4);
|
||||
fujitsu.setModel(ARRAH2E);
|
||||
fujitsu.off();
|
||||
IRFujitsuAC ac(0);
|
||||
ac.setModel(ARRAH2E);
|
||||
ac.off();
|
||||
uint8_t expected_arrah2e[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02, 0xFD};
|
||||
EXPECT_TRUE(ArraysMatch(expected_arrah2e, fujitsu.getRaw()));
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: Off, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
|
||||
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected_arrah2e, ac.getRaw(), 7 * 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 1 (ARRAH2E), Power: Off, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 1 (HIGH), Swing: Vert + Horiz, Command: N/A",
|
||||
ac.toString());
|
||||
|
||||
fujitsu.setModel(ARDB1);
|
||||
ac.setModel(ARDB1);
|
||||
uint8_t expected_ardb1[6] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02};
|
||||
EXPECT_TRUE(ArraysMatch(expected_ardb1, fujitsu.getRaw()));
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort - 1, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: Off, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
|
||||
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected_ardb1, ac.getRaw(), 6 * 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort - 1, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 2 (ARDB1), Power: Off, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 1 (HIGH), Command: N/A",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRFujitsuACClass, GetRawStepHoriz) {
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(4);
|
||||
fujitsu.stepHoriz();
|
||||
IRFujitsuAC ac(0);
|
||||
ac.stepHoriz();
|
||||
uint8_t expected[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x79, 0x86};
|
||||
EXPECT_TRUE(ArraysMatch(expected, fujitsu.getRaw()));
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
|
||||
"Swing: Vert + Horiz, Command: Step vane horizontally",
|
||||
fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected, ac.getRaw(), 7 * 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort, ac.getStateLength());
|
||||
EXPECT_EQ(
|
||||
"Model: 1 (ARRAH2E), Power: On, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 1 (HIGH), Swing: Vert + Horiz, Command: Step vane horizontally",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRFujitsuACClass, GetRawStepVert) {
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(4);
|
||||
fujitsu.setModel(ARRAH2E);
|
||||
fujitsu.stepVert();
|
||||
IRFujitsuAC ac(0);
|
||||
ac.setModel(ARRAH2E);
|
||||
ac.stepVert();
|
||||
uint8_t expected_arrah2e[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x6C, 0x93};
|
||||
EXPECT_TRUE(ArraysMatch(expected_arrah2e, fujitsu.getRaw()));
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
|
||||
"Swing: Vert + Horiz, Command: Step vane vertically",
|
||||
fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected_arrah2e, ac.getRaw(), 7 * 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 1 (ARRAH2E), Power: On, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 1 (HIGH), Swing: Vert + Horiz, Command: Step vane vertically",
|
||||
ac.toString());
|
||||
|
||||
fujitsu.setModel(ARDB1);
|
||||
fujitsu.stepVert();
|
||||
ac.setModel(ARDB1);
|
||||
ac.stepVert();
|
||||
uint8_t expected_ardb1[6] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x6C};
|
||||
EXPECT_TRUE(ArraysMatch(expected_ardb1, fujitsu.getRaw()));
|
||||
EXPECT_STATE_EQ(expected_ardb1, ac.getRaw(), 6 * 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort - 1,
|
||||
fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
|
||||
"Swing: Vert + Horiz, Command: Step vane vertically",
|
||||
fujitsu.toString());
|
||||
ac.getStateLength());
|
||||
EXPECT_EQ("Model: 2 (ARDB1), Power: On, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 1 (HIGH), Command: Step vane vertically",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRFujitsuACClass, GetRawWithSwingHoriz) {
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(4);
|
||||
fujitsu.setCmd(kFujitsuAcCmdStayOn);
|
||||
fujitsu.setSwing(kFujitsuAcSwingHoriz);
|
||||
fujitsu.setMode(kFujitsuAcModeCool);
|
||||
fujitsu.setFanSpeed(kFujitsuAcFanQuiet);
|
||||
fujitsu.setTemp(25);
|
||||
IRFujitsuAC ac(0);
|
||||
ac.setCmd(kFujitsuAcCmdStayOn);
|
||||
ac.setSwing(kFujitsuAcSwingHoriz);
|
||||
ac.setMode(kFujitsuAcModeCool);
|
||||
ac.setFanSpeed(kFujitsuAcFanQuiet);
|
||||
ac.setTemp(25);
|
||||
uint8_t expected[16] = {0x14, 0x63, 0x0, 0x10, 0x10, 0xFE, 0x9, 0x30,
|
||||
0x90, 0x1, 0x24, 0x0, 0x0, 0x0, 0x20, 0xFB};
|
||||
EXPECT_TRUE(ArraysMatch(expected, fujitsu.getRaw()));
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 25C, Fan: 4 (QUIET), "
|
||||
"Swing: Horiz, Command: N/A",
|
||||
fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected, ac.getRaw(), 16 * 8);
|
||||
EXPECT_EQ("Model: 1 (ARRAH2E), Power: On, Mode: 1 (COOL), Temp: 25C, "
|
||||
"Fan: 4 (QUIET), Swing: Horiz, Command: N/A",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRFujitsuACClass, GetRawWithFan) {
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(4);
|
||||
fujitsu.setCmd(kFujitsuAcCmdStayOn);
|
||||
fujitsu.setSwing(kFujitsuAcSwingHoriz);
|
||||
fujitsu.setMode(kFujitsuAcModeFan);
|
||||
fujitsu.setFanSpeed(kFujitsuAcFanMed);
|
||||
fujitsu.setTemp(20); // temp doesn't matter for fan
|
||||
IRFujitsuAC ac(0);
|
||||
ac.setCmd(kFujitsuAcCmdStayOn);
|
||||
ac.setSwing(kFujitsuAcSwingHoriz);
|
||||
ac.setMode(kFujitsuAcModeFan);
|
||||
ac.setFanSpeed(kFujitsuAcFanMed);
|
||||
ac.setTemp(20); // temp doesn't matter for fan
|
||||
// but it is sent by the RC anyway
|
||||
fujitsu.setModel(ARRAH2E);
|
||||
ac.setModel(ARRAH2E);
|
||||
uint8_t expected_arrah2e[16] = {
|
||||
0x14, 0x63, 0x0, 0x10, 0x10, 0xFE, 0x9, 0x30,
|
||||
0x40, 0x3, 0x22, 0x0, 0x0, 0x0, 0x20, 0x4B};
|
||||
EXPECT_TRUE(ArraysMatch(expected_arrah2e, fujitsu.getRaw()));
|
||||
EXPECT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 3 (FAN), Temp: 20C, Fan: 2 (MED), Swing: Horiz, "
|
||||
"Command: N/A", fujitsu.toString());
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
|
||||
0x40, 0x03, 0x22, 0x00, 0x00, 0x00, 0x20, 0x4B};
|
||||
EXPECT_STATE_EQ(expected_arrah2e, ac.getRaw(), 16 * 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 1 (ARRAH2E), Power: On, Mode: 3 (FAN), Temp: 20C, "
|
||||
"Fan: 2 (MED), Swing: Horiz, Command: N/A", ac.toString());
|
||||
|
||||
fujitsu.setModel(ARDB1);
|
||||
ac.setModel(ARDB1);
|
||||
uint8_t expected_ardb1[15] = {
|
||||
0x14, 0x63, 0x0, 0x10, 0x10, 0xFC, 0x8, 0x30,
|
||||
0x40, 0x3, 0x22, 0x0, 0x0, 0x0, 0x6B};
|
||||
EXPECT_TRUE(ArraysMatch(expected_ardb1, fujitsu.getRaw()));
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 3 (FAN), Temp: 20C, Fan: 2 (MED), Swing: Horiz, "
|
||||
"Command: N/A", fujitsu.toString());
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
|
||||
0x40, 0x03, 0x02, 0x00, 0x00, 0x00, 0x8B};
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, ac.getStateLength());
|
||||
EXPECT_STATE_EQ(expected_ardb1, ac.getRaw(), ac.getStateLength() * 8);
|
||||
EXPECT_EQ("Model: 2 (ARDB1), Power: On, Mode: 3 (FAN), Temp: 20C, "
|
||||
"Fan: 2 (MED), Command: N/A", ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRFujitsuACClass, SetRaw) {
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(0);
|
||||
EXPECT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
|
||||
IRFujitsuAC ac(0);
|
||||
EXPECT_EQ(kFujitsuAcStateLength, ac.getStateLength());
|
||||
uint8_t expected_default_arrah2e[kFujitsuAcStateLength] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
|
||||
0x81, 0x01, 0x31, 0x00, 0x00, 0x00, 0x20, 0xFD};
|
||||
EXPECT_TRUE(ArraysMatch(expected_default_arrah2e, fujitsu.getRaw()));
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
|
||||
"Swing: Vert + Horiz, Command: N/A", fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected_default_arrah2e, ac.getRaw(),
|
||||
ac.getStateLength() * 8);
|
||||
EXPECT_EQ("Model: 1 (ARRAH2E), Power: On, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 1 (HIGH), Swing: Vert + Horiz, Command: N/A",
|
||||
ac.toString());
|
||||
// Now set a new state via setRaw();
|
||||
// This state is a real state from an AR-DB1 remote.
|
||||
uint8_t new_state1[kFujitsuAcStateLength - 1] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
|
||||
0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x9F};
|
||||
fujitsu.setRaw(new_state1, kFujitsuAcStateLength - 1);
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
|
||||
EXPECT_TRUE(ArraysMatch(new_state1, fujitsu.getRaw()));
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 19C, Fan: 0 (AUTO), "
|
||||
"Swing: Off, Command: N/A", fujitsu.toString());
|
||||
ac.setRaw(new_state1, kFujitsuAcStateLength - 1);
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, ac.getStateLength());
|
||||
EXPECT_STATE_EQ(new_state1, ac.getRaw(), ac.getStateLength() * 8);
|
||||
EXPECT_EQ("Model: 2 (ARDB1), Power: On, Mode: 1 (COOL), Temp: 19C, "
|
||||
"Fan: 0 (AUTO), Command: N/A", ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestSendFujitsuAC, GenerateMessage) {
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(4);
|
||||
IRsendTest irsend(4);
|
||||
fujitsu.begin();
|
||||
IRFujitsuAC ac(0);
|
||||
IRsendTest irsend(0);
|
||||
ac.begin();
|
||||
irsend.begin();
|
||||
|
||||
fujitsu.setCmd(kFujitsuAcCmdStayOn);
|
||||
fujitsu.setSwing(kFujitsuAcSwingBoth);
|
||||
fujitsu.setMode(kFujitsuAcModeCool);
|
||||
fujitsu.setFanSpeed(kFujitsuAcFanHigh);
|
||||
fujitsu.setTemp(24);
|
||||
ac.setCmd(kFujitsuAcCmdStayOn);
|
||||
ac.setSwing(kFujitsuAcSwingBoth);
|
||||
ac.setMode(kFujitsuAcModeCool);
|
||||
ac.setFanSpeed(kFujitsuAcFanHigh);
|
||||
ac.setTemp(24);
|
||||
|
||||
EXPECT_EQ(kFujitsuAcFanHigh, fujitsu.getFanSpeed());
|
||||
EXPECT_EQ(kFujitsuAcModeCool, fujitsu.getMode());
|
||||
EXPECT_EQ(24, fujitsu.getTemp());
|
||||
EXPECT_EQ(kFujitsuAcSwingBoth, fujitsu.getSwing());
|
||||
EXPECT_EQ(kFujitsuAcCmdStayOn, fujitsu.getCmd());
|
||||
EXPECT_EQ(kFujitsuAcFanHigh, ac.getFanSpeed());
|
||||
EXPECT_EQ(kFujitsuAcModeCool, ac.getMode());
|
||||
EXPECT_EQ(24, ac.getTemp());
|
||||
EXPECT_EQ(kFujitsuAcSwingBoth, ac.getSwing());
|
||||
EXPECT_EQ(kFujitsuAcCmdStayOn, ac.getCmd());
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendFujitsuAC(fujitsu.getRaw(), kFujitsuAcStateLength);
|
||||
irsend.sendFujitsuAC(ac.getRaw(), kFujitsuAcStateLength);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3324s1574"
|
||||
"m448s390m448s390m448s1182m448s390m448s1182m448s390m448s390m448s390"
|
||||
"m448s1182m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390"
|
||||
@@ -205,18 +199,19 @@ TEST(TestSendFujitsuAC, GenerateMessage) {
|
||||
}
|
||||
|
||||
TEST(TestSendFujitsuAC, GenerateShortMessage) {
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(4);
|
||||
IRsendTest irsend(4);
|
||||
fujitsu.begin();
|
||||
IRFujitsuAC ac(0);
|
||||
IRsendTest irsend(0);
|
||||
ac.begin();
|
||||
irsend.begin();
|
||||
|
||||
fujitsu.off();
|
||||
ac.off();
|
||||
|
||||
EXPECT_EQ(kFujitsuAcCmdTurnOff, fujitsu.getCmd());
|
||||
EXPECT_EQ(kFujitsuAcCmdTurnOff, ac.getCmd());
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendFujitsuAC(fujitsu.getRaw(), kFujitsuAcStateLengthShort);
|
||||
irsend.sendFujitsuAC(ac.getRaw(), kFujitsuAcStateLengthShort);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3324s1574m448s390m448s390m448s1182m448s390m448s1182m448s390m448s390m448"
|
||||
"s390m448s1182m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390"
|
||||
"m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390m448s390"
|
||||
@@ -229,15 +224,16 @@ TEST(TestSendFujitsuAC, GenerateShortMessage) {
|
||||
|
||||
// Issue #275
|
||||
TEST(TestSendFujitsuAC, Issue275) {
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(4);
|
||||
IRsendTest irsend(4);
|
||||
fujitsu.begin();
|
||||
IRFujitsuAC ac(0);
|
||||
IRsendTest irsend(0);
|
||||
ac.begin();
|
||||
irsend.begin();
|
||||
irsend.reset();
|
||||
|
||||
fujitsu.setCmd(kFujitsuAcCmdTurnOff);
|
||||
irsend.sendFujitsuAC(fujitsu.getRaw(), kFujitsuAcStateLengthShort);
|
||||
ac.setCmd(kFujitsuAcCmdTurnOff);
|
||||
irsend.sendFujitsuAC(ac.getRaw(), kFujitsuAcStateLengthShort);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
// Header
|
||||
"m3324s1574"
|
||||
// 0 0 1 0 1 0 0 0 (0x28)
|
||||
@@ -272,6 +268,7 @@ TEST(TestSendFujitsuAC, Issue275) {
|
||||
450, 1250, 450};
|
||||
irsend.sendRaw(off, 115, 38);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
// Header
|
||||
"m3350s1650"
|
||||
// 0 0 1 0 1 0 0 0 (0x28)
|
||||
@@ -295,51 +292,51 @@ TEST(TestSendFujitsuAC, Issue275) {
|
||||
|
||||
TEST(TestDecodeFujitsuAC, SyntheticShortMessages) {
|
||||
IRsendTest irsend(0);
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(0);
|
||||
IRFujitsuAC ac(0);
|
||||
IRrecv irrecv(0);
|
||||
|
||||
irsend.begin();
|
||||
irsend.reset();
|
||||
|
||||
fujitsu.setModel(ARRAH2E);
|
||||
fujitsu.setCmd(kFujitsuAcCmdTurnOff);
|
||||
irsend.sendFujitsuAC(fujitsu.getRaw(), fujitsu.getStateLength());
|
||||
ac.setModel(ARRAH2E);
|
||||
ac.setCmd(kFujitsuAcCmdTurnOff);
|
||||
irsend.sendFujitsuAC(ac.getRaw(), ac.getStateLength());
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kFujitsuAcMinBits + 8, irsend.capture.bits);
|
||||
uint8_t expected_arrah2e[7] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02, 0xFD};
|
||||
EXPECT_TRUE(ArraysMatch(expected_arrah2e, irsend.capture.state));
|
||||
EXPECT_STATE_EQ(expected_arrah2e, irsend.capture.state, irsend.capture.bits);
|
||||
|
||||
irsend.reset();
|
||||
|
||||
fujitsu.setModel(ARDB1);
|
||||
fujitsu.setCmd(kFujitsuAcCmdTurnOff);
|
||||
irsend.sendFujitsuAC(fujitsu.getRaw(), fujitsu.getStateLength());
|
||||
ac.setModel(ARDB1);
|
||||
ac.setCmd(kFujitsuAcCmdTurnOff);
|
||||
irsend.sendFujitsuAC(ac.getRaw(), ac.getStateLength());
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kFujitsuAcMinBits, irsend.capture.bits);
|
||||
uint8_t expected_ardb1[6] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02};
|
||||
EXPECT_TRUE(ArraysMatch(expected_ardb1, irsend.capture.state));
|
||||
EXPECT_STATE_EQ(expected_ardb1, irsend.capture.state, irsend.capture.bits);
|
||||
}
|
||||
|
||||
TEST(TestDecodeFujitsuAC, SyntheticLongMessages) {
|
||||
IRsendTest irsend(0);
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(0);
|
||||
IRFujitsuAC ac(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
|
||||
fujitsu.setModel(ARRAH2E);
|
||||
fujitsu.setCmd(kFujitsuAcCmdStayOn);
|
||||
fujitsu.setSwing(kFujitsuAcSwingVert);
|
||||
fujitsu.setMode(kFujitsuAcModeCool);
|
||||
fujitsu.setFanSpeed(kFujitsuAcFanQuiet);
|
||||
fujitsu.setTemp(18);
|
||||
irsend.sendFujitsuAC(fujitsu.getRaw(), fujitsu.getStateLength());
|
||||
ASSERT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
|
||||
ac.setModel(ARRAH2E);
|
||||
ac.setCmd(kFujitsuAcCmdStayOn);
|
||||
ac.setSwing(kFujitsuAcSwingVert);
|
||||
ac.setMode(kFujitsuAcModeCool);
|
||||
ac.setFanSpeed(kFujitsuAcFanQuiet);
|
||||
ac.setTemp(18);
|
||||
irsend.sendFujitsuAC(ac.getRaw(), ac.getStateLength());
|
||||
ASSERT_EQ(kFujitsuAcStateLength, ac.getStateLength());
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decodeFujitsuAC(&irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
|
||||
@@ -347,34 +344,34 @@ TEST(TestDecodeFujitsuAC, SyntheticLongMessages) {
|
||||
uint8_t expected_arrah2e[kFujitsuAcStateLength] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
|
||||
0x20, 0x01, 0x14, 0x00, 0x00, 0x00, 0x20, 0x7B};
|
||||
EXPECT_TRUE(ArraysMatch(expected_arrah2e, irsend.capture.state));
|
||||
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 18C, Fan: 4 (QUIET), "
|
||||
"Swing: Vert, Command: N/A", fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected_arrah2e, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 1 (ARRAH2E), Power: On, Mode: 1 (COOL), Temp: 18C, "
|
||||
"Fan: 4 (QUIET), Swing: Vert, Command: N/A", ac.toString());
|
||||
|
||||
irsend.reset();
|
||||
|
||||
fujitsu.setModel(ARDB1);
|
||||
irsend.sendFujitsuAC(fujitsu.getRaw(), fujitsu.getStateLength());
|
||||
ac.setModel(ARDB1);
|
||||
irsend.sendFujitsuAC(ac.getRaw(), ac.getStateLength());
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kFujitsuAcBits - 8, irsend.capture.bits);
|
||||
uint8_t expected_ardb1[kFujitsuAcStateLength - 1] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
|
||||
0x20, 0x01, 0x14, 0x00, 0x00, 0x00, 0x9B};
|
||||
EXPECT_TRUE(ArraysMatch(expected_ardb1, irsend.capture.state));
|
||||
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 18C, Fan: 4 (QUIET), "
|
||||
"Swing: Vert, Command: N/A", fujitsu.toString());
|
||||
0x20, 0x01, 0x04, 0x00, 0x00, 0x00, 0xAB};
|
||||
EXPECT_STATE_EQ(expected_ardb1, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 2 (ARDB1), Power: On, Mode: 1 (COOL), Temp: 18C, "
|
||||
"Fan: 4 (QUIET), Command: N/A", ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestDecodeFujitsuAC, RealShortARDB1OffExample) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(0);
|
||||
IRFujitsuAC ac(0);
|
||||
|
||||
irsend.begin();
|
||||
|
||||
@@ -396,17 +393,17 @@ TEST(TestDecodeFujitsuAC, RealShortARDB1OffExample) {
|
||||
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kFujitsuAcMinBits, irsend.capture.bits);
|
||||
uint8_t expected[6] = {0x14, 0x63, 0x0, 0x10, 0x10, 0x02};
|
||||
EXPECT_TRUE(ArraysMatch(expected, irsend.capture.state));
|
||||
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort - 1, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: Off, Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), "
|
||||
"Swing: Off, Command: N/A", fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort - 1, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 2 (ARDB1), Power: Off, Mode: 0 (AUTO), Temp: 16C, "
|
||||
"Fan: 0 (AUTO), Command: N/A", ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestDecodeFujitsuAC, RealLongARDB1Example) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(0);
|
||||
IRFujitsuAC ac(0);
|
||||
|
||||
irsend.begin();
|
||||
irsend.reset();
|
||||
@@ -440,11 +437,11 @@ TEST(TestDecodeFujitsuAC, RealLongARDB1Example) {
|
||||
uint8_t expected1[kFujitsuAcStateLength - 1] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
|
||||
0x21, 0x01, 0x04, 0x00, 0x00, 0x00, 0xAA};
|
||||
EXPECT_TRUE(ArraysMatch(expected1, irsend.capture.state));
|
||||
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 18C, Fan: 4 (QUIET), "
|
||||
"Swing: Off, Command: N/A", fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected1, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 2 (ARDB1), Power: On, Mode: 1 (COOL), Temp: 18C, "
|
||||
"Fan: 4 (QUIET), Command: N/A", ac.toString());
|
||||
|
||||
irsend.reset();
|
||||
uint16_t rawData2[243] = {
|
||||
@@ -477,17 +474,17 @@ TEST(TestDecodeFujitsuAC, RealLongARDB1Example) {
|
||||
uint8_t expected2[kFujitsuAcStateLength - 1] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFC, 0x08, 0x30,
|
||||
0x30, 0x01, 0x00, 0x00, 0x00, 0x00, 0x9F};
|
||||
EXPECT_TRUE(ArraysMatch(expected2, irsend.capture.state));
|
||||
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 1 (COOL), Temp: 19C, Fan: 0 (AUTO), "
|
||||
"Swing: Off, Command: N/A", fujitsu.toString());
|
||||
EXPECT_STATE_EQ(expected2, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength - 1, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 2 (ARDB1), Power: On, Mode: 1 (COOL), Temp: 19C, "
|
||||
"Fan: 0 (AUTO), Command: N/A", ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestDecodeFujitsuAC, Issue414) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRFujitsuAC fujitsu = IRFujitsuAC(0);
|
||||
IRFujitsuAC ac(0);
|
||||
|
||||
// Capture as supplied by arpmota
|
||||
uint16_t rawData[259] = {3352, 1574, 480, 350, 480, 346, 480, 1190, 458, 346,
|
||||
@@ -519,11 +516,11 @@ TEST(TestDecodeFujitsuAC, Issue414) {
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kFujitsuAcBits, irsend.capture.bits);
|
||||
EXPECT_TRUE(ArraysMatch(state, irsend.capture.state));
|
||||
fujitsu.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength, fujitsu.getStateLength());
|
||||
EXPECT_EQ("Power: On, Mode: 4 (HEAT), Temp: 24C, Fan: 0 (AUTO), "
|
||||
"Swing: Off, Command: N/A", fujitsu.toString());
|
||||
EXPECT_STATE_EQ(state, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(kFujitsuAcStateLength, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 1 (ARRAH2E), Power: On, Mode: 4 (HEAT), Temp: 24C, "
|
||||
"Fan: 0 (AUTO), Swing: Off, Command: N/A", ac.toString());
|
||||
|
||||
// Resend it using the state this time.
|
||||
irsend.reset();
|
||||
@@ -532,8 +529,9 @@ TEST(TestDecodeFujitsuAC, Issue414) {
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kFujitsuAcBits, irsend.capture.bits);
|
||||
EXPECT_TRUE(ArraysMatch(state, irsend.capture.state));
|
||||
EXPECT_STATE_EQ(state, irsend.capture.state, irsend.capture.bits);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3324s1574"
|
||||
"m448s390m448s390m448s1182m448s390m448s1182m448s390m448s390m448s390"
|
||||
"m448s1182m448s1182m448s390m448s390m448s390m448s1182m448s1182m448s390"
|
||||
@@ -553,3 +551,248 @@ TEST(TestDecodeFujitsuAC, Issue414) {
|
||||
"m448s1182m448s1182m448s390m448s1182m448s390m448s1182m448s390m448s390"
|
||||
"m448s8100", irsend.outputStr());
|
||||
}
|
||||
|
||||
TEST(TestIRFujitsuACClass, toCommon) {
|
||||
IRFujitsuAC ac(0);
|
||||
ac.setMode(kFujitsuAcModeCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFanSpeed(kFujitsuAcFanQuiet);
|
||||
ac.setSwing(kFujitsuAcSwingBoth);
|
||||
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::FUJITSU_AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(fujitsu_ac_remote_model_t::ARRAH2E, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_TRUE(ac.toCommon().quiet);
|
||||
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMin, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kAuto, ac.toCommon().swingh);
|
||||
// Unsupported.
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
|
||||
// Check off mode which is special.
|
||||
ac.off();
|
||||
ASSERT_FALSE(ac.toCommon().power);
|
||||
ac.send();
|
||||
ac.stateReset();
|
||||
IRrecv irrecv(0);
|
||||
ac._irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, ac._irsend.capture.decode_type);
|
||||
ac.setRaw(ac._irsend.capture.state, ac._irsend.capture.bits / 8);
|
||||
|
||||
// Now test it.
|
||||
EXPECT_EQ( // Off mode technically has no temp, mode, fan, etc.
|
||||
"Model: 1 (ARRAH2E), Power: Off, Mode: 0 (AUTO), Temp: 16C, "
|
||||
"Fan: 0 (AUTO), Swing: Off, Command: N/A", ac.toString());
|
||||
ASSERT_EQ(decode_type_t::FUJITSU_AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(fujitsu_ac_remote_model_t::ARRAH2E, ac.toCommon().model);
|
||||
ASSERT_FALSE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(16, ac.toCommon().degrees);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
|
||||
ASSERT_EQ(stdAc::opmode_t::kAuto, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kAuto, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
// Unsupported.
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
|
||||
TEST(TestDecodeFujitsuAC, Issue716) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRFujitsuAC ac(0);
|
||||
|
||||
// Powerful command from a raw data capture.
|
||||
// Capture as supplied by u4mzu4
|
||||
uint16_t rawData[115] = {
|
||||
3320, 1610, 432, 406, 432, 406, 432, 1220, 432, 406, 432, 1192, 458, 406,
|
||||
432, 406, 432, 406, 432, 1218, 432, 1220, 432, 406, 432, 406, 432, 406,
|
||||
432, 1192, 458, 1192, 460, 406, 432, 406, 432, 406, 432, 406, 432, 406,
|
||||
432, 406, 432, 406, 432, 408, 432, 406, 432, 406, 430, 406, 432, 406, 432,
|
||||
406, 432, 1190, 460, 406, 432, 408, 430, 406, 432, 406, 432, 406, 432,
|
||||
406, 432, 406, 434, 1192, 458, 406, 432, 406, 432, 406, 432, 1194, 458,
|
||||
406, 432, 406, 432, 1194, 456, 1196, 454, 1220, 432, 406, 432, 406, 432,
|
||||
408, 430, 1194, 458, 1194, 456, 406, 432, 406, 430, 406, 432, 1194, 458,
|
||||
1194, 458}; // FUJITSU_AC
|
||||
uint8_t powerful[kFujitsuAcStateLengthShort] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0x39, 0xC6};
|
||||
irsend.begin();
|
||||
irsend.reset();
|
||||
irsend.sendRaw(rawData, 115, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kFujitsuAcStateLengthShort * 8, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(powerful, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(fujitsu_ac_remote_model_t::ARREB1E, ac.getModel());
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 3 (ARREB1E), Power: On, Mode: 0 (AUTO), Temp: 16C, "
|
||||
"Fan: 0 (AUTO), Swing: Off, Command: Powerful, Outside Quiet: Off",
|
||||
ac.toString());
|
||||
|
||||
// Economy (just from the state)
|
||||
uint8_t econo[kFujitsuAcStateLengthShort] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0x09, 0xF6};
|
||||
// Make sure we can't accidentally inherit the correct model.
|
||||
ASSERT_NE(fujitsu_ac_remote_model_t::ARDB1,
|
||||
fujitsu_ac_remote_model_t::ARREB1E);
|
||||
ac.setModel(fujitsu_ac_remote_model_t::ARDB1);
|
||||
ac.setRaw(econo, kFujitsuAcStateLengthShort);
|
||||
EXPECT_EQ(fujitsu_ac_remote_model_t::ARREB1E, ac.getModel());
|
||||
EXPECT_EQ(kFujitsuAcStateLengthShort, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 3 (ARREB1E), Power: On, Mode: 0 (AUTO), Temp: 16C, "
|
||||
"Fan: 0 (AUTO), Swing: Off, Command: Economy, Outside Quiet: Off",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRFujitsuACClass, OutsideQuiet) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRFujitsuAC ac(0);
|
||||
|
||||
ASSERT_NE(fujitsu_ac_remote_model_t::ARDB1,
|
||||
fujitsu_ac_remote_model_t::ARREB1E);
|
||||
ASSERT_NE(fujitsu_ac_remote_model_t::ARRAH2E,
|
||||
fujitsu_ac_remote_model_t::ARREB1E);
|
||||
// States as supplied by u4mzu4
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/716#issuecomment-495852309
|
||||
uint8_t off[kFujitsuAcStateLength] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
|
||||
0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 0x2F};
|
||||
uint8_t on[kFujitsuAcStateLength] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
|
||||
0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xAF};
|
||||
// Make sure we can't accidentally inherit the correct model.
|
||||
ac.setModel(fujitsu_ac_remote_model_t::ARDB1);
|
||||
ac.setRaw(off, kFujitsuAcStateLength);
|
||||
EXPECT_EQ(fujitsu_ac_remote_model_t::ARRAH2E, ac.getModel());
|
||||
EXPECT_EQ(kFujitsuAcStateLength, ac.getStateLength());
|
||||
EXPECT_FALSE(ac.getOutsideQuiet());
|
||||
// We can really only tell the difference between ARRAH2E & ARREB1E if
|
||||
// the option is set. Otheriwse they appear the same.
|
||||
EXPECT_EQ(
|
||||
"Model: 1 (ARRAH2E), Power: On, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 0 (AUTO), Swing: Off, Command: N/A", ac.toString());
|
||||
ac.setModel(fujitsu_ac_remote_model_t::ARREB1E);
|
||||
EXPECT_EQ(
|
||||
"Model: 3 (ARREB1E), Power: On, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 0 (AUTO), Swing: Off, Command: N/A, Outside Quiet: Off",
|
||||
ac.toString());
|
||||
|
||||
// Make sure we can't accidentally inherit the correct model.
|
||||
ac.setModel(fujitsu_ac_remote_model_t::ARDB1);
|
||||
ac.setRaw(on, kFujitsuAcStateLength);
|
||||
EXPECT_EQ(fujitsu_ac_remote_model_t::ARREB1E, ac.getModel());
|
||||
EXPECT_EQ(kFujitsuAcStateLength, ac.getStateLength());
|
||||
EXPECT_TRUE(ac.getOutsideQuiet());
|
||||
EXPECT_EQ(
|
||||
"Model: 3 (ARREB1E), Power: On, Mode: 1 (COOL), Temp: 24C, "
|
||||
"Fan: 0 (AUTO), Swing: Off, Command: N/A, Outside Quiet: On",
|
||||
ac.toString());
|
||||
|
||||
ac.setOutsideQuiet(false);
|
||||
EXPECT_FALSE(ac.getOutsideQuiet());
|
||||
ac.setOutsideQuiet(true);
|
||||
EXPECT_TRUE(ac.getOutsideQuiet());
|
||||
ac.setOutsideQuiet(false);
|
||||
EXPECT_FALSE(ac.getOutsideQuiet());
|
||||
}
|
||||
|
||||
TEST(TestIRFujitsuACClass, toggleSwing) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRFujitsuAC ac(0);
|
||||
|
||||
ac.begin();
|
||||
ac.setModel(ARJW2);
|
||||
ac.setSwing(kFujitsuAcSwingOff);
|
||||
ac.setCmd(kFujitsuAcCmdStayOn);
|
||||
ASSERT_EQ(kFujitsuAcSwingOff, ac.getSwing());
|
||||
ac.toggleSwingHoriz();
|
||||
EXPECT_EQ(kFujitsuAcCmdToggleSwingHoriz, ac.getCmd());
|
||||
EXPECT_EQ(kFujitsuAcSwingHoriz, ac.getSwing());
|
||||
ac.toggleSwingHoriz();
|
||||
EXPECT_EQ(kFujitsuAcCmdToggleSwingHoriz, ac.getCmd());
|
||||
EXPECT_EQ(kFujitsuAcSwingOff, ac.getSwing());
|
||||
ac.toggleSwingVert();
|
||||
EXPECT_EQ(kFujitsuAcCmdToggleSwingVert, ac.getCmd());
|
||||
EXPECT_EQ(kFujitsuAcSwingVert, ac.getSwing());
|
||||
ac.toggleSwingVert();
|
||||
EXPECT_EQ(kFujitsuAcCmdToggleSwingVert, ac.getCmd());
|
||||
EXPECT_EQ(kFujitsuAcSwingOff, ac.getSwing());
|
||||
|
||||
// Both
|
||||
ac.toggleSwingHoriz();
|
||||
EXPECT_EQ(kFujitsuAcCmdToggleSwingHoriz, ac.getCmd());
|
||||
ac.toggleSwingVert();
|
||||
EXPECT_EQ(kFujitsuAcCmdToggleSwingVert, ac.getCmd());
|
||||
EXPECT_EQ(kFujitsuAcSwingBoth, ac.getSwing());
|
||||
ac.toggleSwingHoriz();
|
||||
EXPECT_EQ(kFujitsuAcCmdToggleSwingHoriz, ac.getCmd());
|
||||
EXPECT_EQ(kFujitsuAcSwingVert, ac.getSwing());
|
||||
ac.toggleSwingHoriz();
|
||||
EXPECT_EQ(kFujitsuAcSwingBoth, ac.getSwing());
|
||||
|
||||
EXPECT_EQ(
|
||||
"Model: 4 (ARJW2), Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 1 (HIGH), "
|
||||
"Command: Toggle horizontal swing",
|
||||
ac.toString());
|
||||
|
||||
// Test without the update set.
|
||||
ac.toggleSwingHoriz(false);
|
||||
EXPECT_EQ(kFujitsuAcSwingBoth, ac.getSwing());
|
||||
EXPECT_EQ(kFujitsuAcCmdToggleSwingHoriz, ac.getCmd());
|
||||
ac.toggleSwingVert(false);
|
||||
EXPECT_EQ(kFujitsuAcSwingBoth, ac.getSwing());
|
||||
EXPECT_EQ(kFujitsuAcCmdToggleSwingVert, ac.getCmd());
|
||||
}
|
||||
|
||||
TEST(TestDecodeFujitsuAC, Issue726) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRFujitsuAC ac(0);
|
||||
|
||||
// fan:auto mode:auto temp:24 power:on
|
||||
// Capture as supplied by huexpub
|
||||
// Rawdata was very messy. Had to use `./auto_analyse_raw_data.py -r 250` to
|
||||
// get it to parse due to timings being above tolerances.
|
||||
uint8_t auto_auto_on_24[kFujitsuAcStateLength] = {
|
||||
0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30,
|
||||
0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x2F};
|
||||
irsend.begin();
|
||||
irsend.reset();
|
||||
irsend.sendFujitsuAC(auto_auto_on_24, 16);
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(FUJITSU_AC, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kFujitsuAcStateLength * 8, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(auto_auto_on_24, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(fujitsu_ac_remote_model_t::ARRAH2E, ac.getModel());
|
||||
EXPECT_EQ(kFujitsuAcStateLength, ac.getStateLength());
|
||||
EXPECT_EQ("Model: 1 (ARRAH2E), Power: On, Mode: 0 (AUTO), Temp: 24C, "
|
||||
"Fan: 0 (AUTO), Swing: Off, Command: N/A",
|
||||
ac.toString());
|
||||
}
|
||||
@@ -12,6 +12,7 @@ TEST(TestSendGICable, SendDataOnly) {
|
||||
irsend.begin();
|
||||
irsend.sendGICable(0);
|
||||
EXPECT_EQ(
|
||||
"f39000d50"
|
||||
"m9000s4400"
|
||||
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200"
|
||||
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200m550s2200"
|
||||
@@ -20,6 +21,7 @@ TEST(TestSendGICable, SendDataOnly) {
|
||||
irsend.outputStr());
|
||||
irsend.sendGICable(0x8807);
|
||||
EXPECT_EQ(
|
||||
"f39000d50"
|
||||
"m9000s4400"
|
||||
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
|
||||
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
|
||||
@@ -28,6 +30,7 @@ TEST(TestSendGICable, SendDataOnly) {
|
||||
irsend.outputStr());
|
||||
irsend.sendGICable(0xFFFF);
|
||||
EXPECT_EQ(
|
||||
"f39000d50"
|
||||
"m9000s4400"
|
||||
"m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400"
|
||||
"m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400m550s4400"
|
||||
@@ -43,6 +46,7 @@ TEST(TestSendGICable, SendWithRepeats) {
|
||||
// Send a command with 0 repeats.
|
||||
irsend.sendGICable(0x8807, kGicableBits, 0);
|
||||
EXPECT_EQ(
|
||||
"f39000d50"
|
||||
"m9000s4400"
|
||||
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
|
||||
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
|
||||
@@ -51,6 +55,7 @@ TEST(TestSendGICable, SendWithRepeats) {
|
||||
// Send a command with 1 repeat.
|
||||
irsend.sendGICable(0x8807, kGicableBits, 1);
|
||||
EXPECT_EQ(
|
||||
"f39000d50"
|
||||
"m9000s4400"
|
||||
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
|
||||
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
|
||||
@@ -60,6 +65,7 @@ TEST(TestSendGICable, SendWithRepeats) {
|
||||
// Send a command with 3 repeats.
|
||||
irsend.sendGICable(0x8807, kGicableBits, 3);
|
||||
EXPECT_EQ(
|
||||
"f39000d50"
|
||||
"m9000s4400"
|
||||
"m550s4400m550s2200m550s2200m550s2200m550s4400m550s2200m550s2200m550s2200"
|
||||
"m550s2200m550s2200m550s2200m550s2200m550s2200m550s4400m550s4400m550s4400"
|
||||
|
||||
@@ -29,6 +29,7 @@ TEST(TestSendGlobalCache, NonRepeatingCode) {
|
||||
EXPECT_EQ(0x4, irsend.capture.address);
|
||||
EXPECT_EQ(0x41, irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8892s4472m546s572m546s546m546s1690m546s546m546s572m546s572"
|
||||
"m546s546m546s572m546s1690m546s1690m546s572m546s1690m546s1690"
|
||||
"m546s1690m546s1690m546s1690m546s1690m546s572m546s572m546s546"
|
||||
@@ -60,6 +61,7 @@ TEST(TestSendGlobalCache, RepeatCode) {
|
||||
EXPECT_EQ(0x4583, irsend.capture.address);
|
||||
EXPECT_EQ(0x11, irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8866s4446m546s1664m546s1664m546s546m546s546m546s546m546s546"
|
||||
"m546s546m546s1664m546s1664m546s546m546s1664m546s546m546s546"
|
||||
"m546s546m546s1664m546s546m546s1664m546s546m546s546m546s546"
|
||||
|
||||
@@ -0,0 +1,511 @@
|
||||
// Copyright 2019 David Conran
|
||||
|
||||
#include "ir_Goodweather.h"
|
||||
#include "IRrecv.h"
|
||||
#include "IRrecv_test.h"
|
||||
#include "IRsend.h"
|
||||
#include "IRsend_test.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
TEST(TestIRUtils, Goodweather) {
|
||||
ASSERT_EQ("GOODWEATHER", typeToString(decode_type_t::GOODWEATHER));
|
||||
ASSERT_EQ(decode_type_t::GOODWEATHER, strToDecodeType("GOODWEATHER"));
|
||||
ASSERT_FALSE(hasACState(decode_type_t::GOODWEATHER));
|
||||
}
|
||||
|
||||
// Tests for sendGoodweather().
|
||||
|
||||
// Test sending typical data only.
|
||||
TEST(TestSendGoodweather, SendDataOnly) {
|
||||
IRsendTest irsend(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendGoodweather(0x0);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m6800s6800"
|
||||
"m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600"
|
||||
"m640s580m640s580m640s580m640s580m640s580m640s580m640s580m640s580"
|
||||
"m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600"
|
||||
"m640s580m640s580m640s580m640s580m640s580m640s580m640s580m640s580"
|
||||
"m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600"
|
||||
"m640s580m640s580m640s580m640s580m640s580m640s580m640s580m640s580"
|
||||
"m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600"
|
||||
"m640s580m640s580m640s580m640s580m640s580m640s580m640s580m640s580"
|
||||
"m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600"
|
||||
"m640s580m640s580m640s580m640s580m640s580m640s580m640s580m640s580"
|
||||
"m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600m640s1600"
|
||||
"m640s580m640s580m640s580m640s580m640s580m640s580m640s580m640s580"
|
||||
"m640s6800m640s100000",
|
||||
irsend.outputStr());
|
||||
|
||||
irsend.reset();
|
||||
}
|
||||
|
||||
// Tests for decodeGoodweather().
|
||||
|
||||
// Decode normal Goodweather messages.
|
||||
TEST(TestDecodeGoodweather, SyntheticDecode) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
// Normal (made-up value) Goodweather 48-bit message.
|
||||
irsend.reset();
|
||||
irsend.sendGoodweather(0x1234567890AB);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(decode_type_t::GOODWEATHER, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kGoodweatherBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x1234567890AB, irsend.capture.value);
|
||||
EXPECT_EQ(0x0, irsend.capture.address);
|
||||
EXPECT_EQ(0x0, irsend.capture.command);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
// Normal (Real) Goodweather 48-bit message.
|
||||
irsend.reset();
|
||||
irsend.sendGoodweather(0xD5276A030000);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(decode_type_t::GOODWEATHER, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kGoodweatherBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0xD5276A030000, irsend.capture.value);
|
||||
EXPECT_EQ(0x0, irsend.capture.address);
|
||||
EXPECT_EQ(0x0, irsend.capture.command);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
}
|
||||
|
||||
// Decode a real example of a Goodweather message.
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/697#issuecomment-490209819
|
||||
TEST(TestDecodeGoodweather, RealExampleDecode) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRGoodweatherAc ac(0);
|
||||
irsend.begin();
|
||||
ac.begin();
|
||||
|
||||
irsend.reset();
|
||||
// Raw Goodweather 48-bit message.
|
||||
uint16_t rawData_4624AB[197] = {
|
||||
6828, 6828, 732, 1780, 652, 1830, 652, 1806, 678, 1830, 652, 1806, 678,
|
||||
1830, 652, 1830, 652, 1834, 706, 518, 734, 508, 734, 514, 734, 510, 732,
|
||||
510, 732, 510, 732, 510, 732, 514, 732, 1776, 706, 1780, 628, 1854, 628,
|
||||
1832, 654, 1832, 654, 1856, 628, 1832, 634, 1876, 680, 536, 708, 536, 708,
|
||||
536, 706, 538, 706, 538, 706, 538, 706, 536, 680, 564, 680, 1828, 708,
|
||||
1758, 680, 1804, 680, 1828, 708, 1778, 732, 1754, 732, 1754, 732, 1756,
|
||||
732, 490, 658, 586, 658, 586, 658, 586, 658, 586, 658, 584, 658, 586, 658,
|
||||
586, 660, 1850, 704, 520, 658, 1828, 658, 1826, 658, 1826, 658, 586, 660,
|
||||
584, 684, 1826, 730, 490, 686, 1824, 660, 560, 710, 532, 710, 534, 712,
|
||||
1776, 712, 1774, 686, 560, 712, 1774, 712, 1798, 730, 492, 712, 1798, 684,
|
||||
1798, 678, 568, 730, 1756, 686, 1796, 686, 532, 712, 532, 712, 1796, 728,
|
||||
494, 712, 532, 738, 1772, 730, 492, 712, 532, 738, 506, 738, 1772, 660,
|
||||
582, 728, 1736, 712, 558, 710, 1750, 710, 558, 710, 510, 738, 1748, 738,
|
||||
508, 736, 1772, 684, 534, 736, 1772, 704, 518, 738, 1772, 660, 1824, 678,
|
||||
6770, 684}; // COOLIX 4624AB
|
||||
irsend.sendRaw(rawData_4624AB, 197, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(decode_type_t::GOODWEATHER, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kGoodweatherBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0xD52462000000, irsend.capture.value);
|
||||
EXPECT_EQ(0x0, irsend.capture.address);
|
||||
EXPECT_EQ(0x0, irsend.capture.command);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
ac.setRaw(irsend.capture.value);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 20C, Fan: 3 (LOW), "
|
||||
"Turbo: -, Light: -, Sleep: -, Swing: 0 (Fast), Command: 0 (Power)",
|
||||
ac.toString());
|
||||
|
||||
uint16_t rawData_FAD2BE31[197] = {
|
||||
6142, 7348, 570, 1612, 638, 1562, 620, 1584, 670, 1538, 566, 1638, 564,
|
||||
1610, 618, 1582, 642, 1542, 638, 498, 622, 518, 618, 496, 622, 518, 596,
|
||||
522, 596, 542, 618, 498, 618, 520, 594, 1590, 614, 1586, 618, 1588, 640,
|
||||
1592, 538, 1614, 612, 1584, 620, 1584, 616, 1592, 564, 546, 596, 540, 596,
|
||||
520, 620, 520, 594, 524, 618, 522, 650, 466, 616, 522, 670, 1532, 618, 1568,
|
||||
590, 1610, 618, 1612, 640, 1530, 594, 1586, 618, 1616, 590, 1586, 640, 472,
|
||||
618, 520, 672, 446, 618, 520, 646, 474, 616, 520, 622, 500, 614, 518, 624,
|
||||
1612, 560, 1616, 590, 1584, 620, 520, 646, 1540, 612, 518, 622, 516, 596,
|
||||
1586, 618, 518, 622, 498, 616, 520, 622, 1582, 616, 498, 620, 1582, 622,
|
||||
1586, 586, 528, 616, 1582, 622, 498, 616, 518, 624, 1582, 614, 1592, 568,
|
||||
544, 620, 1580, 648, 1542, 610, 520, 622, 1586, 666, 1536, 592, 518, 600,
|
||||
542, 594, 1592, 590, 544, 620, 498, 616, 518, 622, 1580, 620, 496, 620,
|
||||
1586, 618, 502, 610, 1584, 620, 518, 672, 446, 620, 1612, 592, 504, 608,
|
||||
1586, 618, 518, 646, 1540, 612, 520, 600, 1604, 622, 1582, 596, 7382, 566};
|
||||
// UNKNOWN FAD2BE31
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendRaw(rawData_FAD2BE31, 197, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(decode_type_t::GOODWEATHER, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kGoodweatherBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0xD52668000000, irsend.capture.value);
|
||||
EXPECT_EQ(0x0, irsend.capture.address);
|
||||
EXPECT_EQ(0x0, irsend.capture.command);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
ac.setRaw(irsend.capture.value);
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 1 (COOL), Temp: 22C, Fan: 3 (LOW), Turbo: -, "
|
||||
"Light: -, Sleep: -, Swing: 2 (Off), Command: 0 (Power)",
|
||||
ac.toString());
|
||||
|
||||
uint16_t rawData_5453D3AD[197] = {
|
||||
6190, 7298, 668, 1542, 614, 1590, 590, 1582, 620, 1584, 566, 1624, 632,
|
||||
1592, 616, 1588, 638, 1538, 594, 520, 620, 520, 594, 522, 620, 520, 586,
|
||||
530, 618, 520, 640, 480, 616, 520, 642, 1544, 612, 1588, 622, 1576, 668,
|
||||
1540, 564, 1640, 592, 1582, 646, 1558, 670, 1536, 594, 518, 622, 520, 594,
|
||||
522, 620, 520, 566, 552, 618, 520, 614, 504, 618, 518, 666, 1520, 610,
|
||||
1586, 618, 1612, 636, 1568, 564, 1590, 614, 1584, 620, 1582, 666, 1542,
|
||||
614, 526, 590, 520, 596, 520, 622, 520, 566, 550, 620, 520, 588, 530, 618,
|
||||
520, 668, 1536, 594, 520, 646, 1558, 668, 452, 616, 1584, 642, 498, 566,
|
||||
550, 618, 1582, 668, 454, 612, 1582, 646, 496, 594, 1614, 666, 450, 662,
|
||||
1536, 584, 1600, 612, 520, 642, 1590, 588, 502, 616, 520, 588, 1600, 612,
|
||||
1586, 616, 520, 612, 1574, 610, 1584, 644, 496, 564, 1620, 636, 1562, 640,
|
||||
524, 560, 530, 616, 1582, 644, 498, 620, 494, 670, 472, 622, 1558, 616,
|
||||
520, 642, 1564, 594, 518, 646, 1558, 668, 454, 638, 494, 668, 1538, 616,
|
||||
498, 642, 1558, 670, 454, 636, 1560, 642, 496, 614, 1592, 616, 1584, 620,
|
||||
7350, 668}; // UNKNOWN 5453D3AD
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendRaw(rawData_5453D3AD, 197, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(decode_type_t::GOODWEATHER, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kGoodweatherBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0xD5266A000000, irsend.capture.value);
|
||||
EXPECT_EQ(0x0, irsend.capture.address);
|
||||
EXPECT_EQ(0x0, irsend.capture.command);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
ac.setRaw(irsend.capture.value);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 22C, Fan: 3 (LOW), Turbo: -, "
|
||||
"Light: -, Sleep: -, Swing: 2 (Off), Command: 0 (Power)",
|
||||
ac.toString());
|
||||
|
||||
uint16_t rawData_B2354FBB[197] = {
|
||||
6192, 7298, 592, 1616, 618, 1584, 620, 1558, 668, 1520, 636, 1562, 642,
|
||||
1584, 590, 1614, 542, 1634, 622, 494, 668, 454, 638, 494, 670, 454, 638,
|
||||
492, 646, 480, 636, 494, 672, 470, 622, 1560, 642, 1556, 672, 1534, 614,
|
||||
1572, 636, 1584, 622, 1582, 644, 1534, 596, 1586, 642, 494, 666, 454, 640,
|
||||
494, 668, 452, 640, 494, 668, 454, 638, 494, 670, 470, 620, 1562, 666,
|
||||
470, 644, 1546, 634, 1584, 618, 1584, 644, 1534, 640, 1548, 636, 1560,
|
||||
644, 520, 542, 1618, 638, 494, 670, 454, 636, 496, 670, 454, 634, 494,
|
||||
672, 470, 620, 1564, 640, 496, 642, 1562, 616, 520, 622, 1558, 668, 450,
|
||||
640, 494, 694, 1536, 566, 524, 644, 1558, 666, 456, 638, 1558, 644, 520,
|
||||
572, 1588, 638, 1558, 644, 494, 590, 1596, 638, 1584, 620, 1584, 644, 454,
|
||||
638, 1556, 672, 472, 620, 1562, 640, 1558, 646, 494, 644, 470, 646, 496,
|
||||
566, 1618, 638, 494, 668, 1534, 646, 468, 674, 468, 568, 550, 670, 1530,
|
||||
670, 454, 638, 1560, 644, 494, 622, 1582, 620, 494, 646, 496, 620, 1560,
|
||||
644, 494, 668, 1522, 610, 518, 674, 1532, 614, 504, 640, 1584, 642, 1562,
|
||||
616, 7332, 594}; // UNKNOWN B2354FBB
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendRaw(rawData_B2354FBB, 197, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(decode_type_t::GOODWEATHER, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kGoodweatherBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0xD5286A020000, irsend.capture.value);
|
||||
EXPECT_EQ(0x0, irsend.capture.address);
|
||||
EXPECT_EQ(0x0, irsend.capture.command);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
ac.setRaw(irsend.capture.value);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 3 (LOW), Turbo: -, "
|
||||
"Light: -, Sleep: -, Swing: 2 (Off), Command: 2 (Temp Up)",
|
||||
ac.toString());
|
||||
|
||||
uint16_t rawData_71DD9105[197] = {
|
||||
6190, 7296, 696, 1496, 634, 1562, 642, 1582, 640, 1564, 564, 1598, 638,
|
||||
1558, 646, 1560, 588, 1616, 618, 520, 620, 494, 622, 494, 646, 494, 620,
|
||||
496, 644, 494, 590, 528, 642, 494, 642, 1544, 638, 1584, 618, 1564, 804,
|
||||
1394, 620, 1564, 640, 1558, 644, 1586, 562, 1616, 620, 492, 672, 470, 622,
|
||||
494, 646, 494, 622, 494, 646, 494, 620, 498, 644, 492, 596, 520, 644, 494,
|
||||
592, 1596, 612, 1584, 642, 1560, 614, 1612, 594, 1584, 620, 1558, 646,
|
||||
1556, 644, 1562, 618, 520, 620, 494, 620, 494, 646, 494, 568, 548, 644,
|
||||
494, 616, 1570, 638, 494, 670, 1534, 568, 550, 646, 1556, 616, 526, 618,
|
||||
492, 672, 1532, 568, 550, 646, 1558, 640, 500, 618, 1560, 668, 470, 642,
|
||||
1548, 658, 1536, 642, 520, 588, 504, 644, 492, 644, 478, 642, 1582, 618,
|
||||
1586, 590, 506, 640, 1556, 646, 1584, 562, 1616, 620, 1558, 646, 1556,
|
||||
670, 454, 638, 492, 648, 1558, 642, 478, 644, 492, 590, 530, 858, 1342,
|
||||
642, 496, 618, 1564, 642, 492, 642, 1548, 636, 492, 648, 494, 622, 1562,
|
||||
642, 492, 644, 1562, 618, 520, 620, 1558, 644, 476, 640, 1558, 646, 1558,
|
||||
612, 7382, 594}; // UNKNOWN 71DD9105
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendRaw(rawData_71DD9105, 197, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(decode_type_t::GOODWEATHER, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kGoodweatherBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0xD5276A030000, irsend.capture.value);
|
||||
EXPECT_EQ(0x0, irsend.capture.address);
|
||||
EXPECT_EQ(0x0, irsend.capture.command);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
ac.setRaw(irsend.capture.value);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 23C, Fan: 3 (LOW), "
|
||||
"Turbo: -, Light: -, Sleep: -, Swing: 2 (Off), Command: 3 (Temp Down)",
|
||||
ac.toString());
|
||||
|
||||
uint16_t rawData_C4F9E573[199] = {
|
||||
6186, 7296, 648, 1558, 670, 1542, 612, 1584, 618, 1560, 668, 1534, 622,
|
||||
1566, 638, 1558, 646, 1584, 590, 506, 640, 492, 642, 480, 640, 494, 644,
|
||||
478, 640, 494, 668, 454, 614, 516, 648, 1560, 566, 1638, 618, 1584, 620,
|
||||
1556, 672, 1534, 620, 1564, 640, 1584, 618, 1586, 564, 528, 670, 468, 640,
|
||||
478, 642, 494, 644, 478, 640, 492, 670, 454, 638, 494, 670, 1560, 542,
|
||||
1636, 644, 468, 670, 1534, 620, 1586, 618, 1558, 646, 1556, 670, 1534,
|
||||
622, 492, 648, 494, 620, 1562, 642, 496, 642, 476, 642, 494, 696, 426,
|
||||
642, 492, 646, 1558, 568, 548, 644, 494, 642, 1564, 618, 1584, 620, 494,
|
||||
568, 548, 644, 1558, 644, 480, 636, 1584, 620, 1584, 644, 456, 634, 494,
|
||||
672, 1560, 540, 1638, 618, 494, 728, 1476, 592, 524, 646, 492, 616, 1572,
|
||||
638, 1560, 644, 492, 668, 1520, 638, 1562, 642, 494, 588, 1598, 638, 1560,
|
||||
642, 494, 622, 498, 642, 1556, 646, 478, 638, 492, 646, 494, 620, 1584,
|
||||
618, 522, 616, 1546, 612, 516, 648, 1556, 644, 476, 668, 468, 670, 1534,
|
||||
620, 494, 648, 1556, 670, 452, 640, 1558, 644, 496, 646, 1536, 616, 1582,
|
||||
646, 7326, 616, 41598, 230}; // UNKNOWN C4F9E573
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendRaw(rawData_C4F9E573, 199, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(decode_type_t::GOODWEATHER, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kGoodweatherBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0xD52666040000, irsend.capture.value);
|
||||
EXPECT_EQ(0x0, irsend.capture.address);
|
||||
EXPECT_EQ(0x0, irsend.capture.command);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
ac.setRaw(irsend.capture.value);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 22C, Fan: 3 (LOW), Turbo: -, Light: -, "
|
||||
"Sleep: -, Swing: 1 (Slow), Command: 4 (Swing)",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestGoodweatherAcClass, toCommon) {
|
||||
IRGoodweatherAc ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kGoodweatherCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kGoodweatherFanHigh);
|
||||
ac.setSwing(kGoodweatherSwingFast);
|
||||
ac.setTurbo(true);
|
||||
ac.setLight(true);
|
||||
ac.setSleep(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::GOODWEATHER, ac.toCommon().protocol);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_TRUE(ac.toCommon().turbo);
|
||||
ASSERT_TRUE(ac.toCommon().light);
|
||||
ASSERT_EQ(0, ac.toCommon().sleep);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
|
||||
|
||||
TEST(TestGoodweatherAcClass, Temperature) {
|
||||
IRGoodweatherAc ac(0);
|
||||
|
||||
ac.setTemp(kGoodweatherTempMin);
|
||||
EXPECT_EQ(kGoodweatherTempMin, ac.getTemp());
|
||||
|
||||
ac.setTemp(kGoodweatherTempMin + 1);
|
||||
EXPECT_EQ(kGoodweatherTempMin + 1, ac.getTemp());
|
||||
|
||||
ac.setTemp(kGoodweatherTempMax);
|
||||
EXPECT_EQ(kGoodweatherTempMax, ac.getTemp());
|
||||
|
||||
ac.setTemp(kGoodweatherTempMin - 1);
|
||||
EXPECT_EQ(kGoodweatherTempMin, ac.getTemp());
|
||||
|
||||
ac.setTemp(kGoodweatherTempMax + 1);
|
||||
EXPECT_EQ(kGoodweatherTempMax, ac.getTemp());
|
||||
|
||||
ac.setTemp(23);
|
||||
EXPECT_EQ(23, ac.getTemp());
|
||||
|
||||
ac.setTemp(27);
|
||||
EXPECT_EQ(27, ac.getTemp());
|
||||
|
||||
ac.setTemp(22);
|
||||
EXPECT_EQ(22, ac.getTemp());
|
||||
|
||||
ac.setTemp(25);
|
||||
EXPECT_EQ(25, ac.getTemp());
|
||||
|
||||
ac.setTemp(0);
|
||||
EXPECT_EQ(kGoodweatherTempMin, ac.getTemp());
|
||||
|
||||
ac.setTemp(255);
|
||||
EXPECT_EQ(kGoodweatherTempMax, ac.getTemp());
|
||||
}
|
||||
|
||||
TEST(TestGoodweatherAcClass, OperatingMode) {
|
||||
IRGoodweatherAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setMode(kGoodweatherAuto);
|
||||
EXPECT_EQ(kGoodweatherAuto, ac.getMode());
|
||||
|
||||
ac.setMode(kGoodweatherCool);
|
||||
EXPECT_EQ(kGoodweatherCool, ac.getMode());
|
||||
|
||||
ac.setMode(kGoodweatherHeat);
|
||||
EXPECT_EQ(kGoodweatherHeat, ac.getMode());
|
||||
|
||||
ac.setMode(kGoodweatherFan); // Should set fan speed to High.
|
||||
EXPECT_EQ(kGoodweatherFan, ac.getMode());
|
||||
|
||||
ac.setMode(kGoodweatherDry);
|
||||
EXPECT_EQ(kGoodweatherDry, ac.getMode());
|
||||
|
||||
ac.setMode(kGoodweatherHeat + 1);
|
||||
EXPECT_EQ(kGoodweatherAuto, ac.getMode());
|
||||
|
||||
ac.setMode(kGoodweatherCool);
|
||||
EXPECT_EQ(kGoodweatherCool, ac.getMode());
|
||||
|
||||
ac.setMode(kGoodweatherAuto - 1);
|
||||
EXPECT_EQ(kGoodweatherAuto, ac.getMode());
|
||||
|
||||
ac.setMode(kGoodweatherCool);
|
||||
ac.setMode(255);
|
||||
EXPECT_EQ(kGoodweatherAuto, ac.getMode());
|
||||
|
||||
ac.setMode(kGoodweatherCool);
|
||||
ac.setMode(0);
|
||||
EXPECT_EQ(kGoodweatherAuto, ac.getMode());
|
||||
}
|
||||
|
||||
TEST(TestGoodweatherAcClass, Power) {
|
||||
IRGoodweatherAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setPower(true);
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
|
||||
ac.setPower(false);
|
||||
EXPECT_EQ(false, ac.getPower());
|
||||
|
||||
ac.setPower(true);
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
|
||||
ac.off();
|
||||
EXPECT_EQ(false, ac.getPower());
|
||||
|
||||
ac.on();
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
}
|
||||
|
||||
TEST(TestGoodweatherAcClass, Light) {
|
||||
IRGoodweatherAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setLight(true);
|
||||
EXPECT_TRUE(ac.getLight());
|
||||
ac.setLight(false);
|
||||
EXPECT_EQ(false, ac.getLight());
|
||||
ac.setLight(true);
|
||||
EXPECT_TRUE(ac.getLight());
|
||||
}
|
||||
|
||||
TEST(TestGoodweatherAcClass, Turbo) {
|
||||
IRGoodweatherAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setTurbo(true);
|
||||
EXPECT_TRUE(ac.getTurbo());
|
||||
ac.setTurbo(false);
|
||||
EXPECT_EQ(false, ac.getTurbo());
|
||||
ac.setTurbo(true);
|
||||
EXPECT_TRUE(ac.getTurbo());
|
||||
}
|
||||
|
||||
TEST(TestGoodweatherAcClass, Sleep) {
|
||||
IRGoodweatherAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setSleep(true);
|
||||
EXPECT_TRUE(ac.getSleep());
|
||||
ac.setSleep(false);
|
||||
EXPECT_EQ(false, ac.getSleep());
|
||||
ac.setSleep(true);
|
||||
EXPECT_TRUE(ac.getSleep());
|
||||
}
|
||||
|
||||
TEST(TestGoodweatherAcClass, FanSpeed) {
|
||||
IRGoodweatherAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
// Unexpected value should default to Auto.
|
||||
ac.setFan(255);
|
||||
EXPECT_EQ(kGoodweatherFanAuto, ac.getFan());
|
||||
|
||||
ac.setFan(kGoodweatherFanLow);
|
||||
EXPECT_EQ(kGoodweatherFanLow, ac.getFan());
|
||||
ac.setFan(kGoodweatherFanMed);
|
||||
EXPECT_EQ(kGoodweatherFanMed, ac.getFan());
|
||||
ac.setFan(kGoodweatherFanHigh);
|
||||
EXPECT_EQ(kGoodweatherFanHigh, ac.getFan());
|
||||
ac.setFan(kGoodweatherFanAuto);
|
||||
EXPECT_EQ(kGoodweatherFanAuto, ac.getFan());
|
||||
|
||||
// Beyond Low should default to Auto.
|
||||
ac.setFan(kGoodweatherFanLow + 1);
|
||||
EXPECT_EQ(kGoodweatherFanAuto, ac.getFan());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestGoodweatherAcClass, SwingSpeed) {
|
||||
IRGoodweatherAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
// Unexpected value should default to Off.
|
||||
ac.setSwing(255);
|
||||
EXPECT_EQ(kGoodweatherSwingOff, ac.getSwing());
|
||||
|
||||
ac.setSwing(kGoodweatherSwingSlow);
|
||||
EXPECT_EQ(kGoodweatherSwingSlow, ac.getSwing());
|
||||
ac.setSwing(kGoodweatherSwingOff);
|
||||
EXPECT_EQ(kGoodweatherSwingOff, ac.getSwing());
|
||||
ac.setSwing(kGoodweatherSwingFast);
|
||||
EXPECT_EQ(kGoodweatherSwingFast, ac.getSwing());
|
||||
|
||||
// Beyond Off should default to Off.
|
||||
ac.setSwing(kGoodweatherSwingOff + 1);
|
||||
EXPECT_EQ(kGoodweatherSwingOff, ac.getSwing());
|
||||
}
|
||||
|
||||
TEST(TestGoodweatherAcClass, Command) {
|
||||
IRGoodweatherAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setCommand(kGoodweatherCmdMode);
|
||||
EXPECT_EQ(kGoodweatherCmdMode, ac.getCommand());
|
||||
// Unexpected value should not change anything.
|
||||
ac.setCommand(255);
|
||||
EXPECT_EQ(kGoodweatherCmdMode, ac.getCommand());
|
||||
|
||||
ac.setCommand(kGoodweatherCmdPower);
|
||||
EXPECT_EQ(kGoodweatherCmdPower, ac.getCommand());
|
||||
ac.setCommand(kGoodweatherCmdLight);
|
||||
EXPECT_EQ(kGoodweatherCmdLight, ac.getCommand());
|
||||
|
||||
// Beyond Light should be ignored.
|
||||
ac.setCommand(kGoodweatherCmdLight + 1);
|
||||
EXPECT_EQ(kGoodweatherCmdLight, ac.getCommand());
|
||||
}
|
||||
@@ -20,7 +20,8 @@ TEST(TestSendGreeChars, SendData) {
|
||||
irsend.reset();
|
||||
irsend.sendGree(gree_code);
|
||||
EXPECT_EQ(
|
||||
"m9000s4000"
|
||||
"f38000d50"
|
||||
"m9000s4500"
|
||||
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
|
||||
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
|
||||
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
|
||||
@@ -42,7 +43,8 @@ TEST(TestSendGreeUint64, SendData) {
|
||||
irsend.reset();
|
||||
irsend.sendGree(0x1234567890ABCDEF);
|
||||
EXPECT_EQ(
|
||||
"m9000s4000"
|
||||
"f38000d50"
|
||||
"m9000s4500"
|
||||
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
|
||||
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
|
||||
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
|
||||
@@ -69,7 +71,8 @@ TEST(TestSendGreeChars, SendWithRepeats) {
|
||||
|
||||
irsend.sendGree(gree_code, kGreeStateLength, 1);
|
||||
EXPECT_EQ(
|
||||
"m9000s4000"
|
||||
"f38000d50"
|
||||
"m9000s4500"
|
||||
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
|
||||
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
|
||||
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
|
||||
@@ -81,7 +84,7 @@ TEST(TestSendGreeChars, SendWithRepeats) {
|
||||
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
|
||||
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
|
||||
"m620s19000"
|
||||
"m9000s4000"
|
||||
"m9000s4500"
|
||||
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
|
||||
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
|
||||
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
|
||||
@@ -103,7 +106,8 @@ TEST(TestSendGreeUint64, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendGree(0x1234567890ABCDEF, kGreeBits, 1);
|
||||
EXPECT_EQ(
|
||||
"m9000s4000"
|
||||
"f38000d50"
|
||||
"m9000s4500"
|
||||
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
|
||||
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
|
||||
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
|
||||
@@ -115,7 +119,7 @@ TEST(TestSendGreeUint64, SendWithRepeats) {
|
||||
"m620s1600m620s540m620s1600m620s1600m620s540m620s540m620s1600m620s1600"
|
||||
"m620s1600m620s1600m620s1600m620s1600m620s540m620s1600m620s1600m620s1600"
|
||||
"m620s19000"
|
||||
"m9000s4000"
|
||||
"m9000s4500"
|
||||
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
|
||||
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
|
||||
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
|
||||
@@ -146,7 +150,8 @@ TEST(TestSendGreeChars, SendUnexpectedSizes) {
|
||||
irsend.reset();
|
||||
irsend.sendGree(gree_long_code, kGreeStateLength + 1);
|
||||
ASSERT_EQ(
|
||||
"m9000s4000"
|
||||
"f38000d50"
|
||||
"m9000s4500"
|
||||
"m620s540m620s1600m620s540m620s540m620s1600m620s540m620s540m620s540"
|
||||
"m620s540m620s540m620s1600m620s540m620s1600m620s1600m620s540m620s540"
|
||||
"m620s540m620s1600m620s1600m620s540m620s1600m620s540m620s1600m620s540"
|
||||
@@ -486,7 +491,7 @@ TEST(TestDecodeGree, NormalSynthetic) {
|
||||
EXPECT_STATE_EQ(gree_code, irsend.capture.state, kGreeBits);
|
||||
}
|
||||
|
||||
// Decode a synthetic Gree message.
|
||||
// Decode a real Gree message.
|
||||
TEST(TestDecodeGree, NormalRealExample) {
|
||||
IRsendTest irsend(4);
|
||||
IRrecv irrecv(4);
|
||||
@@ -525,3 +530,36 @@ TEST(TestDecodeGree, NormalRealExample) {
|
||||
"Swing Vertical Pos: 2",
|
||||
irgree.toString());
|
||||
}
|
||||
|
||||
TEST(TestGreeClass, toCommon) {
|
||||
IRGreeAC ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kGreeCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kGreeFanMax);
|
||||
ac.setSwingVertical(false, kGreeSwingUp);
|
||||
ac.setTurbo(true);
|
||||
ac.setXFan(true);
|
||||
ac.setLight(true);
|
||||
ac.setSleep(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::GREE, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_TRUE(ac.toCommon().turbo);
|
||||
ASSERT_TRUE(ac.toCommon().clean);
|
||||
ASSERT_TRUE(ac.toCommon().light);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kHighest, ac.toCommon().swingv);
|
||||
ASSERT_EQ(0, ac.toCommon().sleep);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -19,6 +19,7 @@ TEST(TestSendHaierAC, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendHaierAC(haier_zero);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3000s3000m3000s4300"
|
||||
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
|
||||
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s650"
|
||||
@@ -37,6 +38,7 @@ TEST(TestSendHaierAC, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendHaierAC(haier_test);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3000s3000m3000s4300"
|
||||
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
|
||||
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
|
||||
@@ -62,6 +64,7 @@ TEST(TestSendHaierAC, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendHaierAC(haier_test, kHaierACStateLength, 2); // two repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3000s3000m3000s4300"
|
||||
"m520s1650m520s650m520s1650m520s650m520s650m520s1650m520s650m520s1650"
|
||||
"m520s650m520s650m520s650m520s650m520s650m520s650m520s650m520s1650"
|
||||
@@ -374,7 +377,7 @@ TEST(TestHaierACClass, MessageConstuction) {
|
||||
haier.setSleep(true);
|
||||
haier.setCurrTime(615); // 10:15am
|
||||
EXPECT_EQ(
|
||||
"Command: 8 (Sleep), Mode: 3 (HEAT), Temp: 21C, Fan: 3 (MAX), "
|
||||
"Command: 8 (Sleep), Mode: 1 (COOL), Temp: 21C, Fan: 3 (MAX), "
|
||||
"Swing: 3 (Chg), Sleep: On, Health: On, "
|
||||
"Current Time: 10:15, On Timer: Off, Off Timer: Off",
|
||||
haier.toString());
|
||||
@@ -383,7 +386,7 @@ TEST(TestHaierACClass, MessageConstuction) {
|
||||
haier.setCommand(kHaierAcCmdOn);
|
||||
|
||||
EXPECT_EQ(
|
||||
"Command: 1 (On), Mode: 2 (DRY), Temp: 21C, Fan: 2, "
|
||||
"Command: 1 (On), Mode: 1 (COOL), Temp: 21C, Fan: 2, "
|
||||
"Swing: 3 (Chg), Sleep: On, Health: On, "
|
||||
"Current Time: 10:15, On Timer: 13:20, Off Timer: 18:45",
|
||||
haier.toString());
|
||||
@@ -393,18 +396,18 @@ TEST(TestHaierACClass, MessageConstuction) {
|
||||
EXPECT_EQ(
|
||||
"Command: 2 (Mode), Mode: 3 (HEAT), Temp: 21C, Fan: 2, "
|
||||
"Swing: 3 (Chg), Sleep: On, Health: On, "
|
||||
"Current Time: 10:15, On Timer: 13:52, Off Timer: 18:45",
|
||||
"Current Time: 10:15, On Timer: 13:20, Off Timer: 18:45",
|
||||
haier.toString());
|
||||
|
||||
haier.setTemp(25);
|
||||
EXPECT_EQ(
|
||||
"Command: 6 (Temp Up), Mode: 3 (HEAT), Temp: 25C, Fan: 2, "
|
||||
"Swing: 3 (Chg), Sleep: On, Health: On, "
|
||||
"Current Time: 10:15, On Timer: 13:52, Off Timer: 18:45",
|
||||
"Current Time: 10:15, On Timer: 13:20, Off Timer: 18:45",
|
||||
haier.toString());
|
||||
|
||||
uint8_t expectedState[kHaierACStateLength] = {0xA5, 0x96, 0xEA, 0xCF, 0x32,
|
||||
0x2D, 0x0D, 0x74, 0xD4};
|
||||
0xED, 0x6D, 0x54, 0xD4};
|
||||
EXPECT_STATE_EQ(expectedState, haier.getRaw(), kHaierACBits);
|
||||
|
||||
// Check that the checksum is valid.
|
||||
@@ -828,7 +831,7 @@ TEST(TestDecodeHaierAC, RealExample1) {
|
||||
IRHaierAC haier(0);
|
||||
haier.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Command: 1 (On), Mode: 0 (AUTO), Temp: 16C, Fan: 0 (AUTO), "
|
||||
"Command: 1 (On), Mode: 1 (COOL), Temp: 16C, Fan: 0 (AUTO), "
|
||||
"Swing: 0 (Off), Sleep: Off, Health: Off, "
|
||||
"Current Time: 00:01, On Timer: Off, Off Timer: Off",
|
||||
haier.toString());
|
||||
@@ -870,7 +873,7 @@ TEST(TestDecodeHaierAC, RealExample2) {
|
||||
IRHaierAC haier(0);
|
||||
haier.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Command: 6 (Temp Up), Mode: 0 (AUTO), Temp: 22C, Fan: 0 (AUTO), "
|
||||
"Command: 6 (Temp Up), Mode: 1 (COOL), Temp: 22C, Fan: 0 (AUTO), "
|
||||
"Swing: 0 (Off), Sleep: Off, Health: Off, "
|
||||
"Current Time: 00:01, On Timer: Off, Off Timer: Off",
|
||||
haier.toString());
|
||||
@@ -912,7 +915,7 @@ TEST(TestDecodeHaierAC, RealExample3) {
|
||||
IRHaierAC haier(0);
|
||||
haier.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Command: 12 (Health), Mode: 0 (AUTO), Temp: 30C, Fan: 0 (AUTO), "
|
||||
"Command: 12 (Health), Mode: 1 (COOL), Temp: 30C, Fan: 0 (AUTO), "
|
||||
"Swing: 0 (Off), Sleep: Off, Health: On, "
|
||||
"Current Time: 00:09, On Timer: Off, Off Timer: Off",
|
||||
haier.toString());
|
||||
@@ -987,3 +990,154 @@ TEST(TestDecodeHaierAC_YRW02, RealExample) {
|
||||
" Health: On",
|
||||
haier.toString());
|
||||
}
|
||||
|
||||
// Default state of the remote needed to include hidden data.
|
||||
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/668
|
||||
TEST(TestHaierAcIssues, Issue668) {
|
||||
IRHaierAC ac(0);
|
||||
IRHaierAC acText(1);
|
||||
IRrecv irrecv(0);
|
||||
ac.begin();
|
||||
|
||||
// Turn on the AC.
|
||||
ac._irsend.reset();
|
||||
char expected_on[] =
|
||||
"Command: 1 (On), Mode: 1 (COOL), Temp: 25C, Fan: 0 (AUTO), "
|
||||
"Swing: 0 (Off), Sleep: Off, Health: Off, Current Time: 00:00, "
|
||||
"On Timer: Off, Off Timer: Off";
|
||||
// State taken from real capture:
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/668#issuecomment-483531895
|
||||
uint8_t expected_on_state[9] = {
|
||||
0xA5, 0x91, 0x20, 0x00, 0x0C, 0xC0, 0x20, 0x00, 0x42};
|
||||
ac.setMode(kHaierAcCool);
|
||||
ac.setCommand(kHaierAcCmdOn);
|
||||
EXPECT_EQ(expected_on, ac.toString());
|
||||
ac.send();
|
||||
ac._irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(HAIER_AC, ac._irsend.capture.decode_type);
|
||||
EXPECT_EQ(kHaierACBits, ac._irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expected_on_state,
|
||||
ac._irsend.capture.state, ac._irsend.capture.bits);
|
||||
acText.setRaw(ac._irsend.capture.state);
|
||||
EXPECT_EQ(expected_on, acText.toString());
|
||||
|
||||
// Set the temp to 25C
|
||||
ac._irsend.reset();
|
||||
ac.setTemp(25);
|
||||
EXPECT_EQ(expected_on, ac.toString());
|
||||
ASSERT_EQ(25, ac.getTemp());
|
||||
ac.send();
|
||||
ac._irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(HAIER_AC, ac._irsend.capture.decode_type);
|
||||
EXPECT_EQ(kHaierACBits, ac._irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expected_on_state,
|
||||
ac._irsend.capture.state, ac._irsend.capture.bits);
|
||||
acText.setRaw(ac._irsend.capture.state);
|
||||
EXPECT_EQ(expected_on, acText.toString());
|
||||
|
||||
// Increase the temp by 1.
|
||||
ac._irsend.reset();
|
||||
char expected_temp_plus_one[] =
|
||||
"Command: 6 (Temp Up), Mode: 1 (COOL), Temp: 26C, Fan: 0 (AUTO), "
|
||||
"Swing: 0 (Off), Sleep: Off, Health: Off, Current Time: 00:00, "
|
||||
"On Timer: Off, Off Timer: Off";
|
||||
// State taken from real capture:
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/668#issuecomment-483531895
|
||||
uint8_t expected_temp_plus_one_state[9] = {
|
||||
0xA5, 0xA6, 0x20, 0x00, 0x0C, 0xC0, 0x20, 0x00, 0x57};
|
||||
ASSERT_EQ(25, ac.getTemp());
|
||||
ac.setTemp(ac.getTemp() + 1);
|
||||
ASSERT_EQ(26, ac.getTemp());
|
||||
EXPECT_EQ(expected_temp_plus_one, ac.toString());
|
||||
ac.send();
|
||||
ac._irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(HAIER_AC, ac._irsend.capture.decode_type);
|
||||
EXPECT_EQ(kHaierACBits, ac._irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expected_temp_plus_one_state,
|
||||
ac._irsend.capture.state, ac._irsend.capture.bits);
|
||||
acText.setRaw(ac._irsend.capture.state);
|
||||
EXPECT_EQ(expected_temp_plus_one, acText.toString());
|
||||
|
||||
// Decrease the temp by 1.
|
||||
ac._irsend.reset();
|
||||
char expected_temp_minus_one[] =
|
||||
"Command: 7 (Temp Down), Mode: 1 (COOL), Temp: 25C, Fan: 0 (AUTO), "
|
||||
"Swing: 0 (Off), Sleep: Off, Health: Off, Current Time: 00:00, "
|
||||
"On Timer: Off, Off Timer: Off";
|
||||
ASSERT_EQ(26, ac.getTemp());
|
||||
ac.setTemp(ac.getTemp() - 1);
|
||||
ASSERT_EQ(25, ac.getTemp());
|
||||
EXPECT_EQ(expected_temp_minus_one, ac.toString());
|
||||
ac.send();
|
||||
ac._irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&ac._irsend.capture));
|
||||
ASSERT_EQ(HAIER_AC, ac._irsend.capture.decode_type);
|
||||
EXPECT_EQ(kHaierACBits, ac._irsend.capture.bits);
|
||||
acText.setRaw(ac._irsend.capture.state);
|
||||
EXPECT_EQ(expected_temp_minus_one, acText.toString());
|
||||
}
|
||||
|
||||
TEST(TestHaierACClass, toCommon) {
|
||||
IRHaierAC ac(0);
|
||||
ac.setCommand(kHaierAcCmdOn);
|
||||
ac.setMode(kHaierAcCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kHaierAcFanHigh);
|
||||
ac.setSwing(kHaierAcSwingChg);
|
||||
ac.setHealth(true);
|
||||
ac.setSleep(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::HAIER_AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_TRUE(ac.toCommon().filter);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_EQ(0, ac.toCommon().sleep);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
|
||||
TEST(TestHaierACYRW02Class, toCommon) {
|
||||
IRHaierACYRW02 ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kHaierAcYrw02Cool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kHaierAcYrw02FanHigh);
|
||||
ac.setSwing(kHaierAcYrw02SwingTop);
|
||||
ac.setHealth(true);
|
||||
ac.setSleep(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::HAIER_AC_YRW02, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_TRUE(ac.toCommon().filter);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kHighest, ac.toCommon().swingv);
|
||||
ASSERT_EQ(0, ac.toCommon().sleep);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -22,6 +22,7 @@ TEST(TestSendHitachiAC, SendData) {
|
||||
irsend.reset();
|
||||
irsend.sendHitachiAC(hitachi_code);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3300s1700"
|
||||
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
|
||||
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
|
||||
@@ -68,6 +69,7 @@ TEST(TestSendHitachiAC, SendWithRepeats) {
|
||||
|
||||
irsend.sendHitachiAC(hitachi_code, kHitachiAcStateLength, 1);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3300s1700"
|
||||
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
|
||||
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
|
||||
@@ -151,6 +153,7 @@ TEST(TestSendHitachiAC, SendUnexpectedSizes) {
|
||||
irsend.reset();
|
||||
irsend.sendHitachiAC(hitachi_long_code, kHitachiAcStateLength + 1);
|
||||
ASSERT_EQ(
|
||||
"f38000d50"
|
||||
"m3300s1700"
|
||||
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
|
||||
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
|
||||
@@ -511,6 +514,7 @@ TEST(TestSendHitachiAC1, SendData) {
|
||||
irsend.reset();
|
||||
irsend.sendHitachiAC1(hitachi_code);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3400s3400"
|
||||
"m400s1250m400s500m400s1250m400s1250m400s500m400s500m400s1250m400s500"
|
||||
"m400s1250m400s500m400s1250m400s500m400s1250m400s1250m400s1250m400s500"
|
||||
@@ -585,6 +589,7 @@ TEST(TestSendHitachiAC2, SendData) {
|
||||
irsend.reset();
|
||||
irsend.sendHitachiAC2(hitachi_code);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3300s1700"
|
||||
"m400s1250m400s500m400s500m400s500m400s500m400s500m400s500m400s500"
|
||||
"m400s500m400s500m400s500m400s500m400s1250m400s500m400s500m400s500"
|
||||
@@ -763,3 +768,33 @@ TEST(TestDecodeHitachiAC2, NormalRealExample) {
|
||||
ASSERT_EQ(kHitachiAc2Bits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(hitachi_code, irsend.capture.state, kHitachiAc2Bits);
|
||||
}
|
||||
|
||||
TEST(TestIRHitachiAcClass, toCommon) {
|
||||
IRHitachiAc ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kHitachiAcCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kHitachiAcFanHigh);
|
||||
ac.setSwingVertical(true);
|
||||
ac.setSwingHorizontal(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::HITACHI_AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kAuto, ac.toCommon().swingh);
|
||||
// Unsupported.
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
// Copyright 2019 crankyoldgit (David Conran)
|
||||
|
||||
#include "IRsend.h"
|
||||
#include "IRsend_test.h"
|
||||
#include "IRutils.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
|
||||
// General housekeeping
|
||||
TEST(TestInax, Housekeeping) {
|
||||
ASSERT_EQ("INAX", typeToString(INAX));
|
||||
ASSERT_FALSE(hasACState(INAX));
|
||||
}
|
||||
|
||||
// Tests for sendInax().
|
||||
// Test sending typical data only.
|
||||
TEST(TestSendInax, SendDataOnly) {
|
||||
IRsendTest irsend(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendInax(0x5C32CD); // Small flush.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m9000s4500"
|
||||
"m560s560m560s1675m560s560m560s1675m560s1675m560s1675m560s560m560s560"
|
||||
"m560s560m560s560m560s1675m560s1675m560s560m560s560m560s1675m560s560"
|
||||
"m560s1675m560s1675m560s560m560s560m560s1675m560s1675m560s560m560s1675"
|
||||
"m560s40000"
|
||||
"m9000s4500"
|
||||
"m560s560m560s1675m560s560m560s1675m560s1675m560s1675m560s560m560s560"
|
||||
"m560s560m560s560m560s1675m560s1675m560s560m560s560m560s1675m560s560"
|
||||
"m560s1675m560s1675m560s560m560s560m560s1675m560s1675m560s560m560s1675"
|
||||
"m560s40000",
|
||||
irsend.outputStr());
|
||||
|
||||
irsend.reset();
|
||||
}
|
||||
|
||||
// Test sending with different repeats.
|
||||
TEST(TestSendInax, SendWithRepeats) {
|
||||
IRsendTest irsend(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendInax(0x5C32CD, kInaxBits, 0); // 0 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m9000s4500"
|
||||
"m560s560m560s1675m560s560m560s1675m560s1675m560s1675m560s560m560s560"
|
||||
"m560s560m560s560m560s1675m560s1675m560s560m560s560m560s1675m560s560"
|
||||
"m560s1675m560s1675m560s560m560s560m560s1675m560s1675m560s560m560s1675"
|
||||
"m560s40000",
|
||||
irsend.outputStr());
|
||||
irsend.sendInax(0x5C32CD, kInaxBits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m9000s4500"
|
||||
"m560s560m560s1675m560s560m560s1675m560s1675m560s1675m560s560m560s560"
|
||||
"m560s560m560s560m560s1675m560s1675m560s560m560s560m560s1675m560s560"
|
||||
"m560s1675m560s1675m560s560m560s560m560s1675m560s1675m560s560m560s1675"
|
||||
"m560s40000"
|
||||
"m9000s4500"
|
||||
"m560s560m560s1675m560s560m560s1675m560s1675m560s1675m560s560m560s560"
|
||||
"m560s560m560s560m560s1675m560s1675m560s560m560s560m560s1675m560s560"
|
||||
"m560s1675m560s1675m560s560m560s560m560s1675m560s1675m560s560m560s1675"
|
||||
"m560s40000"
|
||||
"m9000s4500"
|
||||
"m560s560m560s1675m560s560m560s1675m560s1675m560s1675m560s560m560s560"
|
||||
"m560s560m560s560m560s1675m560s1675m560s560m560s560m560s1675m560s560"
|
||||
"m560s1675m560s1675m560s560m560s560m560s1675m560s1675m560s560m560s1675"
|
||||
"m560s40000",
|
||||
irsend.outputStr());
|
||||
}
|
||||
|
||||
// Tests for decodeInax().
|
||||
|
||||
// Decode normal Inax messages.
|
||||
TEST(TestDecodeInax, SyntheticDecode) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
// Normal Inax 24-bit message.
|
||||
irsend.reset();
|
||||
irsend.sendInax(0x5C32CD);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(INAX, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kInaxBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x5C32CD, irsend.capture.value);
|
||||
EXPECT_EQ(0, irsend.capture.address);
|
||||
EXPECT_EQ(0, irsend.capture.command);
|
||||
}
|
||||
|
||||
// Decode real example via Issue #704
|
||||
TEST(TestDecodeInax, DecodeExamples) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
// Inax Small Flush from Issue #309
|
||||
uint16_t smallFlushRawData[51] = {
|
||||
8996, 4474, 568, 556, 560, 1676, 568, 556, 562, 1676, 562, 1678, 566,
|
||||
1674, 566, 558, 560, 560, 566, 556, 566, 556, 560, 1678, 562, 1676, 566,
|
||||
556, 562, 560, 564, 1672, 566, 556, 562, 1676, 562, 1678, 562, 560, 564,
|
||||
558, 564, 1674, 560, 1678, 564, 560, 566, 1670, 562};
|
||||
|
||||
irsend.sendRaw(smallFlushRawData, 51, 38);
|
||||
irsend.makeDecodeResult();
|
||||
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(INAX, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kInaxBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x5C32CD, irsend.capture.value);
|
||||
EXPECT_EQ(0, irsend.capture.address);
|
||||
EXPECT_EQ(0, irsend.capture.command);
|
||||
}
|
||||
@@ -14,6 +14,7 @@ TEST(TestSendJVC, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendJVC(0xC2B8); // JVC VCR Power On.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8400s4200"
|
||||
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
|
||||
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
|
||||
@@ -29,6 +30,7 @@ TEST(TestSendJVC, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendJVC(0xC2B8, kJvcBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8400s4200"
|
||||
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
|
||||
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
|
||||
@@ -39,6 +41,7 @@ TEST(TestSendJVC, SendWithRepeats) {
|
||||
irsend.outputStr());
|
||||
irsend.sendJVC(0xC2B8, kJvcBits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8400s4200"
|
||||
"m525s1725m525s1725m525s525m525s525m525s525m525s525m525s1725m525s525"
|
||||
"m525s1725m525s525m525s1725m525s1725m525s1725m525s525m525s525m525s525"
|
||||
@@ -60,6 +63,7 @@ TEST(TestSendJVC, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendJVC(0x0, 8);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8400s4200"
|
||||
"m525s525m525s525m525s525m525s525m525s525m525s525m525s525m525s525"
|
||||
"m525s38475",
|
||||
@@ -68,6 +72,7 @@ TEST(TestSendJVC, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendJVC(0x1234567890ABCDEF, 64);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8400s4200"
|
||||
"m525s525m525s525m525s525m525s1725m525s525m525s525m525s1725m525s525"
|
||||
"m525s525m525s525m525s1725m525s1725m525s525m525s1725m525s525m525s525"
|
||||
|
||||
@@ -21,6 +21,7 @@ TEST(TestSendKelvinator, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendKelvinator(kelv_code);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m9010s4505"
|
||||
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
|
||||
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
|
||||
@@ -61,6 +62,7 @@ TEST(TestSendKelvinator, SendWithRepeats) {
|
||||
|
||||
irsend.sendKelvinator(kelv_code, kKelvinatorStateLength, 1);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m9010s4505"
|
||||
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
|
||||
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
|
||||
@@ -131,6 +133,7 @@ TEST(TestSendKelvinator, SendUnexpectedSizes) {
|
||||
// extra data.
|
||||
irsend.sendKelvinator(kelv_long_code, 17);
|
||||
ASSERT_EQ(
|
||||
"f38000d50"
|
||||
"m9010s4505"
|
||||
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s510m680s510"
|
||||
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
|
||||
@@ -472,6 +475,7 @@ TEST(TestKelvinatorClass, MessageConstuction) {
|
||||
irsend.reset();
|
||||
irsend.sendKelvinator(irkelv.getRaw());
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m9010s4505"
|
||||
"m680s1530m680s510m680s510m680s1530m680s1530m680s510m680s1530m680s510"
|
||||
"m680s1530m680s1530m680s510m680s1530m680s510m680s510m680s510m680s510"
|
||||
@@ -516,3 +520,39 @@ TEST(TestDecodeKelvinator, NormalSynthetic) {
|
||||
ASSERT_EQ(kKelvinatorBits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(kelv_code, irsend.capture.state, kKelvinatorBits);
|
||||
}
|
||||
|
||||
TEST(TestKelvinatorClass, toCommon) {
|
||||
IRKelvinatorAC ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kKelvinatorCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kKelvinatorFanMax);
|
||||
ac.setIonFilter(true);
|
||||
ac.setXFan(true);
|
||||
ac.setQuiet(false);
|
||||
ac.setTurbo(true);
|
||||
ac.setLight(true);
|
||||
ac.setSwingHorizontal(false);
|
||||
ac.setSwingVertical(true);
|
||||
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::KELVINATOR, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_TRUE(ac.toCommon().filter);
|
||||
ASSERT_TRUE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_TRUE(ac.toCommon().turbo);
|
||||
ASSERT_TRUE(ac.toCommon().light);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
// Unsupported.
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -30,6 +30,7 @@ TEST(TestSendLG, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendLG(0x4B4AE51);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8500s4250"
|
||||
"m550s550m550s1600m550s550m550s550"
|
||||
"m550s1600m550s550m550s1600m550s1600m550s550m550s1600m550s550m550s550"
|
||||
@@ -41,6 +42,7 @@ TEST(TestSendLG, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendLG(0xB4B4AE51, kLg32Bits);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m4480s4480"
|
||||
"m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
|
||||
"m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
|
||||
@@ -59,6 +61,7 @@ TEST(TestSendLG, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendLG(0x4B4AE51, kLgBits, 1);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8500s4250"
|
||||
"m550s550m550s1600m550s550m550s550"
|
||||
"m550s1600m550s550m550s1600m550s1600m550s550m550s1600m550s550m550s550"
|
||||
@@ -71,6 +74,7 @@ TEST(TestSendLG, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendLG(0xB4B4AE51, kLg32Bits, 1);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m4480s4480"
|
||||
"m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
|
||||
"m560s1680m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
|
||||
@@ -90,6 +94,7 @@ TEST(TestSendLG, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendLG(0x0, 31);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8500s4250"
|
||||
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
|
||||
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
|
||||
@@ -101,6 +106,7 @@ TEST(TestSendLG, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendLG(0x0, 64);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
@@ -373,6 +379,7 @@ TEST(TestSendLG2, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendLG2(0x880094D);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3200s9850"
|
||||
"m550s1600m550s550m550s550m550s550m550s1600m550s550m550s550m550s550"
|
||||
"m550s550m550s550m550s550m550s550m550s550m550s550m550s550m550s550"
|
||||
@@ -460,6 +467,7 @@ TEST(TestDecodeLG, Issue620) {
|
||||
EXPECT_EQ(0x872, irsend.capture.command);
|
||||
// The following seems to match the rawData above.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8500s4250"
|
||||
"m550s1600m550s550m550s550m550s550m550s1600"
|
||||
"m550s550m550s550m550s550m550s550m550s550"
|
||||
@@ -470,4 +478,3 @@ TEST(TestDecodeLG, Issue620) {
|
||||
"s55550",
|
||||
irsend.outputStr());
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ TEST(TestSendLasertag, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendLasertag(0x1); // Red 1
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333"
|
||||
"s333m333s333m333s333m333s666m333s100000",
|
||||
irsend.outputStr());
|
||||
@@ -27,6 +28,7 @@ TEST(TestSendLasertag, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendLasertag(0x2); // Red 2
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333"
|
||||
"m333s333m333s333m333s333m333s666m666s100333",
|
||||
irsend.outputStr());
|
||||
@@ -38,6 +40,7 @@ TEST(TestSendLasertag, SendDataOnly) {
|
||||
EXPECT_EQ(
|
||||
// m364s364m332s336m384s276m332s364m332s304m416s584
|
||||
// m692s724m640s360m304s332m392s612m380
|
||||
"f36000d25"
|
||||
"m333s333m333s333m333s333m333s333m333s333m333s666"
|
||||
"m666s666m666s333m333s333m333s666m333s100000",
|
||||
irsend.outputStr());
|
||||
@@ -49,6 +52,7 @@ TEST(TestSendLasertag, SendDataOnly) {
|
||||
EXPECT_EQ(
|
||||
// m332s308m412s280m360s336m332s304m444s248m332s644
|
||||
// m744s612m696s692m668s636m360
|
||||
"f36000d25"
|
||||
"m333s333m333s333m333s333m333s333m333s333m333s666"
|
||||
"m666s666m666s666m666s666m333s100000",
|
||||
irsend.outputStr());
|
||||
@@ -61,6 +65,7 @@ TEST(TestSendLasertag, SendDataWithRepeat) {
|
||||
irsend.reset();
|
||||
irsend.sendLasertag(0x1, kLasertagBits, 1); // Red 1, one repeat.
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333s333"
|
||||
"m333s333m333s333m333s333m333s666m333s100000"
|
||||
"m333s333m333s333m333s333m333s333m333s333m333s333m333s333m333s333"
|
||||
@@ -70,6 +75,7 @@ TEST(TestSendLasertag, SendDataWithRepeat) {
|
||||
irsend.reset();
|
||||
irsend.sendLasertag(0x52, kLasertagBits, 2); // Green 2, two repeats.
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m333s333m333s333m333s333m333s333m333s333m333s666m666s666m666s333"
|
||||
"m333s666m666s100333"
|
||||
"m333s333m333s333m333s333m333s333m333s333m333s666m666s666m666s333"
|
||||
@@ -86,7 +92,8 @@ TEST(TestSendLasertag, SmallestMessageSize) {
|
||||
irsend.reset();
|
||||
irsend.sendLasertag(0x1555); // Alternating bit pattern will be the smallest.
|
||||
// i.e. 7 actual 'mark' pulses, which is a rawlen of 13.
|
||||
EXPECT_EQ("m0s333m666s666m666s666m666s666m666s666m666s666m666s666m333s100000",
|
||||
EXPECT_EQ("f36000d25"
|
||||
"m0s333m666s666m666s666m666s666m666s666m666s666m666s666m333s100000",
|
||||
irsend.outputStr());
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,196 @@
|
||||
// Copyright 2019 David Conran
|
||||
|
||||
#include "IRrecv.h"
|
||||
#include "IRrecv_test.h"
|
||||
#include "IRsend.h"
|
||||
#include "IRsend_test.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
// General housekeeping
|
||||
TEST(TestLego, Housekeeping) {
|
||||
ASSERT_EQ("LEGOPF", typeToString(LEGOPF));
|
||||
ASSERT_FALSE(hasACState(LEGOPF)); // Uses uint64_t, not uint8_t*.
|
||||
}
|
||||
|
||||
// Tests for sendLego().
|
||||
|
||||
// Test sending typical data only.
|
||||
TEST(TestSendLegoPf, SendDataOnly) {
|
||||
IRsendTest irsend(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendLegoPf(0x1234);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s263m158s553m158s263m158s263m158s553m158s263"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s70472", irsend.outputStr());
|
||||
|
||||
irsend.reset();
|
||||
irsend.send(LEGOPF, 0x1234, kLegoPfBits);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s263m158s553m158s263m158s263m158s553m158s263"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s70472", irsend.outputStr());
|
||||
}
|
||||
|
||||
// Test sending typical repeat data.
|
||||
TEST(TestSendLegoPf, SendDataWithRepeats) {
|
||||
IRsendTest irsend(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendLegoPf(0x1234, kLegoPfBits, 1);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m0s32000"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s263m158s553m158s263m158s263m158s553m158s263"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s70472"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s263m158s553m158s263m158s263m158s553m158s263"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s70472"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s263m158s553m158s263m158s263m158s553m158s263"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s150472"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s263m158s553m158s263m158s263m158s553m158s263"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s150472"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s263m158s553m158s263m158s263m158s553m158s263"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s150472", irsend.outputStr());
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendLegoPf(0x2345, kLegoPfBits, 2);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m0s16000"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s263m158s263m158s263m158s553m158s553"
|
||||
"m158s263m158s553m158s263m158s263m158s263m158s553m158s263m158s553"
|
||||
"m158s70182"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s263m158s263m158s263m158s553m158s553"
|
||||
"m158s263m158s553m158s263m158s263m158s263m158s553m158s263m158s553"
|
||||
"m158s70182"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s263m158s263m158s263m158s553m158s553"
|
||||
"m158s263m158s553m158s263m158s263m158s263m158s553m158s263m158s553"
|
||||
"m158s182182"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s263m158s263m158s263m158s553m158s553"
|
||||
"m158s263m158s553m158s263m158s263m158s263m158s553m158s263m158s553"
|
||||
"m158s182182"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s263m158s263m158s263m158s553m158s553"
|
||||
"m158s263m158s553m158s263m158s263m158s263m158s553m158s263m158s553"
|
||||
"m158s182182", irsend.outputStr());
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendLegoPf(0x3456, kLegoPfBits, 7);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s263m158s553m158s263m158s553m158s263m158s553m158s553m158s263"
|
||||
"m158s69892"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s263m158s553m158s263m158s553m158s263m158s553m158s553m158s263"
|
||||
"m158s69892"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s263m158s553m158s263m158s553m158s263m158s553m158s553m158s263"
|
||||
"m158s213892"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s263m158s553m158s263m158s553m158s263m158s553m158s553m158s263"
|
||||
"m158s213892"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s263m158s553m158s263m158s553m158s263m158s553m158s553m158s263"
|
||||
"m158s213892"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s263m158s553m158s263m158s553m158s263m158s553m158s553m158s263"
|
||||
"m158s213892"
|
||||
"m158s1026"
|
||||
"m158s263m158s263m158s553m158s553m158s263m158s553m158s263m158s263"
|
||||
"m158s263m158s553m158s263m158s553m158s263m158s553m158s553m158s263"
|
||||
"m158s213892", irsend.outputStr());
|
||||
}
|
||||
|
||||
// Tests for decodeLego().
|
||||
|
||||
// Decode normal "synthetic" messages.
|
||||
TEST(TestDecodeLegoPf, SyntheticDecode) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendLegoPf(0x000F);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(LEGOPF, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kLegoPfBits, irsend.capture.bits);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
EXPECT_EQ(0x000F, irsend.capture.value);
|
||||
EXPECT_EQ(1, irsend.capture.address);
|
||||
EXPECT_EQ(0, irsend.capture.command);
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendLegoPf(0x100E);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(LEGOPF, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kLegoPfBits, irsend.capture.bits);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
EXPECT_EQ(0x100E, irsend.capture.value);
|
||||
EXPECT_EQ(2, irsend.capture.address);
|
||||
EXPECT_EQ(0, irsend.capture.command);
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendLegoPf(0x221E);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(LEGOPF, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kLegoPfBits, irsend.capture.bits);
|
||||
EXPECT_FALSE(irsend.capture.repeat);
|
||||
EXPECT_EQ(0x221E, irsend.capture.value);
|
||||
EXPECT_EQ(3, irsend.capture.address);
|
||||
EXPECT_EQ(0x21, irsend.capture.command);
|
||||
|
||||
// Test a bad LRC is not matched.
|
||||
irsend.reset();
|
||||
irsend.sendLegoPf(0x001F); // LRC should be 0xE, not 0xF.
|
||||
irsend.makeDecodeResult();
|
||||
irrecv.decode(&irsend.capture);
|
||||
EXPECT_NE(LEGOPF, irsend.capture.decode_type);
|
||||
}
|
||||
|
||||
// Decode normal "synthetic" message with releats.
|
||||
TEST(TestDecodeLegoPf, SyntheticDecodeWithRepeat) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendLegoPf(0x330F, kLegoPfBits, 1);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(LEGOPF, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kLegoPfBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0x330F, irsend.capture.value);
|
||||
EXPECT_EQ(4, irsend.capture.address);
|
||||
EXPECT_EQ(0x30, irsend.capture.command);
|
||||
}
|
||||
@@ -11,17 +11,19 @@ TEST(TestSendLutron, SendDataOnly) {
|
||||
IRsendTest irsend(0);
|
||||
irsend.begin();
|
||||
irsend.sendLutron(0);
|
||||
EXPECT_EQ("m2288s230080", irsend.outputStr());
|
||||
EXPECT_EQ("f40000d40m2288s230080", irsend.outputStr());
|
||||
irsend.sendLutron(0xAAAAAAAAA); // Longest possible sequence. (I think)
|
||||
EXPECT_EQ(
|
||||
"f40000d40"
|
||||
"m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288"
|
||||
"m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288m2288s2288"
|
||||
"m2288s2288m2288s2288m2288s2288m2288s152288",
|
||||
irsend.outputStr());
|
||||
irsend.sendLutron(0x7FFFFFFFF);
|
||||
EXPECT_EQ("m82368s150000", irsend.outputStr());
|
||||
EXPECT_EQ("f40000d40m82368s150000", irsend.outputStr());
|
||||
irsend.sendLutron(0x7F88BD120);
|
||||
EXPECT_EQ(
|
||||
"f40000d40"
|
||||
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
|
||||
"s161440",
|
||||
irsend.outputStr());
|
||||
@@ -34,12 +36,14 @@ TEST(TestSendLutron, SendWithRepeats) {
|
||||
// Send a command with 0 repeats.
|
||||
irsend.sendLutron(0x7F88BD120, kLutronBits, 0);
|
||||
EXPECT_EQ(
|
||||
"f40000d40"
|
||||
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
|
||||
"s161440",
|
||||
irsend.outputStr());
|
||||
// Send a command with 1 repeat.
|
||||
irsend.sendLutron(0x7F88BD120, kLutronBits, 1);
|
||||
EXPECT_EQ(
|
||||
"f40000d40"
|
||||
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
|
||||
"s161440"
|
||||
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
|
||||
@@ -48,6 +52,7 @@ TEST(TestSendLutron, SendWithRepeats) {
|
||||
// Send a command with 3 repeats.
|
||||
irsend.sendLutron(0x7F88BD120, kLutronBits, 3);
|
||||
EXPECT_EQ(
|
||||
"f40000d40"
|
||||
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
|
||||
"s161440"
|
||||
"m20592s6864m2288s6864m2288s2288m9152s2288m2288s6864m2288s4576m2288"
|
||||
|
||||
@@ -36,6 +36,7 @@ TEST(TestSendMWM, SendDataOnly) {
|
||||
*/
|
||||
irsend.sendMWM(test1, sizeof(test1), 0);
|
||||
EXPECT_EQ(
|
||||
"f38000d25"
|
||||
"m834s834m417s417m834s834"
|
||||
"m417s417m834s834m1251s417"
|
||||
"m2085s417m1251s417"
|
||||
@@ -65,6 +66,7 @@ TEST(TestSendMWM, SendDataOnly) {
|
||||
};
|
||||
irsend.sendMWM(test2, sizeof(test2), 0);
|
||||
EXPECT_EQ(
|
||||
"f38000d25"
|
||||
"m417s417m834s834m834s834"
|
||||
"m834s834m834s417m834s417"
|
||||
"m834s834m834s834m417s417"
|
||||
|
||||
@@ -26,6 +26,7 @@ TEST(TestSendMagiQuest, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMagiQuest(0x0);
|
||||
EXPECT_EQ(
|
||||
"f36000d50"
|
||||
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
|
||||
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
|
||||
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
|
||||
@@ -37,6 +38,7 @@ TEST(TestSendMagiQuest, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMagiQuest(0x123456789ABC);
|
||||
EXPECT_EQ(
|
||||
"f36000d50"
|
||||
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
|
||||
"m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
|
||||
"m280s850m280s850m580s600m580s600m280s850m580s600m280s850m280s850"
|
||||
@@ -55,6 +57,7 @@ TEST(TestSendMagiQuest, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendMagiQuest(0x12345678ABCD, kMagiquestBits, 2); // two repeats.
|
||||
EXPECT_EQ(
|
||||
"f36000d50"
|
||||
"m280s850m280s850m280s850m280s850m280s850m280s850m280s850m280s850"
|
||||
"m280s850m280s850m280s850m580s600m280s850m280s850m580s600m280s850"
|
||||
"m280s850m280s850m580s600m580s600m280s850m580s600m280s850m280s850"
|
||||
|
||||
@@ -15,6 +15,7 @@ TEST(TestSendMidea, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMidea(0x0);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
@@ -36,6 +37,7 @@ TEST(TestSendMidea, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMidea(0x55AA55AA55AA);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
|
||||
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
|
||||
@@ -57,6 +59,7 @@ TEST(TestSendMidea, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMidea(0xFFFFFFFFFFFF);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
|
||||
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
|
||||
@@ -84,6 +87,7 @@ TEST(TestSendMidea, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendMidea(0x55AA55AA55AA, kMideaBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
|
||||
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
|
||||
@@ -119,6 +123,7 @@ TEST(TestSendMidea, SendWithRepeats) {
|
||||
irsend.outputStr());
|
||||
irsend.sendMidea(0x55AA55AA55AA, kMideaBits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
|
||||
"m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560"
|
||||
@@ -178,6 +183,7 @@ TEST(TestSendMidea, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendMidea(0x0, 8);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s5600"
|
||||
@@ -189,6 +195,7 @@ TEST(TestSendMidea, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendMidea(0x1234567890ABCDEF, 64);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s1680m560s560m560s560m560s1680m560s560"
|
||||
"m560s560m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
|
||||
@@ -649,3 +656,31 @@ TEST(TestDecodeMidea, DecodeRealExample) {
|
||||
EXPECT_EQ(kMideaBits, irsend.capture.bits);
|
||||
EXPECT_EQ(0xA18263FFFF6E, irsend.capture.value);
|
||||
}
|
||||
|
||||
TEST(TestMideaACClass, toCommon) {
|
||||
IRMideaAC ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kMideaACCool);
|
||||
ac.setTemp(20, true);
|
||||
ac.setFan(kMideaACFanHigh);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::MIDEA, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -0,0 +1,920 @@
|
||||
// Copyright 2019 David Conran
|
||||
|
||||
#include "ir_MitsubishiHeavy.h"
|
||||
#include "IRrecv.h"
|
||||
#include "IRrecv_test.h"
|
||||
#include "IRremoteESP8266.h"
|
||||
#include "IRsend.h"
|
||||
#include "IRsend_test.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
// General housekeeping
|
||||
TEST(TestMitsubishiHeavy, Housekeeping) {
|
||||
ASSERT_EQ("MITSUBISHI_HEAVY_88", typeToString(MITSUBISHI_HEAVY_88));
|
||||
ASSERT_TRUE(hasACState(MITSUBISHI_HEAVY_88));
|
||||
ASSERT_EQ("MITSUBISHI_HEAVY_152", typeToString(MITSUBISHI_HEAVY_152));
|
||||
ASSERT_TRUE(hasACState(MITSUBISHI_HEAVY_152));
|
||||
}
|
||||
|
||||
// Tests for IRMitsubishiHeavy152Ac class.
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, Power) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.on();
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
|
||||
ac.off();
|
||||
EXPECT_FALSE(ac.getPower());
|
||||
|
||||
ac.setPower(true);
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
|
||||
ac.setPower(false);
|
||||
EXPECT_FALSE(ac.getPower());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, Temperature) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setMode(kMitsubishiHeavyCool);
|
||||
|
||||
ac.setTemp(0);
|
||||
EXPECT_EQ(kMitsubishiHeavyMinTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(255);
|
||||
EXPECT_EQ(kMitsubishiHeavyMaxTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kMitsubishiHeavyMinTemp);
|
||||
EXPECT_EQ(kMitsubishiHeavyMinTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kMitsubishiHeavyMaxTemp);
|
||||
EXPECT_EQ(kMitsubishiHeavyMaxTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kMitsubishiHeavyMinTemp - 1);
|
||||
EXPECT_EQ(kMitsubishiHeavyMinTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kMitsubishiHeavyMaxTemp + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavyMaxTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(19);
|
||||
EXPECT_EQ(19, ac.getTemp());
|
||||
|
||||
ac.setTemp(21);
|
||||
EXPECT_EQ(21, ac.getTemp());
|
||||
|
||||
ac.setTemp(25);
|
||||
EXPECT_EQ(25, ac.getTemp());
|
||||
|
||||
ac.setTemp(29);
|
||||
EXPECT_EQ(29, ac.getTemp());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, OperatingMode) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setMode(kMitsubishiHeavyAuto);
|
||||
EXPECT_EQ(kMitsubishiHeavyAuto, ac.getMode());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyCool);
|
||||
EXPECT_EQ(kMitsubishiHeavyCool, ac.getMode());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyHeat);
|
||||
EXPECT_EQ(kMitsubishiHeavyHeat, ac.getMode());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyDry);
|
||||
EXPECT_EQ(kMitsubishiHeavyDry, ac.getMode());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyFan);
|
||||
EXPECT_EQ(kMitsubishiHeavyFan, ac.getMode());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyHeat + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavyAuto, ac.getMode());
|
||||
|
||||
ac.setMode(255);
|
||||
EXPECT_EQ(kMitsubishiHeavyAuto, ac.getMode());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, Filter) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setFilter(true);
|
||||
EXPECT_TRUE(ac.getFilter());
|
||||
|
||||
ac.setFilter(false);
|
||||
EXPECT_FALSE(ac.getFilter());
|
||||
|
||||
ac.setFilter(true);
|
||||
EXPECT_TRUE(ac.getFilter());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, Turbo) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setTurbo(true);
|
||||
EXPECT_TRUE(ac.getTurbo());
|
||||
|
||||
ac.setTurbo(false);
|
||||
EXPECT_FALSE(ac.getTurbo());
|
||||
|
||||
ac.setTurbo(true);
|
||||
EXPECT_TRUE(ac.getTurbo());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, Econo) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setEcono(true);
|
||||
EXPECT_TRUE(ac.getEcono());
|
||||
|
||||
ac.setEcono(false);
|
||||
EXPECT_FALSE(ac.getEcono());
|
||||
|
||||
ac.setEcono(true);
|
||||
EXPECT_TRUE(ac.getEcono());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, 3D) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.set3D(true);
|
||||
EXPECT_TRUE(ac.get3D());
|
||||
|
||||
ac.set3D(false);
|
||||
EXPECT_FALSE(ac.get3D());
|
||||
|
||||
ac.set3D(true);
|
||||
EXPECT_TRUE(ac.get3D());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, Night) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setNight(true);
|
||||
EXPECT_TRUE(ac.getNight());
|
||||
|
||||
ac.setNight(false);
|
||||
EXPECT_FALSE(ac.getNight());
|
||||
|
||||
ac.setNight(true);
|
||||
EXPECT_TRUE(ac.getNight());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, Clean) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setClean(true);
|
||||
EXPECT_TRUE(ac.getClean());
|
||||
|
||||
ac.setClean(false);
|
||||
EXPECT_FALSE(ac.getClean());
|
||||
|
||||
ac.setClean(true);
|
||||
EXPECT_TRUE(ac.getClean());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, FanSpeed) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setFan(kMitsubishiHeavy152FanLow);
|
||||
EXPECT_EQ(kMitsubishiHeavy152FanLow, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy152FanAuto);
|
||||
EXPECT_EQ(kMitsubishiHeavy152FanAuto, ac.getFan());
|
||||
|
||||
|
||||
ac.setFan(255);
|
||||
EXPECT_EQ(kMitsubishiHeavy152FanAuto, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy152FanMax);
|
||||
EXPECT_EQ(kMitsubishiHeavy152FanMax, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy152FanMax + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy152FanAuto, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy152FanMax - 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy152FanMax - 1, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy152FanLow + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy152FanLow + 1, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy152FanEcono);
|
||||
EXPECT_EQ(kMitsubishiHeavy152FanEcono, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy152FanTurbo);
|
||||
EXPECT_EQ(kMitsubishiHeavy152FanTurbo, ac.getFan());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, VerticalSwing) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVAuto);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingVAuto, ac.getSwingVertical());
|
||||
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVHighest);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingVHighest, ac.getSwingVertical());
|
||||
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVHighest + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingVHighest + 1, ac.getSwingVertical());
|
||||
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVOff);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingVOff, ac.getSwingVertical());
|
||||
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVOff + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingVOff, ac.getSwingVertical());
|
||||
|
||||
// Out of bounds.
|
||||
ac.setSwingVertical(255);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingVOff, ac.getSwingVertical());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, HorizontalSwing) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHAuto);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingHAuto, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHLeftMax);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingHLeftMax, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHLeftMax + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingHLeftMax + 1, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHRightMax);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingHRightMax, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHRightMax - 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingHRightMax - 1, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHOff);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingHOff, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHOff + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingHOff, ac.getSwingHorizontal());
|
||||
|
||||
// Out of bounds.
|
||||
ac.setSwingHorizontal(255);
|
||||
EXPECT_EQ(kMitsubishiHeavy152SwingHOff, ac.getSwingHorizontal());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, Checksums) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
EXPECT_TRUE(ac.validChecksum(ac.getRaw()));
|
||||
|
||||
uint8_t expected[kMitsubishiHeavy152StateLength] = {
|
||||
0xAD, 0x51, 0x3C, 0xE5, 0x1A, 0x0C, 0xF3, 0x07,
|
||||
0xF8, 0x04, 0xFB, 0x00, 0xFF, 0x00, 0xFF, 0x00,
|
||||
0xFF, 0x80, 0x7F};
|
||||
EXPECT_TRUE(IRMitsubishiHeavy152Ac::validChecksum(expected));
|
||||
|
||||
// Screw up the "checksum" to test it fails.
|
||||
expected[kMitsubishiHeavy152StateLength - 1] = 0x55;
|
||||
EXPECT_FALSE(IRMitsubishiHeavy152Ac::validChecksum(expected));
|
||||
// getting the after getRaw() should repair it.
|
||||
ac.setRaw(expected);
|
||||
EXPECT_TRUE(ac.validChecksum(ac.getRaw()));
|
||||
EXPECT_TRUE(IRMitsubishiHeavy152Ac::validChecksum(ac.getRaw()));
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, HumanReadable) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 0 (Auto), Temp: 17C, Fan: 0 (Auto), "
|
||||
"Swing (V): 0 (Auto), Swing (H): 0 (Auto), Silent: Off, Turbo: Off, "
|
||||
"Econo: Off, Night: Off, Filter: Off, 3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
ac.on();
|
||||
ac.setMode(kMitsubishiHeavyCool);
|
||||
ac.setTemp(kMitsubishiHeavyMinTemp);
|
||||
ac.setFan(kMitsubishiHeavy152FanMax);
|
||||
ac.setFilter(true);
|
||||
ac.setNight(true);
|
||||
ac.setTurbo(false);
|
||||
ac.setSilent(true);
|
||||
ac.setEcono(false);
|
||||
ac.set3D(true);
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVAuto);
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHAuto);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (Cool), Temp: 17C, Fan: 4 (Max), "
|
||||
"Swing (V): 0 (Auto), Swing (H): 0 (Auto), Silent: On, Turbo: Off, "
|
||||
"Econo: Off, Night: On, Filter: On, 3D: On, Clean: Off",
|
||||
ac.toString());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyHeat);
|
||||
ac.setTemp(kMitsubishiHeavyMaxTemp);
|
||||
ac.setFilter(true);
|
||||
ac.setNight(false);
|
||||
ac.setTurbo(true);
|
||||
ac.setEcono(false);
|
||||
ac.setSilent(false);
|
||||
ac.set3D(false);
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVLowest);
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHLeftMax);
|
||||
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 4 (Heat), Temp: 31C, Fan: 8 (Turbo), "
|
||||
"Swing (V): 5 (Lowest), Swing (H): 1 (Max Left), Silent: Off, Turbo: On, "
|
||||
"Econo: Off, Night: Off, Filter: On, 3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
|
||||
ac.setClean(true);
|
||||
ac.setEcono(true);
|
||||
ac.setMode(kMitsubishiHeavyAuto);
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVOff);
|
||||
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 0 (Auto), Temp: 31C, Fan: 6 (Econo), "
|
||||
"Swing (V): 6 (Off), Swing (H): 1 (Max Left), Silent: Off, "
|
||||
"Turbo: Off, Econo: On, Night: Off, Filter: On, 3D: Off, Clean: On",
|
||||
ac.toString());
|
||||
|
||||
ac.setClean(false);
|
||||
ac.setTemp(25);
|
||||
ac.setEcono(false);
|
||||
ac.setMode(kMitsubishiHeavyDry);
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHLeftRight);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 2 (Dry), Temp: 25C, Fan: 0 (Auto), "
|
||||
"Swing (V): 6 (Off), Swing (H): 7 (Left Right), Silent: Off, "
|
||||
"Turbo: Off, Econo: Off, Night: Off, Filter: Off, 3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, ReconstructKnownExample) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 0 (Auto), Temp: 17C, Fan: 0 (Auto), "
|
||||
"Swing (V): 0 (Auto), Swing (H): 0 (Auto), Silent: Off, Turbo: Off, "
|
||||
"Econo: Off, Night: Off, Filter: Off, 3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
ac.on();
|
||||
ac.setMode(kMitsubishiHeavyHeat);
|
||||
ac.setTemp(24);
|
||||
ac.setFan(kMitsubishiHeavy152FanMax);
|
||||
ac.setFilter(true);
|
||||
ac.setNight(false);
|
||||
ac.setTurbo(false);
|
||||
ac.setSilent(false);
|
||||
ac.setEcono(false);
|
||||
ac.set3D(false);
|
||||
ac.setClean(false);
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVAuto);
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHAuto);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 4 (Heat), Temp: 24C, Fan: 4 (Max), "
|
||||
"Swing (V): 0 (Auto), Swing (H): 0 (Auto), Silent: Off, Turbo: Off, "
|
||||
"Econo: Off, Night: Off, Filter: Off, 3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
|
||||
uint8_t expected[kMitsubishiHeavy152StateLength] = {
|
||||
0xAD, 0x51, 0x3C, 0xE5, 0x1A, 0x0C, 0xF3, 0x07,
|
||||
0xF8, 0x04, 0xFB, 0x00, 0xFF, 0x00, 0xFF, 0x00,
|
||||
0xFF, 0x80, 0x7F};
|
||||
EXPECT_STATE_EQ(expected, ac.getRaw(), kMitsubishiHeavy152Bits);
|
||||
}
|
||||
|
||||
// Tests for IRMitsubishiHeavy88Ac class.
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, Power) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.on();
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
|
||||
ac.off();
|
||||
EXPECT_FALSE(ac.getPower());
|
||||
|
||||
ac.setPower(true);
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
|
||||
ac.setPower(false);
|
||||
EXPECT_FALSE(ac.getPower());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, Temperature) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setMode(kMitsubishiHeavyCool);
|
||||
|
||||
ac.setTemp(0);
|
||||
EXPECT_EQ(kMitsubishiHeavyMinTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(255);
|
||||
EXPECT_EQ(kMitsubishiHeavyMaxTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kMitsubishiHeavyMinTemp);
|
||||
EXPECT_EQ(kMitsubishiHeavyMinTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kMitsubishiHeavyMaxTemp);
|
||||
EXPECT_EQ(kMitsubishiHeavyMaxTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kMitsubishiHeavyMinTemp - 1);
|
||||
EXPECT_EQ(kMitsubishiHeavyMinTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kMitsubishiHeavyMaxTemp + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavyMaxTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(19);
|
||||
EXPECT_EQ(19, ac.getTemp());
|
||||
|
||||
ac.setTemp(21);
|
||||
EXPECT_EQ(21, ac.getTemp());
|
||||
|
||||
ac.setTemp(25);
|
||||
EXPECT_EQ(25, ac.getTemp());
|
||||
|
||||
ac.setTemp(29);
|
||||
EXPECT_EQ(29, ac.getTemp());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, OperatingMode) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setMode(kMitsubishiHeavyAuto);
|
||||
EXPECT_EQ(kMitsubishiHeavyAuto, ac.getMode());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyCool);
|
||||
EXPECT_EQ(kMitsubishiHeavyCool, ac.getMode());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyHeat);
|
||||
EXPECT_EQ(kMitsubishiHeavyHeat, ac.getMode());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyDry);
|
||||
EXPECT_EQ(kMitsubishiHeavyDry, ac.getMode());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyFan);
|
||||
EXPECT_EQ(kMitsubishiHeavyFan, ac.getMode());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyHeat + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavyAuto, ac.getMode());
|
||||
|
||||
ac.setMode(255);
|
||||
EXPECT_EQ(kMitsubishiHeavyAuto, ac.getMode());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, Turbo) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setTurbo(true);
|
||||
EXPECT_TRUE(ac.getTurbo());
|
||||
|
||||
ac.setTurbo(false);
|
||||
EXPECT_FALSE(ac.getTurbo());
|
||||
|
||||
ac.setTurbo(true);
|
||||
EXPECT_TRUE(ac.getTurbo());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, Econo) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setEcono(true);
|
||||
EXPECT_TRUE(ac.getEcono());
|
||||
|
||||
ac.setEcono(false);
|
||||
EXPECT_FALSE(ac.getEcono());
|
||||
|
||||
ac.setEcono(true);
|
||||
EXPECT_TRUE(ac.getEcono());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, 3D) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.set3D(true);
|
||||
EXPECT_TRUE(ac.get3D());
|
||||
|
||||
ac.set3D(false);
|
||||
EXPECT_FALSE(ac.get3D());
|
||||
|
||||
ac.set3D(true);
|
||||
EXPECT_TRUE(ac.get3D());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, Clean) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setClean(true);
|
||||
EXPECT_TRUE(ac.getClean());
|
||||
|
||||
ac.setClean(false);
|
||||
EXPECT_FALSE(ac.getClean());
|
||||
|
||||
ac.setClean(true);
|
||||
EXPECT_TRUE(ac.getClean());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, FanSpeed) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setFan(kMitsubishiHeavy88FanLow);
|
||||
EXPECT_EQ(kMitsubishiHeavy88FanLow, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy88FanAuto);
|
||||
EXPECT_EQ(kMitsubishiHeavy88FanAuto, ac.getFan());
|
||||
|
||||
|
||||
ac.setFan(255);
|
||||
EXPECT_EQ(kMitsubishiHeavy88FanAuto, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy88FanHigh);
|
||||
EXPECT_EQ(kMitsubishiHeavy88FanHigh, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy88FanHigh + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy88FanAuto, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy88FanHigh - 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy88FanHigh - 1, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy88FanLow + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy88FanLow + 1, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy88FanEcono);
|
||||
EXPECT_EQ(kMitsubishiHeavy88FanEcono, ac.getFan());
|
||||
|
||||
ac.setFan(kMitsubishiHeavy88FanTurbo);
|
||||
EXPECT_EQ(kMitsubishiHeavy88FanTurbo, ac.getFan());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, VerticalSwing) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
ac.setSwingVertical(kMitsubishiHeavy88SwingVAuto);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingVAuto, ac.getSwingVertical());
|
||||
|
||||
ac.setSwingVertical(kMitsubishiHeavy88SwingVHighest);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingVHighest, ac.getSwingVertical());
|
||||
|
||||
ac.setSwingVertical(kMitsubishiHeavy88SwingVOff);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingVOff, ac.getSwingVertical());
|
||||
|
||||
ac.setSwingVertical(kMitsubishiHeavy88SwingVHighest + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingVOff, ac.getSwingVertical());
|
||||
|
||||
ac.setSwingVertical(kMitsubishiHeavy88SwingVOff + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingVOff, ac.getSwingVertical());
|
||||
|
||||
// Out of bounds.
|
||||
ac.setSwingVertical(255);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingVOff, ac.getSwingVertical());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, HorizontalSwing) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy88SwingHAuto);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingHAuto, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy88SwingHLeftMax);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingHLeftMax, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy88SwingHLeftMax + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingHOff, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy88SwingHRightMax);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingHRightMax, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy88SwingHRightMax - 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingHOff, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy88SwingHOff);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingHOff, ac.getSwingHorizontal());
|
||||
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy88SwingHOff + 1);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingHOff, ac.getSwingHorizontal());
|
||||
|
||||
// Out of bounds.
|
||||
ac.setSwingHorizontal(255);
|
||||
EXPECT_EQ(kMitsubishiHeavy88SwingHOff, ac.getSwingHorizontal());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, Checksums) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
EXPECT_TRUE(ac.validChecksum(ac.getRaw()));
|
||||
|
||||
uint8_t expected[kMitsubishiHeavy88StateLength] = {
|
||||
0xAD, 0x51, 0x3C, 0xD9, 0x26, 0x48, 0xB7, 0x00, 0xFF, 0x8A, 0x75};
|
||||
EXPECT_TRUE(IRMitsubishiHeavy88Ac::validChecksum(expected));
|
||||
|
||||
// Screw up the "checksum" to test it fails.
|
||||
expected[kMitsubishiHeavy88StateLength - 1] = 0x55;
|
||||
EXPECT_FALSE(IRMitsubishiHeavy88Ac::validChecksum(expected));
|
||||
// getting the after getRaw() should repair it.
|
||||
ac.setRaw(expected);
|
||||
EXPECT_TRUE(ac.validChecksum(ac.getRaw()));
|
||||
EXPECT_TRUE(IRMitsubishiHeavy88Ac::validChecksum(ac.getRaw()));
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, HumanReadable) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 0 (Auto), Temp: 17C, Fan: 0 (Auto), "
|
||||
"Swing (V): 0 (Off), Swing (H): 0 (Off), "
|
||||
"Turbo: Off, Econo: Off, 3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
ac.on();
|
||||
ac.setMode(kMitsubishiHeavyCool);
|
||||
ac.setTemp(kMitsubishiHeavyMinTemp);
|
||||
ac.setFan(kMitsubishiHeavy88FanHigh);
|
||||
ac.setTurbo(false);
|
||||
ac.setEcono(false);
|
||||
ac.set3D(true);
|
||||
ac.setSwingVertical(kMitsubishiHeavy88SwingVAuto);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (Cool), Temp: 17C, Fan: 4 (High), "
|
||||
"Swing (V): 16 (Auto), Swing (H): 200 (3D), "
|
||||
"Turbo: Off, Econo: Off, 3D: On, Clean: Off",
|
||||
ac.toString());
|
||||
|
||||
ac.setMode(kMitsubishiHeavyHeat);
|
||||
ac.setTemp(kMitsubishiHeavyMaxTemp);
|
||||
ac.setTurbo(true);
|
||||
ac.setEcono(false);
|
||||
ac.set3D(false);
|
||||
ac.setSwingVertical(kMitsubishiHeavy88SwingVLowest);
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy88SwingHLeftMax);
|
||||
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 4 (Heat), Temp: 31C, Fan: 6 (Turbo), "
|
||||
"Swing (V): 26 (Lowest), Swing (H): 4 (Max Left), Turbo: On, Econo: Off, "
|
||||
"3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
|
||||
ac.setClean(true);
|
||||
ac.setEcono(true);
|
||||
ac.setMode(kMitsubishiHeavyAuto);
|
||||
ac.setSwingVertical(kMitsubishiHeavy88SwingVOff);
|
||||
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 0 (Auto), Temp: 31C, Fan: 7 (Econo), "
|
||||
"Swing (V): 0 (Off), Swing (H): 4 (Max Left), Turbo: Off, Econo: On, "
|
||||
"3D: Off, Clean: On",
|
||||
ac.toString());
|
||||
|
||||
ac.setClean(false);
|
||||
ac.setTemp(25);
|
||||
ac.setEcono(false);
|
||||
ac.setMode(kMitsubishiHeavyDry);
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy88SwingHLeftRight);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 2 (Dry), Temp: 25C, Fan: 0 (Auto), "
|
||||
"Swing (V): 0 (Off), Swing (H): 72 (Left Right), Turbo: Off, Econo: Off, "
|
||||
"3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
// Tests for decodeMitsubishiHeavy().
|
||||
|
||||
// Decode a real MitsubishiHeavy 152Bit message.
|
||||
TEST(TestDecodeMitsubishiHeavy, ZmsRealExample) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
irsend.begin();
|
||||
|
||||
uint8_t expected[kMitsubishiHeavy152StateLength] = {
|
||||
0xAD, 0x51, 0x3C, 0xE5, 0x1A, 0x0C, 0xF3, 0x07,
|
||||
0xF8, 0x04, 0xFB, 0x00, 0xFF, 0x00, 0xFF, 0x00,
|
||||
0xFF, 0x80, 0x7F};
|
||||
|
||||
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/660#issuecomment-480571466
|
||||
uint16_t rawData[307] = {
|
||||
3136, 1638, 364, 428, 366, 1224, 362, 432, 364, 430, 364, 1226, 362, 432,
|
||||
364, 1224, 366, 428, 366, 430, 366, 1224, 362, 1228, 362, 1228, 362, 432,
|
||||
364, 1224, 364, 432, 364, 1226, 364, 1224, 366, 1226, 364, 428, 364, 430,
|
||||
364, 430, 364, 432, 366, 1226, 364, 1224, 364, 430, 364, 1226, 364, 428,
|
||||
364, 1224, 368, 1224, 364, 428, 364, 430, 366, 430, 364, 1158, 430, 432,
|
||||
366, 1222, 366, 430, 366, 430, 364, 1226, 364, 1224, 364, 1224, 364, 1224,
|
||||
366, 1224, 364, 430, 364, 430, 364, 1228, 362, 1226, 364, 1226, 366, 1222,
|
||||
366, 430, 364, 430, 364, 1224, 366, 1224, 364, 430, 364, 430, 364, 432,
|
||||
364, 430, 364, 428, 364, 430, 364, 430, 366, 1226, 362, 1154, 434, 1228,
|
||||
364, 1226, 362, 1226, 364, 1226, 364, 1228, 362, 1226, 362, 432, 364, 430,
|
||||
364, 428, 364, 430, 364, 430, 364, 1228, 362, 1228, 362, 432, 364, 1224,
|
||||
368, 1224, 364, 1226, 362, 1226, 364, 1226, 366, 428, 366, 430, 364, 1224,
|
||||
364, 430, 366, 430, 366, 430, 364, 430, 364, 430, 364, 1226, 364, 1226,
|
||||
366, 1224, 366, 1224, 366, 1226, 364, 1224, 366, 1224, 366, 1224, 366,
|
||||
428, 364, 430, 366, 428, 364, 430, 364, 430, 366, 428, 364, 430, 364, 432,
|
||||
364, 1226, 364, 1226, 364, 1226, 364, 1228, 364, 1222, 370, 1222, 362,
|
||||
1228, 362, 1226, 362, 430, 364, 430, 364, 430, 364, 432, 364, 428, 364,
|
||||
432, 364, 428, 364, 430, 366, 1226, 362, 1224, 364, 1226, 364, 1226, 364,
|
||||
1226, 362, 1226, 366, 1224, 366, 1224, 364, 430, 364, 432, 364, 428, 364,
|
||||
432, 364, 428, 364, 430, 366, 430, 364, 430, 364, 1226, 362, 1226, 364,
|
||||
1224, 366, 1226, 362, 1228, 364, 1224, 366, 1224, 364, 430, 364, 432, 364,
|
||||
428, 364, 430, 364, 430, 364, 430, 366, 430, 364, 430, 338, 1252, 362
|
||||
}; // UNKNOWN 5138D49D
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendRaw(rawData, 307, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(MITSUBISHI_HEAVY_152, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kMitsubishiHeavy152Bits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expected, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 4 (Heat), Temp: 24C, Fan: 4 (Max), "
|
||||
"Swing (V): 0 (Auto), Swing (H): 0 (Auto), Silent: Off, Turbo: Off, "
|
||||
"Econo: Off, Night: Off, Filter: Off, 3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
// Decode a Synthetic MitsubishiHeavy 152Bit message.
|
||||
TEST(TestDecodeMitsubishiHeavy, ZmsSyntheticExample) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
irsend.begin();
|
||||
|
||||
uint8_t expected[kMitsubishiHeavy152StateLength] = {
|
||||
0xAD, 0x51, 0x3C, 0xE5, 0x1A, 0x0C, 0xF3, 0x07,
|
||||
0xF8, 0x04, 0xFB, 0x00, 0xFF, 0x00, 0xFF, 0x00,
|
||||
0xFF, 0x80, 0x7F};
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishiHeavy152(expected);
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(MITSUBISHI_HEAVY_152, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kMitsubishiHeavy152Bits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expected, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 4 (Heat), Temp: 24C, Fan: 4 (Max), "
|
||||
"Swing (V): 0 (Auto), Swing (H): 0 (Auto), Silent: Off, Turbo: Off, "
|
||||
"Econo: Off, Night: Off, Filter: Off, 3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
// Decode a real MitsubishiHeavy 152Bit message.
|
||||
TEST(TestDecodeMitsubishiHeavy, ZmsRealExample2) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
irsend.begin();
|
||||
|
||||
uint8_t expected[kMitsubishiHeavy152StateLength] = {
|
||||
0xAD, 0x51, 0x3C, 0xE5, 0x1A, 0x04, 0xFB, 0x07,
|
||||
0xF8, 0x04, 0xFB, 0x00, 0xFF, 0x00, 0xFF, 0x00,
|
||||
0xFF, 0x80, 0x7F};
|
||||
|
||||
// Ref: https://github.com/markszabo/IRremoteESP8266/issues/660#issuecomment-480571466
|
||||
uint16_t rawData[307] = {
|
||||
3196, 1580, 398, 390, 404, 1190, 400, 390, 402, 390, 402, 1192, 402, 388,
|
||||
402, 1192, 400, 390, 402, 392, 402, 1192, 400, 1188, 400, 1188, 400, 390,
|
||||
404, 1192, 398, 392, 400, 1192, 402, 1188, 400, 1190, 402, 388, 402, 392,
|
||||
404, 392, 402, 392, 404, 1188, 400, 1190, 398, 392, 404, 1188, 398, 392,
|
||||
402, 1192, 398, 1190, 400, 390, 404, 390, 402, 392, 404, 1188, 398, 392,
|
||||
404, 1190, 400, 392, 400, 394, 402, 1192, 398, 1190, 398, 1192, 398, 1190,
|
||||
400, 1190, 398, 392, 402, 1192, 398, 1190, 398, 1190, 398, 1192, 396,
|
||||
1192, 398, 396, 400, 394, 398, 1194, 396, 394, 400, 394, 398, 396, 398,
|
||||
396, 400, 402, 390, 394, 402, 392, 398, 396, 398, 1194, 396, 1194, 398,
|
||||
1192, 398, 1192, 396, 1194, 396, 1192, 396, 1196, 398, 1190, 398, 392,
|
||||
402, 392, 402, 394, 398, 394, 400, 394, 400, 1192, 398, 1192, 400, 390,
|
||||
402, 1190, 398, 1190, 398, 1192, 402, 1188, 398, 1190, 400, 390, 402, 392,
|
||||
402, 1190, 400, 390, 404, 390, 402, 394, 402, 392, 402, 390, 404, 1190,
|
||||
400, 1188, 400, 1190, 400, 1190, 402, 1188, 402, 1188, 400, 1188, 402,
|
||||
1190, 400, 388, 402, 394, 404, 392, 404, 388, 404, 390, 404, 392, 402,
|
||||
394, 402, 390, 402, 1190, 402, 1186, 402, 1190, 400, 1190, 398, 1190, 402,
|
||||
1186, 402, 1190, 400, 1188, 400, 390, 404, 392, 404, 390, 402, 392, 402,
|
||||
392, 400, 394, 402, 392, 402, 394, 400, 1192, 400, 1190, 400, 1188, 400,
|
||||
1192, 400, 1186, 402, 1190, 400, 1190, 400, 1188, 402, 388, 402, 390, 404,
|
||||
392, 402, 392, 402, 392, 402, 392, 404, 392, 402, 392, 404, 1190, 400,
|
||||
1190, 398, 1190, 400, 1190, 400, 1190, 400, 1188, 400, 1188, 400, 392,
|
||||
402, 392, 404, 390, 402, 392, 402, 392, 402, 392, 402, 390, 402, 392, 402,
|
||||
1192, 398}; // UNKNOWN A650F2C1
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendRaw(rawData, 307, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(MITSUBISHI_HEAVY_152, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kMitsubishiHeavy152Bits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expected, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 4 (Heat), Temp: 24C, Fan: 4 (Max), "
|
||||
"Swing (V): 0 (Auto), Swing (H): 0 (Auto), Silent: Off, Turbo: Off, "
|
||||
"Econo: Off, Night: Off, Filter: Off, 3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
// Decode a Synthetic MitsubishiHeavy 88 Bit message.
|
||||
TEST(TestDecodeMitsubishiHeavy, ZjsSyntheticExample) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
irsend.begin();
|
||||
|
||||
uint8_t expected[kMitsubishiHeavy88StateLength] = {
|
||||
0xAD, 0x51, 0x3C, 0xD9, 0x26, 0x48, 0xB7, 0x00, 0xFF, 0x8A, 0x75};
|
||||
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishiHeavy88(expected);
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(MITSUBISHI_HEAVY_88, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kMitsubishiHeavy88Bits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expected, irsend.capture.state, irsend.capture.bits);
|
||||
ac.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 2 (Dry), Temp: 25C, Fan: 0 (Auto), "
|
||||
"Swing (V): 0 (Off), Swing (H): 72 (Left Right), Turbo: Off, Econo: Off, "
|
||||
"3D: Off, Clean: Off",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy152AcClass, toCommon) {
|
||||
IRMitsubishiHeavy152Ac ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kMitsubishiHeavyCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kMitsubishiHeavy152FanLow);
|
||||
ac.setSwingVertical(kMitsubishiHeavy152SwingVHighest);
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy152SwingHRightMax);
|
||||
ac.setTurbo(false);
|
||||
ac.setEcono(true);
|
||||
ac.setClean(true);
|
||||
ac.setFilter(true);
|
||||
ac.setSilent(true);
|
||||
ac.setNight(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::MITSUBISHI_HEAVY_152, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMin, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kHighest, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kRightMax, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_TRUE(ac.toCommon().econo);
|
||||
ASSERT_TRUE(ac.toCommon().clean);
|
||||
ASSERT_TRUE(ac.toCommon().quiet);
|
||||
ASSERT_TRUE(ac.toCommon().filter);
|
||||
ASSERT_EQ(0, ac.toCommon().sleep);
|
||||
// Unsupported.
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiHeavy88AcClass, toCommon) {
|
||||
IRMitsubishiHeavy88Ac ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kMitsubishiHeavyCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kMitsubishiHeavy88FanLow);
|
||||
ac.setSwingVertical(kMitsubishiHeavy88SwingVHighest);
|
||||
ac.setSwingHorizontal(kMitsubishiHeavy88SwingHRightMax);
|
||||
ac.setTurbo(false);
|
||||
ac.setEcono(true);
|
||||
ac.setClean(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::MITSUBISHI_HEAVY_88, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMin, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kHighest, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kRightMax, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_TRUE(ac.toCommon().econo);
|
||||
ASSERT_TRUE(ac.toCommon().clean);
|
||||
// Unsupported.
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -17,6 +17,7 @@ TEST(TestSendMitsubishi, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi(0xE242);
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
|
||||
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
|
||||
"m300s28080"
|
||||
@@ -28,6 +29,7 @@ TEST(TestSendMitsubishi, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi(0x0);
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
|
||||
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
|
||||
"m300s34080"
|
||||
@@ -39,6 +41,7 @@ TEST(TestSendMitsubishi, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi(0x4321);
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s2100"
|
||||
"m300s900m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100"
|
||||
"m300s28080"
|
||||
@@ -56,6 +59,7 @@ TEST(TestSendMitsubishi, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi(0xE242, kMitsubishiBits, 0); // 0 repeat.
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
|
||||
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
|
||||
"m300s28080",
|
||||
@@ -64,6 +68,7 @@ TEST(TestSendMitsubishi, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi(0xE242, kMitsubishiBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
|
||||
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
|
||||
"m300s28080"
|
||||
@@ -73,6 +78,7 @@ TEST(TestSendMitsubishi, SendWithRepeats) {
|
||||
irsend.outputStr());
|
||||
irsend.sendMitsubishi(0xE242, kMitsubishiBits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m300s2100m300s2100m300s2100m300s900m300s900m300s900m300s2100m300s900"
|
||||
"m300s900m300s2100m300s900m300s900m300s900m300s900m300s2100m300s900"
|
||||
"m300s28080"
|
||||
@@ -93,6 +99,7 @@ TEST(TestSendMitsubishi, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi(0x0, 8);
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
|
||||
"m300s43680"
|
||||
"m300s900m300s900m300s900m300s900m300s900m300s900m300s900m300s900"
|
||||
@@ -102,6 +109,7 @@ TEST(TestSendMitsubishi, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi(0x1234567890ABCDEF, 64);
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m300s900m300s900m300s900m300s2100m300s900m300s900m300s2100m300s900"
|
||||
"m300s900m300s900m300s2100m300s2100m300s900m300s2100m300s900m300s900"
|
||||
"m300s900m300s2100m300s900m300s2100m300s900m300s2100m300s2100m300s900"
|
||||
@@ -305,6 +313,7 @@ TEST(TestSendMitsubishiAC, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishiAC(mitsub_code);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3400s1750"
|
||||
"m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
|
||||
"m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
|
||||
@@ -360,6 +369,7 @@ TEST(TestSendMitsubishiAC, SendWithRepeats) {
|
||||
|
||||
irsend.sendMitsubishiAC(mitsub_code, kMitsubishiACStateLength, 0);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3400s1750"
|
||||
"m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
|
||||
"m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
|
||||
@@ -385,6 +395,7 @@ TEST(TestSendMitsubishiAC, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishiAC(mitsub_code, kMitsubishiACStateLength, 2);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3400s1750"
|
||||
"m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
|
||||
"m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
|
||||
@@ -466,6 +477,7 @@ TEST(TestSendMitsubishiAC, SendUnexpectedSizes) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishiAC(mitsub_long_code, 19);
|
||||
ASSERT_EQ(
|
||||
"f38000d50"
|
||||
"m3400s1750"
|
||||
"m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
|
||||
"m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
|
||||
@@ -665,6 +677,7 @@ TEST(TestMitsubishiACClass, MessageConstuction) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishiAC(mitsub.getRaw());
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3400s1750"
|
||||
"m450s1300m450s1300m450s420m450s420m450s420m450s1300m450s420m450s420"
|
||||
"m450s1300m450s1300m450s420m450s1300m450s420m450s420m450s1300m450s1300"
|
||||
@@ -984,6 +997,7 @@ TEST(TestSendMitsubishi2, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi2(0xF82);
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m8400s4200"
|
||||
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
|
||||
"m560s4200"
|
||||
@@ -999,6 +1013,7 @@ TEST(TestSendMitsubishi2, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi2(0x0);
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m8400s4200"
|
||||
"m560s520m560s520m560s520m560s520m560s520m560s520m560s520m560s520"
|
||||
"m560s4200"
|
||||
@@ -1020,6 +1035,7 @@ TEST(TestSendMitsubishi2, Repeats) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi2(0xF82, kMitsubishiBits, 0);
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m8400s4200"
|
||||
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
|
||||
"m560s4200"
|
||||
@@ -1030,6 +1046,7 @@ TEST(TestSendMitsubishi2, Repeats) {
|
||||
irsend.reset();
|
||||
irsend.sendMitsubishi2(0xF82, kMitsubishiBits, 2);
|
||||
EXPECT_EQ(
|
||||
"f33000d50"
|
||||
"m8400s4200"
|
||||
"m560s520m560s520m560s520m560s520m560s1560m560s1560m560s1560m560s1560"
|
||||
"m560s4200"
|
||||
@@ -1116,3 +1133,32 @@ TEST(TestDecodeMitsubishi2, DecodeRealExample) {
|
||||
EXPECT_EQ(0xF, irsend.capture.address);
|
||||
EXPECT_EQ(0x82, irsend.capture.command);
|
||||
}
|
||||
|
||||
TEST(TestMitsubishiACClass, toCommon) {
|
||||
IRMitsubishiAC ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kMitsubishiAcCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kMitsubishiAcFanSilent);
|
||||
ac.setVane(kMitsubishiAcVaneAuto);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::MITSUBISHI_AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMin, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_TRUE(ac.toCommon().quiet);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -12,6 +12,7 @@ TEST(TestSendNEC, SendDataOnly) {
|
||||
irsend.begin();
|
||||
irsend.sendNEC(0);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
@@ -20,6 +21,7 @@ TEST(TestSendNEC, SendDataOnly) {
|
||||
irsend.outputStr());
|
||||
irsend.sendNEC(0xAA00FF55);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
|
||||
"m560s1680m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s560m560s1680m560s1680m560s1680m560s1680m560s1680"
|
||||
@@ -33,15 +35,17 @@ TEST(TestSendNEC, SendSmallData) {
|
||||
IRsendTest irsend(4);
|
||||
irsend.begin();
|
||||
irsend.sendNEC(0xA, 4); // Send only 4 data bits.
|
||||
EXPECT_EQ("m8960s4480m560s1680m560s560m560s1680m560s560m560s87360",
|
||||
EXPECT_EQ("f38000d33m8960s4480m560s1680m560s560m560s1680m560s560m560s87360",
|
||||
irsend.outputStr());
|
||||
irsend.sendNEC(0, 8); // Send only 8 data bits.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s85120",
|
||||
irsend.outputStr());
|
||||
irsend.sendNEC(0x1234567890ABCDEF, 64); // Send 64 data bits.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
"m560s1680m560s560m560s560m560s560m560s1680m560s1680m560s560"
|
||||
"m560s1680m560s560m560s560m560s560m560s1680m560s560m560s1680"
|
||||
@@ -61,17 +65,20 @@ TEST(TestSendNEC, SendWithRepeats) {
|
||||
irsend.begin();
|
||||
irsend.sendNEC(0, 8, 0); // Send a command with 0 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s85120",
|
||||
irsend.outputStr());
|
||||
irsend.sendNEC(0xAA, 8, 1); // Send a command with 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
|
||||
"m560s1680m560s560m560s80640"
|
||||
"m8960s2240m560s96320",
|
||||
irsend.outputStr());
|
||||
irsend.sendNEC(0xAA, 8, 3); // Send a command with 3 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480m560s1680m560s560m560s1680m560s560m560s1680m560s560"
|
||||
"m560s1680m560s560m560s80640"
|
||||
"m8960s2240m560s96320"
|
||||
|
||||
@@ -13,6 +13,7 @@ TEST(TestSendNikai, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendNikai(0xD5F2A); // Nikai TV Power Off.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m4000s4000"
|
||||
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
|
||||
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
|
||||
@@ -31,6 +32,7 @@ TEST(TestSendNikai, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendNikai(0xD5F2A, kNikaiBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m4000s4000"
|
||||
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
|
||||
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
|
||||
@@ -44,6 +46,7 @@ TEST(TestSendNikai, SendWithRepeats) {
|
||||
irsend.outputStr());
|
||||
irsend.sendNikai(0xD5F2A, kNikaiBits, 2); // 2 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m4000s4000"
|
||||
"m500s2000m500s2000m500s2000m500s2000m500s1000m500s1000m500s2000"
|
||||
"m500s1000m500s2000m500s1000m500s2000m500s1000m500s1000m500s1000"
|
||||
|
||||
@@ -32,6 +32,7 @@ TEST(TestSendPanasonic64, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendPanasonic64(0x0);
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
|
||||
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
|
||||
@@ -45,6 +46,7 @@ TEST(TestSendPanasonic64, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendPanasonic64(0x40040190ED7C);
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
|
||||
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
|
||||
@@ -58,6 +60,7 @@ TEST(TestSendPanasonic64, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendPanasonic64(0xFFFFFFFFFFFF);
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296"
|
||||
"m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296m432s1296"
|
||||
@@ -77,6 +80,7 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendPanasonic64(0x40040190ED7C, kPanasonicBits, 0); // 0 repeats.
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
|
||||
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
|
||||
@@ -90,6 +94,7 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendPanasonic64(0x40040190ED7C, kPanasonicBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
|
||||
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
|
||||
@@ -110,6 +115,7 @@ TEST(TestSendPanasonic64, SendWithRepeats) {
|
||||
|
||||
irsend.sendPanasonic64(0x40040190ED7C, kPanasonicBits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
|
||||
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
|
||||
@@ -145,6 +151,7 @@ TEST(TestSendPanasonic64, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendPanasonic64(0x0, 8);
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s432m432s432m432s432m432s432m432s432m432s432m432s432"
|
||||
"m432s150768",
|
||||
@@ -153,6 +160,7 @@ TEST(TestSendPanasonic64, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendPanasonic64(0x1234567890ABCDEF, 64);
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s432m432s432m432s1296m432s432m432s432m432s1296m432s432"
|
||||
"m432s432m432s432m432s1296m432s1296m432s432m432s1296m432s432m432s432"
|
||||
@@ -483,6 +491,7 @@ TEST(TestSendPanasonicAC, SendDataOnly) {
|
||||
0x00, 0x06, 0x60, 0x00, 0x00, 0x80, 0x00, 0x06, 0x83};
|
||||
irsend.sendPanasonicAC(state);
|
||||
EXPECT_EQ(
|
||||
"f36700d50"
|
||||
"m3456s1728"
|
||||
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
|
||||
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
|
||||
@@ -1133,3 +1142,36 @@ TEST(TestDecodePanasonicAC, CkpModelSpecifics) {
|
||||
EXPECT_EQ(kPanasonicCkp, pana.getModel());
|
||||
EXPECT_STATE_EQ(ckpPowerfulOn, pana.getRaw(), kPanasonicAcBits);
|
||||
}
|
||||
|
||||
TEST(TestIRPanasonicAcClass, toCommon) {
|
||||
IRPanasonicAc ac(0);
|
||||
ac.setModel(panasonic_ac_remote_model_t::kPanasonicDke);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kPanasonicAcCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kPanasonicAcFanMax);
|
||||
ac.setSwingVertical(kPanasonicAcSwingVAuto);
|
||||
ac.setSwingHorizontal(kPanasonicAcSwingHMiddle);
|
||||
ac.setPowerful(true);
|
||||
ac.setQuiet(false);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::PANASONIC_AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(panasonic_ac_remote_model_t::kPanasonicDke, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kMiddle, ac.toCommon().swingh);
|
||||
ASSERT_TRUE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
// Unsupported.
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -13,6 +13,7 @@ TEST(TestSendPioneer, SendDataOnly) {
|
||||
irsend.begin();
|
||||
irsend.sendPioneer(0);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
@@ -28,6 +29,7 @@ TEST(TestSendPioneer, SendDataOnly) {
|
||||
irsend.outputStr());
|
||||
irsend.sendPioneer(0x55FF00AAAA00FF55);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s1680m560s560m560s1680m560s560m560s1680m560s560m560s1680"
|
||||
"m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680m560s1680"
|
||||
@@ -136,6 +138,7 @@ TEST(TestDecodePioneer, SyntheticPioneerMessage) {
|
||||
irsend.reset();
|
||||
irsend.sendPioneer(0x659A857AF50A3DC2, 64, 0);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s1680m560s1680m560s560m560s560m560s1680m560s560m560s1680"
|
||||
"m560s1680m560s560m560s560m560s1680m560s1680m560s560m560s1680m560s560"
|
||||
|
||||
@@ -58,7 +58,8 @@ TEST(TestSendPronto, MoreDataThanNeededInNormal) {
|
||||
uint16_t pronto_test[8] = {0x0000, 0x0067, 0x0001, 0x0000,
|
||||
0x0001, 0x0002, 0x0003, 0x0004};
|
||||
irsend.sendPronto(pronto_test, 8);
|
||||
EXPECT_EQ("m25s50", irsend.outputStr()); // Only send the data required.
|
||||
EXPECT_EQ("f40244d50m25s50",
|
||||
irsend.outputStr()); // Only send the data required.
|
||||
}
|
||||
|
||||
TEST(TestSendPronto, MoreDataThanNeededInRepeat) {
|
||||
@@ -70,7 +71,8 @@ TEST(TestSendPronto, MoreDataThanNeededInRepeat) {
|
||||
uint16_t pronto_test[8] = {0x0000, 0x0067, 0x0000, 0x0001,
|
||||
0x0001, 0x0002, 0x0003, 0x0004};
|
||||
irsend.sendPronto(pronto_test, 8);
|
||||
EXPECT_EQ("m25s50", irsend.outputStr()); // Only send the data required.
|
||||
EXPECT_EQ("f40244d50m25s50",
|
||||
irsend.outputStr()); // Only send the data required.
|
||||
}
|
||||
|
||||
TEST(TestSendPronto, MoreDataThanNeededInBoth) {
|
||||
@@ -82,9 +84,11 @@ TEST(TestSendPronto, MoreDataThanNeededInBoth) {
|
||||
uint16_t pronto_test[10] = {0x0000, 0x0067, 0x0001, 0x0001, 0x0001,
|
||||
0x0002, 0x0003, 0x0004, 0x5, 0x6};
|
||||
irsend.sendPronto(pronto_test, 10);
|
||||
EXPECT_EQ("m25s50", irsend.outputStr()); // Only send the data required.
|
||||
EXPECT_EQ("f40244d50m25s50",
|
||||
irsend.outputStr()); // Only send the data required.
|
||||
irsend.sendPronto(pronto_test, 10, 1);
|
||||
EXPECT_EQ("m25s50m75s100", irsend.outputStr()); // Only the data required.
|
||||
EXPECT_EQ("f40244d50m25s50m75s100",
|
||||
irsend.outputStr()); // Only the data required.
|
||||
}
|
||||
|
||||
TEST(TestSendPronto, ShortestValidCodeThatSendsNothing) {
|
||||
@@ -134,6 +138,7 @@ TEST(TestSendPronto, NonRepeatingCode) {
|
||||
EXPECT_EQ(0x1, irsend.capture.address);
|
||||
EXPECT_EQ(0x0, irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
"f40244d50"
|
||||
"m2400s600"
|
||||
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
|
||||
"m600s600m600s600m600s600m600s27650"
|
||||
@@ -160,6 +165,7 @@ TEST(TestSendPronto, NonRepeatingCode) {
|
||||
EXPECT_EQ(0x1, irsend.capture.address);
|
||||
EXPECT_EQ(0x0, irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
"f40244d50"
|
||||
"m2400s600"
|
||||
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
|
||||
"m600s600m600s600m600s600m600s27650"
|
||||
@@ -201,6 +207,7 @@ TEST(TestSendPronto, RepeatSequenceOnlyForSony) {
|
||||
EXPECT_EQ(0x1A, irsend.capture.address);
|
||||
EXPECT_EQ(0x24AE, irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
"f40244d50"
|
||||
"m2400s600"
|
||||
"m600s600m1200s600m1200s600m1200s600m600s600m1200s600m600s600m600s600"
|
||||
"m1200s600m600s600m1200s600m1200s600m1200s600m600s600m600s600m1200s600"
|
||||
@@ -218,6 +225,7 @@ TEST(TestSendPronto, RepeatSequenceOnlyForSony) {
|
||||
EXPECT_EQ(0x1A, irsend.capture.address);
|
||||
EXPECT_EQ(0x24AE, irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
"f40244d50"
|
||||
"m2400s600"
|
||||
"m600s600m1200s600m1200s600m1200s600m600s600m1200s600m600s600m600s600"
|
||||
"m1200s600m600s600m1200s600m1200s600m1200s600m600s600m600s600m1200s600"
|
||||
@@ -265,6 +273,7 @@ TEST(TestSendPronto, RepeatSequenceOnlyForPanasonic) {
|
||||
EXPECT_EQ(0x4004, irsend.capture.address);
|
||||
EXPECT_EQ(0x1007C7D, irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
"f36682d50"
|
||||
"m3456s1701"
|
||||
"m432s432m432s1296m432s432m432s432m432s432m432s432m432s432m432s432"
|
||||
"m432s432m432s432m432s432m432s432m432s432m432s1296m432s432m432s432"
|
||||
@@ -305,6 +314,7 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
|
||||
EXPECT_EQ(0x18, irsend.capture.address);
|
||||
EXPECT_EQ(0x8, irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
"f38028d50"
|
||||
"m8892s4446"
|
||||
"m546s546m546s546m546s546m546s1664m546s1664m546s546m546s546m546s546"
|
||||
"m546s1664m546s1664m546s1664m546s546m546s546m546s1664m546s1664m546s1664"
|
||||
@@ -324,6 +334,7 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
|
||||
EXPECT_EQ(0x18, irsend.capture.address);
|
||||
EXPECT_EQ(0x8, irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
"f38028d50"
|
||||
"m8892s4446"
|
||||
"m546s546m546s546m546s546m546s1664m546s1664m546s546m546s546m546s546"
|
||||
"m546s1664m546s1664m546s1664m546s546m546s546m546s1664m546s1664m546s1664"
|
||||
@@ -344,6 +355,7 @@ TEST(TestSendPronto, NormalPlusRepeatSequence) {
|
||||
EXPECT_EQ(0x18, irsend.capture.address);
|
||||
EXPECT_EQ(0x8, irsend.capture.command);
|
||||
EXPECT_EQ(
|
||||
"f38028d50"
|
||||
"m8892s4446"
|
||||
"m546s546m546s546m546s546m546s1664m546s1664m546s546m546s546m546s546"
|
||||
"m546s1664m546s1664m546s1664m546s546m546s546m546s1664m546s1664m546s1664"
|
||||
|
||||
@@ -79,6 +79,7 @@ TEST(TestSendRC5, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x0, kRC5Bits);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m889s889m1778s889m889s889m889s889m889s889m889s889m889"
|
||||
"s889m889s889m889s889m889s889m889s889m889s889m889s90664",
|
||||
irsend.outputStr());
|
||||
@@ -86,6 +87,7 @@ TEST(TestSendRC5, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x1AAA, kRC5Bits);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m889s889m889s889m1778s1778m1778s1778m1778s1778"
|
||||
"m1778s1778m1778s1778m1778s90664",
|
||||
irsend.outputStr());
|
||||
@@ -93,6 +95,7 @@ TEST(TestSendRC5, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x175, kRC5Bits);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m889s889m1778s889m889s889m889s1778m1778s1778"
|
||||
"m889s889m889s889m1778s1778m1778s1778m889s89775",
|
||||
irsend.outputStr());
|
||||
@@ -100,6 +103,7 @@ TEST(TestSendRC5, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x3FFF, kRC5Bits);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m889s889m889s889m889s889m889s889m889s889m889s889m889s889"
|
||||
"m889s889m889s889m889s889m889s889m889s889m889s889m889s89775",
|
||||
irsend.outputStr());
|
||||
@@ -107,6 +111,7 @@ TEST(TestSendRC5, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x0, kRC5XBits);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m889s889m1778s889m889s889m889s889m889s889m889s889m889"
|
||||
"s889m889s889m889s889m889s889m889s889m889s889m889s90664",
|
||||
irsend.outputStr());
|
||||
@@ -114,6 +119,7 @@ TEST(TestSendRC5, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x1AAA, kRC5XBits);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m1778s1778m1778s1778m1778s1778m1778"
|
||||
"s1778m1778s1778m1778s1778m1778s90664",
|
||||
irsend.outputStr());
|
||||
@@ -121,6 +127,7 @@ TEST(TestSendRC5, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x175, kRC5XBits);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m889s889m1778s889m889s889m889s1778m1778s1778"
|
||||
"m889s889m889s889m1778s1778m1778s1778m889s89775",
|
||||
irsend.outputStr());
|
||||
@@ -128,6 +135,7 @@ TEST(TestSendRC5, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x3FFF, kRC5XBits);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m1778s1778m889s889m889s889m889s889m889s889m889s889m889"
|
||||
"s889m889s889m889s889m889s889m889s889m889s889m889s89775",
|
||||
irsend.outputStr());
|
||||
@@ -141,6 +149,7 @@ TEST(TestSendRC5, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x175, kRC5Bits, 1);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m889s889m1778s889m889s889m889s1778m1778s1778"
|
||||
"m889s889m889s889m1778s1778m1778s1778m889s90664"
|
||||
"m889s889m1778s889m889s889m889s1778m1778s1778"
|
||||
@@ -150,6 +159,7 @@ TEST(TestSendRC5, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x175, kRC5Bits, 2);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m889s889m1778s889m889s889m889s1778m1778s1778"
|
||||
"m889s889m889s889m1778s1778m1778s1778m889s90664"
|
||||
"m889s889m1778s889m889s889m889s1778m1778s1778"
|
||||
@@ -161,6 +171,7 @@ TEST(TestSendRC5, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x175, kRC5XBits, 1);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m889s889m1778s889m889s889m889s1778m1778s1778"
|
||||
"m889s889m889s889m1778s1778m1778s1778m889s90664"
|
||||
"m889s889m1778s889m889s889m889s1778m1778s1778"
|
||||
@@ -170,6 +181,7 @@ TEST(TestSendRC5, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRC5(0x1175, kRC5XBits, 2);
|
||||
EXPECT_EQ(
|
||||
"f36000d25"
|
||||
"m1778s889m889s889m889s889m889s1778m1778s1778"
|
||||
"m889s889m889s889m1778s1778m1778s1778m889s90664"
|
||||
"m1778s889m889s889m889s889m889s1778m1778s1778"
|
||||
@@ -444,6 +456,7 @@ TEST(TestSendRC6, SendMode0DataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0x0);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s888m444s444m444s444m444s888m888s444m444s444m444s444"
|
||||
"m444s444m444s444m444s444m444s444m444s444m444s444m444s444"
|
||||
@@ -454,6 +467,7 @@ TEST(TestSendRC6, SendMode0DataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0x1FFFF);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s888m444s444m444s444m1332s888m444s444m444s444m444s444"
|
||||
"m444s444m444s444m444s444m444s444m444s444m444s444m444s444"
|
||||
@@ -464,6 +478,7 @@ TEST(TestSendRC6, SendMode0DataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0x15555);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s888m444s444m444s444m1332s1332m888s888m888s888"
|
||||
"m888s888m888s888m888s888m888s888m888s888m888"
|
||||
@@ -479,6 +494,7 @@ TEST(TestSendRC6, Send36BitDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0x0, kRC6_36Bits);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s888m444s444m444s444m444"
|
||||
"s888m888"
|
||||
@@ -492,6 +508,7 @@ TEST(TestSendRC6, Send36BitDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0xFFFFFFFFF, kRC6_36Bits);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s444m444s444m444s444m444s444"
|
||||
"m888s888"
|
||||
@@ -505,6 +522,7 @@ TEST(TestSendRC6, Send36BitDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0xAAAAAAAAAA, kRC6_36Bits);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888m444s444m444s888m888"
|
||||
"s1332m1332"
|
||||
"s888m888s888m888s888m888s888m888s888m888s888m888s888m888s888m888s888m888"
|
||||
@@ -514,6 +532,7 @@ TEST(TestSendRC6, Send36BitDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0xC800F740C, kRC6_36Bits); // Xbox 360 OnOff code
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s444m444s444m444s888m444"
|
||||
"s888m1332"
|
||||
@@ -526,6 +545,7 @@ TEST(TestSendRC6, Send36BitDataOnly) {
|
||||
irsend.sendRC6(irsend.toggleRC6(0xC800F740C, kRC6_36Bits),
|
||||
kRC6_36Bits); // Xbox 360 OnOff code (toggled)
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s444m444s444m444s888m444"
|
||||
"s888m1332"
|
||||
@@ -544,6 +564,7 @@ TEST(TestSendRC6, SendMode0WithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0x175, kRC6Mode0Bits, 0);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s888m444s444m444s444m444"
|
||||
"s888m888"
|
||||
@@ -554,6 +575,7 @@ TEST(TestSendRC6, SendMode0WithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0x175, kRC6Mode0Bits, 1);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s888m444s444m444s444m444"
|
||||
"s888m888"
|
||||
@@ -569,6 +591,7 @@ TEST(TestSendRC6, SendMode0WithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0x175, kRC6Mode0Bits, 2);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s888m444s444m444s444m444"
|
||||
"s888m888"
|
||||
@@ -595,6 +618,7 @@ TEST(TestSendRC6, Send36BitWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0x175, kRC6_36Bits, 0);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s888m444s444m444s444m444"
|
||||
"s888m888"
|
||||
@@ -607,6 +631,7 @@ TEST(TestSendRC6, Send36BitWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0x175, kRC6_36Bits, 1);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s888m444s444m444s444m444"
|
||||
"s888m888"
|
||||
@@ -626,6 +651,7 @@ TEST(TestSendRC6, Send36BitWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRC6(0x175, kRC6_36Bits, 2);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m2664s888"
|
||||
"m444s888m444s444m444s444m444"
|
||||
"s888m888"
|
||||
|
||||
@@ -14,6 +14,7 @@ TEST(TestSendRCMM, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRCMM(0xe0a600);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m416s277"
|
||||
"m166s777m166s611m166s277m166s277"
|
||||
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
|
||||
@@ -22,6 +23,7 @@ TEST(TestSendRCMM, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendRCMM(0x28e0a600UL, 32);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m416s277"
|
||||
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
|
||||
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
|
||||
@@ -37,6 +39,7 @@ TEST(TestSendRCMM, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendRCMM(0x28e0a600, 32, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m416s277"
|
||||
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
|
||||
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
|
||||
@@ -60,6 +63,7 @@ TEST(TestSendRCMM, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendRCMM(0xE0, 8);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m416s277"
|
||||
"m166s777m166s611m166s277m166s277"
|
||||
"m166s24313",
|
||||
@@ -67,6 +71,7 @@ TEST(TestSendRCMM, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendRCMM(0x28e0a60000UL, 40);
|
||||
EXPECT_EQ(
|
||||
"f36000d33"
|
||||
"m416s277"
|
||||
"m166s277m166s611m166s611m166s277m166s777m166s611m166s277m166s277"
|
||||
"m166s611m166s611m166s444m166s611m166s277m166s277m166s277m166s277"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// Copyright 2017, 2018, 2019 David Conran
|
||||
|
||||
#include <string>
|
||||
#include "ir_Samsung.h"
|
||||
#include "IRrecv.h"
|
||||
#include "IRrecv_test.h"
|
||||
@@ -24,6 +25,7 @@ TEST(TestSendSamsung, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendSAMSUNG(0xE0E09966); // Samsung TV Power On.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m4480s4480"
|
||||
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
|
||||
@@ -43,6 +45,7 @@ TEST(TestSendSamsung, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendSAMSUNG(0xE0E09966, kSamsungBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m4480s4480"
|
||||
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
|
||||
@@ -58,6 +61,7 @@ TEST(TestSendSamsung, SendWithRepeats) {
|
||||
irsend.outputStr());
|
||||
irsend.sendSAMSUNG(0xE0E09966, kSamsungBits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m4480s4480"
|
||||
"m560s1680m560s1680m560s1680m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s560m560s560"
|
||||
@@ -305,6 +309,7 @@ TEST(TestSendSamsungAC, SendDataOnly) {
|
||||
0x01, 0x02, 0xAF, 0x71, 0x00, 0x15, 0xF0};
|
||||
irsend.sendSamsungAC(data);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m690s17844"
|
||||
"m3086s8864"
|
||||
"m586s436m586s1432m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
@@ -338,6 +343,7 @@ TEST(TestSendSamsungAC, SendExtendedData) {
|
||||
0x01, 0x02, 0xFF, 0x71, 0x80, 0x11, 0xC0};
|
||||
irsend.sendSamsungAC(data, kSamsungAcExtendedStateLength);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m690s17844"
|
||||
"m3086s8864"
|
||||
"m586s436m586s1432m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
@@ -494,15 +500,87 @@ TEST(TestIRSamsungAcClass, SetAndGetFan) {
|
||||
}
|
||||
|
||||
TEST(TestIRSamsungAcClass, SetAndGetQuiet) {
|
||||
IRSamsungAc samsung(0);
|
||||
samsung.setQuiet(false);
|
||||
EXPECT_FALSE(samsung.getQuiet());
|
||||
samsung.setFan(kSamsungAcFanHigh);
|
||||
samsung.setQuiet(true);
|
||||
EXPECT_TRUE(samsung.getQuiet());
|
||||
EXPECT_EQ(kSamsungAcFanAuto, samsung.getFan());
|
||||
samsung.setQuiet(false);
|
||||
EXPECT_FALSE(samsung.getQuiet());
|
||||
IRSamsungAc ac(0);
|
||||
ac.setQuiet(false);
|
||||
EXPECT_FALSE(ac.getQuiet());
|
||||
ac.setFan(kSamsungAcFanHigh);
|
||||
ac.setQuiet(true);
|
||||
EXPECT_TRUE(ac.getQuiet());
|
||||
EXPECT_EQ(kSamsungAcFanAuto, ac.getFan());
|
||||
ac.setQuiet(false);
|
||||
EXPECT_FALSE(ac.getQuiet());
|
||||
|
||||
// Actual quiet on & off states from:
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/734#issuecomment-500071419
|
||||
uint8_t on[14] = {
|
||||
0x02, 0x82, 0x0F, 0x00, 0x00, 0x20, 0xF0,
|
||||
0x01, 0xF2, 0xFE, 0x71, 0x00, 0x11, 0xF0};
|
||||
ac.setRaw(on, 14);
|
||||
EXPECT_TRUE(ac.getQuiet());
|
||||
EXPECT_EQ(kSamsungAcFanAuto, ac.getFan());
|
||||
uint8_t off[14] = {
|
||||
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
|
||||
0x01, 0xF2, 0xFE, 0x71, 0x00, 0x11, 0xF0};
|
||||
ac.setRaw(off, 14);
|
||||
EXPECT_FALSE(ac.getQuiet());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestIRSamsungAcClass, SetAndGetPowerful) {
|
||||
IRSamsungAc ac(0);
|
||||
ac.setFan(kSamsungAcFanMed);
|
||||
ac.setPowerful(false);
|
||||
EXPECT_FALSE(ac.getPowerful());
|
||||
EXPECT_EQ(kSamsungAcFanMed, ac.getFan());
|
||||
ac.setPowerful(true);
|
||||
EXPECT_TRUE(ac.getPowerful());
|
||||
EXPECT_EQ(kSamsungAcFanTurbo, ac.getFan());
|
||||
ac.setPowerful(false);
|
||||
EXPECT_FALSE(ac.getPowerful());
|
||||
EXPECT_EQ(kSamsungAcFanAuto, ac.getFan());
|
||||
|
||||
// Actual powerful on & off states from:
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/734#issuecomment-500120270
|
||||
uint8_t on[kSamsungAcStateLength] = {
|
||||
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
|
||||
0x01, 0xA2, 0xFE, 0x77, 0x00, 0x1F, 0xF0};
|
||||
ac.setRaw(on, kSamsungAcStateLength);
|
||||
EXPECT_TRUE(ac.getPowerful());
|
||||
EXPECT_EQ(kSamsungAcFanTurbo, ac.getFan());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 7 (TURBO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: On", ac.toString());
|
||||
|
||||
uint8_t off[kSamsungAcStateLength] = {
|
||||
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
|
||||
0x01, 0xF2, 0xFE, 0x71, 0x00, 0x11, 0xF0};
|
||||
ac.setRaw(off, kSamsungAcStateLength);
|
||||
EXPECT_FALSE(ac.getPowerful());
|
||||
EXPECT_NE(kSamsungAcFanTurbo, ac.getFan());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off", ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestIRSamsungAcClass, QuietAndPowerfulAreMutuallyExclusive) {
|
||||
IRSamsungAc ac(0);
|
||||
ac.setQuiet(false);
|
||||
ac.setPowerful(false);
|
||||
EXPECT_FALSE(ac.getQuiet());
|
||||
EXPECT_FALSE(ac.getPowerful());
|
||||
EXPECT_NE(kSamsungAcFanTurbo, ac.getFan());
|
||||
ac.setQuiet(true);
|
||||
EXPECT_TRUE(ac.getQuiet());
|
||||
EXPECT_FALSE(ac.getPowerful());
|
||||
EXPECT_EQ(kSamsungAcFanAuto, ac.getFan());
|
||||
ac.setPowerful(true);
|
||||
EXPECT_FALSE(ac.getQuiet());
|
||||
EXPECT_TRUE(ac.getPowerful());
|
||||
EXPECT_EQ(kSamsungAcFanTurbo, ac.getFan());
|
||||
ac.setQuiet(true);
|
||||
EXPECT_TRUE(ac.getQuiet());
|
||||
EXPECT_FALSE(ac.getPowerful());
|
||||
EXPECT_NE(kSamsungAcFanTurbo, ac.getFan());
|
||||
}
|
||||
|
||||
TEST(TestIRSamsungAcClass, ChecksumCalculation) {
|
||||
@@ -546,7 +624,7 @@ TEST(TestIRSamsungAcClass, HumanReadable) {
|
||||
IRSamsungAc samsung(0);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 2 (LOW), Swing: On, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off",
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off",
|
||||
samsung.toString());
|
||||
samsung.setTemp(kSamsungAcMaxTemp);
|
||||
samsung.setMode(kSamsungAcHeat);
|
||||
@@ -557,12 +635,18 @@ TEST(TestIRSamsungAcClass, HumanReadable) {
|
||||
samsung.setClean(true);
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 4 (HEAT), Temp: 30C, Fan: 5 (HIGH), Swing: Off, "
|
||||
"Beep: On, Clean: On, Quiet: Off",
|
||||
"Beep: On, Clean: On, Quiet: Off, Powerful: Off",
|
||||
samsung.toString());
|
||||
samsung.setQuiet(true);
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 4 (HEAT), Temp: 30C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: On, Clean: On, Quiet: On",
|
||||
"Beep: On, Clean: On, Quiet: On, Powerful: Off",
|
||||
samsung.toString());
|
||||
samsung.setQuiet(false);
|
||||
samsung.setPowerful(true);
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 4 (HEAT), Temp: 30C, Fan: 7 (TURBO), Swing: Off, "
|
||||
"Beep: On, Clean: On, Quiet: Off, Powerful: On",
|
||||
samsung.toString());
|
||||
}
|
||||
|
||||
@@ -666,7 +750,7 @@ TEST(TestDecodeSamsungAC, DecodeRealExample) {
|
||||
samsung.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 2 (LOW), Swing: On, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off",
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off",
|
||||
samsung.toString());
|
||||
}
|
||||
|
||||
@@ -715,7 +799,7 @@ TEST(TestDecodeSamsungAC, DecodeRealExample2) {
|
||||
samsung.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off",
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off",
|
||||
samsung.toString());
|
||||
}
|
||||
|
||||
@@ -774,7 +858,7 @@ TEST(TestDecodeSamsungAC, DecodePowerOnSample) {
|
||||
samsung.setRaw(irsend.capture.state, kSamsungAcExtendedStateLength);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 24C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off",
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off",
|
||||
samsung.toString());
|
||||
}
|
||||
|
||||
@@ -834,7 +918,7 @@ TEST(TestDecodeSamsungAC, DecodePowerOffSample) {
|
||||
samsung.setRaw(irsend.capture.state, kSamsungAcExtendedStateLength);
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 1 (COOL), Temp: 24C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off",
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off",
|
||||
samsung.toString());
|
||||
}
|
||||
|
||||
@@ -881,7 +965,7 @@ TEST(TestDecodeSamsungAC, DecodeHeatSample) {
|
||||
samsung.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 4 (HEAT), Temp: 17C, Fan: 0 (AUTO), Swing: On, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off",
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off",
|
||||
samsung.toString());
|
||||
}
|
||||
|
||||
@@ -928,7 +1012,7 @@ TEST(TestDecodeSamsungAC, DecodeCoolSample) {
|
||||
samsung.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 20C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off",
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off",
|
||||
samsung.toString());
|
||||
}
|
||||
|
||||
@@ -986,7 +1070,7 @@ TEST(TestDecodeSamsungAC, Issue604DecodeExtended) {
|
||||
samsung.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 4 (HEAT), Temp: 30C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off",
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off",
|
||||
samsung.toString());
|
||||
}
|
||||
|
||||
@@ -997,6 +1081,7 @@ TEST(TestSendSamsung36, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendSamsung36(0);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
@@ -1008,6 +1093,7 @@ TEST(TestSendSamsung36, SendDataOnly) {
|
||||
irsend.outputStr());
|
||||
irsend.sendSamsung36(0x400E00FF);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
@@ -1034,6 +1120,7 @@ TEST(TestSendSamsung36, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendSamsung36(0x400E00FF, kSamsung36Bits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
@@ -1053,6 +1140,7 @@ TEST(TestSendSamsung36, SendWithRepeats) {
|
||||
irsend.outputStr());
|
||||
irsend.sendSamsung36(0x400E00FF, kSamsung36Bits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4480s4480"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s560m560s560m560s560"
|
||||
@@ -1119,3 +1207,239 @@ TEST(TestDecodeSamsung36, SyntheticExample) {
|
||||
EXPECT_EQ(0xE00FF, irsend.capture.command);
|
||||
EXPECT_EQ(0x400, irsend.capture.address);
|
||||
}
|
||||
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/604
|
||||
TEST(TestIRSamsungAcClass, Issue604SendPowerHack) {
|
||||
IRSamsungAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
std::string freqduty = "f38000d50";
|
||||
|
||||
std::string poweron =
|
||||
"m690s17844"
|
||||
"m3086s8864"
|
||||
"m586s436m586s1432m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s1432m586s436m586s436m586s1432m586s436m586s436m586s1432"
|
||||
"m586s1432m586s1432m586s1432m586s1432m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s1432"
|
||||
"m586s2886"
|
||||
"m3086s8864"
|
||||
"m586s1432m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s1432m586s436m586s436m586s1432m586s436m586s1432m586s1432"
|
||||
"m586s1432m586s1432m586s1432m586s1432m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s2886"
|
||||
"m3086s8864"
|
||||
"m586s1432m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s1432m586s436m586s436m586s436m586s1432m586s1432m586s1432"
|
||||
"m586s436m586s1432m586s1432m586s1432m586s1432m586s1432m586s1432m586s1432"
|
||||
"m586s1432m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s1432"
|
||||
"m586s1432m586s436m586s436m586s436m586s1432m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s1432"
|
||||
"m586s100000";
|
||||
std::string settings =
|
||||
"m690s17844"
|
||||
"m3086s8864"
|
||||
"m586s436m586s1432m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s1432m586s436m586s436m586s1432m586s436m586s436m586s1432"
|
||||
"m586s1432m586s1432m586s1432m586s1432m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s1432"
|
||||
"m586s2886"
|
||||
"m3086s8864"
|
||||
"m586s1432m586s436m586s436m586s436m586s436m586s436m586s436m586s436"
|
||||
"m586s436m586s1432m586s436m586s436m586s1432m586s436m586s1432m586s1432"
|
||||
"m586s436m586s1432m586s1432m586s1432m586s436m586s1432m586s436m586s1432"
|
||||
"m586s1432m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s436"
|
||||
"m586s1432m586s436m586s436m586s1432m586s1432m586s436m586s436m586s436"
|
||||
"m586s436m586s436m586s436m586s436m586s1432m586s1432m586s1432m586s1432"
|
||||
"m586s100000";
|
||||
std::string text = "Power: On, Mode: 1 (COOL), Temp: 23C, Fan: 4 (MED), "
|
||||
"Swing: On, Beep: Off, Clean: Off, Quiet: Off, "
|
||||
"Powerful: Off";
|
||||
// Don't do a setPower()/on()/off() as that will trigger the special message.
|
||||
// So it should only be the normal "settings" message.
|
||||
ac.setTemp(23);
|
||||
ac.setMode(kSamsungAcCool);
|
||||
ac.setFan(kSamsungAcFanMed);
|
||||
ac.send();
|
||||
EXPECT_EQ(text, ac.toString());
|
||||
EXPECT_EQ(freqduty + settings, ac._irsend.outputStr());
|
||||
ac._irsend.reset();
|
||||
// Now trigger a special power message by using a power method.
|
||||
ac.on();
|
||||
ac.send(); // This should result in two messages. 1 x extended + 1 x normal.
|
||||
EXPECT_EQ(text, ac.toString());
|
||||
EXPECT_EQ(freqduty + poweron + settings, ac._irsend.outputStr());
|
||||
ac._irsend.reset();
|
||||
// Subsequent sending should be just the "settings" message.
|
||||
ac.send();
|
||||
EXPECT_EQ(text, ac.toString());
|
||||
EXPECT_EQ(freqduty + settings, ac._irsend.outputStr());
|
||||
ac._irsend.reset();
|
||||
// Now trigger a special power message by using a power method (again).
|
||||
ac.setPower(true);
|
||||
ac.send(); // This should result in two messages. 1 x extended + 1 x normal.
|
||||
EXPECT_EQ(text, ac.toString());
|
||||
EXPECT_EQ(freqduty + poweron + settings, ac._irsend.outputStr());
|
||||
}
|
||||
|
||||
TEST(TestIRSamsungAcClass, toCommon) {
|
||||
IRSamsungAc ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kSamsungAcCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kSamsungAcFanAuto);
|
||||
ac.setSwing(true);
|
||||
ac.setBeep(true);
|
||||
ac.setClean(true);
|
||||
ac.setQuiet(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::SAMSUNG_AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kAuto, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_TRUE(ac.toCommon().quiet);
|
||||
ASSERT_TRUE(ac.toCommon().clean);
|
||||
ASSERT_TRUE(ac.toCommon().beep);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
|
||||
TEST(TestDecodeSamsungAC, Issue734QuietSetting) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
// QUIET MODE ON data from:
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/734#issuecomment-499791618
|
||||
uint16_t quietOn[233] = {
|
||||
624, 17360, 3076, 8902, 520, 476, 520, 1472, 520, 476, 520, 474, 520, 476,
|
||||
520, 476, 520, 474, 522, 476, 520, 478, 518, 1476, 516, 500, 494, 502,
|
||||
548, 448, 546, 450, 544, 452, 522, 1468, 520, 1474, 520, 1472, 520, 1472,
|
||||
520, 1472, 520, 476, 520, 476, 518, 478, 516, 480, 516, 500, 496, 500,
|
||||
494, 502, 550, 446, 546, 450, 544, 452, 524, 472, 522, 474, 518, 476, 520,
|
||||
476, 520, 474, 522, 474, 520, 474, 520, 476, 520, 474, 520, 476, 518, 478,
|
||||
518, 480, 516, 480, 516, 502, 494, 502, 548, 1444, 524, 472, 522, 472,
|
||||
520, 474, 518, 478, 518, 476, 520, 476, 520, 1472, 520, 1470, 520, 1472,
|
||||
520, 1474, 516, 2980, 2998, 8980, 498, 1498, 548, 448, 526, 470, 544, 452,
|
||||
524, 472, 520, 474, 520, 476, 520, 476, 520, 476, 520, 1472, 520, 474,
|
||||
520, 476, 520, 1474, 518, 1476, 516, 1496, 496, 1498, 548, 446, 546, 1446,
|
||||
524, 1468, 518, 1474, 520, 1472, 520, 1472, 520, 1472, 520, 1474, 518,
|
||||
1476, 518, 480, 516, 500, 496, 528, 520, 1446, 544, 1446, 524, 1470, 518,
|
||||
476, 520, 476, 520, 474, 520, 476, 520, 474, 520, 476, 520, 474, 520, 476,
|
||||
520, 476, 518, 1476, 516, 482, 514, 502, 548, 448, 548, 1442, 544, 452,
|
||||
522, 474, 518, 476, 518, 476, 520, 476, 520, 474, 520, 476, 520, 1472,
|
||||
520, 1470, 522, 1474, 518, 1476, 536};
|
||||
|
||||
uint8_t expectedState[kSamsungAcStateLength] = {
|
||||
0x02, 0x82, 0x0F, 0x00, 0x00, 0x20, 0xF0,
|
||||
0x01, 0xF2, 0xFE, 0x71, 0x00, 0x11, 0xF0};
|
||||
|
||||
irsend.sendRaw(quietOn, 233, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(SAMSUNG_AC, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kSamsungAcBits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
|
||||
|
||||
IRSamsungAc ac(0);
|
||||
ac.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: On, Powerful: Off",
|
||||
ac.toString());
|
||||
|
||||
// Make sure the ac class state is in something wildly different first.
|
||||
ac.stateReset();
|
||||
ac.setPower(false);
|
||||
ac.setMode(kSamsungAcAuto);
|
||||
ac.setTemp(30);
|
||||
ac.setSwing(true);
|
||||
ac.setBeep(true);
|
||||
ac.setClean(true);
|
||||
ac.setQuiet(false);
|
||||
// See if we can build the state from scratch.
|
||||
ac.setPower(true);
|
||||
ac.setMode(kSamsungAcCool);
|
||||
ac.setTemp(16);
|
||||
ac.setSwing(false);
|
||||
ac.setBeep(false);
|
||||
ac.setClean(false);
|
||||
ac.setQuiet(true);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: On, Powerful: Off",
|
||||
ac.toString());
|
||||
// Check it matches the known good/expected state.
|
||||
EXPECT_STATE_EQ(expectedState, ac.getRaw(), kSamsungAcBits);
|
||||
}
|
||||
|
||||
TEST(TestDecodeSamsungAC, Issue734PowerfulOff) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
// 1st Powerful off data from:
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/734#issuecomment-500114580
|
||||
uint16_t powerfulOff[233] = {
|
||||
652, 17336, 3078, 8910, 562, 456, 546, 1448, 550, 446, 552, 444, 552, 444,
|
||||
550, 446, 550, 446, 552, 446, 550, 446, 552, 1440, 550, 446, 550, 446,
|
||||
550, 1470, 478, 518, 502, 492, 536, 1458, 542, 1450, 552, 1440, 552, 1442,
|
||||
552, 1442, 550, 446, 550, 446, 550, 446, 552, 444, 550, 446, 550, 446,
|
||||
550, 472, 524, 472, 480, 516, 510, 488, 538, 458, 542, 452, 548, 448, 550,
|
||||
446, 550, 446, 550, 444, 552, 444, 552, 444, 552, 444, 552, 444, 552, 444,
|
||||
552, 444, 550, 446, 550, 446, 550, 472, 524, 472, 482, 514, 510, 486, 536,
|
||||
460, 542, 454, 546, 450, 550, 446, 552, 1442, 552, 1442, 550, 1442, 552,
|
||||
1440, 508, 2994, 3030, 8932, 552, 1638, 450, // <= (was 356)
|
||||
// Above hack due to poor data.
|
||||
470, 526, 470, 506, 492, 510,
|
||||
486, 542, 454, 544, 450, 550, 446, 554, 444, 550, 1442, 550, 444, 550,
|
||||
446, 550, 1442, 552, 1440, 550, 1442, 550, 1470, 524, 470, 480, 1512, 512,
|
||||
1480, 546, 1448, 550, 1442, 552, 1442, 552, 1442, 550, 1440, 552, 1440,
|
||||
552, 446, 550, 444, 552, 444, 550, 1468, 484, 1510, 512, 1482, 544, 452,
|
||||
550, 446, 552, 442, 554, 444, 552, 444, 554, 442, 554, 442, 552, 444, 554,
|
||||
442, 554, 1440, 552, 444, 554, 442, 554, 468, 528, 1466, 508, 488, 512,
|
||||
484, 544, 450, 550, 446, 554, 442, 556, 442, 554, 442, 554, 1438, 554,
|
||||
1438, 554, 1438, 554, 1438, 562}; // UNKNOWN 7B551B62};
|
||||
|
||||
uint8_t expectedState[kSamsungAcStateLength] = {
|
||||
0x02, 0x92, 0x0F, 0x00, 0x00, 0x00, 0xF0,
|
||||
0x01, 0xF2, 0xFE, 0x71, 0x00, 0x11, 0xF0};
|
||||
|
||||
irsend.sendRaw(powerfulOff, 233, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decodeSamsungAC(&irsend.capture));
|
||||
ASSERT_EQ(SAMSUNG_AC, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kSamsungAcBits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
|
||||
|
||||
IRSamsungAc ac(0);
|
||||
ac.setRaw(irsend.capture.state, irsend.capture.bits / 8);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 16C, Fan: 0 (AUTO), Swing: Off, "
|
||||
"Beep: Off, Clean: Off, Quiet: Off, Powerful: Off",
|
||||
ac.toString());
|
||||
}
|
||||
@@ -27,6 +27,7 @@ TEST(TestEncodeSanyoLC7461, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendSanyoLC7461(0x1D8113F00FF);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
@@ -45,6 +46,7 @@ TEST(TestEncodeSanyoLC7461, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendSanyoLC7461(0x1D8113F00FF, kSanyoLC7461Bits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480"
|
||||
"m560s560m560s1680m560s1680m560s1680m560s560m560s1680m560s1680m560s560"
|
||||
"m560s560m560s560m560s560m560s560m560s560m560s1680m560s560m560s560"
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
// Copyright 2017 David Conran
|
||||
|
||||
#include "ir_Sharp.h"
|
||||
#include "IRrecv.h"
|
||||
#include "IRrecv_test.h"
|
||||
#include "IRsend.h"
|
||||
#include "IRsend_test.h"
|
||||
#include "gtest/gtest.h"
|
||||
@@ -47,6 +50,7 @@ TEST(TestSendSharp, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendSharp(0x11, 0x52);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s1820m260s780m260s780m260s780m260s1820m260s780m260s1820m260s780"
|
||||
"m260s1820m260s780m260s780m260s1820m260s780m260s1820m260s780"
|
||||
"m260s43602"
|
||||
@@ -64,6 +68,7 @@ TEST(TestSendSharp, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendSharp(0x11, 0x52, kSharpBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s1820m260s780m260s780m260s780m260s1820m260s780m260s1820m260s780"
|
||||
"m260s1820m260s780m260s780m260s1820m260s780m260s1820m260s780"
|
||||
"m260s43602"
|
||||
@@ -87,6 +92,7 @@ TEST(TestSendSharp, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendSharp(0x0, 0x0, 8);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s780m260s780m260s780m260s780m260s780m260s780m260s1820m260s780"
|
||||
"m260s43602"
|
||||
"m260s1820m260s1820m260s1820m260s1820m260s1820m260s1820m260s780m260s1820"
|
||||
@@ -96,6 +102,7 @@ TEST(TestSendSharp, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendSharp(0x0, 0x0, 16);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s780m260s780m260s780m260s780m260s780m260s780m260s780m260s780"
|
||||
"m260s780m260s780m260s780m260s780m260s780m260s780m260s1820m260s780"
|
||||
"m260s43602"
|
||||
@@ -115,6 +122,7 @@ TEST(TestSendSharpRaw, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendSharpRaw(0x454A);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s1820m260s780m260s780m260s780m260s1820m260s780m260s1820m260s780"
|
||||
"m260s1820m260s780m260s780m260s1820m260s780m260s1820m260s780"
|
||||
"m260s43602"
|
||||
@@ -132,6 +140,7 @@ TEST(TestSendSharpRaw, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendSharpRaw(0x454A, kSharpBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s1820m260s780m260s780m260s780m260s1820m260s780m260s1820m260s780"
|
||||
"m260s1820m260s780m260s780m260s1820m260s780m260s1820m260s780"
|
||||
"m260s43602"
|
||||
@@ -155,6 +164,7 @@ TEST(TestSendSharpRaw, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendSharpRaw(0x2, 8);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s780m260s780m260s780m260s780m260s780m260s780m260s1820m260s780"
|
||||
"m260s43602"
|
||||
"m260s1820m260s1820m260s1820m260s1820m260s1820m260s1820m260s780m260s1820"
|
||||
@@ -164,6 +174,7 @@ TEST(TestSendSharpRaw, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendSharpRaw(0x2, 16);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m260s780m260s780m260s780m260s780m260s780m260s780m260s780m260s780"
|
||||
"m260s780m260s780m260s780m260s780m260s780m260s780m260s1820m260s780"
|
||||
"m260s43602"
|
||||
@@ -352,3 +363,345 @@ TEST(TestDecodeSharp, FailToDecodeNonSharpExample) {
|
||||
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture));
|
||||
ASSERT_FALSE(irrecv.decodeSharp(&irsend.capture, kSharpBits, false));
|
||||
}
|
||||
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/638#issue-421064165
|
||||
TEST(TestDecodeSharpAc, RealExample) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
// cool-auto-27.txt
|
||||
uint16_t rawData[211] = {
|
||||
3804, 1892, 466, 486, 466, 1388, 466, 486, 466, 1386, 468, 486, 468, 1388,
|
||||
466, 486, 466, 1386, 468, 488, 466, 1388, 466, 488, 466, 1386, 468, 1388,
|
||||
466, 486, 466, 1388, 466, 486, 468, 1384, 468, 1388, 468, 1388, 466, 1388,
|
||||
466, 486, 468, 484, 468, 1386, 468, 1386, 468, 486, 466, 486, 468, 486,
|
||||
466, 488, 466, 1388, 466, 486, 466, 486, 468, 486, 466, 488, 466, 488,
|
||||
466, 1386, 468, 1388, 466, 486, 468, 486, 466, 1388, 464, 1388, 466, 1386,
|
||||
468, 486, 466, 486, 468, 486, 466, 1388, 468, 1384, 470, 486, 466, 486,
|
||||
468, 486, 468, 1386, 468, 486, 468, 486, 468, 486, 468, 1388, 466, 486,
|
||||
466, 486, 466, 486, 466, 488, 466, 486, 468, 486, 468, 486, 468, 486, 466,
|
||||
486, 466, 486, 466, 488, 466, 486, 466, 486, 466, 1388, 466, 486, 468,
|
||||
486, 466, 486, 468, 486, 468, 486, 466, 486, 466, 488, 466, 486, 466, 486,
|
||||
466, 488, 466, 486, 468, 1386, 468, 486, 466, 486, 466, 1390, 464, 488,
|
||||
466, 486, 468, 486, 468, 486, 466, 486, 466, 486, 466, 486, 468, 486, 468,
|
||||
486, 466, 486, 466, 1386, 468, 1390, 466, 1388, 466, 1388, 468, 486, 466,
|
||||
486, 468, 486, 466, 486, 466, 486, 466, 1390, 464, 486, 414};
|
||||
// UNKNOWN F2B82C78
|
||||
uint8_t expectedState[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCC, 0x31, 0x22, 0x00, 0x08, 0x80, 0x04, 0xE0,
|
||||
0x41};
|
||||
|
||||
irsend.begin();
|
||||
irsend.reset();
|
||||
irsend.sendRaw(rawData, 211, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(SHARP_AC, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kSharpAcBits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
|
||||
|
||||
IRSharpAc ac(0);
|
||||
ac.begin();
|
||||
ac.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ("Power: On, Mode: 2 (COOL), Temp: 27C, Fan: 2 (AUTO)",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/638#issue-421064165
|
||||
TEST(TestDecodeSharpAc, SyntheticExample) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
// cool-auto-27.txt
|
||||
uint8_t expectedState[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCC, 0x31, 0x22, 0x00, 0x08, 0x80, 0x04, 0xE0,
|
||||
0x41};
|
||||
|
||||
irsend.begin();
|
||||
irsend.reset();
|
||||
irsend.sendSharpAc(expectedState);
|
||||
irsend.makeDecodeResult();
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(SHARP_AC, irsend.capture.decode_type);
|
||||
ASSERT_EQ(kSharpAcBits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
|
||||
}
|
||||
|
||||
TEST(TestIRUtils, Sharp) {
|
||||
ASSERT_EQ("SHARP", typeToString(decode_type_t::SHARP));
|
||||
ASSERT_EQ(decode_type_t::SHARP, strToDecodeType("SHARP"));
|
||||
ASSERT_FALSE(hasACState(decode_type_t::SHARP));
|
||||
}
|
||||
|
||||
TEST(TestIRUtils, SharpAc) {
|
||||
ASSERT_EQ("SHARP_AC", typeToString(decode_type_t::SHARP_AC));
|
||||
ASSERT_EQ(decode_type_t::SHARP_AC, strToDecodeType("SHARP_AC"));
|
||||
ASSERT_TRUE(hasACState(decode_type_t::SHARP_AC));
|
||||
}
|
||||
|
||||
// Tests for IRSharpAc class.
|
||||
|
||||
TEST(TestSharpAcClass, Power) {
|
||||
IRSharpAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.on();
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
|
||||
ac.off();
|
||||
EXPECT_FALSE(ac.getPower());
|
||||
|
||||
ac.setPower(true);
|
||||
EXPECT_TRUE(ac.getPower());
|
||||
|
||||
ac.setPower(false);
|
||||
EXPECT_FALSE(ac.getPower());
|
||||
}
|
||||
|
||||
TEST(TestSharpAcClass, Checksum) {
|
||||
uint8_t state[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCC, 0x31, 0x22, 0x00, 0x08, 0x80, 0x04, 0xE0,
|
||||
0x41};
|
||||
EXPECT_EQ(0x4, IRSharpAc::calcChecksum(state));
|
||||
EXPECT_TRUE(IRSharpAc::validChecksum(state));
|
||||
// Change the state so it is not valid.
|
||||
state[3] = 0;
|
||||
EXPECT_FALSE(IRSharpAc::validChecksum(state));
|
||||
}
|
||||
|
||||
TEST(TestSharpAcClass, Temperature) {
|
||||
IRSharpAc ac(0);
|
||||
ac.begin();
|
||||
ac.setMode(kSharpAcCool); // Cool mode doesn't have temp restrictions.
|
||||
|
||||
ac.setTemp(0);
|
||||
EXPECT_EQ(kSharpAcMinTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(255);
|
||||
EXPECT_EQ(kSharpAcMaxTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kSharpAcMinTemp);
|
||||
EXPECT_EQ(kSharpAcMinTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kSharpAcMaxTemp);
|
||||
EXPECT_EQ(kSharpAcMaxTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kSharpAcMinTemp - 1);
|
||||
EXPECT_EQ(kSharpAcMinTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kSharpAcMaxTemp + 1);
|
||||
EXPECT_EQ(kSharpAcMaxTemp, ac.getTemp());
|
||||
|
||||
ac.setTemp(kSharpAcMinTemp + 1);
|
||||
EXPECT_EQ(kSharpAcMinTemp + 1, ac.getTemp());
|
||||
|
||||
ac.setTemp(21);
|
||||
EXPECT_EQ(21, ac.getTemp());
|
||||
|
||||
ac.setTemp(25);
|
||||
EXPECT_EQ(25, ac.getTemp());
|
||||
|
||||
ac.setTemp(29);
|
||||
EXPECT_EQ(29, ac.getTemp());
|
||||
}
|
||||
|
||||
TEST(TestSharpAcClass, OperatingMode) {
|
||||
IRSharpAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setTemp(25);
|
||||
ac.setMode(kSharpAcAuto);
|
||||
EXPECT_EQ(kSharpAcAuto, ac.getMode());
|
||||
|
||||
ac.setMode(kSharpAcCool);
|
||||
EXPECT_EQ(kSharpAcCool, ac.getMode());
|
||||
|
||||
ac.setMode(kSharpAcHeat);
|
||||
EXPECT_EQ(kSharpAcHeat, ac.getMode());
|
||||
|
||||
ac.setMode(kSharpAcDry);
|
||||
EXPECT_EQ(kSharpAcDry, ac.getMode());
|
||||
ASSERT_EQ(kSharpAcMinTemp, ac.getTemp()); // Dry mode restricts the temp.
|
||||
ac.setTemp(25);
|
||||
ASSERT_EQ(kSharpAcMinTemp, ac.getTemp());
|
||||
|
||||
ac.setMode(kSharpAcDry + 1);
|
||||
EXPECT_EQ(kSharpAcAuto, ac.getMode());
|
||||
|
||||
ac.setMode(kSharpAcCool);
|
||||
EXPECT_EQ(kSharpAcCool, ac.getMode());
|
||||
// We are no longer restricted.
|
||||
ac.setTemp(25);
|
||||
ASSERT_EQ(25, ac.getTemp());
|
||||
|
||||
ac.setMode(255);
|
||||
EXPECT_EQ(kSharpAcAuto, ac.getMode());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestSharpAcClass, FanSpeed) {
|
||||
IRSharpAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
// Unexpected value should default to Auto.
|
||||
ac.setFan(0);
|
||||
EXPECT_EQ(kSharpAcFanAuto, ac.getFan());
|
||||
|
||||
// Unexpected value should default to Auto.
|
||||
ac.setFan(255);
|
||||
EXPECT_EQ(kSharpAcFanAuto, ac.getFan());
|
||||
|
||||
ac.setFan(kSharpAcFanMax);
|
||||
EXPECT_EQ(kSharpAcFanMax, ac.getFan());
|
||||
|
||||
// Beyond Max should default to Auto.
|
||||
ac.setFan(kSharpAcFanMax + 1);
|
||||
EXPECT_EQ(kSharpAcFanAuto, ac.getFan());
|
||||
|
||||
ac.setFan(kSharpAcFanMed);
|
||||
EXPECT_EQ(kSharpAcFanMed, ac.getFan());
|
||||
|
||||
ac.setFan(kSharpAcFanMin);
|
||||
EXPECT_EQ(kSharpAcFanMin, ac.getFan());
|
||||
|
||||
ac.setFan(kSharpAcFanAuto - 1);
|
||||
EXPECT_EQ(kSharpAcFanAuto, ac.getFan());
|
||||
|
||||
ac.setFan(kSharpAcFanMax + 1);
|
||||
EXPECT_EQ(kSharpAcFanAuto, ac.getFan());
|
||||
|
||||
ac.setFan(kSharpAcFanAuto);
|
||||
EXPECT_EQ(kSharpAcFanAuto, ac.getFan());
|
||||
}
|
||||
|
||||
TEST(TestSharpAcClass, ReconstructKnownState) {
|
||||
IRSharpAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
uint8_t on_auto_auto[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0x00, 0x11, 0x20, 0x00, 0x08, 0x80, 0x00, 0xE0,
|
||||
0x01};
|
||||
ac.on();
|
||||
ac.setMode(kSharpAcAuto);
|
||||
ac.setTemp(kSharpAcMinTemp);
|
||||
ac.setFan(kSharpAcFanAuto);
|
||||
EXPECT_STATE_EQ(on_auto_auto, ac.getRaw(), kSharpAcBits);
|
||||
EXPECT_EQ("Power: On, Mode: 0 (AUTO), Temp: 15C, Fan: 2 (AUTO)",
|
||||
ac.toString());
|
||||
|
||||
uint8_t cool_auto_28[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCD, 0x31, 0x22, 0x00, 0x08, 0x80, 0x04, 0xE0,
|
||||
0x51};
|
||||
ac.stateReset();
|
||||
ac.on();
|
||||
ac.setMode(kSharpAcCool);
|
||||
ac.setTemp(28);
|
||||
ac.setFan(kSharpAcFanAuto);
|
||||
EXPECT_EQ("Power: On, Mode: 2 (COOL), Temp: 28C, Fan: 2 (AUTO)",
|
||||
ac.toString());
|
||||
EXPECT_STATE_EQ(cool_auto_28, ac.getRaw(), kSharpAcBits);
|
||||
}
|
||||
|
||||
// https://github.com/markszabo/IRremoteESP8266/issues/638#issue-421064165
|
||||
TEST(TestSharpAcClass, KnownStates) {
|
||||
IRSharpAc ac(0);
|
||||
ac.begin();
|
||||
|
||||
uint8_t off_auto_auto[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0x00, 0x21, 0x20, 0x00, 0x08, 0x80, 0x00, 0xE0,
|
||||
0x31};
|
||||
ASSERT_TRUE(ac.validChecksum(off_auto_auto));
|
||||
ac.setRaw(off_auto_auto);
|
||||
EXPECT_EQ("Power: Off, Mode: 0 (AUTO), Temp: 15C, Fan: 2 (AUTO)",
|
||||
ac.toString());
|
||||
uint8_t on_auto_auto[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0x00, 0x11, 0x20, 0x00, 0x08, 0x80, 0x00, 0xE0,
|
||||
0x01};
|
||||
ASSERT_TRUE(ac.validChecksum(on_auto_auto));
|
||||
ac.setRaw(on_auto_auto);
|
||||
EXPECT_EQ("Power: On, Mode: 0 (AUTO), Temp: 15C, Fan: 2 (AUTO)",
|
||||
ac.toString());
|
||||
uint8_t cool_auto_28[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCD, 0x31, 0x22, 0x00, 0x08, 0x80, 0x04, 0xE0,
|
||||
0x51};
|
||||
ASSERT_TRUE(ac.validChecksum(cool_auto_28));
|
||||
ac.setRaw(cool_auto_28);
|
||||
EXPECT_EQ("Power: On, Mode: 2 (COOL), Temp: 28C, Fan: 2 (AUTO)",
|
||||
ac.toString());
|
||||
uint8_t cool_fan1_28[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCD, 0x31, 0x42, 0x00, 0x08, 0x80, 0x05, 0xE0,
|
||||
0x21};
|
||||
ASSERT_TRUE(ac.validChecksum(cool_fan1_28));
|
||||
ac.setRaw(cool_fan1_28);
|
||||
EXPECT_EQ("Power: On, Mode: 2 (COOL), Temp: 28C, Fan: 4 (MIN)",
|
||||
ac.toString());
|
||||
uint8_t cool_fan2_28[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCD, 0x31, 0x32, 0x00, 0x08, 0x80, 0x05, 0xE0,
|
||||
0x51};
|
||||
ASSERT_TRUE(ac.validChecksum(cool_fan2_28));
|
||||
ac.setRaw(cool_fan2_28);
|
||||
EXPECT_EQ("Power: On, Mode: 2 (COOL), Temp: 28C, Fan: 3 (MED)",
|
||||
ac.toString());
|
||||
uint8_t cool_fan3_28[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCD, 0x31, 0x52, 0x00, 0x08, 0x80, 0x05, 0xE0,
|
||||
0x31};
|
||||
ASSERT_TRUE(ac.validChecksum(cool_fan3_28));
|
||||
ac.setRaw(cool_fan3_28);
|
||||
EXPECT_EQ("Power: On, Mode: 2 (COOL), Temp: 28C, Fan: 5 (HIGH)",
|
||||
ac.toString());
|
||||
uint8_t cool_fan4_28[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCD, 0x31, 0x72, 0x00, 0x08, 0x80, 0x05, 0xE0,
|
||||
0x11};
|
||||
ASSERT_TRUE(ac.validChecksum(cool_fan4_28));
|
||||
ac.setRaw(cool_fan4_28);
|
||||
EXPECT_EQ("Power: On, Mode: 2 (COOL), Temp: 28C, Fan: 7 (MAX)",
|
||||
ac.toString());
|
||||
/* Unsupported / Not yet reverse engineered.
|
||||
uint8_t cool_fan4_28_ion_on[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCD, 0x61, 0x72, 0x08, 0x08, 0x80, 0x00, 0xE4,
|
||||
0xD1};
|
||||
ASSERT_TRUE(ac.validChecksum(cool_fan4_28_ion_on));
|
||||
ac.setRaw(cool_fan4_28_ion_on);
|
||||
EXPECT_EQ("Power: On, Mode: 2 (COOL), Temp: 28C, Fan: 7 (MAX)",
|
||||
ac.toString());
|
||||
uint8_t cool_fan4_28_eco1[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0xCD, 0x61, 0x72, 0x18, 0x08, 0x80, 0x00, 0xE8,
|
||||
0x01};
|
||||
ASSERT_TRUE(ac.validChecksum(cool_fan4_28_eco1));
|
||||
ac.setRaw(cool_fan4_28_eco1);
|
||||
EXPECT_EQ("Power: On, Mode: 2 (COOL), Temp: 28C, Fan: 7 (MAX)",
|
||||
ac.toString()); */
|
||||
uint8_t dry_auto[kSharpAcStateLength] = {
|
||||
0xAA, 0x5A, 0xCF, 0x10, 0x00, 0x31, 0x23, 0x00, 0x08, 0x80, 0x00, 0xE0,
|
||||
0x11};
|
||||
ASSERT_TRUE(ac.validChecksum(dry_auto));
|
||||
ac.setRaw(dry_auto);
|
||||
EXPECT_EQ("Power: On, Mode: 3 (DRY), Temp: 15C, Fan: 2 (AUTO)",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestSharpAcClass, toCommon) {
|
||||
IRSharpAc ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kSharpAcCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kSharpAcFanMax);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::SHARP_AC, ac.toCommon().protocol);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -14,6 +14,7 @@ TEST(TestSendSherwood, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendSherwood(0xC1A28877);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480m560s1680m560s1680m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
|
||||
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
|
||||
@@ -31,6 +32,7 @@ TEST(TestSendSherwood, SendDataWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendSherwood(0xC1A28877, 32, 2);
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480m560s1680m560s1680m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
|
||||
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
|
||||
@@ -50,6 +52,7 @@ TEST(TestSendSherwood, SendDataWithZeroRepeats) {
|
||||
irsend.sendSherwood(0xC1A28877, 32, 0);
|
||||
// Should have a single NEC repeat, as we always send one.
|
||||
EXPECT_EQ(
|
||||
"f38000d33"
|
||||
"m8960s4480m560s1680m560s1680m560s560m560s560m560s560m560s560"
|
||||
"m560s560m560s1680m560s1680m560s560m560s1680m560s560m560s560"
|
||||
"m560s560m560s1680m560s560m560s1680m560s560m560s560m560s560"
|
||||
|
||||
@@ -15,6 +15,7 @@ TEST(TestSendSony, SendDataOnly) {
|
||||
irsend.sendSony(0);
|
||||
// We expect three 20-bit commands to be sent.
|
||||
EXPECT_EQ(
|
||||
"f40000d33"
|
||||
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
|
||||
"m600s600m600s600m600s600m600s600m600s600m600s600m600s600m600s600"
|
||||
"m600s600m600s600m600s600m600s600m600s18600"
|
||||
@@ -30,6 +31,7 @@ TEST(TestSendSony, SendDataOnly) {
|
||||
irsend.sendSony(0x240C, kSony20Bits);
|
||||
// We expect three 20-bit commands to be sent.
|
||||
EXPECT_EQ(
|
||||
"f40000d33"
|
||||
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
|
||||
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
|
||||
"m600s600m1200s600m1200s600m600s600m600s16200"
|
||||
@@ -45,6 +47,7 @@ TEST(TestSendSony, SendDataOnly) {
|
||||
irsend.sendSony(0x240C, kSony15Bits);
|
||||
// We expect three 15-bit commands to be sent.
|
||||
EXPECT_EQ(
|
||||
"f40000d33"
|
||||
"m2400s600m600s600m1200s600m600s600m600s600m1200s600m600s600"
|
||||
"m600s600m600s600m600s600m600s600m600s600m1200s600m1200s600m600s600"
|
||||
"m600s22200"
|
||||
@@ -60,6 +63,7 @@ TEST(TestSendSony, SendDataOnly) {
|
||||
irsend.sendSony(0xA90, kSony12Bits);
|
||||
// We expect three 15-bit commands to be sent.
|
||||
EXPECT_EQ(
|
||||
"f40000d33"
|
||||
"m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
|
||||
"m600s600m1200s600m600s600m600s600m600s600m600s25800"
|
||||
"m2400s600m1200s600m600s600m1200s600m600s600m1200s600m600s600"
|
||||
@@ -77,12 +81,14 @@ TEST(TestSendSony, SendWithDiffRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendSony(0x240C, kSony20Bits, 0); // Send a command with 0 repeats.
|
||||
EXPECT_EQ(
|
||||
"f40000d33"
|
||||
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
|
||||
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
|
||||
"m600s600m1200s600m1200s600m600s600m600s16200",
|
||||
irsend.outputStr());
|
||||
irsend.sendSony(0x240C, kSony20Bits, 1); // Send a command with 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f40000d33"
|
||||
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
|
||||
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
|
||||
"m600s600m1200s600m1200s600m600s600m600s16200"
|
||||
@@ -92,6 +98,7 @@ TEST(TestSendSony, SendWithDiffRepeats) {
|
||||
irsend.outputStr());
|
||||
irsend.sendSony(0x240C, kSony20Bits, 3); // Send a command with 3 repeats.
|
||||
EXPECT_EQ(
|
||||
"f40000d33"
|
||||
"m2400s600m600s600m600s600m600s600m600s600m600s600m600s600m1200s600"
|
||||
"m600s600m600s600m1200s600m600s600m600s600m600s600m600s600m600s600"
|
||||
"m600s600m1200s600m1200s600m600s600m600s16200"
|
||||
|
||||
@@ -64,7 +64,10 @@ TEST(TestDecodeTcl112Ac, DecodeRealExample) {
|
||||
|
||||
IRTcl112Ac ac(0);
|
||||
ac.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ("Power: On, Mode: 3 (COOL), Temp: 24C", ac.toString());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 3 (COOL), Temp: 24C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
// Decode a synthetic Tcl112Ac A/C example from Issue #619
|
||||
@@ -103,13 +106,25 @@ TEST(TestTcl112AcClass, Temperature) {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xBC};
|
||||
IRTcl112Ac ac(0);
|
||||
ac.setRaw(temp16C);
|
||||
EXPECT_EQ("Power: On, Mode: 3 (COOL), Temp: 16C", ac.toString());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 3 (COOL), Temp: 16C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
ac.setRaw(temp16point5C);
|
||||
EXPECT_EQ("Power: On, Mode: 3 (COOL), Temp: 16.5C", ac.toString());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 3 (COOL), Temp: 16.5C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
ac.setRaw(temp19point5C);
|
||||
EXPECT_EQ("Power: On, Mode: 3 (COOL), Temp: 19.5C", ac.toString());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 3 (COOL), Temp: 19.5C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
ac.setRaw(temp31C);
|
||||
EXPECT_EQ("Power: On, Mode: 3 (COOL), Temp: 31C", ac.toString());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 3 (COOL), Temp: 31C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
|
||||
ac.setTemp(kTcl112AcTempMin);
|
||||
EXPECT_EQ(kTcl112AcTempMin, ac.getTemp());
|
||||
@@ -158,8 +173,10 @@ TEST(TestTcl112AcClass, OperatingMode) {
|
||||
ac.setMode(kTcl112AcHeat);
|
||||
EXPECT_EQ(kTcl112AcHeat, ac.getMode());
|
||||
|
||||
ac.setMode(kTcl112AcFan);
|
||||
ac.setFan(kTcl112AcFanAuto);
|
||||
ac.setMode(kTcl112AcFan); // Should set fan speed to High.
|
||||
EXPECT_EQ(kTcl112AcFan, ac.getMode());
|
||||
EXPECT_EQ(kTcl112AcFanHigh, ac.getFan());
|
||||
|
||||
ac.setMode(kTcl112AcDry);
|
||||
EXPECT_EQ(kTcl112AcDry, ac.getMode());
|
||||
@@ -185,7 +202,10 @@ TEST(TestTcl112AcClass, OperatingMode) {
|
||||
0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x08,
|
||||
0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x48};
|
||||
ac.setRaw(automode);
|
||||
EXPECT_EQ("Power: On, Mode: 8 (AUTO), Temp: 24C", ac.toString());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 8 (AUTO), Temp: 24C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
TEST(TestTcl112AcClass, Power) {
|
||||
@@ -211,16 +231,21 @@ TEST(TestTcl112AcClass, Power) {
|
||||
0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03,
|
||||
0x0F, 0x00, 0x00, 0x00, 0x00, 0x80, 0xCB};
|
||||
ac.setRaw(on);
|
||||
EXPECT_EQ("Power: On, Mode: 3 (COOL), Temp: 16C", ac.toString());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 3 (COOL), Temp: 16C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
|
||||
const uint8_t off[kTcl112AcStateLength] = {
|
||||
0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x03,
|
||||
0x07, 0x40, 0x00, 0x00, 0x00, 0x80, 0xCB};
|
||||
ac.setRaw(off);
|
||||
EXPECT_EQ("Power: Off, Mode: 3 (COOL), Temp: 24C", ac.toString());
|
||||
EXPECT_EQ(
|
||||
"Power: Off, Mode: 3 (COOL), Temp: 24C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestTcl112AcClass, Checksum) {
|
||||
uint8_t temp16C[kTcl112AcStateLength] = {
|
||||
0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03,
|
||||
@@ -231,9 +256,15 @@ TEST(TestTcl112AcClass, Checksum) {
|
||||
IRTcl112Ac ac(0);
|
||||
EXPECT_EQ(0xCB, ac.calcChecksum(temp16C));
|
||||
ac.setRaw(temp16C);
|
||||
EXPECT_EQ("Power: On, Mode: 3 (COOL), Temp: 16C", ac.toString());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 3 (COOL), Temp: 16C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
ac.setRaw(temp31C);
|
||||
EXPECT_EQ("Power: On, Mode: 3 (COOL), Temp: 31C", ac.toString());
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 3 (COOL), Temp: 31C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
EXPECT_EQ(0xBC, ac.calcChecksum(temp31C));
|
||||
|
||||
EXPECT_TRUE(IRTcl112Ac::validChecksum(temp16C));
|
||||
@@ -245,3 +276,187 @@ TEST(TestTcl112AcClass, Checksum) {
|
||||
EXPECT_TRUE(ac.validChecksum(ac.getRaw()));
|
||||
EXPECT_EQ(0xBC, ac.calcChecksum(ac.getRaw()));
|
||||
}
|
||||
|
||||
TEST(TestTcl112AcClass, Econo) {
|
||||
IRTcl112Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setEcono(true);
|
||||
EXPECT_TRUE(ac.getEcono());
|
||||
ac.setEcono(false);
|
||||
EXPECT_EQ(false, ac.getEcono());
|
||||
ac.setEcono(true);
|
||||
EXPECT_TRUE(ac.getEcono());
|
||||
}
|
||||
|
||||
TEST(TestTcl112AcClass, Health) {
|
||||
IRTcl112Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setHealth(true);
|
||||
EXPECT_TRUE(ac.getHealth());
|
||||
ac.setHealth(false);
|
||||
EXPECT_EQ(false, ac.getHealth());
|
||||
ac.setHealth(true);
|
||||
EXPECT_TRUE(ac.getHealth());
|
||||
}
|
||||
|
||||
TEST(TestTcl112AcClass, Light) {
|
||||
IRTcl112Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setLight(true);
|
||||
EXPECT_TRUE(ac.getLight());
|
||||
ac.setLight(false);
|
||||
EXPECT_EQ(false, ac.getLight());
|
||||
ac.setLight(true);
|
||||
EXPECT_TRUE(ac.getLight());
|
||||
}
|
||||
|
||||
TEST(TestTcl112AcClass, SwingHorizontal) {
|
||||
IRTcl112Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setSwingHorizontal(true);
|
||||
EXPECT_TRUE(ac.getSwingHorizontal());
|
||||
ac.setSwingHorizontal(false);
|
||||
EXPECT_EQ(false, ac.getSwingHorizontal());
|
||||
ac.setSwingHorizontal(true);
|
||||
EXPECT_TRUE(ac.getSwingHorizontal());
|
||||
}
|
||||
|
||||
TEST(TestTcl112AcClass, SwingVertical) {
|
||||
IRTcl112Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setSwingVertical(true);
|
||||
EXPECT_TRUE(ac.getSwingVertical());
|
||||
ac.setSwingVertical(false);
|
||||
EXPECT_EQ(false, ac.getSwingVertical());
|
||||
ac.setSwingVertical(true);
|
||||
EXPECT_TRUE(ac.getSwingVertical());
|
||||
}
|
||||
|
||||
TEST(TestTcl112AcClass, Turbo) {
|
||||
IRTcl112Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
ac.setFan(kTcl112AcFanLow);
|
||||
ac.setSwingHorizontal(false);
|
||||
|
||||
ac.setTurbo(false);
|
||||
EXPECT_FALSE(ac.getTurbo());
|
||||
EXPECT_FALSE(ac.getSwingVertical());
|
||||
EXPECT_EQ(kTcl112AcFanLow, ac.getFan());
|
||||
|
||||
ac.setTurbo(true);
|
||||
EXPECT_TRUE(ac.getTurbo());
|
||||
EXPECT_TRUE(ac.getSwingVertical());
|
||||
EXPECT_EQ(kTcl112AcFanHigh, ac.getFan());
|
||||
|
||||
ac.setTurbo(false);
|
||||
EXPECT_FALSE(ac.getTurbo());
|
||||
ac.setTurbo(true);
|
||||
EXPECT_TRUE(ac.getTurbo());
|
||||
}
|
||||
|
||||
TEST(TestTcl112AcClass, FanSpeed) {
|
||||
IRTcl112Ac ac(0);
|
||||
ac.begin();
|
||||
|
||||
// Unexpected value should default to Auto.
|
||||
ac.setFan(255);
|
||||
EXPECT_EQ(kTcl112AcFanAuto, ac.getFan());
|
||||
|
||||
ac.setFan(kTcl112AcFanLow);
|
||||
EXPECT_EQ(kTcl112AcFanLow, ac.getFan());
|
||||
ac.setFan(kTcl112AcFanMed);
|
||||
EXPECT_EQ(kTcl112AcFanMed, ac.getFan());
|
||||
ac.setFan(kTcl112AcFanHigh);
|
||||
EXPECT_EQ(kTcl112AcFanHigh, ac.getFan());
|
||||
ac.setFan(kTcl112AcFanAuto);
|
||||
EXPECT_EQ(kTcl112AcFanAuto, ac.getFan());
|
||||
|
||||
// Beyond High should default to Auto.
|
||||
ac.setFan(kTcl112AcFanHigh + 1);
|
||||
EXPECT_EQ(kTcl112AcFanAuto, ac.getFan());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestTcl112AcClass, toCommon) {
|
||||
IRTcl112Ac ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kTcl112AcCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kTcl112AcFanHigh);
|
||||
ac.setSwingVertical(true);
|
||||
ac.setSwingHorizontal(true);
|
||||
ac.setTurbo(true);
|
||||
ac.setHealth(true);
|
||||
ac.setEcono(true);
|
||||
ac.setLight(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::TCL112AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kAuto, ac.toCommon().swingh);
|
||||
ASSERT_TRUE(ac.toCommon().turbo);
|
||||
ASSERT_TRUE(ac.toCommon().econo);
|
||||
ASSERT_TRUE(ac.toCommon().light);
|
||||
ASSERT_TRUE(ac.toCommon().filter);
|
||||
// Unsupported.
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
|
||||
TEST(TestDecodeTcl112Ac, Issue744) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
irsend.reset();
|
||||
uint16_t rawData[227] = {
|
||||
3164, 1532, 584, 1082, 472, 1068, 580, 244, 602, 264, 542, 328, 530, 1034,
|
||||
586, 262, 540, 326, 508, 1064, 582, 1082, 490, 328, 532, 1032, 586, 262,
|
||||
544, 352, 478, 1060, 584, 1082, 486, 328, 502, 1058, 588, 1084, 472, 344,
|
||||
530, 250, 600, 1086, 492, 322, 530, 258, 594, 1082, 494, 318, 510, 344,
|
||||
530, 248, 600, 262, 544, 326, 504, 296, 578, 252, 598, 260, 550, 318, 506,
|
||||
344, 530, 250, 600, 258, 546, 318, 508, 342, 532, 254, 596, 236, 606, 266,
|
||||
524, 1066, 580, 242, 602, 266, 542, 1054, 574, 246, 604, 262, 550, 1088,
|
||||
530, 1034, 588, 262, 542, 328, 504, 296, 582, 238, 606, 262, 546, 322,
|
||||
508, 342, 530, 250, 602, 260, 544, 1052, 572, 252, 600, 260, 546, 320,
|
||||
506, 344, 530, 254, 596, 264, 578, 268, 552, 316, 528, 256, 598, 260, 578,
|
||||
272, 520, 372, 476, 294, 582, 240, 604, 266, 542, 328, 502, 294, 582, 238,
|
||||
604, 268, 540, 322, 506, 346, 530, 244, 604, 260, 542, 354, 478, 298, 580,
|
||||
240, 604, 262, 542, 326, 506, 342, 530, 250, 600, 260, 548, 318, 506, 344,
|
||||
530, 250, 600, 260, 546, 320, 528, 322, 530, 254, 598, 262, 548, 316, 468,
|
||||
380, 532, 250, 600, 260, 546, 1092, 500, 300, 578, 246, 602, 1082, 474,
|
||||
346, 530, 248, 602, 260, 542, 1054, 570, 1090, 524}; // UNKNOWN 3338FACE
|
||||
|
||||
uint8_t expectedState[kTcl112AcStateLength] = {
|
||||
0x23, 0xCB, 0x26, 0x01, 0x00, 0x24, 0x03,
|
||||
0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC4};
|
||||
|
||||
irsend.sendRaw(rawData, 227, 38000);
|
||||
irsend.makeDecodeResult();
|
||||
|
||||
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||||
ASSERT_EQ(TCL112AC, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kTcl112AcBits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
|
||||
|
||||
IRTcl112Ac ac(0);
|
||||
ac.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 3 (COOL), Temp: 23C, Fan: 0 (Auto), Econo: Off, "
|
||||
"Health: Off, Light: On, Turbo: Off, Swing (H): Off, Swing (V): Off",
|
||||
ac.toString());
|
||||
}
|
||||
@@ -23,13 +23,14 @@ TEST(TestSendTeco, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendTeco(0x250002BC9);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m9000s4440"
|
||||
"m620s1650m620s580m620s580m620s1650m620s580m620s580m620s1650m620s1650"
|
||||
"m620s1650m620s1650m620s580m620s1650m620s580m620s1650m620s580m620s580"
|
||||
"m620s580m620s580m620s580m620s580m620s580m620s580m620s580m620s580"
|
||||
"m620s580m620s580m620s580m620s580m620s1650m620s580m620s1650m620s580"
|
||||
"m620s580m620s1650m620s580"
|
||||
"m620s1000000",
|
||||
"m620s100000",
|
||||
irsend.outputStr());
|
||||
}
|
||||
|
||||
@@ -41,27 +42,28 @@ TEST(TestSendTeco, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendTeco(0x250002BC9, kTecoBits, 2); // two repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m9000s4440"
|
||||
"m620s1650m620s580m620s580m620s1650m620s580m620s580m620s1650m620s1650"
|
||||
"m620s1650m620s1650m620s580m620s1650m620s580m620s1650m620s580m620s580"
|
||||
"m620s580m620s580m620s580m620s580m620s580m620s580m620s580m620s580"
|
||||
"m620s580m620s580m620s580m620s580m620s1650m620s580m620s1650m620s580"
|
||||
"m620s580m620s1650m620s580"
|
||||
"m620s1000000"
|
||||
"m620s100000"
|
||||
"m9000s4440"
|
||||
"m620s1650m620s580m620s580m620s1650m620s580m620s580m620s1650m620s1650"
|
||||
"m620s1650m620s1650m620s580m620s1650m620s580m620s1650m620s580m620s580"
|
||||
"m620s580m620s580m620s580m620s580m620s580m620s580m620s580m620s580"
|
||||
"m620s580m620s580m620s580m620s580m620s1650m620s580m620s1650m620s580"
|
||||
"m620s580m620s1650m620s580"
|
||||
"m620s1000000"
|
||||
"m620s100000"
|
||||
"m9000s4440"
|
||||
"m620s1650m620s580m620s580m620s1650m620s580m620s580m620s1650m620s1650"
|
||||
"m620s1650m620s1650m620s580m620s1650m620s580m620s1650m620s580m620s580"
|
||||
"m620s580m620s580m620s580m620s580m620s580m620s580m620s580m620s580"
|
||||
"m620s580m620s580m620s580m620s580m620s1650m620s580m620s1650m620s580"
|
||||
"m620s580m620s1650m620s580"
|
||||
"m620s1000000",
|
||||
"m620s100000",
|
||||
irsend.outputStr());
|
||||
}
|
||||
|
||||
@@ -354,3 +356,34 @@ TEST(TestDecodeTeco, RealNormalExample) {
|
||||
"Swing: On",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestTecoACClass, toCommon) {
|
||||
IRTecoAc ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kTecoCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kTecoFanHigh);
|
||||
ac.setSwing(true);
|
||||
ac.setSleep(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::TECO, ac.toCommon().protocol);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_EQ(0, ac.toCommon().sleep);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -18,6 +18,7 @@ TEST(TestSendToshibaAC, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendToshibaAC(toshiba_code);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4400s4300"
|
||||
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
|
||||
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
|
||||
@@ -54,6 +55,7 @@ TEST(TestSendToshibaAC, SendWithRepeats) {
|
||||
|
||||
irsend.sendToshibaAC(toshiba_code, kToshibaACStateLength, 0);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4400s4300"
|
||||
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
|
||||
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
|
||||
@@ -70,6 +72,7 @@ TEST(TestSendToshibaAC, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendToshibaAC(toshiba_code, kToshibaACStateLength, 2);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4400s4300"
|
||||
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
|
||||
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
|
||||
@@ -122,6 +125,7 @@ TEST(TestSendToshibaAC, SendUnexpectedSizes) {
|
||||
irsend.reset();
|
||||
irsend.sendToshibaAC(toshiba_long_code, kToshibaACStateLength + 1);
|
||||
ASSERT_EQ(
|
||||
"f38000d50"
|
||||
"m4400s4300"
|
||||
"m543s472m543s472m543s472m543s472m543s472m543s472m543s472m543s1623"
|
||||
"m543s472m543s472m543s472m543s472m543s472m543s472m543s1623m543s472"
|
||||
@@ -380,6 +384,7 @@ TEST(TestToshibaACClass, MessageConstuction) {
|
||||
irsend.reset();
|
||||
irsend.sendToshibaAC(toshiba.getRaw());
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4400s4300"
|
||||
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
|
||||
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
|
||||
@@ -415,6 +420,7 @@ TEST(TestToshibaACClass, MessageConstuction) {
|
||||
irsend.reset();
|
||||
irsend.sendToshibaAC(toshiba.getRaw());
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4400s4300"
|
||||
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
|
||||
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
|
||||
@@ -450,6 +456,7 @@ TEST(TestToshibaACClass, MessageConstuction) {
|
||||
irsend.reset();
|
||||
irsend.sendToshibaAC(toshiba.getRaw());
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m4400s4300"
|
||||
"m543s1623m543s1623m543s1623m543s1623m543s472m543s472m543s1623m543s472"
|
||||
"m543s472m543s472m543s472m543s472m543s1623m543s1623m543s472m543s1623"
|
||||
@@ -662,3 +669,31 @@ TEST(TestDecodeToshibaAC, RealExamples) {
|
||||
// sending the power off message.
|
||||
EXPECT_EQ(kToshibaAcHeat, toshiba.getMode());
|
||||
}
|
||||
|
||||
TEST(TestToshibaACClass, toCommon) {
|
||||
IRToshibaAC ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kToshibaAcCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kToshibaAcFanMax);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::TOSHIBA_AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
// Copyright 2019 David Conran
|
||||
#include "ir_Trotec.h"
|
||||
#include "IRrecv.h"
|
||||
#include "IRrecv_test.h"
|
||||
#include "IRsend.h"
|
||||
#include "IRsend_test.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
|
||||
TEST(TestTrotecESPClass, toCommon) {
|
||||
IRTrotecESP ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kTrotecCool);
|
||||
ac.setTemp(20);
|
||||
ac.setSpeed(kTrotecFanHigh);
|
||||
ac.setSleep(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::TROTEC, ac.toCommon().protocol);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(0, ac.toCommon().sleep);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_EQ(stdAc::swingv_t::kOff, ac.toCommon().swingv);
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().turbo);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
|
||||
TEST(TestTrotecESPClass, MessageConstructon) {
|
||||
IRTrotecESP ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setTemp(20);
|
||||
ac.setMode(kTrotecCool);
|
||||
ac.setSpeed(kTrotecFanMed);
|
||||
ac.setSleep(true);
|
||||
|
||||
uint8_t expected[kTrotecStateLength] = {
|
||||
0x12, 0x34, 0x29, 0x82, 0x00, 0x00, 0x00, 0x00, 0xAB};
|
||||
EXPECT_STATE_EQ(expected, ac.getRaw(), kTrotecBits);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 20C, Fan Speed: 2 (Med), Sleep: On",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
// Tests for sendTrotec().
|
||||
|
||||
// Test sending typical data only.
|
||||
TEST(TestSendTrotec, SendDataOnly) {
|
||||
IRsendTest irsend(0);
|
||||
irsend.begin();
|
||||
uint8_t data[kTrotecStateLength] = {
|
||||
0x12, 0x34, 0x29, 0x82, 0x00, 0x00, 0x00, 0x00, 0xAB};
|
||||
|
||||
irsend.sendTrotec(data);
|
||||
EXPECT_EQ(
|
||||
"f36000d50"
|
||||
"m5952s7364"
|
||||
"m592s592m592s1560m592s592m592s592m592s1560m592s592m592s592m592s592"
|
||||
"m592s592m592s592m592s1560m592s592m592s1560m592s1560m592s592m592s592"
|
||||
"m592s1560m592s592m592s592m592s1560m592s592m592s1560m592s592m592s592"
|
||||
"m592s592m592s1560m592s592m592s592m592s592m592s592m592s592m592s1560"
|
||||
"m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592"
|
||||
"m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592"
|
||||
"m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592"
|
||||
"m592s592m592s592m592s592m592s592m592s592m592s592m592s592m592s592"
|
||||
"m592s1560m592s1560m592s592m592s1560m592s592m592s1560m592s592m592s1560"
|
||||
"m592s6184"
|
||||
"m592s1500",
|
||||
irsend.outputStr());
|
||||
}
|
||||
|
||||
// Tests for decodeTrotec().
|
||||
// Decode normal Trotec messages.
|
||||
|
||||
TEST(TestDecodeTrotec, SyntheticDecode) {
|
||||
IRsendTest irsend(0);
|
||||
IRrecv irrecv(0);
|
||||
irsend.begin();
|
||||
|
||||
// Synthesised Normal Trotec message.
|
||||
irsend.reset();
|
||||
uint8_t expectedState[kTrotecStateLength] = {
|
||||
0x12, 0x34, 0x29, 0x82, 0x00, 0x00, 0x00, 0x00, 0xAB};
|
||||
irsend.sendTrotec(expectedState);
|
||||
irsend.makeDecodeResult();
|
||||
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
||||
EXPECT_EQ(decode_type_t::TROTEC, irsend.capture.decode_type);
|
||||
EXPECT_EQ(kTrotecBits, irsend.capture.bits);
|
||||
EXPECT_STATE_EQ(expectedState, irsend.capture.state, irsend.capture.bits);
|
||||
IRTrotecESP ac(0);
|
||||
ac.setRaw(irsend.capture.state);
|
||||
EXPECT_EQ(
|
||||
"Power: On, Mode: 1 (COOL), Temp: 20C, Fan Speed: 2 (Med), Sleep: On",
|
||||
ac.toString());
|
||||
}
|
||||
|
||||
|
||||
TEST(TestTrotecESPClass, SetAndGetTemp) {
|
||||
IRTrotecESP ac(0);
|
||||
|
||||
ac.setTemp(25);
|
||||
EXPECT_EQ(25, ac.getTemp());
|
||||
ac.setTemp(kTrotecMinTemp);
|
||||
EXPECT_EQ(kTrotecMinTemp, ac.getTemp());
|
||||
ac.setTemp(kTrotecMaxTemp);
|
||||
EXPECT_EQ(kTrotecMaxTemp, ac.getTemp());
|
||||
ac.setTemp(kTrotecMinTemp - 1);
|
||||
EXPECT_EQ(kTrotecMinTemp, ac.getTemp());
|
||||
ac.setTemp(kTrotecMaxTemp + 1);
|
||||
EXPECT_EQ(kTrotecMaxTemp, ac.getTemp());
|
||||
}
|
||||
|
||||
TEST(TestTrotecESPClass, SetAndGetMode) {
|
||||
IRTrotecESP ac(0);
|
||||
|
||||
ac.setMode(kTrotecFan);
|
||||
EXPECT_EQ(kTrotecFan, ac.getMode());
|
||||
ac.setMode(kTrotecCool);
|
||||
EXPECT_EQ(kTrotecCool, ac.getMode());
|
||||
ac.setMode(kTrotecAuto);
|
||||
EXPECT_EQ(kTrotecAuto, ac.getMode());
|
||||
ac.setMode(kTrotecDry);
|
||||
EXPECT_EQ(kTrotecDry, ac.getMode());
|
||||
ac.setMode(255);
|
||||
EXPECT_EQ(kTrotecAuto, ac.getMode());
|
||||
}
|
||||
|
||||
TEST(TestTrotecESPClass, SetAndGetFan) {
|
||||
IRTrotecESP ac(0);
|
||||
|
||||
ac.setSpeed(kTrotecFanHigh);
|
||||
EXPECT_EQ(kTrotecFanHigh, ac.getSpeed());
|
||||
ac.setSpeed(kTrotecFanLow);
|
||||
EXPECT_EQ(kTrotecFanLow, ac.getSpeed());
|
||||
ac.setSpeed(kTrotecFanMed);
|
||||
EXPECT_EQ(kTrotecFanMed, ac.getSpeed());
|
||||
ac.setSpeed(kTrotecFanHigh);
|
||||
EXPECT_EQ(kTrotecFanHigh, ac.getSpeed());
|
||||
ASSERT_NE(7, kTrotecFanHigh);
|
||||
// Now try some unexpected value.
|
||||
ac.setSpeed(7);
|
||||
EXPECT_EQ(kTrotecFanHigh, ac.getSpeed());
|
||||
}
|
||||
|
||||
TEST(TestTrotecESPClass, Sleep) {
|
||||
IRTrotecESP ac(0);
|
||||
ac.setSleep(false);
|
||||
ASSERT_FALSE(ac.getSleep());
|
||||
ac.setSleep(true);
|
||||
ASSERT_TRUE(ac.getSleep());
|
||||
ac.setSleep(false);
|
||||
ASSERT_FALSE(ac.getSleep());
|
||||
}
|
||||
|
||||
TEST(TestTrotecESPClass, Power) {
|
||||
IRTrotecESP ac(0);
|
||||
ac.setPower(false);
|
||||
ASSERT_FALSE(ac.getPower());
|
||||
ac.setPower(true);
|
||||
ASSERT_TRUE(ac.getPower());
|
||||
ac.setPower(false);
|
||||
ASSERT_FALSE(ac.getPower());
|
||||
}
|
||||
|
||||
TEST(TestUtils, Housekeeping) {
|
||||
ASSERT_EQ("TROTEC", typeToString(decode_type_t::TROTEC));
|
||||
ASSERT_EQ(decode_type_t::TROTEC, strToDecodeType("TROTEC"));
|
||||
ASSERT_TRUE(hasACState(decode_type_t::TROTEC));
|
||||
}
|
||||
@@ -17,6 +17,7 @@ TEST(TestSendVestelAc, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendVestelAc(0x0F00D9001FEF201ULL);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3110s9066"
|
||||
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
|
||||
"m520s480m520s1535m520s480m520s480m520s1535m520s1535m520s1535m520s1535"
|
||||
@@ -37,6 +38,7 @@ TEST(TestSendVestelAc, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendVestelAc(0x0F00D9001FEF201ULL, kVestelAcBits, 2); // two repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m3110s9066"
|
||||
"m520s1535m520s480m520s480m520s480m520s480m520s480m520s480m520s480"
|
||||
"m520s480m520s1535m520s480m520s480m520s1535m520s1535m520s1535m520s1535"
|
||||
@@ -509,3 +511,34 @@ TEST(TestDecodeVestelAc, Housekeeping) {
|
||||
ASSERT_EQ("VESTEL_AC", typeToString(VESTEL_AC));
|
||||
ASSERT_FALSE(hasACState(VESTEL_AC)); // Uses uint64_t, not uint8_t*.
|
||||
}
|
||||
|
||||
TEST(TestVestelAcClass, toCommon) {
|
||||
IRVestelAc ac(0);
|
||||
ac.setPower(true);
|
||||
ac.setMode(kVestelAcCool);
|
||||
ac.setTemp(20);
|
||||
ac.setFan(kVestelAcFanHigh);
|
||||
ac.setSwing(true);
|
||||
ac.setTurbo(true);
|
||||
ac.setIon(true);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::VESTEL_AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(-1, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(20, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_TRUE(ac.toCommon().turbo);
|
||||
ASSERT_TRUE(ac.toCommon().filter);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().light);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -19,6 +19,7 @@ TEST(TestSendWhirlpoolAC, SendDataOnly) {
|
||||
|
||||
irsend.sendWhirlpoolAC(data);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m8950s4484"
|
||||
"m597s1649m597s1649m597s533m597s533m597s533m597s533m597s533m597s1649"
|
||||
"m597s533m597s1649m597s1649m597s533m597s533m597s533m597s533m597s533"
|
||||
@@ -582,3 +583,36 @@ TEST(TestIRWhirlpoolAcClass, MessageConstruction) {
|
||||
ac.toString());
|
||||
EXPECT_STATE_EQ(expectedState, ac.getRaw(), kWhirlpoolAcBits);
|
||||
}
|
||||
|
||||
TEST(TestIRWhirlpoolAcClass, toCommon) {
|
||||
IRWhirlpoolAc ac(0);
|
||||
ac.setModel(whirlpool_ac_remote_model_t::DG11J13A);
|
||||
ac.setPowerToggle(true);
|
||||
ac.setMode(kWhirlpoolAcCool);
|
||||
ac.setTemp(18);
|
||||
ac.setFan(kWhirlpoolAcFanHigh);
|
||||
ac.setSwing(true);
|
||||
ac.setSuper(true);
|
||||
ac.setLight(true);
|
||||
ac.setSleep(false);
|
||||
// Now test it.
|
||||
ASSERT_EQ(decode_type_t::WHIRLPOOL_AC, ac.toCommon().protocol);
|
||||
ASSERT_EQ(whirlpool_ac_remote_model_t::DG11J13A, ac.toCommon().model);
|
||||
ASSERT_TRUE(ac.toCommon().power);
|
||||
ASSERT_TRUE(ac.toCommon().celsius);
|
||||
ASSERT_EQ(18, ac.toCommon().degrees);
|
||||
ASSERT_EQ(stdAc::opmode_t::kCool, ac.toCommon().mode);
|
||||
ASSERT_EQ(stdAc::fanspeed_t::kMax, ac.toCommon().fanspeed);
|
||||
ASSERT_EQ(stdAc::swingv_t::kAuto, ac.toCommon().swingv);
|
||||
ASSERT_TRUE(ac.toCommon().turbo);
|
||||
ASSERT_TRUE(ac.toCommon().light);
|
||||
ASSERT_EQ(-1, ac.toCommon().sleep);
|
||||
// Unsupported.
|
||||
ASSERT_EQ(stdAc::swingh_t::kOff, ac.toCommon().swingh);
|
||||
ASSERT_FALSE(ac.toCommon().econo);
|
||||
ASSERT_FALSE(ac.toCommon().filter);
|
||||
ASSERT_FALSE(ac.toCommon().clean);
|
||||
ASSERT_FALSE(ac.toCommon().beep);
|
||||
ASSERT_FALSE(ac.toCommon().quiet);
|
||||
ASSERT_EQ(-1, ac.toCommon().clock);
|
||||
}
|
||||
@@ -14,6 +14,7 @@ TEST(TestSendWhynter, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendWhynter(0x0);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m750s750m2850s2850"
|
||||
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
|
||||
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
|
||||
@@ -25,6 +26,7 @@ TEST(TestSendWhynter, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendWhynter(0xFFFFFFFF);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m750s750m2850s2850"
|
||||
"m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150"
|
||||
"m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150m750s2150"
|
||||
@@ -36,6 +38,7 @@ TEST(TestSendWhynter, SendDataOnly) {
|
||||
irsend.reset();
|
||||
irsend.sendWhynter(0x87654321);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m750s750m2850s2850"
|
||||
"m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150m750s2150"
|
||||
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
|
||||
@@ -53,6 +56,7 @@ TEST(TestSendWhynter, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendWhynter(0x87654321, kWhynterBits, 0); // 0 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m750s750m2850s2850"
|
||||
"m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150m750s2150"
|
||||
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
|
||||
@@ -64,6 +68,7 @@ TEST(TestSendWhynter, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendWhynter(0x87654321, kWhynterBits, 1); // 1 repeat.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m750s750m2850s2850"
|
||||
"m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150m750s2150"
|
||||
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
|
||||
@@ -81,6 +86,7 @@ TEST(TestSendWhynter, SendWithRepeats) {
|
||||
irsend.reset();
|
||||
irsend.sendWhynter(0x87654321, kWhynterBits, 2); // 2 repeats.
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m750s750m2850s2850"
|
||||
"m750s2150m750s750m750s750m750s750m750s750m750s2150m750s2150m750s2150"
|
||||
"m750s750m750s2150m750s2150m750s750m750s750m750s2150m750s750m750s2150"
|
||||
@@ -110,6 +116,7 @@ TEST(TestSendWhynter, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendWhynter(0x0, 8);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m750s750m2850s2850"
|
||||
"m750s750m750s750m750s750m750s750m750s750m750s750m750s750m750s750"
|
||||
"m750s88050",
|
||||
@@ -118,6 +125,7 @@ TEST(TestSendWhynter, SendUnusualSize) {
|
||||
irsend.reset();
|
||||
irsend.sendWhynter(0x1234567890ABCDEF, 64);
|
||||
EXPECT_EQ(
|
||||
"f38000d50"
|
||||
"m750s750m2850s2850"
|
||||
"m750s750m750s750m750s750m750s2150m750s750m750s750m750s2150m750s750"
|
||||
"m750s750m750s750m750s2150m750s2150m750s750m750s2150m750s750m750s750"
|
||||
|
||||
Reference in new issue
Block a user