9 #include "ecat_datatype.h"
10 #include "fmt/printf.h"
23 EC_AL_STATE_PREOP = 2,
24 EC_AL_STATE_SAFEOP = 4,
28 constexpr std::pair<const char*, EcatAlState> TransitionToStr[] = {{
"IP", EcatAlState::EC_AL_STATE_INIT},
29 {
"PS", EcatAlState::EC_AL_STATE_PREOP},
30 {
"SO", EcatAlState::EC_AL_STATE_SAFEOP},
31 {0x0, EcatAlState::EC_AL_STATE_PREOP}};
33 constexpr
const char* transitionToStr(EcatAlState al_state) {
34 unsigned int counter = 0;
35 while (TransitionToStr[counter].first) {
36 if (TransitionToStr[counter].second == al_state) {
41 return TransitionToStr[counter].first;
48 enum EcatWatchdogMode {
55 constexpr std::pair<const char*, EcatWatchdogMode> EcatWdToStr[]{{
"Default", EcatWatchdogMode::EC_WD_DEFAULT},
56 {
"Enable", EcatWatchdogMode::EC_WD_ENABLE},
57 {
"Disable", EcatWatchdogMode::EC_WD_DISABLE},
58 {0x0, EcatWatchdogMode::EC_WD_COUNT}};
70 using SdoDirection = EcatDirection;
72 constexpr std::pair<const char*, EcatDirection> EcatDirToStr[]{{
"Invalid", EcatDirection::EC_DIR_INVALID},
73 {
"Output", EcatDirection::EC_DIR_OUTPUT},
74 {
"Input", EcatDirection::EC_DIR_INPUT},
75 {
"Both", EcatDirection::EC_DIR_BOTH},
76 {0x0, EcatDirection::EC_DIR_COUNT}};
79 unsigned int device_id;
81 unsigned int subindex;
88 unsigned int pdo_index;
89 unsigned int entry_index;
90 unsigned int entry_subindex;
93 enum ParameterLinkType { PL_DIR_UNKNOWN, PL_DIR_TO, PL_DIR_FROM, PL_SDO_READ, PL_SDO_WRITE };
98 ParameterLinkType type;
124 std::vector<ParameterLink> links;
125 std::vector<EcatPdoInfo> entries;
149 enum SdoDownloadState {
158 EC_CAN_OVER_ETHERCAT,
159 EC_SERCOS_OVER_ETHERCAT
162 constexpr std::pair<const char*, SdoType> SdoTypeToStr[]{{
"Invalid", SdoType::EC_SDO_TYPE_INVALID},
163 {
"COE", SdoType::EC_CAN_OVER_ETHERCAT},
164 {
"SOE", SdoType::EC_SERCOS_OVER_ETHERCAT}};
168 unsigned int assign_activate;
169 unsigned int cycle_time_sync0;
170 unsigned int shift_time_sync0;
171 unsigned int cycle_time_sync1;
172 unsigned int shift_time_sync1;
176 unsigned int vendor_id;
177 unsigned int product_code;
179 unsigned int position;
189 std::vector<EcatSyncInfo> sm_info;
190 std::vector<EcatDcInfo> dc_info;
194 using Links = std::vector<ParameterLink>;
195 using Entries = std::vector<EcatSdoConfig>;
203 unsigned int subindex;
205 uint8_t* read_data_ptr;
206 uint8_t* write_data_ptr;
215 return std::hash<std::string>{}(
216 fmt::format(
"{}:{}:{}:{}", sdo_config.pos, sdo_config.index, sdo_config.subindex, sdo_config.dir));
220 EcatAlState state_transition;
221 unsigned int op_code;
222 unsigned int drive_no;
224 unsigned int elements;
225 unsigned int attribute;
226 unsigned int timeout;
227 std::vector<unsigned char> data;
232 bool complete_access;
233 EcatAlState state_transition;
235 unsigned int subindex;
236 unsigned int timeout;
238 std::vector<unsigned char> data;
243 std::vector<EcatSoe> soe;
244 std::vector<EcatCoe> coe;
249 std::vector<EcatMailbox> mailbox;
250 std::vector<EcatSyncInfo> sm;
251 std::vector<EcatSdoConfig> sdo;
258 std::vector<EcatDeviceConfig> device;
259 double no_error_timeout_sec;
260 double error_timeout_sec;