SOEM EtherCAT Master library for STM Nucleo F767ZI
Dependents: EasyCAT_LAB_simple EasyCAT_LAB_very_simple EasyCAT_LAB
- This repository contains the SOEM (Simple Open EtherCAT® Master) library by rt-labs, that has been ported in the ecosystem by AB&T Tecnologie Informatiche.
- It has been developed for the EasyCAT LAB , a complete educational and experimental EtherCAT® system, composed of one master and two slaves .
- The EasyCAT LAB is provided as a kit by AB&T Tecnologie Informatiche, to allow everybody to have an educational EtherCAT® system up and running in a matter of minutes.
Warning
- Currently only the Nucleo STM32F767ZI board is supported.
SOEM/ethercatmain.h@0:543d6784d4cc, 2019-06-11 (annotated)
- Committer:
- EasyCAT
- Date:
- Tue Jun 11 10:29:09 2019 +0000
- Revision:
- 0:543d6784d4cc
SOEM EtherCAT Master Library for STM Nucleo F767ZI
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
EasyCAT | 0:543d6784d4cc | 1 | /* |
EasyCAT | 0:543d6784d4cc | 2 | * Licensed under the GNU General Public License version 2 with exceptions. See |
EasyCAT | 0:543d6784d4cc | 3 | * LICENSE file in the project root for full license information |
EasyCAT | 0:543d6784d4cc | 4 | */ |
EasyCAT | 0:543d6784d4cc | 5 | |
EasyCAT | 0:543d6784d4cc | 6 | /** \file |
EasyCAT | 0:543d6784d4cc | 7 | * \brief |
EasyCAT | 0:543d6784d4cc | 8 | * Headerfile for ethercatmain.c |
EasyCAT | 0:543d6784d4cc | 9 | */ |
EasyCAT | 0:543d6784d4cc | 10 | |
EasyCAT | 0:543d6784d4cc | 11 | #ifndef _ethercatmain_ |
EasyCAT | 0:543d6784d4cc | 12 | #define _ethercatmain_ |
EasyCAT | 0:543d6784d4cc | 13 | |
EasyCAT | 0:543d6784d4cc | 14 | |
EasyCAT | 0:543d6784d4cc | 15 | #ifdef __cplusplus |
EasyCAT | 0:543d6784d4cc | 16 | extern "C" |
EasyCAT | 0:543d6784d4cc | 17 | { |
EasyCAT | 0:543d6784d4cc | 18 | #endif |
EasyCAT | 0:543d6784d4cc | 19 | |
EasyCAT | 0:543d6784d4cc | 20 | /** max. entries in EtherCAT error list */ |
EasyCAT | 0:543d6784d4cc | 21 | #define EC_MAXELIST 64 |
EasyCAT | 0:543d6784d4cc | 22 | /** max. length of readable name in slavelist and Object Description List */ |
EasyCAT | 0:543d6784d4cc | 23 | #define EC_MAXNAME 40 |
EasyCAT | 0:543d6784d4cc | 24 | /** max. number of slaves in array */ |
EasyCAT | 0:543d6784d4cc | 25 | #define EC_MAXSLAVE 200 |
EasyCAT | 0:543d6784d4cc | 26 | /** max. number of groups */ |
EasyCAT | 0:543d6784d4cc | 27 | #define EC_MAXGROUP 2 |
EasyCAT | 0:543d6784d4cc | 28 | /** max. number of IO segments per group */ |
EasyCAT | 0:543d6784d4cc | 29 | #define EC_MAXIOSEGMENTS 64 |
EasyCAT | 0:543d6784d4cc | 30 | /** max. mailbox size */ |
EasyCAT | 0:543d6784d4cc | 31 | #define EC_MAXMBX 1486 |
EasyCAT | 0:543d6784d4cc | 32 | /** max. eeprom PDO entries */ |
EasyCAT | 0:543d6784d4cc | 33 | #define EC_MAXEEPDO 0x200 |
EasyCAT | 0:543d6784d4cc | 34 | /** max. SM used */ |
EasyCAT | 0:543d6784d4cc | 35 | #define EC_MAXSM 8 |
EasyCAT | 0:543d6784d4cc | 36 | /** max. FMMU used */ |
EasyCAT | 0:543d6784d4cc | 37 | #define EC_MAXFMMU 4 |
EasyCAT | 0:543d6784d4cc | 38 | /** max. Adapter */ |
EasyCAT | 0:543d6784d4cc | 39 | #define EC_MAXLEN_ADAPTERNAME 128 |
EasyCAT | 0:543d6784d4cc | 40 | /** define maximum number of concurrent threads in mapping */ |
EasyCAT | 0:543d6784d4cc | 41 | #define EC_MAX_MAPT 1 |
EasyCAT | 0:543d6784d4cc | 42 | |
EasyCAT | 0:543d6784d4cc | 43 | typedef struct ec_adapter ec_adaptert; |
EasyCAT | 0:543d6784d4cc | 44 | struct ec_adapter |
EasyCAT | 0:543d6784d4cc | 45 | { |
EasyCAT | 0:543d6784d4cc | 46 | char name[EC_MAXLEN_ADAPTERNAME]; |
EasyCAT | 0:543d6784d4cc | 47 | char desc[EC_MAXLEN_ADAPTERNAME]; |
EasyCAT | 0:543d6784d4cc | 48 | ec_adaptert *next; |
EasyCAT | 0:543d6784d4cc | 49 | }; |
EasyCAT | 0:543d6784d4cc | 50 | |
EasyCAT | 0:543d6784d4cc | 51 | /** record for FMMU */ |
EasyCAT | 0:543d6784d4cc | 52 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 53 | typedef struct PACKED ec_fmmu |
EasyCAT | 0:543d6784d4cc | 54 | { |
EasyCAT | 0:543d6784d4cc | 55 | uint32 LogStart; |
EasyCAT | 0:543d6784d4cc | 56 | uint16 LogLength; |
EasyCAT | 0:543d6784d4cc | 57 | uint8 LogStartbit; |
EasyCAT | 0:543d6784d4cc | 58 | uint8 LogEndbit; |
EasyCAT | 0:543d6784d4cc | 59 | uint16 PhysStart; |
EasyCAT | 0:543d6784d4cc | 60 | uint8 PhysStartBit; |
EasyCAT | 0:543d6784d4cc | 61 | uint8 FMMUtype; |
EasyCAT | 0:543d6784d4cc | 62 | uint8 FMMUactive; |
EasyCAT | 0:543d6784d4cc | 63 | uint8 unused1; |
EasyCAT | 0:543d6784d4cc | 64 | uint16 unused2; |
EasyCAT | 0:543d6784d4cc | 65 | } ec_fmmut; |
EasyCAT | 0:543d6784d4cc | 66 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 67 | |
EasyCAT | 0:543d6784d4cc | 68 | /** record for sync manager */ |
EasyCAT | 0:543d6784d4cc | 69 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 70 | typedef struct PACKED ec_sm |
EasyCAT | 0:543d6784d4cc | 71 | { |
EasyCAT | 0:543d6784d4cc | 72 | uint16 StartAddr; |
EasyCAT | 0:543d6784d4cc | 73 | uint16 SMlength; |
EasyCAT | 0:543d6784d4cc | 74 | uint32 SMflags; |
EasyCAT | 0:543d6784d4cc | 75 | } ec_smt; |
EasyCAT | 0:543d6784d4cc | 76 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 77 | |
EasyCAT | 0:543d6784d4cc | 78 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 79 | typedef struct PACKED ec_state_status |
EasyCAT | 0:543d6784d4cc | 80 | { |
EasyCAT | 0:543d6784d4cc | 81 | uint16 State; |
EasyCAT | 0:543d6784d4cc | 82 | uint16 Unused; |
EasyCAT | 0:543d6784d4cc | 83 | uint16 ALstatuscode; |
EasyCAT | 0:543d6784d4cc | 84 | } ec_state_status; |
EasyCAT | 0:543d6784d4cc | 85 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 86 | |
EasyCAT | 0:543d6784d4cc | 87 | #define ECT_MBXPROT_AOE 0x0001 |
EasyCAT | 0:543d6784d4cc | 88 | #define ECT_MBXPROT_EOE 0x0002 |
EasyCAT | 0:543d6784d4cc | 89 | #define ECT_MBXPROT_COE 0x0004 |
EasyCAT | 0:543d6784d4cc | 90 | #define ECT_MBXPROT_FOE 0x0008 |
EasyCAT | 0:543d6784d4cc | 91 | #define ECT_MBXPROT_SOE 0x0010 |
EasyCAT | 0:543d6784d4cc | 92 | #define ECT_MBXPROT_VOE 0x0020 |
EasyCAT | 0:543d6784d4cc | 93 | |
EasyCAT | 0:543d6784d4cc | 94 | #define ECT_COEDET_SDO 0x01 |
EasyCAT | 0:543d6784d4cc | 95 | #define ECT_COEDET_SDOINFO 0x02 |
EasyCAT | 0:543d6784d4cc | 96 | #define ECT_COEDET_PDOASSIGN 0x04 |
EasyCAT | 0:543d6784d4cc | 97 | #define ECT_COEDET_PDOCONFIG 0x08 |
EasyCAT | 0:543d6784d4cc | 98 | #define ECT_COEDET_UPLOAD 0x10 |
EasyCAT | 0:543d6784d4cc | 99 | #define ECT_COEDET_SDOCA 0x20 |
EasyCAT | 0:543d6784d4cc | 100 | |
EasyCAT | 0:543d6784d4cc | 101 | #define EC_SMENABLEMASK 0xfffeffff |
EasyCAT | 0:543d6784d4cc | 102 | |
EasyCAT | 0:543d6784d4cc | 103 | /** for list of ethercat slaves detected */ |
EasyCAT | 0:543d6784d4cc | 104 | typedef struct ec_slave |
EasyCAT | 0:543d6784d4cc | 105 | { |
EasyCAT | 0:543d6784d4cc | 106 | /** state of slave */ |
EasyCAT | 0:543d6784d4cc | 107 | uint16 state; |
EasyCAT | 0:543d6784d4cc | 108 | /** AL status code */ |
EasyCAT | 0:543d6784d4cc | 109 | uint16 ALstatuscode; |
EasyCAT | 0:543d6784d4cc | 110 | /** Configured address */ |
EasyCAT | 0:543d6784d4cc | 111 | uint16 configadr; |
EasyCAT | 0:543d6784d4cc | 112 | /** Alias address */ |
EasyCAT | 0:543d6784d4cc | 113 | uint16 aliasadr; |
EasyCAT | 0:543d6784d4cc | 114 | /** Manufacturer from EEprom */ |
EasyCAT | 0:543d6784d4cc | 115 | uint32 eep_man; |
EasyCAT | 0:543d6784d4cc | 116 | /** ID from EEprom */ |
EasyCAT | 0:543d6784d4cc | 117 | uint32 eep_id; |
EasyCAT | 0:543d6784d4cc | 118 | /** revision from EEprom */ |
EasyCAT | 0:543d6784d4cc | 119 | uint32 eep_rev; |
EasyCAT | 0:543d6784d4cc | 120 | /** Interface type */ |
EasyCAT | 0:543d6784d4cc | 121 | uint16 Itype; |
EasyCAT | 0:543d6784d4cc | 122 | /** Device type */ |
EasyCAT | 0:543d6784d4cc | 123 | uint16 Dtype; |
EasyCAT | 0:543d6784d4cc | 124 | /** output bits */ |
EasyCAT | 0:543d6784d4cc | 125 | uint16 Obits; |
EasyCAT | 0:543d6784d4cc | 126 | /** output bytes, if Obits < 8 then Obytes = 0 */ |
EasyCAT | 0:543d6784d4cc | 127 | uint32 Obytes; |
EasyCAT | 0:543d6784d4cc | 128 | /** output pointer in IOmap buffer */ |
EasyCAT | 0:543d6784d4cc | 129 | uint8 *outputs; |
EasyCAT | 0:543d6784d4cc | 130 | /** startbit in first output byte */ |
EasyCAT | 0:543d6784d4cc | 131 | uint8 Ostartbit; |
EasyCAT | 0:543d6784d4cc | 132 | /** input bits */ |
EasyCAT | 0:543d6784d4cc | 133 | uint16 Ibits; |
EasyCAT | 0:543d6784d4cc | 134 | /** input bytes, if Ibits < 8 then Ibytes = 0 */ |
EasyCAT | 0:543d6784d4cc | 135 | uint32 Ibytes; |
EasyCAT | 0:543d6784d4cc | 136 | /** input pointer in IOmap buffer */ |
EasyCAT | 0:543d6784d4cc | 137 | uint8 *inputs; |
EasyCAT | 0:543d6784d4cc | 138 | /** startbit in first input byte */ |
EasyCAT | 0:543d6784d4cc | 139 | uint8 Istartbit; |
EasyCAT | 0:543d6784d4cc | 140 | /** SM structure */ |
EasyCAT | 0:543d6784d4cc | 141 | ec_smt SM[EC_MAXSM]; |
EasyCAT | 0:543d6784d4cc | 142 | /** SM type 0=unused 1=MbxWr 2=MbxRd 3=Outputs 4=Inputs */ |
EasyCAT | 0:543d6784d4cc | 143 | uint8 SMtype[EC_MAXSM]; |
EasyCAT | 0:543d6784d4cc | 144 | /** FMMU structure */ |
EasyCAT | 0:543d6784d4cc | 145 | ec_fmmut FMMU[EC_MAXFMMU]; |
EasyCAT | 0:543d6784d4cc | 146 | /** FMMU0 function */ |
EasyCAT | 0:543d6784d4cc | 147 | uint8 FMMU0func; |
EasyCAT | 0:543d6784d4cc | 148 | /** FMMU1 function */ |
EasyCAT | 0:543d6784d4cc | 149 | uint8 FMMU1func; |
EasyCAT | 0:543d6784d4cc | 150 | /** FMMU2 function */ |
EasyCAT | 0:543d6784d4cc | 151 | uint8 FMMU2func; |
EasyCAT | 0:543d6784d4cc | 152 | /** FMMU3 function */ |
EasyCAT | 0:543d6784d4cc | 153 | uint8 FMMU3func; |
EasyCAT | 0:543d6784d4cc | 154 | /** length of write mailbox in bytes, if no mailbox then 0 */ |
EasyCAT | 0:543d6784d4cc | 155 | uint16 mbx_l; |
EasyCAT | 0:543d6784d4cc | 156 | /** mailbox write offset */ |
EasyCAT | 0:543d6784d4cc | 157 | uint16 mbx_wo; |
EasyCAT | 0:543d6784d4cc | 158 | /** length of read mailbox in bytes */ |
EasyCAT | 0:543d6784d4cc | 159 | uint16 mbx_rl; |
EasyCAT | 0:543d6784d4cc | 160 | /** mailbox read offset */ |
EasyCAT | 0:543d6784d4cc | 161 | uint16 mbx_ro; |
EasyCAT | 0:543d6784d4cc | 162 | /** mailbox supported protocols */ |
EasyCAT | 0:543d6784d4cc | 163 | uint16 mbx_proto; |
EasyCAT | 0:543d6784d4cc | 164 | /** Counter value of mailbox link layer protocol 1..7 */ |
EasyCAT | 0:543d6784d4cc | 165 | uint8 mbx_cnt; |
EasyCAT | 0:543d6784d4cc | 166 | /** has DC capability */ |
EasyCAT | 0:543d6784d4cc | 167 | boolean hasdc; |
EasyCAT | 0:543d6784d4cc | 168 | /** Physical type; Ebus, EtherNet combinations */ |
EasyCAT | 0:543d6784d4cc | 169 | uint8 ptype; |
EasyCAT | 0:543d6784d4cc | 170 | /** topology: 1 to 3 links */ |
EasyCAT | 0:543d6784d4cc | 171 | uint8 topology; |
EasyCAT | 0:543d6784d4cc | 172 | /** active ports bitmap : ....3210 , set if respective port is active **/ |
EasyCAT | 0:543d6784d4cc | 173 | uint8 activeports; |
EasyCAT | 0:543d6784d4cc | 174 | /** consumed ports bitmap : ....3210, used for internal delay measurement **/ |
EasyCAT | 0:543d6784d4cc | 175 | uint8 consumedports; |
EasyCAT | 0:543d6784d4cc | 176 | /** slave number for parent, 0=master */ |
EasyCAT | 0:543d6784d4cc | 177 | uint16 parent; |
EasyCAT | 0:543d6784d4cc | 178 | /** port number on parent this slave is connected to **/ |
EasyCAT | 0:543d6784d4cc | 179 | uint8 parentport; |
EasyCAT | 0:543d6784d4cc | 180 | /** port number on this slave the parent is connected to **/ |
EasyCAT | 0:543d6784d4cc | 181 | uint8 entryport; |
EasyCAT | 0:543d6784d4cc | 182 | /** DC receivetimes on port A */ |
EasyCAT | 0:543d6784d4cc | 183 | int32 DCrtA; |
EasyCAT | 0:543d6784d4cc | 184 | /** DC receivetimes on port B */ |
EasyCAT | 0:543d6784d4cc | 185 | int32 DCrtB; |
EasyCAT | 0:543d6784d4cc | 186 | /** DC receivetimes on port C */ |
EasyCAT | 0:543d6784d4cc | 187 | int32 DCrtC; |
EasyCAT | 0:543d6784d4cc | 188 | /** DC receivetimes on port D */ |
EasyCAT | 0:543d6784d4cc | 189 | int32 DCrtD; |
EasyCAT | 0:543d6784d4cc | 190 | /** propagation delay */ |
EasyCAT | 0:543d6784d4cc | 191 | int32 pdelay; |
EasyCAT | 0:543d6784d4cc | 192 | /** next DC slave */ |
EasyCAT | 0:543d6784d4cc | 193 | uint16 DCnext; |
EasyCAT | 0:543d6784d4cc | 194 | /** previous DC slave */ |
EasyCAT | 0:543d6784d4cc | 195 | uint16 DCprevious; |
EasyCAT | 0:543d6784d4cc | 196 | /** DC cycle time in ns */ |
EasyCAT | 0:543d6784d4cc | 197 | int32 DCcycle; |
EasyCAT | 0:543d6784d4cc | 198 | /** DC shift from clock modulus boundary */ |
EasyCAT | 0:543d6784d4cc | 199 | int32 DCshift; |
EasyCAT | 0:543d6784d4cc | 200 | /** DC sync activation, 0=off, 1=on */ |
EasyCAT | 0:543d6784d4cc | 201 | uint8 DCactive; |
EasyCAT | 0:543d6784d4cc | 202 | /** link to config table */ |
EasyCAT | 0:543d6784d4cc | 203 | uint16 configindex; |
EasyCAT | 0:543d6784d4cc | 204 | /** link to SII config */ |
EasyCAT | 0:543d6784d4cc | 205 | uint16 SIIindex; |
EasyCAT | 0:543d6784d4cc | 206 | /** 1 = 8 bytes per read, 0 = 4 bytes per read */ |
EasyCAT | 0:543d6784d4cc | 207 | uint8 eep_8byte; |
EasyCAT | 0:543d6784d4cc | 208 | /** 0 = eeprom to master , 1 = eeprom to PDI */ |
EasyCAT | 0:543d6784d4cc | 209 | uint8 eep_pdi; |
EasyCAT | 0:543d6784d4cc | 210 | /** CoE details */ |
EasyCAT | 0:543d6784d4cc | 211 | uint8 CoEdetails; |
EasyCAT | 0:543d6784d4cc | 212 | /** FoE details */ |
EasyCAT | 0:543d6784d4cc | 213 | uint8 FoEdetails; |
EasyCAT | 0:543d6784d4cc | 214 | /** EoE details */ |
EasyCAT | 0:543d6784d4cc | 215 | uint8 EoEdetails; |
EasyCAT | 0:543d6784d4cc | 216 | /** SoE details */ |
EasyCAT | 0:543d6784d4cc | 217 | uint8 SoEdetails; |
EasyCAT | 0:543d6784d4cc | 218 | /** E-bus current */ |
EasyCAT | 0:543d6784d4cc | 219 | int16 Ebuscurrent; |
EasyCAT | 0:543d6784d4cc | 220 | /** if >0 block use of LRW in processdata */ |
EasyCAT | 0:543d6784d4cc | 221 | uint8 blockLRW; |
EasyCAT | 0:543d6784d4cc | 222 | /** group */ |
EasyCAT | 0:543d6784d4cc | 223 | uint8 group; |
EasyCAT | 0:543d6784d4cc | 224 | /** first unused FMMU */ |
EasyCAT | 0:543d6784d4cc | 225 | uint8 FMMUunused; |
EasyCAT | 0:543d6784d4cc | 226 | /** Boolean for tracking whether the slave is (not) responding, not used/set by the SOEM library */ |
EasyCAT | 0:543d6784d4cc | 227 | boolean islost; |
EasyCAT | 0:543d6784d4cc | 228 | /** registered configuration function PO->SO */ |
EasyCAT | 0:543d6784d4cc | 229 | int (*PO2SOconfig)(uint16 slave); |
EasyCAT | 0:543d6784d4cc | 230 | /** readable name */ |
EasyCAT | 0:543d6784d4cc | 231 | char name[EC_MAXNAME + 1]; |
EasyCAT | 0:543d6784d4cc | 232 | } ec_slavet; |
EasyCAT | 0:543d6784d4cc | 233 | |
EasyCAT | 0:543d6784d4cc | 234 | /** for list of ethercat slave groups */ |
EasyCAT | 0:543d6784d4cc | 235 | typedef struct ec_group |
EasyCAT | 0:543d6784d4cc | 236 | { |
EasyCAT | 0:543d6784d4cc | 237 | /** logical start address for this group */ |
EasyCAT | 0:543d6784d4cc | 238 | uint32 logstartaddr; |
EasyCAT | 0:543d6784d4cc | 239 | /** output bytes, if Obits < 8 then Obytes = 0 */ |
EasyCAT | 0:543d6784d4cc | 240 | uint32 Obytes; |
EasyCAT | 0:543d6784d4cc | 241 | /** output pointer in IOmap buffer */ |
EasyCAT | 0:543d6784d4cc | 242 | uint8 *outputs; |
EasyCAT | 0:543d6784d4cc | 243 | /** input bytes, if Ibits < 8 then Ibytes = 0 */ |
EasyCAT | 0:543d6784d4cc | 244 | uint32 Ibytes; |
EasyCAT | 0:543d6784d4cc | 245 | /** input pointer in IOmap buffer */ |
EasyCAT | 0:543d6784d4cc | 246 | uint8 *inputs; |
EasyCAT | 0:543d6784d4cc | 247 | /** has DC capabillity */ |
EasyCAT | 0:543d6784d4cc | 248 | boolean hasdc; |
EasyCAT | 0:543d6784d4cc | 249 | /** next DC slave */ |
EasyCAT | 0:543d6784d4cc | 250 | uint16 DCnext; |
EasyCAT | 0:543d6784d4cc | 251 | /** E-bus current */ |
EasyCAT | 0:543d6784d4cc | 252 | int16 Ebuscurrent; |
EasyCAT | 0:543d6784d4cc | 253 | /** if >0 block use of LRW in processdata */ |
EasyCAT | 0:543d6784d4cc | 254 | uint8 blockLRW; |
EasyCAT | 0:543d6784d4cc | 255 | /** IO segments used */ |
EasyCAT | 0:543d6784d4cc | 256 | uint16 nsegments; |
EasyCAT | 0:543d6784d4cc | 257 | /** 1st input segment */ |
EasyCAT | 0:543d6784d4cc | 258 | uint16 Isegment; |
EasyCAT | 0:543d6784d4cc | 259 | /** Offset in input segment */ |
EasyCAT | 0:543d6784d4cc | 260 | uint16 Ioffset; |
EasyCAT | 0:543d6784d4cc | 261 | /** Expected workcounter outputs */ |
EasyCAT | 0:543d6784d4cc | 262 | uint16 outputsWKC; |
EasyCAT | 0:543d6784d4cc | 263 | /** Expected workcounter inputs */ |
EasyCAT | 0:543d6784d4cc | 264 | uint16 inputsWKC; |
EasyCAT | 0:543d6784d4cc | 265 | /** check slave states */ |
EasyCAT | 0:543d6784d4cc | 266 | boolean docheckstate; |
EasyCAT | 0:543d6784d4cc | 267 | /** IO segmentation list. Datagrams must not break SM in two. */ |
EasyCAT | 0:543d6784d4cc | 268 | uint32 IOsegment[EC_MAXIOSEGMENTS]; |
EasyCAT | 0:543d6784d4cc | 269 | } ec_groupt; |
EasyCAT | 0:543d6784d4cc | 270 | |
EasyCAT | 0:543d6784d4cc | 271 | /** SII FMMU structure */ |
EasyCAT | 0:543d6784d4cc | 272 | typedef struct ec_eepromFMMU |
EasyCAT | 0:543d6784d4cc | 273 | { |
EasyCAT | 0:543d6784d4cc | 274 | uint16 Startpos; |
EasyCAT | 0:543d6784d4cc | 275 | uint8 nFMMU; |
EasyCAT | 0:543d6784d4cc | 276 | uint8 FMMU0; |
EasyCAT | 0:543d6784d4cc | 277 | uint8 FMMU1; |
EasyCAT | 0:543d6784d4cc | 278 | uint8 FMMU2; |
EasyCAT | 0:543d6784d4cc | 279 | uint8 FMMU3; |
EasyCAT | 0:543d6784d4cc | 280 | } ec_eepromFMMUt; |
EasyCAT | 0:543d6784d4cc | 281 | |
EasyCAT | 0:543d6784d4cc | 282 | /** SII SM structure */ |
EasyCAT | 0:543d6784d4cc | 283 | typedef struct ec_eepromSM |
EasyCAT | 0:543d6784d4cc | 284 | { |
EasyCAT | 0:543d6784d4cc | 285 | uint16 Startpos; |
EasyCAT | 0:543d6784d4cc | 286 | uint8 nSM; |
EasyCAT | 0:543d6784d4cc | 287 | uint16 PhStart; |
EasyCAT | 0:543d6784d4cc | 288 | uint16 Plength; |
EasyCAT | 0:543d6784d4cc | 289 | uint8 Creg; |
EasyCAT | 0:543d6784d4cc | 290 | uint8 Sreg; /* don't care */ |
EasyCAT | 0:543d6784d4cc | 291 | uint8 Activate; |
EasyCAT | 0:543d6784d4cc | 292 | uint8 PDIctrl; /* don't care */ |
EasyCAT | 0:543d6784d4cc | 293 | } ec_eepromSMt; |
EasyCAT | 0:543d6784d4cc | 294 | |
EasyCAT | 0:543d6784d4cc | 295 | /** record to store rxPDO and txPDO table from eeprom */ |
EasyCAT | 0:543d6784d4cc | 296 | typedef struct ec_eepromPDO |
EasyCAT | 0:543d6784d4cc | 297 | { |
EasyCAT | 0:543d6784d4cc | 298 | uint16 Startpos; |
EasyCAT | 0:543d6784d4cc | 299 | uint16 Length; |
EasyCAT | 0:543d6784d4cc | 300 | uint16 nPDO; |
EasyCAT | 0:543d6784d4cc | 301 | uint16 Index[EC_MAXEEPDO]; |
EasyCAT | 0:543d6784d4cc | 302 | uint16 SyncM[EC_MAXEEPDO]; |
EasyCAT | 0:543d6784d4cc | 303 | uint16 BitSize[EC_MAXEEPDO]; |
EasyCAT | 0:543d6784d4cc | 304 | uint16 SMbitsize[EC_MAXSM]; |
EasyCAT | 0:543d6784d4cc | 305 | } ec_eepromPDOt; |
EasyCAT | 0:543d6784d4cc | 306 | |
EasyCAT | 0:543d6784d4cc | 307 | /** mailbox buffer array */ |
EasyCAT | 0:543d6784d4cc | 308 | typedef uint8 ec_mbxbuft[EC_MAXMBX + 1]; |
EasyCAT | 0:543d6784d4cc | 309 | |
EasyCAT | 0:543d6784d4cc | 310 | /** standard ethercat mailbox header */ |
EasyCAT | 0:543d6784d4cc | 311 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 312 | typedef struct PACKED ec_mbxheader |
EasyCAT | 0:543d6784d4cc | 313 | { |
EasyCAT | 0:543d6784d4cc | 314 | uint16 length; |
EasyCAT | 0:543d6784d4cc | 315 | uint16 address; |
EasyCAT | 0:543d6784d4cc | 316 | uint8 priority; |
EasyCAT | 0:543d6784d4cc | 317 | uint8 mbxtype; |
EasyCAT | 0:543d6784d4cc | 318 | } ec_mbxheadert; |
EasyCAT | 0:543d6784d4cc | 319 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 320 | |
EasyCAT | 0:543d6784d4cc | 321 | /** ALstatus and ALstatus code */ |
EasyCAT | 0:543d6784d4cc | 322 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 323 | typedef struct PACKED ec_alstatus |
EasyCAT | 0:543d6784d4cc | 324 | { |
EasyCAT | 0:543d6784d4cc | 325 | uint16 alstatus; |
EasyCAT | 0:543d6784d4cc | 326 | uint16 unused; |
EasyCAT | 0:543d6784d4cc | 327 | uint16 alstatuscode; |
EasyCAT | 0:543d6784d4cc | 328 | } ec_alstatust; |
EasyCAT | 0:543d6784d4cc | 329 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 330 | |
EasyCAT | 0:543d6784d4cc | 331 | /** stack structure to store segmented LRD/LWR/LRW constructs */ |
EasyCAT | 0:543d6784d4cc | 332 | typedef struct ec_idxstack |
EasyCAT | 0:543d6784d4cc | 333 | { |
EasyCAT | 0:543d6784d4cc | 334 | uint8 pushed; |
EasyCAT | 0:543d6784d4cc | 335 | uint8 pulled; |
EasyCAT | 0:543d6784d4cc | 336 | uint8 idx[EC_MAXBUF]; |
EasyCAT | 0:543d6784d4cc | 337 | void *data[EC_MAXBUF]; |
EasyCAT | 0:543d6784d4cc | 338 | uint16 length[EC_MAXBUF]; |
EasyCAT | 0:543d6784d4cc | 339 | } ec_idxstackT; |
EasyCAT | 0:543d6784d4cc | 340 | |
EasyCAT | 0:543d6784d4cc | 341 | /** ringbuf for error storage */ |
EasyCAT | 0:543d6784d4cc | 342 | typedef struct ec_ering |
EasyCAT | 0:543d6784d4cc | 343 | { |
EasyCAT | 0:543d6784d4cc | 344 | int16 head; |
EasyCAT | 0:543d6784d4cc | 345 | int16 tail; |
EasyCAT | 0:543d6784d4cc | 346 | ec_errort Error[EC_MAXELIST + 1]; |
EasyCAT | 0:543d6784d4cc | 347 | } ec_eringt; |
EasyCAT | 0:543d6784d4cc | 348 | |
EasyCAT | 0:543d6784d4cc | 349 | /** SyncManager Communication Type structure for CA */ |
EasyCAT | 0:543d6784d4cc | 350 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 351 | typedef struct PACKED ec_SMcommtype |
EasyCAT | 0:543d6784d4cc | 352 | { |
EasyCAT | 0:543d6784d4cc | 353 | uint8 n; |
EasyCAT | 0:543d6784d4cc | 354 | uint8 nu1; |
EasyCAT | 0:543d6784d4cc | 355 | uint8 SMtype[EC_MAXSM]; |
EasyCAT | 0:543d6784d4cc | 356 | } ec_SMcommtypet; |
EasyCAT | 0:543d6784d4cc | 357 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 358 | |
EasyCAT | 0:543d6784d4cc | 359 | /** SDO assign structure for CA */ |
EasyCAT | 0:543d6784d4cc | 360 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 361 | typedef struct PACKED ec_PDOassign |
EasyCAT | 0:543d6784d4cc | 362 | { |
EasyCAT | 0:543d6784d4cc | 363 | uint8 n; |
EasyCAT | 0:543d6784d4cc | 364 | uint8 nu1; |
EasyCAT | 0:543d6784d4cc | 365 | uint16 index[256]; |
EasyCAT | 0:543d6784d4cc | 366 | } ec_PDOassignt; |
EasyCAT | 0:543d6784d4cc | 367 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 368 | |
EasyCAT | 0:543d6784d4cc | 369 | /** SDO description structure for CA */ |
EasyCAT | 0:543d6784d4cc | 370 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 371 | typedef struct PACKED ec_PDOdesc |
EasyCAT | 0:543d6784d4cc | 372 | { |
EasyCAT | 0:543d6784d4cc | 373 | uint8 n; |
EasyCAT | 0:543d6784d4cc | 374 | uint8 nu1; |
EasyCAT | 0:543d6784d4cc | 375 | uint32 PDO[256]; |
EasyCAT | 0:543d6784d4cc | 376 | } ec_PDOdesct; |
EasyCAT | 0:543d6784d4cc | 377 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 378 | |
EasyCAT | 0:543d6784d4cc | 379 | /** Context structure , referenced by all ecx functions*/ |
EasyCAT | 0:543d6784d4cc | 380 | typedef struct ecx_context ecx_contextt; |
EasyCAT | 0:543d6784d4cc | 381 | struct ecx_context |
EasyCAT | 0:543d6784d4cc | 382 | { |
EasyCAT | 0:543d6784d4cc | 383 | /** port reference, may include red_port */ |
EasyCAT | 0:543d6784d4cc | 384 | ecx_portt *port; |
EasyCAT | 0:543d6784d4cc | 385 | /** slavelist reference */ |
EasyCAT | 0:543d6784d4cc | 386 | ec_slavet *slavelist; |
EasyCAT | 0:543d6784d4cc | 387 | /** number of slaves found in configuration */ |
EasyCAT | 0:543d6784d4cc | 388 | int *slavecount; |
EasyCAT | 0:543d6784d4cc | 389 | /** maximum number of slaves allowed in slavelist */ |
EasyCAT | 0:543d6784d4cc | 390 | int maxslave; |
EasyCAT | 0:543d6784d4cc | 391 | /** grouplist reference */ |
EasyCAT | 0:543d6784d4cc | 392 | ec_groupt *grouplist; |
EasyCAT | 0:543d6784d4cc | 393 | /** maximum number of groups allowed in grouplist */ |
EasyCAT | 0:543d6784d4cc | 394 | int maxgroup; |
EasyCAT | 0:543d6784d4cc | 395 | /** internal, reference to eeprom cache buffer */ |
EasyCAT | 0:543d6784d4cc | 396 | uint8 *esibuf; |
EasyCAT | 0:543d6784d4cc | 397 | /** internal, reference to eeprom cache map */ |
EasyCAT | 0:543d6784d4cc | 398 | uint32 *esimap; |
EasyCAT | 0:543d6784d4cc | 399 | /** internal, current slave for eeprom cache */ |
EasyCAT | 0:543d6784d4cc | 400 | uint16 esislave; |
EasyCAT | 0:543d6784d4cc | 401 | /** internal, reference to error list */ |
EasyCAT | 0:543d6784d4cc | 402 | ec_eringt *elist; |
EasyCAT | 0:543d6784d4cc | 403 | /** internal, reference to processdata stack buffer info */ |
EasyCAT | 0:543d6784d4cc | 404 | ec_idxstackT *idxstack; |
EasyCAT | 0:543d6784d4cc | 405 | /** reference to ecaterror state */ |
EasyCAT | 0:543d6784d4cc | 406 | boolean *ecaterror; |
EasyCAT | 0:543d6784d4cc | 407 | /** internal, position of DC datagram in process data packet */ |
EasyCAT | 0:543d6784d4cc | 408 | uint16 DCtO; |
EasyCAT | 0:543d6784d4cc | 409 | /** internal, length of DC datagram */ |
EasyCAT | 0:543d6784d4cc | 410 | uint16 DCl; |
EasyCAT | 0:543d6784d4cc | 411 | /** reference to last DC time from slaves */ |
EasyCAT | 0:543d6784d4cc | 412 | int64 *DCtime; |
EasyCAT | 0:543d6784d4cc | 413 | /** internal, SM buffer */ |
EasyCAT | 0:543d6784d4cc | 414 | ec_SMcommtypet *SMcommtype; |
EasyCAT | 0:543d6784d4cc | 415 | /** internal, PDO assign list */ |
EasyCAT | 0:543d6784d4cc | 416 | ec_PDOassignt *PDOassign; |
EasyCAT | 0:543d6784d4cc | 417 | /** internal, PDO description list */ |
EasyCAT | 0:543d6784d4cc | 418 | ec_PDOdesct *PDOdesc; |
EasyCAT | 0:543d6784d4cc | 419 | /** internal, SM list from eeprom */ |
EasyCAT | 0:543d6784d4cc | 420 | ec_eepromSMt *eepSM; |
EasyCAT | 0:543d6784d4cc | 421 | /** internal, FMMU list from eeprom */ |
EasyCAT | 0:543d6784d4cc | 422 | ec_eepromFMMUt *eepFMMU; |
EasyCAT | 0:543d6784d4cc | 423 | /** registered FoE hook */ |
EasyCAT | 0:543d6784d4cc | 424 | int (*FOEhook)(uint16 slave, int packetnumber, int datasize); |
EasyCAT | 0:543d6784d4cc | 425 | /** registered EoE hook */ |
EasyCAT | 0:543d6784d4cc | 426 | int (*EOEhook)(ecx_contextt * context, uint16 slave, void * eoembx); |
EasyCAT | 0:543d6784d4cc | 427 | }; |
EasyCAT | 0:543d6784d4cc | 428 | |
EasyCAT | 0:543d6784d4cc | 429 | #ifdef EC_VER1 |
EasyCAT | 0:543d6784d4cc | 430 | /** global struct to hold default master context */ |
EasyCAT | 0:543d6784d4cc | 431 | extern ecx_contextt ecx_context; |
EasyCAT | 0:543d6784d4cc | 432 | /** main slave data structure array */ |
EasyCAT | 0:543d6784d4cc | 433 | extern ec_slavet ec_slave[EC_MAXSLAVE]; |
EasyCAT | 0:543d6784d4cc | 434 | /** number of slaves found by configuration function */ |
EasyCAT | 0:543d6784d4cc | 435 | extern int ec_slavecount; |
EasyCAT | 0:543d6784d4cc | 436 | /** slave group structure */ |
EasyCAT | 0:543d6784d4cc | 437 | extern ec_groupt ec_group[EC_MAXGROUP]; |
EasyCAT | 0:543d6784d4cc | 438 | extern boolean EcatError; |
EasyCAT | 0:543d6784d4cc | 439 | extern int64 ec_DCtime; |
EasyCAT | 0:543d6784d4cc | 440 | |
EasyCAT | 0:543d6784d4cc | 441 | void ec_pusherror(const ec_errort *Ec); |
EasyCAT | 0:543d6784d4cc | 442 | boolean ec_poperror(ec_errort *Ec); |
EasyCAT | 0:543d6784d4cc | 443 | boolean ec_iserror(void); |
EasyCAT | 0:543d6784d4cc | 444 | void ec_packeterror(uint16 Slave, uint16 Index, uint8 SubIdx, uint16 ErrorCode); |
EasyCAT | 0:543d6784d4cc | 445 | int ec_init(const char * ifname); |
EasyCAT | 0:543d6784d4cc | 446 | int ec_init_redundant(const char *ifname, char *if2name); |
EasyCAT | 0:543d6784d4cc | 447 | void ec_close(void); |
EasyCAT | 0:543d6784d4cc | 448 | uint8 ec_siigetbyte(uint16 slave, uint16 address); |
EasyCAT | 0:543d6784d4cc | 449 | int16 ec_siifind(uint16 slave, uint16 cat); |
EasyCAT | 0:543d6784d4cc | 450 | void ec_siistring(char *str, uint16 slave, uint16 Sn); |
EasyCAT | 0:543d6784d4cc | 451 | uint16 ec_siiFMMU(uint16 slave, ec_eepromFMMUt* FMMU); |
EasyCAT | 0:543d6784d4cc | 452 | uint16 ec_siiSM(uint16 slave, ec_eepromSMt* SM); |
EasyCAT | 0:543d6784d4cc | 453 | uint16 ec_siiSMnext(uint16 slave, ec_eepromSMt* SM, uint16 n); |
EasyCAT | 0:543d6784d4cc | 454 | int ec_siiPDO(uint16 slave, ec_eepromPDOt* PDO, uint8 t); |
EasyCAT | 0:543d6784d4cc | 455 | int ec_readstate(void); |
EasyCAT | 0:543d6784d4cc | 456 | int ec_writestate(uint16 slave); |
EasyCAT | 0:543d6784d4cc | 457 | uint16 ec_statecheck(uint16 slave, uint16 reqstate, int timeout); |
EasyCAT | 0:543d6784d4cc | 458 | int ec_mbxempty(uint16 slave, int timeout); |
EasyCAT | 0:543d6784d4cc | 459 | int ec_mbxsend(uint16 slave,ec_mbxbuft *mbx, int timeout); |
EasyCAT | 0:543d6784d4cc | 460 | int ec_mbxreceive(uint16 slave, ec_mbxbuft *mbx, int timeout); |
EasyCAT | 0:543d6784d4cc | 461 | void ec_esidump(uint16 slave, uint8 *esibuf); |
EasyCAT | 0:543d6784d4cc | 462 | uint32 ec_readeeprom(uint16 slave, uint16 eeproma, int timeout); |
EasyCAT | 0:543d6784d4cc | 463 | int ec_writeeeprom(uint16 slave, uint16 eeproma, uint16 data, int timeout); |
EasyCAT | 0:543d6784d4cc | 464 | int ec_eeprom2master(uint16 slave); |
EasyCAT | 0:543d6784d4cc | 465 | int ec_eeprom2pdi(uint16 slave); |
EasyCAT | 0:543d6784d4cc | 466 | uint64 ec_readeepromAP(uint16 aiadr, uint16 eeproma, int timeout); |
EasyCAT | 0:543d6784d4cc | 467 | int ec_writeeepromAP(uint16 aiadr, uint16 eeproma, uint16 data, int timeout); |
EasyCAT | 0:543d6784d4cc | 468 | uint64 ec_readeepromFP(uint16 configadr, uint16 eeproma, int timeout); |
EasyCAT | 0:543d6784d4cc | 469 | int ec_writeeepromFP(uint16 configadr, uint16 eeproma, uint16 data, int timeout); |
EasyCAT | 0:543d6784d4cc | 470 | void ec_readeeprom1(uint16 slave, uint16 eeproma); |
EasyCAT | 0:543d6784d4cc | 471 | uint32 ec_readeeprom2(uint16 slave, int timeout); |
EasyCAT | 0:543d6784d4cc | 472 | int ec_send_processdata_group(uint8 group); |
EasyCAT | 0:543d6784d4cc | 473 | int ec_send_overlap_processdata_group(uint8 group); |
EasyCAT | 0:543d6784d4cc | 474 | int ec_receive_processdata_group(uint8 group, int timeout); |
EasyCAT | 0:543d6784d4cc | 475 | int ec_send_processdata(void); |
EasyCAT | 0:543d6784d4cc | 476 | int ec_send_overlap_processdata(void); |
EasyCAT | 0:543d6784d4cc | 477 | int ec_receive_processdata(int timeout); |
EasyCAT | 0:543d6784d4cc | 478 | #endif |
EasyCAT | 0:543d6784d4cc | 479 | |
EasyCAT | 0:543d6784d4cc | 480 | ec_adaptert * ec_find_adapters(void); |
EasyCAT | 0:543d6784d4cc | 481 | void ec_free_adapters(ec_adaptert * adapter); |
EasyCAT | 0:543d6784d4cc | 482 | uint8 ec_nextmbxcnt(uint8 cnt); |
EasyCAT | 0:543d6784d4cc | 483 | void ec_clearmbx(ec_mbxbuft *Mbx); |
EasyCAT | 0:543d6784d4cc | 484 | void ecx_pusherror(ecx_contextt *context, const ec_errort *Ec); |
EasyCAT | 0:543d6784d4cc | 485 | boolean ecx_poperror(ecx_contextt *context, ec_errort *Ec); |
EasyCAT | 0:543d6784d4cc | 486 | boolean ecx_iserror(ecx_contextt *context); |
EasyCAT | 0:543d6784d4cc | 487 | void ecx_packeterror(ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubIdx, uint16 ErrorCode); |
EasyCAT | 0:543d6784d4cc | 488 | int ecx_init(ecx_contextt *context, const char * ifname); |
EasyCAT | 0:543d6784d4cc | 489 | int ecx_init_redundant(ecx_contextt *context, ecx_redportt *redport, const char *ifname, char *if2name); |
EasyCAT | 0:543d6784d4cc | 490 | void ecx_close(ecx_contextt *context); |
EasyCAT | 0:543d6784d4cc | 491 | uint8 ecx_siigetbyte(ecx_contextt *context, uint16 slave, uint16 address); |
EasyCAT | 0:543d6784d4cc | 492 | int16 ecx_siifind(ecx_contextt *context, uint16 slave, uint16 cat); |
EasyCAT | 0:543d6784d4cc | 493 | void ecx_siistring(ecx_contextt *context, char *str, uint16 slave, uint16 Sn); |
EasyCAT | 0:543d6784d4cc | 494 | uint16 ecx_siiFMMU(ecx_contextt *context, uint16 slave, ec_eepromFMMUt* FMMU); |
EasyCAT | 0:543d6784d4cc | 495 | uint16 ecx_siiSM(ecx_contextt *context, uint16 slave, ec_eepromSMt* SM); |
EasyCAT | 0:543d6784d4cc | 496 | uint16 ecx_siiSMnext(ecx_contextt *context, uint16 slave, ec_eepromSMt* SM, uint16 n); |
EasyCAT | 0:543d6784d4cc | 497 | int ecx_siiPDO(ecx_contextt *context, uint16 slave, ec_eepromPDOt* PDO, uint8 t); |
EasyCAT | 0:543d6784d4cc | 498 | int ecx_readstate(ecx_contextt *context); |
EasyCAT | 0:543d6784d4cc | 499 | int ecx_writestate(ecx_contextt *context, uint16 slave); |
EasyCAT | 0:543d6784d4cc | 500 | uint16 ecx_statecheck(ecx_contextt *context, uint16 slave, uint16 reqstate, int timeout); |
EasyCAT | 0:543d6784d4cc | 501 | int ecx_mbxempty(ecx_contextt *context, uint16 slave, int timeout); |
EasyCAT | 0:543d6784d4cc | 502 | int ecx_mbxsend(ecx_contextt *context, uint16 slave,ec_mbxbuft *mbx, int timeout); |
EasyCAT | 0:543d6784d4cc | 503 | int ecx_mbxreceive(ecx_contextt *context, uint16 slave, ec_mbxbuft *mbx, int timeout); |
EasyCAT | 0:543d6784d4cc | 504 | void ecx_esidump(ecx_contextt *context, uint16 slave, uint8 *esibuf); |
EasyCAT | 0:543d6784d4cc | 505 | uint32 ecx_readeeprom(ecx_contextt *context, uint16 slave, uint16 eeproma, int timeout); |
EasyCAT | 0:543d6784d4cc | 506 | int ecx_writeeeprom(ecx_contextt *context, uint16 slave, uint16 eeproma, uint16 data, int timeout); |
EasyCAT | 0:543d6784d4cc | 507 | int ecx_eeprom2master(ecx_contextt *context, uint16 slave); |
EasyCAT | 0:543d6784d4cc | 508 | int ecx_eeprom2pdi(ecx_contextt *context, uint16 slave); |
EasyCAT | 0:543d6784d4cc | 509 | uint64 ecx_readeepromAP(ecx_contextt *context, uint16 aiadr, uint16 eeproma, int timeout); |
EasyCAT | 0:543d6784d4cc | 510 | int ecx_writeeepromAP(ecx_contextt *context, uint16 aiadr, uint16 eeproma, uint16 data, int timeout); |
EasyCAT | 0:543d6784d4cc | 511 | uint64 ecx_readeepromFP(ecx_contextt *context, uint16 configadr, uint16 eeproma, int timeout); |
EasyCAT | 0:543d6784d4cc | 512 | int ecx_writeeepromFP(ecx_contextt *context, uint16 configadr, uint16 eeproma, uint16 data, int timeout); |
EasyCAT | 0:543d6784d4cc | 513 | void ecx_readeeprom1(ecx_contextt *context, uint16 slave, uint16 eeproma); |
EasyCAT | 0:543d6784d4cc | 514 | uint32 ecx_readeeprom2(ecx_contextt *context, uint16 slave, int timeout); |
EasyCAT | 0:543d6784d4cc | 515 | int ecx_send_overlap_processdata_group(ecx_contextt *context, uint8 group); |
EasyCAT | 0:543d6784d4cc | 516 | int ecx_receive_processdata_group(ecx_contextt *context, uint8 group, int timeout); |
EasyCAT | 0:543d6784d4cc | 517 | int ecx_send_processdata(ecx_contextt *context); |
EasyCAT | 0:543d6784d4cc | 518 | int ecx_send_overlap_processdata(ecx_contextt *context); |
EasyCAT | 0:543d6784d4cc | 519 | int ecx_receive_processdata(ecx_contextt *context, int timeout); |
EasyCAT | 0:543d6784d4cc | 520 | int ecx_send_processdata_group(ecx_contextt *context, uint8 group); |
EasyCAT | 0:543d6784d4cc | 521 | |
EasyCAT | 0:543d6784d4cc | 522 | #ifdef __cplusplus |
EasyCAT | 0:543d6784d4cc | 523 | } |
EasyCAT | 0:543d6784d4cc | 524 | #endif |
EasyCAT | 0:543d6784d4cc | 525 | |
EasyCAT | 0:543d6784d4cc | 526 | #endif |