| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- // gfambrtumst.h :
- //
- #if !defined(AGD_GFAMBRTUMST_H__F97088DB_3E1B_4FC8_A313_476634890514__INCLUDED_)
- #define AGD_GFAMBRTUMST_H__F97088DB_3E1B_4FC8_A313_476634890514__INCLUDED_
- #include <gfautils.h>
- #include <gfambrtucom.h>
- #ifdef __cplusplus
- extern "C" {
- #endif // __cplusplus
- /////////////////////////////////////////////////////////////////////////////
- // mbrtumast.h - Declarations:
- typedef void *HMBRTUMST;
- /////////////////////////////////////////////////////////////////////////////
- // error codes
- #define GFA_MB_MST_ERROR_INVALID_SLAVE_ID 0x0001
- #define GFA_MB_MST_ERROR_INVALID_FUNCTION 0x0002
- #define GFA_MB_MST_ERROR_SLAVE_ERROR 0x0003
- #define GFA_MB_MST_ERROR_SLAVE_RESPONSE_TIMEOUT 0x0004
- #define GFA_MB_MST_ERROR_SLAVE_CHAR_TIMEOUT 0x0005
- #define GFA_MB_MST_ERROR_SLAVE_INVALID_CRC 0x0006
- #define GFA_MB_MST_ERROR_SLAVE_INVALID_DATA 0x0007
- #define GFA_MB_MST_ERROR_UNEXPECTED 0xFFFF
- /////////////////////////////////////////////////////////////////////////////
- typedef enum _GFA_MODBUS_RTU_MST_STATES
- {
- MB_RTU_MST_Void = -1,
- MB_RTU_MST_Idle,
- MB_RTU_MST_TxStart,
- MB_RTU_MST_TxWaitEnd,
- MB_RTU_MST_TxDone,
- MB_RTU_MST_WaitRxFifo,
- MB_RTU_MST_RxSlvID,
- MB_RTU_MST_RxFunc,
- MB_RTU_MST_RxData,
- MB_RTU_MST_RxError,
- MB_RTU_MST_RxCRC,
- MB_RTU_MST_RxFinalize,
- MB_RTU_MST_ReportError
- }GFA_MODBUS_RTU_MST_STATES;
- /////////////////////////////////////////////////////////////////////////////
- typedef void (*PFN_GFA_RAW_REQUEST_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, LPCMODBUS_RTU_ADU padu, size_t nCbData, void *pParam);
- typedef void (*PFN_GFA_READ_REGISTERS_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, const uint16_t *pRegs, size_t nRegCount);
- typedef void (*PFN_GFA_PRESET_SINGLE_REGISTER_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err);
- typedef void (*PFN_GFA_WRITE_REGISTERS_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint16_t nRegStart, uint16_t nRegsWritten);
- typedef void (*PFN_GFA_DIAGNOSIS_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint16_t nSubFunc, uint16_t nData);
- typedef void (*PFN_GFA_REPORT_SLAVE_ID_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, const void *pData, size_t nCbData);
- /////////////////////////////////////////////////////////////////////////////
- typedef void (*PFN_GFA_MASTER_STATE_CHANGED) (GFA_MODBUS_RTU_MST_STATES newState, GFA_MODBUS_RTU_MST_STATES oldState);
- typedef void (*PFN_GFA_MASTER_PRE_TRANSMIT) (uint32_t nTID, uint8_t nSlvID);
- typedef void (*PFN_GFA_MASTER_POST_TRANSMIT) (uint32_t nTID, uint8_t nSlvID);
- typedef void (*PFN_GFA_MASTER_RECEIVE_START) (uint32_t nTID);
- typedef void (*PFN_GFA_MASTER_RECEIVE_END) (uint32_t nTID);
- typedef struct _GFA_MODBUS_MASTER_APP_INTERFACE
- {
- PFN_GFA_MASTER_STATE_CHANGED pfnStateChanged;
- PFN_GFA_MASTER_PRE_TRANSMIT pfnPreTx;
- PFN_GFA_MASTER_POST_TRANSMIT pfnPostTx;
- PFN_GFA_MASTER_RECEIVE_START pfnRxStart;
- PFN_GFA_MASTER_RECEIVE_END pfnRxEnd;
- }GFA_MODBUS_MASTER_APP_INTERFACE, *LPGFA_MODBUS_MASTER_APP_INTERFACE;
- typedef const GFA_MODBUS_MASTER_APP_INTERFACE *LPCGFA_MODBUS_MASTER_APP_INTERFACE;
- /////////////////////////////////////////////////////////////////////////////
- typedef struct _GFA_MODBUS_RTU_MASTER_PARAMETERS
- {
- HFIFO hFifoRX;
- HFIFO hFifoTX;
- uint64_t nRxTimeoutUs;
- GFA_MODBUS_PROTOCOL_TIMEOUTS mpt;
- GFA_MODBUS_MASTER_APP_INTERFACE appItf;
- }GFA_MODBUS_RTU_MASTER_PARAMETERS, *LPGFA_MODBUS_RTU_MASTER_PARAMETERS;
- typedef const GFA_MODBUS_RTU_MASTER_PARAMETERS *LPCGFA_MODBUS_RTU_MASTER_PARAMETERS;
- /////////////////////////////////////////////////////////////////////////////
- HMBRTUMST GfaModbusRTUMstCreate(LPCGFA_MODBUS_RTU_MASTER_PARAMETERS pmap);
- void GfaModbusRTUMstRelease(HMBRTUMST hMbMst);
- bool GfaModbusRTUMstStateMachine(HMBRTUMST hMbMst);
- bool GfaModbusRTUMstSendRawRequest(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint8_t nFunc, const void *pData, size_t nCbData, size_t nCbDataExpected, PFN_GFA_RAW_REQUEST_COMPLETE pfnRawReqComplete, void *pParam);
- bool GfaModbusRTUMstReadHoldingRegisters(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint16_t nRegStart, uint16_t nRegCount, PFN_GFA_READ_REGISTERS_COMPLETE pfnReadRegsComplete);
- bool GfaModbusRTUMstReadInputRegisters(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint16_t nRegStart, uint16_t nRegCount, PFN_GFA_READ_REGISTERS_COMPLETE pfnReadRegsComplete);
- bool GfaModbusRTUMstWriteMultipleRegisters(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint16_t nRegStart, uint16_t nRegCount, const void *pRegData, PFN_GFA_WRITE_REGISTERS_COMPLETE pfnWriteRegsComplete);
- bool GfaModbusRTUMstPresetSingleRegister(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint16_t nRegAddr, uint16_t nRegVal, PFN_GFA_PRESET_SINGLE_REGISTER_COMPLETE pfnPresetRegComplete);
- bool GfaModbusRTUMstDiagnosis(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint16_t nSubFunc, uint16_t nData, PFN_GFA_DIAGNOSIS_COMPLETE pfnDiagComplete);
- bool GfaModbusRTUMstReportSlaveID(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, size_t nCbDataExpected, PFN_GFA_REPORT_SLAVE_ID_COMPLETE pfnRepSlvIDComplete);
- /////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////
- // Metronik support
- /*
- *
- * ACHTUNG:
- * Befindet sich der Sensors am Bus mit anderen Teilnehmern führt ein Pollen der Slaves mit einem Frame-Delay < 10 ms zu Timeout-Problemen des Sensors!
- *
- */
- #define GFA_MB_ILM_FUNC_READ_UV ((uint8_t)0x41)
- #define GFA_MB_ILM_FUNC_READ_TEMP ((uint8_t)0x42)
- #define GFA_MB_ILM_FUNC_UNLOCK ((uint8_t)0x43)
- #define GFA_MB_ILM_FUNC_NEW_ADDR ((uint8_t)0x44)
- #define GFA_MB_ILM_FUNC_READ_RANGE ((uint8_t)0x45)
- #define GFA_MB_ILM_FUNC_READ_SERIAL ((uint8_t)0x46)
- /////////////////////////////////////////////////////////////////////////////
- typedef void (*PFN_GFA_ILM_READ_UV_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint16_t nVal);
- typedef void (*PFN_GFA_ILM_READ_TEMP_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint8_t nVal);
- typedef void (*PFN_GFA_ILM_READ_UNLOCK_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint8_t nVal);
- typedef void (*PFN_GFA_ILM_NEW_ADDR_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint8_t nVal);
- typedef void (*PFN_GFA_ILM_READ_RANGE_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, uint16_t nVal);
- typedef void (*PFN_GFA_ILM_READ_SERIAL_COMPLETE) (uint32_t nTID, uint8_t nSlvID, uint16_t err, const uint8_t *pVal, size_t nCbVal);
- /////////////////////////////////////////////////////////////////////////////
- bool GfaModbusRTUMstILMReadUV(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_UV_COMPLETE pfnReadUvComplete);
- bool GfaModbusRTUMstILMReadTemp(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_TEMP_COMPLETE pfnReadTempComplete);
- bool GfaModbusRTUMstILMUnlock(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_UNLOCK_COMPLETE pfnUnlockComplete);
- bool GfaModbusRTUMstILMReadRange(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_RANGE_COMPLETE pfnReadRangeComplete);
- bool GfaModbusRTUMstILMReadSerial(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_SERIAL_COMPLETE pfnReadSerialComplete);
- /*
- * GfaModbusRTUMstILMNewAddr: Weist dem Sensor eine neue Slave-Adresse zu.
- * Achtung: Der Sensor antwortet bei Erfolg bereits mit der neuen Slave-Adresse im Antwort-Frame!!!
- * Der Master ruft im Anschluss die Completion-Funktion mit dem Fehlercode GFA_MB_MST_ERROR_INVALID_SLAVE_ID (1) auf!
- * Die neue Slave-Adresse wurde in diesem Fall aber erfolgreich im Slave gesetzt!
- *
- * Achtung: Der Sensor akzeptiert die Broadcast-Adresse 0 als Slave-ID!!!! Diese sollte niemals gesetzt werden!
- */
- bool GfaModbusRTUMstILMNewAddr(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint8_t nNewAddr, PFN_GFA_ILM_NEW_ADDR_COMPLETE pfnNewAddrComplete);
- /////////////////////////////////////////////////////////////////////////////
- #ifdef __cplusplus
- }
- #endif // __cplusplus
- #endif // !defined(AGD_GFAMBRTUMST_H__F97088DB_3E1B_4FC8_A313_476634890514__INCLUDED_)
|