当前位置: 首页 > news >正文

中科蓝讯-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_INIT

3.在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_INIT

4.在bsp_sys.h中声明函数

#if TRY_BATTERY_DEBOUNCE_FUNC void customBatteryDebounceProcess(void); #endif // TRY_BATTERY_DEBOUNCE_FUNC

5.在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_FUNC

6.在以下位置调用函数

///第一处位置 ///在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_INIT

3.在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_INIT

4.在bsp_sys.h中声明函数

#if TRY_BATTERY_LEVEL_FUNC void customBatteryLevelProcess(void); #endif // TRY_BATTERY_LEVEL_FUNC

5.在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_FUNC

6.在以下位置调用函数

///第一处位置 ///在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 ······ }
http://www.jsqmd.com/news/614245/

相关文章:

  • 零基础部署Nanbeige 4.1-3B:像素风对话前端,让AI聊天像玩游戏
  • P6478 [NOI Online #2 提高组] 游戏
  • Plus Jakarta Sans:开源字体的协作设计与实践指南
  • 免费使用云服务器训练深度学习模型
  • 周测复盘【前缀和and差分】
  • 革新性开源驱动:OpenTabletDriver全场景配置指南
  • 快速体验Qwen3-0.6B:FP8量化模型+Chainlit前端,简单三步上手
  • 短链接day-07 技术重点
  • AI图文识别 VS 人类学习|后Transformer时代
  • Web后端基础(SpringBoot)
  • 【初阶数据结构】连续空间的秩序之舞: 顺序表
  • 暗黑破坏神2存档编辑器:5分钟掌握游戏存档自定义的完整指南
  • OZON选品插件实战指南:新手快速上手,精准挖掘爆单AI选品的潜力
  • 房企数字化转型必看:售楼系统怎么选?信客云售楼系统深度测评
  • 涨薪技术|Prometheus监控告警处理
  • Unity发布京东小游戏颗
  • 速成正果经
  • 突破单车智能瓶颈:DAIR-V2X车路协同系统全栈实践指南
  • 《Spring AI 实战系列 入门篇》第 6 篇
  • 2025届学术党必备的五大AI学术神器横评
  • [技术突破]:跨模态语义对齐引领多模态交互变革
  • 【AI CTO视角】算力不是堆资源,而是一场精细化工程
  • C# 面试高频题:装箱和拆箱是如何影响性能的?隙
  • 2026年执医课程性价比最新测评:零基础在职考生真正用得上的课程 - 医考机构品牌测评专家
  • 2.4 复现案例:在A股复现一个经典价值因子(代码+数据)
  • 从零构建大模型--实操--搭建python环境
  • Java响应式演进关键转折点(Loom+Spring WebFlux深度耦合剖析):JDK21 GA后仅剩90天的兼容窗口期
  • java内置方法总结及基础算法
  • 008、模型优化:剪枝、量化、蒸馏与TensorRT部署加速全攻略
  • 【2026开年巨献】精通Python十讲:第十讲 - 设计模式、架构与工程化思维