|
1 /***************************************************************************** |
|
2 * |
|
3 * $Id$ |
|
4 * |
|
5 ****************************************************************************/ |
|
6 |
|
7 #include <iostream> |
|
8 #include <iomanip> |
|
9 using namespace std; |
|
10 |
|
11 #include "globals.h" |
|
12 |
|
13 /****************************************************************************/ |
|
14 |
|
15 const char *help_pdos = |
|
16 "[OPTIONS]\n" |
|
17 "\n" |
|
18 "\n" |
|
19 "Command-specific options:\n"; |
|
20 |
|
21 /****************************************************************************/ |
|
22 |
|
23 void listSlavePdos(uint16_t, bool); |
|
24 |
|
25 /****************************************************************************/ |
|
26 |
|
27 void command_pdos(void) |
|
28 { |
|
29 masterDev.open(MasterDevice::Read); |
|
30 |
|
31 if (slavePosition == -1) { |
|
32 unsigned int numSlaves = masterDev.slaveCount(), i; |
|
33 |
|
34 for (i = 0; i < numSlaves; i++) { |
|
35 listSlavePdos(i, true); |
|
36 } |
|
37 } else { |
|
38 listSlavePdos(slavePosition, false); |
|
39 } |
|
40 } |
|
41 |
|
42 /****************************************************************************/ |
|
43 |
|
44 void listSlavePdos(uint16_t slavePosition, bool withHeader) |
|
45 { |
|
46 ec_ioctl_slave_t slave; |
|
47 ec_ioctl_slave_sync_t sync; |
|
48 ec_ioctl_slave_sync_pdo_t pdo; |
|
49 ec_ioctl_slave_sync_pdo_entry_t entry; |
|
50 unsigned int i, j, k; |
|
51 |
|
52 masterDev.getSlave(&slave, slavePosition); |
|
53 |
|
54 if (withHeader) |
|
55 cout << "=== Slave " << slavePosition << " ===" << endl; |
|
56 |
|
57 for (i = 0; i < slave.sync_count; i++) { |
|
58 masterDev.getSync(&sync, slavePosition, i); |
|
59 |
|
60 cout << "SM" << i << ":" |
|
61 << " PhysAddr 0x" |
|
62 << hex << setfill('0') |
|
63 << setw(4) << sync.physical_start_address |
|
64 << ", DefaultSize " |
|
65 << dec << setfill(' ') << setw(4) << sync.default_size |
|
66 << ", ControlRegister 0x" |
|
67 << hex << setfill('0') << setw(2) |
|
68 << (unsigned int) sync.control_register |
|
69 << ", Enable " << dec << (unsigned int) sync.enable |
|
70 << endl; |
|
71 |
|
72 for (j = 0; j < sync.pdo_count; j++) { |
|
73 masterDev.getPdo(&pdo, slavePosition, i, j); |
|
74 |
|
75 cout << " " << (sync.control_register & 0x04 ? "R" : "T") |
|
76 << "xPdo 0x" |
|
77 << hex << setfill('0') |
|
78 << setw(4) << pdo.index |
|
79 << " \"" << pdo.name << "\"" << endl; |
|
80 |
|
81 if (verbosity == Quiet) |
|
82 continue; |
|
83 |
|
84 for (k = 0; k < pdo.entry_count; k++) { |
|
85 masterDev.getPdoEntry(&entry, slavePosition, i, j, k); |
|
86 |
|
87 cout << " Pdo entry 0x" |
|
88 << hex << setfill('0') |
|
89 << setw(4) << entry.index |
|
90 << ":" << setw(2) << (unsigned int) entry.subindex |
|
91 << ", " << dec << (unsigned int) entry.bit_length |
|
92 << " bit, \"" << entry.name << "\"" << endl; |
|
93 } |
|
94 } |
|
95 } |
|
96 } |
|
97 |
|
98 /*****************************************************************************/ |