60 ::close(fd); |
60 ::close(fd); |
61 } |
61 } |
62 |
62 |
63 /****************************************************************************/ |
63 /****************************************************************************/ |
64 |
64 |
|
65 void Master::showDomains(int domainIndex) |
|
66 { |
|
67 if (domainIndex == -1) { |
|
68 unsigned int numDomains = domainCount(), i; |
|
69 |
|
70 for (i = 0; i < numDomains; i++) { |
|
71 showDomain(i); |
|
72 } |
|
73 } else { |
|
74 showDomain(domainIndex); |
|
75 } |
|
76 } |
|
77 |
|
78 /****************************************************************************/ |
|
79 |
65 void Master::listSlaves() |
80 void Master::listSlaves() |
66 { |
81 { |
67 unsigned int numSlaves = slaveCount(), i; |
82 unsigned int numSlaves = slaveCount(), i; |
68 ec_ioctl_slave_t slave; |
83 ec_ioctl_slave_t slave; |
69 uint16_t lastAlias, aliasIndex; |
84 uint16_t lastAlias, aliasIndex; |
121 generateSlaveXml(i); |
136 generateSlaveXml(i); |
122 } |
137 } |
123 } else { |
138 } else { |
124 generateSlaveXml(slavePosition); |
139 generateSlaveXml(slavePosition); |
125 } |
140 } |
|
141 } |
|
142 |
|
143 /****************************************************************************/ |
|
144 |
|
145 void Master::showDomain(unsigned int domainIndex) |
|
146 { |
|
147 ec_ioctl_domain_t data; |
|
148 |
|
149 getDomain(&data, domainIndex); |
|
150 |
|
151 unsigned int data_size; |
|
152 uint32_t logical_base_address; |
|
153 uint16_t working_counter; |
|
154 uint16_t expected_working_counter; |
|
155 |
|
156 cout << "Domain" << domainIndex << ":" |
|
157 << " LogBaseAddr 0x" |
|
158 << hex << setfill('0') << setw(8) << data.logical_base_address |
|
159 << ", Size " << dec << data.data_size |
|
160 << ", WorkingCounter " |
|
161 << dec << data.working_counter |
|
162 << " of " << data.expected_working_counter |
|
163 << endl; |
126 } |
164 } |
127 |
165 |
128 /****************************************************************************/ |
166 /****************************************************************************/ |
129 |
167 |
130 void Master::listSlavePdos(uint16_t slavePosition, bool printSlave) |
168 void Master::listSlavePdos(uint16_t slavePosition, bool printSlave) |
273 << "</EtherCATInfo>" << endl; |
311 << "</EtherCATInfo>" << endl; |
274 } |
312 } |
275 |
313 |
276 /****************************************************************************/ |
314 /****************************************************************************/ |
277 |
315 |
|
316 unsigned int Master::domainCount() |
|
317 { |
|
318 int ret; |
|
319 |
|
320 if ((ret = ioctl(fd, EC_IOCTL_DOMAIN_COUNT, 0)) < 0) { |
|
321 stringstream err; |
|
322 err << "Failed to get number of domains: " << strerror(errno); |
|
323 throw MasterException(err.str()); |
|
324 } |
|
325 |
|
326 return ret; |
|
327 } |
|
328 |
|
329 /****************************************************************************/ |
|
330 |
278 unsigned int Master::slaveCount() |
331 unsigned int Master::slaveCount() |
279 { |
332 { |
280 int ret; |
333 int ret; |
281 |
334 |
282 if ((ret = ioctl(fd, EC_IOCTL_SLAVE_COUNT, 0)) < 0) { |
335 if ((ret = ioctl(fd, EC_IOCTL_SLAVE_COUNT, 0)) < 0) { |
283 stringstream err; |
336 stringstream err; |
284 err << "Failed to get slave: " << strerror(errno); |
337 err << "Failed to get number of slaves: " << strerror(errno); |
285 throw MasterException(err.str()); |
338 throw MasterException(err.str()); |
286 } |
339 } |
287 |
340 |
288 return ret; |
341 return ret; |
|
342 } |
|
343 |
|
344 /****************************************************************************/ |
|
345 |
|
346 void Master::getDomain(ec_ioctl_domain_t *data, unsigned int index) |
|
347 { |
|
348 data->index = index; |
|
349 |
|
350 if (ioctl(fd, EC_IOCTL_DOMAIN, data)) { |
|
351 stringstream err; |
|
352 err << "Failed to get domain: "; |
|
353 if (errno == EINVAL) |
|
354 err << "Domain " << index << " does not exist!"; |
|
355 else |
|
356 err << strerror(errno); |
|
357 throw MasterException(err.str()); |
|
358 } |
289 } |
359 } |
290 |
360 |
291 /****************************************************************************/ |
361 /****************************************************************************/ |
292 |
362 |
293 void Master::getSlave(ec_ioctl_slave_t *slave, uint16_t slaveIndex) |
363 void Master::getSlave(ec_ioctl_slave_t *slave, uint16_t slaveIndex) |