@@ -31,6 +31,7 @@ extern void yield(void);
31
31
// TODO: randomize this when not using DHCP, but how?
32
32
static uint16_t local_port = 49152 ; // 49152 to 65535
33
33
34
+ #if 0
34
35
typedef struct {
35
36
uint16_t RX_RSR; // Number of bytes received
36
37
uint16_t RX_RD; // Address to read
@@ -39,6 +40,7 @@ typedef struct {
39
40
} socketstate_t;
40
41
41
42
static socketstate_t state[MAX_SOCK_NUM];
43
+ #endif
42
44
43
45
44
46
@@ -96,7 +98,7 @@ uint8_t EthernetClass::socketBegin(uint8_t protocol, uint16_t port)
96
98
_w5100.execCmdSn (s, Sock_CLOSE);
97
99
makesocket:
98
100
// Serial.printf("W5000socket %d\n", s);
99
- EthernetServer::server_port [s] = 0 ;
101
+ // _server_port [s] = 0;
100
102
delayMicroseconds (250 ); // TODO: is this needed??
101
103
_w5100.writeSnMR (s, protocol);
102
104
_w5100.writeSnIR (s, 0xFF );
@@ -108,11 +110,11 @@ uint8_t EthernetClass::socketBegin(uint8_t protocol, uint16_t port)
108
110
_w5100.writeSnPORT (s, local_port);
109
111
}
110
112
_w5100.execCmdSn (s, Sock_OPEN);
111
- state [s].RX_RSR = 0 ;
112
- state [s].RX_RD = _w5100.readSnRX_RD (s); // always zero?
113
- state [s].RX_inc = 0 ;
114
- state [s].TX_FSR = 0 ;
115
- // Serial.printf("W5000socket prot=%d, RX_RD=%d\n", _w5100.readSnMR(s), state [s].RX_RD);
113
+ _state [s].RX_RSR = 0 ;
114
+ _state [s].RX_RD = _w5100.readSnRX_RD (s); // always zero?
115
+ _state [s].RX_inc = 0 ;
116
+ _state [s].TX_FSR = 0 ;
117
+ // Serial.printf("W5000socket prot=%d, RX_RD=%d\n", _w5100.readSnMR(s), _state [s].RX_RD);
116
118
_spibus.endTransaction ();
117
119
return s;
118
120
}
@@ -160,7 +162,7 @@ uint8_t EthernetClass::socketBeginMulticast(uint8_t protocol, IPAddress ip, uint
160
162
_w5100.execCmdSn (s, Sock_CLOSE);
161
163
makesocket:
162
164
// Serial.printf("W5000socket %d\n", s);
163
- EthernetServer::server_port [s] = 0 ;
165
+ // _server_port [s] = 0;
164
166
delayMicroseconds (250 ); // TODO: is this needed??
165
167
_w5100.writeSnMR (s, protocol);
166
168
_w5100.writeSnIR (s, 0xFF );
@@ -180,11 +182,11 @@ uint8_t EthernetClass::socketBeginMulticast(uint8_t protocol, IPAddress ip, uint
180
182
_w5100.writeSnDPORT (s, port);
181
183
_w5100.writeSnDHAR (s, mac);
182
184
_w5100.execCmdSn (s, Sock_OPEN);
183
- state [s].RX_RSR = 0 ;
184
- state [s].RX_RD = _w5100.readSnRX_RD (s); // always zero?
185
- state [s].RX_inc = 0 ;
186
- state [s].TX_FSR = 0 ;
187
- // Serial.printf("W5000socket prot=%d, RX_RD=%d\n", _w5100.readSnMR(s), state [s].RX_RD);
185
+ _state [s].RX_RSR = 0 ;
186
+ _state [s].RX_RD = _w5100.readSnRX_RD (s); // always zero?
187
+ _state [s].RX_inc = 0 ;
188
+ _state [s].TX_FSR = 0 ;
189
+ // Serial.printf("W5000socket prot=%d, RX_RD=%d\n", _w5100.readSnMR(s), _state [s].RX_RD);
188
190
_spibus.endTransaction ();
189
191
return s;
190
192
}
@@ -298,42 +300,42 @@ void EthernetClass::read_data(uint8_t s, uint16_t src, uint8_t *dst, uint16_t le
298
300
int EthernetClass::socketRecv (uint8_t s, uint8_t *buf, int16_t len)
299
301
{
300
302
// Check how much data is available
301
- int ret = state [s].RX_RSR ;
303
+ int ret = _state [s].RX_RSR ;
302
304
_spibus.beginTransaction (SPI_ETHERNET_SETTINGS);
303
305
if (ret < len) {
304
306
uint16_t rsr = getSnRX_RSR (s);
305
- ret = rsr - state [s].RX_inc ;
306
- state [s].RX_RSR = ret;
307
- // Serial.printf("Sock_RECV, RX_RSR=%d, RX_inc=%d\n", ret, state [s].RX_inc);
307
+ ret = rsr - _state [s].RX_inc ;
308
+ _state [s].RX_RSR = ret;
309
+ // Serial.printf("Sock_RECV, RX_RSR=%d, RX_inc=%d\n", ret, _state [s].RX_inc);
308
310
}
309
311
if (ret == 0 ) {
310
312
// No data available.
311
313
uint8_t status = _w5100.readSnSR (s);
312
314
if ( status == SnSR::LISTEN || status == SnSR::CLOSED ||
313
315
status == SnSR::CLOSE_WAIT ) {
314
316
// The remote end has closed its side of the connection,
315
- // so this is the eof state
317
+ // so this is the eof _state
316
318
ret = 0 ;
317
319
} else {
318
320
// The connection is still up, but there's no data waiting to be read
319
321
ret = -1 ;
320
322
}
321
323
} else {
322
324
if (ret > len) ret = len; // more data available than buffer length
323
- uint16_t ptr = state [s].RX_RD ;
325
+ uint16_t ptr = _state [s].RX_RD ;
324
326
if (buf) read_data (s, ptr, buf, ret);
325
327
ptr += ret;
326
- state [s].RX_RD = ptr;
327
- state [s].RX_RSR -= ret;
328
- uint16_t inc = state [s].RX_inc + ret;
329
- if (inc >= 250 || state [s].RX_RSR == 0 ) {
330
- state [s].RX_inc = 0 ;
328
+ _state [s].RX_RD = ptr;
329
+ _state [s].RX_RSR -= ret;
330
+ uint16_t inc = _state [s].RX_inc + ret;
331
+ if (inc >= 250 || _state [s].RX_RSR == 0 ) {
332
+ _state [s].RX_inc = 0 ;
331
333
_w5100.writeSnRX_RD (s, ptr);
332
334
_w5100.execCmdSn (s, Sock_RECV);
333
335
// Serial.printf("Sock_RECV cmd, RX_RD=%d, RX_RSR=%d\n",
334
- // state [s].RX_RD, state [s].RX_RSR);
336
+ // _state [s].RX_RD, _state [s].RX_RSR);
335
337
} else {
336
- state [s].RX_inc = inc;
338
+ _state [s].RX_inc = inc;
337
339
}
338
340
}
339
341
_spibus.endTransaction ();
@@ -343,13 +345,13 @@ int EthernetClass::socketRecv(uint8_t s, uint8_t *buf, int16_t len)
343
345
344
346
uint16_t EthernetClass::socketRecvAvailable (uint8_t s)
345
347
{
346
- uint16_t ret = state [s].RX_RSR ;
348
+ uint16_t ret = _state [s].RX_RSR ;
347
349
if (ret == 0 ) {
348
350
_spibus.beginTransaction (SPI_ETHERNET_SETTINGS);
349
351
uint16_t rsr = getSnRX_RSR (s);
350
352
_spibus.endTransaction ();
351
- ret = rsr - state [s].RX_inc ;
352
- state [s].RX_RSR = ret;
353
+ ret = rsr - _state [s].RX_inc ;
354
+ _state [s].RX_RSR = ret;
353
355
// Serial.printf("sockRecvAvailable s=%d, RX_RSR=%d\n", s, ret);
354
356
}
355
357
return ret;
@@ -361,7 +363,7 @@ uint8_t EthernetClass::socketPeek(uint8_t s)
361
363
{
362
364
uint8_t b;
363
365
_spibus.beginTransaction (SPI_ETHERNET_SETTINGS);
364
- uint16_t ptr = state [s].RX_RD ;
366
+ uint16_t ptr = _state [s].RX_RD ;
365
367
_w5100.read ((ptr & _w5100.SMASK ) + _w5100.RBASE (s), &b, 1 );
366
368
_spibus.endTransaction ();
367
369
return b;
@@ -381,7 +383,7 @@ uint16_t EthernetClass::getSnTX_FSR(uint8_t s)
381
383
while (1 ) {
382
384
val = _w5100.readSnTX_FSR (s);
383
385
if (val == prev) {
384
- state [s].TX_FSR = val;
386
+ _state [s].TX_FSR = val;
385
387
return val;
386
388
}
387
389
prev = val;
0 commit comments