tools/Master.cpp
changeset 938 5b936e8e39fa
parent 936 30fddfce8db6
child 948 1cfab7161491
equal deleted inserted replaced
937:e2ee1bed5bd6 938:5b936e8e39fa
   105         for (i = 0; i < numSlaves; i++) {
   105         for (i = 0; i < numSlaves; i++) {
   106             listSlavePdos(i, true);
   106             listSlavePdos(i, true);
   107         }
   107         }
   108     } else {
   108     } else {
   109         listSlavePdos(slavePosition, false);
   109         listSlavePdos(slavePosition, false);
       
   110     }
       
   111 }
       
   112 
       
   113 /****************************************************************************/
       
   114 
       
   115 void Master::generateXml(int slavePosition)
       
   116 {
       
   117     if (slavePosition == -1) {
       
   118         unsigned int numSlaves = slaveCount(), i;
       
   119 
       
   120         for (i = 0; i < numSlaves; i++) {
       
   121             generateSlaveXml(i);
       
   122         }
       
   123     } else {
       
   124         generateSlaveXml(slavePosition);
   110     }
   125     }
   111 }
   126 }
   112 
   127 
   113 /****************************************************************************/
   128 /****************************************************************************/
   114 
   129 
   156                     << ", " << dec << (unsigned int) entry.bit_length
   171                     << ", " << dec << (unsigned int) entry.bit_length
   157                     << " bit, \"" << entry.name << "\"" << endl;
   172                     << " bit, \"" << entry.name << "\"" << endl;
   158             }
   173             }
   159         }
   174         }
   160     }
   175     }
       
   176 }
       
   177 
       
   178 /****************************************************************************/
       
   179 
       
   180 void Master::generateSlaveXml(uint16_t slavePosition)
       
   181 {
       
   182     ec_ioctl_slave_t slave;
       
   183     ec_ioctl_sync_t sync;
       
   184     ec_ioctl_pdo_t pdo;
       
   185     ec_ioctl_pdo_entry_t entry;
       
   186     unsigned int i, j, k;
       
   187     
       
   188     getSlave(&slave, slavePosition);
       
   189 
       
   190     cout
       
   191         << "<?xml version=\"1.0\" ?>" << endl
       
   192         << "  <EtherCATInfo>" << endl
       
   193         << "    <!-- Slave " << slave.position << " -->" << endl
       
   194         << "    <Vendor>" << endl
       
   195         << "      <Id>" << slave.vendor_id << "</Id>" << endl
       
   196         << "    </Vendor>" << endl
       
   197         << "    <Descriptions>" << endl
       
   198         << "      <Devices>" << endl
       
   199         << "        <Device>" << endl
       
   200         << "          <Type ProductCode=\"#x"
       
   201         << hex << setfill('0') << setw(8) << slave.product_code
       
   202         << "\" RevisionNo=\"#x"
       
   203         << hex << setfill('0') << setw(8) << slave.revision_number
       
   204         << "\"/>" << endl;
       
   205 
       
   206     for (i = 0; i < slave.sync_count; i++) {
       
   207         getSync(&sync, slavePosition, i);
       
   208 
       
   209         for (j = 0; j < sync.pdo_count; j++) {
       
   210             getPdo(&pdo, slavePosition, i, j);
       
   211 
       
   212             cout
       
   213                 << "          <" << (pdo.dir ? "T" : "R") << "xPdo>" << endl
       
   214                 << "            <Index>#x"
       
   215                 << hex << setfill('0') << setw(4) << pdo.index
       
   216                 << "</Index>" << endl
       
   217                 << "            <Name>" << pdo.name << "</Name>" << endl;
       
   218 
       
   219             for (k = 0; k < pdo.entry_count; k++) {
       
   220                 getPdoEntry(&entry, slavePosition, i, j, k);
       
   221 
       
   222                 cout
       
   223                     << "            <Entry>" << endl
       
   224                     << "              <Index>#x"
       
   225                     << hex << setfill('0') << setw(4) << entry.index
       
   226                     << "</Index>" << endl;
       
   227                 if (entry.index)
       
   228                     cout
       
   229                         << "              <SubIndex>"
       
   230                         << dec << (unsigned int) entry.subindex
       
   231                         << "</SubIndex>" << endl;
       
   232                 
       
   233                 cout
       
   234                     << "              <BitLen>"
       
   235                     << (unsigned int) entry.bit_length
       
   236                     << "</BitLen>" << endl;
       
   237 
       
   238                 if (entry.index) {
       
   239                     cout
       
   240                         << "              <Name>" << entry.name
       
   241                         << "</Name>" << endl
       
   242                         << "              <DataType>";
       
   243 
       
   244                     if (entry.bit_length == 1) {
       
   245                         cout << "BOOL";
       
   246                     } else if (!(entry.bit_length % 8)) {
       
   247                         if (entry.bit_length <= 64)
       
   248                             cout << "UINT" << (unsigned int) entry.bit_length;
       
   249                         else
       
   250                             cout << "STRING("
       
   251                                 << (unsigned int) (entry.bit_length / 8)
       
   252                                 << ")";
       
   253                     } else {
       
   254                         cerr << "Invalid bit length "
       
   255                             << (unsigned int) entry.bit_length << endl;
       
   256                     }
       
   257 
       
   258                         cout << "</DataType>" << endl;
       
   259                 }
       
   260 
       
   261                 cout << "            </Entry>" << endl;
       
   262             }
       
   263 
       
   264             cout
       
   265                 << "          </" << (pdo.dir ? "T" : "R") << "xPdo>" << endl;
       
   266         }
       
   267     }
       
   268 
       
   269     cout
       
   270         << "        </Device>" << endl
       
   271         << "     </Devices>" << endl
       
   272         << "  </Descriptions>" << endl
       
   273         << "</EtherCATInfo>" << endl;
   161 }
   274 }
   162 
   275 
   163 /****************************************************************************/
   276 /****************************************************************************/
   164 
   277 
   165 unsigned int Master::slaveCount()
   278 unsigned int Master::slaveCount()