/* * co_sdo.h - contains defines for sdo services * * Copyright (c) 2012-2023 emotas embedded communication GmbH * *------------------------------------------------------------------- * $Id: co_sdo.h 49615 2023-09-26 14:21:27Z boe $ * *------------------------------------------------------------------- * * * */ /** * \brief defines for sdo service * * \file co_sdo.h - contains defines for sdo service */ #ifndef CO_SDO_H #define CO_SDO_H 1 #include #define CO_SDO_DYN_BIT 0x40000000ul /* datatypes */ /* server service description */ typedef enum { CO_EVENT_SDO_SERVICE_PRE_CHECK, /* sdo starts - pre check only for writing */ CO_EVENT_SDO_SERVICE_CHECK, /* sdo starts - check if execution is possible */ CO_EVENT_SDO_SERVICE_EXEC /* sdo exec - execute indication functionality */ } CO_EVENT_SDO_SERVER_SERVICE_T; /**< sdo server parameter for indication function */ typedef struct { UNSIGNED8 sdoNr; /* sdo number */ UNSIGNED16 index; /* object index */ UNSIGNED8 subIndex; /* object subindex */ UNSIGNED32 size; /* data size for object */ UNSIGNED32 result; /* result of transfer */ } CO_EVENT_SDO_SERVER_PARA_T; /** \brief function pointer to SDO server event * \param execute - execute or test only * \param sdoNr - sdo number * \param index - object index * \param subindex - object subindex * * \return RET_T */ typedef RET_T (* CO_EVENT_SDO_SERVER_T)(CO_LINE_TYPE, BOOL_T, UNSIGNED8, UNSIGNED16, UNSIGNED8); /*lint !e960 customer specific parameter names */ /** \brief function pointer to SDO server write check event * \param execute - execute or test only * \param sdoNr - sdo number * \param index - object index * \param subindex - object subindex * \param pData - pointer to receive buffer * \param size - size of current transfer * * \return RET_T */ #ifdef CO_SRV_CHECK_WRITE_IND_SIZE typedef RET_T (* CO_EVENT_SDO_SERVER_CHECK_WRITE_T)(CO_LINE_TYPE, BOOL_T, UNSIGNED8, UNSIGNED16, UNSIGNED8, const UNSIGNED8 *, UNSIGNED32); /*lint !e960 customer specific parameter names */ #else /* CO_SRV_CHECK_WRITE_IND_SIZE */ typedef RET_T (* CO_EVENT_SDO_SERVER_CHECK_WRITE_T)(CO_LINE_TYPE, BOOL_T, UNSIGNED8, UNSIGNED16, UNSIGNED8, const UNSIGNED8 *); /*lint !e960 customer specific parameter names */ #endif /* CO_SRV_CHECK_WRITE_IND_SIZE */ /** \brief function pointer to SDO server write domain event * \param index - object index * \param subindex - object subindex * \param domainBufSize - actual size at domain buffer (=0 on abort) * \param transferSize - actual transfered size (=0 on abort) * * \return RET_T */ typedef RET_T (* CO_EVENT_SDO_SERVER_DOMAIN_WRITE_T)(CO_LINE_TYPE, UNSIGNED16, UNSIGNED8, UNSIGNED32, UNSIGNED32); /** \brief function pointer to SDO server read domain event * \param index - object index * \param subindex - object subindex * \param domainBufSize - actual size at domain buffer * \param transferSize - actual transfered size * * \return RET_T */ #ifdef CO_SDO_SPLIT_INDICATION typedef RET_T(*CO_EVENT_SDO_SERVER_DOMAIN_READ_T)(CO_LINE_TYPE, UNSIGNED16, UNSIGNED8, UNSIGNED32, UNSIGNED32); #else /* CO_SDO_SPLIT_INDICATION */ typedef void(*CO_EVENT_SDO_SERVER_DOMAIN_READ_T)(CO_LINE_TYPE, UNSIGNED16, UNSIGNED8, UNSIGNED32, UNSIGNED32); #endif /* CO_SDO_SPLIT_INDICATION */ /**< sdo client parameter for indication function */ typedef struct { UNSIGNED8 sdoNr; /* sdo number */ UNSIGNED16 index; /* object index */ UNSIGNED8 subIndex; /* object subindex */ UNSIGNED32 size; /* data size for object */ UNSIGNED32 result; /* result of transfer */ } CO_EVENT_SDO_CLIENT_PARA_T; /** \brief function pointer to SDO client read event * \param sdoNr - sdo number * \param index - object index * \param subindex - object subindex * \param size - size of received data (only valid for sdo read transfers) * \param result - result of transfer * */ typedef void (* CO_EVENT_SDO_CLIENT_READ_T)(CO_LINE_TYPE, UNSIGNED8, UNSIGNED16, UNSIGNED8, UNSIGNED32, UNSIGNED32); /*lint !e960 customer specific parameter names */ /** \brief function pointer to SDO client write event * \param sdoNr - sdo number * \param index - object index * \param subindex - object subindex * \param result - result of transfer * */ typedef void (* CO_EVENT_SDO_CLIENT_WRITE_T)(CO_LINE_TYPE, UNSIGNED8, UNSIGNED16, UNSIGNED8, UNSIGNED32); /*lint !e960 customer specific parameter names */ /** \brief function pointer to SDO client domain write event * \param sdoNr - sdo number * \param index - object index * \param subindex - object subindex * \param transfered - bytes transfered * \param pointer - pointer to application data * * \return RET_T */ typedef RET_T (*CO_EVENT_SDO_CLIENT_DOMAIN_WRITE_T)(CO_LINE_TYPE, UNSIGNED8, UNSIGNED16, UNSIGNED8, UNSIGNED32, void*); /*lint !e960 customer specific parameter names */ /* \brief function pointer to SDO queue indication function * \param pData - pointer to data * \param result - result of sdo transfer */ typedef void (* CO_SDO_QUEUE_IND_T)(CO_LINE_TYPE, void *pData, UNSIGNED32 result); /* function prototypes */ EXTERN_DECL RET_T coSdoServerInit(CO_LINE_DECL, UNSIGNED8 sdoServerNr); EXTERN_DECL RET_T coEventRegister_SDO_SERVER_READ(CO_EVENT_SDO_SERVER_T pFunction); EXTERN_DECL RET_T coEventRegister_SDO_SERVER_WRITE(CO_EVENT_SDO_SERVER_T pFunction); EXTERN_DECL RET_T coEventRegister_SDO_SERVER_CHECK_WRITE(CO_EVENT_SDO_SERVER_CHECK_WRITE_T pFunction); EXTERN_DECL RET_T coEventRegister_SDO_SERVER_DOMAIN_WRITE(CO_EVENT_SDO_SERVER_DOMAIN_WRITE_T pFunction); EXTERN_DECL RET_T coEventRegister_SDO_SERVER_DOMAIN_READ(CO_EVENT_SDO_SERVER_DOMAIN_READ_T pFunction); EXTERN_DECL RET_T coSdoClientInit(CO_LINE_DECL, UNSIGNED8 clientNr); EXTERN_DECL RET_T coSdoRead(CO_LINE_DECL, UNSIGNED8 sdoNr, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData, UNSIGNED32 dataLen, UNSIGNED16 numeric, UNSIGNED32 timeout); EXTERN_DECL RET_T coSdoWrite(CO_LINE_DECL, UNSIGNED8 sdoNr, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData, UNSIGNED32 dataLen, UNSIGNED16 numeric, UNSIGNED32 timeout); EXTERN_DECL RET_T coSdoDomainWrite(CO_LINE_DECL, UNSIGNED8 sdoNr, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData, UNSIGNED32 dataLen, UNSIGNED32 timeout, UNSIGNED32 nbrMsg, CO_EVENT_SDO_CLIENT_DOMAIN_WRITE_T pFunction, void* pFctPara); EXTERN_DECL RET_T coSdoQueueAddTransfer(CO_LINE_DECL, BOOL_T write, UNSIGNED8 sdoNr, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData, UNSIGNED32 dataLen, CO_SDO_QUEUE_IND_T pFct, void *pFctPara, UNSIGNED32 timeOut); EXTERN_DECL RET_T coSdoQueueAddStringTransfer(CO_LINE_DECL, BOOL_T write, UNSIGNED8 sdoNr, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData, UNSIGNED32 dataLen, CO_SDO_QUEUE_IND_T pFct, void *pFctPara, UNSIGNED32 timeOut); EXTERN_DECL RET_T coSdoQueueAddOdTransfer(CO_LINE_DECL, BOOL_T write, UNSIGNED8 sdoNr, UNSIGNED16 remoteIndex, UNSIGNED8 remoteSubIndex, UNSIGNED16 localIndex, UNSIGNED8 localSubIndex, CO_SDO_QUEUE_IND_T pFct, void *pFctPara, UNSIGNED32 timeOut); EXTERN_DECL UNSIGNED32 coSdoQueueGetActualSize(CO_LINE_DECL); #ifdef CO_SDO_BLOCK EXTERN_DECL RET_T coSdoReadSeg(CO_LINE_DECL, UNSIGNED8 sdoNr, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData, UNSIGNED32 dataLen, UNSIGNED16 numeric, UNSIGNED32 timeout); EXTERN_DECL RET_T coSdoWriteSeg(CO_LINE_DECL, UNSIGNED8 sdoNr, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData, UNSIGNED32 dataLen, UNSIGNED16 numeric, UNSIGNED32 timeout); #endif /* CO_SDO_BLOCK */ EXTERN_DECL RET_T coSdoClientAbortTransfer(CO_LINE_DECL, UNSIGNED8 sdoNr, RET_T errorReason); EXTERN_DECL RET_T coSdoServerAbortTransfer(CO_LINE_DECL, UNSIGNED8 sdoNr, RET_T errorReason); EXTERN_DECL RET_T coEventRegister_SDO_CLIENT_READ(CO_EVENT_SDO_CLIENT_READ_T pFunction); EXTERN_DECL RET_T coEventRegister_SDO_CLIENT_WRITE(CO_EVENT_SDO_CLIENT_WRITE_T pFunction); EXTERN_DECL RET_T coEventUnregister_SDO_CLIENT_READ(CO_EVENT_SDO_CLIENT_READ_T pFunction); EXTERN_DECL RET_T coEventUnregister_SDO_CLIENT_WRITE(CO_EVENT_SDO_CLIENT_WRITE_T pFunction); EXTERN_DECL RET_T coSdoServerReadIndCont(CO_LINE_DECL, UNSIGNED8 sdoNr, RET_T result); EXTERN_DECL RET_T coSdoServerWriteIndCont(CO_LINE_DECL, UNSIGNED8 sdoNr, RET_T result); EXTERN_DECL RET_T coSdoClientDomainWriteIndCont(CO_LINE_DECL, UNSIGNED8 sdoNr, RET_T result); EXTERN_DECL RET_T coSdoNetworkRead(CO_LINE_DECL, UNSIGNED8 sdoNr, UNSIGNED16 network, UNSIGNED8 node, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData, UNSIGNED32 dataLen, UNSIGNED16 numeric, UNSIGNED32 timeout); EXTERN_DECL RET_T coSdoNetworkWrite(CO_LINE_DECL, UNSIGNED8 sdoNr, UNSIGNED16 network, UNSIGNED8 node, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData, UNSIGNED32 dataLen, UNSIGNED16 numeric, UNSIGNED32 timeout); EXTERN_DECL RET_T coSdoQueueAddNetworkTransfer(CO_LINE_DECL, BOOL_T write, UNSIGNED8 sdoNr, UNSIGNED16 networkNr, UNSIGNED8 nodeNr, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData, UNSIGNED32 dataLen, CO_SDO_QUEUE_IND_T pFct, void *pFctPara, UNSIGNED32 timeOut); EXTERN_DECL RET_T coSdoGetAbortReason(UNSIGNED32 errorCode); EXTERN_DECL UNSIGNED32 coSdoGetAbortCode(RET_T errorReason); # ifdef CO_APPL_SDO_HANDLER EXTERN_DECL extern void applSdoHandler(CO_LINE_DECL, UNSIGNED16 sdoSpec, const CO_CAN_REC_MSG_T *pCanMsg); EXTERN_DECL RET_T coSdoServerApplAnswer(CO_LINE_DECL, UNSIGNED16 sdoSpec, CO_CAN_REC_MSG_T *pCanMsg); # endif /* CO_APPL_SDO_HANDLER */ #endif /* CO_SDO_H */