Build RPC Parsers

This commit is contained in:
AlexanderHD27
2024-12-30 00:46:36 +01:00
parent ec2225aa4e
commit 877040362c
13 changed files with 1162 additions and 22 deletions

View File

@@ -0,0 +1,64 @@
#pragma once
#include <stdint.h>
#include <strings.h>
#include "protocol.hpp"
#define MAX_PAGE_SIZES 4*7
enum FrameSubmitionResult {
PENDING,
COMPLEATE,
ERROR_INVALID_RPC_TYPE,
ERROR_INVALID_RPC_NUMBER,
ERROR_NO_EMPTY_OR_FITTING_SLOT,
};
struct RPC_RX_PackageSlot {
char buffer[MAX_PAGE_SIZES];
bool is_complete;
bool is_in_use;
uint32_t sender_address;
enum RPCNumber rpcNum;
enum RPCType type;
uint32_t used_bit_masked;
uint32_t timestamp;
};
struct RPCPackage {
char buffer[MAX_PAGE_SIZES];
size_t length;
uint32_t addr;
RPCNumber rpcNum;
RPCType type;
};
#define NUM_SLOTS 8
class GobotRPCParser {
private:
RPC_RX_PackageSlot buffer[NUM_SLOTS];
uint32_t masked [NUM_SLOTS];
uint32_t address_mask;
size_t finishedScanIndex;
void find_fitting_slot(RPCHeader header, uint32_t addr, int * fitting_slot, int * empty_slot);
static void insertFrameInPackageSlot(RPC_RX_PackageSlot * package, char * data, size_t segment, size_t length);
void freePackageSlot(size_t index);
public:
GobotRPCParser();
void print_out_slots();
enum FrameSubmitionResult submit_frame(char * data, size_t length, uint32_t addr, uint32_t timestamp);
int getFinishedIndexPackages();
void retrivePackage(RPCPackage * dest, int index);
};
char * mapFrameSubmitionResult2String(FrameSubmitionResult res);
FrameSubmitionResult getPackageStatus(RPC_RX_PackageSlot * package);