#ifndef _BMSER_CAN_J1939_SYN_DATA_
#define _BMSER_CAN_J1939_SYN_DATA_
#include "platmacro.h"
// #include "project_def.h"
#include "xieneng_can_component.h"
#include "j1939.h"
#include "j1939_tools.h"

typedef struct
{
    uint16_t state;                 
    uint16_t sendFlag;                               /*发送标志*/
    uint16_t innerCount;                             /*内部计时*/
    uint32_t unixEpoch[BMS_CFG_ROCKSNUM_MAX];        /*Unix时间戳*/
    int16_t  aveCurrent[BMS_CFG_ROCKSNUM_MAX];       /*平均电流*/
    uint16_t synTotalVolt[BMS_CFG_ROCKSNUM_MAX];     /*同步总压*/    
    int16_t  synCurrent[BMS_CFG_ROCKSNUM_MAX];       /*同步电流*/   
    uint16_t synTick[BMS_CFG_ROCKSNUM_MAX];          /*同步信息软件tick*/
    uint16_t waitRespCnt;                            /*等待查询完成次数*/
    uint16_t crcErrorCnt;                            /*crc错误次数*/
    uint16_t tickErrorCnt;                           /*同步tick没有更新次数*/
    uint16_t tickLongCnt;                            /*传输数据较长，没有在1秒内传输完成次数*/
    uint16_t sampleResErrorCnt;                      /*数据响应错误次数*/
    uint16_t tickDiffErrCnt;                         /*数据tick过大次数*/
    uint16_t queryRevFlag[BMS_CFG_ROCKSNUM_MAX];     /*各簇查询接收完成标志*/
    uint16_t allowSdRecodeFlag;                      /*允许SD卡进行记录标志*/
    uint32_t lastSynchSysTick;                       /*上一次同步系统时间*/
}Syn_Sample_Data_Master_Stru;

typedef enum
{
    SYNCHRO_TAG,
    SYNCHRO_RES1,
    SYNCHRO_RES2,
    SYNCHRO_RES3,
    SYNCHRO_RES4,
    SYNCHRO_TICK,
    SYNCHRO_UNIX_EPOCH_H,
    SYNCHRO_UNIX_EPOCH_L,
    SYNCHRO_TORALVOL,
    SYNCHRO_CURRENTL,
    SYNCHRO_AVE_CURRENT,
    SYNCHRO_BATVOL,
    SYNCHRO_BUTT
}Syn_Data_Enum;

/*!
 * @brief       获取请求单体信息的标志(非线程安全)
 *
 * @param[in]   void
 * @return
 * @retval      g_IsEnableSendQueryRequest
 * @par         modify    log
 * Date         Author    Description             \n
 * 2023-08-24    qzy       Create             \n
 *
 */
uint16_t get_IsEnableSendQueryRequest(void);

 /*!
 * @brief       同步采样信息Init
 *
 * @param[in]   void
 * @return
 * @retval      None
 * @par         modify    log
 * Date         Author    Description             \n
 * 2023-04-14   zzk       Create             \n
 *
 */
int32_t SynSampleDataMaster_Init(void);

/*!
 * @brief       同步采样信息Rnnable,周期10ms
 *
 * @param[in]   void
 * @return
 * @retval      None
 * @par         modify    log
 * Date         Author    Description             \n
 * 2023-04-14   zzk       Create             \n
 *
 */
int32_t SynSampleDataMaster_Runnable(void);


/*!
 * @brief       获取SD卡记录标志
 *
 * @param[in]   void
 * @return
 * @retval      None
 * @par         modify    log
 * Date         Author    Description             \n
 * 2023-04-14   zzk       Create             \n
 *
 */
int32_t SynSampleDataMaster_GetSdRecodeFlag(void);

/*!
 * @brief       清除SD卡记录标志
 *
 * @param[in]   void
 * @return
 * @retval      None
 * @par         modify    log
 * Date         Author    Description             \n
 * 2023-04-14   zzk       Create             \n
 *
 */
int32_t SynSampleDataMaster_ClearSdRecodeFlag(void);

/*!
 * @brief       获取同步信息
 *
 * @param[in]   void
 * @return
 * @retval      None
 * @par         modify    log
 * Date         Author    Description             \n
 * 2023-04-14   zzk       Create             \n
 *
 */
Syn_Sample_Data_Master_Stru *SynSampleDataMaster_GetSynchroInfo(void);

/*!
 * @brief       同步采样信号回调
 *
 * @param[in]   void
 * @return
 * @retval      None
 * @par         modify    log
 * Date         Author    Description             \n
 * 2023-04-14   zzk       Create             \n
 *
 */
Std_Ret_Type SynSampleDataMaster_Callback(uint16_t *data,uint32_t length, uint8_t bcuIndex, uint16_t bankId, uint16_t rackId);


#endif

