fp@1142: /***************************************************************************** fp@1142: * fp@1142: * $Id$ fp@1142: * fp@1142: ****************************************************************************/ fp@1142: fp@1142: #include "Command.h" fp@1142: fp@1142: /*****************************************************************************/ fp@1142: fp@1142: Command::Command(const string &name, const string &briefDesc): fp@1142: name(name), fp@1142: briefDesc(briefDesc), fp@1142: verbosity(Normal) fp@1142: { fp@1142: } fp@1142: fp@1142: /*****************************************************************************/ fp@1142: fp@1142: Command::~Command() fp@1142: { fp@1142: } fp@1142: fp@1142: /*****************************************************************************/ fp@1142: fp@1142: void Command::setVerbosity(Verbosity v) fp@1142: { fp@1142: verbosity = v; fp@1142: }; fp@1142: fp@1151: /*****************************************************************************/ fp@1151: fp@1151: void Command::setAlias(int a) fp@1151: { fp@1151: alias = a; fp@1151: }; fp@1151: fp@1151: /*****************************************************************************/ fp@1151: fp@1151: void Command::setPosition(int p) fp@1151: { fp@1151: position = p; fp@1151: }; fp@1151: fp@1142: /****************************************************************************/ fp@1142: fp@1142: bool Command::matchesSubstr(const string &cmd) const fp@1142: { fp@1142: return name.substr(0, cmd.length()) == cmd; fp@1142: } fp@1142: fp@1142: /****************************************************************************/ fp@1142: fp@1142: bool Command::matchesAbbrev(const string &abb) const fp@1142: { fp@1142: unsigned int i; fp@1142: size_t pos = 0; fp@1142: fp@1142: for (i = 0; i < abb.length(); i++) { fp@1142: pos = name.find(abb[i], pos); fp@1142: if (pos == string::npos) fp@1142: return false; fp@1142: } fp@1142: fp@1142: return true; fp@1142: } fp@1142: fp@1142: /*****************************************************************************/ fp@1142: fp@1144: string Command::numericInfo() fp@1144: { fp@1144: stringstream str; fp@1144: fp@1144: str << "Numerical values can be specified either with decimal (no" << endl fp@1144: << "prefix), octal (prefix '0') or hexadecimal (prefix '0x') base." fp@1144: << endl; fp@1144: fp@1144: return str.str(); fp@1144: } fp@1144: fp@1144: /*****************************************************************************/ fp@1144: fp@1142: void Command::throwInvalidUsageException(const stringstream &s) fp@1142: { fp@1142: throw InvalidUsageException(s); fp@1142: } fp@1142: fp@1142: /*****************************************************************************/ fp@1142: fp@1142: void Command::throwCommandException(const stringstream &s) fp@1142: { fp@1142: throw CommandException(s); fp@1142: } fp@1142: fp@1151: /*****************************************************************************/ fp@1151: fp@1151: Command::SlaveList Command::selectedSlaves(MasterDevice &m) fp@1151: { fp@1151: unsigned int numSlaves = m.slaveCount(), i, aliasIndex; fp@1151: uint16_t lastAlias; fp@1151: ec_ioctl_slave_t slave; fp@1151: SlaveList list; fp@1151: fp@1151: if (alias == -1) { // no alias given fp@1151: if (position == -1) { // no alias and position given fp@1151: // all items fp@1151: for (i = 0; i < numSlaves; i++) { fp@1151: m.getSlave(&slave, i); fp@1151: list.push_back(slave); fp@1151: } fp@1151: } else { // no alias, but position given fp@1151: // one item by position fp@1151: m.getSlave(&slave, position); fp@1151: list.push_back(slave); fp@1151: } fp@1151: } else { // alias given fp@1151: if (position == -1) { // alias, but no position given fp@1151: // take all items with a given alias fp@1151: lastAlias = 0; fp@1151: for (i = 0; i < numSlaves; i++) { fp@1151: m.getSlave(&slave, i); fp@1151: if (slave.alias) { fp@1151: lastAlias = slave.alias; fp@1151: } fp@1151: if (lastAlias == (uint16_t) alias) { fp@1151: list.push_back(slave); fp@1151: } fp@1151: } fp@1151: } else { // alias and position given fp@1151: lastAlias = 0; fp@1151: aliasIndex = 0; fp@1151: for (i = 0; i < numSlaves; i++) { fp@1151: m.getSlave(&slave, i); fp@1151: if (slave.alias) { // FIXME 'lock' first alias fp@1151: lastAlias = slave.alias; fp@1151: aliasIndex = 0; fp@1151: } fp@1151: if (lastAlias == (uint16_t) alias fp@1151: && aliasIndex == (unsigned int) position) { fp@1151: list.push_back(slave); fp@1151: } fp@1151: aliasIndex++; fp@1151: } fp@1151: } fp@1151: } fp@1151: fp@1151: return list; fp@1151: } fp@1151: fp@1142: /****************************************************************************/ fp@1146: fp@1146: string Command::alStateString(uint8_t state) fp@1146: { fp@1146: switch (state) { fp@1146: case 1: return "INIT"; fp@1146: case 2: return "PREOP"; fp@1146: case 4: return "SAFEOP"; fp@1146: case 8: return "OP"; fp@1146: default: return "???"; fp@1146: } fp@1146: } fp@1146: fp@1146: /****************************************************************************/