/*
 * @Author: chensong chens@bmser.com
 * @Date: 2024-05-16 15:24:33
 * @LastEditors: chensong chens@bmser.com
 * @LastEditTime: 2024-06-28 15:16:14
 * @FilePath: /rk3568_sdk_master/rk3568_sdk/bmser_app/alarm_common/src/db/bms_db_linux.c
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#include <fcntl.h>
#include <string.h>
#include <unistd.h>    
#include <sys/mman.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include "bms_db_linux.h"
#include "bmser_ems_db_control_db.h"
#include "bmser_log.h"

/**
 * @brief       读取数据通过DB addr
 * @param[in]   uint8_t   devId 设备地址
 * @param[in]   uint16_t  startAddr  db起始地址
 * @param[in]   uint16_t* pBuf   写入的数据
 * @param[in]   uint16_t  dbNum DB数量  
 * @return      int32_t  
 * @retval      0:正常   !0:错误
 * @par         修改日志:
*/
int32_t BMSDB_ReadDataByAddr(uint16_t bankId, uint16_t devId, uint16_t startAddr,   uint16_t* pBuf, uint16_t dbNum)
{
    int32_t ret = 0;
    EMS_DEV_REG_DATA_S regData = {0};
    uint8_t validFlag[1024]  = {0};
    uint16_t dbData[1024] = {0};
    
    //默认最大连续读取DB地址为1024
    if(startAddr == 0xFFFF || dbNum > 1024)
    {
        dy_syslog(LOG_ERR, "db read over range \r\n");
        return -1;
    }
    regData.dataType = BMS_DATA;
    regData.bankId = bankId;
    regData.rackId = devId;
    regData.regCount = dbNum;
    regData.len = dbNum*2;
    regData.dbValid = validFlag;
    regData.startAddr = startAddr;

    BmserProtocolExt_ReadRegisterDb(&regData,(uint8_t *)dbData,sizeof(dbData));
    for (uint32_t i = 0; i < dbNum; i++)
    {
        pBuf[i] = BIG_ENDIAN_TO_HOST_16(dbData[i]);
    }
    return ret;
}


/**
 * @brief       DB初始化
 * @return      int32_t
 * @retval      0:正常   !0:错误
 * @par         修改日志:
*/
int32_t BMSDB_Init()
{
    BMSER_EMS_DB_CONTROL_INIT_S initPara = {0};
    initPara.mode = POLL_MODE;
    return BmserProtocolExt_DBInit(&initPara);
}