#ifndef __SOFT_HEREWIN_H
#define __SOFT_HEREWIN_H
#include "common.h"
//报警信息、警告信息
//B15：放电过流 B14：电池损坏 B13： B12：电池低温(充电/放电) B11：电池高温(充电/放电) B10：电池(单体)欠压 
//B9： 电池(单体)过压 B8： B7： B6： B5： B4： B3： B2： B1： B0： 充电过流 
#pragma pack(1)
typedef struct 
{
    char battery_temp[3];   //每个电芯温度°C
    uint16_t battery_vol[14];   //每个电芯电压 0.001V
    uint16_t    alarm_info;        //报警信息
    uint16_t warn_info;         //警告信息
    uint16_t total_vol;         //总电压 0.01V 
    uint16_t tolal_ele;         //总电流 0.01A
    uint8_t SOC_info;           //剩余电量%
    uint8_t SOH_info;           //健康状态%
    uint8_t SOP_info;           //功率状态%
    uint32_t serial_number;     //序列号
    uint16_t hard_version;      //硬件版本
    uint16_t soft_version;      //软件版本
    uint8_t  battery_num;       //电芯个数
    uint16_t circulation_num;   //循环次数
    
    //充电请求相关参数
    uint16_t re_vol;            //请求电压
    uint16_t re_ele;            //请求电流
    uint16_t max_vol;           //单体最大电压
    uint16_t power_status;      //充电状态

    bool get_temp_flag;        //温度是单独一包，并且有偏移，没获取到温度之前会显示负数

}herewin_bms;
#pragma pack()
extern herewin_bms herewin_info;

extern Connect_check Herewin_Link;

#define HEREWIN_HEART_ID         0x004300F0  //心跳数据包
#define HEREWIN_VOL_ID           0x008400F0  //单体电压包
#define HEREWIN_TEM_ID           0x008200F0  //单体温度包
#define HEREWIN_SEARCH_ID        0x008000F0  //定值查询
#define HEREWIN_CIRCULATION_ID   0x008600F0  //循环次数查询

void HerewinCanRecvHookFunction(uint32_t cellCanID, uint8_t data[], uint8_t len);
void send_msg_to_herewin(void);
#endif
