f2838x_cm_cia402_solution/sdoserv.h
Alex 9661838676 rev.(UML-1899): рабочий пример EtherCAT Slave на CM
Работает. Есть CiA402, OD из SSC Tool. Автономный со своим main(). Проверялся тестами на SOEM.
2024-02-02 12:33:48 +03:00

623 lines
31 KiB
C

/*
* This source file is part of the EtherCAT Slave Stack Code licensed by Beckhoff Automation GmbH & Co KG, 33415 Verl, Germany.
* The corresponding license agreement applies. This hint shall not be removed.
* https://www.beckhoff.com/media/downloads/slave-stack-code/ethercat_ssc_license.pdf
*/
/**
* \addtogroup CoE CAN Application Profile over EtherCAT
* @{
*/
/**
\file sdoserv.h
\author EthercatSSC@beckhoff.com
\brief SDO Service definitions
\version 5.12
<br>Changes to version V5.11:<br>
V5.12 ECAT2: big endian changes<br>
V5.12 MBX3: handle incomplete mailbox communication<br>
<br>Changes to version V5.10:<br>
V5.11 ECAT10: change PROTO handling to prevent compiler errors<br>
V5.11 SDO10: add new SDO abort code 0x6010004 (complete access not supported)<br>
<br>Changes to version V5.01:<br>
V5.10 SDO3: Add new SDO Abort Code (0x06090033)<br>
<br>Changes to version - :<br>
V5.01 : Start file change log
*/
/*-----------------------------------------------------------------------------------------
------
------ Includes
------
-----------------------------------------------------------------------------------------*/
#include "ecatcoe.h"
#ifndef _SDOSERV_H_
#define _SDOSERV_H_
/*-----------------------------------------------------------------------------------------
------
------ Defines and Types
------
-----------------------------------------------------------------------------------------*/
/**
* \addtogroup SdoErrorCodes SDO Error Codes
* @{
*/
#define ERROR_SDOINVALIDCOMMAND 0x1101 /**< \brief Invalid SDO command*/
#define ERROR_SDOINVALIDHEADER 0x1102 /**< \brief Invalid SDO header*/
#define ERROR_SDONOTSUPPORTED 0x1103 /**< \brief SDO service not supported*/
/** @}*/
/**
* \addtogroup SdoHeaderData SDO Header and Data
* @{
*/
#define SDOHEADER_SIZEINDICATOR ((UINT8) 0x01) /**< \brief Size Indicator size of data in Data Set Size specified*/
#define SDOHEADER_TRANSFERTYPE ((UINT8) 0x02) /**< \brief Transfer Type<br>1: Expedited<br>0: Normal*/
#define SDOHEADER_DATASETSIZE ((UINT8) 0x0C) /**< \brief Data Set Size (used for Expedited transfer)*/
#define SDOHEADER_COMPLETEACCESS ((UINT8) 0x10) /**< \brief Complete Access indication<br>0: Only specified entry will be transferred<br>1: Whole object (with or without Subindex0) will be transferred)*/
#define SDOHEADER_COMMAND ((UINT8) 0xE0) /**< \brief SDO Command*/
#define SDOHEADERSHIFT_SIZEINDICATOR ((UINT8) 0) /**< \brief Shift for Size Indicator*/
#define SDOHEADERSHIFT_TRANSFERTYPE ((UINT8) 1) /**< \brief Shift for Transfer Type*/
#define SDOHEADERSHIFT_DATASETSIZE ((UINT8) 2) /**< \brief Shift for Data Set Size*/
#define SDOHEADERSHIFT_INDEXACCESS ((UINT8) 4) /**< \brief Shift for Complete Access*/
#define SDOHEADERSHIFT_COMMAND ((UINT8) 5) /**< \brief Shift for SDO Command*/
/** @}*/
/**
* \addtogroup SdoServices SDO Services
* @{
*/
#define SDOSERVICE_INITIATEDOWNLOADREQ ((UINT8) (0x01 << (SDOHEADERSHIFT_COMMAND))) /**< \brief SDO download request*/
#define SDOSERVICE_INITIATEDOWNLOADRES ((UINT8) (0x03 << (SDOHEADERSHIFT_COMMAND))) /**< \brief SDO download response*/
#define SDOSERVICE_DOWNLOADSEGMENTREQ ((UINT8) (0x00 << (SDOHEADERSHIFT_COMMAND))) /**< \brief SDO segmented download request*/
#define SDOSERVICE_DOWNLOADSEGMENTRES ((UINT8) (0x01 << (SDOHEADERSHIFT_COMMAND))) /**< \brief SDO segmented download response*/
#define SDOSERVICE_INITIATEUPLOADREQ ((UINT8) (0x02 << (SDOHEADERSHIFT_COMMAND))) /**< \brief SDO upload request*/
#define SDOSERVICE_INITIATEUPLOADRES ((UINT8) (0x02 << (SDOHEADERSHIFT_COMMAND))) /**< \brief SDO upload response*/
#define SDOSERVICE_UPLOADSEGMENTREQ ((UINT8) (0x03 << (SDOHEADERSHIFT_COMMAND))) /**< \brief SDO segmented upload request*/
#define SDOSERVICE_UPLOADSEGMENTRES ((UINT8) (0x00 << (SDOHEADERSHIFT_COMMAND))) /**< \brief SDO segmented upload response*/
#define SDOSERVICE_ABORTTRANSFER ((UINT8) (((UINT8) 0x04) << (SDOHEADERSHIFT_COMMAND))) /**< \brief SDO abort*/
/** @}*/
/**
* \addtogroup SdoHeaderData SDO Header and Data
* @{
*/
/**
* Structure to handle the basic SDO header
*/
typedef struct MBX_STRUCT_PACKED_START
{
/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 101 to 128 deleted*/
UINT8 Sdo[4]; /**< \brief 32Bit SDO header buffer*/
/*ET9300 Project Handler :(#if BIG_ENDIAN_16BIT) lines 130 to 135 deleted*/
#define SDOHEADER_COMMANDOFFSET 0 /**< \brief Memory offset for the command*/
#define SDOHEADER_INDEXLOOFFSET 1 /**< \brief Memory offset for the low Byte of the object index*/
#define SDOHEADER_INDEXHIOFFSET 2 /**< \brief Memory offset for the high Byte of the object index*/
#define SDOHEADER_SUBINDEXOFFSET 3 /**< \brief Memory offset for subindex*/
#define SDOHEADER_COMMANDMASK 0xFF /**< \brief Mask to get the command Byte*/
#define SDOHEADER_INDEXLOSHIFT 0 /**< \brief Shift to get the low Byte of the object index*/
#define SDOHEADER_INDEXHIMASK 0xFF /**< \brief Mask to get the high byte of the object index*/
#define SDOHEADER_SUBINDEXSHIFT 0 /**< \brief Shift to get the subindex*/
}MBX_STRUCT_PACKED_END
TINITSDOHEADER;
#define INITSDO_HEADER_SIZE 4 /**< \brief Size of the SDO header*/
/**
*Complete SDO datagram including mailbox header, CoE header and SDO header
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TINITSDOHEADER SdoHeader; /**< \brief SDO header*/
}MBX_STRUCT_PACKED_END
TINITSDOMBX;
#define MAX_EXPEDITED_DATA 4 /**< \brief Maximum number of Bytes handled via an expedited transfer*/
#define MIN_SEGMENTED_DATA ((UINT16) 7) /**< \brief Minimum number of Bytes required for a segmented transfer*/
#define EXPEDITED_FRAME_SIZE ( COE_HEADER_SIZE + INITSDO_HEADER_SIZE + (MAX_EXPEDITED_DATA) ) /**< \brief Size of an expedited mailbox datagram*/
#define DOWNLOAD_NORM_REQ_SIZE ( COE_HEADER_SIZE + INITSDO_HEADER_SIZE + 4 ) /**< \brief Size of an normal download request*/
/* HBu 06.02.06: names of defines changed */
/* HBu 21.03.06: the SDO_Download-Response has to have always 8 bytes */
#define DOWNLOAD_NORM_RES_SIZE ( COE_HEADER_SIZE + INITSDO_HEADER_SIZE + 4 ) /**< \brief Frame size of an normal download response*/
#define UPLOAD_NORM_RES_SIZE ( COE_HEADER_SIZE + INITSDO_HEADER_SIZE + 4 ) /**< \brief Frame size of an normal upload response*/
#define SEGMENT_NORM_HEADER_SIZE ( COE_HEADER_SIZE + 1 ) /**< \brief Minimum SDO header size*/
#define SEGMENT_NORM_RES_SIZE ( (SEGMENT_NORM_HEADER_SIZE) + (MIN_SEGMENTED_DATA) ) /**< \brief Minimum SDO size*/
#define SEGMENT_MBX_SIZE ( MBX_HEADER_SIZE + (SEGMENT_NORM_HEADER_SIZE) )/**< \brief Minimum mailbox datagram*/
/**
* Segmented SDO header including data
*/
typedef struct MBX_STRUCT_PACKED_START
{
/*ET9300 Project Handler :(#if MBX_16BIT_ACCESS) lines 183 to 209 deleted*/
UINT8 SegHeader; /**< \brief 8Bit header buffer*/
#define SEGHEADER_MASK ((UINT8) 0xFF) /**< \brief SDO header mask*/
#define SEGHEADER_NOMOREFOLLOWS ((UINT8) 0x01) /**< \brief More segments follow flag*/
#define SEGHEADER_SEGDATASIZE ((UINT8) 0x0E) /**< \brief Segmented data size*/
#define SEGHEADER_TOGGLE ((UINT8) 0x10) /**< \brief Toogle flag*/
#define SEGHEADER_COMMAND ((UINT8) 0xE0) /**< \brief Command identifier*/
#define SEGHEADERSHIFT_SEGDATASIZE ((UINT8) 1) /**< \brief Shift for Segmented data size*/
#define SEGHEADERSHIFT_TOGGLE ((UINT8) 4) /**< \brief Shift for toggle flag*/
#define SEGHEADERSHIFT_COMMAND ((UINT8) 5) /**< \brief Shift for command identifier*/
UINT8 Data[(MAX_MBX_DATA_SIZE)-(SEGMENT_NORM_HEADER_SIZE)]; /**< \brief Data buffer*/
}MBX_STRUCT_PACKED_END
TSDOSEGHEADERDATA;
/**
*Expedited download request
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TINITSDOHEADER SdoHeader; /**< \brief SDO header*/
UINT16 Data[(MAX_EXPEDITED_DATA) >> 1]; /**< \brief Data buffer*/
}MBX_STRUCT_PACKED_END
TINITSDODOWNLOADEXPREQMBX;
/**
*Normal download request
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TINITSDOHEADER SdoHeader; /**< \brief SDO header*/
UINT16 CompleteSize[2]; /**< \brief Complete object size*/
UINT16 Data[(((MAX_MBX_DATA_SIZE)-(DOWNLOAD_NORM_REQ_SIZE)) >> 1)]; /**< \brief Data buffer*/
}MBX_STRUCT_PACKED_END
TINITSDODOWNLOADNORMREQMBX;
/**
*Expedited and normal download response:
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TINITSDOHEADER SdoHeader; /**< \brief SDO header*/
}MBX_STRUCT_PACKED_END
TINITSDODOWNLOADRESMBX;
/**
*Segmented download request
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TSDOSEGHEADERDATA SdoHeader; /**< \brief SDO header (data is included in header)*/
}MBX_STRUCT_PACKED_END
TDOWNLOADSDOSEGREQMBX;
/**
*Segmented download response
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
UINT8 SegHeader; /**< \brief SDO header*/
}MBX_STRUCT_PACKED_END
TDOWNLOADSDOSEGRESMBX;
/**
*Expedited and normal upload request
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TINITSDOHEADER SdoHeader; /**< \brief SDO header*/
}MBX_STRUCT_PACKED_END
TINITSDOUPLOADREQMBX;
/**
*Expedited upload response
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TINITSDOHEADER SdoHeader; /**< \brief SDO header*/
UINT16 Data[((MAX_EXPEDITED_DATA) >> 1)]; /**< \brief Data buffer*/
}MBX_STRUCT_PACKED_END
TINITSDOUPLOADEXPRESMBX;
/**
*Normal upload response
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TINITSDOHEADER SdoHeader; /**< \brief SDO header*/
UINT16 CompleteSize[2]; /**< \brief Complete object size*/
UINT16 Data[(((MAX_MBX_DATA_SIZE)-(UPLOAD_NORM_RES_SIZE)) >> 1)]; /**< \brief Data buffer*/
}MBX_STRUCT_PACKED_END
TINITSDOUPLOADNORMRESMBX;
/**
*Segmented upload request
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
UINT8 SegHeader; /**< \brief SDO header*/
}MBX_STRUCT_PACKED_END
TUPLOADSDOSEGREQMBX;
/**
*Segmented upload response
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TSDOSEGHEADERDATA SdoHeader; /**< \brief SDO header (data is included in header)*/
}MBX_STRUCT_PACKED_END
TUPLOADSDOSEGRESMBX;
/**
*Abort request
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TINITSDOHEADER SdoHeader; /**< \brief SDO header*/
UINT32 AbortCode; /**< \brief SDO abort code*/
}MBX_STRUCT_PACKED_END
TABORTSDOTRANSFERREQMBX;
#define ABORT_NORM_RES_SIZE (SIZEOF(TABORTSDOTRANSFERREQMBX) - SIZEOF(TMBXHEADER))/**< \brief Size of the SDO Abort datagram (without the mailbox header)*/
/** @}*/
/**
* \addtogroup SDOAbort SDO Abort Codes
* @{
*/
#define ABORT_NOERROR 0x00000000 /**< \brief No SDO error*/
#define ABORT_TOGGLE_BIT_NOT_CHANGED 0x05030000 /**< \brief Toggle bit not changed*/
#define ABORT_SDO_PROTOCOL_TIMEOUT 0x05040000 /**< \brief SDO timeout*/
#define ABORT_COMMAND_SPECIFIER_UNKNOWN 0x05040001 /**< \brief Command specifier unknown*/
#define ABORT_OUT_OF_MEMORY 0x05040005 /**< \brief Out of memory*/
#define ABORT_UNSUPPORTED_ACCESS 0x06010000 /**< \brief Unsupported Access*/
#define ABORT_WRITE_ONLY_ENTRY 0x06010001 /**< \brief Write only entry*/
#define ABORT_READ_ONLY_ENTRY 0x06010002 /**< \brief Read only entry*/
#define ABORT_ENTRY_CANT_BE_WRITTEN_SI0_NOT_0 0x06010003 /**< \brief Entry can not be written because Subindex0 is not 0*/
#define ABORT_COMPLETE_ACCESS_NOT_SUPPORTED 0x06010004 /**< \brief The object can not be accessed via complete access*/
#define ABORT_OBJECT_NOT_EXISTING 0x06020000 /**< \brief Object not existing*/
#define ABORT_OBJECT_CANT_BE_PDOMAPPED 0x06040041 /**< \brief Object can not be mapped to PDO*/
#define ABORT_MAPPED_OBJECTS_EXCEED_PDO 0x06040042 /**< \brief Mapped Object exceeds PDO*/
#define ABORT_PARAM_IS_INCOMPATIBLE 0x06040043 /**< \brief Parameter is incompatible*/
#define ABORT_INTERNAL_DEVICE_INCOMPATIBILITY 0x06040047 /**< \brief Device incompatibility*/
#define ABORT_HARDWARE_ERROR 0x06060000 /**< \brief Hardware error*/
#define ABORT_PARAM_LENGTH_ERROR 0x06070010 /**< \brief Parameter length error*/
#define ABORT_PARAM_LENGTH_TOO_LONG 0x06070012 /**< \brief Parameter is too long*/
#define ABORT_PARAM_LENGTH_TOO_SHORT 0x06070013 /**< \brief Parameter is too short*/
#define ABORT_SUBINDEX_NOT_EXISTING 0x06090011 /**< \brief Subindex (Entry) not exists*/
#define ABORT_VALUE_EXCEEDED 0x06090030 /**< \brief Value exceeds*/
#define ABORT_VALUE_TOO_GREAT 0x06090031 /**< \brief Value is too great*/
#define ABORT_VALUE_TOO_SMALL 0x06090032 /**< \brief Value is too small*/
#define ABORT_MODULE_ID_LIST_NOT_MATCH 0x06090033 /**< \brief Detected Module Ident List (0xF030) and Configured Module Ident list (0xF050) does not match*/
#define ABORT_MAX_VALUE_IS_LESS_THAN_MIN_VALUE 0x06090036 /**< \brief Value is less than minimum value*/
#define ABORT_GENERAL_ERROR 0x08000000 /**< \brief General error*/
#define ABORT_DATA_CANNOT_BE_READ_OR_STORED 0x08000020 /**< \brief Data can not be read or written*/
#define ABORT_DATA_CANNOT_BE_READ_OR_STORED_BECAUSE_OF_LOCAL_CONTROL 0x08000021 /**< \brief Data can not be accessed because of local control*/
#define ABORT_DATA_CANNOT_BE_READ_OR_STORED_IN_THIS_STATE 0x08000022 /**< \brief Data can not be read or written in the current state*/
#define ABORT_NO_OBJECT_DICTIONARY_IS_PRESENT 0x08000023 /**< \brief Object is not in the object dictionary*/
/**
* \addtogroup SDOAbortIndex SDO Abort Codes Identifier
* @{
* Internal the SDO abort codes are handled in an array.
*/
#define ABORTIDX_TOGGLE_BIT_NOT_CHANGED 0x01 /**< \brief Index of "Toggle bit not changed"*/
#define ABORTIDX_SDO_PROTOCOL_TIMEOUT 0x02 /**< \brief Index of "SDO timeout"*/
#define ABORTIDX_COMMAND_SPECIFIER_UNKNOWN 0x03 /**< \brief Index of "Command specifier unknown"*/
#define ABORTIDX_OUT_OF_MEMORY 0x04 /**< \brief Index of "Out of memory"*/
#define ABORTIDX_UNSUPPORTED_ACCESS 0x05 /**< \brief Index of "Unsupported Access"*/
#define ABORTIDX_WRITE_ONLY_ENTRY 0x06 /**< \brief Index of "Write only entry"*/
#define ABORTIDX_READ_ONLY_ENTRY 0x07 /**< \brief Index of "Read only entry"*/
#define ABORTIDX_OBJECT_NOT_EXISTING 0x08 /**< \brief Index of "Object not existing"*/
#define ABORTIDX_OBJECT_CANT_BE_PDOMAPPED 0x09 /**< \brief Index of "Object can not be mapped to PDO"*/
#define ABORTIDX_MAPPED_OBJECTS_EXCEED_PDO 0x0A /**< \brief Index of "Mapped Object exceeds PDO"*/
#define ABORTIDX_PARAM_IS_INCOMPATIBLE 0x0B /**< \brief Index of "Parameter is incompatible"*/
#define ABORTIDX_INTERNAL_DEVICE_INCOMPATIBILITY 0x0C /**< \brief Index of "Device incompatibility"*/
#define ABORTIDX_HARDWARE_ERROR 0x0D /**< \brief Index of "Hardware error"*/
#define ABORTIDX_PARAM_LENGTH_ERROR 0x0E /**< \brief Index of "Parameter length error"*/
#define ABORTIDX_PARAM_LENGTH_TOO_LONG 0x0F /**< \brief Index of "Parameter is too long"*/
#define ABORTIDX_PARAM_LENGTH_TOO_SHORT 0x10 /**< \brief Index of "Parameter is too short"*/
#define ABORTIDX_SUBINDEX_NOT_EXISTING 0x11 /**< \brief Index of "Subindex (Entry) not exists"*/
#define ABORTIDX_VALUE_EXCEEDED 0x12 /**< \brief Index of "Value exceeds"*/
#define ABORTIDX_VALUE_TOO_GREAT 0x13 /**< \brief Index of "Value is too great"*/
#define ABORTIDX_VALUE_TOO_SMALL 0x14 /**< \brief Index of "Value is too small"*/
#define ABORTIDX_MODULE_ID_LIST_NOT_MATCH 0x15 /**< \brief Index of "Unequal Module Id list"*/
#define ABORTIDX_MAX_VALUE_IS_LESS_THAN_MIN_VALUE 0x16 /**< \brief Index of "Value is less than minimum value"*/
#define ABORTIDX_GENERAL_ERROR 0x17 /**< \brief Index of "General error"*/
#define ABORTIDX_DATA_CANNOT_BE_READ_OR_STORED 0x18 /**< \brief Index of "Data can not be read or written"*/
#define ABORTIDX_DATA_CANNOT_BE_ACCESSED_BECAUSE_OF_LOCAL_CONTROL 0x19 /**< \brief Index of "Data can not be accessed because of local control"*/
#define ABORTIDX_IN_THIS_STATE_DATA_CANNOT_BE_READ_OR_STORED 0x1A /**< \brief Index of "Data can not be read or written in the current state"*/
#define ABORTIDX_NO_OBJECT_DICTIONARY_IS_PRESENT 0x1B /**< \brief Index of "Object is not in the object dictionary"*/
#define ABORTIDX_ENTRY_CANT_BE_WRITTEN_SI0_NOT_0 0x1C /**< \brief Index of "Entry can not be written because Subindex0 is not 0"*/
#define ABORTIDX_COMPLETE_ACCESS_NOT_SUPPORTED 0x1D /**< \brief The object can not be accessed via complete access*/
#define ABORTIDX_WORKING 0xFF /**< \brief Index of application is handling the SDO request*/
/** @}*/
/** @}*/
/**
*\addtogroup SdoServices SDO Services
* @{
*/
#define SDOINFOSERVICE_OBJDICTIONARYLIST_Q 0x01 /**< \brief SDO Info Get object list request*/
#define SDOINFOSERVICE_OBJDICTIONARYLIST_S 0x02 /**< \brief SDO Info Get object list response*/
#define SDOINFOSERVICE_OBJDESCRIPTION_Q 0x03 /**< \brief SDO Info Get object description request*/
#define SDOINFOSERVICE_OBJDESCRIPTION_S 0x04 /**< \brief SDO Info Get object description response*/
#define SDOINFOSERVICE_ENTRYDESCRIPTION_Q 0x05 /**< \brief SDO Info Get entry description request*/
#define SDOINFOSERVICE_ENTRYDESCRIPTION_S 0x06 /**< \brief SDO Info Get entry description request*/
#define SDOINFOSERVICE_ERROR_Q 0x07 /**< \brief SDO Info Error*/
#define SDOINFOSERVICE_INCOMPLETE 0x80 /**< \brief SDO Info Incomplete flag*/
/** @}*/
/**
*\addtogroup SdoHeaderData SDO Header and Data
* @{
*/
/**
* SDO Info Object list
*/
typedef struct MBX_STRUCT_PACKED_START
{
UINT16 ListType; /**< \brief List type variable*/
#define INFO_LIST_TYPE_LENGTH 0 /**< \brief Length of all list types*/
#define INFO_LIST_TYPE_ALL 1 /**< \brief All objects*/
#define INFO_LIST_TYPE_RXPDO 2 /**< \brief Only RxPDO mappable objects*/
#define INFO_LIST_TYPE_TXPDO 3 /**< \brief Only TxPDO mappable objects*/
#define INFO_LIST_TYPE_BACKUP 4 /**< \brief Only backup objects*/
#define INFO_LIST_TYPE_SET 5 /**< \brief Only setting objects*/
#define INFO_LIST_TYPE_MAX 5 /**< \brief Max list identifier*/
}MBX_STRUCT_PACKED_END
TSDOINFOLIST;
/**
* Object description
*/
typedef struct MBX_STRUCT_PACKED_START
{
UINT16 DataType; /**< \brief Object data type*/
UINT16 ObjFlags; /**< \brief Object flags (including object code and max subindex)*/
/*Object Code and MaxSubindex will be set manually in the object dictionary. The value is always created in little endian format*/
#define OBJFLAGS_MAXSUBINDEXMASK 0x00FF /**< \brief Max subindex mask*/
#define OBJFLAGS_MAXSUBINDEXSHIFT 0 /**< \brief Max subindex shift*/
#define OBJFLAGS_OBJCODEMASK 0x0F00 /**< \brief Mask Object code mask*/
#define OBJFLAGS_OBJCODESHIFT 8 /**< \brief Object code shift*/
#define OBJCODE_VAR 0x07 /**< \brief Object code VARIABLE*/
#define OBJCODE_ARR 0x08 /**< \brief Object code ARRAY*/
#define OBJCODE_REC 0x09 /**< \brief Object code RECORD*/
// char Name[]; // rest of mailbox data
}MBX_STRUCT_PACKED_END
TSDOINFOOBJDESC;
#define SDO_INFO_OBJ_DESC_SIZE SIZEOF(TSDOINFOOBJDESC) /**< \brief Object description size*/
/**
* SDO Info object description service data
*/
typedef struct MBX_STRUCT_PACKED_START
{
UINT16 Index; /**< \brief Object index*/
TSDOINFOOBJDESC Res; /**< \brief Description data*/
}MBX_STRUCT_PACKED_END
TSDOINFOOBJ;
#define SDO_INFO_OBJ_DESC_RES_SIZE SIZEOF(TSDOINFOOBJ)/**< \brief Size of the object description service data*/
/**
* SDO Info entry description
*/
typedef struct MBX_STRUCT_PACKED_START
{
UINT16 DataType; /**< \brief Entry data type*/
UINT16 BitLength; /**< \brief Entry bit size*/
UINT16 ObjAccess; /**< \brief Entry access rights*/
/**<
Bit 0: Read Access in Pre-Op
<br>Bit 1: Read Access in Safe-Op
<br>Bit 2: Read Access in Op
<br>Bit 3: Write Access in Pre-Op
<br>Bit 4: Write Access in Safe-Op
<br>Bit 5: Write Access in Op
<br>Bit 6: mappable in RxPDO
<br>Bit 7: mappable in TxPDO
<br>Bit 8: entry will be included in backup
<br>Bit 9: entry will be included in settings*/
#define ACCESS_READWRITE 0x003F /**< \brief Read/write in all states*/
#define ACCESS_READ 0x0007 /**< \brief Read only in all states*/
#define ACCESS_READ_PREOP 0x0001 /**< \brief Read only in PreOP*/
#define ACCESS_READ_SAFEOP 0x0002 /**< \brief Read only in SafeOP*/
#define ACCESS_READ_OP 0x0004 /**< \brief Read only in OP*/
#define ACCESS_WRITE 0x0038 /**< \brief Write only in all states*/
#define ACCESS_WRITE_PREOP 0x0008 /**< \brief Write only in PreOP*/
#define ACCESS_WRITE_SAFEOP 0x0010 /**< \brief Write only in SafeOP*/
#define ACCESS_WRITE_OP 0x0020 /**< \brief Write only in OP*/
#define OBJACCESS_NOPDOMAPPING 0x0000 /**< \brief Not PDO mappable*/
#define OBJACCESS_RXPDOMAPPING 0x0040 /**< \brief Mappable in RxPDOs*/
#define OBJACCESS_TXPDOMAPPING 0x0080 /**< \brief Mappable in TxPDOs*/
#define OBJACCESS_BACKUP 0x0100 /**< \brief Backup entry*/
#define OBJACCESS_SETTINGS 0x0200 /**< \brief Setting Entry*/
#define OBJACCESS_SAFEINPUTS 0x0400 /**< \brief Safe input*/
#define OBJACCESS_SAFEOUTPUTS 0x0800 /**< \brief Safe output*/
#define OBJACCESS_SAFEPARAMETER 0x1000 /**< \brief Safe parameter*/
}MBX_STRUCT_PACKED_END
TSDOINFOENTRYDESC;
/**
* SDO Info entry description service data
*/
typedef struct MBX_STRUCT_PACKED_START
{
UINT16 Index; /**< \brief Index of the parent object*/
UINT16 Info; /**< \brief Info data including the subindex and identifier for the payload data*/
/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 565 to 570 deleted*/
#define ENTRY_MASK_SUBINDEX 0x00FF /**< \brief Subindex mask*/
#define ENTRY_SUBINDEX_SHIFT 0 /**< \brief Subindex shift*/
#define ENTRY_MASK_VALUEINFO 0xFF00 /**< \brief Value info mask*/
#define ENTRY_VALUEINFO_SHIFT 8 /**< \brief Value info shift*/
TSDOINFOENTRYDESC Res; /**< \brief Entry description data*/
}MBX_STRUCT_PACKED_END
TSDOINFOENTRY;
/**
* SDO info Error
*/
typedef struct MBX_STRUCT_PACKED_START
{
UINT32 ErrorCode; /**< \brief SDO Info error code*/
}MBX_STRUCT_PACKED_END
TSDOINFOERROR;
#define SDO_INFO_ERROR_SIZE SIZEOF(TSDOINFOERROR)/**< \brief SDO Info error size*/
/**
*SDO Info header
*/
typedef struct MBX_STRUCT_PACKED_START
{
UINT16 InfoHead; /**< \brief Opcode, Incomplete flag and 8 reserved bits*/
/*ET9300 Project Handler :(#if BIG_ENDIAN_FORMAT) lines 601 to 606 deleted*/
#define INFOHEAD_OPCODE_MASK 0x007F /**< \brief Opcode mask*/
#define INFOHEAD_OPCODE_SHIFT 0 /**< \brief Opcode shift*/
#define INFOHEADER_INCOMPLETE_MASK 0x0080 /**< \brief Incomplete mask*/
#define INFOHEADER_INCOMPLETE_SHIFT 0 /**< \brief Incomplete shift, the incomplete value "SDOINFOSERVICE_INCOMPLETE" is defined as a UINT8 => no shift required*/
UINT16 FragmentsLeft; /**< \brief Number of fragments which will follow*/
union MBX_STRUCT_PACKED_START
{
TSDOINFOLIST List;/**< \brief List data*/
TSDOINFOOBJ Obj;/**< \brief Object Description data*/
TSDOINFOENTRY Entry;/**< \brief Entry description data*/
TSDOINFOERROR Error;/**< \brief Error data*/
UINT16 Data[1];/**< \brief Unspecified data*/
}MBX_STRUCT_PACKED_END
Data;/**< \brief Service data*/
}MBX_STRUCT_PACKED_END
TSDOINFOHEADER;
/**
* SDO Info complete datagram
*/
typedef struct MBX_STRUCT_PACKED_START
{
TMBXHEADER MbxHeader; /**< \brief Mailbox header*/
TCOEHEADER CoeHeader; /**< \brief CoE header*/
TSDOINFOHEADER SdoHeader; /**< \brief SDO Info header and data*/
}MBX_STRUCT_PACKED_END
TSDOINFORMATION;
#define SIZEOF_SDOINFOHEAD 4 /**< \brief SDO Info header size*/
#define SIZEOF_SDOINFO ( (COE_HEADER_SIZE) + (SIZEOF_SDOINFOHEAD )) /**< \brief SDO Info and CoE Size*/
#define SIZEOF_SDOINFOSTRUCT ( (MBX_HEADER_SIZE) + (COE_HEADER_SIZE) + (SIZEOF_SDOINFOHEAD) ) /**< \brief Complete SDO Info datagram size*/
#define SIZEOF_SDOINFOLISTHEAD 2 /**< \brief SDO Info list header size*/
#define SIZEOF_SDOINFOLISTSTRUCT (( COE_HEADER_SIZE) + (SIZEOF_SDOINFOHEAD) + (SIZEOF_SDOINFOLISTHEAD) ) /**< \brief Complete SDO Info list size*/
#define SIZEOF_SDOINFOOBJSTRUCT ( (COE_HEADER_SIZE) + (SIZEOF_SDOINFOHEAD) + (SDO_INFO_OBJ_DESC_RES_SIZE) ) /**< \brief Complete SDO Info object description response size*/
#define SIZEOF_SDOINFOENTRYREQHEAD 4 /**< \brief SDO Info entry description request size*/
#define SIZEOF_SDOINFOENTRYREQSTRUCT ( (COE_HEADER_SIZE) + (SIZEOF_SDOINFOHEAD) + (SIZEOF_SDOINFOENTRYREQHEAD) ) /**< \brief SDO Info entry description request size*/
#define SIZEOF_SDOINFOERRORSTRUCT ( (COE_HEADER_SIZE) + (SIZEOF_SDOINFOHEAD) + (SDO_INFO_ERROR_SIZE) ) /**< \brief SDO Info error size*/
#define SDO_INFO_HEADER_BYTE_SIZE ((SIZEOF_SDOINFOSTRUCT)+(SIZEOF_SDOINFOLISTHEAD)) /**< \brief SDO Info size*/
/** @}*/
/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 656 to 668 deleted*/
#endif //_SDOSRV_H_
/*-----------------------------------------------------------------------------------------
------
------ Global Variables
------
-----------------------------------------------------------------------------------------*/
#if defined(_SDOSERV_) && (_SDOSERV_ == 1)
#define PROTO
#else
#define PROTO extern
#endif
/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 684 to 697 deleted*/
PROTO MEM_ADDR VARMEM aSdoInfoHeader[GET_MEM_SIZE(SDO_INFO_HEADER_BYTE_SIZE)]; /**< \brief SDO Info buffer*/
/*ET9300 Project Handler :(#if SEGMENTED_SDO_SUPPORTED) lines 703 to 711 deleted*/
/*-----------------------------------------------------------------------------------------
------
------ Global Functions
------
-----------------------------------------------------------------------------------------*/
PROTO UINT8 SDOS_SdoInfoInd(TSDOINFORMATION MBXMEM *pSdoInfoInd);
PROTO UINT8 SDOS_SdoInd(TINITSDOMBX MBXMEM *pSdoInd);
/*ET9300 Project Handler :(#if SDO_RES_INTERFACE) lines 722 to 724 deleted*/
/*ET9300 Project Handler :(#if SDO_RES_INTERFACE || SEGMENTED_SDO_SUPPORTED) lines 725 to 727 deleted*/
#undef PROTO
/** @}*/