Adrien G.
Adrien G.

Reputation: 431

Using WINC1500 with a PIC32, scan not working properly

I'm currently working on a project using a PIC32 and the wifi module ATWINC1500. I won't be able to give all the code but I'm on a test function that I can share. First, here is some settings and configuration I'm using:

What I'm trying to do is to connect the Wifi module to an existing Access Point using the Infrastructure mode. I'm able to get the number of access point around me but when I try to read information from those access points, information are empty, void or incorrect. Here is my code:

bool WIFI_Test_Infrastructure(void)
{
    //Example: https://www.microchip.com/forums/m906568.aspx
    
    //Wait for WINC1500 to be initialized
    if(isWdrvExtReady() == false)
        return false;
    
    //Start a scan or wait for result
    IWPRIV_PARAM_SCAN scanner;
    IWPRIV_GET_PARAM param_scan = {
        .scan = scanner
    };
    iwpriv_get(SCANSTATUS_GET, &param_scan);
    IWPRIV_SCAN_STATUS status = param_scan.scan.scanStatus;
    IWPRIV_EXECUTE_PARAM dummy_param;
    
    //Process StateMachine while scanning
    if(status == IWPRIV_SCAN_IDLE)
    {
        vTaskDelay(1000 / portTICK_PERIOD_MS);

        //Disconnect wifi from everything
        WDRV_Disconnect();
        
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        
        while(WDRV_ConnectionState_Get() != WDRV_CONNECTION_STATE_NOT_CONNECTED)
            vTaskDelay(10 / portTICK_PERIOD_MS);

        vTaskDelay(1000 / portTICK_PERIOD_MS);
        

        WDRV_EXT_CmdScanStart();
        
        return false;
    }
    else if(status == IWPRIV_SCAN_IN_PROGRESS)
    {
        return false;
    }
    else if(status == IWPRIV_SCAN_NO_AP_FOUND)
    {
        iwpriv_execute(SCAN_START, &dummy_param);
        return false;
    }
    else if(status == IWPRIV_SCAN_SUCCESSFUL)
    {
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        
        //Read liste of wifi access point
        uint16_t wifi_number_AP;
        wifi_number_AP = m2m_wifi_get_num_ap_found();
        
        WDRV_SCAN_RESULT scanResult;
        tstrM2mWifiscanResult result;
        int i;
        for(i=0; i<wifi_number_AP; i++)
        {
            m2m_wifi_req_scan_result(i);

            vTaskDelay(1000 / portTICK_PERIOD_MS);

            winc1500_scan_result_read(&result); //ISSUE HAPPENED HERE

            vTaskDelay(1000 / portTICK_PERIOD_MS);

            memcpy((void *)scanResult.bssid, (void *)result.au8BSSID, sizeof(scanResult.bssid));
        }
        
        //SUCCESS
        return true;
    }
    else
    {
        return false;
    }
}

So what happened here:

Bug ATWINC1500

I have been waiting for weeks before asking this. Hope someone can help or at least give me hints on things to check. If I missed information, do not hesitate to ask me.

Thanks in advance!

Adrien

Upvotes: 1

Views: 189

Answers (1)

Adrien G.
Adrien G.

Reputation: 431

The solution was simply a story of stack. I have two other tasks: SYS and TCP/IP. I needed to increase the size of their stack because they were managing several functions about scanning. So there was an overriding somewhere.

Upvotes: 1

Related Questions