ArduinoDumbDisplay v0.9.9-r41
DumbDisplay Arduino Library -- https://github.com/trevorwslee/Arduino-DumbDisplay
 
Loading...
Searching...
No Matches
amb82wifidumbdisplay.h
1// ***
2// *** NOT WORKING
3// ***
4
5
6#ifndef wifidumbdisplay_h
7#define wifidumbdisplay_h
8
9// after inclusion, can check DD_USING_WIFI to be sure WIFI is used
10#define DD_USING_WIFI
11
12#include "dumbdisplay.h"
13
14#include <WiFi.h>
15
16
17
18#define LOG_DDWIFI_STATUS
19//#define WRITE_BYTE_BY_BYTES
20
21
25 public:
26 /* WiFI IO mechanism */
27 /* - ssid: WIFI name (pass to WiFi) */
28 /* - passphrase: WIFI password (pass to WiFi) */
29 /* - serverPort: server port (pass to WiFiServer) */
30 DDAmb82WiFiServerIO(char* ssid, char *passphrase, int serverPort = DD_WIFI_PORT): DDInputOutput(DD_SERIAL_BAUD, false, false),
31 //server(serverPort) {
32 server(serverPort, tProtMode::TCP_MODE, tBlockingMode::NON_BLOCKING_MODE) {
33 this->ssid = ssid;
34 this->password = passphrase;
35 this->port = serverPort;
36 //this->logToSerial = logToSerial;
37 //Serial.begin(DD_SERIAL_BAUD);f
38 //this->server.setNonBlockingMode();
39 }
40 const char* getWhat() {
41 return "WIFI";
42 }
43 // // experimental ... not quite working
44 // bool availableAdditionalClient(WiFiClient& additionalClient) {
45 // if (client.connected()) {
46 // WiFiClient cli = server.available();
47 // if (cli) {
48 // additionalClient = cli;
49 // return true;
50 // }
51 // }
52 // return false;
53 // }
54 bool available() {
55 int count = client.available();
56 if (false) { // TODO: disable
57 if (count > 0) {
58 Serial.print("- available: ");
59 Serial.println(count);
60 }
61 }
62 return count > 0;
63 }
64 char read() {
65 char ch = client.read();
66 if (false) { // TODO: disable
67 Serial.print("- read:[");
68 Serial.print(ch);
69 Serial.println("]");
70 }
71 return ch;
72 }
73 void print(const String &s) {
74#ifdef WRITE_BYTE_BY_BYTES
75 for (size_t i = 0; i < s.length(); i++) {
76 write(s.charAt(i));
77 }
78#else
79 // if (true) { // TODO: disable debug
80 // Serial.print("* print: [");
81 // Serial.print(s);
82 // Serial.println("]");
83 // }
84 client.print(s);
85 if (true) { // TODO: forced delay since 2024-11-04
86 delay(200);
87 }
88#endif
89 }
90 void print(const char *p) {
91#ifdef WRITE_BYTE_BY_BYTES
92 while (true) {
93 char c = *(p++);
94 if (c == 0) {
95 break;
96 }
97 write(c);
98 }
99#else
100 if (false) { // TODO: disable debug
101 Serial.print("* print: [");
102 Serial.print(p);
103 Serial.println("]");
104 }
105 client.print(p);
106 // if (true) {
107 // client.flush();
108 // }
109 if (true) { // TODO: forced delay since 2024-11-04
110 delay(200);
111 }
112#endif
113 }
114 void write(uint8_t b) {
115#ifdef WRITE_BYTE_BY_BYTES
116 while (true) {
117 size_t count = client.write(b);
118 if (count > 0) {
119 break;
120 }
121 delay(200);
122 }
123#else
124 client.write(b);
125#endif
126 }
127 void write(const uint8_t *buf, size_t size) {
128#ifdef WRITE_BYTE_BY_BYTES
129 for (size_t i = 0; i < size; i++) {
130 write(buf[i]);
131 }
132#else
133 if (false) {
134 Serial.print("*** write ");
135 Serial.print(size);
136 Serial.print(" ... ");
137 size_t written = client.write(buf, size);
138 Serial.println(written);
139 } else {
140 client.write(buf, size);
141 }
142 if (false) { // TODO: forced delay since 2024-11-04
143 delay(200);
144 }
145#endif
146 }
147 bool preConnect(bool firstCall) {
148 if (firstCall) { // since 2023-08-10
149 if (!Serial) Serial.begin(DD_SERIAL_BAUD);
150// #if defined(ARDUINO_UNOR4_WIFI)
151// if (WiFi.status() == WL_NO_MODULE) {
152// Serial.println("XXX communication with WiFi module failed");
153// }
154// String fv = WiFi.firmwareVersion();
155// if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
156// Serial.println("XXX please upgrade the firmware");
157// } else {
158// Serial.println("* WIFI_FIRMWARE_LATEST_VERSION=" + String(WIFI_FIRMWARE_LATEST_VERSION));
159// }
160// #endif
161 }
162 if (true) { // since 2023-08-16
163 if (firstCall && !client.connected()) {
164 connectionState = '0';
165 }
166 checkConnection();
167 return connectionState == 'C';
168 } else if (true) { // since 2023-08-15
169 if (firstCall && !client.connected()) {
170 Serial.println("setup WIFI");
171 WiFi.disconnect();
172 WiFi.begin(ssid, password);
173 connectionState = ' ';
174 stateMillis = 0;
175 }
176 checkConnection();
177 return connectionState == 'C';
178 } else if (true) { // since 2023-06-05
179 if (firstCall) {
180 if (true) {
181 if (client.connected()) {
182 Serial.println("stop client for new setup");
183 client.stop();
184 delay(2000); // wait a bit
185 }
186 WiFi.disconnect();
187 } else if (true) { // since 2023-06-03
188 client.stop();
189 WiFi.disconnect();
190 }
191 Serial.println("setup WIFI");
192 WiFi.begin(ssid, password);
193 connectionState = ' ';
194 stateMillis = 0;
195 }
196 // delay(200);
197 checkConnection();
198 return connectionState == 'C';
199 } else {
200 if (firstCall) {
201 // if (logToSerial)
202 // Serial.begin(serialBaud);
203 if (true) { // since 2023-06-03
204 client.stop();
205 WiFi.disconnect();
206 }
207 WiFi.begin(ssid, password);
208 connectionState = ' ';
209 stateMillis = 0;
210 } else {
211 checkConnection();
212 delay(200);
213 }
214 return connectionState == 'C';
215 }
216 }
217 void flush() {
218 if (false) {
219 client.flush(); // flush is not the expected -- just flush send buffer
220 }
221 }
222 void validConnection() {
223#ifdef LOG_DDWIFI_STATUS
224 Serial.println(" ... validate ...");
225#endif
226 checkConnection();
227 }
228 bool canConnectPassive() {
229 return false; // TODO: make it passive
230 }
231 bool canUseBuffer() {
232 return false; // buffering might make it fails to send (and marked disconnected)
233 }
234 private:
235// bool _connectToNetwork() {
236// WiFi.begin(ssid, password);
237// long last = millis();
238// while (true) {
239// uint8_t status = WiFi.status();
240// if (status == WL_CONNECTED)
241// break;
242// delay(200);
243// long diff = millis() - last;
244// if (diff > 1000) {
245// if (logToSerial) {
246// Serial.print("binding WIFI ");
247// Serial.print(ssid);
248// #ifdef LOG_DDWIFI_STATUS
249// Serial.print(" ... ");
250// Serial.print(status);
251// #endif
252// Serial.println(" ...");
253// }
254// last = millis();
255// }
256// }
257// if (logToSerial) {
258// Serial.print("binded WIFI ");
259// Serial.println(ssid);
260// }
261// return true;
262// }
263// bool _connectToClient(bool initConnect) {
264// if (initConnect) {
265// if (!_connectToNetwork())
266// return false;
267// server.begin();
268// }
269// long last = millis();
270// while (true) {
271// client = server.available();
272// if (client) {
273// break;
274// } else {
275// if (WiFi.status() != WL_CONNECTED)
276// return false;
277// long diff = millis() - last;
278// if (diff >= 1000) {
279// IPAddress localIP = WiFi.localIP();
280// uint32_t localIPValue = localIP;
281// if (logToSerial) {
282// #ifdef LOG_DDWIFI_STATUS
283// Serial.print("via WIFI ... ");
284// Serial.print(WiFi.status());
285// Serial.print(" ... ");
286// #endif
287// Serial.print("listening on ");
288// // #ifdef LOG_DDWIFI_STATUS
289// // Serial.print("(");
290// // Serial.print(localIPValue);
291// // Serial.print(") ");
292// // #endif
293// Serial.print(localIP);
294// Serial.print(":");
295// Serial.print(port);
296// Serial.println(" ...");
297// }
298// last = millis();
299// if (localIPValue == 0)
300// return false;
301// }
302// }
303// }
304// return true;
305// }
306 void checkConnection() {
307 if (connectionState == '0' || connectionState == 'C') { // since 2023-08-16 added check connectionState == '0'
308 if (connectionState == '0' || WiFi.status() != WL_CONNECTED) {
309 if (connectionState == 'C') {
310 Serial.println("lost WiFi ... try bind WiFi again ...");
311 client.stop();
312 }
313 WiFi.disconnect();
314 Serial.println("setup WIFI");
315 WiFi.begin(ssid, password);
316 connectionState = ' ';
317 stateMillis = 0;
318 } else if (!client.connected()) {
319 client.stop();
320 Serial.println("lost connection ... try bind again ...");
321 connectionState = 'W';
322 stateMillis = 0;
323 } else {
324 return;
325 }
326 }
327 if (connectionState == ' ') {
328 uint8_t status = WiFi.status();
329 if (status == WL_CONNECTED) {
330 Serial.print("binded WIFI ");
331 Serial.println(ssid);
332 server.begin();
333 connectionState = 'W';
334 stateMillis = 0;
335 } else {
336 long diff = millis() - stateMillis;
337 if (stateMillis == 0 || diff > 1000) {
338 Serial.print("binding WIFI ");
339 Serial.print(ssid);
340#ifdef LOG_DDWIFI_STATUS
341 Serial.print(" ... ");
342 Serial.print(status);
343#endif
344 Serial.println(" ...");
345 stateMillis = millis();
346 }
347 }
348 } else {
349 uint8_t status = WiFi.status();
350 if (status != WL_CONNECTED) {
351 connectionState = ' ';
352 stateMillis = 0;
353 } else {
354 long diff = millis() - stateMillis;
355 if (diff >= 1000) {
356 IPAddress localIP = WiFi.localIP();
357 //uint32_t localIPValue = localIP;
358#ifdef LOG_DDWIFI_STATUS
359 Serial.print("via WIFI ... ");
360 Serial.print(WiFi.status());
361 Serial.print(" ... ");
362#endif
363 Serial.print("listening on ");
364 Serial.print(localIP);
365 Serial.print(":");
366 Serial.print(port);
367 Serial.println(" ...");
368 // if (true) {
369 // // testing for ESP
370 // Serial.println("*** sleep ...");
371 // esp_sleep_enable_timer_wakeup(10 * 1000); // 10ms
372 // esp_light_sleep_start();
373 // Serial.println("*** ... up");
374 // }
375 stateMillis = millis();
376 }
377 WiFiClient cli = server.available();
378 // if (cli) {
379 // if (!cli.connected()) { // TODO: unexpected ... debugging
380 // Serial.println("??? client not connected");
381 // cli.stop();
382 // return;
383 // }
384 // }
385 if (cli && cli.connected()) { // TODO: for some reason, under lying _sock an be 0xFF, which seems to indicated "try again"
386 // if (true)
387 // delay(2000); // wait a bit
388 //cli.setNonBlockingMode();
389 client = cli;
390 connectionState = 'C';
391 stateMillis = 0;
392 Serial.println("client connected");
393 } else {
394 //Serial.print("~");
395 }
396 }
397 }
398 }
399 private:
400 char* ssid;
401 char *password;
402 int port;
403 //bool logToSerial;
404 char connectionState;
405 long stateMillis;
406 WiFiServer server;
407 WiFiClient client;
408};
409
410
411
412
413#endif
Definition: amb82wifidumbdisplay.h:24
Class for DD input/output; you explicitly constructed it, pass in when instantiate DumbDisplay,...
Definition: _dd_io.h:9