fixed decode algorithm memory free issue for jni call

This commit is contained in:
2017-05-31 20:36:08 +08:00
parent 3efcc4f473
commit 378695cca3
6 changed files with 30 additions and 10 deletions

View File

@@ -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})

View File

@@ -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

View File

@@ -10,7 +10,6 @@ Revision log:
**************************************************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#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;
}

View File

@@ -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

View File

@@ -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':

View File

@@ -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;
}