From d494c7cdb5ea0c7aeaeb1fb7fb624d2d322841b5 Mon Sep 17 00:00:00 2001 From: Rodrigo Alfonso Date: Thu, 1 Feb 2024 01:50:53 -0300 Subject: [PATCH] Adding getChildrenData parser method --- lib/LinkWirelessOpenSDK.hpp | 40 +++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/lib/LinkWirelessOpenSDK.hpp b/lib/LinkWirelessOpenSDK.hpp index 6a25a89..2dd0031 100644 --- a/lib/LinkWirelessOpenSDK.hpp +++ b/lib/LinkWirelessOpenSDK.hpp @@ -45,6 +45,7 @@ class LinkWirelessOpenSDK { u32 dataSize = 0; u32 totalByteCount = 0; }; + // TODO: SlotState enum struct ServerSDKHeader { unsigned int payloadSize : 7; @@ -94,12 +95,39 @@ class LinkWirelessOpenSDK { ClientResponse responses[4]; }; - // ChildrenData getChildrenData(LinkRawWireless::ReceiveDataResponse response) - // { - // for (u32 i = 1; i < LINK_RAW_WIRELESS_MAX_PLAYERS) { - // u32 packets = 0; - // } - // } + ChildrenData getChildrenData(LinkRawWireless::ReceiveDataResponse response) { + u8* buffer = (u8*)response.data; + u32 bufferSize = response.dataSize * 4; + + u32 cursor = 0; + ChildrenData childrenData; + + for (u32 i = 1; i < LINK_RAW_WIRELESS_MAX_PLAYERS) { + ClientResponse* clientResponse = childrenData.responses[i - 1]; + u32 remainingBytes = response.sentBytes[i]; + + while (remainingBytes >= LINK_WIRELESS_OPEN_SDK_HEADER_SIZE_CLIENT) { + ClientPacket* packet = + &clientResponse->packets[clientResponse->packetsSize]; + + packet->header = parseClientHeader(*((u16*)(buffer + cursor))); + cursor += LINK_WIRELESS_OPEN_SDK_HEADER_SIZE_CLIENT; + remainingBytes -= LINK_WIRELESS_OPEN_SDK_HEADER_SIZE_CLIENT; + + if (header.payloadSize > 0 && + header.payloadSize <= LINK_WIRELESS_OPEN_SDK_MAX_PAYLOAD_CLIENT && + remainingBytes >= packet->header.payloadSize) { + for (u32 j = 0; j < header.payloadSize; j++) + packet->payload[j] = buffer[cursor++]; + remainingBytes -= header.payloadSize; + } + + clientResponse->packetsSize++; + } + } + + return childrenData; + } SendBuffer createServerBuffer(const u8* fullPayload, u32 fullPayloadSize,