Files
smod_atsc_app/atsc_app/inc/dryloop.h
T

135 lines
3.5 KiB
C

/********************************************************************
**dryloop通讯模块头文件
********************************************************************/
#ifndef DRYLOOP_H
#define DRYLOOP_H
#define DRYLOOP_UART_DEBUG 0
#if DRYLOOP_UART_DEBUG
#define dryloop_printf printf
#else
#define dryloop_printf(p,...) do{;}while(0) //若没开启调试模式,printf定义为空
#endif
#define MODE_SYNC 0 //异步模式 不可阻塞型
#define MODE_ASYN 1 //同步模式 阻塞型 必须等应答后才能发下一条命令
#define DRYLOOP_UART_NUM (3)
#define DRYLOOP_UART_BPS (115200)
#define DRYLOOP_UART_SEND_MODE MODE_ASYN //异步发送,还是同步发送
#define DRYLOOP_UART_BUF_MAX_LEN 128
#define DRYLOOP_UART_TIMEOUT (300/SYSTICKMS) //超时时间300ms
typedef enum
{
DRYLOOP_I2C_RF_KEY = 0X00,
DRYLOOP_I2C_PWRDW_KEY = 0X01,
DRYLOOP_I2C_PWRUP_KEY = 0X02,
DRYLOOP_I2C_VER = 0X03,
DRYLOOP_I2C_VERYY = 0X04,
DRYLOOP_I2C_VERMM = 0X05,
DRYLOOP_I2C_VERDD = 0X06,
DRYLOOP_I2C_AMP_KEY = 0X07, //读取寄存器
//配置寄存器
DRYLOOP_I2C_TS_LED = 0X10,
DRYLOOP_I2C_RF_LED = 0X11,
DRYLOOP_I2C_SYSERR_LED = 0X12,
DRYLOOP_I2C_FWD_ADDR = 0X13
}E_DRYLOOP_I2C_ADDRESS;
#define DRYLOOP_UART_COMM_HEAD (0XFA)
typedef struct
{
uint8 rec[DRYLOOP_UART_BUF_MAX_LEN];
uint8 send[DRYLOOP_UART_BUF_MAX_LEN];
uint32 rec_index;
BOOL rec_proc_flag;
uint32 un_resp_flag; //未应答标志 为0时才能发新命令,发送命令置位,超时或收到应答后清零
uint32 send_tick;
}S_DRYLOOP_UART_BUF,*pS_DRYLOOP_UART_BUF;
typedef struct
{
BOOL rf;
BOOL rf_need_send;
uint32 rf_send_tick;
BOOL ts;
BOOL ts_need_send;
uint32 ts_send_tick;
BOOL sys_err;
BOOL sys_need_send;
uint32 sys_send_tick;
}S_DRYLOOP_LED_STATUS,*pS_DRYLOOP_LED_STATUS;
typedef struct
{
BOOL rf_need_get;
uint32 rf_get_tick;
BOOL power_need_get;
uint32 power_get_tick;
BOOL amp_need_get;
uint32 amp_get_tick;
}S_DRYLOOP_GET_STATUS,*pS_DRYLOOP_GET_STATUS;
//__packed
#pragma pack(1)
typedef struct
{
uint8 header;
uint8 data_len;
uint8 cmd;
uint8 other[100];
}S_DRYLOOP_UART_PROTOCOL,*pS_DRYLOOP_UART_PROTOCOL;
#pragma pack()
#define DRYLOOP_UART_PROTOCOL_ANS_CMD (0X3F)
#define DRYLOOP_UART_PROTOCOL_ANS_OK (1<<7)
#define DRYLOOP_UART_PROTOCOL_ANS_ERR (1<<6)
#define DRYLOOP_UART_PROTOCOL_ERR_SUM (1)
#define DRYLOOP_UART_PROTOCOL_ERR_UNKNOW_CMD (2)
#define DRYLOOP_UART_PROTOCOL_ERR_RESERVE1 (3)
#define DRYLOOP_UART_PROTOCOL_ERR_RESERVE2 (4)
#define DRYLOOP_TIMER_CYCLE 5
#define DRYLOOO_CHECK_VERSION 10
#define DRYLOOO_CHECK_CYCLE 15 // 单位tick 1tick 10ms
#define DRYLOOP_SEND_CYCLE 9*10
#define DRYLOOP_SEND_CHECK_CYCLE 500 //单位tick 5s 周期性的发送状态周期
#define DRYLOOP_GET_CHECK_CYCLE 50 //单位tick 500ms 周期性的获取状态周期
//由数据区长度获取整个报文的长度
#define GET_UART_LEN_BY_DATA_LEN(data_len,frame_len) \
do{\
(frame_len) = (data_len)+5;\
}while(0)
extern S_DRYLOOP dryloop_status;
extern void dryloop_init(void);
extern void dryloop_check(void);
extern void dryloop_send(void);
extern void dryloop_reset(void);
extern void dryloop_process(void);
extern void dryloop_amp_on(BOOL flag);
extern void dryloop_uart_buf_check(uint8* pbuf,uint32 len);
#endif
/***************************END*************************************/