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