/* * co_srdo.h - contains defines for srdo services * * Copyright (c) 2015-2024 emotas embedded communication GmbH * *------------------------------------------------------------------- * $Id: co_srdo.h 54943 2024-08-07 06:33:18Z boe $ *------------------------------------------------------------------- * * * */ /** * \brief defines for srdo services * * \file co_srdo.h - contains defines for srdo services */ #ifndef CO_SRDO_H #define CO_SRDO_H 1 #include #define CO_SRDO_TYPE_NONE 0u #define CO_SRDO_TYPE_PRODUCER 1u #define CO_SRDO_TYPE_CONSUMER 2u #define CO_SRDO_VALID_SIGNATURE 0xa5u /* datatypes */ typedef enum { CO_SRDO_STATE_UNKNOWN, CO_SRDO_STATE_AWAIT_FIRST_MSG1, CO_SRDO_STATE_AWAIT_MSG1, CO_SRDO_STATE_AWAIT_MSG2, CO_SRDO_STATE_ERROR } CO_SRDO_STATE_T; typedef enum { CO_SRDO_DATA_UNKNOWN, CO_SRDO_DATA_VALID, CO_SRDO_DATA_INVALID } CO_SRDO_DATA_VALID_T; typedef enum { CO_SRDO_TIMER_TYPE_REFRESH, CO_SRDO_TIMER_TYPE_SRVT, CO_SRDO_TIMER_TYPE_SCT } CO_SRDO_TIMER_TYPE_T; struct srdo_timer { struct srdo_timer *pNext; /* pointer to next timer */ UNSIGNED32 actTicks; /* actual timer ticks */ CO_SRDO_TIMER_TYPE_T type; /* srdo timer type */ UNSIGNED16 srdoNr; /* srdo number */ }; typedef struct srdo_timer CO_SRDO_TIMER_T; typedef struct { UNSIGNED8 direction; /* information direction */ UNSIGNED16 refreshTime; /* refresh time */ UNSIGNED8 srvt; /* SRVT */ UNSIGNED8 transType; /* transmission type */ UNSIGNED32 cobId1; /* cob id 1 */ UNSIGNED32 cobId2; /* cob id 2 */ UNSIGNED8 mapCnt; /* number of actual mappings */ UNSIGNED8 maxMapCnt; /* number of maximum mappings */ UNSIGNED8 mapLen; /* len of mapped data in bytes (1..8) */ UNSIGNED16 signature; /* signature for the srdo */ const UNSIGNED32 *mapTable; /* pointer to mapping table */ CO_SRDO_STATE_T state; /* internal srdo state */ CO_SRDO_DATA_VALID_T dataValid; /* srdo data valid/not valid */ CO_SRDO_TIMER_T timerSct; /* SCT timer */ CO_SRDO_TIMER_T timerSrvt; /* SRVT timer */ } CO_SRDO_DATA_T; /* * defines for error reasons */ typedef enum { CO_SRDO_ERROR_WRONG_MSG = 0, /* wrong message received */ CO_SRDO_ERROR_DATA_MISMATCH, /* data doesnt match */ CO_SRDO_ERROR_TIMEOUT_SCT, /* timeout SCT */ CO_SRDO_ERROR_TIMEOUT_SRVT, /* timeout SRVT */ CO_SRDO_ERROR_WRONG_LEN /* wrong len received */ } CO_SRDO_ERROR_T; EXTERN_DECL RET_T coSrdoInit(CO_LINE_DECL, UNSIGNED16 srdoNr); EXTERN_DECL RET_T coSrdoTransmit(CO_LINE_DECL, UNSIGNED8 srdoNr); EXTERN_DECL RET_T genSrdoGetState(CO_LINE_DECL, UNSIGNED8 srdoNr); EXTERN_DECL RET_T genSrdoDataGet_u8(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pData); EXTERN_DECL RET_T genSrdoDataGet_u16(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED16 *pData); EXTERN_DECL RET_T genSrdoDataGet_u32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED32 *pData); EXTERN_DECL RET_T genSrdoDataGet_i8(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER8 *pData); EXTERN_DECL RET_T genSrdoDataGet_i16(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER16 *pData); EXTERN_DECL RET_T genSrdoDataGet_i32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER32 *pData); EXTERN_DECL RET_T genSrdoDataGet_r32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, REAL32 *pData); EXTERN_DECL RET_T genSrdoDataPut_u8(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 data); EXTERN_DECL RET_T genSrdoDataPut_u16(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED16 data); EXTERN_DECL RET_T genSrdoDataPut_u32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED32 data); EXTERN_DECL RET_T genSrdoDataPut_i8(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER8 data); EXTERN_DECL RET_T genSrdoDataPut_i16(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER16 data); EXTERN_DECL RET_T genSrdoDataPut_i32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER32 data); EXTERN_DECL RET_T genSrdoDataPut_r32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, REAL32 data); EXTERN_DECL void genSrdoSetDefaultValue(CO_LINE_DECL, UNSIGNED8 ownNodeId); EXTERN_DECL RET_T genSrdoCheckOperational(CO_LINE_DECL); EXTERN_DECL void genSrdoGoOperational(CO_LINE_DECL); EXTERN_DECL void genSrdoGoPreOperational(CO_LINE_DECL); EXTERN_DECL RET_T genSrdoTransmitMapping(CO_LINE_DECL, UNSIGNED16 srdoNr, UNSIGNED8 *pBufferNormal, UNSIGNED8 *pBufferInverted); EXTERN_DECL void genSrdoReceiveHandler(CO_LINE_DECL, UNSIGNED16 srdoNr, CO_CONST CO_CAN_REC_MSG_T *pRecMsg); EXTERN_DECL void genSrdoTimerInit(CO_LINE_DECL, UNSIGNED32 timerVal); EXTERN_DECL void genSrdoTimerIsr(void); EXTERN_DECL void genSrdoTimerCheck(CO_LINE_DECL); void srdoErrorIndication(CO_LINE_DECL, UNSIGNED16 srdoNr, CO_SRDO_ERROR_T reason); void srdoConsumerIndication(CO_LINE_DECL, UNSIGNED16 srdoNr); void srdoProducerIndication(CO_LINE_DECL, UNSIGNED16 srdoNr); #endif /* CO_SRDO_H */