From 378695cca33a00fb668595a7cbf836f84384a781 Mon Sep 17 00:00:00 2001 From: strawmanbobi Date: Wed, 31 May 2017 20:36:08 +0800 Subject: [PATCH] fixed decode algorithm memory free issue for jni call --- src/ir_decoder/CMakeLists.txt | 4 ++-- src/ir_decoder/include/ir_defs.h | 6 ++++++ src/ir_decoder/jni/ir_decode_jni.c | 3 --- src/ir_decoder/src/ir_decode.c | 14 ++++++++++++-- src/ir_decoder/src/ir_test_main.c | 6 +++--- src/ir_decoder/src/ir_tv_control.c | 7 +++++++ 6 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/ir_decoder/CMakeLists.txt b/src/ir_decoder/CMakeLists.txt index 5a43a19..a219116 100644 --- a/src/ir_decoder/CMakeLists.txt +++ b/src/ir_decoder/CMakeLists.txt @@ -88,6 +88,6 @@ set(SOURCE_FILES_JNI_SHARED_LIB src/ir_decode.c include/ir_decode.h) -# add_executable(irda_decoder ${SOURCE_FILES_EXECUTABLE}) +add_executable(irda_decoder ${SOURCE_FILES_EXECUTABLE}) # add_library(irda_decoder SHARED ${SOURCE_FILES_SHARED_LIB}) -add_library(irda_decoder SHARED ${SOURCE_FILES_JNI_SHARED_LIB}) +# add_library(irda_decoder SHARED ${SOURCE_FILES_JNI_SHARED_LIB}) diff --git a/src/ir_decoder/include/ir_defs.h b/src/ir_decoder/include/ir_defs.h index 2981520..7b60e53 100644 --- a/src/ir_decoder/include/ir_defs.h +++ b/src/ir_decoder/include/ir_defs.h @@ -37,6 +37,8 @@ typedef signed int INT; typedef unsigned int UINT; typedef int BOOL; +void noprint(const char *fmt, ...); + #if !defined BOARD_CC26XX #define ir_malloc(A) malloc(A) #define ir_free(A) free(A) @@ -48,7 +50,11 @@ typedef int BOOL; #define ir_memcpy(A, B, C) memcpy(A, B, C) #define ir_memset(A, B, C) memset(A, B, C) #define ir_strlen(A) strlen(A) +#if (defined BOARD_PC) && (!defined BOARD_PC_JNI) #define ir_printf printf +#else +#define ir_printf noprint +#endif #define USER_DATA_SIZE 1636 #ifdef __cplusplus diff --git a/src/ir_decoder/jni/ir_decode_jni.c b/src/ir_decoder/jni/ir_decode_jni.c index d253424..e1a713d 100644 --- a/src/ir_decoder/jni/ir_decode_jni.c +++ b/src/ir_decoder/jni/ir_decode_jni.c @@ -10,7 +10,6 @@ Revision log: **************************************************************************************************/ #include #include -#include #include "ir_decode_jni.h" #include "../include/ir_defs.h" @@ -49,8 +48,6 @@ JNIEXPORT jint JNICALL Java_net_irext_decodesdk_IRDecode_irOpenBinary return IR_DECODE_FAILED; } - (*env)->ReleaseByteArrayElements(env, binaries, j_buffer, JNI_ABORT); - return IR_DECODE_SUCCEEDED; } diff --git a/src/ir_decoder/src/ir_decode.c b/src/ir_decoder/src/ir_decode.c index 5a4dd2b..cfc7b5b 100644 --- a/src/ir_decoder/src/ir_decode.c +++ b/src/ir_decoder/src/ir_decode.c @@ -61,6 +61,11 @@ static UINT16 ir_tv_lib_control(UINT8 key, UINT16 *l_user_data); static INT8 ir_tv_lib_close(); +void noprint(const char *fmt, ...) +{ + return; +} + // pubic function definitions INT8 ir_file_open(const UINT8 category, const UINT8 sub_category, const char* file_name) @@ -111,7 +116,8 @@ INT8 ir_file_open(const UINT8 category, const UINT8 sub_category, const char* fi INT8 ir_binary_open(const UINT8 category, const UINT8 sub_category, UINT8* binary, UINT16 binary_length) { INT8 ret = IR_DECODE_SUCCEEDED; - if (category == IR_TYPE_STATUS) + + if (category == IR_CATEGORY_AC) { ir_binary_type = IR_TYPE_STATUS; ret = ir_ac_lib_open(binary, binary_length); @@ -352,11 +358,15 @@ static UINT16 ir_ac_lib_control(remote_ac_status_t ac_status, UINT16 *user_data, time_length = create_ir_frame(); -#if defined BOARD_PC +#if (defined BOARD_PC) +#if (defined BOARD_PC_JNI) + ir_printf("code count = %d\n", context->code_cnt); +#else for (i = 0; i < context->code_cnt; i++) { ir_printf("%d,", context->time[i]); } +#endif ir_printf("\n"); #endif diff --git a/src/ir_decoder/src/ir_test_main.c b/src/ir_decoder/src/ir_test_main.c index 729a3fa..10db3de 100644 --- a/src/ir_decoder/src/ir_test_main.c +++ b/src/ir_decoder/src/ir_test_main.c @@ -70,22 +70,22 @@ INT8 decode_as_ac(char *file_name) break; case 's': case 'S': + // temperature minus ac_status.acTemp = ((ac_status.acTemp == AC_TEMP_16) ? AC_TEMP_16 : (ac_status.acTemp - 1)); function_code = AC_FUNCTION_TEMPERATURE_DOWN; - // temperature minus break; case 'a': case 'A': + // wind speed loop ++ac_status.acWindSpeed; ac_status.acWindSpeed = ac_status.acWindSpeed % AC_WS_MAX; function_code = AC_FUNCTION_WIND_SPEED; - // wind speed loop break; case 'd': case 'D': + // wind swing loop ac_status.acWindDir = ((ac_status.acWindDir == 0) ? AC_SWING_OFF : AC_SWING_ON); function_code = AC_FUNCTION_WIND_SWING; - // wind swing loop break; case 'q': case 'Q': diff --git a/src/ir_decoder/src/ir_tv_control.c b/src/ir_decoder/src/ir_tv_control.c index 462e7e9..10d02c4 100644 --- a/src/ir_decoder/src/ir_tv_control.c +++ b/src/ir_decoder/src/ir_tv_control.c @@ -57,6 +57,7 @@ static void replace_with(ir_cycles_t *pcycles_num, UINT16 *ir_time); INT8 tv_lib_open(UINT8 *binary, UINT16 binary_length) { // load binary to buffer + ir_printf("tv_lib_open entry, %d\n", binary_length); pbuffer->data = binary; pbuffer->len = binary_length; pbuffer->offset = 0; @@ -115,6 +116,7 @@ static BOOL get_ir_protocol(UINT8 encode_type) /* cycles number */ prot_cycles_num = pbuffer->data + pbuffer->offset; + if (encode_type == 0) { cycles_num_size = 8; /* "BOOT", "STOP", "SEP", "ONE", "ZERO", "FLIP", "TWO", "THREE" */ @@ -190,6 +192,7 @@ static void print_ir_time(ir_data_t *data, UINT8 key_index, UINT16 *ir_time) if (NULL == data || NULL == ir_time) { + ir_printf("data or ir_time is null\n"); return; } @@ -198,11 +201,13 @@ static void print_ir_time(ir_data_t *data, UINT8 key_index, UINT16 *ir_time) if (prot_cycles_num[IRDA_ONE] != 1 || prot_cycles_num[IRDA_ZERO] != 1) { + ir_printf("logical 1 or 0 is invalid\n"); return; } if (time_index >= USER_DATA_SIZE) { + ir_printf("time index exceeded\n"); return; } @@ -210,12 +215,14 @@ static void print_ir_time(ir_data_t *data, UINT8 key_index, UINT16 *ir_time) { if (pcycles == NULL) { + ir_printf("pcycles is null\n"); return; } cycles_num = prot_cycles_num[data->index]; if (cycles_num > 5) { + ir_printf("cycles number exceeded\n"); return; }