fp@1126: /***************************************************************************** fp@1126: * fp@1126: * $Id$ fp@1126: * fp@1126: ****************************************************************************/ fp@1126: fp@1126: #include fp@1126: #include fp@1126: using namespace std; fp@1126: fp@1126: #include "globals.h" fp@1126: fp@1126: /****************************************************************************/ fp@1126: fp@1130: // FIXME fp@1126: const char *help_xml = fp@1126: "[OPTIONS]\n" fp@1126: "\n" fp@1126: "\n" fp@1126: "Command-specific options:\n"; fp@1126: fp@1126: /****************************************************************************/ fp@1126: fp@1126: void generateSlaveXml(uint16_t); fp@1126: fp@1126: /****************************************************************************/ fp@1126: fp@1126: void command_xml(void) fp@1126: { fp@1126: masterDev.open(MasterDevice::Read); fp@1126: fp@1126: if (slavePosition == -1) { fp@1126: unsigned int numSlaves = masterDev.slaveCount(), i; fp@1126: fp@1126: for (i = 0; i < numSlaves; i++) { fp@1126: generateSlaveXml(i); fp@1126: } fp@1126: } else { fp@1126: generateSlaveXml(slavePosition); fp@1126: } fp@1126: } fp@1126: fp@1126: /****************************************************************************/ fp@1126: fp@1126: void generateSlaveXml(uint16_t slavePosition) fp@1126: { fp@1126: ec_ioctl_slave_t slave; fp@1126: ec_ioctl_slave_sync_t sync; fp@1126: ec_ioctl_slave_sync_pdo_t pdo; fp@1126: string pdoType; fp@1126: ec_ioctl_slave_sync_pdo_entry_t entry; fp@1126: unsigned int i, j, k; fp@1126: fp@1126: masterDev.getSlave(&slave, slavePosition); fp@1126: fp@1126: cout fp@1126: << "" << endl fp@1126: << " " << endl fp@1126: << " " << endl fp@1126: << " " << endl fp@1126: << " " << slave.vendor_id << "" << endl fp@1126: << " " << endl fp@1126: << " " << endl fp@1126: << " " << endl fp@1126: << " " << endl fp@1126: << " " << slave.order << "" << endl; fp@1126: fp@1126: if (strlen(slave.name)) { fp@1126: cout fp@1126: << " " << endl; fp@1126: } fp@1126: fp@1126: for (i = 0; i < slave.sync_count; i++) { fp@1126: masterDev.getSync(&sync, slavePosition, i); fp@1126: fp@1126: cout fp@1126: << " " << endl; fp@1126: } fp@1126: fp@1126: for (i = 0; i < slave.sync_count; i++) { fp@1126: masterDev.getSync(&sync, slavePosition, i); fp@1126: fp@1126: for (j = 0; j < sync.pdo_count; j++) { fp@1126: masterDev.getPdo(&pdo, slavePosition, i, j); fp@1126: pdoType = (sync.control_register & 0x04 ? "R" : "T"); fp@1126: pdoType += "xPdo"; fp@1126: fp@1126: cout fp@1126: << " <" << pdoType fp@1126: << " Sm=\"" << i << "\" Fixed=\"1\" Mandatory=\"1\">" << endl fp@1126: << " #x" fp@1126: << hex << setfill('0') << setw(4) << pdo.index fp@1126: << "" << endl fp@1126: << " " << pdo.name << "" << endl; fp@1126: fp@1126: for (k = 0; k < pdo.entry_count; k++) { fp@1126: masterDev.getPdoEntry(&entry, slavePosition, i, j, k); fp@1126: fp@1126: cout fp@1126: << " " << endl fp@1126: << " #x" fp@1126: << hex << setfill('0') << setw(4) << entry.index fp@1126: << "" << endl; fp@1126: if (entry.index) fp@1126: cout fp@1126: << " " fp@1126: << dec << (unsigned int) entry.subindex fp@1126: << "" << endl; fp@1126: fp@1126: cout fp@1126: << " " fp@1126: << dec << (unsigned int) entry.bit_length fp@1126: << "" << endl; fp@1126: fp@1126: if (entry.index) { fp@1126: cout fp@1126: << " " << entry.name fp@1126: << "" << endl fp@1126: << " "; fp@1126: fp@1126: if (entry.bit_length == 1) { fp@1126: cout << "BOOL"; fp@1126: } else if (!(entry.bit_length % 8)) { fp@1126: if (entry.bit_length <= 64) fp@1126: cout << "UINT" << (unsigned int) entry.bit_length; fp@1126: else fp@1126: cout << "STRING(" fp@1126: << (unsigned int) (entry.bit_length / 8) fp@1126: << ")"; fp@1126: } else { fp@1126: cerr << "Invalid bit length " fp@1126: << (unsigned int) entry.bit_length << endl; fp@1126: } fp@1126: fp@1126: cout << "" << endl; fp@1126: } fp@1126: fp@1126: cout << " " << endl; fp@1126: } fp@1126: fp@1126: cout fp@1126: << " " << endl; fp@1126: } fp@1126: } fp@1126: fp@1126: cout fp@1126: << " " << endl fp@1126: << " " << endl fp@1126: << " " << endl fp@1126: << "" << endl; fp@1126: } fp@1126: /*****************************************************************************/