/* * co_odaccess.h - contains defines for od access * * Copyright (c) 2012-2023 emotas embedded communication GmbH * *------------------------------------------------------------------- * $Id: co_odaccess.h 54947 2024-08-07 06:34:24Z boe $ * *------------------------------------------------------------------- * * * */ /** * \brief defines for OD access * * \file co_odaccess.h - contains defines for object dictionary access */ #ifndef OD_ACCESS_H #define OD_ACCESS_H 1 #include /* datatypes */ /** * function call to lock object dictionary */ #ifndef CO_OS_LOCK_OD # define CO_OS_LOCK_OD #endif /* CO_OS_LOCK_OD */ /** * function call to unlock object dictionary */ #ifndef CO_OS_UNLOCK_OD # define CO_OS_UNLOCK_OD #endif /* CO_OS_LOCK_OD */ /** * object attributes */ #define CO_ATTR_READ 0x0001u /**< object readable */ #define CO_ATTR_WRITE 0x0002u /**< object writeable */ #define CO_ATTR_NUM 0x0004u /**< object is numeric */ #define CO_ATTR_MAP 0x0008u /**< object can be mapped into a PDO */ #define CO_ATTR_MAP_TR 0x0010u /**< object can be mapped into a transmit PDO */ #define CO_ATTR_MAP_REC 0x0020u /**< object can be mapped into a receive PDO */ #define CO_ATTR_DEFVAL 0x0040u /**< object has a default value */ #define CO_ATTR_LIMIT 0x0080u /**< object has limits */ #define CO_ATTR_DYNOD 0x0100u /**< object is a dynamic created object */ #define CO_ATTR_STORE 0x0200u /**< object is supposed to be stored */ #define CO_ATTR_COMPACT 0x0400u /**< object is compact array */ #define CO_ATTR_STD 0x0800u /**< object is classical CANopen only */ #define CO_ATTR_FD 0x1000u /**< object is CANopen FD only */ /** * Object type */ typedef enum { CO_ODTYPE_VAR, /**< variable */ CO_ODTYPE_ARRAY, /**< array */ CO_ODTYPE_STRUCT /**< structure */ } CO_ODTYPE_T; /** * object datatypes */ typedef enum { CO_DTYPE_BOOL_VAR, CO_DTYPE_BOOL_CONST, CO_DTYPE_BOOL_PTR, CO_DTYPE_U8_VAR, CO_DTYPE_U8_CONST, CO_DTYPE_U8_PTR, CO_DTYPE_U16_VAR, CO_DTYPE_U16_CONST, CO_DTYPE_U16_PTR, CO_DTYPE_U24_VAR, CO_DTYPE_U24_CONST, CO_DTYPE_U24_PTR, CO_DTYPE_U32_VAR, CO_DTYPE_U32_CONST, CO_DTYPE_U32_PTR, CO_DTYPE_U40_VAR, CO_DTYPE_U40_CONST, CO_DTYPE_U40_PTR, CO_DTYPE_U48_VAR, CO_DTYPE_U48_CONST, CO_DTYPE_U48_PTR, CO_DTYPE_U64_VAR, CO_DTYPE_U64_CONST, CO_DTYPE_U64_PTR, CO_DTYPE_I8_VAR, CO_DTYPE_I8_CONST, CO_DTYPE_I8_PTR, CO_DTYPE_I16_VAR, CO_DTYPE_I16_CONST, CO_DTYPE_I16_PTR, CO_DTYPE_I32_VAR, CO_DTYPE_I32_CONST, CO_DTYPE_I32_PTR, CO_DTYPE_VS_PTR, CO_DTYPE_VS_CONST, CO_DTYPE_OS_PTR, CO_DTYPE_DOMAIN, CO_DTYPE_U8_SDO_SERVER, CO_DTYPE_U32_SDO_SERVER, CO_DTYPE_U8_SDO_CLIENT, CO_DTYPE_U32_SDO_CLIENT, CO_DTYPE_U8_TPDO, CO_DTYPE_U16_TPDO, CO_DTYPE_U32_TPDO, CO_DTYPE_U8_RPDO, CO_DTYPE_U16_RPDO, CO_DTYPE_U32_RPDO, CO_DTYPE_U8_TMAP, CO_DTYPE_U32_TMAP, CO_DTYPE_U8_RMAP, CO_DTYPE_U32_RMAP, CO_DTYPE_U8_ERRCTRL,CO_DTYPE_U16_ERRCTRL, CO_DTYPE_U32_ERRCTRL, CO_DTYPE_U8_SYNC, CO_DTYPE_U32_SYNC, CO_DTYPE_U8_EMCY, CO_DTYPE_U16_EMCY, CO_DTYPE_U32_EMCY, CO_DTYPE_U16_SRD, CO_DTYPE_U32_SRD, CO_DTYPE_U8_NMT, CO_DTYPE_U16_NMT, CO_DTYPE_U32_NMT, CO_DTYPE_U16_FLYMA, CO_DTYPE_U8_NETWORK, CO_DTYPE_U16_NETWORK, CO_DTYPE_U32_NETWORK, CO_DTYPE_U8_SRDO, CO_DTYPE_U16_SRDO, CO_DTYPE_U32_SRDO, CO_DTYPE_I8_SRDO, CO_DTYPE_I16_SRDO, CO_DTYPE_I32_SRDO, CO_DTYPE_R32_SRDO, CO_DTYPE_U32_TIME, CO_DTYPE_U32_STORE, CO_DTYPE_R32_VAR, CO_DTYPE_R32_CONST, CO_DTYPE_R32_PTR, CO_DTYPE_U8_GFC } CO_DATA_TYPE_T; /** \brief function pointer to object changed function * \param index - object index * \param subindex - object subindex * * \return RET_T */ typedef RET_T (* CO_EVENT_OBJECT_CHANGED_FCT_T)(CO_LINE_TYPE, UNSIGNED16, UNSIGNED8); /*lint !e960 customer specific parameter names */ /** * object description */ typedef struct { UNSIGNED8 subIndex; /**< subindex */ CO_DATA_TYPE_T dType; /**< datatype and table (var, const, ptr) */ UNSIGNED16 tableIdx; /**< index at var table (descibed by DATA_TYPE_T typ) */ UNSIGNED16 attr; /**< object attributes like e.g. acccess rights */ UNSIGNED16 defValIdx; /**< index at const table for default value */ #ifdef CO_CONFIG_LIMIT_CHECK UNSIGNED16 limitMinIdx; /**< index at const table for min limit val */ UNSIGNED16 limitMaxIdx; /**< index at const table for max limit val */ #endif /* CO_CONFIG_LIMIT_CHECK */ } CO_NV_STORAGE CO_OBJECT_DESC_T; /** * object dictionary */ typedef struct { UNSIGNED16 index; /**< object index */ UNSIGNED8 numberOfSubs; /**< number of subindex */ UNSIGNED8 highestSub; /**< highest used subindex */ CO_ODTYPE_T odType; /**< variable, array, struct */ UNSIGNED16 odDescIdx; /**< index in object_description table */ } CO_NV_STORAGE CO_OD_ASSIGN_T; /* data variables from OD */ typedef struct { CO_CONST UNSIGNED8 *odConst_u8; CO_CONST UNSIGNED16 *odConst_u16; CO_CONST UNSIGNED32 *odConst_u32; CO_CONST REAL32 *odConst_r32; #ifdef CO_EXTENDED_DATA_TYPES CO_CONST UNSIGNED24 *odConst_u24; CO_CONST UNSIGNED40 *odConst_u40; CO_CONST UNSIGNED48 *odConst_u48; CO_CONST UNSIGNED64 *odConst_u64; #endif /* CO_EXTENDED_DATA_TYPES */ UNSIGNED8 *odVar_u8; UNSIGNED16 *odVar_u16; UNSIGNED32 *odVar_u32; REAL32 *odVar_r32; #ifdef CO_EXTENDED_DATA_TYPES UNSIGNED24 *odVar_u24; UNSIGNED40 *odVar_u40; UNSIGNED48 *odVar_u48; UNSIGNED64 *odVar_u64; #endif /* CO_EXTENDED_DATA_TYPES */ CO_CONST INTEGER8 *odConst_i8; CO_CONST INTEGER16 *odConst_i16; CO_CONST INTEGER32 *odConst_i32; INTEGER8 *odVar_i8; INTEGER16 *odVar_i16; INTEGER32 *odVar_i32; UNSIGNED8 * CO_CONST *odPtr_u8; UNSIGNED16 * CO_CONST *odPtr_u16; UNSIGNED32 * CO_CONST *odPtr_u32; #ifdef CO_EXTENDED_DATA_TYPES UNSIGNED24 * CO_CONST *odPtr_u24; UNSIGNED40 * CO_CONST *odPtr_u40; UNSIGNED48 * CO_CONST *odPtr_u48; UNSIGNED64 * CO_CONST *odPtr_u64; #endif /* CO_EXTENDED_DATA_TYPES */ INTEGER8 * CO_CONST *odPtr_i8; INTEGER16 * CO_CONST *odPtr_i16; INTEGER32 * CO_CONST *odPtr_i32; REAL32 * CO_CONST *odPtr_r32; CO_CONST VIS_STRING *odConstVisString; CO_CONST UNSIGNED32 *odConstVisStringLen; VIS_STRING *odVisString; UNSIGNED32 *odVisStringLen; UNSIGNED32 *odVisStringActLen; OCTET_STRING **odOctetString; UNSIGNED32 *odOctetStringLen; UNSIGNED32 *odOctetStringActLen; CO_DOMAIN_PTR *domainPtr; UNSIGNED32 *domainLen; UNSIGNED32 *domainActLen; } CO_NV_STORAGE CO_OD_DATA_VARIABLES_T; /* function prototypes */ void coOdInitOdPtr(CO_LINE_DECL, const CO_OD_ASSIGN_T *pOdAssign, UNSIGNED16 odCnt, const CO_OBJECT_DESC_T *pObjdesc, UNSIGNED16 descCnt, CO_EVENT_OBJECT_CHANGED_FCT_T *pEventPtr, const CO_OD_DATA_VARIABLES_T *pOdVarPointers ); EXTERN_DECL RET_T coOdGetObj_u32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED32 *pObj); EXTERN_DECL RET_T coOdGetObj_u16(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED16 *pObj); EXTERN_DECL RET_T coOdGetObj_u8(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pObj); EXTERN_DECL RET_T coOdGetObj_i32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER32 *pObj); EXTERN_DECL RET_T coOdGetObj_i16(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER16 *pObj); EXTERN_DECL RET_T coOdGetObj_i8(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER8 *pObj); EXTERN_DECL RET_T coOdGetObj_r32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, REAL32 *pObj); #ifdef CO_EXTENDED_DATA_TYPES EXTERN_DECL RET_T coOdGetObj_u24(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED24 *pObj); EXTERN_DECL RET_T coOdGetObj_u40(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED40 *pObj); EXTERN_DECL RET_T coOdGetObj_u48(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED48 *pObj); EXTERN_DECL RET_T coOdGetObj_u64(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED64 *pObj); #endif /* CO_EXTENDED_DATA_TYPES */ EXTERN_DECL RET_T coOdPutObj_u32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED32 newVal); EXTERN_DECL RET_T coOdPutObj_u16(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED16 newVal); EXTERN_DECL RET_T coOdPutObj_u8(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 newVal); EXTERN_DECL RET_T coOdPutObj_i32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER32 newVal); EXTERN_DECL RET_T coOdPutObj_i16(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER16 newVal); EXTERN_DECL RET_T coOdPutObj_i8(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, INTEGER8 newVal); EXTERN_DECL RET_T coOdPutObj_r32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, REAL32 newVal); #ifdef CO_EXTENDED_DATA_TYPES EXTERN_DECL RET_T coOdPutObj_u24(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED24 newVal); EXTERN_DECL RET_T coOdPutObj_u40(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED40 newVal); EXTERN_DECL RET_T coOdPutObj_u48(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED48 newVal); EXTERN_DECL RET_T coOdPutObj_u64(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED64 newVal); #endif /* CO_EXTENDED_DATA_TYPES */ EXTERN_DECL void *coOdGetObjAddr(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex); EXTERN_DECL CO_CONST void *coOdGetObjAddrR(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex); EXTERN_DECL RET_T coOdGetDefaultVal_r32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, REAL32 *pDefVal); EXTERN_DECL RET_T coOdGetDefaultVal_u32(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED32 *pDefVal); EXTERN_DECL RET_T coOdGetDefaultVal_u16(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED16 *pDefVal); EXTERN_DECL RET_T coOdGetDefaultVal_u8(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED8 *pDefVal); EXTERN_DECL UNSIGNED16 coOdGetObjAttribute(CO_CONST CO_OBJECT_DESC_T *pObjDesc); EXTERN_DECL RET_T coOdGetObjDescPtr(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, CO_CONST CO_OBJECT_DESC_T ** pDescPtr); EXTERN_DECL UNSIGNED32 coOdGetObjSize(CO_CONST CO_OBJECT_DESC_T *pDesc); EXTERN_DECL UNSIGNED32 coOdGetObjMaxSize(CO_CONST CO_OBJECT_DESC_T *pDesc); EXTERN_DECL RET_T coOdSetObjSize(CO_CONST CO_OBJECT_DESC_T *pDesc, UNSIGNED32 size); EXTERN_DECL RET_T coOdSetCobid(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, UNSIGNED32 newCobId); EXTERN_DECL RET_T coOdDomainAddrSet(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, CO_DOMAIN_PTR pAddr, UNSIGNED32 size); EXTERN_DECL RET_T coOdDomainSetActualSize(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, CO_DOMAIN_PTR pAddr, UNSIGNED32 size); EXTERN_DECL RET_T coOdVisStringSet(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, VIS_STRING pAddr, UNSIGNED32 size); EXTERN_DECL RET_T coEventRegister_OBJECT_CHANGED(CO_LINE_DECL, CO_EVENT_OBJECT_CHANGED_FCT_T pFunction, UNSIGNED16 index, UNSIGNED8 subIndex); #ifdef CO_DYNAMIC_OBJDIC EXTERN_DECL RET_T coDynOdInit(CO_LINE_DECL, UNSIGNED16 objCnt, UNSIGNED16 u8Cnt, UNSIGNED16 u16Cnt, UNSIGNED16 u32Cnt, UNSIGNED16 i8Cnt, UNSIGNED16 i16Cnt, UNSIGNED16 i32Cnt # ifdef CO_EXTENDED_DATA_TYPES ,UNSIGNED16 u48Cnt ,UNSIGNED16 u64Cnt # endif /* CO_EXTENDED_DATA_TYPES */ ); EXTERN_DECL RET_T coDynOdRelease(CO_LINE_DECL); EXTERN_DECL RET_T coDynOdAddIndex(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 nrOfSubs, CO_ODTYPE_T odType); EXTERN_DECL RET_T coDynOdAddSubIndex(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, CO_DATA_TYPE_T dataType, UNSIGNED16 attr, void *pVar); EXTERN_DECL RET_T coDynOdSetSubIndexAddr(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, CO_DATA_TYPE_T dataType, void *pVar); EXTERN_DECL UNSIGNED8 *coDynOdGetObjAddr(CO_LINE_DECL, CO_CONST CO_OBJECT_DESC_T *pDesc); EXTERN_DECL RET_T coDynOdGetObjDescPtr(CO_LINE_DECL, UNSIGNED16 index, UNSIGNED8 subIndex, CO_CONST CO_OBJECT_DESC_T **pDescPtr); EXTERN_DECL UNSIGNED32 coDynOdGetObjSize(CO_CONST CO_OBJECT_DESC_T *pDesc); EXTERN_DECL UNSIGNED32 coDynOdGetObjMaxSize(CO_CONST CO_OBJECT_DESC_T *pDesc); #endif /* CO_DYNAMIC_OBJDIC */ #ifdef CO_STORE_SUPPORTED EXTERN_DECL UNSIGNED32 coOdGetObjStoreFlagCnt(CO_LINE_DECL); EXTERN_DECL RET_T coOdGetObjStoreFlag(CO_LINE_DECL, UNSIGNED32 idx, UNSIGNED16* pIndex, UNSIGNED8* pSubIndex); #endif /* CO_STORE_SUPPORTED */ #endif /* OD_ACCESS_H */