Skip to content

Commit 3163121

Browse files
committed
Implemented UDP (to be debugged)
Former-commit-id: 56261ba
1 parent a2813da commit 3163121

File tree

6 files changed

+367
-12
lines changed

6 files changed

+367
-12
lines changed

libraries/WiFiS3/examples/SimpleWebServerWiFi/SimpleWebServerWiFi.ino

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ void loop() {
8787
client.println();
8888

8989
// the content of the HTTP response follows the header:
90-
client.print("<p style=\"font-size:7vw;\">Click <a href=\"/H\">here</a> turn the LED on<br></p>");
91-
client.print("<p style=\"font-size:7vw;\">Click <a href=\"/L\">here</a> turn the LED off<br></p>");
90+
client.print("<p style=\"font-size:7vw;\">Click <a href=\"/H\">here</a> turn the LED off<br></p>");
91+
client.print("<p style=\"font-size:7vw;\">Click <a href=\"/L\">here</a> turn the LED on<br></p>");
9292

9393
// The HTTP response ends with another blank line:
9494
client.println();

libraries/WiFiS3/examples/WiFiUdpNtpClient/WiFiUdpNtpClient.ino

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818
*/
1919

2020

21-
#include <WiFi.h>
22-
#include <WiFiUdp.h>
21+
#include <WiFiS3.h>
2322

2423
int status = WL_IDLE_STATUS;
2524
#include "arduino_secrets.h"
@@ -41,7 +40,7 @@ WiFiUDP Udp;
4140

4241
void setup() {
4342
// Open serial communications and wait for port to open:
44-
Serial.begin(9600);
43+
Serial.begin(115200);
4544
while (!Serial) {
4645
; // wait for serial port to connect. Needed for native USB port only
4746
}
@@ -54,7 +53,7 @@ void setup() {
5453
}
5554

5655
String fv = WiFi.firmwareVersion();
57-
if (fv < WiFi_FIRMWARE_LATEST_VERSION) {
56+
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
5857
Serial.println("Please upgrade the firmware");
5958
}
6059

libraries/WiFiS3/src/WiFiS3.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@
2323
#include "WiFi.h"
2424
#include "WiFiClient.h"
2525
#include "WiFiServer.h"
26+
#include "WiFiUdp.h"
2627

2728
#endif

libraries/WiFiS3/src/WiFiServer.cpp

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#include "WiFiServer.h"
2+
3+
/* -------------------------------------------------------------------------- */
4+
WiFiServer::WiFiServer() : _sock(-1), _port(80) {}
5+
/* -------------------------------------------------------------------------- */
6+
7+
/* -------------------------------------------------------------------------- */
8+
WiFiServer::WiFiServer(int p) : _sock(-1), _port(p) {}
9+
/* -------------------------------------------------------------------------- */
10+
11+
12+
/* -------------------------------------------------------------------------- */
13+
WiFiClient WiFiServer::available() {
14+
/* -------------------------------------------------------------------------- */
15+
if(_sock != -1) {
16+
string res = "";
17+
modem.begin();
18+
if(modem.write(string(PROMPT(_SERVERAVAILABLE)),res, "%s%d\r\n" , CMD_WRITE(_SERVERAVAILABLE), _sock)) {
19+
int client_sock = atoi(res.c_str());
20+
return WiFiClient(client_sock);
21+
}
22+
}
23+
return WiFiClient();
24+
}
25+
26+
/* -------------------------------------------------------------------------- */
27+
void WiFiServer::begin(int port) {
28+
/* -------------------------------------------------------------------------- */
29+
if(_sock == -1) {
30+
string res = "";
31+
modem.begin();
32+
if(modem.write(string(PROMPT(_BEGINSERVER)),res, "%s%d\r\n" , CMD_WRITE(_BEGINSERVER), port)) {
33+
_sock = atoi(res.c_str());
34+
}
35+
}
36+
}
37+
38+
/* -------------------------------------------------------------------------- */
39+
void WiFiServer::begin() {
40+
/* -------------------------------------------------------------------------- */
41+
begin(_port);
42+
}
43+
44+
/* -------------------------------------------------------------------------- */
45+
size_t WiFiServer::write(uint8_t){
46+
/* -------------------------------------------------------------------------- */
47+
return 0;
48+
}
49+
50+
/* -------------------------------------------------------------------------- */
51+
size_t WiFiServer::write(const uint8_t *buf, size_t size) {
52+
/* -------------------------------------------------------------------------- */
53+
return 0;
54+
}
55+
56+
/* -------------------------------------------------------------------------- */
57+
void WiFiServer::end() {
58+
/* -------------------------------------------------------------------------- */
59+
if(_sock != -1) {
60+
string res = "";
61+
modem.begin();
62+
modem.write(string(PROMPT(_SERVEREND)),res, "%s%d\r\n" , CMD_WRITE(_SERVEREND), _sock);
63+
_sock = -1;
64+
}
65+
}

libraries/WiFiS3/src/WiFiUdp.cpp

Lines changed: 279 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,279 @@
1+
#include "WiFiUdp.h"
2+
3+
/* -------------------------------------------------------------------------- */
4+
WiFiUDP::WiFiUDP() : _sock(-1) {
5+
/* -------------------------------------------------------------------------- */
6+
7+
}
8+
9+
/* -------------------------------------------------------------------------- */
10+
uint8_t WiFiUDP::begin(uint16_t p) {
11+
/* -------------------------------------------------------------------------- */
12+
if(_sock == -1) {
13+
string res = "";
14+
modem.begin();
15+
if(modem.write(string(PROMPT(_UDPBEGIN)),res, "%s%d\r\n" , CMD_WRITE(_UDPBEGIN),p)) {
16+
_sock = atoi(res.c_str());
17+
return 1;
18+
}
19+
}
20+
return 0;
21+
}
22+
23+
/* -------------------------------------------------------------------------- */
24+
uint8_t WiFiUDP::begin(IPAddress a, uint16_t p) {
25+
/* -------------------------------------------------------------------------- */
26+
if(_sock == -1) {
27+
string res = "";
28+
modem.begin();
29+
if(modem.write(string(PROMPT(_UDPBEGIN)),res, "%s%d,%s\r\n" , CMD_WRITE(_UDPBEGIN),p,a.toString().c_str())) {
30+
_sock = atoi(res.c_str());
31+
return 1;
32+
}
33+
}
34+
return 0;
35+
}
36+
37+
/* -------------------------------------------------------------------------- */
38+
uint8_t WiFiUDP::beginMulticast(IPAddress a, uint16_t p) {
39+
/* -------------------------------------------------------------------------- */
40+
if(_sock == -1) {
41+
string res = "";
42+
modem.begin();
43+
if(modem.write(string(PROMPT(_UDPBEGINMULTI)),res, "%s%d,%s\r\n" , CMD_WRITE(_UDPBEGINMULTI),p,a.toString().c_str())) {
44+
_sock = atoi(res.c_str());
45+
return 1;
46+
}
47+
}
48+
return 0;
49+
}
50+
51+
/* -------------------------------------------------------------------------- */
52+
void WiFiUDP::stop() {
53+
/* -------------------------------------------------------------------------- */
54+
if(_sock >= 0) {
55+
string res = "";
56+
modem.begin();
57+
modem.write(string(PROMPT(_UDPSTOP)),res, "%s%d\r\n" , CMD_WRITE(_UDPSTOP), _sock);
58+
_sock = -1;
59+
}
60+
}
61+
62+
/* -------------------------------------------------------------------------- */
63+
int WiFiUDP::beginPacket(IPAddress ip, uint16_t p) {
64+
/* -------------------------------------------------------------------------- */
65+
if(_sock >= 0) {
66+
string res = "";
67+
modem.begin();
68+
if(modem.write(string(PROMPT(_UDPBEGINPACKETIP)),res, "%s%d,%d,%s\r\n" , CMD_WRITE(_UDPBEGINPACKETIP),_sock,p,ip.toString().c_str())) {
69+
return 1;
70+
}
71+
}
72+
return 0;
73+
}
74+
75+
/* -------------------------------------------------------------------------- */
76+
int WiFiUDP::beginPacket(const char *host, uint16_t p) {
77+
/* -------------------------------------------------------------------------- */
78+
if(_sock >= 0) {
79+
string res = "";
80+
modem.begin();
81+
if(modem.write(string(PROMPT(_UDPBEGINPACKETNAME)),res, "%s%d,%d,%s\r\n" , CMD_WRITE(_UDPBEGINPACKETNAME),_sock,p,host)) {
82+
return 1;
83+
}
84+
}
85+
return 0;
86+
}
87+
88+
/* -------------------------------------------------------------------------- */
89+
int WiFiUDP::beginMulticastPacket() {
90+
/* -------------------------------------------------------------------------- */
91+
if(_sock >= 0) {
92+
string res = "";
93+
modem.begin();
94+
if(modem.write(string(PROMPT(_UDPBEGINPACKETMULTI)),res, "%s%d\r\n" , CMD_WRITE(_UDPBEGINPACKETMULTI), _sock)) {
95+
return 1;
96+
}
97+
}
98+
return 0;
99+
}
100+
101+
/* -------------------------------------------------------------------------- */
102+
int WiFiUDP::endPacket() {
103+
/* -------------------------------------------------------------------------- */
104+
if(_sock >= 0) {
105+
string res = "";
106+
modem.begin();
107+
if(modem.write(string(PROMPT(_UDPBEGINPACKET)),res, "%s%d\r\n" , CMD_WRITE(_UDPBEGINPACKET), _sock)) {
108+
return 1;
109+
}
110+
}
111+
return 0;
112+
}
113+
114+
/* -------------------------------------------------------------------------- */
115+
size_t WiFiUDP::write(uint8_t b) {
116+
/* -------------------------------------------------------------------------- */
117+
return write(&b, 1);
118+
}
119+
120+
/* -------------------------------------------------------------------------- */
121+
size_t WiFiUDP::write(const uint8_t *buf, size_t size) {
122+
/* -------------------------------------------------------------------------- */
123+
if(_sock >= 0) {
124+
string res = "";
125+
modem.begin();
126+
modem.write_nowait(string(PROMPT(_UDPWRITE)),res, "%s%d,%d\r\n" , CMD_WRITE(_UDPWRITE), _sock, size);
127+
if(modem.passthrough(buf,size)) {
128+
return size;
129+
}
130+
131+
}
132+
return 0;
133+
}
134+
135+
/* -------------------------------------------------------------------------- */
136+
int WiFiUDP::parsePacket() {
137+
/* -------------------------------------------------------------------------- */
138+
if(_sock >= 0) {
139+
string res = "";
140+
modem.begin();
141+
if(modem.write(string(PROMPT(_UDPPARSE)),res, "%s%d\r\n" , CMD_WRITE(_UDPPARSE), _sock)) {
142+
return 1;
143+
}
144+
}
145+
return 0;
146+
}
147+
148+
/* -------------------------------------------------------------------------- */
149+
int WiFiUDP::available() {
150+
/* -------------------------------------------------------------------------- */
151+
int rv = 0;
152+
if(_sock >= 0) {
153+
if(rx_buffer.available() > 0) {
154+
return rx_buffer.available();
155+
}
156+
else {
157+
string res = "";
158+
modem.begin();
159+
if(modem.write(string(PROMPT(_UDPAVAILABLE)),res, "%s%d\r\n" , CMD_WRITE(_UDPAVAILABLE), _sock)) {
160+
rv = atoi(res.c_str());
161+
}
162+
}
163+
}
164+
return rv;
165+
}
166+
167+
/* -------------------------------------------------------------------------- */
168+
int WiFiUDP::_read() {
169+
/* -------------------------------------------------------------------------- */
170+
int rv = -1;
171+
if(_sock >= 0) {
172+
string res = "";
173+
uint32_t size = rx_buffer.freePositions() - 1;
174+
modem.begin();
175+
176+
/* important - it works one shot */
177+
modem.avoid_trim_results();
178+
modem.read_using_size();
179+
if(modem.write(string(PROMPT(_UDPREAD)),res, "%s%d,%d\r\n" , CMD_WRITE(_UDPREAD), _sock, size)) {
180+
for(int i = 0, rv = 0; i < size && i < res.size(); i++) {
181+
rx_buffer.store((uint8_t)res[i]);
182+
rv++;
183+
}
184+
}
185+
}
186+
return rv;
187+
}
188+
189+
/* -------------------------------------------------------------------------- */
190+
bool WiFiUDP::read_needed(size_t s) {
191+
/* -------------------------------------------------------------------------- */
192+
if((size_t)rx_buffer.available() < s) {
193+
_read();
194+
}
195+
}
196+
197+
/* -------------------------------------------------------------------------- */
198+
int WiFiUDP::read() {
199+
/* -------------------------------------------------------------------------- */
200+
uint8_t b;
201+
if(read(&b, 1) == 1) {
202+
return b;
203+
}
204+
return -1;
205+
}
206+
207+
/* -------------------------------------------------------------------------- */
208+
int WiFiUDP::read(unsigned char* buf, size_t size) {
209+
/* -------------------------------------------------------------------------- */
210+
read_needed(size);
211+
int rv = 0;
212+
bool go_on = true;
213+
for(int i = 0; i < size && go_on; i++) {
214+
bool is_read = false;
215+
*(buf+i) = rx_buffer.read(&is_read);
216+
if(is_read) {
217+
rv++;
218+
}
219+
else {
220+
go_on = false;
221+
}
222+
}
223+
return rv;
224+
}
225+
226+
/* -------------------------------------------------------------------------- */
227+
int WiFiUDP::peek() {
228+
/* -------------------------------------------------------------------------- */
229+
int rv = -1;
230+
if(_sock >= 0) {
231+
string res = "";
232+
modem.begin();
233+
if(modem.write(string(PROMPT(_UDPPEEK)),res, "%s%d\r\n" , CMD_WRITE(_UDPPEEK), _sock)) {
234+
rv = atoi(res.c_str());
235+
}
236+
}
237+
return rv;
238+
}
239+
240+
/* -------------------------------------------------------------------------- */
241+
void WiFiUDP::flush() {
242+
/* -------------------------------------------------------------------------- */
243+
if(_sock >= 0) {
244+
string res = "";
245+
modem.begin();
246+
modem.write(string(PROMPT(_UDPFLUSH)),res, "%s%d\r\n" , CMD_WRITE(_UDPFLUSH), _sock);
247+
}
248+
}
249+
250+
/* -------------------------------------------------------------------------- */
251+
IPAddress WiFiUDP::remoteIP() {
252+
/* -------------------------------------------------------------------------- */
253+
IPAddress ip;
254+
if(_sock >= 0) {
255+
string res = "";
256+
modem.begin();
257+
if(modem.write(string(PROMPT(_UDPREMOTEIP)),res, "%s%d\r\n" , CMD_WRITE(_UDPREMOTEIP), _sock)) {
258+
ip.fromString(res.c_str());
259+
return ip;
260+
}
261+
}
262+
return IPAddress(0,0,0,0);
263+
}
264+
265+
/* -------------------------------------------------------------------------- */
266+
uint16_t WiFiUDP::remotePort() {
267+
/* -------------------------------------------------------------------------- */
268+
uint16_t rv = 0;
269+
if(_sock >= 0) {
270+
string res = "";
271+
modem.begin();
272+
if(modem.write(string(PROMPT(_UDPREMOTEPORT)),res, "%s%d\r\n" , CMD_WRITE(_UDPREMOTEPORT), _sock)) {
273+
rv = atoi(res.c_str());
274+
return rv;
275+
}
276+
}
277+
return rv;
278+
}
279+

0 commit comments

Comments
 (0)