tool/CommandPdos.cpp
changeset 1151 1fc1535dec29
parent 1144 7dbfdd61812c
child 1157 04d1c950cf9d
equal deleted inserted replaced
1150:c589b54ade01 1151:1fc1535dec29
    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