diff -r 9976f7b9fe66 -r b09fd81894cb tool/cmd_xml.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool/cmd_xml.cpp Tue Jul 22 14:17:20 2008 +0000 @@ -0,0 +1,161 @@ +/***************************************************************************** + * + * $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; +} +/*****************************************************************************/