mirror of https://github.com/arendst/Tasmota.git
99 lines
3.2 KiB
C++
99 lines
3.2 KiB
C++
|
// Copyright 2020 David Conran
|
||
|
|
||
|
#include "IRac.h"
|
||
|
#include "IRrecv.h"
|
||
|
#include "IRrecv_test.h"
|
||
|
#include "IRsend.h"
|
||
|
#include "IRsend_test.h"
|
||
|
#include "gtest/gtest.h"
|
||
|
|
||
|
// Tests for decodeMultibrackets().
|
||
|
|
||
|
// Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1103
|
||
|
|
||
|
TEST(TestDecodeMultibrackets, RealExample) {
|
||
|
IRsendTest irsend(kGpioUnused);
|
||
|
IRrecv irrecv(kGpioUnused);
|
||
|
// The 1 + ok keypress:
|
||
|
uint16_t rawData_1[7] = {20100, 20472, 15092, 30704, 20102, 20472, 15086};
|
||
|
irsend.begin();
|
||
|
irsend.reset();
|
||
|
irsend.sendRaw(rawData_1, 7, 38);
|
||
|
irsend.makeDecodeResult();
|
||
|
|
||
|
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||
|
ASSERT_EQ(decode_type_t::MULTIBRACKETS, irsend.capture.decode_type);
|
||
|
ASSERT_EQ(kMultibracketsBits, irsend.capture.bits);
|
||
|
EXPECT_EQ(0x87, irsend.capture.value);
|
||
|
EXPECT_EQ(0x0, irsend.capture.address);
|
||
|
EXPECT_EQ(0x0, irsend.capture.command);
|
||
|
|
||
|
// ok keypress.
|
||
|
const uint16_t rawData_2[11] = {
|
||
|
25124, 5108, 5038, 5110, 5034, 40940, 25132, 5108, 5036, 5110, 5036};
|
||
|
|
||
|
irsend.begin();
|
||
|
irsend.reset();
|
||
|
irsend.sendRaw(rawData_2, 11, 38);
|
||
|
irsend.makeDecodeResult();
|
||
|
|
||
|
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||
|
ASSERT_EQ(decode_type_t::MULTIBRACKETS, irsend.capture.decode_type);
|
||
|
ASSERT_EQ(kMultibracketsBits, irsend.capture.bits);
|
||
|
EXPECT_EQ(0xD4, irsend.capture.value);
|
||
|
EXPECT_EQ(0x0, irsend.capture.address);
|
||
|
EXPECT_EQ(0x0, irsend.capture.command);
|
||
|
}
|
||
|
|
||
|
TEST(TestDecodeMultibrackets, SyntheticExample) {
|
||
|
IRsendTest irsend(kGpioUnused);
|
||
|
IRrecv irrecv(kGpioUnused);
|
||
|
irsend.begin();
|
||
|
irsend.reset();
|
||
|
irsend.sendMultibrackets(0x87);
|
||
|
irsend.makeDecodeResult();
|
||
|
|
||
|
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||
|
EXPECT_EQ(decode_type_t::MULTIBRACKETS, irsend.capture.decode_type);
|
||
|
EXPECT_EQ(kMultibracketsBits, irsend.capture.bits);
|
||
|
EXPECT_EQ(0x87, irsend.capture.value);
|
||
|
EXPECT_EQ(0x0, irsend.capture.address);
|
||
|
EXPECT_EQ(0x0, irsend.capture.command);
|
||
|
|
||
|
// Real data is:
|
||
|
// uint16_t rawData[7] = {20100, 20472, 15092, 30704, 20102, 20472, 15086};
|
||
|
|
||
|
EXPECT_EQ(
|
||
|
"f38000d50m20000s20000m15000s30000m20000s20000m15000s30000",
|
||
|
irsend.outputStr());
|
||
|
}
|
||
|
|
||
|
TEST(TestUtils, Housekeeping) {
|
||
|
ASSERT_EQ("MULTIBRACKETS", typeToString(decode_type_t::MULTIBRACKETS));
|
||
|
ASSERT_EQ(decode_type_t::MULTIBRACKETS, strToDecodeType("MULTIBRACKETS"));
|
||
|
ASSERT_FALSE(hasACState(decode_type_t::MULTIBRACKETS));
|
||
|
ASSERT_FALSE(IRac::isProtocolSupported(decode_type_t::MULTIBRACKETS));
|
||
|
ASSERT_EQ(kMultibracketsBits,
|
||
|
IRsend::defaultBits(decode_type_t::MULTIBRACKETS));
|
||
|
ASSERT_EQ(kMultibracketsDefaultRepeat,
|
||
|
IRsend::minRepeats(decode_type_t::MULTIBRACKETS));
|
||
|
}
|
||
|
|
||
|
TEST(TestDecodeMultibrackets, ShortNoRepeatExample) {
|
||
|
IRsendTest irsend(kGpioUnused);
|
||
|
IRrecv irrecv(kGpioUnused);
|
||
|
// The 1 + ok keypress: (edited to be bare minimum)
|
||
|
uint16_t rawData[3] = {20100, 20472, 15092};
|
||
|
irsend.begin();
|
||
|
irsend.reset();
|
||
|
irsend.sendRaw(rawData, 3, 38);
|
||
|
irsend.makeDecodeResult();
|
||
|
|
||
|
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
||
|
ASSERT_EQ(decode_type_t::MULTIBRACKETS, irsend.capture.decode_type);
|
||
|
ASSERT_EQ(kMultibracketsBits, irsend.capture.bits);
|
||
|
EXPECT_EQ(0x87, irsend.capture.value);
|
||
|
EXPECT_EQ(0x0, irsend.capture.address);
|
||
|
EXPECT_EQ(0x0, irsend.capture.command);
|
||
|
}
|