]> AND Private Git Repository - Cipher_code.git/blob - Arduino/libraries/Firmata/utility/WiFiClientStream.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
aze
[Cipher_code.git] / Arduino / libraries / Firmata / utility / WiFiClientStream.h
1 /*
2   WiFiClientStream.h
3
4   An Arduino Stream that wraps an instance of a WiFiClient. For use
5   with legacy Arduino WiFi shield and other boards and shields that
6   are compatible with the Arduino WiFi library.
7
8   Copyright (C) 2016 Jens B. All rights reserved.
9
10   This library is free software; you can redistribute it and/or
11   modify it under the terms of the GNU Lesser General Public
12   License as published by the Free Software Foundation; either
13   version 2.1 of the License, or (at your option) any later version.
14
15   See file LICENSE.txt for further informations on licensing terms.
16
17   Parts of this class are based on
18
19   - EthernetClientStream - Copyright (C) 2013 Norbert Truchsess. All rights reserved.
20
21   published under the same license.
22
23   Last updated April 23rd, 2016
24  */
25
26 #ifndef WIFI_CLIENT_STREAM_H
27 #define WIFI_CLIENT_STREAM_H
28
29 #include "WiFiStream.h"
30
31 #define MILLIS_RECONNECT 5000
32
33 class WiFiClientStream : public WiFiStream
34 {
35 protected:
36   uint32_t _time_connect = 0;
37
38   /**
39    * check if TCP client is connected
40    * @return true if connected
41    */
42   virtual inline bool connect_client()
43   {
44     if ( _connected )
45     {
46       if ( _client && _client.connected() ) return true;
47       stop();
48     }
49
50     // active TCP connect
51     if ( WiFi.status() == WL_CONNECTED )
52     {
53       // if the client is disconnected, try to reconnect every 5 seconds
54       if ( millis() - _time_connect >= MILLIS_RECONNECT )
55       {
56         _connected = _client.connect( _remote_ip, _port );
57         if ( !_connected )
58         {
59           _time_connect = millis();
60         }
61         else if ( _currentHostConnectionCallback )
62         {
63           (*_currentHostConnectionCallback)(HOST_CONNECTION_CONNECTED);
64         }
65       }
66     }
67
68     return _connected;
69   }
70
71 public:
72   /**
73    * create a WiFi stream with a TCP client
74    */
75   WiFiClientStream(IPAddress server_ip, uint16_t server_port) : WiFiStream(server_ip, server_port) {}
76
77   /**
78    * maintain WiFi and TCP connection
79    * @return true if WiFi and TCP connection are established
80    */
81   virtual inline bool maintain()
82   {
83     return connect_client();
84   }
85
86   /**
87    * stop client connection
88    */
89   virtual inline void stop()
90   {
91     if ( _client)
92     {
93       _client.stop();
94       if ( _currentHostConnectionCallback )
95       {
96         (*_currentHostConnectionCallback)(HOST_CONNECTION_DISCONNECTED);
97       }
98     }
99     _connected = false;
100     _time_connect = millis();
101   }
102
103 };
104
105 #endif //WIFI_CLIENT_STREAM_H