NorthStar-Endurance-TestBench/north-star_emotas-stack/colib_ml/inc/co_odaccess.h

340 lines
12 KiB
C

/*
* 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 <co_datatype.h>
/* 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 */