2007-10-14 15:44:05 +00:00
/* packet-ethercat-datagram.c
* Routines for ethercat packet disassembly
*
* $ Id $
*
* Copyright ( c ) 2007 by Beckhoff Automation GmbH
*
* Wireshark - Network traffic analyzer
* By Gerald Combs < gerald @ wireshark . org >
* Copyright 1998 Gerald Combs
2008-01-10 22:19:53 +00:00
*
2007-10-14 15:44:05 +00:00
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
2008-01-10 22:19:53 +00:00
*
2007-10-14 15:44:05 +00:00
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
2008-01-10 22:19:53 +00:00
*
2007-10-14 15:44:05 +00:00
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
2012-06-28 22:56:06 +00:00
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
2007-10-14 15:44:05 +00:00
*/
/* Include files */
# include "config.h"
# include <glib.h>
# include <epan/packet.h>
# include "packet-ethercat-datagram.h"
# include "packet-ecatmb.h"
2008-03-05 20:42:58 +00:00
static heur_dissector_list_t heur_subdissector_list ;
2007-10-14 15:44:05 +00:00
static dissector_handle_t ecat_mailbox_handle ;
2008-03-05 20:42:58 +00:00
/* Define the EtherCAT proto */
2007-10-14 15:44:05 +00:00
static int proto_ecat_datagram = - 1 ;
2008-03-05 20:42:58 +00:00
/* Define the tree for EtherCAT */
2007-10-14 15:44:05 +00:00
static int ett_ecat = - 1 ;
static int ett_ecat_header = - 1 ;
static int ett_ecat_syncman = - 1 ;
static int ett_ecat_syncflag = - 1 ;
2008-03-05 20:42:58 +00:00
static int ett_ecat_fmmu = - 1 ;
2007-10-14 15:44:05 +00:00
static int ett_ecat_fmmu_type = - 1 ;
static int ett_ecat_fmmu_active = - 1 ;
static int ett_ecat_dc = - 1 ;
2008-03-05 20:42:58 +00:00
static int ett_ecat_length = - 1 ;
static int ett_ecat_padding = - 1 ;
static int ett_ecat_datagram_subtree = - 1 ;
2007-10-14 15:44:05 +00:00
static int hf_ecat_sub ;
static int hf_ecat_sub_data [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_cmd [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_idx [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_cnt [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_ado [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_adp [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_lad [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
2013-02-10 20:52:21 +00:00
/* static int hf_ecat_header = -1; */
2007-10-14 15:44:05 +00:00
static int hf_ecat_data = - 1 ;
static int hf_ecat_cnt = - 1 ;
static int hf_ecat_cmd = - 1 ;
static int hf_ecat_idx = - 1 ;
static int hf_ecat_adp = - 1 ;
static int hf_ecat_ado = - 1 ;
static int hf_ecat_lad = - 1 ;
2013-02-10 20:52:21 +00:00
/* static int hf_ecat_len = -1; */
2007-10-14 15:44:05 +00:00
static int hf_ecat_int = - 1 ;
static int hf_ecat_syncman = - 1 ;
static int hf_ecat_syncman_start = - 1 ;
static int hf_ecat_syncman_len = - 1 ;
static int hf_ecat_syncman_flags = - 1 ;
static int hf_ecat_syncman_flag0 = - 1 ;
static int hf_ecat_syncman_flag1 = - 1 ;
static int hf_ecat_syncman_flag2 = - 1 ;
static int hf_ecat_syncman_flag4 = - 1 ;
static int hf_ecat_syncman_flag5 = - 1 ;
static int hf_ecat_syncman_flag8 = - 1 ;
static int hf_ecat_syncman_flag9 = - 1 ;
static int hf_ecat_syncman_flag10 = - 1 ;
static int hf_ecat_syncman_flag11 = - 1 ;
static int hf_ecat_syncman_flag12 = - 1 ;
static int hf_ecat_syncman_flag13 = - 1 ;
static int hf_ecat_syncman_flag16 = - 1 ;
static int hf_ecat_fmmu = - 1 ;
static int hf_ecat_fmmu_lstart = - 1 ;
static int hf_ecat_fmmu_llen = - 1 ;
static int hf_ecat_fmmu_lstartbit = - 1 ;
static int hf_ecat_fmmu_lendbit = - 1 ;
static int hf_ecat_fmmu_pstart = - 1 ;
static int hf_ecat_fmmu_pstartbit = - 1 ;
static int hf_ecat_fmmu_type = - 1 ;
static int hf_ecat_fmmu_typeread = - 1 ;
static int hf_ecat_fmmu_typewrite = - 1 ;
static int hf_ecat_fmmu_active = - 1 ;
static int hf_ecat_fmmu_active0 = - 1 ;
static int hf_ecat_sub_dc_diff_da [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_dc_diff_bd [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_dc_diff_cb [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_dc_diff_cd [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_dc_diff_ba [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_sub_dc_diff_ca [ 10 ] = { - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 } ;
static int hf_ecat_dc_diff_da = - 1 ;
static int hf_ecat_dc_diff_bd = - 1 ;
static int hf_ecat_dc_diff_cb = - 1 ;
static int hf_ecat_dc_diff_cd = - 1 ;
static int hf_ecat_dc_diff_ba = - 1 ;
static int hf_ecat_dc_diff_ca = - 1 ;
2008-03-05 20:42:58 +00:00
static int hf_ecat_length_len = - 1 ;
static int hf_ecat_length_r = - 1 ;
static int hf_ecat_length_c = - 1 ;
static int hf_ecat_length_m = - 1 ;
static int hf_ecat_padding = - 1 ;
2007-10-14 15:44:05 +00:00
2008-03-05 20:42:58 +00:00
static const value_string EcCmdShort [ ] =
2007-10-14 15:44:05 +00:00
{
2008-03-05 20:42:58 +00:00
{ 0 , " NOP " } ,
{ 1 , " APRD " } ,
{ 2 , " APWR " } ,
{ 3 , " APRW " } ,
{ 4 , " FPRD " } ,
{ 5 , " FPWR " } ,
{ 6 , " FPRW " } ,
{ 7 , " BRD " } ,
{ 8 , " BWR " } ,
{ 9 , " BRW " } ,
{ 10 , " LRD " } ,
{ 11 , " LWR " } ,
{ 12 , " LRW " } ,
{ 13 , " ARMW " } ,
{ 14 , " FRMW " } ,
{ 255 , " EXT " } ,
2007-10-14 15:44:05 +00:00
{ 0 , NULL }
} ;
2008-03-05 20:42:58 +00:00
static const value_string EcCmdLong [ ] =
{
{ 0 , " No operation " } ,
2009-07-07 11:13:22 +00:00
{ 1 , " Auto Increment Physical Read " } ,
{ 2 , " Auto Increment Physical Write " } ,
{ 3 , " Auto Increment Physical ReadWrite " } ,
{ 4 , " Configured address Physical Read " } ,
{ 5 , " Configured address Physical Write " } ,
{ 6 , " Configured address Physical ReadWrite " } ,
{ 7 , " Broadcast Read " } ,
{ 8 , " Broadcast Write " } ,
{ 9 , " Broadcast ReadWrite " } ,
{ 10 , " Logical Read " } ,
{ 11 , " Logical Write " } ,
{ 12 , " Logical ReadWrite " } ,
{ 13 , " Auto Increment Physical Read Multiple Write " } ,
{ 14 , " Configured Address Physical Read Multiple Write " } ,
2008-03-05 20:42:58 +00:00
{ 255 , " EXT " } ,
{ 0 , NULL }
} ;
static const value_string ecat_subframe_reserved_vals [ ] =
{
{ 0 , " Valid " } ,
{ 0 , NULL }
} ;
static const value_string ecat_subframe_circulating_vals [ ] =
{
{ 0 , " Frame is not circulating " } ,
{ 1 , " Frame has circulated once " } ,
{ 0 , NULL }
} ;
static const value_string ecat_subframe_more_vals [ ] =
{
{ 0 , " Last EtherCAT datagram " } ,
{ 1 , " More EtherCAT datagrams will follow " } ,
{ 0 , NULL }
} ;
2007-10-14 15:44:05 +00:00
static const true_false_string tfs_ecat_fmmu_typeread =
{
" Read in use " , " Read ignore "
} ;
static const true_false_string tfs_ecat_fmmu_typewrite =
{
" Write in use " , " Write ignore "
} ;
static const true_false_string tfs_ecat_fmmu_active =
{
" Enabled " , " Disabled "
} ;
static const true_false_string tfs_ecat_syncman_flag0 =
{
" OPMODE xx " , " OPMODE xx "
} ;
static const true_false_string tfs_ecat_syncman_flag1 =
{
" 00: 3-Buf, 01: 3-Buf (Mon.), 10: 1-Buf " , " 00: 3-Buf, 01: 3-Buf (Mon.), 10: 1-Buf " ,
} ;
static const true_false_string tfs_ecat_syncman_flag2 =
{
" Write " , " Read "
} ;
static const true_false_string tfs_ecat_syncman_flag4 =
{
" IRQ ECAT enabled " , " IRQ ECAT disabled "
} ;
static const true_false_string tfs_ecat_syncman_flag5 =
{
" IRQ PDI enabled " , " IRQ PDI disabled "
} ;
static const true_false_string tfs_ecat_syncman_flag8 =
{
" IRQ Write 1 " , " IRQ Write 0 "
} ;
static const true_false_string tfs_ecat_syncman_flag9 =
{
" IRQ Read 1 " , " IRQ Read 0 "
} ;
static const true_false_string tfs_ecat_syncman_flag10 =
{
" Watchdog " , " No Watchdog "
} ;
static const true_false_string tfs_ecat_syncman_flag11 =
{
" 1-Buf written " , " 1-Buf read "
} ;
static const true_false_string tfs_ecat_syncman_flag12 =
{
" Buffer Status xx " , " Buffer Status xx "
} ;
static const true_false_string tfs_ecat_syncman_flag13 =
{
" 00: 1.Buf, 01: 2.Buf, 10: 3.Buf " , " 00: 1.Buf, 01: 2.Buf, 10: 3.Buf "
} ;
static const true_false_string tfs_ecat_syncman_flag16 =
{
2008-01-10 22:19:53 +00:00
" SyncMan enabled " , " SyncMan disabled " ,
2007-10-14 15:44:05 +00:00
} ;
2008-03-05 20:42:58 +00:00
static const char * convertEcCmdToText ( int cmd , const value_string ec_cmd [ ] )
2007-10-14 15:44:05 +00:00
{
2008-03-05 20:42:58 +00:00
return val_to_str ( cmd , ec_cmd , " <UNKNOWN: %d> " ) ;
2007-10-14 15:44:05 +00:00
}
# define ENDOF(p) ((p)+1) /* pointer to end of *p*/
typedef enum
{
EC_CMD_TYPE_NOP = 0 ,
EC_CMD_TYPE_APRD = 1 ,
EC_CMD_TYPE_APWR = 2 ,
EC_CMD_TYPE_APRW = 3 ,
EC_CMD_TYPE_FPRD = 4 ,
EC_CMD_TYPE_FPWR = 5 ,
EC_CMD_TYPE_FPRW = 6 ,
EC_CMD_TYPE_BRD = 7 ,
EC_CMD_TYPE_BWR = 8 ,
EC_CMD_TYPE_BRW = 9 ,
EC_CMD_TYPE_LRD = 10 ,
EC_CMD_TYPE_LWR = 11 ,
EC_CMD_TYPE_LRW = 12 ,
EC_CMD_TYPE_ARMW = 13 ,
EC_CMD_TYPE_FRMW = 14 ,
EC_CMD_TYPE_EXT = 255
} EC_CMD_TYPE ;
static void init_EcParserHDR ( EcParserHDR * pHdr , tvbuff_t * tvb , gint offset )
{
pHdr - > cmd = tvb_get_guint8 ( tvb , offset + + ) ;
pHdr - > idx = tvb_get_guint8 ( tvb , offset + + ) ;
2012-12-26 05:57:06 +00:00
pHdr - > anAddrUnion . a . adp = tvb_get_letohs ( tvb , offset ) ; offset + = ( int ) sizeof ( guint16 ) ;
pHdr - > anAddrUnion . a . ado = tvb_get_letohs ( tvb , offset ) ; offset + = ( int ) sizeof ( guint16 ) ;
pHdr - > len = tvb_get_letohs ( tvb , offset ) ; offset + = ( int ) sizeof ( guint16 ) ;
2007-10-14 15:44:05 +00:00
pHdr - > intr = tvb_get_letohs ( tvb , offset ) ;
}
static void init_dc_measure ( guint32 * pDC , tvbuff_t * tvb , gint offset )
{
int i ;
for ( i = 0 ; i < 4 ; i + + )
{
pDC [ i ] = tvb_get_letohl ( tvb , offset ) ;
2012-12-26 05:57:06 +00:00
offset + = ( int ) sizeof ( guint32 ) ;
2007-10-14 15:44:05 +00:00
}
}
static guint16 get_wc ( EcParserHDR * pHdr , tvbuff_t * tvb , gint offset )
{
return tvb_get_letohs ( tvb , offset + EcParserHDR_Len + ( pHdr - > len & 0x07ff ) ) ;
}
static guint16 get_cmd_len ( EcParserHDR * pHdr )
{
return ( EcParserHDR_Len + ( pHdr - > len & 0x07ff ) + sizeof ( guint16 ) ) ; /*Header + data + wc*/
}
static void EcSummaryFormater ( guint32 datalength , tvbuff_t * tvb , gint offset , char * szText , gint nMax )
{
guint nSub = 0 ;
guint nLen = 0 ;
guint8 nCmds [ 4 ] ;
guint nLens [ 4 ] ;
EcParserHDR ecFirst ;
EcParserHDR ecParser ;
guint suboffset = 0 ;
init_EcParserHDR ( & ecFirst , tvb , offset ) ;
while ( suboffset < datalength )
{
PEcParserHDR pEcParser ;
if ( nSub > 0 )
{
init_EcParserHDR ( & ecParser , tvb , offset + suboffset ) ;
pEcParser = & ecParser ;
}
else
pEcParser = & ecFirst ;
if ( nSub < 4 )
{
nCmds [ nSub ] = pEcParser - > cmd ;
nLens [ nSub ] = pEcParser - > len & 0x07ff ;
}
nSub + + ;
nLen + = ( pEcParser - > len & 0x07ff ) ;
/* bit 14 -- roundtrip */
if ( ( pEcParser - > len & 0x8000 ) = = 0 )
break ;
suboffset + = get_cmd_len ( pEcParser ) ;
}
if ( nSub = = 1 )
{
guint16 len = ecFirst . len & 0x07ff ;
guint16 cnt = get_wc ( & ecFirst , tvb , offset ) ;
2008-03-05 20:42:58 +00:00
g_snprintf ( szText , nMax , " '%s': Len: %d, Adp 0x%x, Ado 0x%x, Wc %d " ,
convertEcCmdToText ( ecFirst . cmd , EcCmdShort ) , len , ecFirst . anAddrUnion . a . adp , ecFirst . anAddrUnion . a . ado , cnt ) ;
2007-10-14 15:44:05 +00:00
}
else if ( nSub = = 2 )
{
2008-03-05 20:42:58 +00:00
g_snprintf ( szText , nMax , " %d Cmds, '%s': len %d, '%s': len %d " ,
nSub , convertEcCmdToText ( nCmds [ 0 ] , EcCmdShort ) , nLens [ 0 ] , convertEcCmdToText ( nCmds [ 1 ] , EcCmdShort ) , nLens [ 1 ] ) ;
2007-10-14 15:44:05 +00:00
}
else if ( nSub = = 3 )
{
2008-03-05 20:42:58 +00:00
g_snprintf ( szText , nMax , " %d Cmds, '%s': len %d, '%s': len %d, '%s': len %d " ,
nSub , convertEcCmdToText ( nCmds [ 0 ] , EcCmdShort ) , nLens [ 0 ] , convertEcCmdToText ( nCmds [ 1 ] , EcCmdShort ) , nLens [ 1 ] , convertEcCmdToText ( nCmds [ 2 ] , EcCmdShort ) , nLens [ 2 ] ) ;
2007-10-14 15:44:05 +00:00
}
else if ( nSub = = 4 )
{
2008-03-05 20:42:58 +00:00
g_snprintf ( szText , nMax , " %d Cmds, '%s': len %d, '%s': len %d, '%s': len %d, '%s': len %d " ,
nSub , convertEcCmdToText ( nCmds [ 0 ] , EcCmdShort ) , nLens [ 0 ] , convertEcCmdToText ( nCmds [ 1 ] , EcCmdShort ) , nLens [ 1 ] , convertEcCmdToText ( nCmds [ 2 ] , EcCmdShort ) , nLens [ 2 ] , convertEcCmdToText ( nCmds [ 3 ] , EcCmdShort ) , nLens [ 3 ] ) ;
2007-10-14 15:44:05 +00:00
}
else
2008-01-10 22:19:53 +00:00
g_snprintf ( szText , nMax , " %d Cmds, SumLen %d, '%s'... " ,
2008-03-05 20:42:58 +00:00
nSub , nLen , convertEcCmdToText ( ecFirst . cmd , EcCmdShort ) ) ;
2007-10-14 15:44:05 +00:00
}
2009-07-07 11:13:22 +00:00
static void EcCmdFormatter ( guint8 cmd , char * szText , gint nMax )
{
2011-03-24 21:19:39 +00:00
gint idx = 0 ;
2013-03-29 00:26:23 +00:00
const gchar * szCmd = try_val_to_str_idx ( ( guint32 ) cmd , EcCmdLong , & idx ) ;
2009-07-07 11:13:22 +00:00
2011-03-24 21:19:39 +00:00
if ( idx ! = - 1 )
g_snprintf ( szText , nMax , " Cmd : %d (%s) " , cmd , szCmd ) ;
else
g_snprintf ( szText , nMax , " Cmd : %d (Unknown command) " , cmd ) ;
2009-07-07 11:13:22 +00:00
}
2008-03-05 20:42:58 +00:00
static void EcSubFormatter ( tvbuff_t * tvb , gint offset , char * szText , gint nMax )
2007-10-14 15:44:05 +00:00
{
EcParserHDR ecParser ;
guint16 len , cnt ;
init_EcParserHDR ( & ecParser , tvb , offset ) ;
len = ecParser . len & 0x07ff ;
cnt = get_wc ( & ecParser , tvb , offset ) ;
switch ( ecParser . cmd )
{
case EC_CMD_TYPE_NOP :
case EC_CMD_TYPE_APRD :
case EC_CMD_TYPE_APWR :
case EC_CMD_TYPE_APRW :
case EC_CMD_TYPE_FPRD :
case EC_CMD_TYPE_FPWR :
case EC_CMD_TYPE_FPRW :
case EC_CMD_TYPE_BRD :
case EC_CMD_TYPE_BWR :
case EC_CMD_TYPE_BRW :
case EC_CMD_TYPE_ARMW :
case EC_CMD_TYPE_FRMW :
2008-03-05 20:42:58 +00:00
g_snprintf ( szText , nMax , " EtherCAT datagram: Cmd: '%s' (%d), Len: %d, Adp 0x%x, Ado 0x%x, Cnt %d " ,
convertEcCmdToText ( ecParser . cmd , EcCmdShort ) , ecParser . cmd , len , ecParser . anAddrUnion . a . adp , ecParser . anAddrUnion . a . ado , cnt ) ;
2007-10-14 15:44:05 +00:00
break ;
case EC_CMD_TYPE_LRD :
case EC_CMD_TYPE_LWR :
case EC_CMD_TYPE_LRW :
2008-03-05 20:42:58 +00:00
g_snprintf ( szText , nMax , " EtherCAT datagram: Cmd: '%s' (%d), Len: %d, Addr 0x%x, Cnt %d " ,
convertEcCmdToText ( ecParser . cmd , EcCmdShort ) , ecParser . cmd , len , ecParser . anAddrUnion . addr , cnt ) ;
2007-10-14 15:44:05 +00:00
break ;
case EC_CMD_TYPE_EXT :
2008-03-05 20:42:58 +00:00
g_snprintf ( szText , nMax , " EtherCAT datagram: Cmd: 'EXT' (%d), Len: %d " , ecParser . cmd , len ) ;
2007-10-14 15:44:05 +00:00
break ;
default :
2008-03-05 20:42:58 +00:00
g_snprintf ( szText , nMax , " EtherCAT datagram: Cmd: 'Unknown' (%d), Len: %d " , ecParser . cmd , len ) ;
2007-10-14 15:44:05 +00:00
}
}
/* Ethercat Datagram */
static void dissect_ecat_datagram ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree )
{
tvbuff_t * next_tvb ;
2008-05-14 11:02:39 +00:00
proto_item * ti , * aitem = NULL ;
2008-03-05 20:42:58 +00:00
proto_tree * ecat_datagrams_tree = NULL ;
guint offset = 0 ;
2007-10-14 15:44:05 +00:00
char szText [ 200 ] ;
int nMax = sizeof ( szText ) - 1 ;
guint b ;
2008-03-05 20:42:58 +00:00
guint ecLength = 0 ;
2007-10-14 15:44:05 +00:00
guint subCount = 0 ;
2008-03-05 20:42:58 +00:00
const guint datagram_length = tvb_length_remaining ( tvb , offset ) ;
guint datagram_padding_bytes = 0 ;
EcParserHDR ecHdr ;
2007-10-14 15:44:05 +00:00
2009-08-09 06:26:46 +00:00
col_set_str ( pinfo - > cinfo , COL_PROTOCOL , " ECAT " ) ;
2007-10-14 15:44:05 +00:00
2009-08-09 07:36:13 +00:00
col_clear ( pinfo - > cinfo , COL_INFO ) ;
2007-10-14 15:44:05 +00:00
2008-03-05 20:42:58 +00:00
/* If the data portion of an EtherCAT datagram is less than 44 bytes, then
it must have been padded with an additional n number of bytes to reach a
total Ethernet frame length of 64 bytes ( Ethernet header + Ethernet Data +
FCS ) . Hence at least 44 bytes data shall always be available in any
EtherCAT datagram . */
2008-07-14 19:56:37 +00:00
/* tvb_ensure_bytes_exist(tvb, offset, 44);
this is not correct , because the frame might have been captured before the
os added the padding bytes . E . g . in Windows the frames are captured on the
protocol layer . When another protocol driver sends a frame this frame does
2011-03-24 21:19:39 +00:00
not include the padding bytes .
2008-07-14 19:56:37 +00:00
*/
2008-03-05 20:42:58 +00:00
/* Count the length of the individual EtherCAT datagrams (sub datagrams)
that are part of this EtherCAT frame . Stop counting when the current
sub datagram header tells that there are no more sub datagrams or when
there is no more data available in the PDU . */
do
2007-10-14 15:44:05 +00:00
{
init_EcParserHDR ( & ecHdr , tvb , ecLength ) ;
2008-03-05 20:42:58 +00:00
ecLength + = get_cmd_len ( & ecHdr ) ;
} while ( ( ecLength < datagram_length ) & &
( ecHdr . len & 0x8000 ) ) ;
/* Calculate the amount of padding data available in the PDU */
datagram_padding_bytes = datagram_length - ecLength ;
2008-01-10 22:19:53 +00:00
2007-10-14 15:44:05 +00:00
EcSummaryFormater ( ecLength , tvb , offset , szText , nMax ) ;
2010-04-05 20:04:52 +00:00
col_append_str ( pinfo - > cinfo , COL_INFO , szText ) ;
2008-01-10 22:19:53 +00:00
2007-10-14 15:44:05 +00:00
if ( tree )
{
2008-03-05 20:42:58 +00:00
/* Create the EtherCAT datagram(s) subtree */
2011-10-21 02:10:19 +00:00
ti = proto_tree_add_item ( tree , proto_ecat_datagram , tvb , 0 , - 1 , ENC_NA ) ;
2008-03-05 20:42:58 +00:00
ecat_datagrams_tree = proto_item_add_subtree ( ti , ett_ecat ) ;
2007-10-14 15:44:05 +00:00
2008-03-05 20:42:58 +00:00
proto_item_append_text ( ti , " : %s " , szText ) ;
2007-10-14 15:44:05 +00:00
}
2008-03-05 20:42:58 +00:00
/* Dissect all sub frames of this EtherCAT PDU */
do
2007-10-14 15:44:05 +00:00
{
2008-03-05 20:42:58 +00:00
proto_tree * ecat_datagram_tree = NULL , * ecat_header_tree = NULL , * ecat_fmmu_tree = NULL ,
* ecat_fmmu_active_tree = NULL , * ecat_fmmu_type_tree = NULL , * ecat_syncman_tree = NULL ,
* ecat_syncflag_tree = NULL , * ecat_dc_tree = NULL ;
2011-03-24 21:19:39 +00:00
proto_item * hidden_item ;
2007-10-14 15:44:05 +00:00
gint bMBox = FALSE ;
guint32 subsize ;
guint32 suboffset ;
guint32 len ;
2008-03-05 20:42:58 +00:00
ETHERCAT_MBOX_HEADER mbox ;
2007-10-14 15:44:05 +00:00
suboffset = offset ;
init_EcParserHDR ( & ecHdr , tvb , suboffset ) ;
subsize = get_cmd_len ( & ecHdr ) ;
2008-03-05 20:42:58 +00:00
len = ecHdr . len & 0x07ff ;
2007-10-14 15:44:05 +00:00
2007-10-15 18:39:58 +00:00
if ( len > = sizeof ( ETHERCAT_MBOX_HEADER_LEN ) & &
2008-03-05 20:42:58 +00:00
( ecHdr . cmd = = EC_CMD_TYPE_FPWR | | ecHdr . cmd = = EC_CMD_TYPE_FPRD | | ecHdr . cmd = = EC_CMD_TYPE_APWR | | ecHdr . cmd = = EC_CMD_TYPE_APRD ) & &
ecHdr . anAddrUnion . a . ado > = 0x1000
2007-10-14 15:44:05 +00:00
)
{
init_mbx_header ( & mbox , tvb , suboffset + EcParserHDR_Len ) ;
2008-01-10 22:19:53 +00:00
switch ( mbox . aControlUnion . v . Type )
2007-10-14 15:44:05 +00:00
{
case ETHERCAT_MBOX_TYPE_EOE :
case ETHERCAT_MBOX_TYPE_ADS :
case ETHERCAT_MBOX_TYPE_FOE :
case ETHERCAT_MBOX_TYPE_COE :
case ETHERCAT_MBOX_TYPE_SOE :
2007-10-15 18:39:58 +00:00
if ( /*pMBox->Length > 0 &&*/ mbox . Length < = 1500 /*&& pMBox->Length+sizeof(ETHERCAT_MBOX_HEADER_LEN) >= len*/ )
2007-10-14 15:44:05 +00:00
{
bMBox = TRUE ;
}
break ;
}
}
if ( tree )
{
2008-03-05 20:42:58 +00:00
/* Create the sub tree for the current datagram */
EcSubFormatter ( tvb , suboffset , szText , nMax ) ;
2008-10-31 17:27:51 +00:00
aitem = proto_tree_add_text ( ecat_datagrams_tree , tvb , suboffset , subsize , " %s " , szText ) ;
2008-03-05 20:42:58 +00:00
ecat_datagram_tree = proto_item_add_subtree ( aitem , ett_ecat_datagram_subtree ) ;
2007-10-14 15:44:05 +00:00
2008-03-05 20:42:58 +00:00
/* Create a subtree placeholder for the Header */
aitem = proto_tree_add_text ( ecat_datagram_tree , tvb , offset , EcParserHDR_Len , " Header " ) ;
2007-10-14 15:44:05 +00:00
ecat_header_tree = proto_item_add_subtree ( aitem , ett_ecat_header ) ;
2008-03-05 20:42:58 +00:00
2011-03-24 21:19:39 +00:00
EcCmdFormatter ( ecHdr . cmd , szText , nMax ) ;
2011-10-06 14:46:34 +00:00
aitem = proto_tree_add_item ( ecat_header_tree , hf_ecat_cmd , tvb , suboffset , sizeof ( ecHdr . cmd ) , ENC_LITTLE_ENDIAN ) ;
2009-07-07 11:13:22 +00:00
proto_item_set_text ( aitem , " %s " , szText ) ;
2008-05-05 18:58:53 +00:00
if ( subCount < 10 ) {
2012-05-11 18:57:51 +00:00
aitem = proto_tree_add_item ( ecat_header_tree , hf_ecat_sub_cmd [ subCount ] , tvb , suboffset , sizeof ( ecHdr . cmd ) , ENC_LITTLE_ENDIAN ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( aitem ) ;
}
2008-05-05 18:58:53 +00:00
2012-12-26 05:57:06 +00:00
suboffset + = ( int ) sizeof ( ecHdr . cmd ) ;
2007-10-14 15:44:05 +00:00
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_header_tree , hf_ecat_idx , tvb , suboffset , sizeof ( ecHdr . idx ) , ENC_LITTLE_ENDIAN ) ;
2008-05-05 18:58:53 +00:00
if ( subCount < 10 ) {
2012-05-11 18:57:51 +00:00
aitem = proto_tree_add_item ( ecat_header_tree , hf_ecat_sub_idx [ subCount ] , tvb , suboffset , sizeof ( ecHdr . idx ) , ENC_LITTLE_ENDIAN ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( aitem ) ;
}
2012-12-26 05:57:06 +00:00
suboffset + = ( int ) sizeof ( ecHdr . idx ) ;
2007-10-14 15:44:05 +00:00
switch ( ecHdr . cmd )
{
case 10 :
case 11 :
case 12 :
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_header_tree , hf_ecat_lad , tvb , suboffset , sizeof ( ecHdr . anAddrUnion . a . adp ) + sizeof ( ecHdr . anAddrUnion . a . ado ) , ENC_LITTLE_ENDIAN ) ;
2008-05-05 18:58:53 +00:00
if ( subCount < 10 ) {
2012-05-11 18:57:51 +00:00
aitem = proto_tree_add_item ( ecat_header_tree , hf_ecat_sub_lad [ subCount ] , tvb , suboffset , sizeof ( ecHdr . anAddrUnion . a . adp ) + sizeof ( ecHdr . anAddrUnion . a . ado ) , ENC_LITTLE_ENDIAN ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( aitem ) ;
}
2007-10-14 15:44:05 +00:00
2012-12-26 05:57:06 +00:00
suboffset + = ( int ) ( ( sizeof ( ecHdr . anAddrUnion . a . adp ) + sizeof ( ecHdr . anAddrUnion . a . ado ) ) ) ;
2007-10-14 15:44:05 +00:00
break ;
default :
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_header_tree , hf_ecat_adp , tvb , suboffset , sizeof ( ecHdr . anAddrUnion . a . adp ) , ENC_LITTLE_ENDIAN ) ;
2008-05-05 18:58:53 +00:00
if ( subCount < 10 ) {
2012-05-11 18:57:51 +00:00
aitem = proto_tree_add_item ( ecat_header_tree , hf_ecat_sub_adp [ subCount ] , tvb , suboffset , sizeof ( ecHdr . anAddrUnion . a . adp ) , ENC_LITTLE_ENDIAN ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( aitem ) ;
}
2007-10-14 15:44:05 +00:00
2012-12-26 05:57:06 +00:00
suboffset + = ( int ) sizeof ( ecHdr . anAddrUnion . a . adp ) ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_header_tree , hf_ecat_ado , tvb , suboffset , sizeof ( ecHdr . anAddrUnion . a . ado ) , ENC_LITTLE_ENDIAN ) ;
2008-05-05 18:58:53 +00:00
if ( subCount < 10 ) {
2012-05-11 18:57:51 +00:00
aitem = proto_tree_add_item ( ecat_header_tree , hf_ecat_sub_ado [ subCount ] , tvb , suboffset , sizeof ( ecHdr . anAddrUnion . a . ado ) , ENC_LITTLE_ENDIAN ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( aitem ) ;
}
2007-10-14 15:44:05 +00:00
2012-12-26 05:57:06 +00:00
suboffset + = ( int ) sizeof ( ecHdr . anAddrUnion . a . ado ) ;
2007-10-14 15:44:05 +00:00
}
2008-03-05 20:42:58 +00:00
{
proto_tree * length_sub_tree ;
/* Add information about the length field (11 bit length, 3 bits
reserved , 1 bit circulating frame and 1 bit more in a sub tree */
aitem = proto_tree_add_text ( ecat_header_tree , tvb , suboffset , sizeof ( ecHdr . len ) ,
" Length : %d (0x%x) - %s - %s " ,
len , len , ecHdr . len & 0x4000 ? " Roundtrip " : " No Roundtrip " , ecHdr . len & 0x8000 ? " More Follows... " : " Last Sub Command " ) ;
length_sub_tree = proto_item_add_subtree ( aitem , ett_ecat_length ) ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( length_sub_tree , hf_ecat_length_len , tvb , suboffset , sizeof ( ecHdr . len ) , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( length_sub_tree , hf_ecat_length_r , tvb , suboffset , sizeof ( ecHdr . len ) , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( length_sub_tree , hf_ecat_length_c , tvb , suboffset , sizeof ( ecHdr . len ) , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( length_sub_tree , hf_ecat_length_m , tvb , suboffset , sizeof ( ecHdr . len ) , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
2012-12-26 05:57:06 +00:00
suboffset + = ( int ) sizeof ( ecHdr . len ) ;
2008-03-05 20:42:58 +00:00
}
2007-10-14 15:44:05 +00:00
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_header_tree , hf_ecat_int , tvb , suboffset , sizeof ( ecHdr . intr ) , ENC_LITTLE_ENDIAN ) ;
2012-12-26 05:57:06 +00:00
suboffset + = ( int ) sizeof ( ecHdr . intr ) ;
2007-10-14 15:44:05 +00:00
}
else
{
suboffset + = EcParserHDR_Len ;
}
2008-02-06 22:05:10 +00:00
if ( ecHdr . cmd > = 1 & & ecHdr . cmd < = 9 & & ecHdr . anAddrUnion . a . ado > = 0x600 & & ecHdr . anAddrUnion . a . ado < 0x700 & & ( ecHdr . anAddrUnion . a . ado % 16 ) = = 0 & & ( len % 16 ) = = 0 )
2007-10-14 15:44:05 +00:00
{
if ( tree )
{
2008-03-05 20:42:58 +00:00
/* Fieldbus Memory Management Units (FMMU) */
2007-10-14 15:44:05 +00:00
for ( b = 0 ; b < MIN ( 16 , len / 16 ) ; b + + )
{
2011-10-05 01:00:06 +00:00
aitem = proto_tree_add_item ( ecat_datagram_tree , hf_ecat_fmmu , tvb , suboffset , 16 , ENC_NA ) ;
2008-03-05 20:42:58 +00:00
proto_item_set_text ( aitem , " Fieldbus Memory Management Units (FMMU) " ) ;
2007-10-14 15:44:05 +00:00
ecat_fmmu_tree = proto_item_add_subtree ( aitem , ett_ecat_fmmu ) ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_fmmu_tree , hf_ecat_fmmu_lstart , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 4 ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_fmmu_tree , hf_ecat_fmmu_llen , tvb , suboffset , 2 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 2 ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_fmmu_tree , hf_ecat_fmmu_lstartbit , tvb , suboffset , 1 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 1 ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_fmmu_tree , hf_ecat_fmmu_lendbit , tvb , suboffset , 1 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 1 ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_fmmu_tree , hf_ecat_fmmu_pstart , tvb , suboffset , 2 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 2 ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_fmmu_tree , hf_ecat_fmmu_pstartbit , tvb , suboffset , 1 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 1 ;
2011-10-06 14:46:34 +00:00
aitem = proto_tree_add_item ( ecat_fmmu_tree , hf_ecat_fmmu_type , tvb , suboffset , 1 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
ecat_fmmu_type_tree = proto_item_add_subtree ( aitem , ett_ecat_fmmu_type ) ;
2011-10-10 00:53:55 +00:00
proto_tree_add_item ( ecat_fmmu_type_tree , hf_ecat_fmmu_typeread , tvb , suboffset , 1 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_fmmu_type_tree , hf_ecat_fmmu_typewrite , tvb , suboffset , 1 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 1 ;
2011-10-06 14:46:34 +00:00
aitem = proto_tree_add_item ( ecat_fmmu_tree , hf_ecat_fmmu_active , tvb , suboffset , 1 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
ecat_fmmu_active_tree = proto_item_add_subtree ( aitem , ett_ecat_fmmu_active ) ;
2011-10-10 00:53:55 +00:00
proto_tree_add_item ( ecat_fmmu_active_tree , hf_ecat_fmmu_active0 , tvb , suboffset , 1 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 4 ;
}
if ( len > 0x100 )
{
len - = 0x100 ;
2008-03-05 20:42:58 +00:00
for ( b = 0 ; b < MIN ( 32 , len / 8 ) ; b + + )
2007-10-14 15:44:05 +00:00
{
2011-10-05 01:00:06 +00:00
aitem = proto_tree_add_item ( ecat_datagram_tree , hf_ecat_syncman , tvb , suboffset , 8 , ENC_NA ) ;
2007-10-14 15:44:05 +00:00
proto_item_set_text ( aitem , " SyncManager " ) ;
ecat_syncman_tree = proto_item_add_subtree ( aitem , ett_ecat_syncman ) ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_syncman_tree , hf_ecat_syncman_start , tvb , suboffset , 2 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 2 ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_syncman_tree , hf_ecat_syncman_len , tvb , suboffset , 2 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 2 ;
2011-10-06 14:46:34 +00:00
aitem = proto_tree_add_item ( ecat_syncman_tree , hf_ecat_syncman_flags , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
ecat_syncflag_tree = proto_item_add_subtree ( aitem , ett_ecat_syncflag ) ;
2011-10-10 00:53:55 +00:00
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag0 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag1 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag2 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag4 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag5 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag8 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag9 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag10 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag11 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag12 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag13 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag16 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 4 ;
}
}
}
}
2008-02-06 22:05:10 +00:00
else if ( ecHdr . cmd > = 1 & & ecHdr . cmd < = 9 & & ecHdr . anAddrUnion . a . ado > = 0x800 & & ecHdr . anAddrUnion . a . ado < 0x880 & & ( ecHdr . anAddrUnion . a . ado % 8 ) = = 0 & & ( len % 8 ) = = 0 )
2007-10-14 15:44:05 +00:00
{
if ( tree )
{
2008-03-05 20:42:58 +00:00
/* SyncManager */
for ( b = 0 ; b < MIN ( 32 , len / 8 ) ; b + + )
2007-10-14 15:44:05 +00:00
{
2011-10-05 01:00:06 +00:00
aitem = proto_tree_add_item ( ecat_datagram_tree , hf_ecat_syncman , tvb , suboffset , 8 , ENC_NA ) ;
2007-10-14 15:44:05 +00:00
proto_item_set_text ( aitem , " SyncManager " ) ;
ecat_syncman_tree = proto_item_add_subtree ( aitem , ett_ecat_syncman ) ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_syncman_tree , hf_ecat_syncman_start , tvb , suboffset , 2 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 2 ;
2011-10-06 14:46:34 +00:00
proto_tree_add_item ( ecat_syncman_tree , hf_ecat_syncman_len , tvb , suboffset , 2 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 2 ;
2011-10-06 14:46:34 +00:00
aitem = proto_tree_add_item ( ecat_syncman_tree , hf_ecat_syncman_flags , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
ecat_syncflag_tree = proto_item_add_subtree ( aitem , ett_ecat_syncflag ) ;
2011-10-10 00:53:55 +00:00
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag0 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag1 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag2 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag4 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag5 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag8 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag9 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag10 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag11 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag12 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag13 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
proto_tree_add_item ( ecat_syncflag_tree , hf_ecat_syncman_flag16 , tvb , suboffset , 4 , ENC_LITTLE_ENDIAN ) ;
2007-10-14 15:44:05 +00:00
suboffset + = 4 ;
}
}
}
2008-02-06 22:05:10 +00:00
else if ( ( ecHdr . cmd = = 1 | | ecHdr . cmd = = 4 ) & & ecHdr . anAddrUnion . a . ado = = 0x900 & & ecHdr . len > = 16 )
2007-10-14 15:44:05 +00:00
{
if ( tree )
{
guint32 pDC [ 4 ] ;
init_dc_measure ( pDC , tvb , suboffset ) ;
2008-03-05 20:42:58 +00:00
/* Allow sub dissectors to have a chance with this data */
2012-09-11 08:26:48 +00:00
if ( ! dissector_try_heuristic ( heur_subdissector_list , tvb , pinfo , ecat_datagram_tree , NULL ) )
2008-03-05 20:42:58 +00:00
{
/* No sub dissector did recognize this data, dissect it as data only */
2011-10-05 01:00:06 +00:00
aitem = proto_tree_add_item ( ecat_datagram_tree , hf_ecat_data , tvb , suboffset , ecHdr . len & 0x07ff , ENC_NA ) ;
2008-03-05 20:42:58 +00:00
ecat_dc_tree = proto_item_add_subtree ( aitem , ett_ecat_dc ) ;
}
else
{
/* A sub dissector handled the data, allow the rest of the
to add data to the correct place in the tree hierarchy . */
ecat_dc_tree = ecat_datagram_tree ;
}
2007-10-14 15:44:05 +00:00
2008-05-05 18:58:53 +00:00
if ( subCount < 10 ) {
2012-05-11 18:57:51 +00:00
aitem = proto_tree_add_item ( ecat_datagram_tree , hf_ecat_sub_data [ subCount ] , tvb , offset + EcParserHDR_Len , ecHdr . len & 0x07ff , ENC_NA ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( aitem ) ;
}
2007-10-14 15:44:05 +00:00
if ( pDC [ 3 ] ! = 0 )
{
2008-03-05 20:42:58 +00:00
proto_tree_add_uint ( ecat_dc_tree , hf_ecat_dc_diff_da , tvb , suboffset , 4 , pDC [ 3 ] - pDC [ 0 ] ) ;
2008-05-05 18:58:53 +00:00
if ( subCount < 10 ) {
2008-05-14 10:21:41 +00:00
hidden_item = proto_tree_add_uint ( ecat_dc_tree , hf_ecat_sub_dc_diff_da [ subCount ] , tvb , suboffset , 4 , pDC [ 3 ] - pDC [ 0 ] ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
}
2007-10-14 15:44:05 +00:00
if ( pDC [ 1 ] ! = 0 )
{
2008-03-05 20:42:58 +00:00
proto_tree_add_uint ( ecat_dc_tree , hf_ecat_dc_diff_bd , tvb , suboffset , 4 , pDC [ 1 ] - pDC [ 3 ] ) ;
2008-05-14 10:21:41 +00:00
if ( subCount < 10 ) {
2011-03-24 21:19:39 +00:00
hidden_item = proto_tree_add_uint ( ecat_dc_tree , hf_ecat_sub_dc_diff_bd [ subCount ] , tvb , suboffset , 4 , pDC [ 1 ] - pDC [ 3 ] ) ;
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
}
2007-10-14 15:44:05 +00:00
}
else if ( pDC [ 2 ] ! = 0 )
{
2008-03-05 20:42:58 +00:00
proto_tree_add_uint ( ecat_dc_tree , hf_ecat_dc_diff_cd , tvb , suboffset , 4 , pDC [ 2 ] - pDC [ 3 ] ) ;
2008-05-14 10:21:41 +00:00
if ( subCount < 10 ) {
hidden_item = proto_tree_add_uint ( ecat_dc_tree , hf_ecat_sub_dc_diff_cd [ subCount ] , tvb , suboffset , 4 , pDC [ 2 ] - pDC [ 3 ] ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
}
2007-10-14 15:44:05 +00:00
}
}
if ( pDC [ 1 ] ! = 0 )
{
2008-03-05 20:42:58 +00:00
proto_tree_add_uint ( ecat_dc_tree , hf_ecat_dc_diff_ba , tvb , suboffset , 4 , pDC [ 1 ] - pDC [ 0 ] ) ;
2008-05-14 10:21:41 +00:00
if ( subCount < 10 ) {
hidden_item = proto_tree_add_uint ( ecat_dc_tree , hf_ecat_sub_dc_diff_ba [ subCount ] , tvb , suboffset , 4 , pDC [ 1 ] - pDC [ 0 ] ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
}
2007-10-14 15:44:05 +00:00
if ( pDC [ 2 ] ! = 0 )
{
2008-03-05 20:42:58 +00:00
proto_tree_add_uint ( ecat_dc_tree , hf_ecat_dc_diff_cb , tvb , suboffset , 4 , pDC [ 2 ] - pDC [ 1 ] ) ;
2008-05-14 10:21:41 +00:00
if ( subCount < 10 ) {
hidden_item = proto_tree_add_uint ( ecat_dc_tree , hf_ecat_sub_dc_diff_cb [ subCount ] , tvb , suboffset , 4 , pDC [ 2 ] - pDC [ 1 ] ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
}
2007-10-14 15:44:05 +00:00
}
}
else if ( pDC [ 2 ] ! = 0 )
{
2008-03-05 20:42:58 +00:00
proto_tree_add_uint ( ecat_dc_tree , hf_ecat_dc_diff_ca , tvb , suboffset , 4 , pDC [ 2 ] - pDC [ 0 ] ) ;
2008-05-14 10:21:41 +00:00
if ( subCount < 10 ) {
hidden_item = proto_tree_add_uint ( ecat_dc_tree , hf_ecat_sub_dc_diff_ca [ subCount ] , tvb , suboffset , 4 , pDC [ 2 ] - pDC [ 0 ] ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
}
2007-10-14 15:44:05 +00:00
}
}
}
else if ( bMBox )
{
2008-03-05 20:42:58 +00:00
const guint MBoxLength = mbox . Length + 6 /* MBOX header length */ ;
next_tvb = tvb_new_subset ( tvb , suboffset , MBoxLength , MBoxLength ) ;
call_dissector ( ecat_mailbox_handle , next_tvb , pinfo , ecat_datagram_tree ) ;
2007-10-14 15:44:05 +00:00
if ( tree )
{
2008-03-05 20:42:58 +00:00
const guint startOfData = offset + EcParserHDR_Len + MBoxLength ;
2008-07-14 19:56:37 +00:00
const guint dataLength = ( ecHdr . len & 0x7ff ) - MBoxLength ;
if ( dataLength > 0 )
2008-03-05 20:42:58 +00:00
{
2008-07-14 19:56:37 +00:00
/* Allow sub dissectors to have a chance with this data */
2012-09-11 08:26:48 +00:00
if ( ! dissector_try_heuristic ( heur_subdissector_list , tvb , pinfo , ecat_datagram_tree , NULL ) )
2008-07-14 19:56:37 +00:00
{
/* No sub dissector did recognize this data, dissect it as data only */
2011-10-05 01:00:06 +00:00
proto_tree_add_item ( ecat_datagram_tree , hf_ecat_data , tvb , startOfData , dataLength , ENC_NA ) ;
2008-07-14 19:56:37 +00:00
}
2008-03-05 20:42:58 +00:00
2008-07-14 19:56:37 +00:00
if ( subCount < 10 ) {
2012-05-11 18:57:51 +00:00
aitem = proto_tree_add_item ( ecat_datagram_tree , hf_ecat_sub_data [ subCount ] , tvb , startOfData , dataLength , ENC_NA ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( aitem ) ;
}
2008-07-14 19:56:37 +00:00
}
2007-10-14 15:44:05 +00:00
}
}
else
{
if ( tree )
{
2008-03-05 20:42:58 +00:00
/* Allow sub dissectors to have a chance with this data */
2012-09-11 08:26:48 +00:00
if ( ! dissector_try_heuristic ( heur_subdissector_list , tvb , pinfo , ecat_datagram_tree , NULL ) )
2007-10-14 15:44:05 +00:00
{
2008-03-05 20:42:58 +00:00
/* No sub dissector did recognize this data, dissect it as data only */
2011-10-05 01:00:06 +00:00
proto_tree_add_item ( ecat_datagram_tree , hf_ecat_data , tvb , suboffset , ecHdr . len & 0x07ff , ENC_NA ) ;
2007-10-14 15:44:05 +00:00
}
2008-03-05 20:42:58 +00:00
2008-05-05 18:58:53 +00:00
if ( subCount < 10 ) {
2012-05-11 18:57:51 +00:00
aitem = proto_tree_add_item ( ecat_datagram_tree , hf_ecat_sub_data [ subCount ] , tvb , offset + EcParserHDR_Len , ecHdr . len & 0x07ff , ENC_NA ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( aitem ) ;
}
2007-10-14 15:44:05 +00:00
}
}
if ( tree )
{
2011-10-18 00:17:48 +00:00
proto_tree_add_item ( ecat_datagram_tree , hf_ecat_cnt , tvb , offset + EcParserHDR_Len + len , 2 , ENC_LITTLE_ENDIAN ) ;
2008-05-05 18:58:53 +00:00
if ( subCount < 10 ) {
2012-05-11 18:57:51 +00:00
aitem = proto_tree_add_item ( ecat_datagram_tree , hf_ecat_sub_cnt [ subCount ] , tvb , offset + EcParserHDR_Len + len , 2 , ENC_LITTLE_ENDIAN ) ;
2011-03-24 21:19:39 +00:00
PROTO_ITEM_SET_HIDDEN ( aitem ) ;
}
2007-10-14 15:44:05 +00:00
}
2008-01-10 22:19:53 +00:00
offset + = subsize ;
2007-10-14 15:44:05 +00:00
subCount + + ;
2008-03-05 20:42:58 +00:00
} while ( ( offset < datagram_length ) & &
( ecHdr . len & 0x8000 ) ) ;
/* Add information that states which portion of the PDU that is pad bytes.
These are added just to get an Ethernet frame size of at least 64 bytes ,
which is required by the protocol specification */
if ( datagram_padding_bytes > 0 )
{
2011-10-05 01:00:06 +00:00
proto_tree_add_item ( tree , hf_ecat_padding , tvb , offset , tvb_length_remaining ( tvb , offset ) , ENC_NA ) ;
2007-10-14 15:44:05 +00:00
}
}
void proto_register_ecat ( void )
{
static hf_register_info hf [ ] =
{
2008-01-10 22:19:53 +00:00
{ & hf_ecat_sub ,
2008-03-05 20:42:58 +00:00
{ " EtherCAT Frame " , " ecat.sub " , FT_BYTES , BASE_NONE , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2013-02-10 20:52:21 +00:00
#if 0
2008-01-10 22:19:53 +00:00
{ & hf_ecat_header ,
2011-03-24 21:19:39 +00:00
{ " eader " , " ecat.header " ,
2009-06-18 23:22:10 +00:00
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2013-02-10 20:52:21 +00:00
# endif
2007-10-14 15:44:05 +00:00
{ & hf_ecat_sub_data [ 0 ] ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.sub1.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_data [ 1 ] ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.sub2.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_data [ 2 ] ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.sub3.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_data [ 3 ] ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.sub4.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_data [ 4 ] ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.sub5.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_data [ 5 ] ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.sub6.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_data [ 6 ] ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.sub7.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_data [ 7 ] ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.sub8.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_data [ 8 ] ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.sub9.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_data [ 9 ] ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.sub10.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2008-01-10 22:19:53 +00:00
{ & hf_ecat_data ,
2009-06-18 23:22:10 +00:00
{ " Data " , " ecat.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2008-01-10 22:19:53 +00:00
{ & hf_ecat_cnt ,
2007-10-14 15:44:05 +00:00
{ " Working Cnt " , " ecat.cnt " ,
2008-03-05 20:42:58 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , " The working counter is increased once for each addressed device if at least one byte/bit of the data was successfully read and/or written by that device, it is increased once for every operation made by that device - read/write/read and write " , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cnt [ 0 ] ,
{ " Working Cnt " , " ecat.sub1.cnt " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cnt [ 1 ] ,
{ " Working Cnt " , " ecat.sub2.cnt " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cnt [ 2 ] ,
{ " Working Cnt " , " ecat.sub3.cnt " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cnt [ 3 ] ,
{ " Working Cnt " , " ecat.sub4.cnt " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cnt [ 4 ] ,
{ " Working Cnt " , " ecat.sub5.cnt " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cnt [ 5 ] ,
{ " Working Cnt " , " ecat.sub6.cnt " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cnt [ 6 ] ,
{ " Working Cnt " , " ecat.sub7.cnt " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cnt [ 7 ] ,
{ " Working Cnt " , " ecat.sub8.cnt " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cnt [ 8 ] ,
{ " Working Cnt " , " ecat.sub9.cnt " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cnt [ 9 ] ,
{ " Working Cnt " , " ecat.sub10.cnt " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2008-01-10 22:19:53 +00:00
{ & hf_ecat_cmd ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cmd [ 0 ] ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.sub1.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cmd [ 1 ] ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.sub2.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cmd [ 2 ] ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.sub3.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cmd [ 3 ] ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.sub4.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cmd [ 4 ] ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.sub5.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cmd [ 5 ] ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.sub6.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cmd [ 6 ] ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.sub7.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cmd [ 7 ] ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.sub8.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cmd [ 8 ] ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.sub9.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_cmd [ 9 ] ,
2009-06-18 23:22:10 +00:00
{ " Command " , " ecat.sub10.cmd " ,
2009-07-07 11:13:22 +00:00
FT_UINT8 , BASE_HEX , VALS ( EcCmdShort ) , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2008-01-10 22:19:53 +00:00
{ & hf_ecat_idx ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_idx [ 0 ] ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.sub1.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_idx [ 1 ] ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.sub2.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_idx [ 2 ] ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.sub3.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_idx [ 3 ] ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.sub4.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_idx [ 4 ] ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.sub5.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_idx [ 5 ] ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.sub6.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_idx [ 6 ] ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.sub7.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_idx [ 7 ] ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.sub8.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_idx [ 8 ] ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.sub9.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_idx [ 9 ] ,
2009-06-18 23:22:10 +00:00
{ " Index " , " ecat.sub10.idx " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2008-01-10 22:19:53 +00:00
{ & hf_ecat_adp ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_adp [ 0 ] ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.sub1.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_adp [ 1 ] ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.sub2.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_adp [ 2 ] ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.sub3.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_adp [ 3 ] ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.sub4.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_adp [ 4 ] ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.sub5.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_adp [ 5 ] ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.sub6.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_adp [ 6 ] ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.sub7.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_adp [ 7 ] ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.sub8.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_adp [ 8 ] ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.sub9.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_adp [ 9 ] ,
2009-06-18 23:22:10 +00:00
{ " Slave Addr " , " ecat.sub10.adp " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2008-01-10 22:19:53 +00:00
{ & hf_ecat_ado ,
2007-10-14 15:44:05 +00:00
{ " Offset Addr " , " ecat.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_ado [ 0 ] ,
{ " Offset Addr " , " ecat.sub1.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_ado [ 1 ] ,
{ " Offset Addr " , " ecat.sub2.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_ado [ 2 ] ,
{ " Offset Addr " , " ecat.sub3.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_ado [ 3 ] ,
{ " Offset Addr " , " ecat.sub4.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_ado [ 4 ] ,
{ " Offset Addr " , " ecat.sub5.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_ado [ 5 ] ,
{ " Offset Addr " , " ecat.sub6.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_ado [ 6 ] ,
{ " Offset Addr " , " ecat.sub7.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_ado [ 7 ] ,
{ " Offset Addr " , " ecat.sub8.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_ado [ 8 ] ,
{ " Offset Addr " , " ecat.sub9.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_ado [ 9 ] ,
{ " Offset Addr " , " ecat.sub10.ado " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2008-01-10 22:19:53 +00:00
{ & hf_ecat_lad ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_lad [ 0 ] ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.sub1.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_lad [ 1 ] ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.sub2.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_lad [ 2 ] ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.sub3.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_lad [ 3 ] ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.sub4.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_lad [ 4 ] ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.sub5.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_lad [ 5 ] ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.sub6.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_lad [ 6 ] ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.sub7.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_lad [ 7 ] ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.sub8.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_lad [ 8 ] ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.sub9.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_lad [ 9 ] ,
2009-06-18 23:22:10 +00:00
{ " Log Addr " , " ecat.sub10.lad " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2013-02-10 20:52:21 +00:00
#if 0
2007-10-14 15:44:05 +00:00
{ & hf_ecat_len ,
2009-06-18 23:22:10 +00:00
{ " Length " , " ecat.len " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2013-02-10 20:52:21 +00:00
# endif
2007-10-14 15:44:05 +00:00
{ & hf_ecat_int ,
2009-06-18 23:22:10 +00:00
{ " Interrupt " , " ecat.int " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman ,
{ " SyncManager " , " ecat.syncman " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_start ,
{ " Start Addr " , " ecat.syncman.start " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2008-01-10 22:19:53 +00:00
{ & hf_ecat_syncman_len ,
2009-06-18 23:22:10 +00:00
{ " SM Length " , " ecat.syncman.len " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flags ,
2009-06-18 23:22:10 +00:00
{ " SM Flags " , " ecat.syncman.flags " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag0 ,
{ " SM Flag0 " , " ecat.syncman_flag0 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag0 ) , 0x00000001 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag1 ,
{ " SM Flag1 " , " ecat.syncman_flag1 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag1 ) , 0x00000002 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag2 ,
{ " SM Flag2 " , " ecat.syncman_flag2 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag2 ) , 0x00000004 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag4 ,
{ " SM Flag4 " , " ecat.syncman_flag4 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag4 ) , 0x00000010 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag5 ,
{ " SM Flag5 " , " ecat.syncman_flag5 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag5 ) , 0x00000020 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag8 ,
{ " SM Flag8 " , " ecat.syncman_flag8 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag8 ) , 0x00000100 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag9 ,
{ " SM Flag9 " , " ecat.syncman_flag9 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag9 ) , 0x00000200 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag10 ,
{ " SM Flag10 " , " ecat.syncman_flag10 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag10 ) , 0x00000400 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag11 ,
{ " SM Flag11 " , " ecat.syncman_flag11 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag11 ) , 0x00000800 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag12 ,
{ " SM Flag12 " , " ecat.syncman_flag12 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag12 ) , 0x00001000 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag13 ,
{ " SM Flag13 " , " ecat.syncman_flag13 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag13 ) , 0x00002000 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_syncman_flag16 ,
{ " SM Flag16 " , " ecat.syncman_flag16 " ,
FT_BOOLEAN , 32 , TFS ( & tfs_ecat_syncman_flag16 ) , 0x00010000 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
2008-01-10 22:19:53 +00:00
{ & hf_ecat_fmmu ,
2007-10-14 15:44:05 +00:00
{ " FMMU " , " ecat.fmmu " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_fmmu_lstart ,
2009-06-18 23:22:10 +00:00
{ " Log Start " , " ecat.fmmu.lstart " ,
2007-10-14 15:44:05 +00:00
FT_UINT32 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_fmmu_llen ,
2009-06-18 23:22:10 +00:00
{ " Log Length " , " ecat.fmmu.llen " ,
2007-10-14 15:44:05 +00:00
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_fmmu_lstartbit ,
2009-06-18 23:22:10 +00:00
{ " Log StartBit " , " ecat.fmmu.lstartbit " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2008-01-10 22:19:53 +00:00
} ,
2007-10-14 15:44:05 +00:00
{ & hf_ecat_fmmu_lendbit ,
2009-06-18 23:22:10 +00:00
{ " Log EndBit " , " ecat.fmmu.lendbit " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2008-01-10 22:19:53 +00:00
} ,
2007-10-14 15:44:05 +00:00
{ & hf_ecat_fmmu_pstart ,
2009-06-18 23:22:10 +00:00
{ " Phys Start " , " ecat.fmmu.pstart " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2008-01-10 22:19:53 +00:00
} ,
2007-10-14 15:44:05 +00:00
{ & hf_ecat_fmmu_pstartbit ,
{ " Phys StartBit " , " ecat.fmmu.pstartbit " ,
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_fmmu_type ,
2009-06-18 23:22:10 +00:00
{ " FMMU Type " , " ecat.fmmu.type " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_fmmu_typeread ,
{ " Type " , " ecat.fmmu.typeread " ,
FT_BOOLEAN , 8 , TFS ( & tfs_ecat_fmmu_typeread ) , 0x01 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_fmmu_typewrite ,
{ " Type " , " ecat.fmmu.typewrite " ,
FT_BOOLEAN , 8 , TFS ( & tfs_ecat_fmmu_typewrite ) , 0x02 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_fmmu_active ,
2009-06-18 23:22:10 +00:00
{ " FMMU Active " , " ecat.fmmu.active " ,
2007-10-14 15:44:05 +00:00
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_fmmu_active0 ,
{ " Active " , " ecat.fmmu.active0 " ,
FT_BOOLEAN , 8 , TFS ( & tfs_ecat_fmmu_active ) , 0x01 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_dc_diff_da ,
{ " DC D-A " , " ecat.dc.dif.da " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_dc_diff_bd ,
{ " DC B-D " , " ecat.dc.dif.bd " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_dc_diff_cb ,
{ " DC C-B " , " ecat.dc.dif.cb " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_dc_diff_cd ,
{ " DC C-D " , " ecat.dc.dif.cd " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_dc_diff_ba ,
{ " DC B-A " , " ecat.dc.dif.ba " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_dc_diff_ca ,
{ " DC C-A " , " ecat.dc.dif.ca " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
2009-06-18 23:22:10 +00:00
NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_da [ 0 ] ,
{ " DC D-A " , " ecat.sub1.dc.dif.da " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_da [ 1 ] ,
{ " DC D-A " , " ecat.sub2.dc.dif.da " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_da [ 2 ] ,
{ " DC D-A " , " ecat.sub3.dc.dif.da " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_da [ 3 ] ,
{ " DC D-A " , " ecat.sub4.dc.dif.da " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_da [ 4 ] ,
{ " DC D-A " , " ecat.sub5.dc.dif.da " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_da [ 5 ] ,
{ " DC D-A " , " ecat.sub6.dc.dif.da " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_da [ 6 ] ,
{ " DC D-A " , " ecat.sub7.dc.dif.da " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_da [ 7 ] ,
{ " DC D-A " , " ecat.sub8.dc.dif.da " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_da [ 8 ] ,
{ " DC D-A " , " ecat.sub9.dc.dif.da " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_da [ 9 ] ,
{ " DC D-A " , " ecat.sub10.dc.dif.da " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_bd [ 0 ] ,
{ " DC B-C " , " ecat.sub1.dc.dif.bd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_bd [ 1 ] ,
{ " DC B-C " , " ecat.sub2.dc.dif.bd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_bd [ 2 ] ,
{ " DC B-C " , " ecat.sub3.dc.dif.bd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_bd [ 3 ] ,
{ " DC B-C " , " ecat.sub4.dc.dif.bd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_bd [ 4 ] ,
{ " DC B-C " , " ecat.sub5.dc.dif.bd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_bd [ 5 ] ,
{ " DC B-C " , " ecat.sub6.dc.dif.bd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_bd [ 6 ] ,
{ " DC B-C " , " ecat.sub7.dc.dif.bd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_bd [ 7 ] ,
{ " DC B-C " , " ecat.sub8.dc.dif.bd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_bd [ 8 ] ,
{ " DC B-C " , " ecat.sub9.dc.dif.bd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_bd [ 9 ] ,
{ " DC B-D " , " ecat.sub10.dc.dif.bd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cb [ 0 ] ,
{ " DC C-B " , " ecat.sub1.dc.dif.cb " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cb [ 1 ] ,
{ " DC C-B " , " ecat.sub2.dc.dif.cb " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cb [ 2 ] ,
{ " DC C-B " , " ecat.sub3.dc.dif.cb " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cb [ 3 ] ,
{ " DC C-B " , " ecat.sub4.dc.dif.cb " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cb [ 4 ] ,
{ " DC C-B " , " ecat.sub5.dc.dif.cb " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cb [ 5 ] ,
{ " DC C-B " , " ecat.sub6.dc.dif.cb " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cb [ 6 ] ,
{ " DC C-B " , " ecat.sub7.dc.dif.cb " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cb [ 7 ] ,
{ " DC C-B " , " ecat.sub8.dc.dif.cb " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cb [ 8 ] ,
{ " DC C-B " , " ecat.sub9.dc.dif.cb " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cb [ 9 ] ,
{ " DC C-B " , " ecat.sub10.dc.dif.cb " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cd [ 0 ] ,
{ " DC C-D " , " ecat.sub1.dc.dif.cd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cd [ 1 ] ,
{ " DC C-D " , " ecat.sub2.dc.dif.cd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cd [ 2 ] ,
{ " DC C-D " , " ecat.sub3.dc.dif.cd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cd [ 3 ] ,
{ " DC C-D " , " ecat.sub4.dc.dif.cd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cd [ 4 ] ,
{ " DC C-D " , " ecat.sub5.dc.dif.cd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cd [ 5 ] ,
{ " DC C-D " , " ecat.sub6.dc.dif.cd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cd [ 6 ] ,
{ " DC C-D " , " ecat.sub7.dc.dif.cd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cd [ 7 ] ,
{ " DC C-D " , " ecat.sub8.dc.dif.cd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cd [ 8 ] ,
{ " DC C-D " , " ecat.sub9.dc.dif.cd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_cd [ 9 ] ,
{ " DC C-D " , " ecat.sub10.dc.dif.cd " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ba [ 0 ] ,
{ " DC B-A " , " ecat.sub1.dc.dif.ba " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ba [ 1 ] ,
{ " DC B-A " , " ecat.sub2.dc.dif.ba " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ba [ 2 ] ,
{ " DC B-A " , " ecat.sub3.dc.dif.ba " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ba [ 3 ] ,
{ " DC B-A " , " ecat.sub4.dc.dif.ba " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ba [ 4 ] ,
{ " DC B-A " , " ecat.sub5.dc.dif.ba " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ba [ 5 ] ,
{ " DC B-A " , " ecat.sub6.dc.dif.ba " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ba [ 6 ] ,
{ " DC B-A " , " ecat.sub7.dc.dif.ba " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ba [ 7 ] ,
{ " DC B-A " , " ecat.sub8.dc.dif.ba " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ba [ 8 ] ,
{ " DC B-A " , " ecat.sub9.dc.dif.ba " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ba [ 9 ] ,
{ " DC B-A " , " ecat.sub10.dc.dif.ba " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ca [ 0 ] ,
{ " DC C-A " , " ecat.sub1.dc.dif.ca " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ca [ 1 ] ,
{ " DC C-A " , " ecat.sub2.dc.dif.ca " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ca [ 2 ] ,
{ " DC C-A " , " ecat.sub3.dc.dif.ca " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ca [ 3 ] ,
{ " DC C-A " , " ecat.sub4.dc.dif.ca " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ca [ 4 ] ,
{ " DC C-A " , " ecat.sub5.dc.dif.ca " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ca [ 5 ] ,
{ " DC C-A " , " ecat.sub6.dc.dif.ca " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ca [ 6 ] ,
{ " DC C-A " , " ecat.sub7.dc.dif.ca " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ca [ 7 ] ,
{ " DC C-A " , " ecat.sub8.dc.dif.ca " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ca [ 8 ] ,
{ " DC C-A " , " ecat.sub9.dc.dif.ca " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
} ,
{ & hf_ecat_sub_dc_diff_ca [ 9 ] ,
{ " DC C-A " , " ecat.sub10.dc.dif.ca " ,
2009-06-18 23:22:10 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL }
2008-03-05 20:42:58 +00:00
} ,
{ & hf_ecat_length_len ,
{ " Length " , " ecat.subframe.length " ,
2009-06-18 23:22:10 +00:00
FT_UINT16 , BASE_DEC , NULL , 0x07ff , NULL , HFILL }
2008-03-05 20:42:58 +00:00
} ,
{ & hf_ecat_length_r ,
{ " Reserved " , " ecat.subframe.reserved " ,
2009-11-17 18:35:27 +00:00
FT_UINT16 , BASE_DEC , VALS ( ecat_subframe_reserved_vals ) , 0x3800 , NULL , HFILL }
2008-03-05 20:42:58 +00:00
} ,
{ & hf_ecat_length_c ,
{ " Round trip " , " ecat.subframe.circulating " ,
2009-11-17 18:35:27 +00:00
FT_UINT16 , BASE_DEC , VALS ( ecat_subframe_circulating_vals ) , 0x4000 , NULL , HFILL }
2008-03-05 20:42:58 +00:00
} ,
{ & hf_ecat_length_m ,
{ " Last indicator " , " ecat.subframe.more " ,
2009-11-17 18:35:27 +00:00
FT_UINT16 , BASE_DEC , VALS ( ecat_subframe_more_vals ) , 0x8000 , NULL , HFILL }
2008-03-05 20:42:58 +00:00
} ,
{ & hf_ecat_padding ,
{ " Pad bytes " , " ecat.subframe.pad_bytes " ,
2009-06-18 23:22:10 +00:00
FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL }
2007-10-14 15:44:05 +00:00
}
} ;
static gint * ett [ ] =
{
& ett_ecat ,
& ett_ecat_header ,
& ett_ecat_syncman ,
& ett_ecat_syncflag ,
& ett_ecat_fmmu ,
& ett_ecat_fmmu_type ,
& ett_ecat_fmmu_active ,
2008-03-05 20:42:58 +00:00
& ett_ecat_dc ,
& ett_ecat_length ,
& ett_ecat_padding ,
& ett_ecat_datagram_subtree
2007-10-14 15:44:05 +00:00
} ;
2008-03-05 20:42:58 +00:00
proto_ecat_datagram = proto_register_protocol ( " EtherCAT datagram(s) " ,
" ECAT " , " ecat " ) ;
proto_register_field_array ( proto_ecat_datagram , hf , array_length ( hf ) ) ;
proto_register_subtree_array ( ett , array_length ( ett ) ) ;
/* Sub dissector code */
register_heur_dissector_list ( " ecat.data " , & heur_subdissector_list ) ;
2007-10-14 15:44:05 +00:00
}
/* The registration hand-off routing */
void proto_reg_handoff_ecat ( void )
{
2008-10-25 20:24:31 +00:00
dissector_handle_t ecat_handle ;
2007-10-14 15:44:05 +00:00
/* Register this dissector as a sub dissector to EtherCAT frame based on
ether type . */
ecat_handle = create_dissector_handle ( dissect_ecat_datagram , proto_ecat_datagram ) ;
2010-12-20 05:35:29 +00:00
dissector_add_uint ( " ecatf.type " , 1 /* EtherCAT type */ , ecat_handle ) ;
2007-10-14 15:44:05 +00:00
ecat_mailbox_handle = find_dissector ( " ecat_mailbox " ) ;
}