多对一配对问题

Viewed 82

问题描述

我现在碰到一个问题,使用的是1V8的历程去改的,在client的static void sle_uart_client_sample_seek_result_info_cbk(sle_seek_result_info_t *seek_result_data)
这个回调函数中加入一些条件约束去配对,项这样

static void sle_uart_client_sample_seek_result_info_cbk(sle_seek_result_info_t *seek_result_data)
{

    
    if(seek_result_data->addr.addr[0] == 0xbc) //头
    {
       if((local_addr[2]&local_addr[3])  ==  seek_result_data->addr.addr[1])
       {
        if((local_addr[4]&local_addr[5])  ==  seek_result_data->addr.addr[2])
        {
  
                osal_printk("sle_sample_seek_result_info_cbk %s\r\n", seek_result_data->data);
        if (seek_result_data != NULL) {
if(g_sle_uart_conn_num < SLE_UART_CLIENT_MAX_CON){
                   
                            osal_printk("will connect dev\n");
                            (void)memcpy_s(&g_sle_uart_remote_addr, sizeof(sle_addr_t), &seek_result_data->addr, sizeof(sle_addr_t));
                            sle_stop_seek();
                           
                        }
                    }			
    }
        }
}
}

满足client 设置的配对条件就加入配对。这样会出现一个问题,就是如果有一个不满足配对条件的设备在旁边就会一直进入这个回调函数,半小时会出现异常。此时会打印log

  [Connected]
addr:bc:**:**:**:8f:db, handle:00
[sle uart client] conn state changed disc_reason:0x0
[sle uart client] SLE_ACB_STATE_CONNECTED
ssapc exchange info, conn_id:0, err_code:2


[Disconnected]
addr:bc:**:**:**:8f:db, handle:00
[sle uart client] exchange_info_cbk,pair complete client id:0 status:2
[sle uart client] exchange mtu, mtu size: 520, version: 1.
[sle uart client] conn state changed disc_reason:0x7
[sle uart client] SLE_ACB_STATE_DISCONNECTED
sle_sample_seek_result_info_cbk
will connect dev

重复往返,其他设备就无法配对了,必须重启才能恢复正常。

做过的尝试

修改过扫描参数

void sle_uart_start_scan(void)
{
    sle_seek_param_t param = { 0 };
    param.own_addr_type = 0;
    param.filter_duplicates = 1;
    param.seek_filter_policy = 1;
    param.seek_phys = 1;
    param.seek_type[0] = 1;
    param.seek_interval[0] = SLE_SEEK_INTERVAL_DEFAULT;
    param.seek_window[0] = SLE_SEEK_WINDOW_DEFAULT;
    sle_set_seek_param(&param);
    sle_start_seek();
}

重复过滤开关,打开了还是会频繁进入回调
扫描间隔时间加长,也没作用。
请问我该如何去解决这个问题。

1 Answers

扫描的时候加过滤不就可以了吗,就不会进入callback了

底层的代码无从知晓,不知道会是什么异常导致

过滤在哪里加,可以一1v8那个例子的client端说明一下吗