diff -r 9976f7b9fe66 -r b09fd81894cb tool/cmd_states.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool/cmd_states.cpp Tue Jul 22 14:17:20 2008 +0000 @@ -0,0 +1,62 @@ +/***************************************************************************** + * + * $Id$ + * + ****************************************************************************/ + +#include +using namespace std; + +#include "globals.h" + +/****************************************************************************/ + +const char *help_states = + "[OPTIONS]\n" + "\n" + "\n" + "Command-specific options:\n"; + +/****************************************************************************/ + +void command_states(void) +{ + string stateStr; + uint8_t state; + + if (commandArgs.size() != 1) { + stringstream err; + err << "'state' takes exactly one argument!"; + throw MasterDeviceException(err.str()); + } + + stateStr = commandArgs[0]; + transform(stateStr.begin(), stateStr.end(), + stateStr.begin(), (int (*) (int)) std::toupper); + + if (stateStr == "INIT") { + state = 0x01; + } else if (stateStr == "PREOP") { + state = 0x02; + } else if (stateStr == "SAFEOP") { + state = 0x04; + } else if (stateStr == "OP") { + state = 0x08; + } else { + stringstream err; + err << "Invalid state '" << commandArgs[0] << "'!"; + throw MasterDeviceException(err.str()); + } + + masterDev.open(MasterDevice::ReadWrite); + + if (slavePosition == -1) { + unsigned int i, numSlaves = masterDev.slaveCount(); + for (i = 0; i < numSlaves; i++) + masterDev.requestState(i, state); + } else { + masterDev.requestState(slavePosition, state); + } +} + +/*****************************************************************************/