/*
 * @Author: zhy
 * @Date: 2022-10-11 10:08:57
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2022-10-11 11:38:57
 * @Description: 
 */

#ifndef BMSER_UTILS_H_
#define BMSER_UTILS_H_
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

int bmser_calculate_crc(uint8_t *req, int nb);

long long bmser_get_time_stamp_ms();

/**
 * @brief       获取自系统启动后经过的时间，不受系统时间设定影响。但是如果有时间跳跃或者系统挂起，该时钟也会停止
 * @param[in]   none
 * @return      long long 
 * @retval      自系统启动后经过的时间 单位：ms
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2023-12-04           JHC        创建初始版本          \n
*/
long long bmser_clocke_get_time_monotonic_ms();

/**
 * @brief       申请堆空间
 * @param[in]   Std_Size_Type bufSize
 * @return      void*
 * @retval      !0:正常  0:错误
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2024-01-01           ZHY       创建初始版本          \n
*/
void* OS_Malloc(uint32_t bufSize);

/**
 * @brief       释放堆空间
 * @param[in]   void* buf 堆地址
 * @return      void
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2024-01-01           ZHY       创建初始版本          \n
*/
void OS_Free(void* buf);

/**
 * @brief       动态申请堆空间
 * @param[in]   Std_Size_Type bufSize
 * @return      void*
 * @retval      !0:正常  0:错误
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2024-01-01           ZHY       创建初始版本          \n
*/
void* OS_Dynamic_Malloc(uint32_t bufSize);

/**
 * @brief       动态释放堆空间
 * @param[in]   void* buf 堆地址
 * @return      void
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2024-01-01           ZHY       创建初始版本          \n
*/
void OS_Dynamic_Free(void* buf);

/**
 * @brief       ascii转化为bcd, 如果ascii为奇数个，则转换的BCD码最后一个字节的低四位补0.
 * @param[in]   uint8_t len
 * @param[in]   uint8_t *str
 * @return      uint8_t
 * @retval      
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2023-11-27           JML        创建初始版本          \n
*/
uint8_t stringTobcd(uint8_t len, uint8_t *pStr, uint8_t *pBcd);

/**
 * @brief       ascii转化为int, 如果ascii为奇数个，则转换的int最后一个字节的低四位补0.
 * @param[in]   uint8_t len
 * @param[in]   uint8_t *str
 * @return      uint8_t
 * @retval      
 * @par         修改日志:
 * Date                Author     Description           \n
 * 2023-11-27           JML        创建初始版本          \n
*/
uint8_t stringTohex(uint8_t len, uint8_t *pStr, uint8_t *pHex);

#ifdef __cplusplus
}
#endif

#endif
