Improved multi-master capabilities of ethercat tool.

This commit is contained in:
Florian Pose
2010-02-24 17:24:20 +01:00
parent f41dadb84f
commit 79fb1c5934
9 changed files with 31 additions and 27 deletions

3
TODO
View File

@@ -28,6 +28,9 @@ Version 1.5.0:
* Output hexadecimal values in 'ethercat xml'.
* Add native drivers from 2.6.24 up to 2.6.31.
* Reset al_states on link down.
* Implement indent in 'ethercat ma'
* Add master index to log messages.
* Implement 0xXXXX:YY format for specifying SDOs.
Future issues:

View File

@@ -165,7 +165,7 @@ void CommandCStruct::generateSlaveCStruct(
}
cout
<< "/* Slave " << slave.position;
<< "/* Master " << m.getIndex() << ", Slave " << slave.position;
if (strlen(slave.order)) {
cout << ", \"" << slave.order << "\"";
}

View File

@@ -121,8 +121,8 @@ void CommandConfig::execute(const StringVector &args)
m.open(MasterDevice::Read);
configs = selectedConfigs(m);
if (doIndent) {
cout << "Master" << dec << *mi << endl;
if (configs.size() && doIndent) {
cout << "Master" << dec << m.getIndex() << endl;
}
if (getVerbosity() == Verbose) {

View File

@@ -75,17 +75,16 @@ void CommandData::execute(const StringVector &args)
throwInvalidUsageException(err);
}
if (getMasterIndices().size() != 1) {
stringstream err;
err << getName() << " requires to select a single master!";
throwInvalidUsageException(err);
}
MasterDevice m(getMasterIndices().front());
m.open(MasterDevice::Read);
domains = selectedDomains(m);
MasterIndexList::const_iterator mi;
for (mi = getMasterIndices().begin();
mi != getMasterIndices().end(); mi++) {
MasterDevice m(*mi);
m.open(MasterDevice::Read);
domains = selectedDomains(m);
for (di = domains.begin(); di != domains.end(); di++) {
outputDomainData(m, *di);
for (di = domains.begin(); di != domains.end(); di++) {
outputDomainData(m, *di);
}
}
}

View File

@@ -110,7 +110,7 @@ void CommandDomains::execute(const StringVector &args)
m.open(MasterDevice::Read);
domains = selectedDomains(m);
if (doIndent) {
if (domains.size() && doIndent) {
cout << "Master" << dec << *mi << endl;
}

View File

@@ -84,14 +84,16 @@ void CommandEoe::execute(const StringVector &args)
m.open(MasterDevice::Read);
m.getMaster(&master);
if (doIndent) {
cout << "Master" << dec << *mi << endl;
}
if (master.eoe_handler_count) {
if (doIndent) {
cout << "Master" << dec << *mi << endl;
}
cout << indent << "Interface Slave State "
<< "RxBytes RxRate "
<< "TxBytes TxRate TxQueue"
<< endl;
cout << indent << "Interface Slave State "
<< "RxBytes RxRate "
<< "TxBytes TxRate TxQueue"
<< endl;
}
for (i = 0; i < master.eoe_handler_count; i++) {
stringstream queue;

View File

@@ -129,7 +129,7 @@ void CommandPdos::listSlavePdos(
ec_ioctl_slave_sync_pdo_entry_t entry;
unsigned int i, j, k;
if (showHeader)
if (showHeader && slave.sync_count)
cout << "=== Master " << m.getIndex()
<< ", Slave " << slave.position << " ===" << endl;

View File

@@ -127,7 +127,7 @@ void CommandSdos::listSlaveSdos(
unsigned int i, j;
const DataType *d;
if (showHeader)
if (showHeader && slave.sdo_count)
cout << "=== Master " << m.getIndex()
<< ", Slave " << slave.position << " ===" << endl;

View File

@@ -125,10 +125,6 @@ void CommandSlaves::execute(const StringVector &args)
m.open(MasterDevice::Read);
slaves = selectedSlaves(m);
if (doIndent) {
cout << "Master" << dec << *mi << endl;
}
if (getVerbosity() == Verbose) {
showSlaves(m, slaves);
} else {
@@ -213,6 +209,10 @@ void CommandSlaves::listSlaves(
aliasIndex++;
}
if (infoList.size() && doIndent) {
cout << "Master" << dec << m.getIndex() << endl;
}
for (iter = infoList.begin(); iter != infoList.end(); iter++) {
cout << indent << setfill(' ') << right
<< setw(maxPosWidth) << iter->pos << " "