updated decode algorithms from CC26XX example
This commit is contained in:
@@ -357,7 +357,7 @@ typedef struct tag_head
|
|||||||
{
|
{
|
||||||
UINT16 tag;
|
UINT16 tag;
|
||||||
UINT16 len;
|
UINT16 len;
|
||||||
unsigned short offset;
|
UINT16 offset;
|
||||||
UINT8 *p_data;
|
UINT8 *p_data;
|
||||||
} t_tag_head;
|
} t_tag_head;
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ extern "C"
|
|||||||
#define TRUE 1
|
#define TRUE 1
|
||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
|
|
||||||
|
#define FORMAT_HEX 16
|
||||||
|
#define FORMAT_DECIMAL 10
|
||||||
|
|
||||||
|
|
||||||
typedef unsigned char UINT8;
|
typedef unsigned char UINT8;
|
||||||
typedef signed char INT8;
|
typedef signed char INT8;
|
||||||
typedef unsigned short UINT16;
|
typedef unsigned short UINT16;
|
||||||
@@ -39,12 +43,12 @@ typedef int BOOL;
|
|||||||
|
|
||||||
void noprint(const char *fmt, ...);
|
void noprint(const char *fmt, ...);
|
||||||
|
|
||||||
#if !defined BOARD_CC26XX
|
#if defined BOARD_CC26XX
|
||||||
#define ir_malloc(A) malloc(A)
|
|
||||||
#define ir_free(A) free(A)
|
|
||||||
#else
|
|
||||||
#define ir_malloc(A) ICall_malloc(A)
|
#define ir_malloc(A) ICall_malloc(A)
|
||||||
#define ir_free(A) ICall_free(A)
|
#define ir_free(A) ICall_free(A)
|
||||||
|
#else
|
||||||
|
#define ir_malloc(A) malloc(A)
|
||||||
|
#define ir_free(A) free(A)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ir_memcpy(A, B, C) memcpy(A, B, C)
|
#define ir_memcpy(A, B, C) memcpy(A, B, C)
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ typedef struct ir_data
|
|||||||
UINT8 index;
|
UINT8 index;
|
||||||
} t_ir_data;
|
} t_ir_data;
|
||||||
|
|
||||||
#if !defined BOARD_51
|
#if !defined BOARD_51 && !defined BOARD_STM8
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
#endif
|
#endif
|
||||||
typedef struct ir_cycles
|
typedef struct ir_cycles
|
||||||
@@ -83,7 +83,7 @@ typedef struct ir_cycles
|
|||||||
UINT16 space;
|
UINT16 space;
|
||||||
} t_ir_cycles;
|
} t_ir_cycles;
|
||||||
|
|
||||||
#if !defined BOARD_51
|
#if !defined BOARD_51 && !defined BOARD_STM8
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -9,15 +9,18 @@ Revision log:
|
|||||||
* 2017-01-03: created by strawmanbobi
|
* 2017-01-03: created by strawmanbobi
|
||||||
**************************************************************************************/
|
**************************************************************************************/
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "../include/ir_ac_binary_parse.h"
|
#include "../include/ir_ac_binary_parse.h"
|
||||||
#include "../include/ir_decode.h"
|
#include "../include/ir_decode.h"
|
||||||
|
|
||||||
UINT16 tag_head_offset = 0;
|
UINT16 tag_head_offset = 0;
|
||||||
|
|
||||||
extern struct ir_bin_buffer *p_ir_buffer;
|
extern struct ir_bin_buffer *p_ir_buffer;
|
||||||
extern struct tag_head *tags;
|
|
||||||
|
#if defined USE_DYNAMIC_TAG
|
||||||
|
extern struct tag_head* tags;
|
||||||
|
#else
|
||||||
|
extern struct tag_head tags[];
|
||||||
|
#endif
|
||||||
|
|
||||||
UINT8 tag_count = 0;
|
UINT8 tag_count = 0;
|
||||||
const UINT16 tag_index[TAG_COUNT_FOR_PROTOCOL] =
|
const UINT16 tag_index[TAG_COUNT_FOR_PROTOCOL] =
|
||||||
@@ -30,7 +33,11 @@ const UINT16 tag_index[TAG_COUNT_FOR_PROTOCOL] =
|
|||||||
INT8 binary_parse_offset()
|
INT8 binary_parse_offset()
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
UINT16 *phead = (UINT16 *) &p_ir_buffer->data[1];
|
#if defined BOARD_ESP8266
|
||||||
|
UINT8 *phead = (UINT8 *)&p_ir_buffer->data[1];
|
||||||
|
#else
|
||||||
|
UINT16 *phead = (UINT16 *)&p_ir_buffer->data[1];
|
||||||
|
#endif // BOARD_ESP8266
|
||||||
|
|
||||||
tag_count = p_ir_buffer->data[0];
|
tag_count = p_ir_buffer->data[0];
|
||||||
if (TAG_COUNT_FOR_PROTOCOL != tag_count)
|
if (TAG_COUNT_FOR_PROTOCOL != tag_count)
|
||||||
@@ -40,16 +47,29 @@ INT8 binary_parse_offset()
|
|||||||
|
|
||||||
tag_head_offset = (UINT16) ((tag_count << 1) + 1);
|
tag_head_offset = (UINT16) ((tag_count << 1) + 1);
|
||||||
|
|
||||||
|
#if defined USE_DYNAMIC_TAG
|
||||||
tags = (t_tag_head *) ir_malloc(tag_count * sizeof(t_tag_head));
|
tags = (t_tag_head *) ir_malloc(tag_count * sizeof(t_tag_head));
|
||||||
|
|
||||||
if (NULL == tags)
|
if (NULL == tags)
|
||||||
{
|
{
|
||||||
return IR_DECODE_FAILED;
|
return IR_DECODE_FAILED;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
for (i = 0; i < tag_count; i++)
|
for (i = 0; i < tag_count; i++)
|
||||||
{
|
{
|
||||||
tags[i].tag = tag_index[i];
|
tags[i].tag = tag_index[i];
|
||||||
|
|
||||||
|
#if defined BOARD_STM8 && defined COMPILER_IAR
|
||||||
|
UINT16 offset = *(phead + i);
|
||||||
|
tags[i].offset = (offset >> 8) | (offset << 8);
|
||||||
|
#elif defined BOARD_ESP8266
|
||||||
|
UINT16 tmp_a = *(phead + i * 2);
|
||||||
|
UINT16 tmp_b = *(phead + i * 2 + 1);
|
||||||
|
tags[i].offset = tmp_b << 8 | tmp_a;
|
||||||
|
#else
|
||||||
tags[i].offset = *(phead + i);
|
tags[i].offset = *(phead + i);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (tags[i].offset == TAG_INVALID)
|
if (tags[i].offset == TAG_INVALID)
|
||||||
{
|
{
|
||||||
@@ -96,7 +116,7 @@ INT8 binary_parse_len()
|
|||||||
|
|
||||||
void binary_tags_info()
|
void binary_tags_info()
|
||||||
{
|
{
|
||||||
#if defined BOARD_PC
|
#if defined BOARD_PC && defined DEBUG
|
||||||
UINT16 i = 0;
|
UINT16 i = 0;
|
||||||
for (i = 0; i < tag_count; i++)
|
for (i = 0; i < tag_count; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -141,5 +141,3 @@ UINT16 create_ir_frame()
|
|||||||
|
|
||||||
return context->code_cnt;
|
return context->code_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,12 @@ Revision log:
|
|||||||
#include "../include/ir_utils.h"
|
#include "../include/ir_utils.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if defined USE_DYNAMIC_TAG
|
||||||
extern struct tag_head *tags;
|
extern struct tag_head *tags;
|
||||||
|
#else
|
||||||
|
extern struct tag_head tags[];
|
||||||
|
#endif
|
||||||
|
|
||||||
extern UINT8 tag_count;
|
extern UINT8 tag_count;
|
||||||
|
|
||||||
static INT8 ir_context_init();
|
static INT8 ir_context_init();
|
||||||
@@ -88,6 +93,7 @@ INT8 ir_ac_lib_parse()
|
|||||||
context->si.mode_count = 2;
|
context->si.mode_count = 2;
|
||||||
}
|
}
|
||||||
context->si.dir_index = 0;
|
context->si.dir_index = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -359,11 +365,13 @@ INT8 ir_ac_lib_parse()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined USE_DYNAMIC_TAG
|
||||||
if (NULL != tags)
|
if (NULL != tags)
|
||||||
{
|
{
|
||||||
ir_free(tags);
|
ir_free(tags);
|
||||||
tags = NULL;
|
tags = NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ir_hex_code = (UINT8 *) ir_malloc(context->default_code.len);
|
ir_hex_code = (UINT8 *) ir_malloc(context->default_code.len);
|
||||||
if (NULL == ir_hex_code)
|
if (NULL == ir_hex_code)
|
||||||
|
|||||||
@@ -96,7 +96,6 @@ INT8 parse_common_ac_parameter(t_tag_head *tag, t_tag_comp *comp_data, UINT8 wit
|
|||||||
string_to_hex_common(tag->p_data, hex_data, hex_len);
|
string_to_hex_common(tag->p_data, hex_data, hex_len);
|
||||||
|
|
||||||
// parse hex data to AC data structure
|
// parse hex data to AC data structure
|
||||||
//*comp_len = hex_len;
|
|
||||||
|
|
||||||
if (AC_PARAMETER_TYPE_1 == type)
|
if (AC_PARAMETER_TYPE_1 == type)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,8 +21,12 @@ Revision log:
|
|||||||
|
|
||||||
struct ir_bin_buffer binary_file;
|
struct ir_bin_buffer binary_file;
|
||||||
struct ir_bin_buffer *p_ir_buffer = &binary_file;
|
struct ir_bin_buffer *p_ir_buffer = &binary_file;
|
||||||
struct tag_head *tags;
|
|
||||||
|
|
||||||
|
#if defined USE_DYNAMIC_TAG
|
||||||
|
struct tag_head *tags;
|
||||||
|
#else
|
||||||
|
struct tag_head tags[TAG_COUNT_FOR_PROTOCOL];
|
||||||
|
#endif
|
||||||
|
|
||||||
UINT8 *ir_hex_code = NULL;
|
UINT8 *ir_hex_code = NULL;
|
||||||
UINT8 ir_hex_len = 0;
|
UINT8 ir_hex_len = 0;
|
||||||
@@ -67,7 +71,7 @@ void noprint(const char *fmt, ...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// pubic function definitions
|
// pubic function definitions
|
||||||
|
#if (!defined BOARD_51 && !defined BOARD_CC26XX)
|
||||||
INT8 ir_file_open(const UINT8 category, const UINT8 sub_category, const char* file_name)
|
INT8 ir_file_open(const UINT8 category, const UINT8 sub_category, const char* file_name)
|
||||||
{
|
{
|
||||||
INT8 ret = IR_DECODE_SUCCEEDED;
|
INT8 ret = IR_DECODE_SUCCEEDED;
|
||||||
@@ -111,7 +115,12 @@ INT8 ir_file_open(const UINT8 category, const UINT8 sub_category, const char* fi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
INT8 ir_file_open(const UINT8 category, const UINT8 sub_category, const char* file_name)
|
||||||
|
{
|
||||||
|
return IR_DECODE_SUCCESS;
|
||||||
|
}
|
||||||
|
#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 binary_length)
|
||||||
{
|
{
|
||||||
@@ -263,7 +272,7 @@ static UINT16 ir_ac_lib_control(t_remote_ac_status ac_status, UINT16 *user_data,
|
|||||||
UINT16 time_length = 0;
|
UINT16 time_length = 0;
|
||||||
|
|
||||||
#if defined BOARD_PC
|
#if defined BOARD_PC
|
||||||
UINT8 i = 0;
|
UINT16 i = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (0 == context->default_code.len)
|
if (0 == context->default_code.len)
|
||||||
@@ -375,12 +384,15 @@ static UINT16 ir_ac_lib_control(t_remote_ac_status ac_status, UINT16 *user_data,
|
|||||||
|
|
||||||
static INT8 ir_ac_lib_close()
|
static INT8 ir_ac_lib_close()
|
||||||
{
|
{
|
||||||
|
#if defined USE_DYNAMIC_TAG
|
||||||
// free context
|
// free context
|
||||||
if (NULL != tags)
|
if (NULL != tags)
|
||||||
{
|
{
|
||||||
ir_free(tags);
|
ir_free(tags);
|
||||||
tags = NULL;
|
tags = NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
free_ac_context();
|
free_ac_context();
|
||||||
|
|
||||||
return IR_DECODE_SUCCEEDED;
|
return IR_DECODE_SUCCEEDED;
|
||||||
|
|||||||
Reference in New Issue
Block a user