JL701N_2T1_DUPLEX 应用软件问题汇总
📎 原始文档:https://www.kdocs.cn/l/chIrq2N8I2Xh JL701N_2T1_DUPLEX 应用软件问题汇总
开发注意点
- 入门配置必看 2t1双工duplex功能说明.pdf
共性问题
- 无线升级方式 ①从机模式下,按照ble的无线升级方式是可以升级的(加载默认配置,拨码开关打6挡即可);
②主机模式下,需要通过调用接口 KEY_CONNECTED_ROLE_SW按键事件切换成从机角色才可以被测试盒BLE升级搜索到蓝牙名,从而实现主机程序的升级,按照ble的无线升级方式进行升级。 - jl701n_soundbox_release_v1.4.1 主机模式编译报错问题修改 编译报错的原因是由于2T1_duplex板级缺少关于DAC24bit还是16bit的相关宏设置,参考demo板级增加即可:

/*
*DAC 位宽(bit width)配置
*16bit:DAC_16BIT_MODE
*24bit:DAC_24BIT_MODE
* */
#define TCFG_AUDIO_DAC_BIT_WIDTH ADC_BIT_WIDTH_16
#define TCFG_AUDIO_ADC_BIT_MODE ADC_BIT_WIDTH_16
#define TCFG_ADC_BIT_24_TO_16 (0)
#if (TCFG_AUDIO_DAC_BIT_WIDTH == DAC_24BIT_MODE)
#undef TCFG_AUDIO_ADC_BIT_MODE
#define TCFG_AUDIO_ADC_BIT_MODE ADC_BIT_WIDTH_24
#endif
连接复位问题:
公版程序能复现到,修改如下位置,换成CIG_MODE_DUPLEX 就不再复位
此时连接上后,声音会不正常,需要将DAC输出设置为16BIT,声音才是正常的。原因是广播下只能使用16BIT。
3. jl701n_soundbox_release_v1.4.1 从机模式编译报错问题处理 错误为重复定义,将新增加的函数定义注释掉即可。
4. jl701n_soundbox_release_v1.4.1 主从机模式发送自定义命令失败问题解决 问题点:按照原有文档的例子去增加自定义命令失败会导致另一端设备无法收到正确命令
解决办法:修改如下:将主机和从机两端的identification_cmd 的uuid都统一使用
#define CONNECTED_UCMD_SYNC_FUNC_ID CIG_FUNC_ID('U', 'C', 'M', 'D')
按键发送命令传参是传地址。
5. jl701n_soundbox_release_v1.4.2 主从机模式发送自定义命令失败问题解决 jl701n_soundbox_release_v1.4.2 主从机模式发送自定义命令失败问题解决.otl
6. jl701n_soundbox_release_v1.4.1 中的2T1_duplex应用主机模式带电池使用时除开机后第一次插入外,往后插拔USB都无法识别插入拔出问题 解决办法:增加插入拔出事件处理
#define USB_PC_NO_APP_MODE ENABLE_THIS_MOUDLE

#if(SOUNDCARD_ENABLE || MULTI_AUDIO_UPLOAD_TO_UAC_ENABLE)
#undef USB_PC_NO_APP_MODE
#define USB_PC_NO_APP_MODE ENABLE
#endif

#if (SOUNDCARD_ENABLE || MULTI_AUDIO_UPLOAD_TO_UAC_ENABLE)
ret = pc_device_event_handler(event);
printf("======================== ret %d\n", ret);
// 在蓝牙初始化完成前不能枚举usb设备
switch (event->u.dev.event) {
case DEVICE_EVENT_IN:
clock_idle(PC_IDLE_CLOCK);
if (connected_2t1_duplex && (connected_role_config == CONNECTED_ROLE_CENTRAL)) {
printf("usb capture open\n");
set_cig_audio_dev_online(LIVE_USB_CAPTURE_MODE);
cis_audio_multi_capture_open(LIVE_USB_CAPTURE_MODE);
}
break;
case DEVICE_EVENT_OUT: // usb 拔出
if (connected_2t1_duplex && (connected_role_config == CONNECTED_ROLE_CENTRAL)) {
printf("usb capture close\n");
set_cig_audio_dev_offline(LIVE_USB_CAPTURE_MODE);
cis_audio_multi_capture_close(LIVE_USB_CAPTURE_MODE);
}
break;
}
#else
- jl701n_soundbox_release_v1.4.1 中的2T1_duplex应用实现按键绑定配对功能 参考下列补丁:
【金山文档】 jl701n_soundbox_release_v1.4.1 2T1_duplex应用实现按键绑定配对功能
https://kdocs.cn/l/cnUPMkxk7jCP - jl701n_soundbox_release_v1.4.1 中的2T1_duplex应用把 WIRELESS_MIC_CONFIG_ECHO宏置1,只要把打印关掉,混响就不正常问题处理 解决办法:直接注释掉以下put_buf接口定义

- jl701n_soundbox_release_v1.4.1 中的2T1_duplex应用主机模式linein通道设置为单条通道时,USB录音主机的linein输入会变调问题处理 按照下图截图修改,将channel数写死为2

- jl701n_soundbox_release_v1.4.2 中的2T1_duplex应用 主机模式PC端调节PC音量条从机端没有同步音量设置问题处理。 jl701n_soundbox_release_v1.4.2 中的2T1_duplex应用 主机模式PC端调节PC音量条从机端没有同步音量设置问题处理.otl
差异配置
- jl701n_soundbox_release_v1.4.2 中的2T1_duplex应用 超时断开判断时间修改方法 用的cig 一开始注册的时候结构体,增加多这个aclToMs成员初始化就可以,示例修改为500ms

- jl701n_soundbox_release_v1.4.2 中的2T1_duplex应用 本地linein 输入,但是DAC 却是左右声道输出为假立体输出,linein输入的左右声道输入,在dac的左右声道输出都会有声音,修改为真立体的办法如下: 修改USB真立体的:(注意改修改,要是电脑原本挂载过旧SDK的设备,需要先手动卸载后重新挂载才会更新)

#ifndef LINEIN_TO_USB_TRUE_SOILD_EN
#define LINEIN_TO_USB_TRUE_SOILD_EN 1 ///真立体输出到USB 使能
#endif
#ifndef MIC_CHANNEL
#if TCFG_PC_FOUR_MIC
#define MIC_CHANNEL 4
#else
#if LINEIN_TO_USB_TRUE_SOILD_EN
#define MIC_CHANNEL 2///1
#else
#define MIC_CHANNEL 1
#endif
#endif
#endif

#if (SOUNDCARD_ENABLE || MULTI_AUDIO_UPLOAD_TO_UAC_ENABLE)
#if LINEIN_TO_USB_TRUE_SOILD_EN
usb_mix_fifo = mix_fifo_init(MIC_CHANNEL, 48000);
#else
usb_mix_fifo = mix_fifo_init(MIC_CHANNEL, 48000);
#endif
#endif

#define MIX_FIFO_BUF_TEMP_LEN (256)
#define MIX_FIFO_BUF_POINTS (256)
#define MIX_FIFO_CH_BUF_POINTS (4096)//(1000)
static s16 temp_buffer[512] = {0};
extern u8 user_mute_mic_flag ;
extern void *linein_mix_fifo_ch;
#if LINEIN_TO_USB_TRUE_SOILD_EN
if (channel_num == 2) { ///双声道直接写入
u32 remain_len = len;
u32 ret_len = 0;
while (remain_len) {
if (remain_len > 256) {
// pcm_dual_to_dual_or_single(AUDIO_CH_DIFF, 1, temp_bbuf, data, 256);
// ret_len = cbuf_write(&fifo_ch->cbuffer, temp_bbuf, 128);
ret_len = cbuf_write(&fifo_ch->cbuffer, data, 256);
if (ret_len == 0) {
break;
}
wlen += ret_len;
remain_len -= 256;
data += 128;
} else {
// pcm_dual_to_dual_or_single(AUDIO_CH_DIFF, 1, temp_bbuf, data, remain_len);
// ret_len = cbuf_write(&fifo_ch->cbuffer, temp_bbuf, remain_len / 2);
ret_len = cbuf_write(&fifo_ch->cbuffer, data, remain_len);
wlen += ret_len;
remain_len = 0;
break;
}
}
} else {
pcm_single_to_dual(temp_buffer, data, len);
wlen = cbuf_write(&fifo_ch->cbuffer, temp_buffer, len<<1);
}
#else
if (channel_num == 2) {
u32 remain_len = len;
u32 ret_len = 0;
while (remain_len) {
if (remain_len > 256) {
pcm_dual_to_dual_or_single(AUDIO_CH_DIFF, 1, temp_bbuf, data, 256);
ret_len = cbuf_write(&fifo_ch->cbuffer, temp_bbuf, 128);
if (ret_len == 0) {
break;
}
wlen += ret_len;
remain_len -= 256;
data += 128;
} else {
pcm_dual_to_dual_or_single(AUDIO_CH_DIFF, 1, temp_bbuf, data, remain_len);
ret_len = cbuf_write(&fifo_ch->cbuffer, temp_bbuf, remain_len / 2);
wlen += ret_len;
remain_len = 0;
break;
}
}
} else {
wlen = cbuf_write(&fifo_ch->cbuffer, data, len);
}
#endif
修改dac 输出的真立体:
3. jl701n_soundbox_release_v1.4.2 中的2T1_duplex应用 主机端不绑定配对,从机端实现绑定配对的修改方法 jl701n_soundbox_release_v1.4.2 中的2T1_duplex应用 主机端不绑定配对,从机端实现绑定配对的修改方法.otl
- jl701n_soundbox_v1.4.3beta2 版本sdk 使用 2T1_duplex应用 通过自动主从切换实现单程序对讲机应用功能修改办法 jl701n_soundbox_v1.4.3beta2主从自动切换对讲机20241123.rar
内部gitlab: 文件 · feature_sdk_1.4.3_beta2_单程序对讲 · 自由品牌 / 客户支持 / SOUNDBOX / ac701n_soundbox_sdk · GitLab
叠加小需求:
若需要按键才能连接上:按照以下三个截图修改:
对讲机两边按键触发app_connected_remove_pairs_addr(); 清除配对信息后才能连接上

