99#include < cstring>
1010#include < algorithm>
1111
12+ #ifdef __APPLE__
13+ #include < libkern/OSByteOrder.h>
14+ #define htobe16 (x ) OSSwapHostToBigInt16(x)
15+ #else
16+ #if defined(_WIN16) || defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__)
17+ #include < winsock2.h>
18+ #define htobe16 (x ) htons(x)
19+ #else
20+ #include < endian.h>
21+ #endif // windows
22+ #endif /* __APPLE__ */
23+
1224#include " ../../include/debug.h"
1325#include " ../../include/pinmap.h"
1426
@@ -457,7 +469,8 @@ void drivewireNetwork::status_local()
457469 uint8_t ipNetmask[4 ];
458470 uint8_t ipGateway[4 ];
459471 uint8_t ipDNS[4 ];
460- uint8_t default_status[4 ] = {0 , 0 , 0 , 0 };
472+ NDeviceStatus status {};
473+
461474
462475 Debug_printf (" drivewireNetwork::sio_status_local(%u)\n " , cmdFrame.aux2 );
463476
@@ -468,31 +481,28 @@ void drivewireNetwork::status_local()
468481 {
469482 case 1 : // IP Address
470483 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 ));
484+ memcpy (&status ,ipAddress,sizeof (status ));
472485 break ;
473486 case 2 : // Netmask
474487 Debug_printf (" Netmask: %u.%u.%u.%u\n " , ipNetmask[0 ], ipNetmask[1 ], ipNetmask[2 ], ipNetmask[3 ]);
475- memcpy (default_status ,ipNetmask,sizeof (default_status ));
488+ memcpy (&status ,ipNetmask,sizeof (status ));
476489 break ;
477490 case 3 : // Gatway
478491 Debug_printf (" Gateway: %u.%u.%u.%u\n " , ipGateway[0 ], ipGateway[1 ], ipGateway[2 ], ipGateway[3 ]);
479- memcpy (default_status ,ipGateway,sizeof (default_status ));
492+ memcpy (&status ,ipGateway,sizeof (status ));
480493 break ;
481494 case 4 : // DNS
482495 Debug_printf (" DNS: %u.%u.%u.%u\n " , ipDNS[0 ], ipDNS[1 ], ipDNS[2 ], ipDNS[3 ]);
483- memcpy (default_status ,ipDNS,sizeof (default_status ));
496+ memcpy (&status ,ipDNS,sizeof (status ));
484497 break ;
485498 default :
486- default_status[ 2 ] = ns.connected ;
487- default_status[ 3 ] = ns.error ;
499+ status. conn = ns.connected ;
500+ status. err = ns.error ;
488501 break ;
489502 }
490503
491504 response.clear ();
492- response += default_status[0 ];
493- response += default_status[1 ];
494- response += default_status[2 ];
495- response += default_status[3 ];
505+ response.append ((char *) &status, sizeof (status));
496506}
497507
498508bool drivewireNetwork::status_channel_json (NetworkStatus *ns)
@@ -508,7 +518,7 @@ bool drivewireNetwork::status_channel_json(NetworkStatus *ns)
508518 */
509519void drivewireNetwork::status_channel ()
510520{
511- uint8_t serialized_status[ 4 ] = { 0 , 0 , 0 , 0 } ;
521+ NDeviceStatus status ;
512522
513523 Debug_printf (" drivewireNetwork::sio_status_channel(%u)\n " , channelMode);
514524
@@ -530,23 +540,21 @@ void drivewireNetwork::status_channel()
530540 protocol->forceStatus = false ;
531541
532542 // 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 );
543+ size_t avail = ns.rxBytesWaiting ;
544+ avail = avail > 65535 ? 65535 : avail;
545+ status.avail = htobe16 (avail);
546+ status.conn = ns.connected ;
547+ status.err = ns.error ;
540548
541- Debug_printf (" %02X %02X %02X %02X\n " ,serialized_status[0 ],serialized_status[1 ],serialized_status[2 ],serialized_status[3 ]);
549+ #if 1 // def TOO_MUCH_DEBUG
550+ Debug_printf (" status_channel() - BW: %u C: %u E: %u\n " ,
551+ avail, ns.connected , ns.error );
552+ #endif /* TOO_MUCH_DEBUG */
542553
543554 // and fill response.
544555 response.clear ();
545556 response.shrink_to_fit ();
546- response += serialized_status[0 ];
547- response += serialized_status[1 ];
548- response += serialized_status[2 ];
549- response += serialized_status[3 ];
557+ response.append ((char *) &status, sizeof (status));
550558}
551559
552560/* *
0 commit comments