Skip to content

Commit ad2e6c4

Browse files
authored
Use a struct, Luke (#1026)
1 parent 07e56a6 commit ad2e6c4

File tree

2 files changed

+37
-24
lines changed

2 files changed

+37
-24
lines changed

lib/device/drivewire/network.cpp

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@
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

498508
bool drivewireNetwork::status_channel_json(NetworkStatus *ns)
@@ -508,7 +518,7 @@ bool drivewireNetwork::status_channel_json(NetworkStatus *ns)
508518
*/
509519
void 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
/**

lib/device/drivewire/network.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@
3030
#define OUTPUT_BUFFER_SIZE 65535
3131
#define SPECIAL_BUFFER_SIZE 256
3232

33+
typedef struct {
34+
uint16_t avail;
35+
uint8_t conn, err;
36+
} NDeviceStatus;
37+
3338
class drivewireNetwork : public virtualDevice
3439
{
3540

0 commit comments

Comments
 (0)