Tasmota/lib/IRremoteESP8266-2.7.10/test/ir_Doshisha_test.cpp

153 lines
5.8 KiB
C++

// Copyright 2020 Christian Nilsson
#include "IRac.h"
#include "IRrecv.h"
#include "IRrecv_test.h"
#include "IRsend.h"
#include "IRsend_test.h"
#include "gtest/gtest.h"
// Tests for decodeDoshisha().
TEST(TestDecodeDoshisha, RealExample) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
// CH2 Light Level 1
const uint16_t rawData_1[83] = {
3404, 1718,
416, 1306, 416, 460, 438, 432, 412, 460, 464, 396, 488, 394, 488, 394,
488, 398, 460, 430, 468, 398, 484, 416, 468, 396, 488, 1264, 414, 460,
436, 1286, 524, 1210, 470, 390, 434, 456, 414, 1288, 458, 1290, 438, 434,
412, 458, 440, 434, 438, 418, 456, 432, 466, 1270, 438, 442, 438, 430,
414, 1316, 412, 460, 440, 432, 412, 460, 440, 1264, 458, 434, 436, 1268,
458, 436, 438, 412, 456, 1290, 438, 442, 436, 1290,
464}; // DOSHISHA 800B3048A5
irsend.begin();
irsend.reset();
irsend.sendRaw(rawData_1, 83, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(decode_type_t::DOSHISHA, irsend.capture.decode_type);
ASSERT_EQ(kDoshishaBits, irsend.capture.bits);
EXPECT_EQ(0x800B3048A5, irsend.capture.value);
EXPECT_EQ(0b1, irsend.capture.address);
EXPECT_EQ(0xA4, irsend.capture.command);
// CH2 OFF
const uint16_t rawData_2[83] = {
3434, 1700,
446, 1284, 442, 440, 442, 428, 444, 432, 440, 430, 442, 432, 472, 438,
444, 446, 416, 430, 470, 416, 470, 438, 444, 442, 470, 1242, 440, 430,
442, 1314, 390, 1344, 444, 440, 414, 432, 442, 1310, 412, 1318, 416, 458,
416, 434, 438, 432, 418, 484, 416, 458, 442, 1298, 416, 466, 420, 428,
442, 1316, 418, 432, 442, 430, 442, 434, 444, 1286, 440, 430, 444, 1288,
444, 430, 444, 430, 442, 432, 498, 386, 498, 1242,
474}; // DOSHISHA 800B3048A1
irsend.begin();
irsend.reset();
irsend.sendRaw(rawData_2, 175, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(decode_type_t::DOSHISHA, irsend.capture.decode_type);
ASSERT_EQ(kDoshishaBits, irsend.capture.bits);
EXPECT_EQ(0x800B3048A1, irsend.capture.value);
EXPECT_EQ(0b1, irsend.capture.address);
EXPECT_EQ(0xA0, irsend.capture.command);
// CH1 OFF
const uint16_t rawData_4[83] = {
3470, 1670,
444, 1294, 470, 408, 442, 430, 444, 412, 464, 440, 498, 386, 498, 388,
474, 418, 440, 430, 472, 414, 474, 412, 472, 414, 470, 1268, 444, 428,
448, 1284, 444, 1294, 472, 412, 446, 428, 442, 1284, 444, 1290, 444, 430,
446, 430, 442, 410, 490, 406, 446, 428, 472, 1270, 472, 414, 442, 410,
460, 1292, 444, 430, 442, 430, 444, 434, 444, 1286, 442, 432, 442, 1288,
446, 430, 442, 414, 486, 386, 516, 388, 446, 438,
446}; // DOSHISHA 800B3048A0
irsend.begin();
irsend.reset();
irsend.sendRaw(rawData_4, 175, 38);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
ASSERT_EQ(decode_type_t::DOSHISHA, irsend.capture.decode_type);
ASSERT_EQ(kDoshishaBits, irsend.capture.bits);
EXPECT_EQ(0x800B3048A0, irsend.capture.value);
EXPECT_EQ(0b0, irsend.capture.address);
EXPECT_EQ(0xA0, irsend.capture.command);
}
TEST(TestDecodeDoshisha, SyntheticExample) {
IRsendTest irsend(kGpioUnused);
IRrecv irrecv(kGpioUnused);
irsend.begin();
irsend.reset();
irsend.sendDoshisha(0x800B3048A5);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(decode_type_t::DOSHISHA, irsend.capture.decode_type);
EXPECT_EQ(kDoshishaBits, irsend.capture.bits);
EXPECT_EQ(0x800B3048A5, irsend.capture.value);
EXPECT_EQ(0b1, irsend.capture.address);
EXPECT_EQ(0xA4, irsend.capture.command);
EXPECT_EQ(
"f38000d50"
"m3412s1722"
"m420s1310m420s452m420s452m420s452m420s452m420s452m420s452"
"m420s452m420s452m420s452m420s452m420s452m420s1310m420s452"
"m420s1310m420s1310m420s452m420s452m420s1310m420s1310m420s452"
"m420s452m420s452m420s452m420s452m420s1310m420s452m420s452"
"m420s1310m420s452m420s452m420s452m420s1310m420s452m420s1310"
"m420s452m420s452m420s1310m420s452m420s1310"
"m420s100000",
irsend.outputStr());
irsend.reset();
irsend.sendDoshisha(0x800B3048D0);
irsend.makeDecodeResult();
ASSERT_TRUE(irrecv.decode(&irsend.capture));
EXPECT_EQ(decode_type_t::DOSHISHA, irsend.capture.decode_type);
EXPECT_EQ(kDoshishaBits, irsend.capture.bits);
EXPECT_EQ(0x800B3048D0, irsend.capture.value);
EXPECT_EQ(irsend.encodeDoshisha(0xD0, 0b0), irsend.capture.value);
EXPECT_EQ(0b0, irsend.capture.address);
EXPECT_EQ(0xD0, irsend.capture.command);
EXPECT_EQ(
"f38000d50"
"m3412s1722"
"m420s1310m420s452m420s452m420s452m420s452m420s452m420s452"
"m420s452m420s452m420s452m420s452m420s452m420s1310m420s452"
"m420s1310m420s1310m420s452m420s452m420s1310m420s1310m420s452"
"m420s452m420s452m420s452m420s452m420s1310m420s452m420s452m420"
"s1310m420s452m420s452m420s452m420s1310m420s1310m420s452m420s1310"
"m420s452m420s452m420s452m420s452"
"m420s100000",
irsend.outputStr());
}
TEST(TestEncodeDoshisha, SyntheticExample) {
IRsendTest irsend(kGpioUnused);
// kRcz01CheckExpected
EXPECT_EQ(0x800B304800, irsend.encodeDoshisha(0x00, 0b0));
// kRcz01CommandTimmer30
EXPECT_EQ(0x800B304892, irsend.encodeDoshisha(0x92, 0b0));
// kRcz01CommandLevel1
EXPECT_EQ(0x800B3048A5, irsend.encodeDoshisha(0xA4, 0b1));
EXPECT_EQ(0x800B3048A4, irsend.encodeDoshisha(0xA4, 0b0));
}
TEST(TestUtils, Housekeeping) {
ASSERT_EQ("DOSHISHA", typeToString(decode_type_t::DOSHISHA));
ASSERT_EQ(decode_type_t::DOSHISHA, strToDecodeType("DOSHISHA"));
ASSERT_FALSE(hasACState(decode_type_t::DOSHISHA));
ASSERT_FALSE(IRac::isProtocolSupported(decode_type_t::DOSHISHA));
ASSERT_EQ(kDoshishaBits, IRsend::defaultBits(decode_type_t::DOSHISHA));
ASSERT_EQ(kNoRepeat, IRsend::minRepeats(decode_type_t::DOSHISHA));
}