QCC3007 button篇--代码解析

上一篇讲了如何通过ADK configuration tool来配置button,这里来看下配置后代码是如何跑的。

准备工作:
1.在InitEarlyUserFeatures()函数下会调用buttonManagerInit(),进行button管理初始化

QCC3007 button篇--代码解析_第1张图片
(1)BUTTON_GDATA这个全局变量非常重要,这里不展开说这个结构体,因为后面就会使用到,在那说明更容易理解,但名字要记住喔!
在这里插入图片描述
buttonManagerInit()函数前面几句就是开辟了结构体空间,并赋予了theSink.task

(2)ButtonsInit()函数
主要把BUTTON_GDATA与PIO task和charger task进行连接
QCC3007 button篇--代码解析_第2张图片
(3)bmInitButtonConfig函数
这个函数有4步操作
QCC3007 button篇--代码解析_第3张图片
第一步获取硬件接口转换列表,保存到BUTTON_GDATA下的button_translation_type_t结构体参数中,看到下面结构体的定义就很容易与ADK configuration tool的Translation Table关联起来了
在这里插入图片描述

第二步设置按键短按长按等时间配置,若没有设置防抖时间会设置默认
QCC3007 button篇--代码解析_第4张图片
第三步设置button event
上一篇我们说到ADK configuration tool可以配置总共66个event,这 66个event是分三个保存,每个22个event
QCC3007 button篇--代码解析_第5张图片
bmInitInputCheckMasks函数遍历66个event

上面都配置好后,就是在ButtonsMessageHandler()函数监听MESSAGE_PIO_CHANGED和MESSAGE_CHARGER_CHANGED,如果收到了PIO改变就会调用ButtonsCheckDetection()–>ButtonsLevelDetect()等函数来判断哪个按键按下,然后把event发到system去

你可能感兴趣的:(Qcc3007)