FAQ:主从切换使用说明
1、主从切换支持的场景:
有3种场景支持主从切换:
①、tws连接手机状态,单耳入仓,或者单耳低电关机。该类型主从切换为强制类型,代码默认开启。
②、通话时候根据电量自动主从切换,该类型为可选类型,程序选择开关。通话时候根据电量做主从切换是因为通话时候主机功耗比从机要大,解决主机耗完电但是从机还有较多电量情况。
③、歌曲播放根据主从信号质量做自动主从切换,该类型为可选类型,程序选择开关。该功能是为了兼容主机超距时候,没有主从切换从机会和手机断开连接的情况。
2、通话、歌曲(歌曲最新SDK已支持)时候根据电量做主从切换介绍:
app_config.h文件里面对应的宏置1开启通话电量平衡功能:

通话电量平衡控制介绍:



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开启歌曲播放根据信号质量做主从切换功能:

歌曲播放根据信号质量做主从切换功能控制,该函数在程序外面重写即可,库里面的函数会优先调用外面重写函数:

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)接口使能通话时候根据信号质量做主从切换功能:

通话根据信号质量做主从切换功能控制,该函数在程序外面重写即可,库里面的函数会优先调用外面重写函数,信号强弱查询函数使用和歌曲播放时候的一样:
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;
}