tool/CommandXml.cpp
changeset 1151 1fc1535dec29
parent 1144 7dbfdd61812c
child 1157 04d1c950cf9d
equal deleted inserted replaced
1150:c589b54ade01 1151:1fc1535dec29
    43 
    43 
    44 /****************************************************************************/
    44 /****************************************************************************/
    45 
    45 
    46 void CommandXml::execute(MasterDevice &m, const StringVector &args)
    46 void CommandXml::execute(MasterDevice &m, const StringVector &args)
    47 {
    47 {
       
    48     SlaveList slaves;
       
    49     SlaveList::const_iterator si;
       
    50 
    48     m.open(MasterDevice::Read);
    51     m.open(MasterDevice::Read);
       
    52     slaves = selectedSlaves(m);
    49 
    53 
    50     if (slavePosition == -1) {
    54     for (si = slaves.begin(); si != slaves.end(); si++) {
    51         unsigned int numSlaves = m.slaveCount(), i;
    55         generateSlaveXml(m, *si);
    52 
       
    53         for (i = 0; i < numSlaves; i++) {
       
    54             generateSlaveXml(m, i);
       
    55         }
       
    56     } else {
       
    57         generateSlaveXml(m, slavePosition);
       
    58     }
    56     }
    59 }
    57 }
    60 
    58 
    61 /****************************************************************************/
    59 /****************************************************************************/
    62 
    60 
    63 void CommandXml::generateSlaveXml(MasterDevice &m, uint16_t slavePosition)
    61 void CommandXml::generateSlaveXml(
       
    62         MasterDevice &m,
       
    63         const ec_ioctl_slave_t &slave
       
    64         )
    64 {
    65 {
    65     ec_ioctl_slave_t slave;
       
    66     ec_ioctl_slave_sync_t sync;
    66     ec_ioctl_slave_sync_t sync;
    67     ec_ioctl_slave_sync_pdo_t pdo;
    67     ec_ioctl_slave_sync_pdo_t pdo;
    68     string pdoType;
    68     string pdoType;
    69     ec_ioctl_slave_sync_pdo_entry_t entry;
    69     ec_ioctl_slave_sync_pdo_entry_t entry;
    70     unsigned int i, j, k;
    70     unsigned int i, j, k;
    71     
    71     
    72     m.getSlave(&slave, slavePosition);
       
    73 
       
    74     cout
    72     cout
    75         << "<?xml version=\"1.0\" ?>" << endl
    73         << "<?xml version=\"1.0\" ?>" << endl
    76         << "  <EtherCATInfo>" << endl
    74         << "  <EtherCATInfo>" << endl
    77         << "    <!-- Slave " << slave.position << " -->" << endl
    75         << "    <!-- Slave " << slave.position << " -->" << endl
    78         << "    <Vendor>" << endl
    76         << "    <Vendor>" << endl
    93             << slave.name
    91             << slave.name
    94             << "]]></Name>" << endl;
    92             << "]]></Name>" << endl;
    95     }
    93     }
    96 
    94 
    97     for (i = 0; i < slave.sync_count; i++) {
    95     for (i = 0; i < slave.sync_count; i++) {
    98         m.getSync(&sync, slavePosition, i);
    96         m.getSync(&sync, slave.position, i);
    99 
    97 
   100         cout
    98         cout
   101             << "          <Sm Enable=\"" << dec << (unsigned int) sync.enable
    99             << "          <Sm Enable=\"" << dec << (unsigned int) sync.enable
   102             << "\" StartAddress=\"" << sync.physical_start_address
   100             << "\" StartAddress=\"" << sync.physical_start_address
   103             << "\" ControlByte=\"" << (unsigned int) sync.control_register
   101             << "\" ControlByte=\"" << (unsigned int) sync.control_register
   104             << "\" DefaultSize=\"" << sync.default_size
   102             << "\" DefaultSize=\"" << sync.default_size
   105             << "\" />" << endl;
   103             << "\" />" << endl;
   106     }
   104     }
   107 
   105 
   108     for (i = 0; i < slave.sync_count; i++) {
   106     for (i = 0; i < slave.sync_count; i++) {
   109         m.getSync(&sync, slavePosition, i);
   107         m.getSync(&sync, slave.position, i);
   110 
   108 
   111         for (j = 0; j < sync.pdo_count; j++) {
   109         for (j = 0; j < sync.pdo_count; j++) {
   112             m.getPdo(&pdo, slavePosition, i, j);
   110             m.getPdo(&pdo, slave.position, i, j);
   113             pdoType = (sync.control_register & 0x04 ? "R" : "T");
   111             pdoType = (sync.control_register & 0x04 ? "R" : "T");
   114             pdoType += "xPdo";
   112             pdoType += "xPdo";
   115 
   113 
   116             cout
   114             cout
   117                 << "          <" << pdoType
   115                 << "          <" << pdoType
   120                 << hex << setfill('0') << setw(4) << pdo.index
   118                 << hex << setfill('0') << setw(4) << pdo.index
   121                 << "</Index>" << endl
   119                 << "</Index>" << endl
   122                 << "            <Name>" << pdo.name << "</Name>" << endl;
   120                 << "            <Name>" << pdo.name << "</Name>" << endl;
   123 
   121 
   124             for (k = 0; k < pdo.entry_count; k++) {
   122             for (k = 0; k < pdo.entry_count; k++) {
   125                 m.getPdoEntry(&entry, slavePosition, i, j, k);
   123                 m.getPdoEntry(&entry, slave.position, i, j, k);
   126 
   124 
   127                 cout
   125                 cout
   128                     << "            <Entry>" << endl
   126                     << "            <Entry>" << endl
   129                     << "              <Index>#x"
   127                     << "              <Index>#x"
   130                     << hex << setfill('0') << setw(4) << entry.index
   128                     << hex << setfill('0') << setw(4) << entry.index