From c8d2e3ad879716818ffba8ff7e04ff38361989c7 Mon Sep 17 00:00:00 2001 From: strawmanbobi Date: Mon, 9 Mar 2020 21:53:43 +0800 Subject: [PATCH] updated android example with ir_decoder 0.2.5 --- .../src/main/jniLibs/arm64-v8a/libirdecode.so | Bin 51184 -> 51200 bytes .../main/jniLibs/armeabi-v7a/libirdecode.so | Bin 42708 -> 42676 bytes .../app/src/main/jniLibs/x86/libirdecode.so | Bin 50788 -> 50808 bytes .../src/main/jniLibs/x86_64/libirdecode.so | Bin 55552 -> 51472 bytes .../decodesdk/ir_decoder/Android.mk | 6 +- .../ir_decoder/jni/src/ir_decode_jni.c | 11 +- .../ir_decoder/jni/src/ir_decode_jni.h | 1 + .../ir_decoder/libs/arm64-v8a/libirdecode.so | Bin 0 -> 51200 bytes .../libs/armeabi-v7a/libirdecode.so | Bin 0 -> 42676 bytes .../ir_decoder/libs/x86/libirdecode.so | Bin 0 -> 50808 bytes .../ir_decoder/libs/x86_64/libirdecode.so | Bin 0 -> 51472 bytes .../{ => src}/include/ir_ac_apply.h | 8 +- .../{ => src}/include/ir_ac_binary_parse.h | 6 +- .../{ => src}/include/ir_ac_build_frame.h | 6 +- .../{ => src}/include/ir_ac_control.h | 8 +- .../include/ir_ac_parse_forbidden_info.h | 6 +- .../include/ir_ac_parse_frame_info.h | 6 +- .../{ => src}/include/ir_ac_parse_parameter.h | 6 +- .../ir_decoder/{ => src}/include/ir_decode.h | 64 ++++- .../ir_decoder/{ => src}/include/ir_defs.h | 9 +- .../{ => src}/include/ir_tv_control.h | 10 +- .../ir_decoder/{ => src}/include/ir_utils.h | 8 +- .../decodesdk/ir_decoder/src/ir_ac_apply.c | 18 +- .../ir_decoder/src/ir_ac_binary_parse.c | 6 +- .../ir_decoder/src/ir_ac_build_frame.c | 43 +-- .../decodesdk/ir_decoder/src/ir_ac_control.c | 47 ++-- .../src/ir_ac_parse_forbidden_info.c | 16 +- .../ir_decoder/src/ir_ac_parse_frame_info.c | 54 ++-- .../ir_decoder/src/ir_ac_parse_parameter.c | 256 +++++++++--------- .../decodesdk/ir_decoder/src/ir_decode.c | 180 ++++++++---- .../decodesdk/ir_decoder/src/ir_decode_test.c | 13 +- .../decodesdk/ir_decoder/src/ir_tv_control.c | 8 +- .../decodesdk/ir_decoder/src/ir_utils.c | 8 +- .../java/net/irext/decode/sdk/IRDecode.java | 20 +- 34 files changed, 504 insertions(+), 320 deletions(-) create mode 100644 android-example/decodesdk/ir_decoder/libs/arm64-v8a/libirdecode.so create mode 100644 android-example/decodesdk/ir_decoder/libs/armeabi-v7a/libirdecode.so create mode 100644 android-example/decodesdk/ir_decoder/libs/x86/libirdecode.so create mode 100644 android-example/decodesdk/ir_decoder/libs/x86_64/libirdecode.so rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_ac_apply.h (89%) rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_ac_binary_parse.h (83%) rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_ac_build_frame.h (87%) rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_ac_control.h (97%) rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_ac_parse_forbidden_info.h (86%) rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_ac_parse_frame_info.h (89%) rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_ac_parse_parameter.h (94%) rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_decode.h (88%) rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_defs.h (88%) rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_tv_control.h (94%) rename android-example/decodesdk/ir_decoder/{ => src}/include/ir_utils.h (85%) diff --git a/android-example/app/src/main/jniLibs/arm64-v8a/libirdecode.so b/android-example/app/src/main/jniLibs/arm64-v8a/libirdecode.so index 1646c376d2f443fdb6642de62a73b05b6ba0d027..35ede48cb40b3c6aa49238b7cfaa40e0cc7dfe2f 100644 GIT binary patch delta 19800 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 EZ;!{MvH$=8 delta 20458 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 diff --git a/android-example/app/src/main/jniLibs/armeabi-v7a/libirdecode.so b/android-example/app/src/main/jniLibs/armeabi-v7a/libirdecode.so index 02f7183c08820a181f8cf9d092ffca6253063e4f..d45e952566050ca07c9fe8d257f6bd9c69732404 100644 GIT binary patch delta 18323 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 delta 21866 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 bwirxICEIxBo<^yanp_Z@aHbVi#KZprX0z-v delta 24769 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 diff --git a/android-example/decodesdk/ir_decoder/Android.mk b/android-example/decodesdk/ir_decoder/Android.mk index c928a23..1f7ce4c 100644 --- a/android-example/decodesdk/ir_decoder/Android.mk +++ b/android-example/decodesdk/ir_decoder/Android.mk @@ -12,10 +12,10 @@ LOCAL_SRC_FILES := ./jni/src/ir_decode_jni.c \ ./src/ir_ac_parse_parameter.c \ ./src/ir_ac_parse_forbidden_info.c \ ./src/ir_ac_parse_frame_info.c \ - ./src/ir_ac_binary_parse.c \ - ./src/ir_ac_control.c \ + ./src/ir_ac_binary_parse.c \ + ./src/ir_ac_control.c \ ./src/ir_utils.c \ LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog -include $(BUILD_SHARED_LIBRARY) \ No newline at end of file +include $(BUILD_SHARED_LIBRARY) diff --git a/android-example/decodesdk/ir_decoder/jni/src/ir_decode_jni.c b/android-example/decodesdk/ir_decoder/jni/src/ir_decode_jni.c index e8e5dea..98e476c 100644 --- a/android-example/decodesdk/ir_decoder/jni/src/ir_decode_jni.c +++ b/android-example/decodesdk/ir_decoder/jni/src/ir_decode_jni.c @@ -12,13 +12,20 @@ Revision log: #include #include "ir_decode_jni.h" -#include "../../include/ir_defs.h" -#include "../../include/ir_decode.h" +#include "../../src/include/ir_defs.h" +#include "../../src/include/ir_decode.h" // global variable definition extern size_t binary_length; extern UINT8 *binary_content; +JNIEXPORT const jstring JNICALL Java_net_irext_decode_sdk_IRDecode_irGetVersion + (JNIEnv *env, jobject this_obj) +{ + char *version = (char*) get_lib_version(); + return (*env)->NewStringUTF(env, version); +} + JNIEXPORT jint JNICALL Java_net_irext_decode_sdk_IRDecode_irOpen (JNIEnv *env, jobject this_obj, jint category_id, jint sub_cate, jstring file_name) { diff --git a/android-example/decodesdk/ir_decoder/jni/src/ir_decode_jni.h b/android-example/decodesdk/ir_decoder/jni/src/ir_decode_jni.h index be05b9d..ad47f7e 100644 --- a/android-example/decodesdk/ir_decoder/jni/src/ir_decode_jni.h +++ b/android-example/decodesdk/ir_decoder/jni/src/ir_decode_jni.h @@ -59,6 +59,7 @@ extern "C" { #define net_irext_decode_sdk_IRDecode_START_STICKY 1L #undef net_irext_decode_sdk_IRDecode_START_STICKY_COMPATIBILITY #define net_irext_decode_sdk_IRDecode_START_STICKY_COMPATIBILITY 0L + /* * Class: net_irext_decode_sdk_IRDecode * Method: irOpen diff --git a/android-example/decodesdk/ir_decoder/libs/arm64-v8a/libirdecode.so b/android-example/decodesdk/ir_decoder/libs/arm64-v8a/libirdecode.so new file mode 100644 index 0000000000000000000000000000000000000000..35ede48cb40b3c6aa49238b7cfaa40e0cc7dfe2f GIT binary patch literal 51200 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

ANWYe{~h>94?f zbPdvLzl9!=KK>o#iFET>zyCF)El58^8hQ?PjFc8@bVcQ$2p$>wJI!x{egkFT8iRWV?#EI7Gy$?idH;KL_ZjXFegIEQaS>h~?zlR?zaHs@ zcmp3K%<;H4%r=3#13Uhr%C@cx1?< zusOV6yqxHaL3!N$uve1jMdX9;+OQc9Vcbz&VGr~h7s2oyB<4W5jrdt2E$hp9cIv_(A;bfPnr4%k}o7e9mwE{yCx&Qj*&zfL8)OSp_G4&H}!L z;1|$?{c>EYKL-7N5dM~U5EuO>c{~a@>Ah!spg+ixj+Ual4gQ(@FU#(&zvtWYX5be- z0Xqa=;-dB+2mIOJ!`}-aQi8t>_=kYk2gvDd!1Hi|NJnr@gSz2hs&@+I8BKmazU9(= z5j;2ueTCnz=!PnOfaa@ez`F>pdGI`XBnO(umSCQ^P>#XM_(yrcAK^DIBIhxnvl)0} zn*IIyW(!6-@PQSkzzr{uH{eYh(xJn+Rhfe^{!@M<~|OBV z_}y*CzY%sy-b%6O8Nhq(67ceX7xyC9Qy+Fua>Vy@SUu*^IBG!nTl$TQ_<9=U4JePG z{)zF`3twb!_rC1+%MPNC_J|(E1LOY;JNN;5V=&*J!aV-?58!10Zw2P}D8jo)yA{C8 z#{56$2k1Qtyy{o|{?1s^&TpoYCjPTzE{5aMTodNh?0N#RiMM3~PC>XW^xEyz?=!^h70_zQj3SWoc8*q~f zl8f`oO5Ax^m*ZpE@#^RbfFF4!CfXAcr~hj-eq@tBqyH>{pC$0K1b&vl&l31q0zXUO zX9@f)fuAMt|40JI`C_PDy(sz#ywJLYu4G!M;1c=tfc&C>{4WCX1w4;OB=YqX&*NKs z@^$=0g)*)8=u%e8*k@3(4CfT(>-6{j68eEN;PS;2rlUm@E?P>`RX}TcTv(FI*KXb( zmTdAx&phbD)~$TmUQyZ?Tg7JV>Ci>%Ke~7p&r6l-eY27Zcsu@Z0A0KpChu7x&)JZl zPg6NZ>&E-euk=UA^?ROg;fVf#^5Z<;Hj=0@ylAD=7jjad|AGJGcpE>biXeWL!@pGy zwwJ_+_&3>d%lY(Tc%JXMnBx-T<0nr}h&SiB%5nMv=Pt^oCQO@Zv*%jOxrI2GVqTSB zR!-+JY!fF>oNkUQsHj*`e#N9oE@jhZ;w>d5x8Sr#$;z_a{E4|GMUyH@N(yreT<+pY zO8uO~#AWe$3Hdq8@}?%{ESr`vH7|a8UQVuSN={CEyv>f?n#s0lQ>I&f6z#&oRYm5h zxl`>^m*r1)P0yb)HD~g&99M!XcY300@)VbAnr&*{bXQ`|lqtD+Al==)jEw8&DSatl zRcv8wVtGM%MOlR_hfTzxp!|uq6tA3^v(jCdHvv0Ra<0HtUce^iRTY<46)9;&nNq?< zb6&=Yva_|dQo4@e{h>A4GjIKZ>-T zPmIJPkrMUAJV`r=1Q+$id@E8hzXC(BpXNr9 z7xSY?&2p=XjHzwGKL^VnTq4?{emkFEMJncN(Y~lJ`hPR(QdtToDCU2WigiACE^oVA;^ogT{KKETq6DvX#rsB`Xa6q=~+1{lB>%91(0LKyuRrFhmR__B7IgA za1w#_R|VAHyj4LI>4!g1e?vh1g6&Fukxs_mxcUN7Dvy`0Z|buh)=Qw=d#V+barUTY&sU`y$;NP@lCBHC!$7|K0JalIyWwk$($6h?d|#ir0^7 zQ83y?psQrN<;Sz~86s+NvHsmeHaa-RvT?z;+&nOl|IM`|F)SA+f!%$pF0 literal 0 HcmV?d00001 diff --git a/android-example/decodesdk/ir_decoder/libs/armeabi-v7a/libirdecode.so b/android-example/decodesdk/ir_decoder/libs/armeabi-v7a/libirdecode.so new file mode 100644 index 0000000000000000000000000000000000000000..d45e952566050ca07c9fe8d257f6bd9c69732404 GIT binary patch literal 42676 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.len) { @@ -615,12 +616,14 @@ INT8 apply_checksum(struct ac_protocol *protocol) INT8 apply_power(t_remote_ac_status ac_status, UINT8 function_code) { + (void) function_code; apply_ac_power(context, ac_status.ac_power); return IR_DECODE_SUCCEEDED; } INT8 apply_mode(t_remote_ac_status ac_status, UINT8 function_code) { + (void) function_code; if (IR_DECODE_FAILED == apply_ac_mode(context, ac_status.ac_mode)) { // do not implement this mechanism since mode, temperature, wind @@ -686,6 +689,7 @@ INT8 apply_wind_speed(t_remote_ac_status ac_status, UINT8 function_code) INT8 apply_swing(t_remote_ac_status ac_status, UINT8 function_code) { + (void) ac_status; if (function_code == AC_FUNCTION_WIND_FIX) { // adjust fixed wind direction according to current status @@ -715,11 +719,13 @@ INT8 apply_swing(t_remote_ac_status ac_status, UINT8 function_code) if (IR_DECODE_FAILED == apply_ac_swing(context, context->swing_status)) { - if (function_code == AC_FUNCTION_WIND_SWING && FALSE == has_function(context, AC_FUNCTION_WIND_SWING)) + if (function_code == AC_FUNCTION_WIND_SWING && + FALSE == has_function(context, AC_FUNCTION_WIND_SWING)) { return IR_DECODE_FAILED; } - else if (function_code == AC_FUNCTION_WIND_FIX && FALSE == has_function(context, AC_FUNCTION_WIND_FIX)) + else if (function_code == AC_FUNCTION_WIND_FIX && + FALSE == has_function(context, AC_FUNCTION_WIND_FIX)) { return IR_DECODE_FAILED; } diff --git a/android-example/decodesdk/ir_decoder/src/ir_ac_binary_parse.c b/android-example/decodesdk/ir_decoder/src/ir_ac_binary_parse.c index d154f54..c2ff2eb 100644 --- a/android-example/decodesdk/ir_decoder/src/ir_ac_binary_parse.c +++ b/android-example/decodesdk/ir_decoder/src/ir_ac_binary_parse.c @@ -9,8 +9,8 @@ Revision log: * 2017-01-03: created by strawmanbobi **************************************************************************************/ -#include "../include/ir_ac_binary_parse.h" -#include "../include/ir_decode.h" +#include "include/ir_ac_binary_parse.h" +#include "include/ir_decode.h" UINT16 tag_head_offset = 0; @@ -45,7 +45,7 @@ INT8 binary_parse_offset() return IR_DECODE_FAILED; } - tag_head_offset = (UINT16) ((tag_count << 1) + 1); + tag_head_offset = (UINT16) ((tag_count << (UINT16) 1) + 1); #if defined USE_DYNAMIC_TAG tags = (t_tag_head *) ir_malloc(tag_count * sizeof(t_tag_head)); diff --git a/android-example/decodesdk/ir_decoder/src/ir_ac_build_frame.c b/android-example/decodesdk/ir_decoder/src/ir_ac_build_frame.c index 456d86a..a34c11b 100644 --- a/android-example/decodesdk/ir_decoder/src/ir_ac_build_frame.c +++ b/android-example/decodesdk/ir_decoder/src/ir_ac_build_frame.c @@ -9,10 +9,13 @@ Revision log: * 2016-10-01: created by strawmanbobi **************************************************************************************/ -#include "../include/ir_ac_build_frame.h" -#include "../include/ir_decode.h" +#pragma ide diagnostic ignored "hicpp-signed-bitwise" +#pragma ide diagnostic ignored "readability-redundant-declaration" -extern t_ac_protocol *context; +#include "include/ir_ac_build_frame.h" +#include "include/ir_decode.h" + +extern t_ac_protocol* context; //return bit number per byte,default value is 8 @@ -41,9 +44,10 @@ UINT8 bits_per_byte(UINT8 index) UINT16 add_delaycode(UINT8 index) { - UINT8 i = 0, j = 0; + UINT16 i = 0; + UINT16 j = 0; UINT8 size = 0; - UINT8 tail_delaycode = 0; + UINT8 tail_delay_code = 0; UINT16 tail_pos = 0; if (context->dc_cnt != 0) @@ -61,7 +65,7 @@ UINT16 add_delaycode(UINT8 index) } else if (context->dc[i].pos == -1) { - tail_delaycode = 1; + tail_delay_code = 1; tail_pos = i; } } @@ -74,7 +78,7 @@ UINT16 add_delaycode(UINT8 index) if (context->dc_cnt != 0) { - if ((index == (ir_hex_len - 1)) && (tail_delaycode == 1)) + if ((index == (ir_hex_len - 1)) && (tail_delay_code == 1)) { for (i = 0; i < context->dc[tail_pos].time_cnt; i++) { @@ -89,10 +93,10 @@ UINT16 add_delaycode(UINT8 index) UINT16 create_ir_frame() { UINT16 i = 0, j = 0; - UINT8 bitnum = 0; - UINT8 *irdata = ir_hex_code; - UINT8 mask = 1; - UINT16 framelen = 0; + UINT8 bit_num = 0; + UINT8 *ir_data = ir_hex_code; + UINT8 mask = 0; + UINT16 frame_length = 0; context->code_cnt = 0; @@ -101,27 +105,24 @@ UINT16 create_ir_frame() { context->time[context->code_cnt++] = context->boot_code.data[i]; } - //code_cnt += context->boot_code.len; for (i = 0; i < ir_hex_len; i++) { - bitnum = bits_per_byte((UINT8) i); - for (j = 0; j < bitnum; j++) + bit_num = bits_per_byte((UINT8) i); + for (j = 0; j < bit_num; j++) { if (context->endian == 0) - mask = (UINT8) ((1 << (bitnum - 1)) >> j); + mask = (UINT8) ((1 << (bit_num - 1)) >> j); else mask = (UINT8) (1 << j); - if (irdata[i] & mask) + if (ir_data[i] & mask) { - //ir_printf("%d,%d,", context->one.low, context->one.high); context->time[context->code_cnt++] = context->one.low; context->time[context->code_cnt++] = context->one.high; } else { - //ir_printf("%d,%d,", context->zero.low, context->zero.high); context->time[context->code_cnt++] = context->zero.low; context->time[context->code_cnt++] = context->zero.high; } @@ -129,15 +130,15 @@ UINT16 create_ir_frame() add_delaycode((UINT8) i); } - framelen = context->code_cnt; + frame_length = context->code_cnt; for (i = 0; i < (context->repeat_times - 1); i++) { - for (j = 0; j < framelen; j++) + for (j = 0; j < frame_length; j++) { context->time[context->code_cnt++] = context->time[j]; } } return context->code_cnt; -} +} \ No newline at end of file diff --git a/android-example/decodesdk/ir_decoder/src/ir_ac_control.c b/android-example/decodesdk/ir_decoder/src/ir_ac_control.c index 3d07dc0..36ce198 100644 --- a/android-example/decodesdk/ir_decoder/src/ir_ac_control.c +++ b/android-example/decodesdk/ir_decoder/src/ir_ac_control.c @@ -13,13 +13,13 @@ Revision log: #include #include -#include "../include/ir_ac_control.h" -#include "../include/ir_ac_binary_parse.h" -#include "../include/ir_decode.h" -#include "../include/ir_ac_parse_parameter.h" -#include "../include/ir_ac_parse_forbidden_info.h" -#include "../include/ir_ac_parse_frame_info.h" -#include "../include/ir_utils.h" +#include "include/ir_ac_control.h" +#include "include/ir_ac_binary_parse.h" +#include "include/ir_decode.h" +#include "include/ir_ac_parse_parameter.h" +#include "include/ir_ac_parse_forbidden_info.h" +#include "include/ir_ac_parse_frame_info.h" +#include "include/ir_utils.h" #if defined USE_DYNAMIC_TAG @@ -42,7 +42,7 @@ static INT8 ir_context_init() INT8 ir_ac_lib_parse() { - UINT8 i = 0; + UINT i = 0; // suggest not to call init function here for de-couple purpose ir_context_init(); @@ -110,7 +110,7 @@ INT8 ir_ac_lib_parse() if (tags[i].tag == TAG_AC_SWING_1) { context->swing1.count = context->si.mode_count; - context->swing1.len = (UINT8) tags[i].len >> 1; + context->swing1.len = (UINT8) tags[i].len >> (UINT8) 1; swing_space_size = sizeof(t_tag_comp) * context->si.mode_count; context->swing1.comp_data = (t_tag_comp *) ir_malloc(swing_space_size); if (NULL == context->swing1.comp_data) @@ -130,7 +130,7 @@ INT8 ir_ac_lib_parse() else if (tags[i].tag == TAG_AC_SWING_2) { context->swing2.count = context->si.mode_count; - context->swing2.len = (UINT8) tags[i].len >> 1; + context->swing2.len = (UINT8) tags[i].len >> (UINT8) 1; swing_space_size = sizeof(t_tag_comp) * context->si.mode_count; context->swing2.comp_data = (t_tag_comp *) ir_malloc(swing_space_size); if (NULL == context->swing2.comp_data) @@ -150,7 +150,7 @@ INT8 ir_ac_lib_parse() if (tags[i].tag == TAG_AC_DEFAULT_CODE) // default code TAG { - context->default_code.data = (UINT8 *) ir_malloc(((size_t) tags[i].len - 2) >> 1); + context->default_code.data = (UINT8 *) ir_malloc(((size_t) tags[i].len - 2) >> (UINT8) 1); if (NULL == context->default_code.data) { return IR_DECODE_FAILED; @@ -162,7 +162,7 @@ INT8 ir_ac_lib_parse() } else if (tags[i].tag == TAG_AC_POWER_1) // power tag { - context->power1.len = (UINT8) tags[i].len >> 1; + context->power1.len = (UINT8) tags[i].len >> (UINT8) 1; if (IR_DECODE_FAILED == parse_common_ac_parameter(&tags[i], context->power1.comp_data, AC_POWER_MAX, @@ -180,7 +180,7 @@ INT8 ir_ac_lib_parse() } else if (tags[i].tag == TAG_AC_MODE_1) // mode tag { - context->mode1.len = (UINT8) tags[i].len >> 1; + context->mode1.len = (UINT8) tags[i].len >> (UINT8) 1; if (IR_DECODE_FAILED == parse_common_ac_parameter(&tags[i], context->mode1.comp_data, AC_MODE_MAX, @@ -191,7 +191,7 @@ INT8 ir_ac_lib_parse() } else if (tags[i].tag == TAG_AC_SPEED_1) // wind speed tag { - context->speed1.len = (UINT8) tags[i].len >> 1; + context->speed1.len = (UINT8) tags[i].len >> (UINT8) 1; if (IR_DECODE_FAILED == parse_common_ac_parameter(&tags[i], context->speed1.comp_data, AC_WS_MAX, @@ -209,7 +209,7 @@ INT8 ir_ac_lib_parse() } else if (tags[i].tag == TAG_AC_MODE_2) { - context->mode2.len = (UINT8) tags[i].len >> 1; + context->mode2.len = (UINT8) tags[i].len >> (UINT8) 1; if (IR_DECODE_FAILED == parse_common_ac_parameter(&tags[i], context->mode2.comp_data, AC_MODE_MAX, AC_PARAMETER_TYPE_1)) @@ -219,7 +219,7 @@ INT8 ir_ac_lib_parse() } else if (tags[i].tag == TAG_AC_SPEED_2) { - context->speed2.len = (UINT8) tags[i].len >> 1; + context->speed2.len = (UINT8) tags[i].len >> (UINT8) 1; if (IR_DECODE_FAILED == parse_common_ac_parameter(&tags[i], context->speed2.comp_data, AC_WS_MAX, AC_PARAMETER_TYPE_1)) @@ -392,7 +392,7 @@ INT8 ir_ac_lib_parse() { if (is_in(context->sc.solo_function_codes, i, context->sc.solo_func_count)) { - context->solo_function_mark |= (1 << (i - 1)); + context->solo_function_mark |= (UINT8) ((UINT8) 1 << (i - 1)); } } } @@ -428,7 +428,7 @@ INT8 free_ac_context() context->default_code.len = 0; } - for (i = 0; i < AC_POWER_MAX; i++) + for (i = 0; i < (UINT16) AC_POWER_MAX; i++) { if (context->power1.comp_data[i].segment != NULL) { @@ -438,7 +438,7 @@ INT8 free_ac_context() } } - for (i = 0; i < AC_TEMP_MAX; i++) + for (i = 0; i < (UINT16) AC_TEMP_MAX; i++) { if (context->temp1.comp_data[i].segment != NULL) { @@ -454,7 +454,7 @@ INT8 free_ac_context() } } - for (i = 0; i < AC_MODE_MAX; i++) + for (i = 0; i < (UINT16) AC_MODE_MAX; i++) { if (context->mode1.comp_data[i].segment != NULL) { @@ -469,7 +469,7 @@ INT8 free_ac_context() context->mode2.comp_data[i].seg_len = 0; } } - for (i = 0; i < AC_WS_MAX; i++) + for (i = 0; i < (UINT16) AC_WS_MAX; i++) { if (context->speed1.comp_data[i].segment != NULL) { @@ -503,7 +503,7 @@ INT8 free_ac_context() } } - for (i = 0; i < AC_FUNCTION_MAX - 1; i++) + for (i = 0; i < (UINT16) AC_FUNCTION_MAX - 1; i++) { if (context->function1.comp_data[i].segment != NULL) { @@ -550,7 +550,10 @@ INT8 free_ac_context() return IR_DECODE_SUCCEEDED; } +#pragma clang diagnostic push +#pragma ide diagnostic ignored "hicpp-signed-bitwise" BOOL is_solo_function(UINT8 function_code) { return (((context->solo_function_mark >> (function_code - 1)) & 0x01) == 0x01) ? TRUE : FALSE; } +#pragma clang diagnostic pop diff --git a/android-example/decodesdk/ir_decoder/src/ir_ac_parse_forbidden_info.c b/android-example/decodesdk/ir_decoder/src/ir_ac_parse_forbidden_info.c index 331a243..2339c7a 100644 --- a/android-example/decodesdk/ir_decoder/src/ir_ac_parse_forbidden_info.c +++ b/android-example/decodesdk/ir_decoder/src/ir_ac_parse_forbidden_info.c @@ -9,12 +9,14 @@ Revision log: * 2016-10-05: created by strawmanbobi **************************************************************************************/ +#pragma ide diagnostic ignored "readability-redundant-declaration" + #include #include #include -#include "../include/ir_decode.h" -#include "../include/ir_ac_parse_forbidden_info.h" +#include "include/ir_decode.h" +#include "include/ir_ac_parse_forbidden_info.h" extern t_ac_protocol *context; @@ -24,6 +26,7 @@ INT8 parse_nmode_data_speed(char *pdata, t_ac_n_mode seq) { char buf[16] = { 0 }; char *p = pdata; + char *ptr = NULL; UINT16 pos = 0; UINT16 cnt = 0, index = 0; @@ -36,7 +39,7 @@ INT8 parse_nmode_data_speed(char *pdata, t_ac_n_mode seq) ir_memcpy(buf, pdata + pos, index - pos); pos = (UINT16) (index + 1); index = pos; - context->n_mode[seq].speed[cnt++] = (UINT8) atoi(buf); + context->n_mode[seq].speed[cnt++] = (UINT8) strtol(buf, &ptr, 10); context->n_mode[seq].speed_cnt = (UINT8) cnt; ir_memset(buf, 0, 16); } @@ -49,6 +52,7 @@ INT8 parse_nmode_data_temp(char *pdata, t_ac_n_mode seq) char buf[16] = { 0 }; char *p = pdata; + char *ptr = NULL; UINT16 pos = 0; UINT16 cnt = 0, index = 0; @@ -61,7 +65,7 @@ INT8 parse_nmode_data_temp(char *pdata, t_ac_n_mode seq) ir_memcpy(buf, pdata + pos, index - pos); pos = (UINT16) (index + 1); index = pos; - context->n_mode[seq].temp[cnt++] = (UINT8) (atoi(buf) - 16); + context->n_mode[seq].temp[cnt++] = (UINT8) (strtol(buf, &ptr, 10) - 16); context->n_mode[seq].temp_cnt = (UINT8) cnt; ir_memset(buf, 0, 16); } @@ -86,7 +90,7 @@ INT8 parse_nmode_pos(char *buf, t_ac_n_mode index) return IR_DECODE_SUCCEEDED; } - for (i = 0; i < ir_strlen(buf); i++) + for (i = 0; i < (UINT16) ir_strlen(buf); i++) { if (buf[i] == '&') { @@ -140,4 +144,4 @@ INT8 parse_nmode(struct tag_head *tag, t_ac_n_mode index) parse_nmode_pos(buf, index); ir_memset(buf, 0, 64); return IR_DECODE_SUCCEEDED; -} +} \ No newline at end of file diff --git a/android-example/decodesdk/ir_decoder/src/ir_ac_parse_frame_info.c b/android-example/decodesdk/ir_decoder/src/ir_ac_parse_frame_info.c index 0a86f46..336530d 100644 --- a/android-example/decodesdk/ir_decoder/src/ir_ac_parse_frame_info.c +++ b/android-example/decodesdk/ir_decoder/src/ir_ac_parse_frame_info.c @@ -13,14 +13,15 @@ Revision log: #include #include -#include "../include/ir_utils.h" -#include "../include/ir_ac_parse_frame_info.h" +#include "include/ir_utils.h" +#include "include/ir_ac_parse_frame_info.h" INT8 parse_boot_code(struct tag_head *tag) { UINT8 buf[16] = { 0 }; UINT8 *p = NULL; + char *ptr = NULL; UINT16 pos = 0; UINT16 cnt = 0, index = 0; @@ -44,7 +45,7 @@ INT8 parse_boot_code(struct tag_head *tag) ir_memcpy(buf, tag->p_data + pos, index - pos); pos = (UINT16) (index + 1); index = pos; - context->boot_code.data[cnt++] = (UINT16) (atoi((char *) buf)); + context->boot_code.data[cnt++] = (UINT16) (strtol((char *) buf, &ptr, 10)); ir_memset(buf, 0, 16); } context->boot_code.len = cnt; @@ -57,6 +58,8 @@ INT8 parse_zero(struct tag_head *tag) UINT8 high[16] = { 0 }; UINT16 index = 0; UINT8 *p = NULL; + char *ptr_low = NULL; + char *ptr_high = NULL; if (NULL == tag) { @@ -77,8 +80,8 @@ INT8 parse_zero(struct tag_head *tag) ir_memcpy(low, tag->p_data, index); ir_memcpy(high, tag->p_data + index + 1, (size_t) (tag->len - index - 1)); - context->zero.low = (UINT16) (atoi((char *) low)); - context->zero.high = (UINT16) (atoi((char *) high)); + context->zero.low = (UINT16) (strtol((char *) low, &ptr_low, 10)); + context->zero.high = (UINT16) (strtol((char *) high, &ptr_high, 10)); return IR_DECODE_SUCCEEDED; } @@ -88,6 +91,8 @@ INT8 parse_one(struct tag_head *tag) UINT8 high[16] = { 0 }; UINT16 index = 0; UINT8 *p = NULL; + char *ptr_low = NULL; + char *ptr_high = NULL; if (NULL == tag) { @@ -107,8 +112,8 @@ INT8 parse_one(struct tag_head *tag) ir_memcpy(low, tag->p_data, index); ir_memcpy(high, tag->p_data + index + 1, (size_t) (tag->len - index - 1)); - context->one.low = (UINT16) (atoi((char *) low)); - context->one.high = (UINT16) (atoi((char *) high)); + context->one.low = (UINT16) (strtol((char *) low, &ptr_low, 10)); + context->one.high = (UINT16) (strtol((char *) high, &ptr_high, 10)); return IR_DECODE_SUCCEEDED; } @@ -119,6 +124,7 @@ INT8 parse_delay_code_data(UINT8 *pdata) UINT8 *p = NULL; UINT16 pos = 0; UINT16 cnt = 0, index = 0; + char *ptr = NULL; if (NULL == pdata) { @@ -135,7 +141,7 @@ INT8 parse_delay_code_data(UINT8 *pdata) ir_memcpy(buf, pdata + pos, index - pos); pos = (UINT16) (index + 1); index = pos; - context->dc[context->dc_cnt].time[cnt++] = (UINT16) (atoi((char *) buf)); + context->dc[context->dc_cnt].time[cnt++] = (UINT16) (strtol((char *) buf, &ptr, 10)); context->dc[context->dc_cnt].time_cnt = cnt; ir_memset(buf, 0, 16); } @@ -146,14 +152,16 @@ INT8 parse_delay_code_data(UINT8 *pdata) INT8 parse_delay_code_pos(UINT8 *buf) { UINT16 i = 0; - UINT8 data[64] = { 0 }, start[8] = { 0 }; + UINT8 data[64] = { 0 }; + UINT8 start[8] = { 0 }; + char *ptr = NULL; if (NULL == buf) { return IR_DECODE_FAILED; } - for (i = 0; i < ir_strlen((char *) buf); i++) + for (i = 0; i < (UINT16) ir_strlen((char *) buf); i++) { if (buf[i] == '&') { @@ -163,7 +171,7 @@ INT8 parse_delay_code_pos(UINT8 *buf) } } parse_delay_code_data(data); - context->dc[context->dc_cnt].pos = (UINT16) (atoi((char *) start)); + context->dc[context->dc_cnt].pos = (UINT16) (strtol((char *) start, &ptr, 10)); context->dc_cnt++; return IR_DECODE_SUCCEEDED; @@ -202,6 +210,7 @@ INT8 parse_delay_code(struct tag_head *tag) INT8 parse_frame_len(struct tag_head *tag, UINT16 len) { UINT8 *temp = NULL; + char *ptr = NULL; if (NULL == tag) { @@ -220,7 +229,7 @@ INT8 parse_frame_len(struct tag_head *tag, UINT16 len) ir_memcpy(temp, tag->p_data, len); temp[len] = '\0'; - context->frame_length = (UINT16) (atoi((char *) temp)); + context->frame_length = (UINT16) (strtol((char *) temp, &ptr, 10)); ir_free(temp); return IR_DECODE_SUCCEEDED; @@ -229,32 +238,36 @@ INT8 parse_frame_len(struct tag_head *tag, UINT16 len) INT8 parse_endian(struct tag_head *tag) { UINT8 buf[8] = { 0 }; + char *ptr = NULL; if (NULL == tag) { return IR_DECODE_FAILED; } ir_memcpy(buf, tag->p_data, tag->len); - context->endian = (UINT8) (atoi((char *) buf)); + context->endian = (UINT8) (strtol((char *) buf, &ptr, 10)); return IR_DECODE_SUCCEEDED; } INT8 parse_lastbit(struct tag_head *tag) { UINT8 buf[8] = { 0 }; + char *ptr = NULL; if (NULL == tag) { return IR_DECODE_FAILED; } ir_memcpy(buf, tag->p_data, tag->len); - context->last_bit = (UINT8) (atoi((char *) buf)); + context->last_bit = (UINT8) (strtol((char *) buf, &ptr, 10)); return IR_DECODE_SUCCEEDED; } INT8 parse_repeat_times(struct tag_head *tag) { char asc_code[8] = { 0 }; + char *ptr = NULL; + if (NULL == tag) { return IR_DECODE_FAILED; @@ -262,7 +275,7 @@ INT8 parse_repeat_times(struct tag_head *tag) ir_memcpy(asc_code, tag->p_data, tag->len); - context->repeat_times = (UINT16) (atoi((char *) asc_code)); + context->repeat_times = (UINT16) (strtol((char *) asc_code, &ptr, 10)); return IR_DECODE_SUCCEEDED; } @@ -270,14 +283,17 @@ INT8 parse_repeat_times(struct tag_head *tag) INT8 parse_delay_code_tag48_pos(UINT8 *buf) { UINT16 i = 0; - UINT8 data[64] = { 0 }, start[8] = { 0 }; + UINT8 data[64] = { 0 }; + UINT8 start[8] = { 0 }; + char *ptr_start = NULL; + char *ptr_data = NULL; if (NULL == buf) { return IR_DECODE_FAILED; } - for (i = 0; i < ir_strlen((char *) buf); i++) + for (i = 0; i < (UINT16) ir_strlen((char *) buf); i++) { if (buf[i] == '&') { @@ -287,8 +303,8 @@ INT8 parse_delay_code_tag48_pos(UINT8 *buf) } } - context->bit_num[context->bit_num_cnt].pos = (UINT16) (atoi((char *) start)); - context->bit_num[context->bit_num_cnt].bits = (UINT16) (atoi((char *) data)); + context->bit_num[context->bit_num_cnt].pos = (UINT16) (strtol((char *) start, &ptr_start, 10)); + context->bit_num[context->bit_num_cnt].bits = (UINT16) (strtol((char *) data, &ptr_data, 10)); context->bit_num_cnt++; return IR_DECODE_SUCCEEDED; } diff --git a/android-example/decodesdk/ir_decoder/src/ir_ac_parse_parameter.c b/android-example/decodesdk/ir_decoder/src/ir_ac_parse_parameter.c index 2752aae..ee4e4e9 100644 --- a/android-example/decodesdk/ir_decoder/src/ir_ac_parse_parameter.c +++ b/android-example/decodesdk/ir_decoder/src/ir_ac_parse_parameter.c @@ -13,8 +13,16 @@ Revision log: #include #include -#include "../include/ir_utils.h" -#include "../include/ir_ac_parse_parameter.h" +#include "include/ir_utils.h" +#include "include/ir_ac_parse_parameter.h" + +static INT8 parse_checksum_byte_typed(const UINT8 *csdata, t_tag_checksum_data *checksum, UINT16 len); + +static INT8 parse_checksum_half_byte_typed(const UINT8 *csdata, t_tag_checksum_data *checksum, UINT16 len); + +static INT8 parse_checksum_spec_half_byte_typed(const UINT8 *csdata, t_tag_checksum_data *checksum, UINT16 len); + +static INT8 parse_checksum_malloc(struct tag_head *tag, t_checksum *checksum); INT8 parse_comp_data_type_1(UINT8 *data, UINT16 *trav_offset, t_tag_comp *comp) @@ -86,7 +94,7 @@ INT8 parse_common_ac_parameter(t_tag_head *tag, t_tag_comp *comp_data, UINT8 wit return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) { @@ -164,7 +172,7 @@ INT8 parse_power_1(struct tag_head *tag, t_power_1 *power1) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -177,7 +185,7 @@ INT8 parse_power_1(struct tag_head *tag, t_power_1 *power1) // parse hex data to power1 data structure power1->len = (UINT8) hex_len; - for (seg_index = AC_POWER_ON; seg_index < AC_POWER_MAX; seg_index++) + for (seg_index = AC_POWER_ON; seg_index < (UINT16) AC_POWER_MAX; seg_index++) { if (IR_DECODE_FAILED == parse_comp_data_type_1(hex_data, &trav_offset, &power1->comp_data[seg_index])) { @@ -210,7 +218,7 @@ INT8 parse_temp_1(struct tag_head *tag, t_temp_1 *temp1) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -228,7 +236,7 @@ INT8 parse_temp_1(struct tag_head *tag, t_temp_1 *temp1) temp1->len = (UINT8) hex_len; UINT8 seg_len = hex_data[0]; - for (seg_index = AC_TEMP_16; seg_index < AC_TEMP_MAX; seg_index++) + for (seg_index = AC_TEMP_16; seg_index < (UINT16) AC_TEMP_MAX; seg_index++) { // 020210 indicates set the 02nd byte to [default] +10, +11, +12, +... temp1->comp_data[seg_index].seg_len = seg_len; @@ -253,7 +261,7 @@ INT8 parse_temp_1(struct tag_head *tag, t_temp_1 *temp1) // static temperature tag temp1->len = (UINT8) hex_len; temp1->type = TEMP_TYPE_STATIC; - for (seg_index = AC_TEMP_16; seg_index < AC_TEMP_MAX; seg_index++) + for (seg_index = AC_TEMP_16; seg_index < (UINT16) AC_TEMP_MAX; seg_index++) { if (IR_DECODE_FAILED == parse_comp_data_type_1(hex_data, &trav_offset, &temp1->comp_data[seg_index])) { @@ -284,7 +292,7 @@ INT8 parse_mode_1(struct tag_head *tag, t_mode_1 *mode1) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -297,7 +305,7 @@ INT8 parse_mode_1(struct tag_head *tag, t_mode_1 *mode1) // parse hex data to mode1 data structure mode1->len = (UINT8) hex_len; - for (seg_index = AC_MODE_COOL; seg_index < AC_MODE_MAX; seg_index++) + for (seg_index = AC_MODE_COOL; seg_index < (UINT16) AC_MODE_MAX; seg_index++) { if (IR_DECODE_FAILED == parse_comp_data_type_1(hex_data, &trav_offset, &mode1->comp_data[seg_index])) { @@ -328,7 +336,7 @@ INT8 parse_speed_1(struct tag_head *tag, t_speed_1 *speed1) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -341,7 +349,7 @@ INT8 parse_speed_1(struct tag_head *tag, t_speed_1 *speed1) // parse hex data to speed1 data structure speed1->len = (UINT8) hex_len; - for (seg_index = AC_WS_AUTO; seg_index < AC_WS_MAX; seg_index++) + for (seg_index = AC_WS_AUTO; seg_index < (UINT16) AC_WS_MAX; seg_index++) { if (IR_DECODE_FAILED == parse_comp_data_type_1(hex_data, &trav_offset, &speed1->comp_data[seg_index])) { @@ -372,7 +380,7 @@ INT8 parse_swing_1(struct tag_head *tag, t_swing_1 *swing1, UINT16 swing_count) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -411,95 +419,6 @@ INT8 parse_swing_1(struct tag_head *tag, t_swing_1 *swing1, UINT16 swing_count) return IR_DECODE_SUCCEEDED; } -INT8 parse_checksum_byte_typed(UINT8 *csdata, t_tag_checksum_data *checksum, UINT16 len) -{ - checksum->start_byte_pos = csdata[2]; - checksum->end_byte_pos = csdata[3]; - checksum->checksum_byte_pos = csdata[4]; - - if (len > 5) - { - checksum->checksum_plus = csdata[5]; - } - else - { - checksum->checksum_plus = 0; - } - checksum->spec_pos = NULL; - - return IR_DECODE_SUCCEEDED; -} - -INT8 parse_checksum_half_byte_typed(UINT8 *csdata, t_tag_checksum_data *checksum, UINT16 len) -{ - checksum->start_byte_pos = csdata[2]; - checksum->end_byte_pos = csdata[3]; - checksum->checksum_byte_pos = csdata[4]; - - if (len > 5) - { - checksum->checksum_plus = csdata[5]; - } - else - { - checksum->checksum_plus = 0; - } - checksum->spec_pos = NULL; - return IR_DECODE_SUCCEEDED; -} - -INT8 parse_checksum_spec_half_byte_typed(UINT8 *csdata, t_tag_checksum_data *checksum, UINT16 len) -{ - /* - * note: - * for the type of specified half byte checksum algorithm, - * the checksum byte positions are in unit of HALF BYTE, rather than in unit of BYTE - * as well as the specified half byte positions (spec_pos). - * Thus the specified half byte checksum only affects 4 bits of a position - * of half byte specified by check_sum_byte_pos property. - */ - UINT16 spec_pos_size = (UINT16) (len - 4); - - checksum->checksum_byte_pos = csdata[2]; - checksum->checksum_plus = csdata[3]; - checksum->start_byte_pos = 0; - checksum->end_byte_pos = 0; - checksum->spec_pos = (UINT8 *) ir_malloc(spec_pos_size); - if (NULL == checksum->spec_pos) - { - return IR_DECODE_FAILED; - } - ir_memcpy(checksum->spec_pos, &csdata[4], spec_pos_size); - - return IR_DECODE_SUCCEEDED; -} - -INT8 parse_checksum_malloc(struct tag_head *tag, t_checksum *checksum) -{ - UINT8 i = 0; - UINT8 cnt = 0; - - for (i = 0; i < tag->len; i++) - { - if (tag->p_data[i] == '|') - { - cnt++; - } - } - - checksum->len = (UINT8) ((tag->len - cnt) >> 1); - checksum->count = (UINT16) (cnt + 1); - checksum->checksum_data = (t_tag_checksum_data *) ir_malloc(sizeof(t_tag_checksum_data) * checksum->count); - - if (NULL == checksum->checksum_data) - { - return IR_DECODE_FAILED; - } - ir_memset(checksum->checksum_data, 0x00, sizeof(t_tag_checksum_data) * checksum->count); - - return IR_DECODE_SUCCEEDED; -} - INT8 parse_checksum_data(UINT8 *buf, t_tag_checksum_data *checksum, UINT8 length) { UINT8 *hex_data = NULL; @@ -591,13 +510,13 @@ INT8 parse_checksum(struct tag_head *tag, t_checksum *checksum) return IR_DECODE_FAILED; } - for (i = 0; i < tag->len; i++) + for (i = 0; i < (UINT8) tag->len; i++) { if (tag->p_data[i] == '|') { if (IR_DECODE_FAILED == parse_checksum_data(tag->p_data + preindex, checksum->checksum_data + num, - (UINT8) (i - preindex) >> 1)) + (UINT8) (i - preindex) >> (UINT8) 1)) { return IR_DECODE_FAILED; } @@ -608,7 +527,7 @@ INT8 parse_checksum(struct tag_head *tag, t_checksum *checksum) if (IR_DECODE_FAILED == parse_checksum_data(tag->p_data + preindex, checksum->checksum_data + num, - (UINT8) (i - preindex) >> 1)) + (UINT8) (i - preindex) >> (UINT8) 1)) { return IR_DECODE_FAILED; } @@ -700,7 +619,7 @@ INT8 parse_function_1_tag29(struct tag_head *tag, t_function_1 *function1) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -714,12 +633,11 @@ INT8 parse_function_1_tag29(struct tag_head *tag, t_function_1 *function1) function1->len = (UINT8) hex_len; // seg_index in TAG only refers to functional count - for (seg_index = AC_FUNCTION_POWER; seg_index < AC_FUNCTION_MAX; seg_index++) + for (seg_index = AC_FUNCTION_POWER; seg_index < (UINT16) AC_FUNCTION_MAX; seg_index++) { - INT8 fid = parse_function_1(hex_data, &trav_offset, &function1->comp_data[0]); - /** WARNING: for strict mode only **/ /** + INT8 fid = parse_function_1(hex_data, &trav_offset, &function1->comp_data[0]); if (fid > AC_FUNCTION_MAX - 1) { irda_free(hex_data); @@ -728,6 +646,7 @@ INT8 parse_function_1_tag29(struct tag_head *tag, t_function_1 *function1) } **/ + parse_function_1(hex_data, &trav_offset, &function1->comp_data[0]); if (trav_offset >= hex_len) { break; @@ -757,7 +676,7 @@ INT8 parse_temp_2(struct tag_head *tag, t_temp_2 *temp2) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -775,7 +694,7 @@ INT8 parse_temp_2(struct tag_head *tag, t_temp_2 *temp2) temp2->len = (UINT8) hex_len; UINT8 seg_len = hex_data[0]; - for (seg_index = AC_TEMP_16; seg_index < AC_TEMP_MAX; seg_index++) + for (seg_index = AC_TEMP_16; seg_index < (UINT16) AC_TEMP_MAX; seg_index++) { // 020210 indicates set the 02nd byte to [default] +10, +11, +12, +... temp2->comp_data[seg_index].seg_len = seg_len; @@ -800,7 +719,7 @@ INT8 parse_temp_2(struct tag_head *tag, t_temp_2 *temp2) // static temperature tag temp2->len = (UINT8) hex_len; temp2->type = TEMP_TYPE_STATIC; - for (seg_index = AC_TEMP_16; seg_index < AC_TEMP_MAX; seg_index++) + for (seg_index = AC_TEMP_16; seg_index < (UINT16) AC_TEMP_MAX; seg_index++) { if (IR_DECODE_FAILED == parse_comp_data_type_2(hex_data, &trav_offset, &temp2->comp_data[seg_index])) { @@ -836,7 +755,7 @@ INT8 parse_mode_2(struct tag_head *tag, t_mode_2 *mode2) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -849,7 +768,7 @@ INT8 parse_mode_2(struct tag_head *tag, t_mode_2 *mode2) // parse hex data to mode1 data structure mode2->len = (UINT8) hex_len; - for (seg_index = AC_MODE_COOL; seg_index < AC_MODE_MAX; seg_index++) + for (seg_index = AC_MODE_COOL; seg_index < (UINT16) AC_MODE_MAX; seg_index++) { if (IR_DECODE_FAILED == parse_comp_data_type_2(hex_data, &trav_offset, &mode2->comp_data[seg_index])) { @@ -885,7 +804,7 @@ INT8 parse_speed_2(struct tag_head *tag, t_speed_2 *speed2) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -898,7 +817,7 @@ INT8 parse_speed_2(struct tag_head *tag, t_speed_2 *speed2) // parse hex data to speed1 data structure speed2->len = (UINT8) hex_len; - for (seg_index = AC_WS_AUTO; seg_index < AC_WS_MAX; seg_index++) + for (seg_index = AC_WS_AUTO; seg_index < (UINT16) AC_WS_MAX; seg_index++) { if (IR_DECODE_FAILED == parse_comp_data_type_2(hex_data, &trav_offset, &speed2->comp_data[seg_index])) { @@ -934,7 +853,7 @@ INT8 parse_swing_2(struct tag_head *tag, t_swing_2 *swing2, UINT16 swing_count) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -1058,7 +977,7 @@ INT8 parse_function_2_tag34(struct tag_head *tag, t_function_2 *function2) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; hex_data = (UINT8 *) ir_malloc(hex_len); if (NULL == hex_data) @@ -1072,12 +991,11 @@ INT8 parse_function_2_tag34(struct tag_head *tag, t_function_2 *function2) function2->len = (UINT8) hex_len; // seg_index in TAG only refers to functional count - for (seg_index = AC_FUNCTION_POWER; seg_index < AC_FUNCTION_MAX; seg_index++) + for (seg_index = AC_FUNCTION_POWER; seg_index < (UINT16) AC_FUNCTION_MAX; seg_index++) { - INT8 fid = parse_function_2(hex_data, &trav_offset, &function2->comp_data[0]); - /** WARNING: for strict mode only **/ /** + INT8 fid = parse_function_2(hex_data, &trav_offset, &function2->comp_data[0]); if (fid > AC_FUNCTION_MAX - 1) { irda_free(hex_data); @@ -1086,6 +1004,7 @@ INT8 parse_function_2_tag34(struct tag_head *tag, t_function_2 *function2) } **/ + parse_function_2(hex_data, &trav_offset, &function2->comp_data[0]); if (trav_offset >= hex_len) { break; @@ -1164,7 +1083,7 @@ INT8 parse_solo_code(struct tag_head *tag, t_solo_code *sc) return IR_DECODE_FAILED; } - hex_len = tag->len >> 1; + hex_len = tag->len >> (UINT16) 1; if (hex_len > AC_FUNCTION_MAX) { @@ -1186,11 +1105,100 @@ INT8 parse_solo_code(struct tag_head *tag, t_solo_code *sc) // per each function takes just 1 byte of length sc->solo_func_count = hex_data[0]; - for (i = 1; i < hex_len; i++) + for (i = 1; i < (UINT8) hex_len; i++) { sc->solo_function_codes[i - 1] = hex_data[i]; } ir_free(hex_data); return IR_DECODE_SUCCEEDED; -} \ No newline at end of file +} + +static INT8 parse_checksum_byte_typed(const UINT8 *csdata, t_tag_checksum_data *checksum, UINT16 len) +{ + checksum->start_byte_pos = csdata[2]; + checksum->end_byte_pos = csdata[3]; + checksum->checksum_byte_pos = csdata[4]; + + if (len > 5) + { + checksum->checksum_plus = csdata[5]; + } + else + { + checksum->checksum_plus = 0; + } + checksum->spec_pos = NULL; + + return IR_DECODE_SUCCEEDED; +} + +static INT8 parse_checksum_half_byte_typed(const UINT8 *csdata, t_tag_checksum_data *checksum, UINT16 len) +{ + checksum->start_byte_pos = csdata[2]; + checksum->end_byte_pos = csdata[3]; + checksum->checksum_byte_pos = csdata[4]; + + if (len > 5) + { + checksum->checksum_plus = csdata[5]; + } + else + { + checksum->checksum_plus = 0; + } + checksum->spec_pos = NULL; + return IR_DECODE_SUCCEEDED; +} + +static INT8 parse_checksum_spec_half_byte_typed(const UINT8 *csdata, t_tag_checksum_data *checksum, UINT16 len) +{ + /* + * note: + * for the type of specified half byte checksum algorithm, + * the checksum byte positions are in unit of HALF BYTE, rather than in unit of BYTE + * as well as the specified half byte positions (spec_pos). + * Thus the specified half byte checksum only affects 4 bits of a position + * of half byte specified by check_sum_byte_pos property. + */ + UINT16 spec_pos_size = (UINT16) (len - 4); + + checksum->checksum_byte_pos = csdata[2]; + checksum->checksum_plus = csdata[3]; + checksum->start_byte_pos = 0; + checksum->end_byte_pos = 0; + checksum->spec_pos = (UINT8 *) ir_malloc(spec_pos_size); + if (NULL == checksum->spec_pos) + { + return IR_DECODE_FAILED; + } + ir_memcpy(checksum->spec_pos, &csdata[4], spec_pos_size); + + return IR_DECODE_SUCCEEDED; +} + +static INT8 parse_checksum_malloc(struct tag_head *tag, t_checksum *checksum) +{ + UINT8 i = 0; + UINT8 cnt = 0; + + for (i = 0; i < (UINT8) tag->len; i++) + { + if (tag->p_data[i] == '|') + { + cnt++; + } + } + + checksum->len = (UINT8) ((UINT8) (tag->len - cnt) >> (UINT8) 1); + checksum->count = (UINT16) (cnt + 1); + checksum->checksum_data = (t_tag_checksum_data *) ir_malloc(sizeof(t_tag_checksum_data) * checksum->count); + + if (NULL == checksum->checksum_data) + { + return IR_DECODE_FAILED; + } + ir_memset(checksum->checksum_data, 0x00, sizeof(t_tag_checksum_data) * checksum->count); + + return IR_DECODE_SUCCEEDED; +} diff --git a/android-example/decodesdk/ir_decoder/src/ir_decode.c b/android-example/decodesdk/ir_decoder/src/ir_decode.c index 59ca600..26c864c 100644 --- a/android-example/decodesdk/ir_decoder/src/ir_decode.c +++ b/android-example/decodesdk/ir_decoder/src/ir_decode.c @@ -14,15 +14,15 @@ Revision log: #include -#include "../include/ir_decode.h" -#include "../include/ir_utils.h" -#include "../include/ir_ac_build_frame.h" -#include "../include/ir_ac_apply.h" +#include "include/ir_decode.h" +#include "include/ir_utils.h" +#include "include/ir_ac_build_frame.h" +#include "include/ir_ac_apply.h" struct ir_bin_buffer binary_file; struct ir_bin_buffer *p_ir_buffer = &binary_file; -const char* release = "0.2.4"; +static const char* version = "0.2.5"; #if defined USE_DYNAMIC_TAG struct tag_head *tags; @@ -30,20 +30,37 @@ struct tag_head *tags; struct tag_head tags[TAG_COUNT_FOR_PROTOCOL]; #endif +static UINT8 byte_array[PROTOCOL_SIZE] = { 0 }; +static size_t binary_length = 0; +static UINT8 *binary_content = NULL; + +static t_remote_category remote_category = REMOTE_CATEGORY_NONE; +static UINT8 ir_binary_type = IR_TYPE_STATUS; +static UINT8 ir_hexadecimal = SUB_CATEGORY_QUATERNARY; + +static int KEY_CODE_MAX[] = +{ + 0, + STANDARD_KEY_COUNT, + STANDARD_KEY_COUNT + CHANNEL_KEY_COUNT, + STANDARD_KEY_COUNT + CHANNEL_KEY_COUNT, + STANDARD_KEY_COUNT, + STANDARD_KEY_COUNT + CHANNEL_KEY_COUNT, + STANDARD_KEY_COUNT, + STANDARD_KEY_COUNT, + STANDARD_KEY_COUNT, + STANDARD_KEY_COUNT, + STANDARD_KEY_COUNT, + STANDARD_KEY_COUNT + CHANNEL_KEY_COUNT, + STANDARD_KEY_COUNT, + STANDARD_KEY_COUNT, +}; + UINT8 *ir_hex_code = NULL; UINT8 ir_hex_len = 0; +t_ac_protocol *context = (t_ac_protocol *) byte_array; -UINT8 byteArray[PROTOCOL_SIZE] = { 0 }; - -size_t binary_length = 0; -UINT8 *binary_content = NULL; - -UINT8 ir_binary_type = IR_TYPE_STATUS; -UINT8 ir_hexadecimal = SUB_CATEGORY_QUATERNARY; - -t_ac_protocol *context = (t_ac_protocol *) byteArray; - -lp_apply_ac_parameter apply_table[AC_APPLY_MAX] = +static lp_apply_ac_parameter apply_table[AC_APPLY_MAX] = { apply_power, apply_mode, @@ -59,16 +76,16 @@ lp_apply_ac_parameter apply_table[AC_APPLY_MAX] = static INT8 ir_ac_file_open(const char *file_name); #endif -static INT8 ir_ac_binary_open(UINT8 *binary, UINT16 binary_length); -static UINT16 ir_ac_control(t_remote_ac_status ac_status, UINT16 *user_data, UINT8 function_code, - BOOL change_wind_direction); +static INT8 ir_ac_binary_open(UINT8 *binary, UINT16 bin_length); +static UINT16 ir_ac_control(t_remote_ac_status ac_status, UINT16* user_data, UINT8 key_code, + BOOL change_wind_direction); static INT8 ir_ac_binary_close(); #if !defined NO_FS static INT8 ir_tv_file_open(const char *file_name); #endif -static INT8 ir_tv_binary_open(UINT8 *binary, UINT16 binary_length); +static INT8 ir_tv_binary_open(UINT8 *binary, UINT16 bin_length); static INT8 ir_tv_binary_parse(UINT8 ir_hex_encode); static UINT16 ir_tv_control(UINT8 key, UINT16 *l_user_data); static INT8 ir_tv_binary_close(); @@ -76,15 +93,35 @@ static INT8 ir_tv_binary_close(); void noprint(const char *fmt, ...) { - return; + (void) fmt; } // pubic function definitions +const char* get_lib_version() +{ + return version; +} + #if (!defined BOARD_51 && !defined BOARD_CC26XX) INT8 ir_file_open(const UINT8 category, const UINT8 sub_category, const char* file_name) { - INT8 ret = IR_DECODE_SUCCEEDED; - if (category == IR_CATEGORY_AC) + INT8 ret = 0; + if (category < REMOTE_CATEGORY_AC || + category >= REMOTE_CATEGORY_NEXT) + { + ir_printf("wrong remote category : %d\n", category); + return IR_DECODE_FAILED; + } + remote_category = category; + + if (sub_category < SUB_CATEGORY_QUATERNARY || + sub_category >= SUB_CATEGORY_NEXT) + { + ir_printf("wrong remote sub category : %d\n", sub_category); + return IR_DECODE_FAILED; + } + + if (category == REMOTE_CATEGORY_AC) { ir_binary_type = IR_TYPE_STATUS; ret = ir_ac_file_open(file_name); @@ -131,14 +168,29 @@ INT8 ir_file_open(const UINT8 category, const UINT8 sub_category, const char* fi } #endif -INT8 ir_binary_open(const UINT8 category, const UINT8 sub_category, UINT8* binary, UINT16 binary_length) +INT8 ir_binary_open(const UINT8 category, const UINT8 sub_category, UINT8* binary, UINT16 bin_length) { - INT8 ret = IR_DECODE_SUCCEEDED; + INT8 ret = 0; - if (category == IR_CATEGORY_AC) + if (category < REMOTE_CATEGORY_AC || + category >= REMOTE_CATEGORY_NEXT) + { + ir_printf("wrong remote category\n"); + return IR_DECODE_FAILED; + } + remote_category = category; + + if (sub_category < SUB_CATEGORY_QUATERNARY || + sub_category >= SUB_CATEGORY_NEXT) + { + ir_printf("wrong remote sub category : %d\n", sub_category); + return IR_DECODE_FAILED; + } + + if (category == REMOTE_CATEGORY_AC) { ir_binary_type = IR_TYPE_STATUS; - ret = ir_ac_binary_open(binary, binary_length); + ret = ir_ac_binary_open(binary, bin_length); if (IR_DECODE_SUCCEEDED == ret) { return ir_ac_lib_parse(); @@ -164,7 +216,7 @@ INT8 ir_binary_open(const UINT8 category, const UINT8 sub_category, UINT8* binar return IR_DECODE_FAILED; } - ret = ir_tv_binary_open(binary, binary_length); + ret = ir_tv_binary_open(binary, bin_length); if (IR_DECODE_SUCCEEDED == ret) { return ir_tv_binary_parse(ir_hexadecimal); @@ -176,10 +228,18 @@ INT8 ir_binary_open(const UINT8 category, const UINT8 sub_category, UINT8* binar } } - +/** the main entry of decode algorithm **/ UINT16 ir_decode(UINT8 key_code, UINT16* user_data, t_remote_ac_status* ac_status, BOOL change_wind_direction) { + ir_printf("remote_category = %d, KEY_CODE_MAX = %d\n", remote_category, KEY_CODE_MAX[remote_category]); + + if (key_code < 0 || key_code >= KEY_CODE_MAX[remote_category]) + { + ir_printf("key_code exceeded!\n"); + return 0; + } + if (IR_TYPE_COMMANDS == ir_binary_type) { return ir_tv_control(key_code, user_data); @@ -192,7 +252,7 @@ UINT16 ir_decode(UINT8 key_code, UINT16* user_data, } ir_printf("ac status is not null in decode core : power = %d, mode = %d, " "temp = %d, wind_dir = %d, wind_speed = %d, " - "keycode = %d, change_wind_direction = %d\n", + "key_code = %d, change_wind_direction = %d\n", ac_status->ac_power, ac_status->ac_mode, ac_status->ac_temp, ac_status->ac_wind_dir, ac_status->ac_wind_speed, @@ -217,11 +277,6 @@ INT8 ir_close() } -#if (defined BOARD_PC || defined BOARD_PC_DLL) -void ir_lib_free_inner_buffer(); -#endif - - // static function definitions //////// AC Begin //////// @@ -275,28 +330,22 @@ static INT8 ir_ac_file_open(const char *file_name) } #endif -static INT8 ir_ac_binary_open(UINT8 *binary, UINT16 binary_length) +static INT8 ir_ac_binary_open(UINT8 *binary, UINT16 bin_length) { // it is recommended that the parameter binary pointing to // a global memory block in embedded platform environment p_ir_buffer->data = binary; - p_ir_buffer->len = binary_length; + p_ir_buffer->len = bin_length; p_ir_buffer->offset = 0; return IR_DECODE_SUCCEEDED; } -static UINT16 ir_ac_control(t_remote_ac_status ac_status, UINT16 *user_data, UINT8 key_code, - BOOL change_wind_direction) +static UINT16 ir_ac_control(t_remote_ac_status ac_status, UINT16* user_data, UINT8 key_code, + BOOL change_wind_direction) { UINT16 time_length = 0; - -#if defined BOARD_PC - UINT16 i = 0; -#endif - UINT8 function_code = 0; - ir_printf("key code = %d\n", key_code); switch(key_code) { case 0: @@ -322,6 +371,9 @@ static UINT16 ir_ac_control(t_remote_ac_status ac_status, UINT16 *user_data, UIN case 11: function_code = AC_FUNCTION_WIND_FIX; break; + default: + ir_printf("unsupported key_code\n"); + return 0; } if (0 == context->default_code.len) @@ -420,6 +472,7 @@ static UINT16 ir_ac_control(t_remote_ac_status ac_status, UINT16 *user_data, UIN #if (defined BOARD_PC_JNI) ir_printf("code count = %d\n", context->code_cnt); #else + int i = 0; for (i = 0; i < context->code_cnt; i++) { ir_printf("%d,", context->time[i]); @@ -469,7 +522,7 @@ INT8 get_temperature_range(UINT8 ac_mode, INT8 *temp_min, INT8 *temp_max) *temp_min = -1; *temp_max = -1; - for (i = 0; i < AC_TEMP_MAX; i++) + for (i = 0; i < (UINT8) AC_TEMP_MAX; i++) { if (is_in(context->n_mode[ac_mode].temp, i, context->n_mode[ac_mode].temp_cnt) || (context->temp1.len != 0 && 0 == context->temp1.comp_data[i].seg_len) || @@ -498,13 +551,13 @@ INT8 get_supported_mode(UINT8 *supported_mode) } *supported_mode = 0x1F; - for (i = 0; i < AC_MODE_MAX; i++) + for (i = 0; i < (UINT8) AC_MODE_MAX; i++) { if (0 == context->n_mode[i].enable || (context->mode1.len != 0 && 0 == context->mode1.comp_data[i].seg_len) || (context->mode2.len != 0 && 0 == context->mode2.comp_data[i].seg_len)) { - *supported_mode &= ~(1 << i); + *supported_mode &= (UINT8)(~(UINT8)((UINT8)1 << (UINT8)i)); } } @@ -532,13 +585,13 @@ INT8 get_supported_wind_speed(UINT8 ac_mode, UINT8 *supported_wind_speed) *supported_wind_speed = 0x0F; - for (i = 0; i < AC_WS_MAX; i++) + for (i = 0; i < (UINT8) AC_WS_MAX; i++) { if (is_in(context->n_mode[ac_mode].speed, i, context->n_mode[ac_mode].speed_cnt) || (context->speed1.len != 0 && 0 == context->speed1.comp_data[i].seg_len) || (context->speed2.len != 0 && 0 == context->speed2.comp_data[i].seg_len)) { - *supported_wind_speed &= ~(1 << i); + *supported_wind_speed &= (UINT8)(~(UINT8)((UINT8)1 << (UINT8)i)); } } @@ -581,7 +634,8 @@ INT8 get_supported_wind_direction(UINT8 *supported_wind_direction) if (NULL != context) { *supported_wind_direction = (UINT8) (context->si.mode_count - 1); - if (*supported_wind_direction < 0) { + if (*supported_wind_direction < 0) + { *supported_wind_direction = 0; } return IR_DECODE_SUCCEEDED; @@ -646,9 +700,9 @@ static INT8 ir_tv_file_open(const char *file_name) } #endif -static INT8 ir_tv_binary_open(UINT8 *binary, UINT16 binary_length) +static INT8 ir_tv_binary_open(UINT8 *binary, UINT16 bin_length) { - return tv_binary_open(binary, binary_length); + return tv_binary_open(binary, bin_length); } static INT8 ir_tv_binary_parse(UINT8 ir_hex_encode) @@ -693,13 +747,29 @@ static INT8 ir_tv_binary_close() // combo decode for JNI which means call open, decode and then close in one JNI call UINT16 ir_decode_combo(const UINT8 category, const UINT8 sub_category, - UINT8* binary, UINT16 binary_length, + UINT8* binary, UINT16 bin_length, UINT8 key_code, UINT16* user_data, t_remote_ac_status* ac_status, BOOL change_wind_direction) { UINT16 decoded_length = 0; + + if (category < REMOTE_CATEGORY_AC || + category >= REMOTE_CATEGORY_NEXT) + { + ir_printf("wrong remote category\n"); + return IR_DECODE_FAILED; + } + + remote_category = category; + + if (key_code < 0 || key_code >= KEY_CODE_MAX[remote_category]) + { + ir_printf("key_code exceeded!\n"); + return 0; + } + if (IR_DECODE_SUCCEEDED == - ir_binary_open(category, sub_category, binary, binary_length)) + ir_binary_open(category, sub_category, binary, bin_length)) { decoded_length = ir_decode(key_code, user_data, ac_status, change_wind_direction); ir_close(); diff --git a/android-example/decodesdk/ir_decoder/src/ir_decode_test.c b/android-example/decodesdk/ir_decoder/src/ir_decode_test.c index bb65533..5ae2a1b 100644 --- a/android-example/decodesdk/ir_decoder/src/ir_decode_test.c +++ b/android-example/decodesdk/ir_decoder/src/ir_decode_test.c @@ -9,14 +9,16 @@ Revision log: * 2016-11-05: created by strawmanbobi **************************************************************************************/ +#pragma ide diagnostic ignored "OCUnusedMacroInspection" + #include #include #include #include #include -#include "../include/ir_defs.h" -#include "../include/ir_decode.h" +#include "include/ir_defs.h" +#include "include/ir_decode.h" #define INPUT_MAX 3 @@ -82,7 +84,7 @@ static INT8 decode_as_ac(char *file_name) ac_status.ac_wind_dir = AC_SWING_ON; ac_status.ac_wind_speed = AC_WS_AUTO; - if (IR_DECODE_FAILED == ir_file_open(IR_CATEGORY_AC, 0, file_name)) + if (IR_DECODE_FAILED == ir_file_open(REMOTE_CATEGORY_AC, 0, file_name)) { ir_close(); return IR_DECODE_FAILED; @@ -166,7 +168,7 @@ static INT8 decode_as_ac(char *file_name) break; case 1: - ++ac_status.ac_mode;; + ++ac_status.ac_mode; ac_status.ac_mode = ac_status.ac_mode % AC_MODE_MAX; need_control = TRUE; break; @@ -232,7 +234,8 @@ static INT8 decode_as_tv(char *file_name, UINT8 ir_hex_encode) int key_code = 0; int first_time = 1; - if (IR_DECODE_FAILED == ir_file_open(IR_CATEGORY_TV, ir_hex_encode, file_name)) + // here remote category TV represents for command typed IR code + if (IR_DECODE_FAILED == ir_file_open(REMOTE_CATEGORY_TV, ir_hex_encode, file_name)) { ir_close(); return IR_DECODE_FAILED; diff --git a/android-example/decodesdk/ir_decoder/src/ir_tv_control.c b/android-example/decodesdk/ir_decoder/src/ir_tv_control.c index dd7869a..c7cc98f 100644 --- a/android-example/decodesdk/ir_decoder/src/ir_tv_control.c +++ b/android-example/decodesdk/ir_decoder/src/ir_tv_control.c @@ -9,11 +9,13 @@ Revision log: * 2016-10-21: created by strawmanbobi **************************************************************************************/ +#pragma ide diagnostic ignored "hicpp-signed-bitwise" + #include -#include "../include/ir_defs.h" -#include "../include/ir_decode.h" -#include "../include/ir_tv_control.h" +#include "include/ir_defs.h" +#include "include/ir_decode.h" +#include "include/ir_tv_control.h" struct buffer diff --git a/android-example/decodesdk/ir_decoder/src/ir_utils.c b/android-example/decodesdk/ir_decoder/src/ir_utils.c index 6867df7..9045a52 100644 --- a/android-example/decodesdk/ir_decoder/src/ir_utils.c +++ b/android-example/decodesdk/ir_decoder/src/ir_utils.c @@ -9,7 +9,7 @@ Revision log: * 2016-10-01: created by strawmanbobi **************************************************************************************/ -#include "../include/ir_utils.h" +#include "include/ir_utils.h" UINT8 char_to_hex(char chr) { @@ -25,7 +25,7 @@ UINT8 char_to_hex(char chr) UINT8 chars_to_hex(const UINT8 *p) { - return (char_to_hex(*p) << 4) + char_to_hex(*(p + 1)); + return ((UINT8) char_to_hex(*p) << (UINT8) 4) + char_to_hex(*(p + 1)); } void string_to_hex_common(UINT8 *p, UINT8 *hex_data, UINT16 len) @@ -77,8 +77,8 @@ void hex_byte_to_double_char(char *dest, UINT8 length, UINT8 src) { return; } - hi_num = (UINT8) ((src >> 4) & 0x0F); - lo_num = (UINT8) (src & 0x0F); + hi_num = (UINT8) ((UINT8) (src >> (UINT8) 4) & (UINT8) 0x0F); + lo_num = (UINT8) (src & (UINT8) 0x0F); dest[0] = hex_half_byte_to_single_char(1, hi_num); dest[1] = hex_half_byte_to_single_char(1, lo_num); diff --git a/android-example/decodesdk/src/main/java/net/irext/decode/sdk/IRDecode.java b/android-example/decodesdk/src/main/java/net/irext/decode/sdk/IRDecode.java index c09a2db..ab5eef2 100644 --- a/android-example/decodesdk/src/main/java/net/irext/decode/sdk/IRDecode.java +++ b/android-example/decodesdk/src/main/java/net/irext/decode/sdk/IRDecode.java @@ -3,6 +3,9 @@ package net.irext.decode.sdk; import net.irext.decode.sdk.bean.ACStatus; import net.irext.decode.sdk.bean.TemperatureRange; import net.irext.decode.sdk.utils.Constants; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.servlet.ServletContext; /** * Filename: IRDecode.java @@ -18,12 +21,13 @@ public class IRDecode { private static final String TAG = IRDecode.class.getSimpleName(); - static { - System.loadLibrary("irdecode"); - } + @Autowired + private static ServletContext context; private static Object mSync = new Object(); + private native String irGetVersion(); + private native int irOpen(int category, int subCate, String fileName); private native int irOpenBinary(int category, int subCate, byte[] binaries, int binLength); @@ -51,6 +55,16 @@ public class IRDecode { return mInstance; } + private IRDecode() { + String libPath = "/data/irext/libirda_decoder.so"; + System.out.println("loading decode library " + libPath); + System.load(libPath); + } + + public String getVersion() { + return irGetVersion(); + } + public int openFile(int category, int subCate, String fileName) { return irOpen(category, subCate, fileName); }