SDK开发指南2

  • 基础UI修改说明
  • 初始化
  • LED灯
  • 按键
  • 提示音
  • 音频采样率设置
  • 音频转换
  • 音频文件替换
  • 音频文件新增
  • 电池信息
  • 音量调节


本文对BES的SDK做简单介绍, 以BES2500ZP/YP的SDK作为例子, 其他BES芯片SDK框架其实也大同小异, 适合刚开始接触BES蓝牙芯片的朋友, 读完本文可以对BES的SDK有个初步的基本的认识, 本文是BES2500蓝牙SDK开发指南 (一) 的续篇, 未看过的朋友请先看上篇.

基础UI修改说明

初始化

FLASH层的软件从platform\main下的main.cpp中的main()函数开始启动

BES2500ZP BES2500zp bes2500yp_BES2500ZP

应用层的初始化则在apps\main下的apps.cpp文件中的app_init()函数开始初始化

BES2500ZP BES2500zp bes2500yp_采样率_02

LED灯

LED的控制在app_status_ind.c文件中的函数app_status_indication_set 内设置, 根据上层传送事件, 来调用相应的 LED 控制, 使用时调用app_status_indication_set函数, 并选择相应入口参数即可, LED 灯控制逻辑目前不支持优先级控制, 打断之后无法恢复上一个 LED灯控制逻辑, 蓝牙状态指示灯默认支持两组 LED 灯控制

BES2500ZP BES2500zp bes2500yp_BES2500ZP_03

  1. 对于默认设置, cfg0为蓝灯, cfg1为红灯
  2. level表示当前LED电平状态, 为0或1
  3. time表示当前LED电平状态操持时间, 以 ms 为单位
  4. part 表示一次操作, 一亮一闪为两次操作
  5. parttotal 表示操作总次数
  6. startlevel 表示初始电平
  7. periodic 表示是否需要对以上操作进行周期性操作, 若状态不变, 则无限循环
  8. app_pwl_setup和app_pwl_start配套使用, 把 LED 灯操作真正写进配置, 并生效.
    在 tgt_hardware.c中进行LED 灯的配置, 包括 GPIO 引脚号、IO 功能映射、IO 电压配置、上下拉配置

BES2500ZP BES2500zp bes2500yp_采样率_04

在tgt_hardware.h中进行LED灯数量的配置

BES2500ZP BES2500zp bes2500yp_单片机_05

按键

根据config目录的customize.mk来设置按键风格, apps.cpp文件内进行按键事件注册回调, 支持组合按键设计

BES2500ZP BES2500zp bes2500yp_BES2500ZP_06


在tgt_hardware.c中进行按键配置, 包括按键名、GPIO 引脚号、IO 功能映射、IO 电压配置、上下拉配置

BES2500ZP BES2500zp bes2500yp_采样率_07


在tgt_hardware.h中配置按键数量, 开机键(PWRKEY)为固定按键, 无需再另行配置

BES2500ZP BES2500zp bes2500yp_单片机_08


每种按键都有以下方式的事件触发方式, 如:

BES2500ZP BES2500zp bes2500yp_数据_09


每种事件均可以设置触发时间, 触发时间控制在hal_key.c文件内设置, 默认按键事件触发时间如下

BES2500ZP BES2500zp bes2500yp_数据_10


基本按键事件解析和逻辑判断在app_keyhakle.cpp文件内, 由 bt_key_handle函数开始解析

BES2500ZP BES2500zp bes2500yp_BES2500ZP_11

提示音

音频采样率设置

不同的音源, 有不同默认采样率. 可以使用一些软件转换采样率, 如 Cool Edit Pro 2.1

修改采样率在工具栏上方, 快捷键 F11. 有三个地方务必设置: 采样率16k, 单声道, 位深16bit. 设置完毕后, 可保存音源文件. 如果是其他格式文件, 先把采样率和bit设置好, 再加载为windows PCM, 转为wav格式

BES2500ZP BES2500zp bes2500yp_单片机_12

音频转换

有两种音频文件, 一般只需要修改第一种
A. 放置在en/cn目录下的音频文件(普通提示音使用): 使用wav2sbc工具把音频文件 wav 转换成 sbc 数据, 下载地址: wav2sbc提示音转换工具. 命令:wav2sbc.exe -s “音频数据路径” 音频数据全部转为txt文件. 如果 wav2sbc 转换失败,n也就是没有生成 txt 文件, 那先把所有 wav 格式的文件, 通过cool pro另存为“windows PCM”的 wav 格式, 再转换
B. 放置在 ring 目录下的音频文件(用于merge提示音): 不需要使用 wav2sbc, 只需要把采样率和 bit 设置好, 然后另存为 ASCII Text Data 的 txt 格式, 然后直接替换 ring 目录的内容

音频文件替换

所有音频数据推荐全部放在各个target的res目录下. 若target目录下没有res目录, 则会去_default_cfg_src目录下去找.

BES2500ZP BES2500zp bes2500yp_采样率_13


res 数据包括中文语言 cn, 英文语言 en 以及 eq 数据. 提示音全部放在 cn/en 目录下, 如果只需要更换语音提示, 把旧音频数据替换掉即可

音频文件新增

若需要新增提示音, 则需要按以下步骤:

  1. 把音频数据放到 en/cn 相应目录下, 并修改音频文件名
  2. 建立音频数组, 指向对应音频文件, 英文在 res_audio_data.h, 中文在 res_audio_data_cn.h
  3. BES2500ZP BES2500zp bes2500yp_采样率_14

  4. 新添语音通道, 在 app_media_player.cpp 选择语音类型, 中文 或者 英文
  5. BES2500ZP BES2500zp bes2500yp_数据_15

  6. 并在 resources.h 文件中, 添加新提示音 audio_id
  7. BES2500ZP BES2500zp bes2500yp_单片机_16

  8. 之后就可以调用 media_PlayAudio(AUD_ID_TEST, 0) 播放新增的提示音
  9. 如果上层需要使用到语音提示, 如 apps.cpp, 可以在 apps.cpp 的 app_voice_report 添加新
    的语音提示, 并在每个target的 app_status_ind.h目录下, 添加新的语音提示, 这样就可以随时在上层调用该提示音
  10. BES2500ZP BES2500zp bes2500yp_嵌入式硬件_17

  11. 添加后上层代码调用app_voice_report(APP_STATUS_INDICATION_TEST, 0)即可播放新加的提示音

电池信息

电池底层驱动信息存放在app_battery.cpp文件中, 电池信息解析在app_battery_handle_proess 函数中, 目前区分充电模式下的电池信息解析和普通放电模式下的电池信息解析

BES2500ZP BES2500zp bes2500yp_单片机_18


电池电压的满电电压、低电电压、关机电压设置存放在tgt_hardware.h中

BES2500ZP BES2500zp bes2500yp_数据_19

音量调节

开机默认音量

在 target.mk中AUDIO_OUTPUT_VOLUME_DEFAULT表示默认音量, 16 为最大音量

BES2500ZP BES2500zp bes2500yp_采样率_20


上行通话音量

前级通话音量默认为12, 一格大约代表2db的大小, 也可以在后级加入POST GAIN和EQ增益进行调节

BES2500ZP BES2500zp bes2500yp_嵌入式硬件_21