www.pudn.com > ethercat-slave-source-code.rar > ecateoe.h, change:2013-05-03,size:9687b
/** * \addtogroup EoE Ethernet over EtherCAT * @{ */ /** \file ecateoe.h \author EthercatSSC@beckhoff.com \brief Sample header brief info \version 5.10 <br>Changes to version V5.01:<br> V5.10 EOE2: Add new EoE service identifier (6-9)<br> V5.10 EOE3: Change local send frame pending indication variable to a global variable (it need to be resetted if the mailbox is stopped and a frame is pending)<br> <br>Changes to version - :<br> V5.01 : Start file change log */ #ifndef _ECATEOE_H_ #define _ECATEOE_H_ /*----------------------------------------------------------------------------------------- ------ ------ Includes ------ -----------------------------------------------------------------------------------------*/ #include "mailbox.h" /*----------------------------------------------------------------------------------------- ------ ------ Defines and Types ------ -----------------------------------------------------------------------------------------*/ #define ETHERNET_FRAGMENT_GRANULAR 32 /**< \brief length of each fragment (except the last fragment) must be dividable by 32*/ #define ETHERNET_FRAGMENT_MASK 0xFFFFFFE0 /**< \brief EoE Fragment mask*/ #define ETHERNET_FRAGMENT_BUFFER(n) (((n)+31)/32) /**< \brief Fragment buffer*/ #define ETHERNET_MAX_FRAGMENTS 48 /**< \brief Max number of fragments*/ #define ETHERNET_MAX_FRAGMENTBUFFER ((ETHERNET_MAX_FRAGMENTS)*(ETHERNET_FRAGMENT_GRANULAR)) /**< \brief Max fragment buffer (1536)*/ #define ETHERNET_FRAMENO_MASK 0x0000000F /**< \brief Fragment number mask*/ #define EOE_TYPE_FRAME_FRAG 0 /**< \brief ETHERCAT_EOE_HEADER followed by frame fragment (ETHERCAT_EOE_TIMESTAMP may included)*/ #define EOE_TYPE_TIMESTAMP_RES 1 /**< \brief ETHERCAT_EOE_HEADER followed by ETHERCAT_EOE_TIMESTAMP*/ #define EOE_TYPE_INIT_REQ 2 /**< \brief ETHERCAT_EOE_HEADER followed by ETHERCAT_EOE_INIT (Set IP Parameter Request)*/ #define EOE_TYPE_INIT_RES 3 /**< \brief ETHERCAT_EOE_HEADER (Set IP Parameter Response)*/ #define EOE_TYPE_MACFILTER_REQ 4 /**< \brief ETHERCAT_EOE_HEADER followed by ETHERCAT_EOE_MACFILTER (Set MAC Filter Request)*/ #define EOE_TYPE_MACFILTER_RES 5 /**< \brief ETHERCAT_EOE_HEADER (Set MAC Filter Response)*/ /* ECATCHANGE_START(V5.10) EOE2*/ #define EOE_TYPE_GET_IP_PARAM_REQ 6 /**< \brief Get IP Request*/ #define EOE_TYPE_GET_IP_PARAM_RES 7 /**< \brief Get IP Response*/ #define EOE_TYPE_GET_MAC_FILTER_REQ 8 /**< \brief Get MAC Filter Request*/ #define EOE_TYPE_GET_MAC_FILTER_RES 9 /**< \brief Get MAC Filter Response*/ /* ECATCHANGE_END(V5.10) EOE2*/ #define EOE_RESULT_NOERROR 0x0000 /**< \brief No Error*/ #define EOE_RESULT_UNSPECIFIED_ERROR 0x0001 /**< \brief Unspecified error*/ #define EOE_RESULT_UNSUPPORTED_TYPE 0x0002 /**< \brief unsupported type*/ #define EOE_RESULT_NO_IP_SUPPORT 0x0201 /**< \brief No IP supported*/ #define EOE_RESULT_NO_DHCP_SUPPORT 0x0202 /**< \brief No DHCP supported*/ #define EOE_RESULT_NO_MACFILTERMASK_SUPPORT 0x0401 /**< \brief No mac filter supported*/ /*CODE_INSERT_START (MBX_FILE_PACKED_START)*/ #if FC1100_HW #pragma pack(push, 1) #endif /*CODE_INSERT_END*/ /** \brief MAC address*/ typedef struct MBX_STRUCT_PACKED_START { UINT8 b[6]; }MBX_STRUCT_PACKED_END ETHERNET_ADDRESS; #define ETHERNET_ADDRESS_LEN SIZEOF(ETHERNET_ADDRESS) /**< \brief MAC address length*/ /** * \brief EoE Parameter header */ typedef struct MBX_STRUCT_PACKED_START { UINT16 Flags1; /**< \brief First 16Bit Flags*/ #define EOEINIT_CONTAINSMACADDR 0x0001 /**< \brief Includes MAC address*/ #define EOEINIT_CONTAINSIPADDR 0x0002 /**< \brief Includes IP address*/ #define EOEINIT_CONTAINSSUBNETMASK 0x0004 /**< \brief Includes SubNetMask*/ #define EOEINIT_CONTAINSDEFAULTGATEWAY 0x0008 /**< \brief Includes default gateway*/ #define EOEINIT_CONTAINSDNSSERVER 0x0010 /**< \brief Includes DNS server*/ #define EOEINIT_CONTAINSDNSNAME 0x0020 /**< \brief Includes DNS name*/ UINT16 Flags2; /**< \brief Second 16Bit Flags*/ #define EOEINIT_APPENDTIMESTAMP 0x0001 /**< \brief Includes time stamp*/ ETHERNET_ADDRESS MacAddr; /**< \brief MAC address buffer*/ UINT32 IpAddr; /**< \brief IP address buffer*/ UINT32 SubnetMask; /**< \brief SubNetMask buffer*/ UINT32 DefaultGateway; /**< \brief default gateway buffer*/ UINT32 DnsServer; /**< \brief DNS server buffer*/ CHAR DnsName[32]; /**< \brief DNS name buffer*/ }MBX_STRUCT_PACKED_END ETHERCAT_EOE_INIT; #define ETHERCAT_EOE_INIT_LEN SIZEOF(ETHERCAT_EOE_INIT) /**< \brief EoE Parameter size*/ /** * \brief EoE Address filter request */ typedef struct MBX_STRUCT_PACKED_START { UINT16 Flags; /**< \brief 16Bit Flags*/ #define EOEMACFILTER_MACFILTERCOUNT 0x000F /**< \brief Number of MAC address filters*/ #define EOEMACFILTER_MACFILTERMASKCOUNT 0x0030 /**< \brief Number of MAC address masks*/ #define EOEMACFILTERSHIFT_MACFILTERMASKCOUNT 4 /**< \brief Number of MAC address masks shift*/ #define EOEMACFILTER_NOBROADCASTS 0x0080 /**< \brief Filter Broadcasts*/ ETHERNET_ADDRESS MacFilter[16]; /**< \brief MAC address buffer*/ ETHERNET_ADDRESS MacFilterMask[4]; /**< \brief MAC address masks buffer*/ }MBX_STRUCT_PACKED_END ETHERCAT_EOE_MACFILTER; #define ETHERCAT_EOE_MACFILTER_LEN SIZEOF(ETHERCAT_EOE_MACFILTER) /**< \brief EoE Address filter size*/ /** * \brief EoE Timestamp */ typedef struct MBX_STRUCT_PACKED_START { UINT32 TimeStamp; /**< \brief 32 bit time stamp*/ }MBX_STRUCT_PACKED_END ETHERCAT_EOE_TIMESTAMP; #define ETHERCAT_EOE_TIMESTAMP_LEN SIZEOF(ETHERCAT_EOE_TIMESTAMP) /**< \brief EoE timestamp size*/ /** * \brief EoE header */ typedef struct MBX_STRUCT_PACKED_START { UINT16 Flags1; /**< \brief First 16Bit Flags*/ #define EOEHEADER_TYPE 0x000F /**< \brief specifies following data*/ #define EOEHEADER_PORTASSIGN 0x00F0 /**< \brief 0 = unspecified, 1 = port 1...*/ #define EOEHEADER_LASTFRAGMENT 0x0100 /**< \brief TRUE if last fragment (EOE_TYPE_FRAME_FRAG only)*/ #define EOEHEADER_TIMESTAMPAPPENDED 0x0200 /**< \brief 32 bit time stamp appended (EOE_TYPE_FRAME_FRAG with LastFragment=1 only)*/ #define EOEHEADER_TIMESTAMPREQUESTED 0x0400 /**< \brief time stamp response requested (EOE_TYPE_FRAME_FRAG only)*/ UINT16 Flags2; /**< \brief Second 16Bit Flags*/ // EOE_TYPE_FRAME_FRAG and EOE_TYPE_TIMESTAMP_RES only #define EOEHEADER_FRAGMENT 0x003F /**< \brief fragment number (EOE_TYPE_FRAME_FRAG only)*/ #define EOEHEADER_OFFSETBUFFER 0x0FC0 /**< \brief byte offset multiplied by 32 (if Fragment != 0) (EOE_TYPE_FRAME_FRAG only) buffer size multiplied by 32 (if Fragment == 0) (EOE_TYPE_FRAME_FRAG only)*/ #define EOEHEADERSHIFT_OFFSETBUFFER 6 #define EOEHEADER_FRAMENO 0xF000 /**< \brief frame number (EOE_TYPE_FRAME_FRAG and EOE_TYPE_TIMESTAMP_RES only)*/ #define EOEHEADER_RESULT 0xFFFF /**< \brief EOE_TYPE_INIT_RES and EOE_TYPE_MACFILTER_RES only*/ }MBX_STRUCT_PACKED_END ETHERCAT_EOE_HEADER; #define ETHERCAT_EOE_HEADER_LEN SIZEOF(ETHERCAT_EOE_HEADER) /**< \brief EoE header size*/ /*CODE_INSERT_START (MBX_FILE_PACKED_END)*/ #if FC1100_HW #pragma pack(pop) #endif /*CODE_INSERT_END*/ #endif //_ECATEOE_H_ #if _ECATEOE_ #define PROTO #else #define PROTO extern #endif /*----------------------------------------------------------------------------------------- ------ ------ Global Variables ------ -----------------------------------------------------------------------------------------*/ /* ECATCHANGE_START(V5.10) EOE3*/ PROTO BOOL bEoESendFramePending; /**< \brief is set while an Ethernet frame is sent with several fragments, the next Ethernet frame could not be sent before the actual frame is sent completely (EOE_SendFrameReq returns 1 in that case) */ /* ECATCHANGE_END(V5.10) EOE3*/ /*----------------------------------------------------------------------------------------- ------ ------ Global Functions ------ -----------------------------------------------------------------------------------------*/ PROTO void EOE_Init(void); PROTO UINT8 EOE_ServiceInd(TMBX MBXMEM * pMbx); PROTO void EOE_ContinueInd(TMBX MBXMEM * pMbx); PROTO UINT8 EOE_SendFrameReq(UINT8 MBXMEM * pFrame, UINT16 frameSize); #undef PROTO /** @}*/