initial commit

This commit is contained in:
2018-08-08 08:33:26 +02:00
commit ada8fdbdf9
368 changed files with 65878 additions and 0 deletions

View File

@@ -0,0 +1,258 @@
/*
WiFiStream.h
An Arduino Stream that wraps an instance of a WiFi server. For use
with legacy Arduino WiFi shield and other boards and sheilds that
are compatible with the Arduino WiFi library.
Copyright (C) 2015-2016 Jesse Frush. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
See file LICENSE.txt for further informations on licensing terms.
*/
#ifndef WIFI_STREAM_H
#define WIFI_STREAM_H
#include <inttypes.h>
#include <Stream.h>
#include <WiFi.h>
class WiFiStream : public Stream
{
private:
WiFiServer _server = WiFiServer(23);
WiFiClient _client;
//configuration members
IPAddress _local_ip;
uint16_t _port = 0;
uint8_t _key_idx = 0; //WEP
const char *_key = nullptr; //WEP
const char *_passphrase = nullptr; //WPA
char *_ssid = nullptr;
inline int connect_client()
{
if( !( _client && _client.connected() ) )
{
WiFiClient newClient = _server.available();
if( !newClient )
{
return 0;
}
_client = newClient;
}
return 1;
}
inline bool is_ready()
{
uint8_t status = WiFi.status();
return !( status == WL_NO_SHIELD || status == WL_CONNECTED );
}
public:
WiFiStream() {};
// allows another way to configure a static IP before begin is called
inline void config(IPAddress local_ip)
{
_local_ip = local_ip;
WiFi.config( local_ip );
}
// get DCHP IP
inline IPAddress localIP()
{
return WiFi.localIP();
}
inline bool maintain()
{
if( connect_client() ) return true;
stop();
int result = 0;
if( WiFi.status() != WL_CONNECTED )
{
if( _local_ip )
{
WiFi.config( _local_ip );
}
if( _passphrase )
{
result = WiFi.begin( _ssid, _passphrase);
}
else if( _key_idx && _key )
{
result = WiFi.begin( _ssid, _key_idx, _key );
}
else
{
result = WiFi.begin( _ssid );
}
}
if( result == 0 ) return false;
_server = WiFiServer( _port );
_server.begin();
return result;
}
/******************************************************************************
* Connection functions with DHCP
******************************************************************************/
//OPEN networks
inline int begin(char *ssid, uint16_t port)
{
if( !is_ready() ) return 0;
_ssid = ssid;
_port = port;
int result = WiFi.begin( ssid );
if( result == 0 ) return 0;
_server = WiFiServer( port );
_server.begin();
return result;
}
//WEP-encrypted networks
inline int begin(char *ssid, uint8_t key_idx, const char *key, uint16_t port)
{
if( !is_ready() ) return 0;
_ssid = ssid;
_port = port;
_key_idx = key_idx;
_key = key;
int result = WiFi.begin( ssid, key_idx, key );
if( result == 0 ) return 0;
_server = WiFiServer( port );
_server.begin();
return result;
}
//WPA-encrypted networks
inline int begin(char *ssid, const char *passphrase, uint16_t port)
{
if( !is_ready() ) return 0;
_ssid = ssid;
_port = port;
_passphrase = passphrase;
int result = WiFi.begin( ssid, passphrase);
if( result == 0 ) return 0;
_server = WiFiServer( port );
_server.begin();
return result;
}
/******************************************************************************
* Connection functions without DHCP
******************************************************************************/
//OPEN networks with static IP
inline int begin(char *ssid, IPAddress local_ip, uint16_t port)
{
if( !is_ready() ) return 0;
_ssid = ssid;
_port = port;
_local_ip = local_ip;
WiFi.config( local_ip );
int result = WiFi.begin( ssid );
if( result == 0 ) return 0;
_server = WiFiServer( port );
_server.begin();
return result;
}
//WEP-encrypted networks with static IP
inline int begin(char *ssid, IPAddress local_ip, uint8_t key_idx, const char *key, uint16_t port)
{
if( !is_ready() ) return 0;
_ssid = ssid;
_port = port;
_local_ip = local_ip;
_key_idx = key_idx;
_key = key;
WiFi.config( local_ip );
int result = WiFi.begin( ssid, key_idx, key );
if( result == 0 ) return 0;
_server = WiFiServer( port );
_server.begin();
return result;
}
//WPA-encrypted networks with static IP
inline int begin(char *ssid, IPAddress local_ip, const char *passphrase, uint16_t port)
{
if( !is_ready() ) return 0;
_ssid = ssid;
_port = port;
_local_ip = local_ip;
_passphrase = passphrase;
WiFi.config( local_ip );
int result = WiFi.begin( ssid, passphrase);
if( result == 0 ) return 0;
_server = WiFiServer( port );
_server.begin();
return result;
}
/******************************************************************************
* Stream implementations
******************************************************************************/
inline int available()
{
return connect_client() ? _client.available() : 0;
}
inline void flush()
{
if( _client ) _client.flush();
}
inline int peek()
{
return connect_client() ? _client.peek(): 0;
}
inline int read()
{
return connect_client() ? _client.read() : -1;
}
inline void stop()
{
_client.stop();
}
inline size_t write(uint8_t byte)
{
if( connect_client() ) _client.write( byte );
}
};
#endif //WIFI_STREAM_H