added arduino, modified build
This commit is contained in:
226
arduino/libraries/Firmata/utility/WiFiStream.h
Normal file
226
arduino/libraries/Firmata/utility/WiFiStream.h
Normal file
@@ -0,0 +1,226 @@
|
||||
/*
|
||||
WiFiStream.h
|
||||
|
||||
An Arduino Stream extension for a WiFiClient or WiFiServer to be used
|
||||
with legacy Arduino WiFi shield and other boards and shields that
|
||||
are compatible with the Arduino WiFi library.
|
||||
|
||||
Copyright (C) 2015-2016 Jesse Frush. All rights reserved.
|
||||
Copyright (C) 2016 Jens B. 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.
|
||||
|
||||
Last updated April 23rd, 2016
|
||||
*/
|
||||
|
||||
#ifndef WIFI_STREAM_H
|
||||
#define WIFI_STREAM_H
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <Stream.h>
|
||||
|
||||
#define HOST_CONNECTION_DISCONNECTED 0
|
||||
#define HOST_CONNECTION_CONNECTED 1
|
||||
|
||||
extern "C" {
|
||||
// callback function types
|
||||
typedef void (*hostConnectionCallbackFunction)(byte);
|
||||
}
|
||||
|
||||
class WiFiStream : public Stream
|
||||
{
|
||||
protected:
|
||||
WiFiClient _client;
|
||||
bool _connected = false;
|
||||
hostConnectionCallbackFunction _currentHostConnectionCallback;
|
||||
|
||||
//configuration members
|
||||
IPAddress _local_ip; // DHCP
|
||||
IPAddress _subnet;
|
||||
IPAddress _gateway;
|
||||
IPAddress _remote_ip;
|
||||
uint16_t _port;
|
||||
uint8_t _key_idx; //WEP
|
||||
const char *_key = nullptr; //WEP
|
||||
const char *_passphrase = nullptr; //WPA
|
||||
char *_ssid = nullptr;
|
||||
|
||||
/**
|
||||
* check if TCP client is connected
|
||||
* @return true if connected
|
||||
*/
|
||||
virtual bool connect_client() = 0;
|
||||
|
||||
public:
|
||||
/** constructor for TCP server */
|
||||
WiFiStream(uint16_t server_port) : _port(server_port) {}
|
||||
|
||||
/** constructor for TCP client */
|
||||
WiFiStream(IPAddress server_ip, uint16_t server_port) : _remote_ip(server_ip), _port(server_port) {}
|
||||
|
||||
inline void attach( hostConnectionCallbackFunction newFunction ) { _currentHostConnectionCallback = newFunction; }
|
||||
|
||||
/******************************************************************************
|
||||
* network configuration
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef ESP8266
|
||||
/**
|
||||
* configure a static local IP address without defining the local network
|
||||
* DHCP will be used as long as local IP address is not defined
|
||||
*/
|
||||
inline void config(IPAddress local_ip)
|
||||
{
|
||||
_local_ip = local_ip;
|
||||
WiFi.config( local_ip );
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* configure a static local IP address
|
||||
* DHCP will be used as long as local IP address is not defined
|
||||
*/
|
||||
inline void config(IPAddress local_ip, IPAddress gateway, IPAddress subnet)
|
||||
{
|
||||
_local_ip = local_ip;
|
||||
_subnet = subnet;
|
||||
_gateway = gateway;
|
||||
#ifndef ESP8266
|
||||
WiFi.config( local_ip, IPAddress(0, 0, 0, 0), gateway, subnet );
|
||||
#else
|
||||
WiFi.config( local_ip, gateway, subnet );
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @return local IP address
|
||||
*/
|
||||
inline IPAddress getLocalIP()
|
||||
{
|
||||
return WiFi.localIP();
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* network functions
|
||||
******************************************************************************/
|
||||
|
||||
/**
|
||||
* maintain WiFi and TCP connection
|
||||
* @return true if WiFi and TCP connection are established
|
||||
*/
|
||||
virtual bool maintain() = 0;
|
||||
|
||||
#ifdef ESP8266
|
||||
/**
|
||||
* get status of TCP connection
|
||||
* @return status of TCP connection
|
||||
* CLOSED = 0 (typical)
|
||||
* LISTEN = 1 (not used)
|
||||
* SYN_SENT = 2
|
||||
* SYN_RCVD = 3
|
||||
* ESTABLISHED = 4 (typical)
|
||||
* FIN_WAIT_1 = 5
|
||||
* FIN_WAIT_2 = 6
|
||||
* CLOSE_WAIT = 7
|
||||
* CLOSING = 8
|
||||
* LAST_ACK = 9
|
||||
* TIME_WAIT = 10
|
||||
*/
|
||||
inline uint8_t status()
|
||||
{
|
||||
return _client.status();
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* close TCP client connection
|
||||
*/
|
||||
virtual void stop() = 0;
|
||||
|
||||
/******************************************************************************
|
||||
* WiFi configuration
|
||||
******************************************************************************/
|
||||
|
||||
/**
|
||||
* initialize WiFi without security (open) and initiate client connection
|
||||
* if WiFi connection is already established
|
||||
* @return WL_CONNECTED if WiFi connection is established
|
||||
*/
|
||||
inline int begin(char *ssid)
|
||||
{
|
||||
_ssid = ssid;
|
||||
|
||||
WiFi.begin(ssid);
|
||||
int result = WiFi.status();
|
||||
return WiFi.status();
|
||||
}
|
||||
|
||||
#ifndef ESP8266
|
||||
/**
|
||||
* initialize WiFi with WEP security and initiate client connection
|
||||
* if WiFi connection is already established
|
||||
* @return WL_CONNECTED if WiFi connection is established
|
||||
*/
|
||||
inline int begin(char *ssid, uint8_t key_idx, const char *key)
|
||||
{
|
||||
_ssid = ssid;
|
||||
_key_idx = key_idx;
|
||||
_key = key;
|
||||
|
||||
WiFi.begin( ssid, key_idx, key );
|
||||
return WiFi.status();
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* initialize WiFi with WPA-PSK security and initiate client connection
|
||||
* if WiFi connection is already established
|
||||
* @return WL_CONNECTED if WiFi connection is established
|
||||
*/
|
||||
inline int begin(char *ssid, const char *passphrase)
|
||||
{
|
||||
_ssid = ssid;
|
||||
_passphrase = passphrase;
|
||||
|
||||
WiFi.begin(ssid, passphrase);
|
||||
return WiFi.status();
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* stream functions
|
||||
******************************************************************************/
|
||||
|
||||
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 size_t write(uint8_t byte)
|
||||
{
|
||||
return connect_client() ? _client.write( byte ) : 0;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#endif //WIFI_STREAM_H
|
||||
Reference in New Issue
Block a user