 3114a2d4b8
			
		
	
	
		3114a2d4b8
		
			
		
	
	
	
	
		
			
			* Add cscope db generation * Add api-hal-irda, TIM2: HAL->LL * Add libirda: pwm decoding * Universal state machine * Add irda decoder library * Move IRDA capture to standalone tool * Add encoder/decoder samsung32, NEC, fix bugs * Port current App to new Irda lib * Fix clang format for test data * Port IRDA api-hal to f6 Co-authored-by: あく <alleteam@gmail.com>
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <furi.h>
 | |
| #include "../minunit.h"
 | |
| #include "irda.h"
 | |
| #include "test_data/irda_decoder_nec_test_data.h"
 | |
| #include "test_data/irda_decoder_samsung_test_data.h"
 | |
| 
 | |
| #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_nec_samsung32) {
 | |
|     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_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_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_mix_nec_samsung32);
 | |
| }
 | |
| 
 | |
| int run_minunit_test_irda_decoder() {
 | |
|     MU_RUN_SUITE(test_irda_decoder);
 | |
|     MU_REPORT();
 | |
| 
 | |
|     return MU_EXIT_CODE;
 | |
| }
 |