本文是BES2300X,BES2500X系列博文UI部分
一个耳机/音箱,UI是联系使用者与开发者最直接的一个窗口。当然,对于吾等码农而言,UI设计并不是我们最关心的。
我们主要做的是UI实现。
本文!!!
写BES最基础UI:按键,指示灯,提示音
一,按键
按键显然是一个中断,我们需要关注以下3点
1,管脚配置
tgt_hardware.c文件的cfg_hw_gpio_key_c数组用以配置按键管脚。
值得一提的是,按键配置结构体的最后一个成员可以配置按键极性。
2,中断函数
hal_key.c文件的hal_key_debounce_handler函数用以处理按键中断
并依次通过以下函数
send_key_event(HAL_KEY_CODE_PWR, key_status.event)
key_event_process(uint32_t key_code, uint8_t key_event)
APP_MODUAL_KEY( app_set_threadhandle(APP_MODUAL_KEY, app_key_handle_process);
)
将按键事件发送至app_thread中处理
具体细节就不说了,看代码的能力大家都有。重点是hal_key_debounce_handler函数中可以自定义按键操作,例如,双击
+长按,10击等等。
3,处理函数
在app_thread中,app_key_handle_process会先查注册表,根据不同的按键code和按键event,分别处理。如下图:
既然需要查表处理,那么一定会有注册的位置:
app_key_handle_registration(&app_key_handle_cfg[i]);
此行代码在app_key_init函数中。
app_key_handle_cfg数组中包含了每一个key_code,每一个key_event对应的处理函数。
至此,按键从IO到上层再到初始化,形成通路。
4,TWS模式从耳通路
另外,TWS模式(IBRT)通路会多一条,从耳机的按键会在注册的按键处理函数中,将按键信息发送至主耳处理。
从耳发送:
app_ibrt_if_keyboard_notify(status,param);
主耳接收:
void app_ibrt_keyboard_request_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length)
主从通信相关问题在蓝牙操作及协议连接部分讲解,链接如下:
敬请期待
tgt_hardware.c文件的cfg_hw_pinmux_pwl数组对指示灯IO进行配置
使用时就这个函数,调用就完了:
app_status_indication_set(APP_STATUS_INDICATION_CHARGENEED);
驱动流程以及呼吸灯有时间再更新
这里只讲如何播放提示音。
播放提示音有两种方式,如下:
打断播放:
app_voice_report(APP_STATUS_INDICATION_T status, uint8_t device_id)
混合播放(流程与打断播放近似,需要打开相关宏定义):
media_PlayAudio(AUD_ID_ENUM id,uint8_t device_id)
2,添加提示音
需要将WAV格式音频文件。打断播放通过BES给出的工具,编码并转换成TXT文件。混合播放直接另存为TXT文件。添加至资源文件夹。
打断播放参考该函数:
void media_runtime_audio_prompt_update(uint16_t id, uint8_t** ptr, uint32_t* len)
混合播放参考该函数:
app_ring_merge_start();
偷个懒,具体操作流程先不写了,有时间再完善
关于提示音如何从内存到Speaker,会在数据流及数据编码部分讲解链接如下:
敬请期待
版权声明:本文为优快云博主「hoaquin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/hoaquin/article/details/112759323