#ifndef _COMMPOWERMODULE_H
#define _COMMPOWERMODULE_H

#define RX_BUF_SIZE_MAX     200    // 接收buf最大长度
#define TX_BUF_SIZE_MAX     30     // 发送buf最大长度

#define CFG_PARAM_FUNC          0x1A   // 配置参数功能码
#define READ_CFG_PARAM_FUNC     0x1B   // 读配置参数功能码
#define RX_READ_FUNC            0x81   // 接收的读功能码
#define RX_WRITE_FUNC           0x82   // 接收的写功能码
#define TX_READ_FUNC            0x01   // 发送的读功能码
#define TX_WRITE_FUNC           0x02   // 发送的写功能码


typedef union{
    struct 
    {
        WORD lostVolt    : 1;  // 电池输入失电告警
        WORD actStatus   : 1;  // 电池活化状态
        WORD lowVolt     : 1;  // 电池欠压告警
        WORD overVolt    : 1;  // 电池过压告警
        WORD offline     : 1;  // 电池离线告警
        WORD rConnect    : 1;  // 电池反接告警 
        WORD backup      : 1;  // 备用点
        WORD capAlarm    : 1;  // 电池容量故障
	#ifdef BATTERY_BP_L500
		WORD R_Alarm     : 1;  // 内阻异常告警
		WORD OverHeat    : 1;  // 温度过热告警
	#endif
    }BIT;
    WORD yxStatus;
}BAT_YX;

typedef struct{
    WORD batVolt;          // 电池电压 单位：0.01v
    WORD capacityVolt;     // 电容电压 单位：0.01v
}BAT_YC;

typedef struct{
    WORD dischargeTimeMax; // 电池最大放电时间  单位：分钟
    WORD dischargeTimeNow; // 当前放电时长      单位：分钟
#ifdef BATTERY_BP_L500
    WORD BatteryInResist;  // 电池内阻
    WORD BatteryTemp;	   // 电池温度
    WORD BatteryRtPower;   // 电池实时电量
    WORD BatDischageCurrent;	//放电电流
	WORD BatRechageCurrent;		//充电电流
#endif
}BAT_RUN_PARAM;

typedef union{
    struct{
        WORD rVolt              : 1;    // 读电池电压标志
        WORD rStatus            : 1;    // 读电池状态标志
        WORD rRunInfo           : 1;    // 读系统运行参数标志
        WORD wActStart          : 1;    // 写活化启动标志
        WORD wActStartRet       : 1;    // 写活化启动结果标志
        WORD wActStop           : 1;    // 写活化停止标志
        WORD wActStopRet        : 1;    // 写活化停止结果标志
        WORD wDischargeStop     : 1;    // 写放电停止标志
        WORD wDischargeStopRet  : 1;    // 写放电停止结果标志
        WORD cActData           : 1;    // 清除活化数据标志
	#ifdef BATTERY_BP_L500
		WORD rBattR             : 1;    // 读电池内阻标志
		WORD rBattTemp          : 1;    // 读电池温度标志
		WORD rBattRtPower       : 1;    // 读电池实时电量标志
        WORD wBattR             : 1;    // 电池内阻检测标志
        WORD wBattRRet          : 1;    // 电池内阻检测结果标志
        WORD rBatCurrent        : 1;    // 读电池充放电电流标志
    #endif
    }BIT;
    WORD m_flg;
}SIGNAL_FLG;

typedef struct{
    bool bData;             // 接收到完整一帧报文标志
    bool commFault;         // 通讯故障
    DWORD sendMesgCount;    // 发送报文计数
    BYTE recvFlg;           // 接收标志
    BYTE dataLen;           // 数据长度
    BYTE recvCount;         
    BYTE portChannel;
    BYTE equAddr;    // 装置地址
    int recvPos;
    int parsePos;
    BYTE recvBuf[RX_BUF_SIZE_MAX];
    DWORD readYxCount;
    DWORD readRunInfoCount;
#ifdef BATTERY_BP_L500
    DWORD DetectBattRCount;		//电池内阻检测计时
    DWORD ReadBattRCount;		//读电池内阻计时
    DWORD ReadBattTempCount;		//读电池温度计时
    DWORD ReadBattRtPowerCount;		//读电池实时电量计时
    DWORD BatCurrentCount;			//查询电池充放电电流计时
#endif
    BAT_YX tYx;             
    BAT_YC tYc;
    BAT_RUN_PARAM tRunParam;
}COMM_POW_MOD;



// 函数对外声明
extern void StartBattAct(void); // 启动电池活化
extern void StopBattAct(void);  // 停止电池活化
extern void ClearBattActInfo(void); // 清除电池活化信息
extern void PowerModuleCommInit(COMM_POW_MOD *p_instance,int ch);   // 初始化电源模块通讯
extern void PowerModuleCommRecv(COMM_POW_MOD *p_instance,BYTE rec_data); // 电源模块通讯接收数据
extern void PowerModuleCommRun(COMM_POW_MOD *p_instance);   // 电源模块通讯接口

#endif
