From d14b7c50609e9e59116ddf3537fb1e489e4e997a Mon Sep 17 00:00:00 2001 From: strawmanbobi Date: Tue, 2 Oct 2018 20:00:34 +0800 Subject: [PATCH] re-correct win32 example according to latest algorithm changes --- win32-example/.gitignore | 3 + win32-example/DecodeTestWin/DecodeTestWin.cpp | 157 ++--- .../DecodeTestWin/DecodeTestWin.vcxproj | 10 +- .../DecodeTestWin.vcxproj.filters | 10 +- win32-example/DecodeTestWin/ir_ac_control.h | 439 +++++++++++++ win32-example/DecodeTestWin/ir_decode.h | 160 +++++ win32-example/DecodeTestWin/ir_defs.h | 67 ++ win32-example/DecodeTestWin/ir_tv_control.h | 215 +++++++ win32-example/DecodeTestWin/irda_decode.h | 605 ------------------ win32-example/DecodeTestWin/irda_defs.h | 45 -- 10 files changed, 960 insertions(+), 751 deletions(-) create mode 100644 win32-example/DecodeTestWin/ir_ac_control.h create mode 100644 win32-example/DecodeTestWin/ir_decode.h create mode 100644 win32-example/DecodeTestWin/ir_defs.h create mode 100644 win32-example/DecodeTestWin/ir_tv_control.h delete mode 100644 win32-example/DecodeTestWin/irda_decode.h delete mode 100644 win32-example/DecodeTestWin/irda_defs.h diff --git a/win32-example/.gitignore b/win32-example/.gitignore index 35e584e..064a847 100644 --- a/win32-example/.gitignore +++ b/win32-example/.gitignore @@ -290,4 +290,7 @@ __pycache__/ *.odx.cs *.xsd.cs +win32-example/DecodeTestWin/DecodeTestWin.vcxproj +win32-example/DecodeTestWin/DecodeTestWin.vcxproj.filters + # End of https://www.gitignore.io/api/visualstudio \ No newline at end of file diff --git a/win32-example/DecodeTestWin/DecodeTestWin.cpp b/win32-example/DecodeTestWin/DecodeTestWin.cpp index 52515ff..4abe461 100644 --- a/win32-example/DecodeTestWin/DecodeTestWin.cpp +++ b/win32-example/DecodeTestWin/DecodeTestWin.cpp @@ -1,6 +1,6 @@ #include "stdafx.h" #include "DecodeTestWin.h" -#include "irda_decode.h" +#include "ir_decode.h" using namespace std; @@ -15,14 +15,13 @@ UINT8 *binary_content = NULL; CWinApp theApp; HINSTANCE hInDecodeDll = NULL; -remote_ac_status_t ac_status; +t_remote_ac_status ac_status; UINT16 user_data[USER_DATA_SIZE] = { 0 }; -typedef INT8(*lp_irda_ac_file_open) (char* file_name); -typedef INT8(*lp_irda_ac_lib_open) (UINT8 *binary, UINT16 binary_length); -typedef INT8(*lp_irda_ac_lib_close) (void); -typedef INT8(*lp_irda_ac_lib_parse) (void); -typedef UINT16(*lp_irda_ac_lib_control) (remote_ac_status_t ac_status, UINT16 *user_data, UINT8 function_code, BOOL change_wind_direction); +typedef INT8(*lp_ir_file_open) (const UINT8 category, const UINT8 sub_category, const char* file_name); +typedef INT8(*lp_ir_binary_open) (const UINT8 category, const UINT8 sub_category, UINT8* binary, UINT16 binary_length); +typedef INT8(*lp_ir_decode) (UINT8 key_code, UINT16* user_data, t_remote_ac_status* ac_status, BOOL change_wind_direction); +typedef INT8(*lp_ir_close) (void); typedef INT8(*lp_get_temperature_range) (UINT8 ac_mode, INT8* temp_min, INT8* temp_max); typedef INT8(*lp_get_supported_mode) (UINT8* supported_mode); @@ -30,18 +29,10 @@ typedef INT8(*lp_get_supported_wind_speed) (UINT8 ac_mode, UINT8* supported_wind typedef INT8(*lp_get_supported_swing) (UINT8 ac_mode, UINT8* supported_swing); typedef INT8(*lp_get_supported_wind_direction) (UINT8* supported_wind_direction); -typedef INT8(*lp_irda_tv_file_open) (char* file_name); -typedef INT8(*lp_irda_tv_lib_open) (UINT8 *binary, UINT16 binary_length); -typedef INT8(*lp_irda_tv_lib_parse) (UINT8 irda_hex_encode); -typedef UINT16(*lp_irda_tv_lib_control) (UINT8 key_code, UINT16* user_data); -typedef INT8(*lp_irda_tv_lib_close) (void); - - -lp_irda_ac_file_open IRDAACFileOpen; -lp_irda_ac_lib_open IRDAACLibOpen; -lp_irda_ac_lib_parse IRDAACLibParse; -lp_irda_ac_lib_control IRDAACLibControl; -lp_irda_ac_lib_close IRDAACLibClose; +lp_ir_file_open IRFileOpen; +lp_ir_binary_open IRBinaryOpen; +lp_ir_decode IRDecode; +lp_ir_close IRClose; lp_get_supported_mode GetSupportedMode; lp_get_supported_swing GetSupportedSwing; @@ -49,13 +40,6 @@ lp_get_supported_wind_speed GetSupportedWindSpeed; lp_get_supported_wind_direction GetSupportedWindDirection; lp_get_temperature_range GetTemperatureRange; -lp_irda_tv_file_open IRDATVFileOpen; -lp_irda_tv_lib_open IRDATVLibOpen; -lp_irda_tv_lib_parse IRDATVLibParse; -lp_irda_tv_lib_control IRDATVLibControl; -lp_irda_tv_lib_close IRDATVLibClose; - - INT8 decode_as_ac(char* file_name) { // keyboard input @@ -74,27 +58,21 @@ INT8 decode_as_ac(char* file_name) BOOL need_control = TRUE; // init air conditioner status - ac_status.acDisplay = 0; - ac_status.acSleep = 0; - ac_status.acTimer = 0; - ac_status.acPower = AC_POWER_OFF; - ac_status.acMode = AC_MODE_COOL; - ac_status.acTemp = AC_TEMP_20; - ac_status.acWindDir = AC_SWING_ON; - ac_status.acWindSpeed = AC_WS_AUTO; + ac_status.ac_display = 0; + ac_status.ac_sleep = 0; + ac_status.ac_timer = 0; + ac_status.ac_power = AC_POWER_OFF; + ac_status.ac_mode = AC_MODE_COOL; + ac_status.ac_temp = AC_TEMP_20; + ac_status.ac_wind_dir = AC_SWING_ON; + ac_status.ac_wind_speed = AC_WS_AUTO; - if (IR_DECODE_FAILED == IRDAACFileOpen(file_name)) + if (IR_DECODE_FAILED == IRFileOpen(0, 0, file_name)) { - IRDAACLibClose(); + IRClose(); return IR_DECODE_FAILED; } - if (IR_DECODE_FAILED == IRDAACLibParse()) - { - IR_PRINTF("ac lib parse failed\n"); - IRDAACLibClose(); - return IR_DECODE_FAILED; - } do { in_char = getchar(); @@ -105,73 +83,73 @@ INT8 decode_as_ac(char* file_name) case 'w': case 'W': // temperature plus - ac_status.acTemp = (ac_status.acTemp == AC_TEMP_30) ? AC_TEMP_30 : (ac_status.acTemp + 1); + ac_status.ac_temp = (t_ac_temperature)((ac_status.ac_temp == AC_TEMP_30) ? AC_TEMP_30 : (ac_status.ac_temp + 1)); function_code = AC_FUNCTION_TEMPERATURE_UP; break; case 's': case 'S': - ac_status.acTemp = (ac_status.acTemp == AC_TEMP_16) ? AC_TEMP_16 : (ac_status.acTemp - 1); + ac_status.ac_temp = (t_ac_temperature)((ac_status.ac_temp == AC_TEMP_16) ? AC_TEMP_16 : (ac_status.ac_temp - 1)); function_code = AC_FUNCTION_TEMPERATURE_DOWN; // temperature minus break; case 'a': case 'A': - ++ac_status.acWindSpeed; - ac_status.acWindSpeed = ac_status.acWindSpeed % AC_WS_MAX; + ac_status.ac_wind_speed = (t_ac_wind_speed) (ac_status.ac_wind_speed + 1); + ac_status.ac_wind_speed = (t_ac_wind_speed) (ac_status.ac_wind_speed % AC_WS_MAX); function_code = AC_FUNCTION_WIND_SPEED; // wind speed loop break; case 'd': case 'D': - ac_status.acWindDir = (ac_status.acWindDir == 0) ? 1 : 0; + ac_status.ac_wind_dir = (t_ac_swing)((ac_status.ac_wind_dir == 0) ? 1 : 0); function_code = AC_FUNCTION_WIND_SWING; // wind swing loop break; case 'q': case 'Q': - ++ac_status.acMode; - ac_status.acMode = ac_status.acMode % AC_MODE_MAX; + ac_status.ac_mode = (t_ac_mode)(ac_status.ac_mode + 1); + ac_status.ac_mode = (t_ac_mode) (ac_status.ac_mode % AC_MODE_MAX); function_code = AC_FUNCTION_MODE; break; case '1': // turn on - ac_status.acPower = AC_POWER_ON; + ac_status.ac_power = AC_POWER_ON; function_code = AC_FUNCTION_POWER; break; case '2': // turn off - ac_status.acPower = AC_POWER_OFF; + ac_status.ac_power = AC_POWER_OFF; // FUNCTION MAX refers to power off // function_code = AC_FUNCTION_POWER; break; case '3': if (IR_DECODE_SUCCEEDED == GetSupportedMode(&supported_mode)) { - IR_PRINTF("supported mode = %02X\n", supported_mode); + ir_printf("supported mode = %02X\n", supported_mode); } need_control = FALSE; break; case '4': - if (IR_DECODE_SUCCEEDED == GetSupportedSwing(ac_status.acMode, &supported_swing)) + if (IR_DECODE_SUCCEEDED == GetSupportedSwing(ac_status.ac_mode, &supported_swing)) { - IR_PRINTF("supported swing in %d = %02X\n", ac_status.acMode, supported_swing); + ir_printf("supported swing in %d = %02X\n", ac_status.ac_mode, supported_swing); } need_control = FALSE; break; case '5': - if (IR_DECODE_SUCCEEDED == GetSupportedWindSpeed(ac_status.acMode, &supported_speed)) + if (IR_DECODE_SUCCEEDED == GetSupportedWindSpeed(ac_status.ac_mode, &supported_speed)) { - IR_PRINTF("supported wind speed in %d = %02X\n", ac_status.acMode, supported_speed); + ir_printf("supported wind speed in %d = %02X\n", ac_status.ac_mode, supported_speed); } need_control = FALSE; break; case '6': - if (IR_DECODE_SUCCEEDED == GetTemperatureRange(ac_status.acMode, &min_temperature, &max_temperature)) + if (IR_DECODE_SUCCEEDED == GetTemperatureRange(ac_status.ac_mode, &min_temperature, &max_temperature)) { - IR_PRINTF("supported temperature range in mode %d = %d, %d\n", - ac_status.acMode, min_temperature, max_temperature); + ir_printf("supported temperature range in mode %d = %d, %d\n", + ac_status.ac_mode, min_temperature, max_temperature); } need_control = FALSE; break; @@ -183,21 +161,21 @@ INT8 decode_as_ac(char* file_name) if (TRUE == op_match && TRUE == need_control) { - IR_PRINTF("switch AC to power = %d, mode = %d, temp = %d, speed = %d, swing = %d\n", - ac_status.acPower, - ac_status.acMode, - ac_status.acTemp, - ac_status.acWindSpeed, - ac_status.acWindDir + ir_printf("switch AC to power = %d, mode = %d, temp = %d, speed = %d, swing = %d\n", + ac_status.ac_power, + ac_status.ac_mode, + ac_status.ac_temp, + ac_status.ac_wind_speed, + ac_status.ac_wind_dir ); - IRDAACLibControl(ac_status, user_data, function_code, TRUE); + IRDecode(function_code, user_data, &ac_status, TRUE); } } while ('0' != in_char); - IRDAACLibClose(); + IRClose(); // free binary buffer - irda_free(binary_content); + ir_free(binary_content); binary_length = 0; return IR_DECODE_SUCCEEDED; @@ -210,31 +188,27 @@ INT8 decode_as_tv(char *file_name, UINT8 irda_hex_encode) int key_code = -1; int count = 0; - if (IR_DECODE_FAILED == IRDATVFileOpen(file_name)) + if (IR_DECODE_FAILED == IRFileOpen(1, 1, file_name)) { return IR_DECODE_FAILED; } - if (IR_DECODE_FAILED == IRDATVLibParse(irda_hex_encode)) - { - return IR_DECODE_FAILED; - } do { in_char = getchar(); if (in_char >= '0' && in_char <= '9') { key_code = in_char - '0'; - IRDATVLibControl(key_code, user_data); + IRDecode(key_code, user_data, NULL, FALSE); } else if (in_char >= 'a' && in_char <= 'f') { key_code = 10 + (in_char - 'a'); - IRDATVLibControl(key_code, user_data); + IRDecode(key_code, user_data, NULL, FALSE); } else if (in_char == 'q') { - IRDATVLibClose(); + IRClose(); } else { @@ -243,7 +217,7 @@ INT8 decode_as_tv(char *file_name, UINT8 irda_hex_encode) } while ('Q' != in_char); // free binary buffer - irda_free(binary_content); + ir_free(binary_content); binary_length = 0; return IR_DECODE_SUCCEEDED; @@ -267,12 +241,11 @@ int main(int argc, char *argv[]) hInDecodeDll = LoadLibrary(_T("ir_decoder.dll")); if (NULL != hInDecodeDll) { - IR_PRINTF("load library successfully\n"); - IRDAACFileOpen = (lp_irda_ac_file_open)GetProcAddress(hInDecodeDll, "irda_ac_file_open"); - IRDAACLibOpen = (lp_irda_ac_lib_open)GetProcAddress(hInDecodeDll, "irda_ac_lib_open"); - IRDAACLibParse = (lp_irda_ac_lib_parse)GetProcAddress(hInDecodeDll, "irda_ac_lib_parse"); - IRDAACLibControl = (lp_irda_ac_lib_control)GetProcAddress(hInDecodeDll, "irda_ac_lib_control"); - IRDAACLibClose = (lp_irda_ac_lib_close)GetProcAddress(hInDecodeDll, "irda_ac_lib_close"); + ir_printf("load library successfully\n"); + IRFileOpen = (lp_ir_file_open)GetProcAddress(hInDecodeDll, "ir_file_open"); + IRBinaryOpen = (lp_ir_binary_open)GetProcAddress(hInDecodeDll, "ir_binary_open"); + IRDecode = (lp_ir_decode)GetProcAddress(hInDecodeDll, "ir_decode"); + IRClose = (lp_ir_close)GetProcAddress(hInDecodeDll, "ir_close"); GetSupportedMode = (lp_get_supported_mode)GetProcAddress(hInDecodeDll, "get_supported_mode"); GetSupportedSwing = (lp_get_supported_swing)GetProcAddress(hInDecodeDll, "get_supported_swing"); @@ -280,39 +253,33 @@ int main(int argc, char *argv[]) GetSupportedWindDirection = (lp_get_supported_wind_direction)GetProcAddress(hInDecodeDll, "get_supported_wind_direction"); GetTemperatureRange = (lp_get_temperature_range)GetProcAddress(hInDecodeDll, "get_temperature_range"); - IRDATVFileOpen = (lp_irda_tv_file_open)GetProcAddress(hInDecodeDll, "irda_tv_file_open"); - IRDATVLibOpen = (lp_irda_tv_lib_open)GetProcAddress(hInDecodeDll, "irda_tv_lib_open"); - IRDATVLibParse = (lp_irda_tv_lib_parse)GetProcAddress(hInDecodeDll, "irda_tv_lib_parse"); - IRDATVLibControl = (lp_irda_tv_lib_control)GetProcAddress(hInDecodeDll, "irda_tv_lib_control"); - IRDATVLibClose = (lp_irda_tv_lib_close)GetProcAddress(hInDecodeDll, "irda_tv_lib_close"); - char function = '0'; UINT8 irda_hex_encode = 0; if (4 != argc) { - IR_PRINTF("number of args error !\n"); + ir_printf("number of args error !\n"); return -1; } function = argv[1][0]; irda_hex_encode = (UINT8)(argv[3][0] - '0'); - IR_PRINTF("decode functionality = %c\n", function); + ir_printf("decode functionality = %c\n", function); switch (function) { case '0': - IR_PRINTF("decode binary file as AC\n"); + ir_printf("decode binary file as AC\n"); decode_as_ac(argv[2]); break; case '1': - IR_PRINTF("decode binary file as TV : %d\n", irda_hex_encode); + ir_printf("decode binary file as TV : %d\n", irda_hex_encode); decode_as_tv(argv[2], irda_hex_encode); break; default: - IR_PRINTF("decode functionality error !\n"); + ir_printf("decode functionality error !\n"); break; } @@ -320,7 +287,7 @@ int main(int argc, char *argv[]) } else { - IR_PRINTF("load library failed\n"); + ir_printf("load library failed\n"); } } } diff --git a/win32-example/DecodeTestWin/DecodeTestWin.vcxproj b/win32-example/DecodeTestWin/DecodeTestWin.vcxproj index ac11f8e..4a1f05a 100644 --- a/win32-example/DecodeTestWin/DecodeTestWin.vcxproj +++ b/win32-example/DecodeTestWin/DecodeTestWin.vcxproj @@ -35,7 +35,7 @@ Application false - v140 + v141_xp true Unicode Dynamic @@ -118,7 +118,7 @@ MaxSpeed true true - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + WIN32;NDEBUG;_CONSOLE;BOARD_PC;%(PreprocessorDefinitions) true @@ -149,9 +149,11 @@ - - + + + + diff --git a/win32-example/DecodeTestWin/DecodeTestWin.vcxproj.filters b/win32-example/DecodeTestWin/DecodeTestWin.vcxproj.filters index 504757a..b553256 100644 --- a/win32-example/DecodeTestWin/DecodeTestWin.vcxproj.filters +++ b/win32-example/DecodeTestWin/DecodeTestWin.vcxproj.filters @@ -30,10 +30,16 @@ 头文件 - + 头文件 - + + 头文件 + + + 头文件 + + 头文件 diff --git a/win32-example/DecodeTestWin/ir_ac_control.h b/win32-example/DecodeTestWin/ir_ac_control.h new file mode 100644 index 0000000..1ce4882 --- /dev/null +++ b/win32-example/DecodeTestWin/ir_ac_control.h @@ -0,0 +1,439 @@ +/************************************************************************************** +Filename: ir_ac_control.h +Revised: Date: 2016-12-31 +Revision: Revision: 1.0 + +Description: This file provides methods for AC IR control + +Revision log: +* 2016-10-12: created by strawmanbobi +**************************************************************************************/ +#ifndef IRDA_DECODER_IR_AC_CONTROL_H +#define IRDA_DECODER_IR_AC_CONTROL_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "ir_defs.h" + + +#define TAG_COUNT_FOR_PROTOCOL 29 + +#define TAG_INVALID 0xffff + +#define MAX_DELAYCODE_NUM 16 +#define MAX_BITNUM 16 + +#define AC_PARAMETER_TYPE_1 0 +#define AC_PARAMETER_TYPE_2 1 + +typedef enum +{ + AC_POWER_ON = 0, + AC_POWER_OFF, + AC_POWER_MAX +} t_ac_power; + +typedef enum +{ + AC_TEMP_16 = 0, + AC_TEMP_17, + AC_TEMP_18, + AC_TEMP_19, + AC_TEMP_20, + AC_TEMP_21, + AC_TEMP_22, + AC_TEMP_23, + AC_TEMP_24, + AC_TEMP_25, + AC_TEMP_26, + AC_TEMP_27, + AC_TEMP_28, + AC_TEMP_29, + AC_TEMP_30, + AC_TEMP_MAX +} t_ac_temperature; + +typedef enum +{ + AC_MODE_COOL = 0, + AC_MODE_HEAT, + AC_MODE_AUTO, + AC_MODE_FAN, + AC_MODE_DRY, + AC_MODE_MAX +} t_ac_mode; + +typedef enum +{ + AC_FUNCTION_POWER = 1, + AC_FUNCTION_MODE, + AC_FUNCTION_TEMPERATURE_UP, + AC_FUNCTION_TEMPERATURE_DOWN, + AC_FUNCTION_WIND_SPEED, + AC_FUNCTION_WIND_SWING, + AC_FUNCTION_WIND_FIX, + AC_FUNCTION_MAX, +} t_ac_function; + +typedef enum +{ + AC_WS_AUTO = 0, + AC_WS_LOW, + AC_WS_MEDIUM, + AC_WS_HIGH, + AC_WS_MAX +} t_ac_wind_speed; + +typedef enum +{ + AC_SWING_ON = 0, + AC_SWING_OFF, + AC_SWING_MAX +} t_ac_swing; + +typedef enum +{ + SWING_TYPE_SWING_ONLY = 0, + SWING_TYPE_NORMAL, + SWING_TYPE_NOT_SPECIFIED, + SWING_TYPE_MAX +} swing_type; + +typedef enum +{ + TEMP_TYPE_DYNAMIC = 0, + TEMP_TYPE_STATIC, + TEMP_TYPE_MAX, +} t_temp_type; + +// enumeration for application polymorphism +typedef enum +{ + AC_APPLY_POWER = 0, + AC_APPLY_MODE, + AC_APPLY_TEMPERATURE_UP, + AC_APPLY_TEMPERATURE_DOWN, + AC_APPLY_WIND_SPEED, + AC_APPLY_WIND_SWING, + AC_APPLY_WIND_FIX, + AC_APPLY_MAX +} t_ac_apply; + +typedef struct _ac_hex +{ + UINT8 len; + UINT8 *data; +} t_ac_hex; + +typedef struct _ac_level +{ + UINT16 low; + UINT16 high; +} t_ac_level; + +typedef struct _ac_bootcode +{ + UINT16 len; + UINT16 data[16]; +} t_ac_bootcode; + +typedef struct _ac_delaycode +{ + INT16 pos; + UINT16 time[8]; + UINT16 time_cnt; +} t_ac_delaycode; + +/* + * the array of tag_100X application data + * seg_len : length for each segment + * byte_pos : the position of update byte + * byte_value : the value to be updated to position + */ +typedef struct _tag_comp_type_1 +{ + UINT8 seg_len; + UINT8 *segment; +} t_tag_comp; + +typedef struct _tag_swing_info +{ + swing_type type; + UINT8 mode_count; + UINT8 dir_index; +} t_swing_info; + +typedef struct _tag_power_1 +{ + UINT8 len; + t_tag_comp comp_data[AC_POWER_MAX]; +} t_power_1; + +typedef struct _tag_temp_1 +{ + UINT8 len; + UINT8 type; + t_tag_comp comp_data[AC_TEMP_MAX]; +} t_temp_1; + +typedef struct tag_mode_1 +{ + UINT8 len; + t_tag_comp comp_data[AC_MODE_MAX]; +} t_mode_1; + +typedef struct tag_speed_1 +{ + UINT8 len; + t_tag_comp comp_data[AC_WS_MAX]; +} t_speed_1; + +typedef struct tag_swing_1 +{ + UINT8 len; + UINT16 count; + t_tag_comp *comp_data; +} t_swing_1; + +typedef struct tag_temp_2 +{ + UINT8 len; + UINT8 type; + t_tag_comp comp_data[AC_TEMP_MAX]; +} t_temp_2; + +typedef struct tag_mode_2 +{ + UINT8 len; + t_tag_comp comp_data[AC_MODE_MAX]; +} t_mode_2; + +typedef struct tag_speed_2 +{ + UINT8 len; + t_tag_comp comp_data[AC_WS_MAX]; +} t_speed_2; + +typedef struct tag_swing_2 +{ + UINT8 len; + UINT16 count; + t_tag_comp *comp_data; +} t_swing_2; + +#if defined SUPPORT_HORIZONTAL_SWING +typedef struct tag_horiswing_1 +{ + UINT16 len; + t_tag_comp comp_data[AC_HORI_SWING_MAX]; +} hori_swing_1; +#endif + +typedef struct _tag_checksum_data +{ + UINT8 len; + UINT8 type; + UINT8 start_byte_pos; + UINT8 end_byte_pos; + UINT8 checksum_byte_pos; + UINT8 checksum_plus; + UINT8 *spec_pos; +} t_tag_checksum_data; + +typedef struct tag_checksum +{ + UINT8 len; + UINT16 count; + t_tag_checksum_data *checksum_data; +} t_checksum; + +typedef struct tag_function_1 +{ + UINT8 len; + t_tag_comp comp_data[AC_FUNCTION_MAX - 1]; +} t_function_1; + +typedef struct tag_function_2 +{ + UINT8 len; + t_tag_comp comp_data[AC_FUNCTION_MAX - 1]; +} t_function_2; + +typedef struct tag_solo_code +{ + UINT8 len; + UINT8 solo_func_count; + UINT8 solo_function_codes[AC_FUNCTION_MAX - 1]; +} t_solo_code; + +typedef struct _ac_bitnum +{ + INT16 pos; + UINT16 bits; +} t_ac_bit_num; + +typedef enum +{ + N_COOL = 0, + N_HEAT, + N_AUTO, + N_FAN, + N_DRY, + N_MODE_MAX, +} t_ac_n_mode; + +typedef enum +{ + CHECKSUM_TYPE_BYTE = 1, + CHECKSUM_TYPE_BYTE_INVERSE, + CHECKSUM_TYPE_HALF_BYTE, + CHECKSUM_TYPE_HALF_BYTE_INVERSE, + CHECKSUM_TYPE_SPEC_HALF_BYTE, + CHECKSUM_TYPE_SPEC_HALF_BYTE_INVERSE, + CHECKSUM_TYPE_SPEC_HALF_BYTE_ONE_BYTE, + CHECKSUM_TYPE_SPEC_HALF_BYTE_INVERSE_ONE_BYTE, + CHECKSUM_TYPE_MAX, +} t_checksum_type; + +typedef struct _ac_n_mode_info +{ + UINT8 enable; + UINT8 all_speed; + UINT8 all_temp; + UINT8 temp[AC_TEMP_MAX]; + UINT8 temp_cnt; + UINT8 speed[AC_WS_MAX]; + UINT8 speed_cnt; +} t_ac_n_mode_info; + +typedef struct ac_protocol +{ + UINT8 endian; + // t_ac_hex default_code; + t_ac_hex default_code; + t_ac_level zero; + t_ac_level one; + t_ac_bootcode boot_code; + t_ac_delaycode dc[MAX_DELAYCODE_NUM]; + t_power_1 power1; + t_temp_1 temp1; + t_mode_1 mode1; + t_speed_1 speed1; + t_swing_1 swing1; + t_checksum checksum; + + t_function_1 function1; + t_function_2 function2; + + t_temp_2 temp2; + t_mode_2 mode2; + t_speed_2 speed2; + t_swing_2 swing2; + + t_swing_info si; + t_solo_code sc; + + UINT8 swing_status; + + BOOL change_wind_direction; + + UINT16 dc_cnt; + t_ac_bit_num bit_num[MAX_BITNUM]; + UINT16 bit_num_cnt; + UINT16 repeat_times; + t_ac_n_mode_info n_mode[N_MODE_MAX]; + UINT16 code_cnt; + UINT8 last_bit; + UINT16 *time; + UINT8 solo_function_mark; + + UINT16 frame_length; +} t_ac_protocol; + +typedef struct tag_head +{ + UINT16 tag; + UINT16 len; + UINT16 offset; + UINT8 *p_data; +} t_tag_head; + +struct ir_bin_buffer +{ + UINT8 *data; + UINT16 len; + UINT16 offset; +}; + +typedef struct REMOTE_AC_STATUS +{ + t_ac_power ac_power; + t_ac_temperature ac_temp; + t_ac_mode ac_mode; + t_ac_swing ac_wind_dir; + t_ac_wind_speed ac_wind_speed; + UINT8 ac_display; + UINT8 ac_sleep; + UINT8 ac_timer; +} t_remote_ac_status; + +// function polymorphism +typedef INT8 (*lp_apply_ac_parameter)(t_remote_ac_status ac_status, UINT8 function_code); + +#define TAG_AC_BOOT_CODE 1 +#define TAG_AC_ZERO 2 +#define TAG_AC_ONE 3 +#define TAG_AC_DELAY_CODE 4 +#define TAG_AC_FRAME_LENGTH 5 +#define TAG_AC_ENDIAN 6 +#define TAG_AC_LAST_BIT 7 + +#define TAG_AC_POWER_1 21 +#define TAG_AC_DEFAULT_CODE 22 +#define TAG_AC_TEMP_1 23 +#define TAG_AC_MODE_1 24 +#define TAG_AC_SPEED_1 25 +#define TAG_AC_SWING_1 26 +#define TAG_AC_CHECKSUM_TYPE 27 +#define TAG_AC_SOLO_FUNCTION 28 +#define TAG_AC_FUNCTION_1 29 +#define TAG_AC_TEMP_2 30 +#define TAG_AC_MODE_2 31 +#define TAG_AC_SPEED_2 32 +#define TAG_AC_SWING_2 33 +#define TAG_AC_FUNCTION_2 34 + +#define TAG_AC_BAN_FUNCTION_IN_COOL_MODE 41 +#define TAG_AC_BAN_FUNCTION_IN_HEAT_MODE 42 +#define TAG_AC_BAN_FUNCTION_IN_AUTO_MODE 43 +#define TAG_AC_BAN_FUNCTION_IN_FAN_MODE 44 +#define TAG_AC_BAN_FUNCTION_IN_DRY_MODE 45 +#define TAG_AC_SWING_INFO 46 +#define TAG_AC_REPEAT_TIMES 47 +#define TAG_AC_BIT_NUM 48 + + +// definition about size + +#define PROTOCOL_SIZE (sizeof(t_ac_protocol)) + +/* exported variables */ +extern UINT8 *ir_hex_code; +extern UINT8 ir_hex_len; +extern t_ac_protocol *context; + + +extern INT8 ir_ac_lib_parse(); + +extern INT8 free_ac_context(); + +extern BOOL is_solo_function(UINT8 function_code); + +#ifdef __cplusplus +} +#endif + +#endif //IRDA_DECODER_IR_AC_CONTROL_H diff --git a/win32-example/DecodeTestWin/ir_decode.h b/win32-example/DecodeTestWin/ir_decode.h new file mode 100644 index 0000000..b2fff07 --- /dev/null +++ b/win32-example/DecodeTestWin/ir_decode.h @@ -0,0 +1,160 @@ +/************************************************************************************** +Filename: ir_decode.h +Revised: Date: 2016-10-01 +Revision: Revision: 1.0 + +Description: This file provides algorithms for IR decode + +Revision log: +* 2016-10-01: created by strawmanbobi +**************************************************************************************/ + +#ifndef _IRDA_DECODE_H_ +#define _IRDA_DECODE_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include "ir_defs.h" +#include "ir_ac_control.h" +#include "ir_tv_control.h" + +#define IR_DECODE_FAILED (-1) +#define IR_DECODE_SUCCEEDED (0) + +#define IR_CATEGORY_AC 1 +#define IR_CATEGORY_TV 2 + +#define IR_TYPE_STATUS 0 +#define IR_TYPE_COMMANDS 1 + +#define SUB_CATEGORY_QUATERNARY 0 +#define SUB_CATEGORY_HEXADECIMAL 1 + +// exported functions +/** + * function ir_file_open + * + * description: open IR binary code from file + * + * parameters: category (in) - category ID get from indexing API + * sub_category (in) - subcategory ID get from indexing API + * file_name (in) - file name of IR binary + * + * returns: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED + * + */ +extern INT8 ir_file_open(const UINT8 category, const UINT8 sub_category, const char* file_name); + +/** + * function ir_binary_open + * + * description: open IR binary code from buffer + * + * parameters: category (in) - category ID get from indexing API + * sub_category (in) - subcategory ID get from indexing API + * binary (in) - pointer to binary buffer + * binary_length (in) - binary buffer size + * + * returns: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED + */ +extern INT8 ir_binary_open(const UINT8 category, const UINT8 sub_category, UINT8* binary, UINT16 binary_length); + +/** + * function ir_decode + * + * description: decode IR binary into INT16 array which indicates the IR levels + * + * parameters: key_code (in) - the code of pressed key + * user_data (out) - output decoded data in INT16 array format + * ac_status(in) - pointer to AC status (optional) + * change_wind_direction (in) - if control changes wind direction for AC (for AC only) + * + * returns: length of decoded data (0 indicates decode failure) + */ +extern UINT16 ir_decode(UINT8 key_code, UINT16* user_data, t_remote_ac_status* ac_status, BOOL change_wind_direction); + +/** + * function ir_close + * + * description: close IR binary code + * + * parameters: N/A + * + * returns: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED + */ +extern INT8 ir_close(); + +/** + * function get_temperature_range + * + * description: get the supported temperature range [min, max] for the opened AC IR binary + * + * parameters: ac_mode (in) specify in which AC mode the application need to get temperature info + * temp_min (out) the min temperature supported in a specified AC mode + * temp_max (out) the max temperature supported in a specified AC mode + * + * returns: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED + */ +extern INT8 get_temperature_range(UINT8 ac_mode, INT8 *temp_min, INT8 *temp_max); + +/** + * function get_supported_mode + * + * description: get supported mode for the opened AC IR binary + * + * parameters: supported_mode (out) mode supported by the remote in lower 5 bits + * + * returns: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED + */ +extern INT8 get_supported_mode(UINT8 *supported_mode); + +/** + * function get_supported_wind_speed + * + * description: get supported wind speed levels for the opened AC IR binary in certain mode + * + * parameters: ac_mode (in) specify in which AC mode the application need to get wind speed info + * supported_wind_speed (out) wind speed supported by the remote in lower 4 bits + * + * returns: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED + */ +extern INT8 get_supported_wind_speed(UINT8 ac_mode, UINT8 *supported_wind_speed); + +/** + * function get_supported_swing + * + * description: get supported swing functions for the opened AC IR binary in certain mode + * + * parameters: ac_mode (in) specify in which AC mode the application need to get swing info + * supported_swing (out) swing supported by the remote in lower 2 bits + * + * returns: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED + */ +extern INT8 get_supported_swing(UINT8 ac_mode, UINT8 *supported_swing); + +/** + * function get_supported_wind_direction + * + * description: get supported wind directions for the opened AC IR binary in certain mode + * + * parameters: supported_wind_direction (out) swing supported by the remote in lower 2 bits + * + * returns: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED + */ +extern INT8 get_supported_wind_direction(UINT8 *supported_wind_direction); + + +// private extern function +#if (defined BOARD_PC || defined BOARD_PC_DLL) +extern void ir_lib_free_inner_buffer(); +#endif + +#ifdef __cplusplus +} +#endif + +#endif // _IRDA_DECODE_H_ diff --git a/win32-example/DecodeTestWin/ir_defs.h b/win32-example/DecodeTestWin/ir_defs.h new file mode 100644 index 0000000..b16e660 --- /dev/null +++ b/win32-example/DecodeTestWin/ir_defs.h @@ -0,0 +1,67 @@ +/************************************************************************************** +Filename: ir_defs.h +Revised: Date: 2016-10-26 +Revision: Revision: 1.0 + +Description: This file provides algorithms for IR decode + +Revision log: +* 2016-10-01: created by strawmanbobi +**************************************************************************************/ + +#ifndef PARSE_IR_DEFS_H +#define PARSE_IR_DEFS_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#if defined BOARD_ANDROID +#include +#define LOG_TAG "ir_decode" +#endif + +#if defined BOARD_CC26XX +#include "OSAL.h" +#endif + +#define TRUE 1 +#define FALSE 0 + +#define FORMAT_HEX 16 +#define FORMAT_DECIMAL 10 + + +typedef unsigned char UINT8; +typedef signed char INT8; +typedef unsigned short UINT16; +typedef signed short INT16; +typedef signed int INT; +typedef unsigned int UINT; +typedef int BOOL; + +void noprint(const char *fmt, ...); + +#if defined BOARD_CC26XX +#define ir_malloc(A) ICall_malloc(A) +#define ir_free(A) ICall_free(A) +#else +#define ir_malloc(A) malloc(A) +#define ir_free(A) free(A) +#endif + +#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 +} +#endif +#endif //PARSE_IR_DEFS_H diff --git a/win32-example/DecodeTestWin/ir_tv_control.h b/win32-example/DecodeTestWin/ir_tv_control.h new file mode 100644 index 0000000..50dfaf4 --- /dev/null +++ b/win32-example/DecodeTestWin/ir_tv_control.h @@ -0,0 +1,215 @@ +/************************************************************************************** +Filename: ir_lib.h +Revised: Date: 2016-02-23 +Revision: Revision: 1.0 + +Description: This file provides algorithms for IR decode (compressed command type) + +Revision log: +* 2016-10-21: created by strawmanbobi +**************************************************************************************/ + +#ifndef _IRDA_LIB_H_ +#define _IRDA_LIB_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "ir_defs.h" + +#define STB_CHANNEL_OFFSET 14 + +#define IRDA_FLAG_NORMAL 0 +#define IRDA_FLAG_INVERSE 1 + +#define IRDA_LEVEL_LOW 0 +#define IRDA_LEVEL_HIGH 1 + +#define IRDA_LSB 0 +#define IRDA_MSB 1 + +enum +{ + IRDA_DECODE_1_BIT = 0, + IRDA_DECODE_2_BITS, + IRDA_DECODE_4_BITS, +}; + +/* + * global type definitions + */ +typedef enum ir_flags +{ + IRDA_BOOT = 0, + IRDA_STOP, + IRDA_SEP, + IRDA_ONE, + IRDA_ZERO, + IRDA_FLIP, + IRDA_TWO, + IRDA_THREE = 7, + IRDA_FOUR, + IRDA_FIVE, + IRDA_SIX, + IRDA_SEVEN, + IRDA_EIGHT, + IRDA_NINE, + IRDA_A, + IRDA_B, + IRDA_C, + IRDA_D, + IRDA_E, + IRDA_F, + IRDA_MAX = 20, +} t_ir_flags; + +typedef struct ir_data +{ + UINT8 bits; + UINT8 lsb; + UINT8 mode; + UINT8 index; +} t_ir_data; + +#if !defined BOARD_51 && !defined BOARD_STM8 +#pragma pack(1) +#endif +typedef struct ir_cycles +{ + UINT8 flag; + UINT16 mask; + UINT16 space; +} t_ir_cycles; + +#if !defined BOARD_51 && !defined BOARD_STM8 +#pragma pack() +#endif + +typedef enum tv_key_value +{ + TV_POWER = 0, + TV_MUTE, + TV_UP, + TV_DOWN, + TV_LEFT, + TV_RIGHT, + TV_OK, + TV_VOL_UP, + TV_VOL_DOWN, + TV_BACK, + TV_INPUT, + TV_MENU, + TV_HOME, + TV_SET, + TV_0, + TV_1, + TV_2, + TV_3, + TV_4, + TV_5, + TV_6, + TV_7, + TV_8, + TV_9, + TV_KEY_MAX, +} t_tv_key_value; + + +typedef enum stb_key_value +{ + STB_POWER = 0, + STB_MUTE, + STB_UP, + STB_DOWN, + STB_LEFT, + STB_RIGHT, + STB_OK, + STB_VOL_UP, + STB_VOL_DOWN, + STB_BACK, + STB_INPUT, + STB_MENU, + STB_PAGE_UP, + STB_PAGE_DOWN, + STB_0, + STB_1, + STB_2, + STB_3, + STB_4, + STB_5, + STB_6, + STB_7, + STB_8, + STB_9, + STB_KEY_MAX, +} t_stb_key_value; + +typedef enum nw_key_value +{ + NW_POWER = 0, + NW_UP, + NW_DOWN, + NW_LEFT, + NW_RIGHT, + NW_OK, + NW_VOL_UP, + NW_VOL_DOWN, + NW_BACK, + NW_MENU, + NW_HOME, + NW_0, + NW_1, + NW_2, + NW_3, + NW_4, + NW_5, + NW_6, + NW_7, + NW_8, + NW_9, + NW_KEY_MAX, +} t_nw_key_value; + +typedef enum cm_key_value +{ + CM_POWER = 0, + CM_UP, + CM_DOWN, + CM_LEFT, + CM_RIGHT, + CM_OK, + CM_VOL_UP, + CM_VOL_DOWN, + CM_FUNC_1, + CM_FUNC_2, + CM_FUNC_3, + CM_BACK, + CM_HOME, + CM_MENU, + CM_MODE, + CM_KEY_MAX, +} t_cm_key_value; + +typedef struct ir_data_tv +{ + char magic[4]; + UINT8 per_keycode_bytes; +} t_ir_data_tv; + + +extern INT8 tv_lib_open(UINT8 *binary, UINT16 binary_length); + +extern BOOL tv_lib_parse(UINT8 encode_type); + +extern UINT16 tv_lib_control(UINT8 key, UINT16 *user_data); + +extern UINT8 tv_lib_close(); + +#ifdef __cplusplus +} +#endif + +#endif /* _IRDA_LIB_H_ */ + diff --git a/win32-example/DecodeTestWin/irda_decode.h b/win32-example/DecodeTestWin/irda_decode.h deleted file mode 100644 index c8d0322..0000000 --- a/win32-example/DecodeTestWin/irda_decode.h +++ /dev/null @@ -1,605 +0,0 @@ -/************************************************************************************************** -Filename: irda_decode.h -Revised: Date: 2016-10-01 -Revision: Revision: 1.0 - -Description: This file provides algorithms for IR decode - -Revision log: -* 2016-10-01: created by strawmanbobi -**************************************************************************************************/ - -#ifndef _IRDA_DECODE_H_ -#define _IRDA_DECODE_H_ - -#ifdef __cplusplus -extern "C" -{ -#endif - -#include -#include "irda_defs.h" - -#define TAG_COUNT_FOR_PROTOCOL 29 - -#define EXPECTED_MEM_SIZE 1024 - -#define TAG_INVALID 0xffff -#define MAX_DELAYCODE_NUM 16 -#define MAX_BITNUM 16 - -#define IR_DECODE_FAILED (-1) -#define IR_DECODE_SUCCEEDED (0) - -#define AC_PARAMETER_TYPE_1 0 -#define AC_PARAMETER_TYPE_2 1 - -typedef enum -{ - AC_POWER_ON = 0, - AC_POWER_OFF, - AC_POWER_MAX -} ac_power; - -typedef enum -{ - AC_TEMP_16 = 0, - AC_TEMP_17, - AC_TEMP_18, - AC_TEMP_19, - AC_TEMP_20, - AC_TEMP_21, - AC_TEMP_22, - AC_TEMP_23, - AC_TEMP_24, - AC_TEMP_25, - AC_TEMP_26, - AC_TEMP_27, - AC_TEMP_28, - AC_TEMP_29, - AC_TEMP_30, - AC_TEMP_MAX -} ac_temperature; - -typedef enum -{ - AC_MODE_COOL = 0, - AC_MODE_HEAT, - AC_MODE_AUTO, - AC_MODE_FAN, - AC_MODE_DRY, - AC_MODE_MAX -} ac_mode; - -typedef enum -{ - AC_FUNCTION_POWER = 1, - AC_FUNCTION_MODE, - AC_FUNCTION_TEMPERATURE_UP, - AC_FUNCTION_TEMPERATURE_DOWN, - AC_FUNCTION_WIND_SPEED, - AC_FUNCTION_WIND_SWING, - AC_FUNCTION_WIND_FIX, - AC_FUNCTION_MAX, -} ac_function; - -typedef enum -{ - AC_WS_AUTO = 0, - AC_WS_LOW, - AC_WS_MEDIUM, - AC_WS_HIGH, - AC_WS_MAX -} ac_wind_speed; - -typedef enum -{ - AC_SWING_ON = 0, - AC_SWING_OFF, - AC_SWING_MAX -} ac_swing; - -typedef enum -{ - SWING_TYPE_SWING_ONLY = 0, - SWING_TYPE_NORMAL, - SWING_TYPE_NOT_SPECIFIED, - SWING_TYPE_MAX -} swing_type; - -typedef enum -{ - TEMP_TYPE_DYNAMIC = 0, - TEMP_TYPE_STATIC, - TEMP_TYPE_MAX, -} temp_type; - -// enumeration for application polymorphism -typedef enum -{ - AC_APPLY_POWER = 0, - AC_APPLY_MODE, - AC_APPLY_TEMPERATURE_UP, - AC_APPLY_TEMPERATURE_DOWN, - AC_APPLY_WIND_SPEED, - AC_APPLY_WIND_SWING, - AC_APPLY_WIND_FIX, - AC_APPLY_MAX -} ac_apply; - -typedef struct _ac_hex -{ - UINT8 len; - UINT8 *data; -} ac_hex; - -typedef struct _ac_level -{ - UINT16 low; - UINT16 high; -} ac_level; - -typedef struct _ac_bootcode -{ - UINT16 len; - UINT16 data[16]; -} ac_bootcode; - -typedef struct _ac_delaycode -{ - INT16 pos; - UINT16 time[8]; - UINT16 time_cnt; -} ac_delaycode; - -/* - * the array of tag_100X application data - * seg_len : length for each segment - * byte_pos : the position of update byte - * byte_value : the value to be updated to position - */ -typedef struct _tag_comp_type_1 -{ - UINT8 seg_len; - UINT8 *segment; -} tag_comp; - -typedef struct _tag_swing_info -{ - swing_type type; - UINT8 mode_count; - UINT8 dir_index; -} swing_info; - -typedef struct _tag_power_1 -{ - UINT8 len; - tag_comp comp_data[AC_POWER_MAX]; -} power_1; - -typedef struct _tag_temp_1 -{ - UINT8 len; - UINT8 type; - tag_comp comp_data[AC_TEMP_MAX]; -} temp_1; - -typedef struct tag_mode_1 -{ - UINT8 len; - tag_comp comp_data[AC_MODE_MAX]; -} mode_1; - -typedef struct tag_speed_1 -{ - UINT8 len; - tag_comp comp_data[AC_WS_MAX]; -} speed_1; - -typedef struct tag_swing_1 -{ - UINT8 len; - UINT16 count; - tag_comp *comp_data; -} swing_1; - -typedef struct tag_temp_2 -{ - UINT8 len; - UINT8 type; - tag_comp comp_data[AC_TEMP_MAX]; -} temp_2; - -typedef struct tag_mode_2 -{ - UINT8 len; - tag_comp comp_data[AC_MODE_MAX]; -} mode_2; - -typedef struct tag_speed_2 -{ - UINT8 len; - tag_comp comp_data[AC_WS_MAX]; -} speed_2; - -typedef struct tag_swing_2 -{ - UINT8 len; - UINT16 count; - tag_comp *comp_data; -} swing_2; - -#if defined SUPPORT_HORIZONTAL_SWING -typedef struct tag_horiswing_1 -{ - UINT16 len; - tag_comp comp_data[AC_HORI_SWING_MAX]; -} hori_swing_1; -#endif - -typedef struct _tag_checksum_data -{ - UINT8 len; - UINT8 type; - UINT8 start_byte_pos; - UINT8 end_byte_pos; - UINT8 checksum_byte_pos; - UINT8 checksum_plus; - UINT8 *spec_pos; -} tag_checksum_data; - -typedef struct tag_checksum -{ - UINT8 len; - UINT16 count; - tag_checksum_data *checksum_data; -} tchecksum; - -typedef struct tag_function_1 -{ - UINT8 len; - tag_comp comp_data[AC_FUNCTION_MAX - 1]; -} function_1; - -typedef struct tag_function_2 -{ - UINT8 len; - tag_comp comp_data[AC_FUNCTION_MAX - 1]; -} function_2; - -typedef struct tag_solo_code -{ - UINT8 len; - UINT8 solo_func_count; - UINT8 solo_function_codes[AC_FUNCTION_MAX - 1]; -} solo_code; - -typedef struct _ac_bitnum -{ - INT16 pos; - UINT16 bits; -} ac_bitnum; - -typedef enum -{ - N_COOL = 0, - N_HEAT, - N_AUTO, - N_FAN, - N_DRY, - N_MODE_MAX, -} ac_n_mode; - -typedef enum -{ - CHECKSUM_TYPE_BYTE = 1, - CHECKSUM_TYPE_BYTE_INVERSE, - CHECKSUM_TYPE_HALF_BYTE, - CHECKSUM_TYPE_HALF_BYTE_INVERSE, - CHECKSUM_TYPE_SPEC_HALF_BYTE, - CHECKSUM_TYPE_SPEC_HALF_BYTE_INVERSE, - CHECKSUM_TYPE_SPEC_HALF_BYTE_ONE_BYTE, - CHECKSUM_TYPE_SPEC_HALF_BYTE_INVERSE_ONE_BYTE, - CHECKSUM_TYPE_MAX, -} checksum_type; - -typedef struct _ac_n_mode_info -{ - UINT8 enable; - UINT8 allspeed; - UINT8 alltemp; - UINT8 temp[AC_TEMP_MAX]; - UINT8 temp_cnt; - UINT8 speed[AC_WS_MAX]; - UINT8 speed_cnt; -} ac_n_mode_info; - -typedef struct ac_protocol -{ - UINT8 endian; - // ac_hex default_code; - ac_hex default_code; - ac_level zero; - ac_level one; - ac_bootcode bootcode; - ac_delaycode dc[MAX_DELAYCODE_NUM]; - power_1 power1; - temp_1 temp1; - mode_1 mode1; - speed_1 speed1; - swing_1 swing1; - tchecksum checksum; - - function_1 function1; - function_2 function2; - - temp_2 temp2; - mode_2 mode2; - speed_2 speed2; - swing_2 swing2; - - swing_info si; - solo_code sc; - - UINT8 swing_status; - - BOOL change_wind_direction; - - UINT16 dc_cnt; - ac_bitnum bitnum[MAX_BITNUM]; - UINT16 bitnum_cnt; - UINT16 repeat_times; - UINT16 frame_length; - ac_n_mode_info n_mode[N_MODE_MAX]; - UINT16 code_cnt; - UINT8 lastbit; - UINT16 *time; - UINT8 solo_function_mark; -} protocol; - -typedef struct tag_head -{ - UINT16 tag; - UINT16 len; - unsigned short offset; - UINT8 *pdata; -} t_tag_head; - -struct ir_bin_buffer -{ - UINT8 *data; - UINT16 len; - UINT16 offset; -}; - -typedef struct REMOTE_AC_STATUS -{ - UINT8 acPower; - UINT8 acTemp; - UINT8 acMode; - UINT8 acWindDir; - UINT8 acWindSpeed; - UINT8 acDisplay; - UINT8 acSleep; - UINT8 acTimer; -} remote_ac_status_t; - -// function polymorphism -typedef INT8 (*lp_apply_ac_parameter) (remote_ac_status_t ac_status, UINT8 function_code); - - - - -#define TAG_AC_BOOT_CODE 1 -#define TAG_AC_ZERO 2 -#define TAG_AC_ONE 3 -#define TAG_AC_DELAY_CODE 4 -#define TAG_AC_FRAME_LENGTH 5 -#define TAG_AC_ENDIAN 6 -#define TAG_AC_LASTBIT 7 - -#define TAG_AC_POWER_1 21 -#define TAG_AC_DEFAULT_CODE 22 -#define TAG_AC_TEMP_1 23 -#define TAG_AC_MODE_1 24 -#define TAG_AC_SPEED_1 25 -#define TAG_AC_SWING_1 26 -#define TAG_AC_CHECKSUM_TYPE 27 -#define TAG_AC_SOLO_FUNCTION 28 -#define TAG_AC_FUNCTION_1 29 -#define TAG_AC_TEMP_2 30 -#define TAG_AC_MODE_2 31 -#define TAG_AC_SPEED_2 32 -#define TAG_AC_SWING_2 33 -#define TAG_AC_FUNCTION_2 34 - -#define TAG_AC_BAN_FUNCTION_IN_COOL_MODE 41 -#define TAG_AC_BAN_FUNCTION_IN_HEAT_MODE 42 -#define TAG_AC_BAN_FUNCTION_IN_AUTO_MODE 43 -#define TAG_AC_BAN_FUNCTION_IN_FAN_MODE 44 -#define TAG_AC_BAN_FUNCTION_IN_DRY_MODE 45 -#define TAG_AC_SWING_INFO 46 -#define TAG_AC_REPEAT_TIMES 47 -#define TAG_AC_BITNUM 48 - - -// definition about size - -#define PROTOCOL_SIZE (sizeof(protocol)) - -/* exported variables */ -extern UINT8* ir_hex_code; -extern UINT8 ir_hex_len; -extern protocol* context; -extern remote_ac_status_t ac_status; -extern UINT16 user_data[]; - - -/* exported functions */ -///////////////////////////////////////////////// AC Begin ///////////////////////////////////////////////// -/* - * function irda_context_init - * - * parameters: - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 irda_context_init(); - -/* - * function irda_ac_file_open - * - * parameters: file name of remote binary - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 irda_ac_file_open(const char* file_name); - -/* - * function irda_ac_lib_open - * - * parameters: binary (in) binary content - * binary_length (in) length of binary content - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 irda_ac_lib_open(UINT8 *binary, UINT16 binary_length); - -/* - * function irda_ac_lib_parse - * - * parameters: - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 irda_ac_lib_parse(); - -/* - * function irda_ac_lib_control - * - * parameters: ac_status (in) indicates the current status of air conditioner to be controlled - * user_data (out) wave code array to be transmitted - * function_code (in) indicates the AC function to be updated - * change_wind_direction (in) indicates if the wind direction need to be changed - * - * return: length of wave code array - */ -extern UINT16 irda_ac_lib_control(remote_ac_status_t ac_status, UINT16 *user_data, UINT8 function_code, - BOOL change_wind_direction); - -/* - * function irda_ac_lib_close - * - * parameters: - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern void irda_ac_lib_close(); -///////////////////////////////////////////////// AC End ///////////////////////////////////////////////// - -///////////////////////////////////////////////// TV Begin ///////////////////////////////////////////////// -/* - * function irda_tv_file_open - * - * parameters: file name of remote binary - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -INT8 irda_tv_file_open(const char* file_name); - -/* - * function irda_tv_lib_open - * - * parameters: binary (in) binary content - * binary_length (in) length of binary content - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -INT8 irda_tv_lib_open(UINT8 *binary, UINT16 binary_length); - -/* - * function irda_tv_lib_parse - * - * parameters: - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 irda_tv_lib_parse(UINT8 irda_hex_encode); - -/* - * function irda_tv_lib_control - * - * parameters: key_code (in) indicates the number of pressed key - * user_data (out) wave code array to be transmitted - * - * return: length of wave code array - */ -extern UINT16 irda_tv_lib_control(UINT8 key_code, UINT16* user_data); - -/* - * function irda_tv_lib_close - * - * parameters: - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 irda_tv_lib_close(); -///////////////////////////////////////////////// TV End ///////////////////////////////////////////////// - -///////////////////////////////////////////////// Utils Begin ///////////////////////////////////////////////// -/* - * function get_temperature_range - * - * parameters: ac_mode (in) specify in which AC mode the application need to get temperature info - * temp_min (out) the min temperature supported in a specified AC mode - * temp_max (out) the max temperature supported in a specified AC mode - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 get_temperature_range(UINT8 ac_mode, INT8* temp_min, INT8* temp_max); - -/* - * function get_supported_mode - * - * parameters: supported_mode (out) mode supported by the remote in lower 5 bits - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 get_supported_mode(UINT8* supported_mode); - -/* - * function get_supported_wind_speed - * - * parameters: ac_mode (in) specify in which AC mode the application need to get wind speed info - * supported_wind_speed (out) wind speed supported by the remote in lower 4 bits - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 get_supported_wind_speed(UINT8 ac_mode, UINT8* supported_wind_speed); - -/* - * function get_supported_swing - * - * parameters: ac_mode (in) specify in which AC mode the application need to get swing info - * supported_swing (out) swing supported by the remote in lower 2 bits - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 get_supported_swing(UINT8 ac_mode, UINT8* supported_swing); - -/* - * function get_supported_wind_direction - * - * parameters: supported_wind_direction (out) swing supported by the remote in lower 2 bits - * - * return: IR_DECODE_SUCCEEDED / IR_DECODE_FAILED - */ -extern INT8 get_supported_wind_direction(UINT8* supported_wind_direction); - -///////////////////////////////////////////////// Utils End ///////////////////////////////////////////////// - -#ifdef __cplusplus -} -#endif - -#endif // _IRDA_DECODE_H_ diff --git a/win32-example/DecodeTestWin/irda_defs.h b/win32-example/DecodeTestWin/irda_defs.h deleted file mode 100644 index d6cb9b4..0000000 --- a/win32-example/DecodeTestWin/irda_defs.h +++ /dev/null @@ -1,45 +0,0 @@ -/************************************************************************************************** -Filename: irda_defs.h -Revised: Date: 2016-10-26 -Revision: Revision: 1.0 - -Description: This file provides algorithms for IR decode - -Revision log: -* 2016-10-01: created by strawmanbobi -**************************************************************************************************/ - -#ifndef PARSE_IR_DEFS_H -#define PARSE_IR_DEFS_H - -#ifdef __cplusplus -extern "C" -{ -#endif - -#if defined BOARD_ANDROID -#include -#define LOG_TAG "irda_decode" -#endif - -#define TRUE 1 -#define FALSE 0 - -typedef unsigned char UINT8; -typedef signed char INT8; -typedef unsigned short UINT16; -typedef signed short INT16; -typedef int BOOL; - -#define irda_malloc(A) malloc(A) -#define irda_free(A) free(A) -#define irda_memcpy(A, B, C) memcpy(A, B, C) -#define irda_memset(A, B, C) memset(A, B, C) -#define irda_strlen(A) strlen(A) -#define IR_PRINTF printf -#define USER_DATA_SIZE 2048 - -#ifdef __cplusplus -} -#endif -#endif //PARSE_IR_DEFS_H