Skip to content

Commit f8705b9

Browse files
committed
Use a struct, Luke
1 parent 07e56a6 commit f8705b9

File tree

2 files changed

+26
-24
lines changed

2 files changed

+26
-24
lines changed

lib/device/drivewire/network.cpp

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

498497
bool drivewireNetwork::status_channel_json(NetworkStatus *ns)
@@ -508,7 +507,7 @@ bool drivewireNetwork::status_channel_json(NetworkStatus *ns)
508507
*/
509508
void 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
/**

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)