Skip to content
GitLab
  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • J JL_EARPHONE_ISSUE
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 150
    • Issues 150
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • chenmingqiu
  • JL_EARPHONE_ISSUE
  • Issues
  • #95
Closed
Open
Created Mar 30, 2023 by chenmingqiu@chenmingqiuOwner

FAQ:主从切换使用说明

1、主从切换支持的场景:
  有3种场景支持主从切换:
  ①、tws连接手机状态,单耳入仓,或者单耳低电关机。该类型主从切换为强制类型,代码默认开启。
  ②、通话时候根据电量自动主从切换,该类型为可选类型,程序选择开关。通话时候根据电量做主从切换是因为通话时候主机功耗比从机要大,解决主机耗完电但是从机还有较多电量情况。
  ③、歌曲播放根据主从信号质量做自动主从切换,该类型为可选类型,程序选择开关。该功能是为了兼容主机超距时候,没有主从切换从机会和手机断开连接的情况。

2、通话、歌曲(歌曲最新SDK已支持)时候根据电量做主从切换介绍:
app_config.h文件里面对应的宏置1开启通话电量平衡功能:
image
通话电量平衡控制介绍:
image
image
image

bool tws_host_esco_role_switch_by_power_balance(u16 m_voltage, u16 s_voltage)
{
    if (m_voltage + 15 <= s_voltage) {
        return 1;
    }
    return 0;
}

歌曲时候根据电量做主从切换:

bool tws_host_role_switch_by_power_balance(u16 m_voltage, u16 s_voltage)
{
    if (m_voltage + 100 <= s_voltage) {
        return 1;
    }
    return 0;
}

3、歌曲播放根据主从信号质量做主从切换:
app_config.h文件里面对应的宏置1开启歌曲播放根据信号质量做主从切换功能:
image
歌曲播放根据信号质量做主从切换功能控制,该函数在程序外面重写即可,库里面的函数会优先调用外面重写函数:
image

u8  a2dp_role_switch_check_debug(int master_rx_num, int slave_rx_num, int master_rssi, char slave_rssi, int tws_rssi, int msec)
{
#if 1
    static int rx_rssi_print_cnt = 0;
    if (++rx_rssi_print_cnt == 10) {
        rx_rssi_print_cnt = 0;
        printf("rx: %d, %d, rssi: %d, %d, %d, msec:%d\n",
               master_rx_num, slave_rx_num,
               master_rssi, slave_rssi, tws_rssi, msec);
    }
    return 1;
#endif
    return 0;

}
u8 a2dp_role_switch_check_rssi(int master_rssi, char slave_rssi)
{
    if (master_rssi < -58 && slave_rssi > -70 && master_rssi + 15 <= slave_rssi) {
        return 1;
    }
    return 0;

}

4、通话时候根据信号做主从切换介绍:
调用void tws_api_esco_rssi_role_switch(u8 enable)接口使能通话时候根据信号质量做主从切换功能: image
通话根据信号质量做主从切换功能控制,该函数在程序外面重写即可,库里面的函数会优先调用外面重写函数,信号强弱查询函数使用和歌曲播放时候的一样:

u8 esco_role_switch_check_rssi(int master_rssi, char slave_rssi)
{
    if (master_rssi < -58 && slave_rssi > -70 && master_rssi + 15 <= slave_rssi) {
        return 1;
    }
    return 0;

}
Edited Aug 25, 2025 by chenmingqiu
Assignee
Assign to
Time tracking