155 lines
4.9 KiB
C
155 lines
4.9 KiB
C
/*
|
|
* 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 <co_datatype.h>
|
|
|
|
|
|
#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 */
|