#ifndef _SMT_LOCK_H_
#define _SMT_LOCK_H_

#include "apt32f102.h"
#include "apt32f102_gpio.h"

#define PUBLIC_RETRY			0x40       //重发标记
#define RETRY_TIME				0x04       //发送次数
#define REPORT_TIMEOUT			400	

#define RPT_LOCKID_FLAG			0x01	//门锁身份
#define RPT_LOCKACT_FLAG		0x02	//门锁动作


//上报RCU指令集合
#define DEV_IDSTATE_RPT			0x01		//门锁身份、动作
#define DEV_BATMON_RPT			0x03		//门锁电量
#define DEV_VERSON_RPT			0x06		//版本号
#define DEV_UNLOCK_RPT			0x10		//开锁命令

typedef enum{
    SmtLock_ADDR_TX = 0,
    SmtLock_SN,
    SmtLock_DEV_TYPE,
    SmtLock_ADDR_RX,
    SmtLock_LEN,
    SmtLock_CKS,
    SmtLock_CMD,
    SmtLock_PARA,
}SmtLock_E;


typedef struct{

    U8_T	Dev_ID;				//门锁设备上报身份
	U8_T    Dev_IDTime[4];		//门锁身份上报时间
	U8_T    Dev_IDRpt_Flag;		//门锁产生身份标志
	
	U8_T    Dev_LockAct;		//门锁设备动作
	U8_T    Dev_ActTime[4];		//门锁设备动作上报时间
	U8_T    Dev_LockActRpt_Flag;//门锁产生动作标志
	U8_T    Dev_LockStaRpt_Flag;//门锁上报身份信息、动作信息标志
	
	
	U8_T    DevMAC[6];			//门锁设备MAC地址	
	U8_T	Dev_BatMon;			//设备电量百分比
	U8_T    Dev_NetQult;		//门锁网络质量
	U8_T    Dev_StaRpt_Flag;	//上报RCU门锁状态

	U8_T    Dev_SetUnLock_Flag;	//设置门锁设备开锁
	U8_T	LockSendCnt;
	
	U8_T    SendSn;				//发送SN号
	U8_T    RecvSn;				//接收SN号
	U8_T    SendCnt;

}SMTLOCK_t;


extern SMTLOCK_t g_smtlock;

void SmtLock_Init(void);
void SmtLock_Task(void);

U8_T RS485_SmtLock_Processing(U8_T *RecData, U16_T RecvLen);

U8_T RS485_RCU_Control_Processing(U8_T *RecData, U16_T RecvLen);
#endif
