mirror of https://github.com/arendst/Tasmota.git
96 lines
3.1 KiB
C++
96 lines
3.1 KiB
C++
|
// Copyright 2020 crankyoldgit
|
||
|
|
||
|
#include "IRac.h"
|
||
|
#include "IRrecv.h"
|
||
|
#include "IRrecv_test.h"
|
||
|
#include "IRsend.h"
|
||
|
#include "IRsend_test.h"
|
||
|
#include "gtest/gtest.h"
|
||
|
|
||
|
// Tests for decodeMetz().
|
||
|
|
||
|
TEST(TestDecodeMetz, RealExample) {
|
||
|
IRsendTest irsend(kGpioUnused);
|
||
|
IRrecv irrecv(kGpioUnused);
|
||
|
uint16_t rawbuf[41] = {
|
||
|
// Header 1 0 1
|
||
|
880, 2336, 462, 1656, 460, 952, 486, 1630,
|
||
|
// 1 1 0 0
|
||
|
462, 1654, 460, 1660, 462, 948, 488, 902,
|
||
|
// 1 0 1 0
|
||
|
486, 1656, 486, 926, 486, 1630, 486, 924,
|
||
|
// 1 0 0 1
|
||
|
488, 1630, 460, 954, 460, 950, 512, 1606,
|
||
|
// 0 1 0 1
|
||
|
460, 978, 436, 1656, 486, 926, 486, 1630,
|
||
|
458};
|
||
|
irsend.begin();
|
||
|
irsend.reset();
|
||
|
irsend.sendRaw(rawbuf, 41, 38);
|
||
|
irsend.makeDecodeResult();
|
||
|
|
||
|
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||
|
ASSERT_EQ(decode_type_t::METZ, irsend.capture.decode_type);
|
||
|
ASSERT_EQ(kMetzBits, irsend.capture.bits);
|
||
|
EXPECT_EQ(0x5CA95, irsend.capture.value);
|
||
|
EXPECT_EQ(0x2A, irsend.capture.command);
|
||
|
EXPECT_EQ(0x3, irsend.capture.address);
|
||
|
}
|
||
|
|
||
|
TEST(TestDecodeMetz, SyntheticExample) {
|
||
|
IRsendTest irsend(kGpioUnused);
|
||
|
IRrecv irrecv(kGpioUnused);
|
||
|
irsend.begin();
|
||
|
irsend.reset();
|
||
|
irsend.sendMetz(0x5CA95);
|
||
|
irsend.makeDecodeResult();
|
||
|
|
||
|
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||
|
EXPECT_EQ(decode_type_t::METZ, irsend.capture.decode_type);
|
||
|
EXPECT_EQ(kMetzBits, irsend.capture.bits);
|
||
|
EXPECT_EQ(0x5CA95, irsend.capture.value);
|
||
|
EXPECT_EQ(0x2A, irsend.capture.command);
|
||
|
EXPECT_EQ(0x3, irsend.capture.address);
|
||
|
|
||
|
EXPECT_EQ(
|
||
|
"f38000d50"
|
||
|
// 880 2336 462 1656 460 952 486 1630 462 1654 460 1660 462 948 488 902
|
||
|
"m880s2336m473s1640m473s940m473s1640m473s1640m473s1640m473s940m473s940"
|
||
|
// 486 1656 486 926 486 1630 486 924 488 1630 460 954 460 950 512 1606
|
||
|
"m473s1640m473s940m473s1640m473s940m473s1640m473s940m473s940m473s1640"
|
||
|
// 460 978 436 1656 486 926 486 1630
|
||
|
"m473s940m473s1640m473s940m473s1640"
|
||
|
// 458
|
||
|
"m473s100000",
|
||
|
irsend.outputStr());
|
||
|
}
|
||
|
|
||
|
TEST(TestEncodeMetz, BasicTests) {
|
||
|
EXPECT_EQ(0x703F, IRsend::encodeMetz(0, 0));
|
||
|
EXPECT_EQ(0x703F, IRsend::encodeMetz(0, 0, false));
|
||
|
EXPECT_EQ(0x4703F, IRsend::encodeMetz(0, 0, true));
|
||
|
|
||
|
EXPECT_EQ(0xE0BD, IRsend::encodeMetz(1, 2, false));
|
||
|
EXPECT_EQ(0x4E0BD, IRsend::encodeMetz(1, 2, true));
|
||
|
|
||
|
EXPECT_EQ(0x38FC0, IRsend::encodeMetz(0b111, 0b111111, false));
|
||
|
EXPECT_EQ(0x78FC0, IRsend::encodeMetz(0b111, 0b111111, true));
|
||
|
|
||
|
// Out of range.
|
||
|
EXPECT_EQ(0x38FC0, IRsend::encodeMetz(255, 255, false));
|
||
|
EXPECT_EQ(0x78FC0, IRsend::encodeMetz(255, 255, true));
|
||
|
}
|
||
|
|
||
|
TEST(TestEncodeMetz, RealExamples) {
|
||
|
EXPECT_EQ(0x5CA95, IRsend::encodeMetz(0x3, 0x2A, true));
|
||
|
}
|
||
|
|
||
|
TEST(TestUtils, Housekeeping) {
|
||
|
ASSERT_EQ("METZ", typeToString(decode_type_t::METZ));
|
||
|
ASSERT_EQ(decode_type_t::METZ, strToDecodeType("METZ"));
|
||
|
ASSERT_FALSE(hasACState(decode_type_t::METZ));
|
||
|
ASSERT_FALSE(IRac::isProtocolSupported(decode_type_t::METZ));
|
||
|
ASSERT_EQ(kMetzBits, IRsend::defaultBits(decode_type_t::METZ));
|
||
|
ASSERT_EQ(kMetzMinRepeat, IRsend::minRepeats(decode_type_t::METZ));
|
||
|
}
|