aboutsummaryrefslogtreecommitdiff
path: root/libraries/WiFi/WiFi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/WiFi/WiFi.cpp')
-rw-r--r--libraries/WiFi/WiFi.cpp199
1 files changed, 199 insertions, 0 deletions
diff --git a/libraries/WiFi/WiFi.cpp b/libraries/WiFi/WiFi.cpp
new file mode 100644
index 0000000..c0cb001
--- /dev/null
+++ b/libraries/WiFi/WiFi.cpp
@@ -0,0 +1,199 @@
+#include "wifi_drv.h"
+#include "WiFi.h"
+
+extern "C" {
+ #include "utility/wl_definitions.h"
+ #include "utility/wl_types.h"
+ #include "debug.h"
+}
+
+// XXX: don't make assumptions about the value of MAX_SOCK_NUM.
+int16_t WiFiClass::_state[MAX_SOCK_NUM] = { 0, 0, 0, 0 };
+uint16_t WiFiClass::_server_port[MAX_SOCK_NUM] = { 0, 0, 0, 0 };
+
+WiFiClass::WiFiClass()
+{
+ // Driver initialization
+ init();
+}
+
+void WiFiClass::init()
+{
+ WiFiDrv::wifiDriverInit();
+}
+
+uint8_t WiFiClass::getSocket()
+{
+ for (uint8_t i = 0; i < MAX_SOCK_NUM; ++i)
+ {
+ if (WiFiClass::_server_port[i] == 0)
+ {
+ return i;
+ }
+ }
+ return NO_SOCKET_AVAIL;
+}
+
+char* WiFiClass::firmwareVersion()
+{
+ return WiFiDrv::getFwVersion();
+}
+
+int WiFiClass::begin(char* ssid)
+{
+ uint8_t status = WL_IDLE_STATUS;
+ uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
+
+ if (WiFiDrv::wifiSetNetwork(ssid, strlen(ssid)) != WL_FAILURE)
+ {
+ do
+ {
+ delay(WL_DELAY_START_CONNECTION);
+ status = WiFiDrv::getConnectionStatus();
+ }
+ while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
+ }else
+ {
+ status = WL_CONNECT_FAILED;
+ }
+ return status;
+}
+
+int WiFiClass::begin(char* ssid, uint8_t key_idx, const char *key)
+{
+ uint8_t status = WL_IDLE_STATUS;
+ uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
+
+ // set encryption key
+ if (WiFiDrv::wifiSetKey(ssid, strlen(ssid), key_idx, key, strlen(key)) != WL_FAILURE)
+ {
+ do
+ {
+ delay(WL_DELAY_START_CONNECTION);
+ status = WiFiDrv::getConnectionStatus();
+ }
+ while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
+ }else{
+ status = WL_CONNECT_FAILED;
+ }
+ return status;
+}
+
+int WiFiClass::begin(char* ssid, const char *passphrase)
+{
+ uint8_t status = WL_IDLE_STATUS;
+ uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
+
+ // set passphrase
+ if (WiFiDrv::wifiSetPassphrase(ssid, strlen(ssid), passphrase, strlen(passphrase))!= WL_FAILURE)
+ {
+ do
+ {
+ delay(WL_DELAY_START_CONNECTION);
+ status = WiFiDrv::getConnectionStatus();
+ }
+ while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
+ }else{
+ status = WL_CONNECT_FAILED;
+ }
+ return status;
+}
+
+int WiFiClass::disconnect()
+{
+ return WiFiDrv::disconnect();
+}
+
+uint8_t* WiFiClass::macAddress(uint8_t* mac)
+{
+ uint8_t* _mac = WiFiDrv::getMacAddress();
+ memcpy(mac, _mac, WL_MAC_ADDR_LENGTH);
+ return mac;
+}
+
+IPAddress WiFiClass::localIP()
+{
+ IPAddress ret;
+ WiFiDrv::getIpAddress(ret);
+ return ret;
+}
+
+IPAddress WiFiClass::subnetMask()
+{
+ IPAddress ret;
+ WiFiDrv::getSubnetMask(ret);
+ return ret;
+}
+
+IPAddress WiFiClass::gatewayIP()
+{
+ IPAddress ret;
+ WiFiDrv::getGatewayIP(ret);
+ return ret;
+}
+
+char* WiFiClass::SSID()
+{
+ return WiFiDrv::getCurrentSSID();
+}
+
+uint8_t* WiFiClass::BSSID(uint8_t* bssid)
+{
+ uint8_t* _bssid = WiFiDrv::getCurrentBSSID();
+ memcpy(bssid, _bssid, WL_MAC_ADDR_LENGTH);
+ return bssid;
+}
+
+int32_t WiFiClass::RSSI()
+{
+ return WiFiDrv::getCurrentRSSI();
+}
+
+uint8_t WiFiClass::encryptionType()
+{
+ return WiFiDrv::getCurrentEncryptionType();
+}
+
+
+int8_t WiFiClass::scanNetworks()
+{
+ uint8_t attempts = 10;
+ uint8_t numOfNetworks = 0;
+
+ if (WiFiDrv::startScanNetworks() == WL_FAILURE)
+ return WL_FAILURE;
+ do
+ {
+ delay(2000);
+ numOfNetworks = WiFiDrv::getScanNetworks();
+ }
+ while (( numOfNetworks == 0)&&(--attempts>0));
+ return numOfNetworks;
+}
+
+char* WiFiClass::SSID(uint8_t networkItem)
+{
+ return WiFiDrv::getSSIDNetoworks(networkItem);
+}
+
+int32_t WiFiClass::RSSI(uint8_t networkItem)
+{
+ return WiFiDrv::getRSSINetoworks(networkItem);
+}
+
+uint8_t WiFiClass::encryptionType(uint8_t networkItem)
+{
+ return WiFiDrv::getEncTypeNetowrks(networkItem);
+}
+
+uint8_t WiFiClass::status()
+{
+ return WiFiDrv::getConnectionStatus();
+}
+
+int WiFiClass::hostByName(const char* aHostname, IPAddress& aResult)
+{
+ return WiFiDrv::getHostByName(aHostname, aResult);
+}
+
+WiFiClass WiFi;