#pragma once #include #include "gobotrpc.hpp" #include "uart_ctrl_hardware.hpp" struct HubInfo { uint8_t slotNumbers; }; typedef void (*GobotRPC_CtrlInterface_Callback_Packet)(void * args, RPCPackage package); typedef void (*GobotRPC_CtrlInterface_Callback_PerformScan)(void * args, bool enable); typedef void (*GobotRPC_CtrlInterface_Callback_ReqSlotUpdate)(void * args, bool enable); typedef HubInfo (*GobotRPC_CtrlInterface_Callback_GetInfo)(void * args); void externalCallback_RX(void * args, char * data, size_t length); class GobotRPC_CtrlInterface { private: GobotRPC_CtrlInterface_Callback_Packet packetCallback; GobotRPC_CtrlInterface_Callback_PerformScan performScanCallback; GobotRPC_CtrlInterface_Callback_ReqSlotUpdate reqSlotUpdateCallback; GobotRPC_CtrlInterface_Callback_GetInfo getInfoCallback; void * packetCallbackArgs; void * performScanCallbackArgs; void * reqSlotUpdateCallbackArgs; void * getInfoCallbackArgs; GobotRPC_CtrlInterface_HardwareHandler * handler; protected: void onRX_Packet(char * data, size_t length); void onRX_PerformScan(char * data, size_t length); void onRX_ReqSlotUpdate(char * data, size_t length); void onRX_GetInfo(char * data, size_t length); public: GobotRPC_CtrlInterface(GobotRPC_CtrlInterface_HardwareHandler * handler); void onRX(char * data, size_t length); void pushPacket(RPCPackage package); void pushScanResulst(uint32_t addr, bool running); void pushPackageSlotUpdate(bool complete, bool inUse, uint32_t slot, uint32_t addr, uint32_t timestamp, uint32_t bits); void pushInfo(uint8_t slotNumbers); void registerCallback_Packet(GobotRPC_CtrlInterface_Callback_Packet callback, void * args); void registerCallback_PerformScan(GobotRPC_CtrlInterface_Callback_PerformScan callback, void * args); void registerCallback_ReqSlotUpdate(GobotRPC_CtrlInterface_Callback_ReqSlotUpdate callback, void * args); void registerCallback_GetInfo(GobotRPC_CtrlInterface_Callback_GetInfo callback, void * args); }; enum UART_CTRL_Command_ID { GOBOTRPC_CTRL_CMD_PACKET = 0x81, // Host <-> Hub GOBOTRPC_CTRL_CMD_PERFORM_SCAN = 0x82, // Host -> Hub GOBOTRPC_CTRL_CMD_SCAN_RESULT = 0x83, // Hub -> Host GOBOTRPC_CTRL_CMD_SLOT_UPDATE = 0x84, // Hub -> Host GOBOTRPC_CTRL_CMD_REQ_SLOT_UPDATE = 0x85, // Host -> Hub GOBOTRPC_CTRL_CMD_INFO = 0xff, // Host -> Hub, Hub -> Host };