@@ -217,6 +217,7 @@ size_t RF24Client::_write(uip_userdata_t* u, const uint8_t* buf, size_t size)
217
217
// RF24EthernetClass::tick();
218
218
goto test2;
219
219
}
220
+ u->hold = false ;
220
221
return u->out_pos ;
221
222
}
222
223
u->hold = false ;
@@ -278,18 +279,15 @@ void serialip_appcall(void)
278
279
#if UIP_CONNECTION_TIMEOUT > 0
279
280
u->connectTimer = millis ();
280
281
#endif
282
+ u->hold = (u->out_pos = (u->windowOpened = (u->packets_out = false )));
281
283
282
- if (u->sent )
283
- {
284
- u->hold = (u->out_pos = (u->windowOpened = (u->packets_out = false )));
285
- }
286
284
if (uip_len && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED)))
287
285
{
288
286
uip_stop ();
289
287
u->state &= ~UIP_CLIENT_RESTART;
290
288
u->windowOpened = false ;
291
289
u->restartTime = millis ();
292
- memcpy (&u->myData [u->dataPos + u->dataCnt ], uip_appdata, uip_datalen ());
290
+ memcpy (&u->myData [u->in_pos + u->dataCnt ], uip_appdata, uip_datalen ());
293
291
u->dataCnt += uip_datalen ();
294
292
295
293
u->packets_in = 1 ;
@@ -337,39 +335,46 @@ void serialip_appcall(void)
337
335
/* ******Polling**********/
338
336
if (uip_poll () || uip_rexmit ())
339
337
{
338
+ if (uip_rexmit ()) {
339
+ IF_RF24ETHERNET_DEBUG_CLIENT (Serial.print (F (" ReXmit, Len: " )););
340
+ IF_RF24ETHERNET_DEBUG_CLIENT (Serial.println (u->out_pos ));
341
+ uip_len = u->out_pos ;
342
+ uip_send (u->myData , u->out_pos );
343
+ u->hold = true ;
344
+ goto finish;
345
+ }
340
346
// IF_RF24ETHERNET_DEBUG_CLIENT( Serial.println(); Serial.println(F("UIPClient uip_poll")); );
341
347
342
- if (u->packets_out != 0 )
348
+ if (u->packets_out != 0 && !u-> hold )
343
349
{
344
350
uip_len = u->out_pos ;
345
351
uip_send (u->myData , u->out_pos );
346
352
u->hold = true ;
347
- u->sent = true ;
348
353
goto finish;
349
354
}
350
- else
351
- // Restart mechanism to keep connections going
352
- // Only call this if the TCP window has already been re-opened, the connection is being polled, but no data
353
- // has been acked
354
- if (!(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED)))
355
- {
356
355
357
- if (u->windowOpened == true && u->state & UIP_CLIENT_RESTART && millis () - u->restartTime > u->restartInterval )
358
- {
359
- u->restartTime = millis ();
356
+ // Restart mechanism to keep connections going
357
+ // Only call this if the TCP window has already been re-opened, the connection is being polled, but no data
358
+ // has been acked
359
+ if (!(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED)))
360
+ {
361
+
362
+ if (u->windowOpened == true && u->state & UIP_CLIENT_RESTART && millis () - u->restartTime > u->restartInterval )
363
+ {
364
+ u->restartTime = millis ();
360
365
#if defined RF24ETHERNET_DEBUG_CLIENT || defined ETH_DEBUG_L1
361
- Serial.println ();
362
- Serial.print (millis ());
366
+ Serial.println ();
367
+ Serial.print (millis ());
363
368
#if UIP_CONNECTION_TIMEOUT > 0
364
- Serial.print (F (" UIPClient Re-Open TCP Window, time remaining before abort: " ));
365
- Serial.println (UIP_CONNECTION_TIMEOUT - (millis () - u->connectTimer ));
369
+ Serial.print (F (" UIPClient Re-Open TCP Window, time remaining before abort: " ));
370
+ Serial.println (UIP_CONNECTION_TIMEOUT - (millis () - u->connectTimer ));
366
371
#endif
367
372
#endif
368
- u->restartInterval += 500 ;
369
- u->restartInterval = rf24_min (u->restartInterval , 7000 );
370
- uip_restart ();
371
- }
373
+ u->restartInterval += 500 ;
374
+ u->restartInterval = rf24_min (u->restartInterval , 7000 );
375
+ uip_restart ();
372
376
}
377
+ }
373
378
}
374
379
375
380
/* ******Close**********/
@@ -423,9 +428,11 @@ uip_userdata_t* RF24Client::_allocateData()
423
428
data->packets_in = 0 ;
424
429
data->packets_out = 0 ;
425
430
data->dataCnt = 0 ;
426
- data->dataPos = 0 ;
431
+ data->in_pos = 0 ;
427
432
data->out_pos = 0 ;
428
433
data->hold = 0 ;
434
+ data->restartTime = millis ();
435
+ data->restartInterval = 5000 ;
429
436
#if (UIP_CONNECTION_TIMEOUT > 0)
430
437
data->connectTimer = millis ();
431
438
data->connectTimeout = UIP_CONNECTION_TIMEOUT;
@@ -483,15 +490,15 @@ int RF24Client::read(uint8_t* buf, size_t size)
483
490
}
484
491
485
492
size = rf24_min (data->dataCnt , size);
486
- memcpy (buf, &data->myData [data->dataPos ], size);
493
+ memcpy (buf, &data->myData [data->in_pos ], size);
487
494
data->dataCnt -= size;
488
495
489
- data->dataPos += size;
496
+ data->in_pos += size;
490
497
491
498
if (!data->dataCnt )
492
499
{
493
500
data->packets_in = 0 ;
494
- data->dataPos = 0 ;
501
+ data->in_pos = 0 ;
495
502
496
503
if (uip_stopped (&uip_conns[data->state & UIP_CLIENT_SOCKETS]) && !(data->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED)))
497
504
{
@@ -536,7 +543,7 @@ int RF24Client::peek()
536
543
{
537
544
if (available ())
538
545
{
539
- return data->myData [data->dataPos ];
546
+ return data->myData [data->in_pos ];
540
547
}
541
548
return -1 ;
542
549
}
0 commit comments