// gfambrtuslv.h : // #if !defined(AGD_MBRTUSLV_H__84F27BE0_71CA_4910_8631_B0EEA21DC84A__INCLUDED_) #define AGD_MBRTUSLV_H__84F27BE0_71CA_4910_8631_B0EEA21DC84A__INCLUDED_ #include #include #ifdef __cplusplus extern "C" { #endif // __cplusplus ///////////////////////////////////////////////////////////////////////////// // mbrtuslv.h - Declarations: typedef void *HMBRTUSLV; ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// // Modbus Slave typedef enum _GFA_MODBUS_RTU_SLV_STATES { MB_RTU_SLV_Void = -1, MB_RTU_SLV_Idle, MB_RTU_SLV_RxSlvID, MB_RTU_SLV_RxFunc, MB_RTU_SLV_RxDataInfo, MB_RTU_SLV_RxDataPayload, MB_RTU_SLV_RxCRC, MB_RTU_SLV_RxComplete, MB_RTU_SLV_TxStart, MB_RTU_SLV_TxWaitEnd }GFA_MODBUS_RTU_SLV_STATES; ///////////////////////////////////////////////////////////////////////////// typedef void (*PFN_GFA_SLAVE_PRE_READ_REGISTERS) (uint8_t, uint16_t, uint16_t); typedef void (*PFN_GFA_SLAVE_POST_READ_REGISTERS) (uint8_t, uint16_t, uint16_t); typedef void (*PFN_GFA_SLAVE_PRE_WRITE_REGISTERS) (uint8_t, uint16_t, uint16_t); typedef void (*PFN_POST_WRITE_REGISTERS) (uint8_t, uint16_t, uint16_t); typedef void (*PFN_GFA_SLAVE_PRE_TRANSMIT) (LPMODBUS_RTU_ADU); typedef void (*PFN_GFA_SLAVE_POST_TRANSMIT) (LPMODBUS_RTU_ADU); typedef uint16_t (*PFN_GFA_SLAVE_MAP_REG_ADDR) (uint16_t); typedef void (*PFN_GFA_SLAVE_STATE_CHANGED) (GFA_MODBUS_RTU_SLV_STATES newState, GFA_MODBUS_RTU_SLV_STATES oldState); ///////////////////////////////////////////////////////////////////////////// typedef struct _GFA_MODBUS_REGISTER { volatile uint16_t *pRegs; size_t nCountRegs; }GFA_MODBUS_REGISTER, *LPGFA_MODBUS_REGISTER; typedef const GFA_MODBUS_REGISTER *LPCGFA_MODBUS_REGISTER; ///////////////////////////////////////////////////////////////////////////// typedef struct _GFA_MODBUS_SLAVE_APP_INTERFACE { PFN_GFA_SLAVE_MAP_REG_ADDR pfnMapRegAddr; PFN_GFA_SLAVE_PRE_READ_REGISTERS pfnPreRead; PFN_GFA_SLAVE_POST_READ_REGISTERS pfnPostRead; PFN_GFA_SLAVE_PRE_WRITE_REGISTERS pfnPreWrite; PFN_POST_WRITE_REGISTERS pfnPostWrite; PFN_GFA_SLAVE_PRE_TRANSMIT pfnPreTransmit; PFN_GFA_SLAVE_POST_TRANSMIT pfnPostTransmit; PFN_GFA_SLAVE_STATE_CHANGED pfnStateChanged; }GFA_MODBUS_SLAVE_APP_INTERFACE, *LPGFA_MODBUS_SLAVE_APP_INTERFACE; typedef const GFA_MODBUS_SLAVE_APP_INTERFACE *LPCGFA_MODBUS_SLAVE_APP_INTERFACE; ///////////////////////////////////////////////////////////////////////////// typedef struct _GFA_MODBUS_RTU_SLAVE_PARAMETERS { uint8_t slaveID; HFIFO hFifoRX; HFIFO hFifoTX; GFA_MODBUS_REGISTER regMap; GFA_MODBUS_SLAVE_APP_INTERFACE appItf; }GFA_MODBUS_RTU_SLAVE_PARAMETERS, *LPGFA_MODBUS_RTU_SLAVE_PARAMETERS; typedef const GFA_MODBUS_RTU_SLAVE_PARAMETERS *LPCGFA_MODBUS_RTU_SLAVE_PARAMETERS; ///////////////////////////////////////////////////////////////////////////// HMBRTUSLV GfaModbusRTUSlvCreate(LPCGFA_MODBUS_RTU_SLAVE_PARAMETERS pslp); void GfaModbusRTUSlvRelease(HMBRTUSLV hMbSlv); bool GfaModbusRTUSlvStateMachine(HMBRTUSLV hMbSlv); bool GfaModbusRTUSlvSetID(HMBRTUSLV hMbSlv, uint8_t newID); ///////////////////////////////////////////////////////////////////////////// #ifdef __cplusplus } #endif // __cplusplus #endif // !defined(AGD_MBRTUSLV_H__84F27BE0_71CA_4910_8631_B0EEA21DC84A__INCLUDED_)