Files
gobot/i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/include/uart_ctrl.hpp

58 lines
2.4 KiB
C++

#pragma once
#include <stdint.h>
#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
};