135 lines
3.5 KiB
C
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*************************************/
|
|
|