Implemented alias and position for configs.

This commit is contained in:
Florian Pose 2008-07-28 09:12:21 +00:00
parent 68fda22e00
commit 7dfb8bb32a
5 changed files with 69 additions and 28 deletions

1
TODO
View File

@ -14,7 +14,6 @@ Version 1.4.0:
* Get original driver for r8169.
* Race in jiffies frame timeout?
* ethercat tool:
- Implement Alias/Position selection for configs.
- Update help for --alias and --position.
- Show Pdos in 'ethercat slave -v'.
- Accept files from stdin.

View File

@ -159,6 +159,69 @@ Command::SlaveList Command::selectedSlaves(MasterDevice &m)
return list;
}
/*****************************************************************************/
bool operator<(
const ec_ioctl_config_t &a,
const ec_ioctl_config_t &b
)
{
return a.alias < b.alias
|| (a.alias == b.alias && a.position < b.position);
}
/*****************************************************************************/
Command::ConfigList Command::selectedConfigs(MasterDevice &m)
{
unsigned int i;
int effAlias;
ec_ioctl_master_t master;
ec_ioctl_config_t config;
ConfigList list;
stringstream err;
m.getMaster(&master);
// Assume alias 0 if only position is given.
if (alias == -1 && position != -1) {
effAlias = 0;
} else {
effAlias = alias;
}
if (effAlias == -1) { // no alias given
if (position == -1) { // no alias and position given
// all items
for (i = 0; i < master.config_count; i++) {
m.getConfig(&config, i);
list.push_back(config);
}
}
} else { // alias given
if (position == -1) { // alias, but no position given
// take all items with a given alias
for (i = 0; i < master.config_count; i++) {
m.getConfig(&config, i);
if (config.alias == effAlias) {
list.push_back(config);
}
}
} else { // alias and position given
for (i = 0; i < master.config_count; i++) {
m.getConfig(&config, i);
if (config.alias == effAlias && config.position == position) {
list.push_back(config);
break; // there can be at most one matching
}
}
}
}
list.sort();
return list;
}
/****************************************************************************/
string Command::alStateString(uint8_t state)

View File

@ -91,6 +91,8 @@ class Command
typedef list<ec_ioctl_slave_t> SlaveList;
SlaveList selectedSlaves(MasterDevice &);
typedef list<ec_ioctl_config_t> ConfigList;
ConfigList selectedConfigs(MasterDevice &);
static string alStateString(uint8_t);

View File

@ -58,40 +58,19 @@ string CommandConfig::helpString() const
/*****************************************************************************/
bool operator<(
const ec_ioctl_config_t &a,
const ec_ioctl_config_t &b
)
{
return a.alias < b.alias
|| (a.alias == b.alias && a.position < b.position);
}
/*****************************************************************************/
/** Lists the bus configuration.
*/
void CommandConfig::execute(MasterDevice &m, const StringVector &args)
{
ec_ioctl_master_t master;
unsigned int i;
ec_ioctl_config_t config;
ConfigList configList;
ConfigList configs;
m.open(MasterDevice::Read);
m.getMaster(&master);
for (i = 0; i < master.config_count; i++) {
m.getConfig(&config, i);
configList.push_back(config);
}
configList.sort();
configs = selectedConfigs(m);
if (getVerbosity() == Verbose) {
showDetailedConfigs(m, configList);
showDetailedConfigs(m, configs);
} else {
listConfigs(m, configList);
listConfigs(m, configs);
}
}

View File

@ -32,8 +32,6 @@ class CommandConfig:
string state;
};
typedef list<ec_ioctl_config_t> ConfigList;
void showDetailedConfigs(MasterDevice &, const ConfigList &);
void listConfigs(MasterDevice &m, const ConfigList &);
};