Improved 'ethercat ls' formatting.

This commit is contained in:
Florian Pose 2008-06-10 12:52:08 +00:00
parent d28bf7ecbe
commit 322845b160
2 changed files with 58 additions and 11 deletions

1
TODO
View File

@ -26,7 +26,6 @@ Version 1.4.0:
* Attach Pdo names from SII or Coe dictioary to Pdos read via CoE.
* Make scanning and configuration run parallel (each).
* List of commands that require a slave.
* Improve formatting of 'ethercat ls'.
Future issues:

View File

@ -15,6 +15,7 @@
#include <sstream>
#include <fstream>
#include <cctype> // toupper()
#include <list>
using namespace std;
#include "Master.h"
@ -237,11 +238,27 @@ void Master::showDomains(int domainIndex)
/****************************************************************************/
struct SlaveInfo {
string pos;
string alias;
string relPos;
string state;
string flag;
string name;
};
void Master::listSlaves()
{
unsigned int numSlaves, i;
ec_ioctl_slave_t slave;
uint16_t lastAlias, aliasIndex;
SlaveInfo slaveInfo;
typedef list<SlaveInfo> SlaveInfoList;
SlaveInfoList slaveInfoList;
SlaveInfoList::const_iterator iter;
stringstream str;
unsigned int maxPosWidth = 0, maxAliasWidth = 0,
maxRelPosWidth = 0, maxStateWidth = 0;
open(Read);
@ -251,31 +268,62 @@ void Master::listSlaves()
aliasIndex = 0;
for (i = 0; i < numSlaves; i++) {
getSlave(&slave, i);
cout << setfill(' ') << setw(2) << i << " ";
str << dec << i;
slaveInfo.pos = str.str();
str.clear();
str.str("");
if (slave.alias) {
lastAlias = slave.alias;
aliasIndex = 0;
}
if (lastAlias) {
cout << "#"
<< hex << setfill('0') << setw(4) << lastAlias
<< ":" << dec << aliasIndex;
str << "#" << hex << lastAlias;
slaveInfo.alias = str.str();
str.str("");
str << ":" << dec << aliasIndex;
slaveInfo.relPos = str.str();
str.str("");
aliasIndex++;
} else {
slaveInfo.alias = "";
slaveInfo.relPos = "";
}
cout << " " << slaveState(slave.state)
<< " " << (slave.error_flag ? 'E' : '+') << " ";
slaveInfo.state = slaveState(slave.state);
slaveInfo.flag = (slave.error_flag ? 'E' : '+');
if (strlen(slave.name)) {
cout << slave.name;
slaveInfo.name = slave.name;
} else {
cout << hex << setfill('0')
str << hex << setfill('0')
<< setw(8) << slave.vendor_id << ":"
<< setw(8) << slave.product_code << dec;
<< setw(8) << slave.product_code;
slaveInfo.name = str.str();
str.str("");
}
cout << endl;
slaveInfoList.push_back(slaveInfo);
if (slaveInfo.pos.length() > maxPosWidth)
maxPosWidth = slaveInfo.pos.length();
if (slaveInfo.alias.length() > maxAliasWidth)
maxAliasWidth = slaveInfo.alias.length();
if (slaveInfo.relPos.length() > maxRelPosWidth)
maxRelPosWidth = slaveInfo.relPos.length();
if (slaveInfo.state.length() > maxStateWidth)
maxStateWidth = slaveInfo.state.length();
}
for (iter = slaveInfoList.begin(); iter != slaveInfoList.end(); iter++) {
cout << setfill(' ') << right
<< setw(maxPosWidth) << iter->pos << " "
<< setw(maxAliasWidth) << iter->alias
<< left
<< setw(maxRelPosWidth) << iter->relPos << " "
<< setw(maxStateWidth) << iter->state << " "
<< iter->flag << " "
<< iter->name << endl;
}
}