bes2300之按键配置(二)

目录

框架及代码分析

配置按键

立体声工程

tws工程


框架及代码分析

首先来看一下按键处理逻辑框图

然后我们在来分析具体的代码逻辑

对于初始化部分,主要是硬件初始化,注册按键事件处理函数(app_key_handle_process),以及注册事件-接口的table表格等

/* 首先是初始化部分 */
app_init
	/*硬件初始化,注册中断等*/
	app_key_open
		/* 这里指定了线程APP_MODUAL_KEY的处理函数为app_key_handle_process */
		app_set_threadhandle(APP_MODUAL_KEY, app_key_handle_process);
		/* 这里注册按键中断事件的回调函数 */
		hal_key_open(checkPwrKey, key_event_process)
			hal_pwrkey_open
			hal_adckey_open
			hal_gpiokey_open
				hal_iomux_init

	/* 这里对于tws工程和立体声工程初始化会有所差别,主要体现在有各自的table */
	app_key_init
#if IBRT	/* ibrt tws 工程*/
		/* 按键map(app_ibrt_ui_test_key_cfg)注册 */
		app_ibrt_ui_test_key_init
			app_key_handle_registration(app_ibrt_ui_test_key_cfg
				list_append(app_key_conifg.key_list, dest_key_handle);
#else	/* stereo 工程*/
		/* 按键map(app_key_handle_cfg)注册 */
		app_key_handle_registration(app_key_handle_cfg
			list_append(app_key_conifg.key_list, dest_key_handle);
#endif

当有按键触发之后,底层将按键封装成按键事件,通过callback函数(key_event_process)发送event给到app线程处理,也就是app_key_handle_process函数,在这里通过事件类型,在table中找相应的处理函数

/*timer的回调函数,定时器的时间为40ms,中断触发之后启动,主要用于去抖*/
hal_key_debounce_handler
	send_key_event
		/* 通过上面初始化过程中注册是回调函数,发送消息到app线程的APP_MODUAL_KEY中进行处理,也就是app_key_handle_process回调函数 */
		key_detected_callback->key_event_process




#if IBRT	/* ibrt tws 工程*/
/*处理底层上报(key_event_process)的按键事件,并根据按键和事件类型执行对应的操作*/
app_key_handle_process
	app_key_handle_find
		/*从list即 app_ibrt_ui_test_key_cfg 中,根据事件与按键code查找对应的函数入口*/
		app_key_conifg.key_list
			/* app_ibrt_ui_test_key_cfg 索引对应按键事件处理函数*/
#else
/*处理底层上报(key_event_process)的按键事件,并根据按键和事件类型执行对应的操作*/
app_key_handle_process
	app_key_handle_find
		/*从list即 app_key_handle_cfg 中,根据事件与按键code查找对应的函数入口*/
		app_key_conifg.key_list
			/* 如果需要到bt(当前线程为app线程)的线程中处理,则使用下面的逻辑发送到bt线程*/
			app_bt_key
				/* 这里发给bt线程,处理蓝牙相关操作*/
				bt_key_send
					app_bt_start_custom_function_in_bt_thread(..., ..., bt_update_key_event)

					/*bt线程中轮询检查注册的回调函数,是否有执行条件,上面的app的消息会发到这里来*/
					Besbt_hook_proc
						/* bt线程的 mail 处理函数*/
						app_bt_mail_poll
							app_bt_mail_process
								/* 这里根据上面发来的消息,进到BT_Custom_Func_req中处理*/
								BT_Custom_Func_req
									/*这里更新了bt_key的值*/
									bt_update_key_event

						/* 当按键状态bt_key不等于默认值,就会进入相应的按键处理逻辑,上面一步已经改变了bt_key状态 */
						bt_key_handle
							/* 根据相应的按键事件处理 */
							bt_key_handle_func_key
#endif

配置按键

首先是配置GPIO,power_key是不用额外配置的,默认已经配置好了

//gpiokey define
#define CFG_HW_GPIOKEY_DOWN_LEVEL          (0)
#define CFG_HW_GPIOKEY_UP_LEVEL            (1)
const struct HAL_KEY_GPIOKEY_CFG_T cfg_hw_gpio_key_cfg[CFG_HW_GPIOKEY_NUM] = {
#if (CFG_HW_GPIOKEY_NUM > 0)
    {HAL_KEY_CODE_FN1,{HAL_IOMUX_PIN_P0_2, HAL_IOMUX_FUNC_AS_GPIO, HAL_IOMUX_PIN_VOLTAGE_VIO, HAL_IOMUX_PIN_PULLUP_ENALBE}},
    {HAL_KEY_CODE_FN2,{HAL_IOMUX_PIN_P0_3, HAL_IOMUX_FUNC_AS_GPIO, HAL_IOMUX_PIN_VOLTAGE_VIO, HAL_IOMUX_PIN_PULLUP_ENALBE}},
 #endif
};

比如这里,我将PIO2映射到FN1,PIO3映射到FN2,然后在根据不同的工程配置按键map

立体声工程

对于立体声工程

const APP_KEY_HANDLE  app_key_handle_cfg[] = {
    {{APP_KEY_CODE_PWR,APP_KEY_EVENT_LONGLONGPRESS},"bt function key",app_bt_key_shutdown, NULL},
    {{APP_KEY_CODE_FN1,APP_KEY_EVENT_UP},"bt play backward key",app_bt_key, NULL},
    {{APP_KEY_CODE_FN2,APP_KEY_EVENT_UP},"bt play forward key",app_bt_key, NULL},
};

如上,这里我配置了超长按power按键关机,按下抬起(单击)F1下一曲,按下抬起(单击)F2上一曲。其他可参考如上配置!

tws工程

对于tws(ibrt)工程

const APP_KEY_HANDLE  app_ibrt_ui_test_key_cfg[] =
{
    {{APP_KEY_CODE_PWR,APP_KEY_EVENT_LONGPRESS},"app_ibrt_ui_test_key", app_ibrt_ui_test_key, NULL},
    {{APP_KEY_CODE_PWR,APP_KEY_EVENT_DOUBLECLICK},"app_ibrt_ui_test_key", app_ibrt_ui_test_key, NULL},

};

这里的配置时超长按power按键关机,双击power按键进入tws搜索

最后在说一下,按键的长按、单击等等的时长配置,在hal_key.c中,如下图所示:

 

相关资料请到<bes2300开发调试笔记>文章底部的网盘链接中下载!

 

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在云巅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值