BES2300X,BES2500X——UI(电池管理模块)

5 篇文章 23 订阅

前言

BES2300X,BES2500X系列博文请点击这里

本文是BES2300X,BES2500X系列博文UI部分
涉及耳机电量的检测,显示,充电检测相关逻辑
主要分为三点:

一,电量检测

在电池初始化(app_battery_open)的时候,会新建一个电池的定时器(app_battery_timer)定时器中断如下:

hal_gpadc_open(HAL_GPADC_CHAN_BATTERY, HAL_GPADC_ATP_ONESHOT, app_battery_irqhandler);

这是一个触发ADC检测的函数,第一参数是ADC通道,第二参数是检测次数,第三参数是检测结果中断处理函数。
在中断处理函数app_battery_irqhandler中,根据不同的电量给予app_battery_measure.cb函数不同的参数,最终参数通过

static void app_battery_event_process(enum APP_BATTERY_STATUS_T status, APP_BATTERY_MV_T volt)

函数,把电量信息发送到app_thread线程中进行处理。
app_battery_open函数中,可以看到以上流程需要的函数注册信息。

app_set_threadhandle(APP_MODUAL_BATTERY, app_battery_handle_process);

app_thread线程中app_battery_handle_process函数同时处理充电状态转换以及电量信息处理如下图:
在这里插入图片描述

二,充电检测

在充电检测开启函数app_battery_charger_indication_open

pmu_charger_set_irq_handler(app_battery_charger_handler);

这条是打开充电IO中断用的,中断处理函数app_battery_charger_handler也通过app_battery_event_process将充电脚状态发送到app_thread线程中

app_battery_event_process(APP_BATTERY_STATUS_PLUGINOUT,
(status == PMU_CHARGER_PLUGIN) ?APP_BATTERY_CHARGER_PLUGIN : APP_BATTERY_CHARGER_PLUGOUT);

根据特殊状态标识APP_BATTERY_STATUS_PLUGINOUT先对IO进行消抖(本文唯一的图片中有标识)

app_battery_pluginout_debounce_start();

再进行充电状态转换

app_battery_event_process(APP_BATTERY_STATUS_CHARGING, status_charger);

三,电量处理

主要是以下两个函数:

app_battery_handle_process_normal((uint32_t)status, msg_prams);
app_battery_handle_process_charging((uint32_t)status, msg_prams);

处理充电时和非充电时的电量信息,对低电,关机电压,正常电压,满电电压进行处理。
同时其中的app_status_battery_report函数会承担
1,UI定时器(app_start_10_second_timer)的计时功能。

app_10_second_timer_check();

2,电池电量上报功能

app_hfp_set_battery_level(level);

电池模块已经总结完毕,有问题大家评论区探讨

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值