tool/cmd_pdos.cpp
changeset 1126 b09fd81894cb
child 1130 bb1c11adb2db
equal deleted inserted replaced
1125:9976f7b9fe66 1126:b09fd81894cb
       
     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 /*****************************************************************************/