#pragma once #include "libs/shark_libs.h" #include "bsp/shark_bsp.h" #define SOC_CURRENT_VERSION 1 #define SOC_FLAG_VERSON_MASK (0x0E) #define SOC_FLAG_CALIBRATED (0x1 << 0) //已经校准 #define SOC_FLAG_VERSION(v) (((v)<<1)& SOC_FLAG_VERSON_MASK) #define SOC_FLAG_TO_VER(f) (((f) & SOC_FLAG_VERSON_MASK) >> 1) typedef struct { uint8_t flags; //比如是否校准等 double coulomb_now; /*AH, 若导线中载有1安培的稳定电流,则在1秒内通过导线横截面积的电量为1库仑 */ uint8_t capacity; /* 电池的容量百分比 */ double coulomb_min; double coulomb_max; double charger_cmin; //充电计算的最小容量 double current_real_coulomb; //当前的能量(wh) double charger_coulomb; //本次充电的AH double dischrger_coulomb; //本次放电的AH double pre_charger_coulomb; double pre_discharger_coulomb; float total_coulomb; }soc_t; void soc_init(void); void soc_update(void); int soc_update_by_ocv(void); uint32_t soc_get_cycle(void); uint8_t soc_get_soh(void); uint32_t soc_get_charger_remain_time(void); soc_t *get_soc(void); void soc_log(void); void soc_update_for_deepsleep(float sleep_time); void soc_restore_by_iap(uint8_t flags, uint8_t capaticy); u8 soc_get_version(void); void soc_set_version(u8 version); bool soc_is_force_full(void); void soc_clear_calibrate(int keep_cycle); int soc_is_normal_charging(void);