--- a/tool/Command.cpp Fri Jul 25 14:14:47 2008 +0000
+++ b/tool/Command.cpp Fri Jul 25 14:19:29 2008 +0000
@@ -28,6 +28,20 @@
verbosity = v;
};
+/*****************************************************************************/
+
+void Command::setAlias(int a)
+{
+ alias = a;
+};
+
+/*****************************************************************************/
+
+void Command::setPosition(int p)
+{
+ position = p;
+};
+
/****************************************************************************/
bool Command::matchesSubstr(const string &cmd) const
@@ -78,6 +92,61 @@
throw CommandException(s);
}
+/*****************************************************************************/
+
+Command::SlaveList Command::selectedSlaves(MasterDevice &m)
+{
+ unsigned int numSlaves = m.slaveCount(), i, aliasIndex;
+ uint16_t lastAlias;
+ ec_ioctl_slave_t slave;
+ SlaveList list;
+
+ if (alias == -1) { // no alias given
+ if (position == -1) { // no alias and position given
+ // all items
+ for (i = 0; i < numSlaves; i++) {
+ m.getSlave(&slave, i);
+ list.push_back(slave);
+ }
+ } else { // no alias, but position given
+ // one item by position
+ m.getSlave(&slave, position);
+ list.push_back(slave);
+ }
+ } else { // alias given
+ if (position == -1) { // alias, but no position given
+ // take all items with a given alias
+ lastAlias = 0;
+ for (i = 0; i < numSlaves; i++) {
+ m.getSlave(&slave, i);
+ if (slave.alias) {
+ lastAlias = slave.alias;
+ }
+ if (lastAlias == (uint16_t) alias) {
+ list.push_back(slave);
+ }
+ }
+ } else { // alias and position given
+ lastAlias = 0;
+ aliasIndex = 0;
+ for (i = 0; i < numSlaves; i++) {
+ m.getSlave(&slave, i);
+ if (slave.alias) { // FIXME 'lock' first alias
+ lastAlias = slave.alias;
+ aliasIndex = 0;
+ }
+ if (lastAlias == (uint16_t) alias
+ && aliasIndex == (unsigned int) position) {
+ list.push_back(slave);
+ }
+ aliasIndex++;
+ }
+ }
+ }
+
+ return list;
+}
+
/****************************************************************************/
string Command::alStateString(uint8_t state)