[FL-1398] IRDA: Implement timings encoder, add RC-6 (#570)

* Add RC-6 protocol
* Implement timings Encoder
* Remove Unit-tests from build
This commit is contained in:
Albert Kharisov
2021-07-08 21:20:13 +03:00
committed by GitHub
parent 4ce41a3e6f
commit 9f6e14d005
32 changed files with 1563 additions and 489 deletions

View File

@@ -1,103 +0,0 @@
#include <furi.h>
#include "../minunit.h"
#include "irda.h"
#include "test_data/irda_decoder_nec_test_data.srcdata"
#include "test_data/irda_decoder_necext_test_data.srcdata"
#include "test_data/irda_decoder_samsung_test_data.srcdata"
#define RUN_DECODER(data, expected) \
run_decoder((data), COUNT_OF(data), (expected), COUNT_OF(expected))
static IrdaHandler* decoder;
static void test_setup(void) {
decoder = irda_alloc_decoder();
}
static void test_teardown(void) {
irda_free_decoder(decoder);
}
static void compare_message_results(
const IrdaMessage* message_decoded,
const IrdaMessage* message_expected) {
mu_check(message_decoded->protocol == message_expected->protocol);
mu_check(message_decoded->command == message_expected->command);
mu_check(message_decoded->address == message_expected->address);
mu_check(message_decoded->repeat == message_expected->repeat);
}
static void run_decoder(
const uint32_t* input_delays,
uint32_t input_delays_len,
const IrdaMessage* message_expected,
uint32_t message_expected_len) {
const IrdaMessage* message_decoded = 0;
bool level = 1;
uint32_t message_counter = 0;
for(uint32_t i = 0; i < input_delays_len; ++i) {
message_decoded = irda_decode(decoder, level, input_delays[i]);
if(message_decoded) {
mu_assert(message_counter < message_expected_len, "decoded more than expected");
if(message_counter >= message_expected_len) break;
compare_message_results(message_decoded, &message_expected[message_counter]);
++message_counter;
}
level = !level;
}
mu_assert(message_counter == message_expected_len, "decoded less than expected");
}
MU_TEST(test_samsung32) {
RUN_DECODER(test_samsung32_input1, test_samsung32_expected1);
}
MU_TEST(test_mix) {
RUN_DECODER(test_necext_input1, test_necext_expected1);
RUN_DECODER(test_samsung32_input1, test_samsung32_expected1);
RUN_DECODER(test_nec_input1, test_nec_expected1);
RUN_DECODER(test_samsung32_input1, test_samsung32_expected1);
RUN_DECODER(test_necext_input1, test_necext_expected1);
RUN_DECODER(test_nec_input2, test_nec_expected2);
}
MU_TEST(test_nec1) {
RUN_DECODER(test_nec_input1, test_nec_expected1);
}
MU_TEST(test_nec2) {
RUN_DECODER(test_nec_input2, test_nec_expected2);
}
MU_TEST(test_unexpected_end_in_sequence) {
// test_nec_input1 and test_nec_input2 shuts unexpected
RUN_DECODER(test_nec_input1, test_nec_expected1);
RUN_DECODER(test_nec_input1, test_nec_expected1);
RUN_DECODER(test_nec_input2, test_nec_expected2);
RUN_DECODER(test_nec_input2, test_nec_expected2);
}
MU_TEST(test_necext1) {
RUN_DECODER(test_necext_input1, test_necext_expected1);
RUN_DECODER(test_necext_input1, test_necext_expected1);
}
MU_TEST_SUITE(test_irda_decoder) {
MU_SUITE_CONFIGURE(&test_setup, &test_teardown);
MU_RUN_TEST(test_unexpected_end_in_sequence);
MU_RUN_TEST(test_nec1);
MU_RUN_TEST(test_nec2);
MU_RUN_TEST(test_samsung32);
MU_RUN_TEST(test_necext1);
MU_RUN_TEST(test_mix);
}
int run_minunit_test_irda_decoder() {
MU_RUN_SUITE(test_irda_decoder);
MU_REPORT();
return MU_EXIT_CODE;
}

View File

@@ -0,0 +1,224 @@
#include <furi.h>
#include "../minunit.h"
#include "irda.h"
#include "irda_common_i.h"
#include "test_data/irda_nec_test_data.srcdata"
#include "test_data/irda_necext_test_data.srcdata"
#include "test_data/irda_samsung_test_data.srcdata"
#include "test_data/irda_rc6_test_data.srcdata"
#define RUN_ENCODER(data, expected) \
run_encoder((data), COUNT_OF(data), (expected), COUNT_OF(expected))
#define RUN_DECODER(data, expected) \
run_decoder((data), COUNT_OF(data), (expected), COUNT_OF(expected))
static IrdaDecoderHandler* decoder_handler;
static IrdaEncoderHandler* encoder_handler;
static void test_setup(void) {
decoder_handler = irda_alloc_decoder();
encoder_handler = irda_alloc_encoder();
}
static void test_teardown(void) {
irda_free_decoder(decoder_handler);
irda_free_encoder(encoder_handler);
}
static void compare_message_results(
const IrdaMessage* message_decoded,
const IrdaMessage* message_expected) {
mu_check(message_decoded->protocol == message_expected->protocol);
mu_check(message_decoded->command == message_expected->command);
mu_check(message_decoded->address == message_expected->address);
mu_check(message_decoded->repeat == message_expected->repeat);
}
static void
run_encoder_fill_array(IrdaEncoderHandler* handler, uint32_t* timings, uint32_t* timings_len) {
uint32_t duration = 0;
bool level = false; // start from space
bool level_read;
IrdaStatus status = IrdaStatusError;
int i = 0;
while(1) {
status = irda_encode(handler, &duration, &level_read);
if(level_read != level) {
level = level_read;
++i;
}
timings[i] += duration;
furi_assert((status == IrdaStatusOk) || (status == IrdaStatusDone));
if(status == IrdaStatusDone) break;
furi_assert(i < *timings_len);
}
*timings_len = i + 1;
}
// messages in input array for encoder should have one protocol
static void run_encoder(
const IrdaMessage input_messages[],
uint32_t input_messages_len,
const uint32_t expected_timings[],
uint32_t expected_timings_len) {
uint32_t* timings = 0;
uint32_t timings_len = 0;
uint32_t j = 0;
for(uint32_t message_counter = 0; message_counter < input_messages_len; ++message_counter) {
const IrdaMessage* message = &input_messages[message_counter];
if(!message->repeat) {
irda_reset_encoder(encoder_handler, message);
}
timings_len = 200;
timings = furi_alloc(sizeof(uint32_t) * timings_len);
run_encoder_fill_array(encoder_handler, timings, &timings_len);
furi_assert(timings_len <= 200);
for(int i = 0; i < timings_len; ++i, ++j) {
mu_check(MATCH_BIT_TIMING(timings[i], expected_timings[j], 120));
mu_assert(j < expected_timings_len, "encoded more timings than expected");
}
free(timings);
}
mu_assert(j == expected_timings_len, "encoded less timings than expected");
}
static void run_encoder_decoder(const IrdaMessage input_messages[], uint32_t input_messages_len) {
uint32_t* timings = 0;
uint32_t timings_len = 0;
bool level = false;
for(uint32_t message_counter = 0; message_counter < input_messages_len; ++message_counter) {
const IrdaMessage* message_encoded = &input_messages[message_counter];
if(!message_encoded->repeat) {
irda_reset_encoder(encoder_handler, message_encoded);
level = false;
}
timings_len = 200;
timings = furi_alloc(sizeof(uint32_t) * timings_len);
run_encoder_fill_array(encoder_handler, timings, &timings_len);
furi_assert(timings_len <= 200);
const IrdaMessage* message_decoded = 0;
for(int i = 0; i < timings_len; ++i) {
message_decoded = irda_decode(decoder_handler, level, timings[i]);
if(i < timings_len - 1)
mu_check(!message_decoded);
else
mu_check(message_decoded);
level = !level;
}
if(message_decoded) {
compare_message_results(message_decoded, message_encoded);
} else {
mu_check(0);
}
free(timings);
}
}
static void run_decoder(
const uint32_t* input_delays,
uint32_t input_delays_len,
const IrdaMessage* message_expected,
uint32_t message_expected_len) {
const IrdaMessage* message_decoded = 0;
bool level = 0;
uint32_t message_counter = 0;
for(uint32_t i = 0; i < input_delays_len; ++i) {
message_decoded = irda_decode(decoder_handler, level, input_delays[i]);
if(message_decoded) {
mu_assert(message_counter < message_expected_len, "decoded more than expected");
if(message_counter >= message_expected_len) break;
compare_message_results(message_decoded, &message_expected[message_counter]);
++message_counter;
}
level = !level;
}
mu_assert(message_counter == message_expected_len, "decoded less than expected");
}
MU_TEST(test_decoder_samsung32) {
RUN_DECODER(test_decoder_samsung32_input1, test_decoder_samsung32_expected1);
}
MU_TEST(test_mix) {
RUN_DECODER(test_decoder_necext_input1, test_decoder_necext_expected1);
// can use encoder data for decoding, but can't do opposite
RUN_DECODER(test_encoder_rc6_expected1, test_encoder_rc6_input1);
RUN_DECODER(test_decoder_samsung32_input1, test_decoder_samsung32_expected1);
RUN_DECODER(test_decoder_rc6_input1, test_decoder_rc6_expected1);
RUN_DECODER(test_decoder_samsung32_input1, test_decoder_samsung32_expected1);
RUN_DECODER(test_decoder_necext_input1, test_decoder_necext_expected1);
RUN_DECODER(test_decoder_nec_input2, test_decoder_nec_expected2);
RUN_DECODER(test_decoder_rc6_input1, test_decoder_rc6_expected1);
RUN_DECODER(test_decoder_necext_input1, test_decoder_necext_expected1);
RUN_DECODER(test_decoder_samsung32_input1, test_decoder_samsung32_expected1);
}
MU_TEST(test_decoder_nec1) {
RUN_DECODER(test_decoder_nec_input1, test_decoder_nec_expected1);
}
MU_TEST(test_decoder_nec2) {
RUN_DECODER(test_decoder_nec_input2, test_decoder_nec_expected2);
}
MU_TEST(test_decoder_unexpected_end_in_sequence) {
// test_decoder_nec_input1 and test_decoder_nec_input2 shuts unexpected
RUN_DECODER(test_decoder_nec_input1, test_decoder_nec_expected1);
RUN_DECODER(test_decoder_nec_input1, test_decoder_nec_expected1);
RUN_DECODER(test_decoder_nec_input2, test_decoder_nec_expected2);
RUN_DECODER(test_decoder_nec_input2, test_decoder_nec_expected2);
}
MU_TEST(test_decoder_necext1) {
RUN_DECODER(test_decoder_necext_input1, test_decoder_necext_expected1);
RUN_DECODER(test_decoder_necext_input1, test_decoder_necext_expected1);
}
MU_TEST(test_decoder_rc6) {
RUN_DECODER(test_decoder_rc6_input1, test_decoder_rc6_expected1);
}
MU_TEST(test_encoder_rc6) {
RUN_ENCODER(test_encoder_rc6_input1, test_encoder_rc6_expected1);
}
MU_TEST(test_encoder_decoder_all) {
run_encoder_decoder(test_nec_all, COUNT_OF(test_nec_all));
run_encoder_decoder(test_necext_all, COUNT_OF(test_necext_all));
run_encoder_decoder(test_samsung32_all, COUNT_OF(test_samsung32_all));
run_encoder_decoder(test_rc6_all, COUNT_OF(test_rc6_all));
}
MU_TEST_SUITE(test_irda_decoder_encoder) {
MU_SUITE_CONFIGURE(&test_setup, &test_teardown);
MU_RUN_TEST(test_encoder_decoder_all);
MU_RUN_TEST(test_decoder_unexpected_end_in_sequence);
MU_RUN_TEST(test_decoder_nec1);
MU_RUN_TEST(test_decoder_nec2);
MU_RUN_TEST(test_decoder_samsung32);
MU_RUN_TEST(test_decoder_necext1);
MU_RUN_TEST(test_mix);
MU_RUN_TEST(test_decoder_rc6);
MU_RUN_TEST(test_encoder_rc6);
}
int run_minunit_test_irda_decoder_encoder() {
MU_RUN_SUITE(test_irda_decoder_encoder);
MU_REPORT();
return MU_EXIT_CODE;
}

View File

@@ -1,4 +1,4 @@
const uint32_t test_nec_input1[] = {
const uint32_t test_decoder_nec_input1[] = {
/* message */
2640671, 9071, 4445, 601, 497, 578, 500, 604, 501, 603, 502, 581, 496, 615, 498, 606, 499, 584, 493, 610, 1630, 576, 1640, 601, 1615, 605, 1638, 581, 1634, 606, 1610, 610, 1633, 577, 1639, 601, 504, 580, 498, 604, 501, 603, 500, 582, 496, 607, 498, 606, 499, 585, 485, 610, 1633, 576, 1640, 596, 1615, 605, 1638, 582, 1634, 605, 1610, 609, 1634, 586, 1630, 600,
/* repeat */
@@ -10,13 +10,13 @@ const uint32_t test_nec_input1[] = {
/* message */
1415838, 9080, 4436, 611, 494, 600, 505, 578, 500, 608, 501, 602, 502, 580, 498, 606, 508, 605, 500, 583, 1633, 608, 1608, 611, 1631, 578, 1638, 602, 1614, 606, 1637, 583, 1633, 607, 1609, 611, 494, 600, 505, 570, 500, 604, 501, 602, 502, 581, 497, 606, 499, 605, 499, 583, 1633, 617, 1608, 611, 1631, 579, 1638, 602};
const IrdaMessage test_nec_expected1[] = {
const IrdaMessage test_decoder_nec_expected1[] = {
{IrdaProtocolNEC, 0x00, 0, false},
{IrdaProtocolNEC, 0x00, 0, true},
{IrdaProtocolNEC, 0x00, 0, false},
};
const uint32_t test_nec_input2[] = {
const uint32_t test_decoder_nec_input2[] = {
18372093,9030,4495,559,524,585,526,613,496,560,522,595,524,605,504,553,530,578,524,608,1614,581,1668,557,1665,581,1641,585,1664,551,1671,605,1616,578,1670,555,528,581,1668,553,526,582,528,612,498,559,524,585,526,604,507,552,1670,597,504,553,1667,608,1613,582,1667,559,1663,613,1608,586,1662,552,
40067,9026,2219,579,
@@ -123,7 +123,7 @@ const uint32_t test_nec_input2[] = {
40069,9025,2221,588
};
const IrdaMessage test_nec_expected2[] = {
const IrdaMessage test_decoder_nec_expected2[] = {
{IrdaProtocolNEC, 0x00, 0x02, false},
{IrdaProtocolNEC, 0x00, 0x02, true},
{IrdaProtocolNEC, 0x00, 0x02, false},
@@ -178,3 +178,35 @@ const IrdaMessage test_nec_expected2[] = {
{IrdaProtocolNEC, 0x00, 0x0A, true},
};
const IrdaMessage test_nec_all[] = {
{IrdaProtocolNEC, 0x00, 0x00, false},
{IrdaProtocolNEC, 0x01, 0x00, false},
{IrdaProtocolNEC, 0x01, 0x80, false},
{IrdaProtocolNEC, 0x00, 0x80, false},
{IrdaProtocolNEC, 0x00, 0x00, false},
{IrdaProtocolNEC, 0x00, 0x00, true},
{IrdaProtocolNEC, 0x00, 0x00, false},
{IrdaProtocolNEC, 0x00, 0x00, true},
{IrdaProtocolNEC, 0xFF, 0xFF, false},
{IrdaProtocolNEC, 0xFE, 0xFF, false},
{IrdaProtocolNEC, 0xFE, 0x7F, false},
{IrdaProtocolNEC, 0xFF, 0x7F, false},
{IrdaProtocolNEC, 0xFF, 0xFF, false},
{IrdaProtocolNEC, 0xFF, 0xFF, true},
{IrdaProtocolNEC, 0xAA, 0x55, false},
{IrdaProtocolNEC, 0x55, 0xAA, false},
{IrdaProtocolNEC, 0x55, 0x55, false},
{IrdaProtocolNEC, 0xAA, 0xAA, false},
{IrdaProtocolNEC, 0xAA, 0xAA, true},
{IrdaProtocolNEC, 0xAA, 0xAA, false},
{IrdaProtocolNEC, 0xAA, 0xAA, true},
{IrdaProtocolNEC, 0xAA, 0xAA, true},
{IrdaProtocolNEC, 0x55, 0x55, false},
{IrdaProtocolNEC, 0x55, 0x55, true},
{IrdaProtocolNEC, 0x55, 0x55, true},
{IrdaProtocolNEC, 0x55, 0x55, true},
};

View File

@@ -1,4 +1,4 @@
const uint32_t test_necext_input1[] = {
const uint32_t test_decoder_necext_input1[] = {
1915384, 8967, 4463, 587, 527, 590, 524, 584, 1647, 590, 524, 583, 531, 586, 527, 590, 524, 583, 1646, 589, 1640, 586, 527, 590, 524, 583, 1647, 590, 1640, 587, 1644, 582, 1647, 589, 524, 583, 531, 586, 1644, 593, 521, 586, 527, 589, 1641, 586, 528, 589, 525, 592, 521, 585, 1644, 592, 522, 585, 1645, 592, 1638, 589, 524, 592, 1637, 588, 1641, 585, 1645, 592,
41082, 8965, 2220, 591,
409594, 8972, 4458, 591, 523, 584, 530, 587, 1642, 584, 529, 588, 526, 591, 522, 583, 530, 587, 1643, 584, 1646, 590, 523, 584, 530, 587, 1643, 584, 1647, 590, 1640, 586, 1643, 583, 531, 586, 527, 589, 1641, 586, 528, 589, 524, 593, 1637, 589, 524, 593, 521, 586, 529, 589, 1641, 585, 528, 589, 1640, 586, 1644, 592, 521, 585, 1645, 592, 1638, 588, 1641, 585,
@@ -110,7 +110,7 @@ const uint32_t test_necext_input1[] = {
261924, 8965, 4465, 585, 529, 588, 525, 592, 1638, 588, 525, 592, 523, 584, 530, 587, 526, 591, 1639, 587, 1642, 583, 529, 587, 527, 590, 1639, 587, 1643, 584, 1646, 590,
};
const IrdaMessage test_necext_expected1[] = {
const IrdaMessage test_decoder_necext_expected1[] = {
{IrdaProtocolNECext, 0x7984, 0x12, false},
{IrdaProtocolNECext, 0x7984, 0x12, true},
{IrdaProtocolNECext, 0x7984, 0x12, false},
@@ -221,3 +221,37 @@ const IrdaMessage test_necext_expected1[] = {
{IrdaProtocolNECext, 0x7984, 0x12, true},
};
const IrdaMessage test_necext_all[] = {
{IrdaProtocolNECext, 0x0000, 0x00, false},
{IrdaProtocolNECext, 0x0001, 0x00, false},
{IrdaProtocolNECext, 0x0001, 0x80, false},
{IrdaProtocolNECext, 0x0000, 0x80, false},
{IrdaProtocolNECext, 0x0000, 0x00, false},
{IrdaProtocolNECext, 0x0000, 0x00, true},
{IrdaProtocolNECext, 0x0000, 0x00, false},
{IrdaProtocolNECext, 0x0000, 0x00, true},
{IrdaProtocolNECext, 0xFFFF, 0xFF, false},
{IrdaProtocolNECext, 0xFFFE, 0xFF, false},
{IrdaProtocolNECext, 0xFFFE, 0x7F, false},
{IrdaProtocolNECext, 0xFFFF, 0x7F, false},
{IrdaProtocolNECext, 0xFFFF, 0xFF, false},
{IrdaProtocolNECext, 0xFFFF, 0xFF, true},
{IrdaProtocolNECext, 0xAAAA, 0x55, false},
{IrdaProtocolNECext, 0x5555, 0xAA, false},
{IrdaProtocolNECext, 0x5555, 0x55, false},
{IrdaProtocolNECext, 0xAAAA, 0xAA, false},
{IrdaProtocolNECext, 0xAAAA, 0xAA, true},
{IrdaProtocolNECext, 0xAAAA, 0xAA, false},
{IrdaProtocolNECext, 0xAAAA, 0xAA, true},
{IrdaProtocolNECext, 0xAAAA, 0xAA, true},
{IrdaProtocolNECext, 0x5555, 0x55, false},
{IrdaProtocolNECext, 0x5555, 0x55, true},
{IrdaProtocolNECext, 0x5555, 0x55, true},
{IrdaProtocolNECext, 0x5555, 0x55, true},
};

View File

@@ -0,0 +1,112 @@
/*
_____---------______--____--__--__--____------____--__----____--__----__--__--____----____--__--__--__--__--___________
| 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
_____---------______--____--__--__------____--____--__----____--__----__--__--____----____--__--__--__--__--___________
| 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
_____---------______--____--__--__--____------____--__----____--__----__--__--____----____--__--__--__--__--___________
| 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
_____---------______--____--__--__--____------____--__----____--__----__--__--____----____--__--__--__--__--___________
| 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
_____---------______--____--__--__--____------____--__----____--__----__--__--____----____--__--__--__--__--___________
| 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
_____---------______--____--__--__------____--____--__----____--__----__--__--____----____--__--__--__--__--___________
| 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
s m2 m1 m0 T | address | command |
*/
const uint32_t test_decoder_rc6_input1[] = {
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 444 + 444, 888 + 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444 + 888, 888, 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 444 + 444, 888 + 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 888, // failed
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 444 + 444, 888 + 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 444 + 444, 888 + 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 444 + 444, 888 + 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444 + 888, 888, 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 444 + 444, 888 + 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 888, // failed
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 444 + 444, 888 + 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444 + 888, 888, 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 888,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 444 + 444, 888 + 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 888, // failed
};
const IrdaMessage test_decoder_rc6_expected1[] = {
{IrdaProtocolRC6, 0x93, 0xA0, false}, // toggle 0
{IrdaProtocolRC6, 0x93, 0xA0, false}, // toggle 1
// {IrdaProtocolRC6, 0x93, 0xA0, false},
{IrdaProtocolRC6, 0x93, 0xA0, false}, // toggle 0
{IrdaProtocolRC6, 0x93, 0xA0, true}, // toggle 0
{IrdaProtocolRC6, 0x93, 0xA0, true}, // toggle 0
{IrdaProtocolRC6, 0x93, 0xA0, false}, // toggle 1
// {IrdaProtocolRC6, 0x93, 0xA0, false},
{IrdaProtocolRC6, 0x93, 0xA0, false}, // toggle 0
{IrdaProtocolRC6, 0x93, 0xA1, false}, // toggle 1
// {IrdaProtocolRC6, 0x93, 0xA0, false},
};
const IrdaMessage test_encoder_rc6_input1[] = {
{IrdaProtocolRC6, 0x93, 0xA0, false}, // Toggle 0
{IrdaProtocolRC6, 0x93, 0xA0, true}, // Toggle 0
{IrdaProtocolRC6, 0x93, 0xA1, false}, // Toggle 1
{IrdaProtocolRC6, 0x93, 0xA1, true}, // Toggle 1
{IrdaProtocolRC6, 0x93, 0xA1, true}, // Toggle 1
{IrdaProtocolRC6, 0x93, 0xA0, false}, // Toggle 0
{IrdaProtocolRC6, 0x93, 0xA0, false}, // Toggle 1
{IrdaProtocolRC6, 0x93, 0xA0, true}, // Toggle 1
};
const uint32_t test_encoder_rc6_expected1[] = {
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 888, 888+444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 888, 888+444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444+888, 888, 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 888,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444+888, 888, 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 888,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444+888, 888, 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 888,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444, 888, 888+444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444+888, 888, 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
2700, 2666, 889, 444, 888, 444, 444, 444, 444, 444+888, 888, 444, 888, 444, 444, 888, 888, 444, 444, 888, 444, 444, 444, 444, 888, 888, 888, 444, 444, 444, 444, 444, 444, 444, 444, 444,
};
const IrdaMessage test_rc6_all[] = {
{IrdaProtocolRC6, 0x00, 0x00, false}, // t 0
{IrdaProtocolRC6, 0x80, 0x00, false}, // t 1
{IrdaProtocolRC6, 0x80, 0x01, false}, // t 0
{IrdaProtocolRC6, 0x00, 0x01, false}, // t 1
{IrdaProtocolRC6, 0x00, 0x00, false}, // t 0
{IrdaProtocolRC6, 0x00, 0x00, true}, // t 0
{IrdaProtocolRC6, 0x00, 0x00, false}, // t 1
{IrdaProtocolRC6, 0x00, 0x00, true}, // t 1
{IrdaProtocolRC6, 0xFF, 0xFF, false}, // t 0
{IrdaProtocolRC6, 0x7F, 0xFF, false}, // t 1
{IrdaProtocolRC6, 0x7F, 0xFE, false}, // t 0
{IrdaProtocolRC6, 0xFF, 0xFE, false}, // t 1
{IrdaProtocolRC6, 0xFF, 0xFF, false}, // t 0
{IrdaProtocolRC6, 0xFF, 0xFF, true}, // t 0
{IrdaProtocolRC6, 0xAA, 0x55, false}, // t 1
{IrdaProtocolRC6, 0x55, 0xAA, false}, // t 0
{IrdaProtocolRC6, 0x55, 0x55, false}, // t 1
{IrdaProtocolRC6, 0xAA, 0xAA, false}, // t 0
{IrdaProtocolRC6, 0xAA, 0xAA, true}, // t 0
// same with inverted toggle bit
{IrdaProtocolRC6, 0x00, 0x00, false}, // t 1
{IrdaProtocolRC6, 0x80, 0x00, false}, // t 0
{IrdaProtocolRC6, 0x80, 0x01, false}, // t 1
{IrdaProtocolRC6, 0x00, 0x01, false}, // t 0
{IrdaProtocolRC6, 0x00, 0x00, false}, // t 1
{IrdaProtocolRC6, 0x00, 0x00, true}, // t 1
{IrdaProtocolRC6, 0x00, 0x00, false}, // t 0
{IrdaProtocolRC6, 0x00, 0x00, true}, // t 0
{IrdaProtocolRC6, 0xFF, 0xFF, false}, // t 1
{IrdaProtocolRC6, 0x7F, 0xFF, false}, // t 0
{IrdaProtocolRC6, 0x7F, 0xFE, false}, // t 1
{IrdaProtocolRC6, 0xFF, 0xFE, false}, // t 0
{IrdaProtocolRC6, 0xFF, 0xFF, false}, // t 1
{IrdaProtocolRC6, 0xFF, 0xFF, true}, // t 1
{IrdaProtocolRC6, 0xAA, 0x55, false}, // t 0
{IrdaProtocolRC6, 0x55, 0xAA, false}, // t 1
{IrdaProtocolRC6, 0x55, 0x55, false}, // t 0
{IrdaProtocolRC6, 0xAA, 0xAA, false}, // t 1
{IrdaProtocolRC6, 0xAA, 0xAA, true}, // t 1
{IrdaProtocolRC6, 0x93, 0xA0, false}, // t 0
{IrdaProtocolRC6, 0x93, 0xA1, false}, // t 1
};

View File

@@ -1,4 +1,4 @@
const uint32_t test_samsung32_input1[] = {
const uint32_t test_decoder_samsung32_input1[] = {
3129767, 4513, 4483, 565, 530, 586, 1670, 563, 1664, 588, 1666, 566, 530, 586,
535, 560, 535, 591, 531, 565, 531, 585, 1669, 563, 1666, 587, 1640, 593,
531, 566, 530, 587, 536, 559, 562, 564, 531, 585, 537, 558, 1670, 562,
@@ -179,7 +179,7 @@ const uint32_t test_samsung32_input1[] = {
532, 584,
};
const IrdaMessage test_samsung32_expected1[] = {
const IrdaMessage test_decoder_samsung32_expected1[] = {
{IrdaProtocolSamsung32, 0x0E, 0x0C, false}, {IrdaProtocolSamsung32, 0x0E, 0x0C, true},
{IrdaProtocolSamsung32, 0x0E, 0x81, false}, {IrdaProtocolSamsung32, 0x0E, 0x81, true},
{IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true},
@@ -220,3 +220,35 @@ const IrdaMessage test_samsung32_expected1[] = {
{IrdaProtocolSamsung32, 0x0E, 0x01, true}, {IrdaProtocolSamsung32, 0x0E, 0x01, false},
{IrdaProtocolSamsung32, 0x0E, 0x01, false}, {IrdaProtocolSamsung32, 0x0E, 0x01, true},
};
const IrdaMessage test_samsung32_all[] = {
{IrdaProtocolSamsung32, 0x00, 0x00, false},
{IrdaProtocolSamsung32, 0x01, 0x00, false},
{IrdaProtocolSamsung32, 0x01, 0x80, false},
{IrdaProtocolSamsung32, 0x00, 0x80, false},
{IrdaProtocolSamsung32, 0x00, 0x00, false},
{IrdaProtocolSamsung32, 0x00, 0x00, true},
{IrdaProtocolSamsung32, 0x00, 0x00, false},
{IrdaProtocolSamsung32, 0x00, 0x00, true},
{IrdaProtocolSamsung32, 0xFF, 0xFF, false},
{IrdaProtocolSamsung32, 0xFE, 0xFF, false},
{IrdaProtocolSamsung32, 0xFE, 0x7F, false},
{IrdaProtocolSamsung32, 0xFF, 0x7F, false},
{IrdaProtocolSamsung32, 0xFF, 0xFF, false},
{IrdaProtocolSamsung32, 0xFF, 0xFF, true},
{IrdaProtocolSamsung32, 0xAA, 0x55, false},
{IrdaProtocolSamsung32, 0x55, 0xAA, false},
{IrdaProtocolSamsung32, 0x55, 0x55, false},
{IrdaProtocolSamsung32, 0xAA, 0xAA, false},
{IrdaProtocolSamsung32, 0xAA, 0xAA, true},
{IrdaProtocolSamsung32, 0xAA, 0xAA, false},
{IrdaProtocolSamsung32, 0xAA, 0xAA, true},
{IrdaProtocolSamsung32, 0xAA, 0xAA, true},
{IrdaProtocolSamsung32, 0x55, 0x55, false},
{IrdaProtocolSamsung32, 0x55, 0x55, true},
{IrdaProtocolSamsung32, 0x55, 0x55, true},
{IrdaProtocolSamsung32, 0x55, 0x55, true},
};

View File

@@ -5,7 +5,7 @@
#include <notification/notification-messages.h>
int run_minunit();
int run_minunit_test_irda_decoder();
int run_minunit_test_irda_decoder_encoder();
int32_t flipper_test_app(void* p) {
uint32_t test_result = 0;
@@ -14,8 +14,8 @@ int32_t flipper_test_app(void* p) {
notification_message_block(notification, &sequence_set_only_blue_255);
test_result |= run_minunit();
test_result |= run_minunit_test_irda_decoder();
// test_result |= run_minunit(); // disabled as it fails randomly
test_result |= run_minunit_test_irda_decoder_encoder();
if(test_result == 0) {
// test passed