上一篇讲了如何通过ADK configuration tool来配置button,这里来看下配置后代码是如何跑的。
准备工作:
1.在InitEarlyUserFeatures()函数下会调用buttonManagerInit(),进行button管理初始化
(1)BUTTON_GDATA这个全局变量非常重要,这里不展开说这个结构体,因为后面就会使用到,在那说明更容易理解,但名字要记住喔!
buttonManagerInit()函数前面几句就是开辟了结构体空间,并赋予了theSink.task
(2)ButtonsInit()函数
主要把BUTTON_GDATA与PIO task和charger task进行连接
(3)bmInitButtonConfig函数
这个函数有4步操作
第一步获取硬件接口转换列表,保存到BUTTON_GDATA下的button_translation_type_t结构体参数中,看到下面结构体的定义就很容易与ADK configuration tool的Translation Table关联起来了
第二步设置按键短按长按等时间配置,若没有设置防抖时间会设置默认
第三步设置button event
上一篇我们说到ADK configuration tool可以配置总共66个event,这 66个event是分三个保存,每个22个event
bmInitInputCheckMasks函数遍历66个event
上面都配置好后,就是在ButtonsMessageHandler()函数监听MESSAGE_PIO_CHANGED和MESSAGE_CHARGER_CHANGED,如果收到了PIO改变就会调用ButtonsCheckDetection()–>ButtonsLevelDetect()等函数来判断哪个按键按下,然后把event发到system去