From b6490ad458a522a6d1237e52a9a8bb23f210b0fa Mon Sep 17 00:00:00 2001 From: Mimmo La Fauci Date: Thu, 24 May 2012 08:57:46 +0200 Subject: [PATCH] Fix ScanNetworks list --- WiFi/WiFi.cpp | 12 +++++++++++- WiFi/utility/spi_drv.cpp | 1 + WiFi/utility/wifi_drv.cpp | 23 ++++++++++++++++++++++- WiFi/utility/wifi_drv.h | 13 ++++++++++--- WiFi/utility/wifi_spi.h | 1 + 5 files changed, 45 insertions(+), 5 deletions(-) diff --git a/WiFi/WiFi.cpp b/WiFi/WiFi.cpp index 8bb66f215..49f7e3958 100755 --- a/WiFi/WiFi.cpp +++ b/WiFi/WiFi.cpp @@ -152,7 +152,17 @@ uint8_t WiFiClass::encryptionType() uint8_t WiFiClass::scanNetworks() { - return WiFiDrv::scanNetworks(); + uint8_t attempts = 10; + uint8_t numOfNetworks = 0; + + WiFiDrv::startScanNetworks(); + do + { + delay(2000); + numOfNetworks = WiFiDrv::getScanNetworks(); + } + while (( numOfNetworks == 0)&&(--attempts>0)); + return numOfNetworks; } char* WiFiClass::SSID(uint8_t networkItem) diff --git a/WiFi/utility/spi_drv.cpp b/WiFi/utility/spi_drv.cpp index aaa596fcf..8069b024d 100644 --- a/WiFi/utility/spi_drv.cpp +++ b/WiFi/utility/spi_drv.cpp @@ -399,6 +399,7 @@ int SpiDrv::waitResponse(uint8_t cmd, uint8_t* numParamRead, uint8_t** params, u } else { WARN("Error numParams == 0"); + readAndCheckChar(END_CMD, &_data); return 0; } readAndCheckChar(END_CMD, &_data); diff --git a/WiFi/utility/wifi_drv.cpp b/WiFi/utility/wifi_drv.cpp index 180633852..d8785c9c4 100644 --- a/WiFi/utility/wifi_drv.cpp +++ b/WiFi/utility/wifi_drv.cpp @@ -299,7 +299,28 @@ uint8_t WiFiDrv::getCurrentEncryptionType() return encType; } -uint8_t WiFiDrv::scanNetworks() +uint8_t WiFiDrv::startScanNetworks() +{ + WAIT_FOR_SLAVE_SELECT(); + + // Send Command + SpiDrv::sendCmd(START_SCAN_NETWORKS, PARAM_NUMS_0); + + //Wait the reply elaboration + SpiDrv::waitForSlaveReady(); + + // Wait for reply + uint8_t _data = 0; + uint8_t _dataLen = 0; + uint8_t result = SpiDrv::waitResponseCmd(START_SCAN_NETWORKS, PARAM_NUMS_1, &_data, &_dataLen); + + SpiDrv::spiSlaveDeselect(); + + return result; +} + + +uint8_t WiFiDrv::getScanNetworks() { WAIT_FOR_SLAVE_SELECT(); diff --git a/WiFi/utility/wifi_drv.h b/WiFi/utility/wifi_drv.h index 056e6126a..0b6476f00 100644 --- a/WiFi/utility/wifi_drv.h +++ b/WiFi/utility/wifi_drv.h @@ -38,7 +38,7 @@ private: public: /* - * Driver initialization + * Driver initialization */ static void wifiDriverInit(); @@ -82,7 +82,7 @@ public: /* * Disconnect from the network * - * return: WL_SUCCESS or WL_FAILURE + * return: WL_SUCCESS or WL_FAILURE */ static uint8_t disconnect(); @@ -156,7 +156,14 @@ public: * * return: Number of discovered networks */ - static uint8_t scanNetworks(); + static uint8_t startScanNetworks(); + + /* + * Get the networks available + * + * return: Number of discovered networks + */ + static uint8_t getScanNetworks(); /* * Return the SSID discovered during the network scan. diff --git a/WiFi/utility/wifi_spi.h b/WiFi/utility/wifi_spi.h index 01e1acd0b..cd3fab7ce 100644 --- a/WiFi/utility/wifi_spi.h +++ b/WiFi/utility/wifi_spi.h @@ -47,6 +47,7 @@ enum { GET_IDX_ENCT_CMD = 0x33, REQ_HOST_BY_NAME_CMD= 0x34, GET_HOST_BY_NAME_CMD= 0x35, + START_SCAN_NETWORKS = 0x36, // All command with DATA_FLAG 0x40 send a 16bit Len