Update IRRemote ESP8266 to 2.6.2 and add ESP32 support

This commit is contained in:
Florian committed 2019-07-08 22:21:02 +02:00
1 parent 2ee18320be
commit 24bcdbc97c
195 files changed
+22963 -4737

No files matched your search

+998
View File
@@ -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));
}
+4 -4
View File
@@ -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);
}
+161 -18
View File
@@ -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));
}
}
+21 -1
View File
@@ -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;
}
};
+94
View File
@@ -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("&quot;With Changes&quot;", htmlEscape("\"With Changes\""));
EXPECT_EQ(
"&apos;&semi;&excl;&dash;&quot;&lt;&gt;&#equals;&amp;&num;&lcub;&rcub;"
"&lpar;&rpar;", htmlEscape("';!-\"<>=&#{}()"));
EXPECT_EQ("&quot;&quot;", htmlEscape("\"\""));
EXPECT_EQ(
"&amp;quot&semi;&amp;lt&semi;&amp;apos&semi;&amp;gt&semi;&amp;amp&semi;",
htmlEscape("&quot;&lt;&apos;&gt;&amp;"));
}
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;
}
+137 -66
View File
@@ -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"
+221
View File
@@ -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"
+155
View File
@@ -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
+24 -16
View File
@@ -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"
+10 -9
View File
@@ -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);
+427 -184
View File
@@ -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());
}
+46 -8
View File
@@ -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);
}
+162 -8
View File
@@ -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);
}
+119
View File
@@ -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);
}
+5
View File
@@ -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);
}
+8 -1
View File
@@ -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());
}
+196
View File
@@ -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);
}
+7 -2
View File
@@ -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"
+2
View File
@@ -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);
}
+8 -1
View File
@@ -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"
+16 -4
View File
@@ -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"
+343 -19
View File
@@ -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"
+353
View File
@@ -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"
+227 -12
View File
@@ -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());
}
+37 -4
View File
@@ -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);
}
+179
View File
@@ -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"