mirror of https://github.com/arendst/Tasmota.git
153 lines
5.8 KiB
C++
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));
|
|
}
|