中科蓝讯-AB5756C-小白SDK开发-自定义电量处理流程

张开发
2026/4/9 19:01:37 15 分钟阅读

分享文章

中科蓝讯-AB5756C-小白SDK开发-自定义电量处理流程
自定义电量消抖流程1.在config.h中增加以下宏定义///电量检测 #define TRY_BATTERY_DEBOUNCE_FUNC TRY_VAR_INIT //自定义电量消抖功能2.在bsp_sys.h的tryCB_t结构体中声明变量#if TRY_VAR_INIT typedef struct { #if TRY_BATTERY_DEBOUNCE_FUNC u16 debounceBattery; #endif // TRY_BATTERY_DEBOUNCE_FUNC } tryCB_t; #endif // TRY_VAR_INIT3.在bsp_sys.c中的void customVarInit(void)函数中初始化变量#if TRY_VAR_INIT void customVarInit(void) { printf(%s\n, __func__); #if TRY_BATTERY_DEBOUNCE_FUNC tryCB.debounceBattery 4200; #endif // TRY_BATTERY_DEBOUNCE_FUNC } #endif // TRY_VAR_INIT4.在bsp_sys.h中声明函数#if TRY_BATTERY_DEBOUNCE_FUNC void customBatteryDebounceProcess(void); #endif // TRY_BATTERY_DEBOUNCE_FUNC5.在bsp_sys.c中定义函数#if TRY_BATTERY_DEBOUNCE_FUNC //实现在使用过程中电量只降不升 void customBatteryDebounceProcess(void) { //当实时电量小于消抖电量时重新赋值消抖电量 if(sys_cb.vbat tryCB.debounceBattery) { tryCB.debounceBattery sys_cb.vbat; } } #endif // TRY_BATTERY_DEBOUNCE_FUNC6.在以下位置调用函数///第一处位置 ///在bsp_sys.c ///该函数为自定义1s消息处理函数或可放入MSG_SYS_1S消息中处理 #if TRY_VAR_INIT void custom1sProcess(u8 state) { #if TRY_BATTERY_DEBOUNCE_FUNC customBatteryDebounceProcess(); #endif // TRY_BATTERY_DEBOUNCE_FUNC switch(state) { ///普通状态 case 1: break; ///来电状态 case 2: break; ///通话状态 case 3: break; } } #endif // TRY_VAR_INIT ///第二处位置 ///bsp_bt.c ///该位置开机会跑可以更快获取实时电压和电量 AT(.com_text.bat) void hfp_get_bat_level_hook(uint *level) { #if TRY_BATTERY_DEBOUNCE_FUNC customBatteryDebounceProcess(); #endif // TRY_BATTERY_DEBOUNCE_FUNC ······ }自定义电量等级处理流程1.在config.h中增加以下宏定义///电量等级 #define TRY_BATTERY_LEVEL_FUNC TRY_BATTERY_DEBOUNCE_FUNC //自定义电量等级功能 #define TRY_BATTERY_LEVEL_100 4020 //自定义电量等级-100% #define TRY_BATTERY_LEVEL_90 3970 //自定义电量等级-90% #define TRY_BATTERY_LEVEL_80 3915 //自定义电量等级-80% #define TRY_BATTERY_LEVEL_70 3850 //自定义电量等级-70% #define TRY_BATTERY_LEVEL_60 3790 //自定义电量等级-60% #define TRY_BATTERY_LEVEL_50 3730 //自定义电量等级-50% #define TRY_BATTERY_LEVEL_40 3640 //自定义电量等级-40% #define TRY_BATTERY_LEVEL_30 3570 //自定义电量等级-30% #define TRY_BATTERY_LEVEL_20 3480 //自定义电量等级-20% #define TRY_BATTERY_LEVEL_10 3100 //自定义电量等级-10%2.在bsp_sys.h的tryCB_t结构体中声明变量#if TRY_VAR_INIT typedef struct { #if TRY_BATTERY_LEVEL_FUNC u16 batLevelArrary[10]; u8 batteryLevel; #endif // TRY_BATTERY_LEVEL_FUNC } tryCB_t; #endif // TRY_VAR_INIT3.在bsp_sys.c中的void customVarInit(void)函数中初始化变量#if TRY_VAR_INIT void customVarInit(void) { printf(%s\n, __func__); #if TRY_BATTERY_LEVEL_FUNC tryCB.batLevelArrary[0] TRY_BATTERY_LEVEL_100; tryCB.batLevelArrary[1] TRY_BATTERY_LEVEL_90; tryCB.batLevelArrary[2] TRY_BATTERY_LEVEL_80; tryCB.batLevelArrary[3] TRY_BATTERY_LEVEL_70; tryCB.batLevelArrary[4] TRY_BATTERY_LEVEL_60; tryCB.batLevelArrary[5] TRY_BATTERY_LEVEL_50; tryCB.batLevelArrary[6] TRY_BATTERY_LEVEL_40; tryCB.batLevelArrary[7] TRY_BATTERY_LEVEL_30; tryCB.batLevelArrary[8] TRY_BATTERY_LEVEL_20; tryCB.batLevelArrary[9] TRY_BATTERY_LEVEL_10; tryCB.batteryLevel 9; #endif // TRY_BATTERY_LEVEL_FUNC } #endif // TRY_VAR_INIT4.在bsp_sys.h中声明函数#if TRY_BATTERY_LEVEL_FUNC void customBatteryLevelProcess(void); #endif // TRY_BATTERY_LEVEL_FUNC5.在bsp_sys.c中定义函数#if TRY_BATTERY_LEVEL_FUNC void customBatteryLevelProcess(void) { //根据当前电量等级获取索引减少遍历次数 u8 batLevelIndex (9 - tryCB.batteryLevel); //从索引0开始遍历10个电量等级的电压索引0~9 for(batLevelIndex; batLevelIndex 10; batLevelIndex) { //当前电压如果大于等于当前索引的电量等级电压代表属于当前电量等级的电压范围 if(tryCB.debounceBattery tryCB.batLevelArrary[batLevelIndex]) { //当前电量等级如果大于当前索引的电量等级就重新赋值电量等级 if(tryCB.batteryLevel (9 - batLevelIndex)) { tryCB.batteryLevel (9 - batLevelIndex); } break; } } } #endif // TRY_BATTERY_LEVEL_FUNC6.在以下位置调用函数///第一处位置 ///在bsp_sys.c ///该函数为自定义1s消息处理函数或可放入MSG_SYS_1S消息中处理 #if TRY_VAR_INIT void custom1sProcess(u8 state) { #if TRY_BATTERY_LEVEL_FUNC customBatteryLevelProcess(); #endif // TRY_BATTERY_LEVEL_FUNC switch(state) { ///普通状态 case 1: break; ///来电状态 case 2: break; ///通话状态 case 3: break; } } #endif // TRY_VAR_INIT ///第二处位置 ///bsp_bt.c ///该位置开机会跑可以更快获取实时电压和电量 AT(.com_text.bat) void hfp_get_bat_level_hook(uint *level) { #if TRY_BATTERY_LEVEL_FUNC customBatteryLevelProcess(); *level tryCB.batteryLevel; #endif // TRY_BATTERY_LEVEL_FUNC ······ }

更多文章