JLstudio可视化工具使用说明
📎 原始文档:https://www.kdocs.cn/l/ch9jh3xyF7yu JLstudio可视化工具使用说明
文档简介
该文档主要把JL700N(或AC700N)作为案例,描述 JL700N(AC700N)一拖二可视化工具开发相关的使用说明和注意事项,收集并持续更新调试开发过程中的相关疑问和解答,对SDK介绍文档做一个补充说明,为用户进行二次开发提供参考。
由于版本较多,如本文档有与SDK包内文档或代码注释说明冲突,以后者为标准。
一、可视化工具SDK适用的产品形态
TWS一拖二耳机:可以同时连接两部设备,实现双设备之间无缝切换、共同使用一部耳机的效果。典型代表就是:华为的FREE BUDS 4 耳机
TWS一拖二耳机 +dongle:可以同时连接两部设备,通过蓝牙连接一台设备,再通过dongle连接另一台设备(dongle端是2.4G连接拥有更低的延时,低至40ms),实现双设备之间无缝切换、共同使用一部耳机的效果。典型代表就是:声阔 VR P10耳机
二、可视化工具的安装
工具目前只支持在windows环境下安装,首先我们要获取到可视化工具的安装包,工具的安装包可以找相关的芯片代理商获取,代理可以找我们杰理的工程助理获取。
工具依赖:
- 工具的代码和补丁的管理用的是GIT管理,需要提前安装好GIT - 安装杰理编译器,参考 杰理WINDOWS环境安装及其他事项.otl - 下载并安装VS Code https://code.visualstudio.com/Download
安装工具:
获取到<可视化配置工具.exe>后,双击启动安装, 一路”next”完成安装。
JLStudio_4.4.0.zip
三、可视化工具的使用
基本使用说明
首次使用需要先登陆,杰理员工可通过钉钉扫码登陆,客户可通过微信扫码登陆,登陆成功后才能下载SDK。(如果没有账户,请联系业务端或者代理获取账户)

点击“新建”,在弹出的对话框中点击”检测SDK版本”, 选择方案,然后点击”下载” 下载最新版本SDK. (下载的SDK默认在安装路径下的standard文件夹)

配置好项目名称和项目存放路径,点击“创建”, 进入配置界面 (不同SDK配置界面会有差异)

点击菜单栏“编译”->”编译下载”,工具会先导出配置信息到工程目录/output文件夹,然后启动SDK的编译,编译完成后自动下载代码到开发板

工程目录结构说明

主页功能说明

版本号: 当前项目SDK的版本号
版本补丁: 当前已发布的最新补丁号, 红色表示有新的补丁未合并。带”.**”后缀的表示内测版
检测更新: 点击会检测工程列表中所有项目是否存在新的补丁
复制: 用于复制项目
- 菜单功能说明
| 项目-> 导出调试(ufw) | 导出可编辑的ufw工程可以在对话框中选择支持编辑的功能选项 |
|---|---|
| 快照-> 保存快照 | 用于保存工程当前配置,工具会在工程目录下先执行git add 和 git commit 命令保存所有改动,然后通过git tag命令打上对应标签 |
| 快照-> 快照列表 | 管理快照 |
| 编译-> 导出配置 | 导出工程的配置文件 |
| 编译-> 编译下载(带key) | 编译SDK并下载, 下载脚本会自动带上当前使能的key文件路径 |
| 编译-> key文件配置 | 配置key文件 |
| 编译-> 擦除VM | 擦除VM区域,并启动下载 |
| 编译-> 擦除flash | 擦除flash所有数据,包括保留区域,并启动下载 |
| 编辑-> 打开SDK | 通过codeblock或者VS Code 打开SDK工程 |
| 编辑-> 编辑器配置 | 配置codeblock和VS Code安装路径,选择默认使用的IDE |
| 工具-> sin工具 | 正玄波格式(.sin)提示音生成工具 |
| 工具-> 串口输出工具 | 通用串口终端, 支持SDK带颜色打印, 可以将”情景配置”相关打印翻译成对应的中文描述 |
| 工具-> 打开调试(ufw) | 打开ufw调试工程 |
| 工具-> 工具管理 | 用于添加第三方工具的调用 |
| 未连接/已连接 | 通过串口连接小机, 用于在线调试 |
| 快照-> 保存快照 | 用于保存工程当前配置,工具会在工程目录下先执行git add 和 git commit 命令保存所有改动,然后通过git tag命令打上对应标签 |
- 配置文件说明
| sdk_config.h | 配置项生成的宏定义 | 执行 编译->编译下载 时,工具会先调用SDK目录下的make_prompt.bat 将output目录下的这两个文件copy到SDK目录下参与编译 |
|---|---|---|
| sdk_config.c | 配置项生成的const变量定义 | 执行 编译->编译下载 时,工具会先调用SDK目录下的make_prompt.bat 将output目录下的这两个文件copy到SDK目录下参与编译 |
| cfg_tool.bin | 配置项生成bin文件, 比如蓝牙名 | 支持通过ufw编辑 |
| stream.bin | 音频流程图配置信息 | 支持通过ufw编辑 |
| tone_en.cfg | 提示音文件 | 提示音文件需要在提示音配置页面单独导出,工具会根据导出的选项在 sdk_config.h中生成TCFG_TONE_ZH_ENABLE和TCFG_TONE_EN_ENABLE宏定义 |
| tone_zh.cfg | 提示音文件 | 提示音文件需要在提示音配置页面单独导出,工具会根据导出的选项在 sdk_config.h中生成TCFG_TONE_ZH_ENABLE和TCFG_TONE_EN_ENABLE宏定义 |
- 补丁更新 进入主页,点击项目的”补丁版本”按钮,进入到如下所示的补丁管理界面
配置好bcompare软件所在的路径,点击蓝色的补丁号会打开补丁修改文件列表对话框,单击蓝色文件名可以用bcompare打开查看具体的修改内容
点击”自动合并”按钮,工具开始自动合并到最新补丁,如果有文件冲突,会显示红色,可以用bcompare或者VScode打开冲突文件,进行合并冲突项。
四、可视化工具配置项说明
工具的大部分的常用配置都可以在SDK的sdk_config.h文件里面可以看到。
五、可视化工具常见问题汇总
- 如何添加自定义的文件进入工程,使用工具编译 可视化工具编译是通过makefile文件(makefile文件在SDK的首目录下)去进行编译。我们只需要修改makefile文件,加入需要编译的文件即可,需要注意的是makefile文件的语法以及不要有多余的空格。


于此同时我们也要兼容codeblock编译时的情况,也要在codeblock工程里面加入相关文件
- 如何只改代码不改工具去修改按键功能 工具默认的按键功能是通过情景配置里面的按键功能去设置,但难免有时候有些功能配置不出来或者不想用工具去配置的情况,这时候就需要通过我们代码去实现按键功能。
首先我们在板级配置里面配置好按键设置,再把工具里面的情景配置的所有按键功能关闭。
再按照上面如何添加自定义文件说明把下面的两个文件key_event_deal.c , key_event_deal.h加入工程中
以下链接的压缩包里面包含了大部分按键的功能,这里主要说明下和普通SDK的按键的最大区别部分。
适配2.0.1SDK修改
适配2.0.2SDK修改
普通SDK是只有一个设备连接的情况,不用在意一拖二的情况。一拖二的情况下,与手机进行蓝牙交互是需要判断当前使用的活跃设备,获取到活跃设备后进行准确的指令交互。活跃的设备的优先级判断逻辑是:通话中>播歌中>待机中,获取到当前活跃的设备后就可以判断设备的一些状态,包含a2dp、hfp、蓝牙地址等等。

- 如何只改代码去更新灯效 工具默认的灯效显示是通过情景配置里面的led状态功能去设置,但难免有时候有些功能配置不出来或者不想用工具去配置的情况,这时候就需要通过我们代码去实现led的状态显示。
首先我们把工具里面的情景配置的所有led情景关闭。
在工具的led配置里面把一些简单的配置做好,以及项目需要应用到的LED灯效配置好。(具体灯效的配置可以参考我们默认做好的灯效)
把工具里面生成的LED配置里面配好的灯效的UUID映射进我们的代码里面。(需要注意的是,工具UUID和代码需要一致,灯效的UUID改变后代码也要同时改变)


再在自己想要显示对应灯效的地方调用led_ui_manager_display即可
这里代码实现的示例是首次连接上设备后更新灯效为白灯10s/闪, 可以仿照下面的示例实现各种情景下的灯效显示。
void led_ui_manager_display(u8 local_action, u16 uuid, u8 mode)
/*----------------------------------------------------------------------------*/
/**@brief 对应方式执行对应UUID的LED灯效
@param local_action:是否是本地行为; 1:本地行为,单耳执行 0:非本地行为,对耳同时执行
@param uuid:需要执行灯效的UUID号
@param mode:执行灯效时的模式行为 , 1:嵌入执行,执行完恢复上一个灯效
2:切换执行,就是切换灯效
*/
/*----------------------------------------------------------------------------*/
int custom_led_bt_msg_handler(int *msg)
{
struct bt_event *bt = (struct bt_event *)msg;
switch (msg[0] & 0xff) {
case BT_STATUS_FIRST_CONNECTED:
led_ui_manager_display(0, LED_WHILE_10S_FLASH, 0);
break;
case BT_STATUS_SECOND_CONNECTED:
break;
case BT_STATUS_FIRST_DISCONNECT:
break;
case BT_STATUS_SECOND_DISCONNECT: //两个手机断开,可能会是两次BT_STATUS_SECOND_DISCONNECT
break;
}
return 0;
}
APP_MSG_HANDLER(custom_led_bt_msg_entry) = {
.owner = 0xff,
.from = MSG_FROM_BT_STACK,
.handler = custom_led_bt_msg_handler,
};
- 如何代码实现播放添加的提示音 首先我们需要在工具查看我们添加的是英文提示音还是中文提示音,把提示音的存储位置映射进代码随便一个位置里面。这里示例所示是英文提示音,中文提示音也是类似的。


播放提示音的接口在tws_tone_player.h 、tone_player.h都有详细说明,根据需要使用使用对应接口即可
5. 在可视化工具按键的基础上实现同一个按键的额外操作 例如,可视化配置工具已经配置双击暂停播放,还需要在这个基础上实现(配置工具实现不了的功能)例如修改BLE广播数据,可按照如下修改
添加以下代码到key_ability.c中(或者其他更合适的文件)
#include "app_msg.h"
#include "key_driver.h"
int test_event_handler(int *msg)
{
u8 uuid;
u8 key_value, key_state, is_from_tws;
if (!APP_MSG_FROM_KEY(msg[0])) {
return 0;
}
key_value = APP_MSG_KEY_VALUE(msg[0]); //按键值,0/1/2……
key_state = APP_MSG_KEY_ACTION(msg[0]);//单击双击等,对应enum key_action
is_from_tws = msg[1];//是否remote同步过来的按键,APP_KEY_MSG_FROM_TWS
//根据以上三个参数执行自己的功能
return 0;//返回0,继续执行配置工具配置好的功能
return 1;//返回1,不再执行配置工具配置好的功能
}
APP_MSG_PROB_HANDLER(test_msg_entry) = {
.owner = 0xff,
.from = MSG_FROM_APP,
.handler = test_event_handler,
};