|
|
@@ -7,51 +7,25 @@
|
|
|
#include "networking.h"
|
|
|
|
|
|
static const uint8_t fb = 0xfb;
|
|
|
-static const uint8_t fe = 0xfe;
|
|
|
|
|
|
-void PaddleChangeDirMsg_encode(const PaddleChangeDirMsg *const msg, uint8_t *buf, const size_t buf_size) {
|
|
|
- if (buf_size < sizeof(PaddleChangeDirMsg)) {
|
|
|
- LOG_FATALF("Buffer size too small (%zu), %zu required.", buf_size, sizeof(PaddleChangeDirMsg));
|
|
|
+static size_t NetMsgType_to_buf_size(const NetMsgType type) {
|
|
|
+ switch (type) {
|
|
|
+ case NET_MSG_PADDLE_CHANGE_DIR:
|
|
|
+ return sizeof(PaddleChangeDirMsg);
|
|
|
+ case NET_MSG_PADDLE_POS:
|
|
|
+ return sizeof(PaddlePosMsg);
|
|
|
+ default:
|
|
|
+ LOG_FATALF("Invalid msg type: %u", type);
|
|
|
}
|
|
|
-
|
|
|
- memcpy(buf, msg, sizeof(PaddleChangeDirMsg));
|
|
|
-}
|
|
|
-
|
|
|
-PaddleChangeDirMsg PaddleChangeDir_decode(const uint8_t *buf, const size_t buf_size) {
|
|
|
- if (buf_size < sizeof(PaddleChangeDirMsg)) {
|
|
|
- LOG_FATALF("Buffer size too small (%zu), %zu required.", buf_size, sizeof(PaddleChangeDirMsg));
|
|
|
- }
|
|
|
-
|
|
|
- PaddleChangeDirMsg msg = { 0 };
|
|
|
- memcpy(&msg, buf, sizeof(PaddleChangeDirMsg));
|
|
|
-
|
|
|
- return msg;
|
|
|
}
|
|
|
|
|
|
-void PaddlePosMsg_encode(const PaddlePosMsg *const msg, uint8_t *buf, const size_t buf_size) {
|
|
|
- if (buf_size < sizeof(PaddlePosMsg)) {
|
|
|
- LOG_FATALF("Buffer size too small (%zu), %zu required.", buf_size, sizeof(PaddlePosMsg));
|
|
|
- }
|
|
|
+// buf is a pointer to one of the packed *Msg structs from networking.h
|
|
|
+void send_msg(FILE *s, const NetMsgType type, const uint8_t *const buf) {
|
|
|
+ const size_t buf_size = NetMsgType_to_buf_size(type);
|
|
|
|
|
|
- memcpy(buf, msg, buf_size);
|
|
|
-}
|
|
|
-
|
|
|
-PaddlePosMsg PaddlePosMsg_decode(const uint8_t *buf, const size_t buf_size) {
|
|
|
- if (buf_size < sizeof(PaddlePosMsg)) {
|
|
|
- LOG_FATALF("Buffer size too small (%zu), %zu required.", buf_size, sizeof(PaddlePosMsg));
|
|
|
- }
|
|
|
- PaddlePosMsg msg = { 0 };
|
|
|
- memcpy(&msg, buf, sizeof(PaddlePosMsg));
|
|
|
- return msg;
|
|
|
-}
|
|
|
-
|
|
|
-void send_msg(FILE *s, const uint8_t *const buf, const size_t buf_size) {
|
|
|
uint8_t *buf_cpy = (uint8_t *) malloc(sizeof(uint8_t) * buf_size);
|
|
|
memcpy(buf_cpy, buf, buf_size);
|
|
|
for (uint8_t *p = buf_cpy; p < buf_cpy + buf_size; p++) {
|
|
|
- // if (*p == fb || *p == fe) {
|
|
|
- // *p += SEND_FRAME_MANGLE;
|
|
|
- // }
|
|
|
if (*p == fb) {
|
|
|
*p += SEND_FRAME_MANGLE;
|
|
|
}
|
|
|
@@ -60,15 +34,12 @@ void send_msg(FILE *s, const uint8_t *const buf, const size_t buf_size) {
|
|
|
if (fwrite(&fb, sizeof(fb), 1, s) < 1) {
|
|
|
LOG_FATAL("[send_msg] Failed to write fb");
|
|
|
}
|
|
|
- if (fwrite(&buf_size, sizeof(buf_size), 1, s) < 1) {
|
|
|
- LOG_FATAL("[send_msg] Failed to write msg_len");
|
|
|
+ if (fwrite(&type, sizeof(NetMsgType), 1, s) < 1) {
|
|
|
+ LOG_FATAL("[send_msg] Failed to write msg type");
|
|
|
}
|
|
|
if (fwrite(buf_cpy, buf_size, 1, s) < 1) {
|
|
|
LOG_FATAL("[send_msg] Failed to write msg");
|
|
|
}
|
|
|
- // if (fwrite(&fe, sizeof(fe), 1, s) < 1) {
|
|
|
- // LOG_FATAL("[send_msg] Failed to write fe");
|
|
|
- // }
|
|
|
if (fflush(s) != 0) {
|
|
|
LOG_FATAL("[send_msg] Failed to flush stream");
|
|
|
}
|
|
|
@@ -95,39 +66,36 @@ static bool recv_until_fb_or_empty_buf(FILE *s) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-bool recv_msg(FILE *s, uint8_t *const buf, const size_t buf_size) {
|
|
|
- bool found_fb = recv_until_fb_or_empty_buf(s);
|
|
|
+bool recv_msg_type(FILE *s, NetMsgType *const type) {
|
|
|
+ const bool found_fb = recv_until_fb_or_empty_buf(s);
|
|
|
if (!found_fb) {
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
- size_t msg_len;
|
|
|
- if (fread(&msg_len, sizeof(msg_len), 1, s) < 1) {
|
|
|
- LOG_FATAL("[recv_msg] Failed to read msg_len");
|
|
|
+ if (fread(type, sizeof(NetMsgType), 1, s) < 1) {
|
|
|
+ LOG_FATAL("[recv_msg] Failed to read msg type");
|
|
|
}
|
|
|
|
|
|
- if (buf_size < msg_len) {
|
|
|
- LOG_FATALF("[recv_msg] Buffer too small. msg_len: %zu, buf_size: %zu", msg_len, buf_size);
|
|
|
+ switch (*type) {
|
|
|
+ case NET_MSG_PADDLE_CHANGE_DIR:
|
|
|
+ case NET_MSG_PADDLE_POS:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ LOG_FATALF("[recv_msg_type] Invalid msg type: %u", type);
|
|
|
}
|
|
|
- if (fread(buf, buf_size, 1, s) < 1) {
|
|
|
+
|
|
|
+ return type;
|
|
|
+}
|
|
|
+
|
|
|
+// buf is a pointer to one of the packed *Msg structs from networking.h
|
|
|
+void recv_msg(FILE *s, const NetMsgType type, uint8_t *const buf) {
|
|
|
+ const size_t msg_len = NetMsgType_to_buf_size(type);
|
|
|
+
|
|
|
+ if (fread(buf, msg_len, 1, s) < 1) {
|
|
|
LOG_FATAL("[recv_msg] Failed to read msg");
|
|
|
}
|
|
|
- for (uint8_t *p = buf; p < buf + buf_size; p++) {
|
|
|
- // if (*p == fb + SEND_FRAME_MANGLE || *p == fe + SEND_FRAME_MANGLE) {
|
|
|
- // *p += RECV_FRAME_MANGLE;
|
|
|
- // }
|
|
|
+ for (uint8_t *p = buf; p < buf + msg_len; p++) {
|
|
|
if (*p == fb + SEND_FRAME_MANGLE) {
|
|
|
*p += RECV_FRAME_MANGLE;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // uint8_t _fe;
|
|
|
- // if (fread(&_fe, sizeof(_fe), 1, s) < 1) {
|
|
|
- // LOG_FATAL("[recv_msg] Failed to read _fe");
|
|
|
- // }
|
|
|
- // if (_fe != fe) {
|
|
|
- // return false;
|
|
|
- // }
|
|
|
-
|
|
|
- return true;
|
|
|
}
|