Files
IRremoteESP8266/test/ir_York_test.cpp
Daniele Gobbetti fdf35b49a8 Initial support for York AC protocol (#1889)
The protocol is known to almost every detail, checksum is calculated properly.
Some basic tests have been added.

Setting the sleep timer, scheduled power on, scheduled power off do not work
since there are some flags within byte 12 which is not correctly populated ATM.

Co-authored-by: David Conran <crankyoldgit@users.noreply.github.com>
2023-04-27 09:04:07 +10:00

97 lines
3.5 KiB
C++

// Copyright 2023 Daniele Gobbetti
#include "ir_York.h"
#include "IRac.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// General housekeeping
TEST(TestYork, Housekeeping) {
ASSERT_EQ("YORK", typeToString(decode_type_t::YORK));
ASSERT_EQ(typeToString(decode_type_t::YORK), "YORK");
ASSERT_TRUE(hasACState(YORK));
ASSERT_TRUE(IRac::isProtocolSupported(decode_type_t::YORK));
ASSERT_EQ(kYorkBits, IRsend::defaultBits(decode_type_t::YORK));
}
// Tests for sendYork().
// Test sending typical data only.
TEST(TestSendYork, SendDataOnly) {
IRsendTest irsend(0);
irsend.begin();
uint8_t data[kYorkStateLength] = {
0x08, 0x10, 0x07, 0x02, 0x40, 0x08,
0x03, 0x18, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00,
0xEC, 0xF5, 0xF2};
irsend.reset();
irsend.sendYork(data);
EXPECT_EQ(
"f38000d50"
"m4887s2267m612s579m612s579m612s579m612s1778m612s579m612s579m612s579"
"m612s579m612s579m612s579m612s579m612s579m612s1778m612s579m612s579"
"m612s579m612s1778m612s1778m612s1778m612s579m612s579m612s579m612s579"
"m612s579m612s579m612s1778m612s579m612s579m612s579m612s579m612s579m612s579"
"m612s579m612s579m612s579m612s579m612s579m612s579m612s1778m612s579m612s579"
"m612s579m612s579m612s1778m612s579m612s579m612s579m612s579m612s1778"
"m612s1778m612s579m612s579m612s579m612s579m612s579m612s579m612s579m612s579"
"m612s579m612s1778m612s1778m612s579m612s579m612s579m612s1778m612s579"
"m612s579m612s579m612s579m612s579m612s579m612s579m612s579m612s579m612s579"
"m612s579m612s579m612s1778m612s1778m612s579m612s579m612s579m612s579"
"m612s579m612s579m612s579m612s579m612s579m612s579m612s579m612s579m612s579"
"m612s579m612s579m612s579m612s579m612s579m612s579m612s579m612s579m612s579"
"m612s579m612s579m612s579m612s579m612s579m612s579m612s579m612s579m612s579"
"m612s579m612s579m612s579m612s579m612s1778m612s1778m612s579m612s1778"
"m612s1778m612s1778m612s1778m612s579m612s1778m612s579m612s1778m612s1778"
"m612s1778m612s1778m612s579m612s1778m612s579m612s579m612s1778m612s1778"
"m612s1778m612s1778m612s100000",
irsend.outputStr());
irsend.reset();
}
// Decode normal York messages.
TEST(TestDecodeYork, SyntheticDecode) {
IRsendTest irsend(0);
IRrecv irrecv(0);
irsend.begin();
// Synthesised Normal York message.
irsend.reset();
uint8_t kYorkKnownGoodState[kYorkStateLength] = {
0x08, 0x10, 0x07, 0x02, 0x40, 0x08,
0x03, 0x18, 0x01, 0x60, 0x00, 0x00, 0x00, 0x00,
0xEC, 0xF5, 0xF2};
irsend.sendYork(kYorkKnownGoodState);
irsend.makeDecodeResult();
EXPECT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(YORK, irsend.capture.decode_type);
EXPECT_EQ(kYorkBits, irsend.capture.bits);
EXPECT_STATE_EQ(kYorkKnownGoodState, irsend.capture.state,
irsend.capture.bits);
EXPECT_EQ(
"Power: On, Mode: 1 (Heat), Fan: 8 (Auto), Temp: 24C, Swing(V): Off"
", On Timer: 00:00, Off Timer: 00:00",
IRAcUtils::resultAcToString(&irsend.capture));
stdAc::state_t r, p;
ASSERT_TRUE(IRAcUtils::decodeToState(&irsend.capture, &r, &p));
}
// test checksum calculation
TEST(TestYorkClass, SetAndGetTemp) {
IRYorkAc ac(kGpioUnused);
EXPECT_NE(23, ac.getTemp()); // default state is 24 deegrees Celsius
ac.setTemp(23);
EXPECT_EQ(23, ac.getTemp());
uint8_t expectedState[kYorkStateLength] = {
0x08, 0x10, 0x07, 0x02, 0x40, 0x08,
0x03, 0x18, 0x01, 0x5C, 0x00, 0x00, 0x00, 0x00,
0xEC, 0xA5, 0xF7};
EXPECT_STATE_EQ(expectedState, ac.getRaw(), kYorkBits);
}