/* * This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany. * The corresponding license agreement applies. This hint shall not be removed. */ /** \addtogroup F2838xCMEtherCATSlave F2838x CM EtherCAT Slave @{ */ /** \file F2838x CM EtherCAT Slave.c \brief Implementation Created with SSC Tool application parser 1.6.4.0 \version 0.0.0.1 */ /*----------------------------------------------------------------------------------------- ------ ------ Includes ------ -----------------------------------------------------------------------------------------*/ #include "ecat_def.h" #include "applInterface.h" #define _F2838X_CM_ETHER_CAT_SLAVE_ 1 #include "F2838x CM EtherCAT Slave.h" #undef _F2838X_CM_ETHER_CAT_SLAVE_ /*-------------------------------------------------------------------------------------- ------ ------ local types and defines ------ --------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------- ------ ------ local variables and constants ------ -----------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------- ------ ------ application specific functions ------ -----------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------- ------ ------ generic functions ------ -----------------------------------------------------------------------------------------*/ ///////////////////////////////////////////////////////////////////////////////////////// /** \brief The function is called when an error state was acknowledged by the master *//////////////////////////////////////////////////////////////////////////////////////// void APPL_AckErrorInd(UINT16 stateTrans) { } ///////////////////////////////////////////////////////////////////////////////////////// /** \return AL Status Code (see ecatslv.h ALSTATUSCODE_....) \brief The function is called in the state transition from INIT to PREOP when all general settings were checked to start the mailbox handler. This function informs the application about the state transition, the application can refuse the state transition when returning an AL Status error code. The return code NOERROR_INWORK can be used, if the application cannot confirm the state transition immediately, in that case this function will be called cyclically until a value unequal NOERROR_INWORK is returned *//////////////////////////////////////////////////////////////////////////////////////// UINT16 APPL_StartMailboxHandler(void) { return ALSTATUSCODE_NOERROR; } ///////////////////////////////////////////////////////////////////////////////////////// /** \return 0, NOERROR_INWORK \brief The function is called in the state transition from PREEOP to INIT to stop the mailbox handler. This functions informs the application about the state transition, the application cannot refuse the state transition. *//////////////////////////////////////////////////////////////////////////////////////// UINT16 APPL_StopMailboxHandler(void) { return ALSTATUSCODE_NOERROR; } #if EXPLICIT_DEVICE_ID ///////////////////////////////////////////////////////////////////////////////////////// /** \return The Explicit Device ID of the EtherCAT slave \brief Read the Explicit Device ID (from an external ID switch) *//////////////////////////////////////////////////////////////////////////////////////// UINT16 APPL_GetDeviceID() { #if _WIN32 #pragma message ("Warning: Implement explicit Device ID latching") #else #warning "Implement explicit Device ID latching" #endif /* Explicit Device 5 is expected by Explicit Device ID conformance tests*/ return 0x5; } #endif ///////////////////////////////////////////////////////////////////////////////////////// /** \param index index of the requested object. \param subindex subindex of the requested object. \param objSize size of the requested object data, calculated with OBJ_GetObjectLength \param pData Pointer to the buffer where the data can be copied to \param bCompleteAccess Indicates if a complete read of all subindices of the object shall be done or not \return result of the read operation (0 (success) or an abort code (ABORTIDX_.... defined in sdosrv.h)) *//////////////////////////////////////////////////////////////////////////////////////// UINT8 mySdoRead(UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM * pData, UINT8 bCompleteAccess) { #if _WIN32 #pragma message ("Warning: Implement CoE read callback") #else #warning "Implement CoE read callback" #endif return 0; } ///////////////////////////////////////////////////////////////////////////////////////// /** \param index index of the requested object. \param subindex subindex of the requested object. \param objSize size of the requested object data, calculated with OBJ_GetObjectLength \param pData Pointer to the buffer where the data can be copied to \param bCompleteAccess Indicates if a complete read of all subindices of the object shall be done or not \return result of the read operation (0 (success) or an abort code (ABORTIDX_.... defined in sdosrv.h)) *//////////////////////////////////////////////////////////////////////////////////////// UINT8 mySdoWrite(UINT16 index, UINT8 subindex, UINT32 dataSize, UINT16 MBXMEM * pData, UINT8 bCompleteAccess) { #if _WIN32 #pragma message ("Warning: Implement CoE write callback") #else #warning "Implement CoE write callback" #endif return 0; } #if USE_DEFAULT_MAIN ///////////////////////////////////////////////////////////////////////////////////////// /** \brief This is the main function *//////////////////////////////////////////////////////////////////////////////////////// #if _PIC24 && EL9800_HW int main(void) #elif _WIN32 int main(int argc, char* argv[]) #else void main(void) #endif { /* initialize the Hardware and the EtherCAT Slave Controller */ #if FC1100_HW #if _WIN32 u16FcInstance = 0; if (argc > 1) { u16FcInstance = atoi(argv[1]); } #endif if(HW_Init()) { HW_Release(); return; } #else HW_Init(); #endif MainInit(); bRunApplication = TRUE; do { MainLoop(); } while (bRunApplication == TRUE); HW_Release(); #if _PIC24 return 0; #endif } #endif //#if USE_DEFAULT_MAIN /** @} */