Implemented alias and position for configs.
This commit is contained in:
parent
68fda22e00
commit
7dfb8bb32a
1
TODO
1
TODO
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 &);
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue