30 #include <iostream> |
30 #include <iostream> |
31 #include <iomanip> |
31 #include <iomanip> |
32 using namespace std; |
32 using namespace std; |
33 |
33 |
34 #include "CommandPdos.h" |
34 #include "CommandPdos.h" |
|
35 #include "MasterDevice.h" |
35 |
36 |
36 /*****************************************************************************/ |
37 /*****************************************************************************/ |
37 |
38 |
38 CommandPdos::CommandPdos(): |
39 CommandPdos::CommandPdos(): |
39 Command("pdos", "List Sync managers, PDO assignment and mapping.") |
40 Command("pdos", "List Sync managers, PDO assignment and mapping.") |
86 return str.str(); |
87 return str.str(); |
87 } |
88 } |
88 |
89 |
89 /****************************************************************************/ |
90 /****************************************************************************/ |
90 |
91 |
91 void CommandPdos::execute(MasterDevice &m, const StringVector &args) |
92 void CommandPdos::execute(const StringVector &args) |
92 { |
93 { |
93 SlaveList slaves; |
94 SlaveList slaves; |
94 SlaveList::const_iterator si; |
95 SlaveList::const_iterator si; |
95 bool showHeader; |
96 bool showHeader, multiMaster; |
96 |
97 |
97 if (args.size()) { |
98 if (args.size()) { |
98 stringstream err; |
99 stringstream err; |
99 err << "'" << getName() << "' takes no arguments!"; |
100 err << "'" << getName() << "' takes no arguments!"; |
100 throwInvalidUsageException(err); |
101 throwInvalidUsageException(err); |
101 } |
102 } |
102 |
103 |
103 m.open(MasterDevice::Read); |
104 multiMaster = getMasterIndices().size() > 1; |
104 slaves = selectedSlaves(m); |
105 MasterIndexList::const_iterator mi; |
105 showHeader = slaves.size() > 1; |
106 for (mi = getMasterIndices().begin(); |
|
107 mi != getMasterIndices().end(); mi++) { |
|
108 MasterDevice m(*mi); |
|
109 m.open(MasterDevice::Read); |
|
110 slaves = selectedSlaves(m); |
|
111 showHeader = multiMaster || slaves.size() > 1; |
106 |
112 |
107 for (si = slaves.begin(); si != slaves.end(); si++) { |
113 for (si = slaves.begin(); si != slaves.end(); si++) { |
108 listSlavePdos(m, *si, showHeader); |
114 listSlavePdos(m, *si, showHeader); |
|
115 } |
109 } |
116 } |
110 } |
117 } |
111 |
118 |
112 /****************************************************************************/ |
119 /****************************************************************************/ |
113 |
120 |
121 ec_ioctl_slave_sync_pdo_t pdo; |
128 ec_ioctl_slave_sync_pdo_t pdo; |
122 ec_ioctl_slave_sync_pdo_entry_t entry; |
129 ec_ioctl_slave_sync_pdo_entry_t entry; |
123 unsigned int i, j, k; |
130 unsigned int i, j, k; |
124 |
131 |
125 if (showHeader) |
132 if (showHeader) |
126 cout << "=== Slave " << slave.position << " ===" << endl; |
133 cout << "=== Master " << m.getIndex() |
|
134 << ", Slave " << slave.position << " ===" << endl; |
127 |
135 |
128 for (i = 0; i < slave.sync_count; i++) { |
136 for (i = 0; i < slave.sync_count; i++) { |
129 m.getSync(&sync, slave.position, i); |
137 m.getSync(&sync, slave.position, i); |
130 |
138 |
131 cout << "SM" << i << ":" |
139 cout << "SM" << i << ":" |