105 for (i = 0; i < numSlaves; i++) { |
105 for (i = 0; i < numSlaves; i++) { |
106 listSlavePdos(i, true); |
106 listSlavePdos(i, true); |
107 } |
107 } |
108 } else { |
108 } else { |
109 listSlavePdos(slavePosition, false); |
109 listSlavePdos(slavePosition, false); |
|
110 } |
|
111 } |
|
112 |
|
113 /****************************************************************************/ |
|
114 |
|
115 void Master::generateXml(int slavePosition) |
|
116 { |
|
117 if (slavePosition == -1) { |
|
118 unsigned int numSlaves = slaveCount(), i; |
|
119 |
|
120 for (i = 0; i < numSlaves; i++) { |
|
121 generateSlaveXml(i); |
|
122 } |
|
123 } else { |
|
124 generateSlaveXml(slavePosition); |
110 } |
125 } |
111 } |
126 } |
112 |
127 |
113 /****************************************************************************/ |
128 /****************************************************************************/ |
114 |
129 |
156 << ", " << dec << (unsigned int) entry.bit_length |
171 << ", " << dec << (unsigned int) entry.bit_length |
157 << " bit, \"" << entry.name << "\"" << endl; |
172 << " bit, \"" << entry.name << "\"" << endl; |
158 } |
173 } |
159 } |
174 } |
160 } |
175 } |
|
176 } |
|
177 |
|
178 /****************************************************************************/ |
|
179 |
|
180 void Master::generateSlaveXml(uint16_t slavePosition) |
|
181 { |
|
182 ec_ioctl_slave_t slave; |
|
183 ec_ioctl_sync_t sync; |
|
184 ec_ioctl_pdo_t pdo; |
|
185 ec_ioctl_pdo_entry_t entry; |
|
186 unsigned int i, j, k; |
|
187 |
|
188 getSlave(&slave, slavePosition); |
|
189 |
|
190 cout |
|
191 << "<?xml version=\"1.0\" ?>" << endl |
|
192 << " <EtherCATInfo>" << endl |
|
193 << " <!-- Slave " << slave.position << " -->" << endl |
|
194 << " <Vendor>" << endl |
|
195 << " <Id>" << slave.vendor_id << "</Id>" << endl |
|
196 << " </Vendor>" << endl |
|
197 << " <Descriptions>" << endl |
|
198 << " <Devices>" << endl |
|
199 << " <Device>" << endl |
|
200 << " <Type ProductCode=\"#x" |
|
201 << hex << setfill('0') << setw(8) << slave.product_code |
|
202 << "\" RevisionNo=\"#x" |
|
203 << hex << setfill('0') << setw(8) << slave.revision_number |
|
204 << "\"/>" << endl; |
|
205 |
|
206 for (i = 0; i < slave.sync_count; i++) { |
|
207 getSync(&sync, slavePosition, i); |
|
208 |
|
209 for (j = 0; j < sync.pdo_count; j++) { |
|
210 getPdo(&pdo, slavePosition, i, j); |
|
211 |
|
212 cout |
|
213 << " <" << (pdo.dir ? "T" : "R") << "xPdo>" << endl |
|
214 << " <Index>#x" |
|
215 << hex << setfill('0') << setw(4) << pdo.index |
|
216 << "</Index>" << endl |
|
217 << " <Name>" << pdo.name << "</Name>" << endl; |
|
218 |
|
219 for (k = 0; k < pdo.entry_count; k++) { |
|
220 getPdoEntry(&entry, slavePosition, i, j, k); |
|
221 |
|
222 cout |
|
223 << " <Entry>" << endl |
|
224 << " <Index>#x" |
|
225 << hex << setfill('0') << setw(4) << entry.index |
|
226 << "</Index>" << endl; |
|
227 if (entry.index) |
|
228 cout |
|
229 << " <SubIndex>" |
|
230 << dec << (unsigned int) entry.subindex |
|
231 << "</SubIndex>" << endl; |
|
232 |
|
233 cout |
|
234 << " <BitLen>" |
|
235 << (unsigned int) entry.bit_length |
|
236 << "</BitLen>" << endl; |
|
237 |
|
238 if (entry.index) { |
|
239 cout |
|
240 << " <Name>" << entry.name |
|
241 << "</Name>" << endl |
|
242 << " <DataType>"; |
|
243 |
|
244 if (entry.bit_length == 1) { |
|
245 cout << "BOOL"; |
|
246 } else if (!(entry.bit_length % 8)) { |
|
247 if (entry.bit_length <= 64) |
|
248 cout << "UINT" << (unsigned int) entry.bit_length; |
|
249 else |
|
250 cout << "STRING(" |
|
251 << (unsigned int) (entry.bit_length / 8) |
|
252 << ")"; |
|
253 } else { |
|
254 cerr << "Invalid bit length " |
|
255 << (unsigned int) entry.bit_length << endl; |
|
256 } |
|
257 |
|
258 cout << "</DataType>" << endl; |
|
259 } |
|
260 |
|
261 cout << " </Entry>" << endl; |
|
262 } |
|
263 |
|
264 cout |
|
265 << " </" << (pdo.dir ? "T" : "R") << "xPdo>" << endl; |
|
266 } |
|
267 } |
|
268 |
|
269 cout |
|
270 << " </Device>" << endl |
|
271 << " </Devices>" << endl |
|
272 << " </Descriptions>" << endl |
|
273 << "</EtherCATInfo>" << endl; |
161 } |
274 } |
162 |
275 |
163 /****************************************************************************/ |
276 /****************************************************************************/ |
164 |
277 |
165 unsigned int Master::slaveCount() |
278 unsigned int Master::slaveCount() |