KDocs 研发资料库
  • 屏融合应用方案入口汇总
  • JL701N穿戴客述问题FAQ
  • JL701N穿戴类补丁list
  • 手表软件调试
  • JL701手表硬件设计注意事项 总结
  • 手表烧录_升级工具说明
  • 手表量产相关
  • 生产烧录KEY及代码和升级代码
  • AC695N系列手表SDK开发指南
  • JL7012A手表-SDK入门指南V1.0
  • 穿戴手表JL701N-入门到进阶开发指导
  • 彩屏充电仓JL701N LVGL入门到进阶指导文档
  • AC695N手表软硬件问题整理
  • JL701N手表软硬件问题整理
  • 701n手表SDK共性问题汇总
  • UI效果参考demo文档
  • 屏幕触摸驱动相关参考
  • 穿戴类支付宝支付流程
  • AC701N_PMU_介绍
  • 经典蓝牙相关接口说明
  • music应用详细设计说明书
  • music_player接口设计说明文档
  • PO声测试以及处理方法
  • DAC性能测试指南
  • 杰理串口升级规范
  • AC696N串口升级说明
  • AC695N系列手表UI开发指南
  • AC695N添加升级UI说明文档.
  • UI布局工具使用说明
  • UI接口设计说明书
  • UI工具快速使用说明
  • 701N_UI编辑工具用户手册
  • UI工程源文件升级工具使用说明
  • 701N屏幕驱动配置说明
  • JL701N 2D图形硬件加速接口使用说明
  • JL701_watch常用例子参考
  • JL_WATCH_SDK UI相关工具使用文档
  • 智能手表音频 设计调试手册 V1.2
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 701手表 PCBA产测工具使用说明书 V1.0
  • 杰理定频问题排查2021.1.26
  • BQB5.4 20231007
  • 各类概率性死机调试解决指南
  • 不开机问题处理汇总(仅供参考)
  • 蓝牙搜索不到问题处理汇总(仅供参考)
  • 样机发烫(仅供参考)
  • 蓝牙音乐卡顿问题处理汇总(仅供参考)
  • 充电问题处理汇总(仅供参考)
  • 触摸问题处理汇总(仅供参考)
  • 功耗调试指导
  • JL701N穿戴客述问题FAQ
  • 701N 开发板新屏幕驱动修改
  • AC701 nandflash A8图片显示问题
  • 支付宝乘车码接入资料
  • 多国语言及字库使用指南
  • 查看C程序Flash 和RAM 资源占用说明文档
  • 701N_SDK3.0.1_OPUS_OGG 编解码
  • 蓝牙在线调eq说明
  • BR EDR BLE 蓝牙性能测试配置方法_
  • BLE-HID
  • BLE-HID 调试文档
  • 【问题】701v301外置flash播放wts提示音
  • 本地录音开启及调试
  • 死机分析
  • 表盘传输APP层的压缩算法
  • 功能模版:JL701_V301_UI资源使用FAT文件系统demo
  • JL7013+4G CAT1 参考设计原理图
  • 吾爱4G模组+JL701接口说明
  • (电脑一拖多)手表升级dongle工具使用补充说明
  • 蓝牙接口使用说明
  • ble 开发流程
  • 彩屏仓功耗优化
  • 彩屏仓补丁list
  • 更新字库步骤
  • 支付宝硬件接入资料

耳机本地播放说明

📎 原始文档:https://www.kdocs.cn/l/cpvj3e36bBSX 耳机本地播放说明

1、彩屏仓耳机本地播放协议

  1. 增加两条指令 image

  2. 同步仓的经典蓝牙地址给耳机、耳机同步给对耳

void sys_smartstore_event_deal(struct sys_event *event)
{
    u8 *data = event->u.smartstore.args;
    u8 len = event->u.smartstore.data_len;
    log_info("sys_smartstore_event_handle");
...
 case CUSTOM_EDR_CONTRAL_CONN:
            log_info("CUSTOM_EDR_CONTRAL_CONN\n");
            custom_ctrle_edr_conn(data[0]);
            break;
        case CUSTOM_EDR_SYNC_INFO://仓的地址
            log_info("CUSTOM_EDR_CONTRAL_CONN\n");
            custom_ctrle_emitter_info(data,len);
            break;
....
}

耳机接收到仓的地址、同步给副耳同时清除配对信息

static void custom_ctrle_emitter_info(u8 *data, u16 len)
{
    log_info("%s[line:%d, len:%d]\n",__func__,__LINE__, len);
    memcpy(&emitter_info, data, len);
    // put_buf(emitter_info.emitter_addr, 6);
    sync_emitter_addr();
    sync_clear_last_info();
    clear_last_info();

    
}
//相关函数
static void remote_emitter_addr(u8 *data, u16 len)
u8* get_remote_emitter_addr(void)

对耳连接后同步仓的地址
image 相关函数

//发命令同步仓的地址
void sync_emitter_addr(void)  
//副耳接收到同步地址的回调函数
static void earphone_sync_sbox_setting_receive(void *_data, u16 len, bool rx)
{
...
case SYNC_CMD_EMITTER_ADDR:
            remote_emitter_addr(&data[1], len-1);
            break;
...
}

  1. 仓发命令连接耳机还是回连手机
void sys_smartstore_event_deal(struct sys_event *event)
{
    u8 *data = event->u.smartstore.args;
    u8 len = event->u.smartstore.data_len;
    log_info("sys_smartstore_event_handle");
...
 case CUSTOM_EDR_CONTRAL_CONN:        //控制耳机连接仓还是手机
            log_info("CUSTOM_EDR_CONTRAL_CONN\n");
            custom_ctrle_edr_conn(data[0]);
            break;
        case CUSTOM_EDR_SYNC_INFO:
            log_info("CUSTOM_EDR_CONTRAL_CONN\n");
            custom_ctrle_emitter_info(data,len);
            break;
....
}
void custom_ctrle_edr_conn(u8 cmd)
{
    u8 phone_mac[6];
    u8 mac_addr[6];
    
    u8 flag = 0;
    g_printf("%s[line:%d, cmd:%d]\n",__func__,__LINE__, cmd);
    switch (cmd)
    {
    case 1:         /* 如果连接手机先断开手机。然后处于可发现可连接状态 */

        delete_link_key(get_remote_emitter_addr(), 1);
            

        if ((BT_STATUS_CONNECTING == get_bt_connect_status()) ||
            (BT_STATUS_TAKEING_PHONE == get_bt_connect_status()) ||
            (BT_STATUS_PLAYING_MUSIC == get_bt_connect_status())) {

                user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
                get_current_poweron_memory_search_index(phone_mac);
                put_buf(phone_mac, 6);
        }else {
            bt_wait_phone_connect_control(1);
        }
        
        
        break;
    case 2:    /*发射器断开耳机、同时耳机清除仓的配对记录、如果之前连接过手机回连手机 */

        clear_last_info();
            // conn_emitter_addr[5] = ~conn_emitter_addr[5];
        sync_clear_last_info();

                

        flag = restore_remote_device_info_opt(mac_addr, 1, get_remote_dev_info_index());
        if(flag){
            printf("%s[line:%d] connected last mac\n",__func__,__LINE__);
            put_buf(mac_addr,6);
            memcpy(bt_user_priv_var.auto_connection_addr, mac_addr, 6);

            sys_timeout_add(NULL, sw_connect_last_device_from_vm, 1000);
        }
        
        // sys_timeout_add(NULL, sw_connect_last_device_from_vm, 8000);
        // conn_earphone_count = SWITCH_CONN_EARPHINE_COUNT;

        
    default:
        break;
    }
    
}

//相关函数
//清除本地与仓的配对信息
void clear_last_info(void)
//通知副耳清除与仓的配对信息
void sync_clear_last_info(void)