#ifndef _BLV_485_DEV_CARDFUN_H_
#define _BLV_485_DEV_CARDFUN_H_

#include "stdint.h"
#include "BLV_485_Protocol.h"
#include "BLV_All_Dev_Init.h"

//#define DEV_RS485_CARD			0x0A	//插卡取电设备类型

#define CARDIDNOBODY        0x00     //无人
#define CARDIDGUEST         0x01     //客人
#define CARDIDWAITER        0x02     //服务员
#define CARDIDMANAGER       0x03     //经理
#define CARDIDENGINEER      0x04     //工程
#define CARDIDHEADER        0x05     //总管
#define CARDIDM1            0x06     //高频卡

#define CARD_Anonymous_Identity		0x00		//无身份信息
#define CARD_Guest_Identity			0x01		//客人身份
#define CARD_Staff_Identity			0x02		//工作人员身份
#define CARD_Identity_3				0x03		//身份3
#define CARD_Identity_4 			0x04		//身份4
#define CARD_Identity_5				0x05		//身份5

typedef struct
{
	BLV_COMM_RECORD_G comm_record;	//通讯记录
	
	uint8_t DevSendCnt;     	//设备发送计数   计数达到重发次数都没有回复，判为离线
	uint8_t DevOffline;       	//设备离线标志 1，设备离线   0，设备在线	
	uint8_t DevOfflineLast;    	//设备离线标志 1，设备离线   0，设备在线	
	
//	uint32_t Rs485CardID;     	//插卡取电ID	
	uint8_t Rs485CardAction;  	//卡动作
	uint8_t Rs485CardFlag;      //插卡取电标志， 有人
	uint8_t Rs485CardFlagLast;	//上一次插卡取电标志位
	uint8_t Rs485CardTypeLast;  //卡的上一个状态
	uint8_t Rs485CardType;      //卡状态         身份
	
	uint8_t Rs485CardoffFlag;	//拔卡标记
	uint32_t Rs485CardoffTick;	//拔卡时间搓
	
	uint32_t 	inquire_tick;		//询问时间戳
	
	//2025-09-03 取消插卡取电判断条件 该变量
	//RS485_CARD_COND Rs485CardCond;  //插卡取电判断条件 用于接收配置软件的判断条件
	
	uint8_t DevPort;            //2024-11-05
	uint8_t DevPort_Last;       //2024-11-05
	uint8_t DevPort_Flag;       //2024-11-05
	
	uint8_t DevInitFlag;		//2025-08-04 以第一次通讯的读取状态作为初始化状态，且不会执行动作
	uint32_t inquire_state_tick;		//2025-08-20 增加查询状态时间戳 - 项目2164
}__attribute__ ((__packed__))RS485_CARD_INFO;						//485开关的数据与函数


void BLV_RS485_Card_Data_Init(uint16_t DataLen, uint8_t *Data);
void BLV_RS485_Card_Data_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);

uint8_t Get_BLV485_CARD_Online_Status(uint32_t devaddr);

#endif

