1
0
mirror of https://github.com/arduino/Arduino.git synced 2025-01-19 08:52:15 +01:00

Fix issues on get encryptionType for the current associated network.

Fix issue related to retrieve encription type and RSSI for the available networks
This commit is contained in:
Mimmo La Fauci 2012-03-04 11:42:48 +01:00
parent 1d1f647ed6
commit 514a694c8a
8 changed files with 71 additions and 61 deletions

View File

@ -40,13 +40,6 @@ uint8_t WiFiClass::getSocket()
return NO_SOCKET_AVAIL; return NO_SOCKET_AVAIL;
} }
int WiFiClass::begin()
{
// Add procedure to read the latest configuration from eeprom/dataflash
// and start the wifi connection
return WL_IDLE_STATUS;
}
int WiFiClass::begin(char* ssid) int WiFiClass::begin(char* ssid)
{ {
uint8_t status = WL_IDLE_STATUS; uint8_t status = WL_IDLE_STATUS;
@ -188,11 +181,4 @@ uint8_t WiFiClass::status()
return WiFiDrv::getConnectionStatus(); return WiFiDrv::getConnectionStatus();
} }
uint8_t WiFiClass::test()
{
return WiFiDrv::testCmd();
}
WiFiClass WiFi; WiFiClass WiFi;

View File

@ -5,6 +5,7 @@
extern "C" { extern "C" {
#include "utility/wl_definitions.h" #include "utility/wl_definitions.h"
#include "utility/wl_types.h"
} }
#include "IPAddress.h" #include "IPAddress.h"
@ -28,20 +29,31 @@ public:
WiFiClass(); WiFiClass();
// Get thefirst socket available // Get the first socket available
static uint8_t getSocket(); static uint8_t getSocket();
// Start Wifi connection with latest settings /* Start Wifi connection for OPEN networks
int begin(); *
* param ssid: Pointer to the SSID string.
// Start Wifi connection with no encryption */
int begin(char* ssid); int begin(char* ssid);
// Start Wifi connection with WEP encryption /* Start Wifi connection with WEP encryption.
* Configure a key into the device. The key type (WEP-40, WEP-104)
* is determined by the size of the key (5 bytes for WEP-40, 13 bytes for WEP-104).
*
* param ssid: Pointer to the SSID string.
* param key_idx: The key index to set. Valid values are 0-3.
* param key: Key input buffer.
*/
int begin(char* ssid, uint8_t key_idx, const char* key); int begin(char* ssid, uint8_t key_idx, const char* key);
// Start Wifi connection with passphrase /* Start Wifi connection with passphrase
// the most secure supported mode will be automatically selected * the most secure supported mode will be automatically selected
*
* param passphrase: Passphrase. Valid characters in a passphrase
* must be between ASCII 32-126 (decimal).
*/
int begin(char* ssid, const char *passphrase); int begin(char* ssid, const char *passphrase);
// Disconnect from the network // Disconnect from the network
@ -83,12 +95,12 @@ public:
// Return the current RSSI /Received Signal Strength in dBm) associated with the network identified with networkItem // Return the current RSSI /Received Signal Strength in dBm) associated with the network identified with networkItem
int32_t RSSI(uint8_t networkItem); int32_t RSSI(uint8_t networkItem);
// Return Connection status /* Return Connection status.
*
* return: one of the value defined in wl_status_t
*/
uint8_t status(); uint8_t status();
// function used for test
uint8_t test();
friend class WiFiClient; friend class WiFiClient;
friend class WiFiServer; friend class WiFiServer;
}; };

View File

@ -2,7 +2,7 @@
#include "Arduino.h" #include "Arduino.h"
#include "spi_drv.h" #include "spi_drv.h"
#include "pins_arduino.h" #include "pins_arduino.h"
#define _DEBUG_ //#define _DEBUG_
extern "C" { extern "C" {
#include "debug.h" #include "debug.h"
} }

View File

@ -15,6 +15,9 @@ extern "C" {
} }
char WiFiDrv::_networkSsid[][WL_SSID_MAX_LENGTH] = {{"1"},{"2"},{"3"},{"4"},{"5"}}; char WiFiDrv::_networkSsid[][WL_SSID_MAX_LENGTH] = {{"1"},{"2"},{"3"},{"4"},{"5"}};
int32_t WiFiDrv::_networkRssi[WL_NETWORKS_LIST_MAXNUM] = { 0 };
uint8_t WiFiDrv::_networkEncr[WL_NETWORKS_LIST_MAXNUM] = { 0 };
char WiFiDrv::_ssid[] = {0}; char WiFiDrv::_ssid[] = {0};
uint8_t WiFiDrv::_bssid[] = {0}; uint8_t WiFiDrv::_bssid[] = {0};
uint8_t WiFiDrv::_mac[] = {0}; uint8_t WiFiDrv::_mac[] = {0};
@ -289,7 +292,7 @@ uint8_t WiFiDrv::getCurrentEncryptionType()
// Wait for reply // Wait for reply
uint8_t dataLen = 0; uint8_t dataLen = 0;
uint8_t encType = 0; uint8_t encType = 0;
SpiDrv::waitResponseCmd(GET_CURR_ENCT_CMD, PARAM_NUMS_1, (uint8_t*)encType, &dataLen); SpiDrv::waitResponseCmd(GET_CURR_ENCT_CMD, PARAM_NUMS_1, (uint8_t*)&encType, &dataLen);
SpiDrv::spiSlaveDeselect(); SpiDrv::spiSlaveDeselect();
@ -303,9 +306,6 @@ uint8_t WiFiDrv::scanNetworks()
// Send Command // Send Command
SpiDrv::sendCmd(SCAN_NETWORKS, PARAM_NUMS_0); SpiDrv::sendCmd(SCAN_NETWORKS, PARAM_NUMS_0);
// uint8_t _dummy = DUMMY_DATA;
// SpiDrv::sendParam(&_dummy, 1, LAST_PARAM);
//Wait the reply elaboration //Wait the reply elaboration
SpiDrv::waitForSlaveReady(); SpiDrv::waitForSlaveReady();
@ -330,10 +330,25 @@ uint8_t WiFiDrv::getEncTypeNetowrks(uint8_t networkItem)
{ {
if (networkItem >= WL_NETWORKS_LIST_MAXNUM) if (networkItem >= WL_NETWORKS_LIST_MAXNUM)
return NULL; return NULL;
uint8_t networkEncType = 0;
//TODO make an RPC call to get the encryption type associated with networkItem WAIT_FOR_SLAVE_SELECT();
return networkEncType;
// Send Command
SpiDrv::sendCmd(GET_IDX_ENCT_CMD, PARAM_NUMS_1);
SpiDrv::sendParam(&networkItem, 1, LAST_PARAM);
//Wait the reply elaboration
SpiDrv::waitForSlaveReady();
// Wait for reply
uint8_t dataLen = 0;
uint8_t encType = 0;
SpiDrv::waitResponseCmd(GET_IDX_ENCT_CMD, PARAM_NUMS_1, (uint8_t*)&encType, &dataLen);
SpiDrv::spiSlaveDeselect();
return encType;
} }
int32_t WiFiDrv::getRSSINetoworks(uint8_t networkItem) int32_t WiFiDrv::getRSSINetoworks(uint8_t networkItem)
@ -342,29 +357,23 @@ int32_t WiFiDrv::getRSSINetoworks(uint8_t networkItem)
return NULL; return NULL;
int32_t networkRssi = 0; int32_t networkRssi = 0;
//TODO make an RPC call to get the rssi associated with networkItem
return networkRssi;
}
uint8_t WiFiDrv::testCmd()
{
WAIT_FOR_SLAVE_SELECT(); WAIT_FOR_SLAVE_SELECT();
// Send Command // Send Command
SpiDrv::sendCmd(TEST_CMD, PARAM_NUMS_0); SpiDrv::sendCmd(GET_IDX_RSSI_CMD, PARAM_NUMS_1);
SpiDrv::sendParam(&networkItem, 1, LAST_PARAM);
//Wait the reply elaboration //Wait the reply elaboration
SpiDrv::waitForSlaveReady(); SpiDrv::waitForSlaveReady();
// Wait for reply // Wait for reply
uint8_t _data = 0; uint8_t dataLen = 0;
uint8_t _dataLen = 0; SpiDrv::waitResponseCmd(GET_IDX_RSSI_CMD, PARAM_NUMS_1, (uint8_t*)&networkRssi, &dataLen);
SpiDrv::waitResponseCmd(TEST_CMD, PARAM_NUMS_1, &_data, &_dataLen);
SpiDrv::spiSlaveDeselect(); SpiDrv::spiSlaveDeselect();
return _data; return networkRssi;
} }
WiFiDrv wiFiDrv; WiFiDrv wiFiDrv;

View File

@ -14,6 +14,8 @@ class WiFiDrv
private: private:
// settings of requested network // settings of requested network
static char _networkSsid[WL_NETWORKS_LIST_MAXNUM][WL_SSID_MAX_LENGTH]; static char _networkSsid[WL_NETWORKS_LIST_MAXNUM][WL_SSID_MAX_LENGTH];
static int32_t _networkRssi[WL_NETWORKS_LIST_MAXNUM];
static uint8_t _networkEncr[WL_NETWORKS_LIST_MAXNUM];
// settings of current selected network // settings of current selected network
static char _ssid[WL_SSID_MAX_LENGTH]; static char _ssid[WL_SSID_MAX_LENGTH];
@ -63,7 +65,6 @@ public:
static uint8_t getEncTypeNetowrks(uint8_t networkItem); static uint8_t getEncTypeNetowrks(uint8_t networkItem);
static uint8_t testCmd();
}; };
extern WiFiDrv wiFiDrv; extern WiFiDrv wiFiDrv;

View File

@ -41,8 +41,11 @@ enum {
START_CLIENT_TCP_CMD= 0x2D, START_CLIENT_TCP_CMD= 0x2D,
STOP_CLIENT_TCP_CMD = 0x2E, STOP_CLIENT_TCP_CMD = 0x2E,
GET_CLIENT_STATE_TCP_CMD= 0x2F, GET_CLIENT_STATE_TCP_CMD= 0x2F,
DISCONNECT_CMD = 0x30, DISCONNECT_CMD = 0x30,
GET_IDX_SSID_CMD = 0x31,
GET_IDX_RSSI_CMD = 0x32,
GET_IDX_ENCT_CMD = 0x33,
// All command with DATA_FLAG 0x40 send a 16bit Len // All command with DATA_FLAG 0x40 send a 16bit Len
SEND_DATA_TCP_CMD = 0x44, SEND_DATA_TCP_CMD = 0x44,

View File

@ -35,5 +35,15 @@ typedef enum {
WL_DISCONNECTED WL_DISCONNECTED
} wl_status_t; } wl_status_t;
/* Encryption modes */
enum wl_enc_type { /* Values map to 802.11 encryption suites... */
ENC_TYPE_WEP = 5,
ENC_TYPE_TKIP = 2,
ENC_TYPE_CCMP = 4,
/* ... except these two, 7 and 8 are reserved in 802.11-2007 */
ENC_TYPE_NONE = 7,
ENC_TYPE_AUTO = 8
};
#endif /* WL_DEFINITIONS_H_ */ #endif /* WL_DEFINITIONS_H_ */

View File

@ -28,15 +28,4 @@ enum wl_auth_mode {
AUTH_MODE_WPA2_PSK AUTH_MODE_WPA2_PSK
}; };
/* Encryption modes */
enum wl_enc_type { /* Values map to 802.11 encryption suites... */
ENC_TYPE_WEP = 5,
ENC_TYPE_TKIP = 2,
ENC_TYPE_CCMP = 4,
/* ... except these two, 7 and 8 are reserved in 802.11-2007 */
ENC_TYPE_NONE = 7,
ENC_TYPE_AUTO = 8
};
#endif //_WL_TYPES_H_ #endif //_WL_TYPES_H_