43 |
43 |
44 /****************************************************************************/ |
44 /****************************************************************************/ |
45 |
45 |
46 void CommandXml::execute(MasterDevice &m, const StringVector &args) |
46 void CommandXml::execute(MasterDevice &m, const StringVector &args) |
47 { |
47 { |
|
48 SlaveList slaves; |
|
49 SlaveList::const_iterator si; |
|
50 |
48 m.open(MasterDevice::Read); |
51 m.open(MasterDevice::Read); |
|
52 slaves = selectedSlaves(m); |
49 |
53 |
50 if (slavePosition == -1) { |
54 for (si = slaves.begin(); si != slaves.end(); si++) { |
51 unsigned int numSlaves = m.slaveCount(), i; |
55 generateSlaveXml(m, *si); |
52 |
|
53 for (i = 0; i < numSlaves; i++) { |
|
54 generateSlaveXml(m, i); |
|
55 } |
|
56 } else { |
|
57 generateSlaveXml(m, slavePosition); |
|
58 } |
56 } |
59 } |
57 } |
60 |
58 |
61 /****************************************************************************/ |
59 /****************************************************************************/ |
62 |
60 |
63 void CommandXml::generateSlaveXml(MasterDevice &m, uint16_t slavePosition) |
61 void CommandXml::generateSlaveXml( |
|
62 MasterDevice &m, |
|
63 const ec_ioctl_slave_t &slave |
|
64 ) |
64 { |
65 { |
65 ec_ioctl_slave_t slave; |
|
66 ec_ioctl_slave_sync_t sync; |
66 ec_ioctl_slave_sync_t sync; |
67 ec_ioctl_slave_sync_pdo_t pdo; |
67 ec_ioctl_slave_sync_pdo_t pdo; |
68 string pdoType; |
68 string pdoType; |
69 ec_ioctl_slave_sync_pdo_entry_t entry; |
69 ec_ioctl_slave_sync_pdo_entry_t entry; |
70 unsigned int i, j, k; |
70 unsigned int i, j, k; |
71 |
71 |
72 m.getSlave(&slave, slavePosition); |
|
73 |
|
74 cout |
72 cout |
75 << "<?xml version=\"1.0\" ?>" << endl |
73 << "<?xml version=\"1.0\" ?>" << endl |
76 << " <EtherCATInfo>" << endl |
74 << " <EtherCATInfo>" << endl |
77 << " <!-- Slave " << slave.position << " -->" << endl |
75 << " <!-- Slave " << slave.position << " -->" << endl |
78 << " <Vendor>" << endl |
76 << " <Vendor>" << endl |
93 << slave.name |
91 << slave.name |
94 << "]]></Name>" << endl; |
92 << "]]></Name>" << endl; |
95 } |
93 } |
96 |
94 |
97 for (i = 0; i < slave.sync_count; i++) { |
95 for (i = 0; i < slave.sync_count; i++) { |
98 m.getSync(&sync, slavePosition, i); |
96 m.getSync(&sync, slave.position, i); |
99 |
97 |
100 cout |
98 cout |
101 << " <Sm Enable=\"" << dec << (unsigned int) sync.enable |
99 << " <Sm Enable=\"" << dec << (unsigned int) sync.enable |
102 << "\" StartAddress=\"" << sync.physical_start_address |
100 << "\" StartAddress=\"" << sync.physical_start_address |
103 << "\" ControlByte=\"" << (unsigned int) sync.control_register |
101 << "\" ControlByte=\"" << (unsigned int) sync.control_register |
104 << "\" DefaultSize=\"" << sync.default_size |
102 << "\" DefaultSize=\"" << sync.default_size |
105 << "\" />" << endl; |
103 << "\" />" << endl; |
106 } |
104 } |
107 |
105 |
108 for (i = 0; i < slave.sync_count; i++) { |
106 for (i = 0; i < slave.sync_count; i++) { |
109 m.getSync(&sync, slavePosition, i); |
107 m.getSync(&sync, slave.position, i); |
110 |
108 |
111 for (j = 0; j < sync.pdo_count; j++) { |
109 for (j = 0; j < sync.pdo_count; j++) { |
112 m.getPdo(&pdo, slavePosition, i, j); |
110 m.getPdo(&pdo, slave.position, i, j); |
113 pdoType = (sync.control_register & 0x04 ? "R" : "T"); |
111 pdoType = (sync.control_register & 0x04 ? "R" : "T"); |
114 pdoType += "xPdo"; |
112 pdoType += "xPdo"; |
115 |
113 |
116 cout |
114 cout |
117 << " <" << pdoType |
115 << " <" << pdoType |
120 << hex << setfill('0') << setw(4) << pdo.index |
118 << hex << setfill('0') << setw(4) << pdo.index |
121 << "</Index>" << endl |
119 << "</Index>" << endl |
122 << " <Name>" << pdo.name << "</Name>" << endl; |
120 << " <Name>" << pdo.name << "</Name>" << endl; |
123 |
121 |
124 for (k = 0; k < pdo.entry_count; k++) { |
122 for (k = 0; k < pdo.entry_count; k++) { |
125 m.getPdoEntry(&entry, slavePosition, i, j, k); |
123 m.getPdoEntry(&entry, slave.position, i, j, k); |
126 |
124 |
127 cout |
125 cout |
128 << " <Entry>" << endl |
126 << " <Entry>" << endl |
129 << " <Index>#x" |
127 << " <Index>#x" |
130 << hex << setfill('0') << setw(4) << entry.index |
128 << hex << setfill('0') << setw(4) << entry.index |