Arduino/WiFi/WiFi.cpp

196 lines
3.7 KiB
C++
Raw Normal View History

2011-02-28 04:49:08 -08:00
#include "wifi_drv.h"
#include "WiFi.h"
#include "wiring.h"
2011-02-28 04:49:08 -08:00
2011-04-05 14:24:17 -07:00
#define _DEBUG_
extern "C" {
#include "utility/wl_definitions.h"
#include "utility/wl_types.h"
2011-04-05 14:24:17 -07:00
#include "debug.h"
}
2011-02-28 04:49:08 -08:00
// 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 };
2011-02-28 04:49:08 -08:00
char WiFiClass::_ssid[] = { 0 };
char WiFiClass::_key[] = { 0 };
char WiFiClass::_passph[] = { 0 };
wl_status_t WiFiClass::_status;
2011-02-28 04:49:08 -08:00
WiFiClass::WiFiClass()
{
}
void WiFiClass::init()
{
WiFiDrv::wifiDriverInit();
2011-02-28 04:49:08 -08:00
}
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;
}
int WiFiClass::begin()
2011-02-28 04:49:08 -08:00
{
2011-04-05 14:24:17 -07:00
init();
2011-02-28 04:49:08 -08:00
}
int WiFiClass::begin(char* ssid)
2011-02-28 04:49:08 -08:00
{
2011-04-05 14:24:17 -07:00
uint8_t status = WL_IDLE_STATUS;
2011-04-20 22:47:54 -07:00
uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
begin();
2011-04-05 14:24:17 -07:00
if (WiFiDrv::wifiSetNetwork(ssid, strlen(ssid)) != WL_FAILURE)
2011-02-28 04:49:08 -08:00
{
2011-04-05 14:24:17 -07:00
do
{
delay(WL_DELAY_START_CONNECTION);
status = WiFiDrv::getConnectionStatus();
}
2011-04-20 22:47:54 -07:00
while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
}else
{
2011-04-05 14:24:17 -07:00
status = WL_CONNECT_FAILED;
2011-02-28 04:49:08 -08:00
}
2011-04-05 14:24:17 -07:00
return status;
2011-02-28 04:49:08 -08:00
}
int WiFiClass::begin(char* ssid, uint8_t key_idx, const char *key)
2011-02-28 04:49:08 -08:00
{
2011-04-05 14:24:17 -07:00
uint8_t status = WL_IDLE_STATUS;
2011-04-20 22:47:54 -07:00
uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
begin();
2011-02-28 04:49:08 -08:00
// set encryption key
if (WiFiDrv::wifiSetKey(ssid, strlen(ssid), key_idx, key, strlen(key)) != WL_FAILURE)
{
2011-04-05 14:24:17 -07:00
do
{
delay(WL_DELAY_START_CONNECTION);
status = WiFiDrv::getConnectionStatus();
}
2011-04-20 22:47:54 -07:00
while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
}else{
2011-04-05 14:24:17 -07:00
status = WL_CONNECT_FAILED;
}
2011-04-05 14:24:17 -07:00
return status;
2011-02-28 04:49:08 -08:00
}
int WiFiClass::begin(char* ssid, const char *passphrase)
2011-02-28 04:49:08 -08:00
{
2011-04-05 14:24:17 -07:00
uint8_t status = WL_IDLE_STATUS;
2011-04-20 22:47:54 -07:00
uint8_t attempts = WL_MAX_ATTEMPT_CONNECTION;
begin();
2011-02-28 04:49:08 -08:00
// set passphrase
if (WiFiDrv::wifiSetPassphrase(ssid, strlen(ssid), passphrase, strlen(passphrase))!= WL_FAILURE)
2011-02-28 04:49:08 -08:00
{
2011-04-05 14:24:17 -07:00
do
{
delay(WL_DELAY_START_CONNECTION);
status = WiFiDrv::getConnectionStatus();
}
2011-04-20 22:47:54 -07:00
while ((( status == WL_IDLE_STATUS)||(status == WL_SCAN_COMPLETED))&&(--attempts>0));
}else{
2011-04-05 14:24:17 -07:00
status = WL_CONNECT_FAILED;
2011-02-28 04:49:08 -08:00
}
2011-04-05 14:24:17 -07:00
return status;
2011-02-28 04:49:08 -08:00
}
int WiFiClass::disconnect()
2011-02-28 04:49:08 -08:00
{
return WiFiDrv::disconnect();
2011-02-28 04:49:08 -08:00
}
uint8_t* WiFiClass::macAddress(uint8_t* mac)
2011-02-28 04:49:08 -08:00
{
2011-04-05 14:24:17 -07:00
uint8_t* _mac = WiFiDrv::getMacAddress();
memcpy(mac, _mac, WL_MAC_ADDR_LENGTH);
return mac;
2011-02-28 04:49:08 -08:00
}
IPAddress WiFiClass::localIp()
2011-02-28 04:49:08 -08:00
{
IPAddress ret;
WiFiDrv::getIpAddress(ret.raw_address());
return ret;
2011-02-28 04:49:08 -08:00
}
IPAddress WiFiClass::subnetMask()
{
IPAddress ret;
WiFiDrv::getSubnetMask(ret.raw_address());
return ret;
}
2011-02-28 04:49:08 -08:00
IPAddress WiFiClass::gatewayIP()
2011-02-28 04:49:08 -08:00
{
IPAddress ret;
WiFiDrv::getGatewayIP(ret.raw_address());
return ret;
2011-02-28 04:49:08 -08:00
}
char* WiFiClass::SSID()
2011-02-28 04:49:08 -08:00
{
return WiFiDrv::getCurrentSSID();
2011-02-28 04:49:08 -08:00
}
uint8_t* WiFiClass::BSSID(uint8_t* bssid)
2011-02-28 04:49:08 -08:00
{
2011-04-05 14:24:17 -07:00
uint8_t* _bssid = WiFiDrv::getCurrentBSSID();
memcpy(bssid, _bssid, WL_MAC_ADDR_LENGTH);
return bssid;
2011-02-28 04:49:08 -08:00
}
int32_t WiFiClass::RSSI()
2011-02-28 04:49:08 -08:00
{
return WiFiDrv::getCurrentRSSI();
2011-02-28 04:49:08 -08:00
}
uint8_t WiFiClass::encryptionType()
2011-02-28 04:49:08 -08:00
{
return WiFiDrv::getCurrentEncryptionType();
2011-02-28 04:49:08 -08:00
}
uint8_t WiFiClass::scanNetworks()
2011-02-28 04:49:08 -08:00
{
return WiFiDrv::scanNetworks();
2011-02-28 04:49:08 -08:00
}
char* WiFiClass::SSID(uint8_t networkItem)
2011-02-28 04:49:08 -08:00
{
return WiFiDrv::getSSIDNetoworks(networkItem);
2011-02-28 04:49:08 -08:00
}
int32_t WiFiClass::RSSI(uint8_t networkItem)
{
return WiFiDrv::getRSSINetoworks(networkItem);
}
uint8_t WiFiClass::encryptionType(uint8_t networkItem)
{
return WiFiDrv::getEncTypeNetowrks(networkItem);
}
2011-02-28 04:49:08 -08:00
2011-04-05 14:24:17 -07:00
uint8_t WiFiClass::status()
{
return WiFiDrv::getConnectionStatus();
}
2011-02-28 04:49:08 -08:00
WiFiClass WiFi;