30 #include <iostream> |
30 #include <iostream> |
31 #include <iomanip> |
31 #include <iomanip> |
32 using namespace std; |
32 using namespace std; |
33 |
33 |
34 #include "CommandSdos.h" |
34 #include "CommandSdos.h" |
|
35 #include "MasterDevice.h" |
35 |
36 |
36 /*****************************************************************************/ |
37 /*****************************************************************************/ |
37 |
38 |
38 CommandSdos::CommandSdos(): |
39 CommandSdos::CommandSdos(): |
39 SdoCommand("sdos", "List SDO dictionaries.") |
40 SdoCommand("sdos", "List SDO dictionaries.") |
84 return str.str(); |
85 return str.str(); |
85 } |
86 } |
86 |
87 |
87 /****************************************************************************/ |
88 /****************************************************************************/ |
88 |
89 |
89 void CommandSdos::execute(MasterDevice &m, const StringVector &args) |
90 void CommandSdos::execute(const StringVector &args) |
90 { |
91 { |
91 SlaveList slaves; |
92 SlaveList slaves; |
92 SlaveList::const_iterator si; |
93 SlaveList::const_iterator si; |
93 bool showHeader; |
94 bool showHeader, multiMaster; |
94 |
95 |
95 if (args.size()) { |
96 if (args.size()) { |
96 stringstream err; |
97 stringstream err; |
97 err << "'" << getName() << "' takes no arguments!"; |
98 err << "'" << getName() << "' takes no arguments!"; |
98 throwInvalidUsageException(err); |
99 throwInvalidUsageException(err); |
99 } |
100 } |
100 |
101 |
101 m.open(MasterDevice::Read); |
102 multiMaster = getMasterIndices().size() > 1; |
102 slaves = selectedSlaves(m); |
103 MasterIndexList::const_iterator mi; |
103 showHeader = slaves.size() > 1; |
104 for (mi = getMasterIndices().begin(); |
|
105 mi != getMasterIndices().end(); mi++) { |
|
106 MasterDevice m(*mi); |
|
107 m.open(MasterDevice::Read); |
|
108 slaves = selectedSlaves(m); |
|
109 showHeader = multiMaster || slaves.size() > 1; |
104 |
110 |
105 for (si = slaves.begin(); si != slaves.end(); si++) { |
111 for (si = slaves.begin(); si != slaves.end(); si++) { |
106 listSlaveSdos(m, *si, showHeader); |
112 listSlaveSdos(m, *si, showHeader); |
|
113 } |
107 } |
114 } |
108 } |
115 } |
109 |
116 |
110 /****************************************************************************/ |
117 /****************************************************************************/ |
111 |
118 |
119 ec_ioctl_slave_sdo_entry_t entry; |
126 ec_ioctl_slave_sdo_entry_t entry; |
120 unsigned int i, j; |
127 unsigned int i, j; |
121 const DataType *d; |
128 const DataType *d; |
122 |
129 |
123 if (showHeader) |
130 if (showHeader) |
124 cout << "=== Slave " << slave.position << " ===" << endl; |
131 cout << "=== Master " << m.getIndex() |
|
132 << ", Slave " << slave.position << " ===" << endl; |
125 |
133 |
126 for (i = 0; i < slave.sdo_count; i++) { |
134 for (i = 0; i < slave.sdo_count; i++) { |
127 m.getSdo(&sdo, slave.position, i); |
135 m.getSdo(&sdo, slave.position, i); |
128 |
136 |
129 cout << "SDO 0x" |
137 cout << "SDO 0x" |