mirror of
https://github.com/crankyoldgit/IRremoteESP8266.git
synced 2026-01-12 00:05:10 +08:00
* Add `sendArris()` & `decodeArris()`. - Uses Manchester Encoding. - Checksum validation on decode. - provide release status (via `address`) and the likely `command`. * Add helper routines: - `toggleArrisRelease()` for changing mesg status between a press & a release of a button. - `encodeArris()` to construct a valid ARRIS mesg from a `command` and a `release` status. * Add & update unit tests.
190 lines
5.8 KiB
C++
190 lines
5.8 KiB
C++
// Copyright 2021 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 decodeArris().
|
|
|
|
// Ref: https://github.com/crankyoldgit/IRremoteESP8266/issues/1595
|
|
// Data from:
|
|
// https://github.com/crankyoldgit/IRremoteESP8266/files/7100289/raw_data.txt
|
|
TEST(TestDecodeArris, RealExample) {
|
|
IRsendTest irsend(kGpioUnused);
|
|
IRrecv irrecv(kGpioUnused);
|
|
|
|
const uint16_t rawData_1[59] = {
|
|
2584, 1896, 666, 306, 338, 300, 336, 304, 668, 610, 332, 306, 338, 300,
|
|
334, 304, 332, 312, 332, 306, 340, 300, 334, 304, 330, 308, 338, 302, 334,
|
|
304, 330, 308, 336, 308, 336, 302, 332, 306, 330, 310, 674, 606, 336, 302,
|
|
332, 306, 338, 306, 668, 612, 668, 306, 338, 304, 332, 308, 336, 608,
|
|
334}; // UNKNOWN EDF1C0D0
|
|
|
|
irsend.begin();
|
|
irsend.reset();
|
|
irsend.sendRaw(rawData_1, 59, 38);
|
|
irsend.makeDecodeResult();
|
|
|
|
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
|
ASSERT_EQ(decode_type_t::ARRIS, irsend.capture.decode_type);
|
|
EXPECT_EQ(kArrisBits, irsend.capture.bits);
|
|
EXPECT_EQ(0x1000085E, irsend.capture.value);
|
|
EXPECT_EQ(0x0, irsend.capture.address);
|
|
EXPECT_EQ(0x85, irsend.capture.command);
|
|
|
|
irsend.reset();
|
|
const uint16_t rawData_2[115] = {
|
|
2584, 1898, 664, 308, 338, 302, 332, 306, 668, 614, 330, 308, 336, 302,
|
|
332, 306, 340, 304, 330, 310, 336, 304, 332, 306, 338, 300, 334, 304, 330,
|
|
308, 336, 302, 332, 312, 334, 306, 330, 308, 336, 302, 670, 610, 332, 306,
|
|
330, 310, 336, 308, 674, 606, 664, 312, 334, 306, 338, 302, 334, 612, 330,
|
|
5930,
|
|
2584, 1898, 664, 308, 336, 302, 332, 306, 666, 614, 338, 300, 336, 304,
|
|
332, 310, 674, 610, 332, 334, 312, 328, 308, 332, 304, 336, 310, 330, 306,
|
|
332, 302, 314, 330, 336, 308, 330, 306, 334, 640, 612, 330, 308, 336, 302,
|
|
332, 312, 672, 608, 672, 608, 672, 304, 330, 614, 330
|
|
}; // UNKNOWN E6A77D83
|
|
irsend.sendRaw(rawData_2, 115, 38);
|
|
irsend.makeDecodeResult();
|
|
|
|
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
|
ASSERT_EQ(decode_type_t::ARRIS, irsend.capture.decode_type);
|
|
EXPECT_EQ(kArrisBits, irsend.capture.bits);
|
|
EXPECT_EQ(0x1000085E, irsend.capture.value);
|
|
EXPECT_EQ(0x0, irsend.capture.address);
|
|
EXPECT_EQ(0x85, irsend.capture.command);
|
|
|
|
const uint16_t rawData_3[51] = {
|
|
2584, 1896, 666, 308, 338, 328, 306, 332, 640, 612, 332, 336, 310, 300,
|
|
334, 304, 678, 606, 336, 330, 306, 334, 310, 300, 334, 304, 332, 308, 338,
|
|
302, 334, 310, 672, 304, 332, 614, 668, 612, 330, 336, 638, 620, 670, 610,
|
|
670, 304, 330, 310, 336, 610, 672}; // UNKNOWN 4CA048A1
|
|
irsend.reset();
|
|
irsend.sendRaw(rawData_3, 51, 38);
|
|
irsend.makeDecodeResult();
|
|
|
|
ASSERT_TRUE(irrecv.decode(&irsend.capture));
|
|
ASSERT_EQ(decode_type_t::ARRIS, irsend.capture.decode_type);
|
|
EXPECT_EQ(kArrisBits, irsend.capture.bits);
|
|
EXPECT_EQ(0x1080695D, irsend.capture.value);
|
|
EXPECT_EQ(0x1, irsend.capture.address);
|
|
EXPECT_EQ(0x695, irsend.capture.command);
|
|
}
|
|
|
|
TEST(TestDecodeArris, SyntheticExample) {
|
|
IRsendTest irsend(kGpioUnused);
|
|
IRrecv irrecv(kGpioUnused);
|
|
irsend.begin();
|
|
irsend.reset();
|
|
irsend.sendArris(0x1000085E);
|
|
irsend.makeDecodeResult();
|
|
|
|
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
|
EXPECT_EQ(decode_type_t::ARRIS, irsend.capture.decode_type);
|
|
EXPECT_EQ(kArrisBits, irsend.capture.bits);
|
|
EXPECT_EQ(0x1000085E, irsend.capture.value);
|
|
EXPECT_EQ(0x0, irsend.capture.address);
|
|
EXPECT_EQ(0x85, irsend.capture.command);
|
|
|
|
EXPECT_EQ(
|
|
"f38000d50"
|
|
// const uint16_t rawData_1[59] = {
|
|
// 2584, 1896,
|
|
"m2560s1920"
|
|
// 666, 306,
|
|
"m640s320"
|
|
// 338, 300,
|
|
"m320s320"
|
|
// 336, 304,
|
|
"m320s320"
|
|
// 668, 610,
|
|
"m640s640"
|
|
// 332, 306,
|
|
"m320s320"
|
|
// 338, 300,
|
|
"m320s320"
|
|
// 334, 304,
|
|
"m320s320"
|
|
// 332, 312,
|
|
"m320s320"
|
|
// 332, 306,
|
|
"m320s320"
|
|
// 340, 300,
|
|
"m320s320"
|
|
// 334, 304,
|
|
"m320s320"
|
|
// 330, 308,
|
|
"m320s320"
|
|
// 338, 302,
|
|
"m320s320"
|
|
// 334, 304,
|
|
"m320s320"
|
|
// 330, 308,
|
|
"m320s320"
|
|
// 336, 308,
|
|
"m320s320"
|
|
// 336, 302,
|
|
"m320s320"
|
|
// 332, 306,
|
|
"m320s320"
|
|
// 330, 310,
|
|
"m320s320"
|
|
// 674, 606,
|
|
"m640s640"
|
|
// 336, 302,
|
|
"m320s320"
|
|
// 332, 306,
|
|
"m320s320"
|
|
// 338, 306,
|
|
"m320s320"
|
|
// 668, 612,
|
|
"m640s640"
|
|
// 668, 306,
|
|
"m640s320"
|
|
// 338, 304,
|
|
"m320s320"
|
|
// 332, 308,
|
|
"m320s320"
|
|
// 336, 608,
|
|
"m320s640"
|
|
// 334}; // UNKNOWN EDF1C0D0
|
|
"m320s77184", irsend.outputStr());
|
|
|
|
irsend.reset();
|
|
irsend.sendArris(0x1080695D);
|
|
irsend.makeDecodeResult();
|
|
|
|
EXPECT_TRUE(irrecv.decode(&irsend.capture));
|
|
EXPECT_EQ(decode_type_t::ARRIS, irsend.capture.decode_type);
|
|
EXPECT_EQ(kArrisBits, irsend.capture.bits);
|
|
EXPECT_EQ(0x1080695D, irsend.capture.value);
|
|
EXPECT_EQ(0x1, irsend.capture.address);
|
|
EXPECT_EQ(0x695, irsend.capture.command);
|
|
}
|
|
|
|
TEST(TestUtils, Housekeeping) {
|
|
ASSERT_EQ("ARRIS", typeToString(decode_type_t::ARRIS));
|
|
ASSERT_EQ(decode_type_t::ARRIS, strToDecodeType("ARRIS"));
|
|
ASSERT_FALSE(hasACState(decode_type_t::ARRIS));
|
|
ASSERT_FALSE(IRac::isProtocolSupported(decode_type_t::ARRIS));
|
|
ASSERT_EQ(kArrisBits, IRsend::defaultBits(decode_type_t::ARRIS));
|
|
ASSERT_EQ(kNoRepeat, IRsend::minRepeats(decode_type_t::ARRIS));
|
|
}
|
|
|
|
TEST(TestSendArris, ReleaseToggle) {
|
|
EXPECT_EQ(0x10800F5D, IRsend::toggleArrisRelease(0x10000F55));
|
|
EXPECT_EQ(0x10000F55, IRsend::toggleArrisRelease(0x10800F5D));
|
|
EXPECT_EQ(
|
|
0x10800F5D,
|
|
IRsend::toggleArrisRelease(IRsend::toggleArrisRelease(0x10800F5D)));
|
|
}
|
|
|
|
TEST(TestSendArris, encodeArris) {
|
|
EXPECT_EQ(0x10800F5D, IRsend::encodeArris(0xF5, true));
|
|
EXPECT_EQ(0x10000F55, IRsend::encodeArris(0xF5, false));
|
|
EXPECT_EQ(0x1080695D, IRsend::encodeArris(0x695, true));
|
|
}
|