88
99#include < cstring>
1010#include < algorithm>
11+ #include < endian.h>
1112
1213#include " ../../include/debug.h"
1314#include " ../../include/pinmap.h"
@@ -457,7 +458,8 @@ void drivewireNetwork::status_local()
457458 uint8_t ipNetmask[4 ];
458459 uint8_t ipGateway[4 ];
459460 uint8_t ipDNS[4 ];
460- uint8_t default_status[4 ] = {0 , 0 , 0 , 0 };
461+ NDeviceStatus status {};
462+
461463
462464 Debug_printf (" drivewireNetwork::sio_status_local(%u)\n " , cmdFrame.aux2 );
463465
@@ -468,31 +470,28 @@ void drivewireNetwork::status_local()
468470 {
469471 case 1 : // IP Address
470472 Debug_printf (" IP Address: %u.%u.%u.%u\n " , ipAddress[0 ], ipAddress[1 ], ipAddress[2 ], ipAddress[3 ]);
471- memcpy (default_status ,ipAddress,sizeof (default_status ));
473+ memcpy (&status ,ipAddress,sizeof (status ));
472474 break ;
473475 case 2 : // Netmask
474476 Debug_printf (" Netmask: %u.%u.%u.%u\n " , ipNetmask[0 ], ipNetmask[1 ], ipNetmask[2 ], ipNetmask[3 ]);
475- memcpy (default_status ,ipNetmask,sizeof (default_status ));
477+ memcpy (&status ,ipNetmask,sizeof (status ));
476478 break ;
477479 case 3 : // Gatway
478480 Debug_printf (" Gateway: %u.%u.%u.%u\n " , ipGateway[0 ], ipGateway[1 ], ipGateway[2 ], ipGateway[3 ]);
479- memcpy (default_status ,ipGateway,sizeof (default_status ));
481+ memcpy (&status ,ipGateway,sizeof (status ));
480482 break ;
481483 case 4 : // DNS
482484 Debug_printf (" DNS: %u.%u.%u.%u\n " , ipDNS[0 ], ipDNS[1 ], ipDNS[2 ], ipDNS[3 ]);
483- memcpy (default_status ,ipDNS,sizeof (default_status ));
485+ memcpy (&status ,ipDNS,sizeof (status ));
484486 break ;
485487 default :
486- default_status[ 2 ] = ns.connected ;
487- default_status[ 3 ] = ns.error ;
488+ status. conn = ns.connected ;
489+ status. err = ns.error ;
488490 break ;
489491 }
490492
491493 response.clear ();
492- response += default_status[0 ];
493- response += default_status[1 ];
494- response += default_status[2 ];
495- response += default_status[3 ];
494+ response.append ((char *) &status, sizeof (status));
496495}
497496
498497bool drivewireNetwork::status_channel_json (NetworkStatus *ns)
@@ -508,7 +507,7 @@ bool drivewireNetwork::status_channel_json(NetworkStatus *ns)
508507 */
509508void drivewireNetwork::status_channel ()
510509{
511- uint8_t serialized_status[ 4 ] = { 0 , 0 , 0 , 0 } ;
510+ NDeviceStatus status ;
512511
513512 Debug_printf (" drivewireNetwork::sio_status_channel(%u)\n " , channelMode);
514513
@@ -530,23 +529,21 @@ void drivewireNetwork::status_channel()
530529 protocol->forceStatus = false ;
531530
532531 // Serialize status into status bytes (rxBytesWaiting sent big endian!)
533- serialized_status[0 ] = ns.rxBytesWaiting >> 8 ;
534- serialized_status[1 ] = ns.rxBytesWaiting & 0xFF ;
535- serialized_status[2 ] = ns.connected ;
536- serialized_status[3 ] = ns.error ;
537-
538- Debug_printf (" sio_status_channel() - BW: %u C: %u E: %u\n " ,
539- ns.rxBytesWaiting , ns.connected , ns.error );
532+ size_t avail = ns.rxBytesWaiting ;
533+ avail = avail > 65535 ? 65535 : avail;
534+ status.avail = htobe16 (avail);
535+ status.conn = ns.connected ;
536+ status.err = ns.error ;
540537
541- Debug_printf (" %02X %02X %02X %02X\n " ,serialized_status[0 ],serialized_status[1 ],serialized_status[2 ],serialized_status[3 ]);
538+ #if 1 // def TOO_MUCH_DEBUG
539+ Debug_printf (" status_channel() - BW: %u C: %u E: %u\n " ,
540+ avail, ns.connected , ns.error );
541+ #endif /* TOO_MUCH_DEBUG */
542542
543543 // and fill response.
544544 response.clear ();
545545 response.shrink_to_fit ();
546- response += serialized_status[0 ];
547- response += serialized_status[1 ];
548- response += serialized_status[2 ];
549- response += serialized_status[3 ];
546+ response.append ((char *) &status, sizeof (status));
550547}
551548
552549/* *
0 commit comments