This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC3200 STA模式下读取RSSI值没变化



我在一个TASK中开启了Wlan扫描策略,每隔5s扫描一次,在以后的代码里面都没有disable scan

int wlan_scan_background()
{
  unsigned char   policyOpt;
  unsigned long IntervalVal = 5;
  int lRetVal;
  // enable scan
  policyOpt = SL_SCAN_POLICY(1);
  // set scan policy - this starts the scan
  lRetVal = sl_WlanPolicySet(SL_POLICY_SCAN , policyOpt,
                             (unsigned char *)(IntervalVal), sizeof(IntervalVal));
 return lRetVal;
}
然后在另一个Task中调用sl_WlanGetNetworkList 获取当前连接的AP的RSSI值,可是不管AP离设备多远,有没有遮挡,每次读取到的RSSI值都不变,问题出在哪?下面是获取的代码。
int get_scan_result(Sl_WlanNetworkEntry_t* netEntries )
{
    int lRetVal;
    #define SCAN_TABLE_SIZE   20
    // lRetVal indicates the valid number of entries
    // The scan results are occupied in netEntries[]
    lRetVal = sl_WlanGetNetworkList(0, SCAN_TABLE_SIZE, netEntries);
    if(lRetVal == -1)
    {
     UART_PRINT("can not get scan results...\r\n");
    }
    return lRetVal;
}
  • 在读取RSSI信号质量的时候,需要增加一点延时,不能连续不间断的读取,在读取时候增加延时后进行读取

  • 谢谢 Terry的回复, 我读RSSI的TASK是 每隔3s读一次,而且每次读之前都osi_Sleep了 200ms, 可是都出来的还是一样的, 感觉好像底层就没有scan。每次断开重新启动设备的时候 值才会变一次。

  • // enable scan
        //
        ucpolicyOpt = SL_SCAN_POLICY(1);
        //
        // set scan cycle to 10 seconds
        //
        policyVal.uiPolicyLen = 10;
        //
        // set scan policy - this starts the scan
        //
        lRetVal = sl_WlanPolicySet(SL_POLICY_SCAN , ucpolicyOpt,
                                   (unsigned char*)(policyVal.ucPolicy), sizeof(policyVal));

  • /启动扫描热点
          ui_policy_inv = 5;
          ucpolicy_opt = SL_SCAN_POLICY(1);
          ret_val = sl_WlanPolicySet(SL_POLICY_SCAN, ucpolicy_opt, (unsigned char *)(&ui_policy_inv), sizeof(ui_policy_inv));
          if(ret_val < 0){
            DO_Printf("Wlan Enable Scan Policy Failure.\r\n");
            goto return_point;
          }

    开启扫描热点后,等待一段时间,让芯片内部去扫描一些结果,然后循环去查询这个结果列表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    i_val = 20;
      while(i_val--){
        vTaskDelay(1350);
        memset(wlan_net_entries, 0, sizeof(wlan_net_entries));
        ret_val = sl_WlanGetNetworkList(i_val, (unsigned char)WLAN_MAX_NET_ENTRIE_COUNT, &wlan_net_entries[0]);
        if(ret_val == 0){
          return -1;//无法扫描到热点
        }else{
          for(j_val = 0;j_val < WLAN_MAX_FILTER_ENTRIE_COUNT;j_val++){
            i8 rssi = wlan_net_entries[j_val].rssi;
          }
        }
  • 谢谢Terry,我好像发现问题了

    我的问题应该是出在这行

     // set scan policy - this starts the scan
      lRetVal = sl_WlanPolicySet(SL_POLICY_SCAN , policyOpt,
                                 (unsigned char *)(IntervalVal), sizeof(IntervalVal));

    IntervalVal 传入的时候应该是 传入引用的 应该这么写   (unsigned char *)(&IntervalVal),现在变成传值转换了。

    不过这段代码是从1.2.0的SDK里面的antenna_selection 里面copy过来的,没多加考虑。SDK这个地方应该是错误的。

    你们Check一下,SDK这个地方是不是有问题?