mirror of
https://gitlab.com/etherlab.org/ethercat.git
synced 2026-08-18 09:07:24 +08:00
Implemented alias and position for configs.
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
+4
-25
@@ -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 &);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user