| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdint.h>
- #include <stdbool.h>
- #include <limits.h>
- #include <gfambrtumst.h>
- /////////////////////////////////////////////////////////////////////////////
- static void _OnRawReadUvComplete(uint32_t nTID, uint8_t nSlvID, uint16_t err, LPCMODBUS_RTU_ADU padu, size_t nCbData, void *pParam)
- {
- PFN_GFA_ILM_READ_UV_COMPLETE pfnReadUvComplete = (PFN_GFA_ILM_READ_UV_COMPLETE)pParam;
- uint16_t nData = 0;
- if(err)
- {
- if(err == GFA_MB_MST_ERROR_SLAVE_ERROR && padu)
- err |= ((uint16_t)padu->pdu.b[0] << 8);
- }
- else
- {
- nData = GfaBufGetUnaligned_uint16(padu->pdu.b);
- }
- (*pfnReadUvComplete)(nTID, nSlvID, err, nData);
- }
- /////////////////////////////////////////////////////////////////////////////
- static void _OnRawReadTempComplete(uint32_t nTID, uint8_t nSlvID, uint16_t err, LPCMODBUS_RTU_ADU padu, size_t nCbData, void *pParam)
- {
- PFN_GFA_ILM_READ_TEMP_COMPLETE pfnReadTempComplete = (PFN_GFA_ILM_READ_TEMP_COMPLETE)pParam;
- uint8_t nData = 0;
- if(err)
- {
- if(err == GFA_MB_MST_ERROR_SLAVE_ERROR && padu)
- err |= ((uint16_t)padu->pdu.b[0] << 8);
- }
- else
- {
- nData = padu->pdu.b[0];
- }
- (*pfnReadTempComplete)(nTID, nSlvID, err, nData);
- }
- /////////////////////////////////////////////////////////////////////////////
- static void _OnRawUnlockComplete(uint32_t nTID, uint8_t nSlvID, uint16_t err, LPCMODBUS_RTU_ADU padu, size_t nCbData, void *pParam)
- {
- PFN_GFA_ILM_READ_UNLOCK_COMPLETE pfnUnlockComplete = (PFN_GFA_ILM_READ_UNLOCK_COMPLETE)pParam;
- uint8_t nData = 0;
- if(err)
- {
- if(err == GFA_MB_MST_ERROR_SLAVE_ERROR && padu)
- err |= ((uint16_t)padu->pdu.b[0] << 8);
- }
- else
- {
- nData = padu->pdu.b[0];
- }
- (*pfnUnlockComplete)(nTID, nSlvID, err, nData);
- }
- /////////////////////////////////////////////////////////////////////////////
- static void _OnRawNewAddrComplete(uint32_t nTID, uint8_t nSlvID, uint16_t err, LPCMODBUS_RTU_ADU padu, size_t nCbData, void *pParam)
- {
- PFN_GFA_ILM_NEW_ADDR_COMPLETE pfnNewAddrComplete = (PFN_GFA_ILM_NEW_ADDR_COMPLETE)pParam;
- uint8_t nData = 0;
- if(err)
- {
- if(err == GFA_MB_MST_ERROR_SLAVE_ERROR && padu)
- err |= ((uint16_t)padu->pdu.b[0] << 8);
- }
- else
- {
- nData = padu->pdu.b[0];
- }
- (*pfnNewAddrComplete)(nTID, nSlvID, err, nData);
- }
- /////////////////////////////////////////////////////////////////////////////
- static void _OnRawReadRangeComplete(uint32_t nTID, uint8_t nSlvID, uint16_t err, LPCMODBUS_RTU_ADU padu, size_t nCbData, void *pParam)
- {
- PFN_GFA_ILM_READ_RANGE_COMPLETE pfnReadRangeComplete = (PFN_GFA_ILM_READ_RANGE_COMPLETE)pParam;
- uint16_t nData = 0;
- if(err)
- {
- if(err == GFA_MB_MST_ERROR_SLAVE_ERROR && padu)
- err |= ((uint16_t)padu->pdu.b[0] << 8);
- }
- else
- {
- nData = GfaBufGetUnaligned_uint16(padu->pdu.b);
- }
- (*pfnReadRangeComplete)(nTID, nSlvID, err, nData);
- }
- /////////////////////////////////////////////////////////////////////////////
- static void _OnRawReadSerialComplete(uint32_t nTID, uint8_t nSlvID, uint16_t err, LPCMODBUS_RTU_ADU padu, size_t nCbData, void *pParam)
- {
- PFN_GFA_ILM_READ_SERIAL_COMPLETE pfnReadSerialComplete = (PFN_GFA_ILM_READ_SERIAL_COMPLETE)pParam;
- const uint8_t *pData = NULL;
- size_t nData = 0;
- if(err)
- {
- if(err == GFA_MB_MST_ERROR_SLAVE_ERROR && padu)
- err |= ((uint16_t)padu->pdu.b[0] << 8);
- }
- else
- {
- pData = padu->pdu.b;
- nData = nCbData;
- }
- (*pfnReadSerialComplete)(nTID, nSlvID, err, pData, nData);
- }
- /////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////
- bool GfaModbusRTUMstILMReadUV(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_UV_COMPLETE pfnReadUvComplete)
- {
- if(!pfnReadUvComplete)
- return false;
- return GfaModbusRTUMstSendRawRequest(hMbMst, nTID, nSlvID, GFA_MB_ILM_FUNC_READ_UV, NULL, 0, sizeof(uint16_t), _OnRawReadUvComplete, pfnReadUvComplete);
- }
- /////////////////////////////////////////////////////////////////////////////
- bool GfaModbusRTUMstILMReadTemp(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_TEMP_COMPLETE pfnReadTempComplete)
- {
- if(!pfnReadTempComplete)
- return false;
- return GfaModbusRTUMstSendRawRequest(hMbMst, nTID, nSlvID, GFA_MB_ILM_FUNC_READ_TEMP, NULL, 0, sizeof(uint8_t), _OnRawReadTempComplete, pfnReadTempComplete);
- }
- /////////////////////////////////////////////////////////////////////////////
- bool GfaModbusRTUMstILMUnlock(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_UNLOCK_COMPLETE pfnUnlockComplete)
- {
- uint8_t buf[] = {0x0C, 0x31};
- if(!pfnUnlockComplete)
- return false;
- return GfaModbusRTUMstSendRawRequest(hMbMst, nTID, nSlvID, GFA_MB_ILM_FUNC_UNLOCK, buf, sizeof(buf), sizeof(uint8_t), _OnRawUnlockComplete, pfnUnlockComplete);
- }
- /////////////////////////////////////////////////////////////////////////////
- bool GfaModbusRTUMstILMNewAddr(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, uint8_t nNewAddr, PFN_GFA_ILM_NEW_ADDR_COMPLETE pfnNewAddrComplete)
- {
- if(nNewAddr == MODBUS_BROADCAST_ADDRESS || nNewAddr > MODBUS_MAX_SLAVE_ID)
- return false;
- if(!pfnNewAddrComplete)
- return false;
- return GfaModbusRTUMstSendRawRequest(hMbMst, nTID, nSlvID, GFA_MB_ILM_FUNC_NEW_ADDR, &nNewAddr, sizeof(nNewAddr), sizeof(uint8_t), _OnRawNewAddrComplete, pfnNewAddrComplete);
- }
- /////////////////////////////////////////////////////////////////////////////
- bool GfaModbusRTUMstILMReadRange(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_RANGE_COMPLETE pfnReadRangeComplete)
- {
- if(!pfnReadRangeComplete)
- return false;
- return GfaModbusRTUMstSendRawRequest(hMbMst, nTID, nSlvID, GFA_MB_ILM_FUNC_READ_RANGE, NULL, 0, sizeof(uint16_t), _OnRawReadRangeComplete, pfnReadRangeComplete);
- }
- /////////////////////////////////////////////////////////////////////////////
- bool GfaModbusRTUMstILMReadSerial(HMBRTUMST hMbMst, uint32_t nTID, uint8_t nSlvID, PFN_GFA_ILM_READ_SERIAL_COMPLETE pfnReadSerialComplete)
- {
- if(!pfnReadSerialComplete)
- return false;
- return GfaModbusRTUMstSendRawRequest(hMbMst, nTID, nSlvID, GFA_MB_ILM_FUNC_READ_SERIAL, NULL, 0, 5, _OnRawReadSerialComplete, pfnReadSerialComplete);
- }
|