Respect byte order of packets

Signed-off-by: Jacki <jacki@thejackimonster.de>
This commit is contained in:
Jacki 2024-03-02 02:10:07 +01:00
parent 2b38861b70
commit 2d7ab0d4fa
No known key found for this signature in database
GPG key ID: B404184796354C5E
2 changed files with 30 additions and 17 deletions

View file

@ -1,7 +1,7 @@
//
// Created by thejackimonster on 30.03.23.
//
// Copyright (c) 2023 thejackimonster. All rights reserved.
// Copyright (c) 2023-2024 thejackimonster. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@ -126,11 +126,16 @@ static bool send_payload_msg(device3_type* device, uint8_t msgid, uint8_t len, c
const uint16_t payload_len = 5 + packet_len;
packet.head = 0xAA;
packet.length = packet_len;
packet.length = htole16(packet_len);
packet.msgid = msgid;
memcpy(packet.data, data, len);
packet.checksum = crc32_checksum((const uint8_t*) (&packet.length), packet.length);
packet.checksum = htole32(
crc32_checksum(
(const uint8_t*) (&packet.length),
packet.length
)
);
return send_payload(device, payload_len, (uint8_t*) (&packet));
}
@ -838,7 +843,7 @@ device3_error_type device3_read(device3_type* device, int timeout) {
return DEVICE3_ERROR_UNEXPECTED;
}
const uint64_t timestamp = packet.timestamp;
const uint64_t timestamp = le64toh(packet.timestamp);
if ((packet.signature[0] == 0xaa) && (packet.signature[1] == 0x53)) {
device3_callback(device, timestamp, DEVICE3_EVENT_INIT);

View file

@ -1,7 +1,7 @@
//
// Created by thejackimonster on 29.03.23.
//
// Copyright (c) 2023 thejackimonster. All rights reserved.
// Copyright (c) 2023-2024 thejackimonster. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@ -93,13 +93,18 @@ static bool send_payload_action(device4_type* device, uint16_t msgid, uint8_t le
const uint16_t payload_len = 5 + packet_len;
packet.head = PACKET_HEAD;
packet.length = packet_len;
packet.timestamp = 0;
packet.msgid = msgid;
packet.length = htole16(packet_len);
packet.timestamp = htole64(0);
packet.msgid = htole16(msgid);
memset(packet.reserved, 0, 5);
memcpy(packet.data, data, len);
packet.checksum = crc32_checksum((const uint8_t*) (&packet.length), packet.length);
packet.checksum = htole32(
crc32_checksum(
(const uint8_t*) (&packet.length),
packet.length
)
);
return send_payload(device, payload_len, (uint8_t*) (&packet));
}
@ -123,7 +128,7 @@ static bool recv_payload_msg(device4_type* device, uint16_t msgid, uint8_t len,
return false;
}
if (packet.msgid != msgid) {
if (le16toh(packet.msgid) != msgid) {
device4_error("Unexpected payload received");
return false;
}
@ -135,7 +140,7 @@ static bool recv_payload_msg(device4_type* device, uint16_t msgid, uint8_t len,
return false;
}
const uint16_t data_len = packet.length - 18;
const uint16_t data_len = le16toh(packet.length) - 18;
if (len <= data_len) {
memcpy(data, packet.data + 1, len);
@ -354,14 +359,17 @@ device4_error_type device4_read(device4_type* device, int timeout) {
return DEVICE4_ERROR_WRONG_HEAD;
}
const uint32_t timestamp = packet.timestamp;
const uint32_t timestamp = le32toh(packet.timestamp);
const uint16_t msgid = le16toh(packet.msgid);
const uint16_t length = le16toh(packet.length);
const size_t data_len = (size_t) &(packet.data) - (size_t) &(packet.length);
#ifndef NDEBUG
printf("MSG: %d = %04x (%d)\n", packet.msgid, packet.msgid, packet.length);
printf("MSG: %d = %04x (%d)\n", msgid, msgid, length);
if (packet.length > 11) {
for (int i = 0; i < packet.length - 11; i++) {
if (length > 11) {
for (int i = 0; i < length - 11; i++) {
printf("%02x ", packet.data[i]);
}
@ -369,7 +377,7 @@ device4_error_type device4_read(device4_type* device, int timeout) {
}
#endif
switch (packet.msgid) {
switch (msgid) {
case DEVICE4_MSG_P_START_HEARTBEAT: {
break;
}
@ -434,7 +442,7 @@ device4_error_type device4_read(device4_type* device, int timeout) {
device->active = true;
if (data_len + text_len != packet.length) {
if (data_len + text_len != length) {
device4_error("Not matching length");
return DEVICE4_ERROR_INVALID_LENGTH;
}