65 |
65 |
66 /****************************************************************************/ |
66 /****************************************************************************/ |
67 |
67 |
68 void CommandPdos::execute(MasterDevice &m, const StringVector &args) |
68 void CommandPdos::execute(MasterDevice &m, const StringVector &args) |
69 { |
69 { |
|
70 SlaveList slaves; |
|
71 SlaveList::const_iterator si; |
|
72 bool showHeader; |
|
73 |
70 m.open(MasterDevice::Read); |
74 m.open(MasterDevice::Read); |
|
75 slaves = selectedSlaves(m); |
|
76 showHeader = slaves.size() > 1; |
71 |
77 |
72 if (slavePosition == -1) { |
78 for (si = slaves.begin(); si != slaves.end(); si++) { |
73 unsigned int numSlaves = m.slaveCount(), i; |
79 listSlavePdos(m, *si, showHeader); |
74 |
|
75 for (i = 0; i < numSlaves; i++) { |
|
76 listSlavePdos(m, i, true); |
|
77 } |
|
78 } else { |
|
79 listSlavePdos(m, slavePosition, false); |
|
80 } |
80 } |
81 } |
81 } |
82 |
82 |
83 /****************************************************************************/ |
83 /****************************************************************************/ |
84 |
84 |
85 void CommandPdos::listSlavePdos( |
85 void CommandPdos::listSlavePdos( |
86 MasterDevice &m, |
86 MasterDevice &m, |
87 uint16_t slavePosition, |
87 const ec_ioctl_slave_t &slave, |
88 bool withHeader |
88 bool showHeader |
89 ) |
89 ) |
90 { |
90 { |
91 ec_ioctl_slave_t slave; |
|
92 ec_ioctl_slave_sync_t sync; |
91 ec_ioctl_slave_sync_t sync; |
93 ec_ioctl_slave_sync_pdo_t pdo; |
92 ec_ioctl_slave_sync_pdo_t pdo; |
94 ec_ioctl_slave_sync_pdo_entry_t entry; |
93 ec_ioctl_slave_sync_pdo_entry_t entry; |
95 unsigned int i, j, k; |
94 unsigned int i, j, k; |
96 |
95 |
97 m.getSlave(&slave, slavePosition); |
96 if (showHeader) |
98 |
97 cout << "=== Slave " << slave.position << " ===" << endl; |
99 if (withHeader) |
|
100 cout << "=== Slave " << slavePosition << " ===" << endl; |
|
101 |
98 |
102 for (i = 0; i < slave.sync_count; i++) { |
99 for (i = 0; i < slave.sync_count; i++) { |
103 m.getSync(&sync, slavePosition, i); |
100 m.getSync(&sync, slave.position, i); |
104 |
101 |
105 cout << "SM" << i << ":" |
102 cout << "SM" << i << ":" |
106 << " PhysAddr 0x" |
103 << " PhysAddr 0x" |
107 << hex << setfill('0') |
104 << hex << setfill('0') |
108 << setw(4) << sync.physical_start_address |
105 << setw(4) << sync.physical_start_address |
113 << (unsigned int) sync.control_register |
110 << (unsigned int) sync.control_register |
114 << ", Enable " << dec << (unsigned int) sync.enable |
111 << ", Enable " << dec << (unsigned int) sync.enable |
115 << endl; |
112 << endl; |
116 |
113 |
117 for (j = 0; j < sync.pdo_count; j++) { |
114 for (j = 0; j < sync.pdo_count; j++) { |
118 m.getPdo(&pdo, slavePosition, i, j); |
115 m.getPdo(&pdo, slave.position, i, j); |
119 |
116 |
120 cout << " " << (sync.control_register & 0x04 ? "R" : "T") |
117 cout << " " << (sync.control_register & 0x04 ? "R" : "T") |
121 << "xPdo 0x" |
118 << "xPdo 0x" |
122 << hex << setfill('0') |
119 << hex << setfill('0') |
123 << setw(4) << pdo.index |
120 << setw(4) << pdo.index |
125 |
122 |
126 if (getVerbosity() == Quiet) |
123 if (getVerbosity() == Quiet) |
127 continue; |
124 continue; |
128 |
125 |
129 for (k = 0; k < pdo.entry_count; k++) { |
126 for (k = 0; k < pdo.entry_count; k++) { |
130 m.getPdoEntry(&entry, slavePosition, i, j, k); |
127 m.getPdoEntry(&entry, slave.position, i, j, k); |
131 |
128 |
132 cout << " Pdo entry 0x" |
129 cout << " Pdo entry 0x" |
133 << hex << setfill('0') |
130 << hex << setfill('0') |
134 << setw(4) << entry.index |
131 << setw(4) << entry.index |
135 << ":" << setw(2) << (unsigned int) entry.subindex |
132 << ":" << setw(2) << (unsigned int) entry.subindex |