diff --git a/src/ir_decoder/irda_decode.c b/src/ir_decoder/irda_decode.c index 180a953..f11b4bf 100644 --- a/src/ir_decoder/irda_decode.c +++ b/src/ir_decoder/irda_decode.c @@ -79,6 +79,10 @@ lp_apply_ac_parameter apply_table[AC_APPLY_MAX] = apply_swing }; +#if defined BOARD_PC +void free_pirda(void); +#endif + ///////////////////////////////////////////////// Air Conditioner Begin ///////////////////////////////////////////////// INT8 binary_parse_offset() @@ -330,7 +334,7 @@ INT8 irda_context_init() INT8 irda_ac_lib_parse() { UINT16 i = 0; - // suggest not to call init function here for de-couple purpose + // suggest not to call init function here for de-couple purpose irda_context_init(); if (IR_DECODE_FAILED == binary_parse_offset()) @@ -690,9 +694,26 @@ INT8 irda_ac_lib_parse() } } + // it is strongly recommended that we free pirda_buffer + // or make global buffer shared in extreme memory case + /* in case of running with test - begin */ +#if defined BOARD_PC + free_pirda(); +#endif + /* in case of running with test - end */ + return IR_DECODE_SUCCEEDED; } +#if defined BOARD_PC +void free_pirda(void) +{ + irda_free(pirda_buffer->data); + pirda_buffer->len = 0; + pirda_buffer->offset = 0; +} +#endif + BOOL is_solo_function(UINT8 function_code) { return (((context->solo_function_mark >> (function_code - 1)) & 0x01) == 0x01) ? TRUE : FALSE; diff --git a/src/ir_decoder/irda_decoder.exe.stackdump b/src/ir_decoder/irda_decoder.exe.stackdump new file mode 100644 index 0000000..aece080 --- /dev/null +++ b/src/ir_decoder/irda_decoder.exe.stackdump @@ -0,0 +1,19 @@ +Stack trace: +Frame Function Args +000005FC2E0 0018007252A (000005FE3F4, 00000000006, 00000000000, 000005FDE50) +000005FC380 00180073CC0 (00000000064, 00000000000, 00000000000, 00000000000) +000005FC5D0 0018012E28F (00000000000, 000005FC7A0, 00000000000, 00000000000) +000005FC8C0 0018012B040 (0000000000A, 00000000000, 00000000000, 001803013A8) +00100411E58 0018012B509 (000005FC820, 001803013A8, 001801C8DB3, 00000000006) +00100411E58 0018012B6DC (0018014CBC6, 000005FC9FC, 00600050CA0, 00600050CA0) +00100411E58 0018012B99F (000005FC9FC, 000005FD680, 00600060790, 00600060790) +00100411E58 0018016106A (001801F3930, 0010040C558, 0010040C5D8, 00000000001) +00100411E58 001800CDB63 (00000000000, 00000000002, 0000000000E, 00000000001) +00100411E58 0018012700B (00000000000, 00000000002, 0000000000E, 00000000001) +00100411E58 00100409FFE (00000000030, 00000000000, 00000000000, 000005FCB50) +000005FCBC0 0010040AB7C (00000000000, 00000000000, 00000000030, FF0700010302FF00) +000005FCBC0 001800483CD (00000000000, 00000000000, 00000000000, 00000000000) +00000000000 001800460DC (00000000000, 00000000000, 00000000000, 00000000000) +00000000000 00180046174 (00000000000, 00000000000, 00000000000, 00000000000) +00000000000 0010040A511 (00000000000, 00000000000, 00000000000, 00000000000) +End of stack trace (more stack frames may be present) diff --git a/src/ir_decoder/irda_main.c b/src/ir_decoder/irda_main.c index 43e78f5..c7748fe 100644 --- a/src/ir_decoder/irda_main.c +++ b/src/ir_decoder/irda_main.c @@ -91,9 +91,6 @@ UINT8 decode_as_ac(const char* file_name) return IR_DECODE_FAILED; } - // no need to verify return value - irda_context_init(); - if (IR_DECODE_FAILED == irda_ac_lib_parse()) { IR_PRINTF("\nac lib parse failed\n"); diff --git a/src/ir_decoder/irda_tv_parse.c b/src/ir_decoder/irda_tv_parse.c index 0794527..5fd548d 100644 --- a/src/ir_decoder/irda_tv_parse.c +++ b/src/ir_decoder/irda_tv_parse.c @@ -39,18 +39,14 @@ Revision log: /************************************************************************************************** * LOCAL DATA TYPES **************************************************************************************************/ -#if defined BOARD_FREE_RTOS #pragma pack(1) -#endif struct buffer { UINT8 *data; UINT16 len; UINT16 offset; } irda_file; -#if defined BOARD_FREE_RTOS #pragma pack() -#endif @@ -367,23 +363,14 @@ static void print_irda_time(irda_data_t *data, UINT8 keyindex, UINT16 *irda_time if (irda_decode_flag == IRDA_DECODE_1_BIT) { -#if (defined BOARD_EMBEDDED) && (PRINT_IRDA_DATA == TRUE) - NPI_PrintString("\r\n\r\n\r\n[TV-DECODE]: decode as 1 bit"); -#endif process_decode_number(keycode, data, 1, irda_time); // '0','1' } else if (irda_decode_flag == IRDA_DECODE_2_BITS) { -#if (defined BOARD_EMBEDDED) && (PRINT_IRDA_DATA == TRUE) - NPI_PrintString("\r\n\r\n\r\n[TV-DECODE]: decode as 2 bits"); -#endif process_decode_number(keycode, data, 2, irda_time); // '0','1','2','3' } else if (irda_decode_flag == IRDA_DECODE_4_BITS) { -#if (defined BOARD_EMBEDDED) && (PRINT_IRDA_DATA == TRUE) - NPI_PrintString("\r\n\r\n\r\n[TV-DECODE]: decode as 4 bits"); -#endif process_decode_number(keycode, data, 4, irda_time); // '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F', } } @@ -398,17 +385,8 @@ static void process_decode_number(UINT8 keycode, irda_data_t *data, UINT8 valid_ valid_value = (valid_bits == 1) ? 1 : (valid_bits * valid_bits - 1); -#if (defined BOARD_EMBEDDED) && (PRINT_IRDA_DATA == TRUE) - NPI_PrintValue("\r\n keycode : 0x", keycode, 16); - NPI_PrintValue("\r\n bits : ", data->bits, 10); - NPI_PrintValue("\r\n valid bits : 0x", valid_value, 16); -#endif - if (data->lsb == IRDA_LSB) { -#if (defined BOARD_EMBEDDED) && (PRINT_IRDA_DATA == TRUE) - NPI_PrintString("\r\n endian : lsb"); -#endif for (i = 0; i < bit_num; i++) { value = (keycode >> (valid_bits * i)) & valid_value; @@ -417,9 +395,6 @@ static void process_decode_number(UINT8 keycode, irda_data_t *data, UINT8 valid_ } else if (data->lsb == IRDA_MSB) { -#if (defined BOARD_EMBEDDED) && (PRINT_IRDA_DATA == TRUE) - NPI_PrintString("\r\n endian : msb"); -#endif for (i = 0; i < bit_num; i++) { value = (keycode >> (data->bits - valid_bits * (i + 1))) & valid_value; @@ -430,9 +405,6 @@ static void process_decode_number(UINT8 keycode, irda_data_t *data, UINT8 valid_ static void convert_to_irda_time(UINT8 value, UINT16 *irda_time) { -#if (defined BOARD_EMBEDDED) && (PRINT_IRDA_DATA == TRUE) - NPI_PrintValue("\r\n replace value : 0x", value, 16); -#endif switch (value) { case 0: