This commit is contained in:
parent
4eab631da9
commit
ea224e89e2
|
@ -1,239 +0,0 @@
|
||||||
/*! \brief registerDevice
|
|
||||||
* core API.
|
|
||||||
*
|
|
||||||
* Singleton: All Devices must begin their interation with the MD
|
|
||||||
* with this and use the supplied handle sin subsequent
|
|
||||||
* API.
|
|
||||||
*/
|
|
||||||
class registerDevice : public xmlrpc_c::method {
|
|
||||||
private:
|
|
||||||
masterDaemonConfig *_cfg;
|
|
||||||
public:
|
|
||||||
registerDevice(masterDaemonConfig *cfg) {
|
|
||||||
_cfg = cfg;
|
|
||||||
_signature = "i:is";
|
|
||||||
_help = "Register a client with the auc-md. The first parameter is the client type "
|
|
||||||
"which should be the integer value of MDDEV_DATACLIENT (currently 4) "
|
|
||||||
"or other md_dev type value. The string, specifies a signature identifying "
|
|
||||||
"client. Normally the first call to the MD after connecting, the response "
|
|
||||||
"if positive definite is a handle to use in further interaction referring "
|
|
||||||
"to the registered client. This API is primarily intended for data integrators not "
|
|
||||||
"device integrators but device integrators can also use if for diagnostic "
|
|
||||||
"purposes. Execute this API with signature 'release' to remove a MD client "
|
|
||||||
"in which case the first parameter should be the handle for the client to drop. "
|
|
||||||
"Obviously this API can cause havoc with a production MD, so use with care.";
|
|
||||||
}
|
|
||||||
void
|
|
||||||
execute(xmlrpc_c::paramList const& paramList,
|
|
||||||
xmlrpc_c::value * const retvalP) {
|
|
||||||
|
|
||||||
int const handleOrType(paramList.getInt(0));
|
|
||||||
std::string stringField(paramList.getString(1));
|
|
||||||
|
|
||||||
paramList.verifyEnd(2);
|
|
||||||
|
|
||||||
if (stringField == "release")
|
|
||||||
*retvalP = xmlrpc_c::value_int(thisService->releaseDevice(handleOrType));
|
|
||||||
else
|
|
||||||
*retvalP = xmlrpc_c::value_int(thisService->getDeviceHandle(handleOrType,stringField));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
/*! \brief getter
|
|
||||||
* core API.
|
|
||||||
*
|
|
||||||
* Common getter.
|
|
||||||
*/
|
|
||||||
class getter : public xmlrpc_c::method, mdState {
|
|
||||||
public:
|
|
||||||
getter() {
|
|
||||||
_signature = "S:is";
|
|
||||||
_help = "Send handle, dataname, get structure answer. The the first "
|
|
||||||
"character of the dataname determines its type: ODEs "
|
|
||||||
"(Operational Data Elements) start with an underscore, otherwise "
|
|
||||||
"the dataname is that of an expermental Observable. The first "
|
|
||||||
"entry in the structure is always the state of the call which "
|
|
||||||
"will either the supplied dataname indicating success or error text. "
|
|
||||||
"The remainder of the structure is specific to the datatype.";
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
execute(xmlrpc_c::paramList const& paramList,
|
|
||||||
xmlrpc_c::value * const retvalP) {
|
|
||||||
|
|
||||||
int const deviceHandle(paramList.getInt(0));
|
|
||||||
std::string dataName(paramList.getString(1));
|
|
||||||
paramList.verifyEnd(2);
|
|
||||||
|
|
||||||
*retvalP = *mdState::get(deviceHandle,dataName);
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
/*! \brief setter
|
|
||||||
* core API.
|
|
||||||
*
|
|
||||||
* Common setter.
|
|
||||||
*/
|
|
||||||
class setter : public xmlrpc_c::method, mdState {
|
|
||||||
public:
|
|
||||||
setter() {
|
|
||||||
|
|
||||||
_signature = "s:iS";
|
|
||||||
_help = "Process a gotten structure with changes. "
|
|
||||||
"Answers 'OK' or error text";
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
execute(xmlrpc_c::paramList const& paramList,
|
|
||||||
xmlrpc_c::value * const retvalP) {
|
|
||||||
|
|
||||||
int const deviceHandle(paramList.getInt(0));
|
|
||||||
xmlrpc_c::cstruct returnee(paramList.getStruct(1));
|
|
||||||
paramList.verifyEnd(2);
|
|
||||||
|
|
||||||
*retvalP = xmlrpc_c::value_string(mdState::set(deviceHandle,returnee));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
/*! \brief create
|
|
||||||
* create a ndw data element.
|
|
||||||
*
|
|
||||||
* Dynamically create a MD data item.
|
|
||||||
*/
|
|
||||||
class create : public xmlrpc_c::method, mdState {
|
|
||||||
public:
|
|
||||||
create() {
|
|
||||||
|
|
||||||
_signature = "s:iss";
|
|
||||||
_help = "Given a device handle, focus type, and dataname create the element. "
|
|
||||||
"The type string uses the standard xmplrpc-c single character "
|
|
||||||
"type signatures and the name is an MD dataname whose first character "
|
|
||||||
"determines whether an Observable or and ODEe. Any text "
|
|
||||||
"following the type signature is preserved as a comment. "
|
|
||||||
"Answers 'OK' or error text";
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
execute(xmlrpc_c::paramList const& paramList,
|
|
||||||
xmlrpc_c::value * const retvalP) {
|
|
||||||
|
|
||||||
int const deviceHandle(paramList.getInt(0));
|
|
||||||
std::string typeSpec(paramList.getString(1));
|
|
||||||
std::string newName(paramList.getString(2));
|
|
||||||
paramList.verifyEnd(3);
|
|
||||||
|
|
||||||
*retvalP = xmlrpc_c::value_string(mdState::create(deviceHandle,typeSpec,newName));
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
/*! \brief cmdListFetch
|
|
||||||
* core API.
|
|
||||||
*
|
|
||||||
* Fetch currently defined SCPI for device.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
class cmdListFetch : public xmlrpc_c::method, mdCommand {
|
|
||||||
public:
|
|
||||||
cmdListFetch() {
|
|
||||||
|
|
||||||
_signature = "A:is";
|
|
||||||
_help = "Send handle, md_dev type, and the SCPI subsystem or subcommand. "
|
|
||||||
"Use empty string to get the full subsystem list. Reply will be "
|
|
||||||
"an array of the available command/subsystems. Only MD clients "
|
|
||||||
"of type MACHINE or MDDEV_INSTRUMENT can have SCPI commands defined "
|
|
||||||
"so it is an error to specify any other type of MD client";
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
execute(xmlrpc_c::paramList const& paramList,
|
|
||||||
xmlrpc_c::value * const retvalP) {
|
|
||||||
|
|
||||||
int const deviceHandle(paramList.getInt(0));
|
|
||||||
int const deviceType(paramList.getInt(0));
|
|
||||||
std::string commandSetSpecified(paramList.getString(2));
|
|
||||||
paramList.verifyEnd(3);
|
|
||||||
|
|
||||||
if (deviceType != MACHINE && deviceType != MDDEV_INSTRUMENT)
|
|
||||||
*retvalP = xmlrpc_c::value_string(std::string("Invalid MD client type."));
|
|
||||||
else
|
|
||||||
{if (thisService->validateHandleForCmds(deviceHandle))
|
|
||||||
*retvalP = *thisService->fetchCommands(commandSetSpecified);
|
|
||||||
else *retvalP = xmlrpc_c::value_string(std::string("Error: Device not in state where this API can execute."));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
/*! \brief cmd
|
|
||||||
* core API.
|
|
||||||
*
|
|
||||||
* Common commander.
|
|
||||||
*/
|
|
||||||
class cmd : public xmlrpc_c::method, mdCommand {
|
|
||||||
public:
|
|
||||||
cmd() {
|
|
||||||
|
|
||||||
_signature = "s:iS";
|
|
||||||
_help = "Given, a handle, device type, the full text of a SCPI "
|
|
||||||
"sends the command to the MD and if accepted to the device. "
|
|
||||||
"If the command is valid for the configured MD, MD answers OK "
|
|
||||||
"and sends it, otherwise answers error text. Whether "
|
|
||||||
"or not the OK indicates anything other than a valid command "
|
|
||||||
"depends on the configured behavior of the device.";
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string head(std::string in) { return in; }
|
|
||||||
std::string tail(std::string in) { return in; }
|
|
||||||
void
|
|
||||||
execute(xmlrpc_c::paramList const& paramList,
|
|
||||||
xmlrpc_c::value * const retvalP) {
|
|
||||||
|
|
||||||
mdCommand *thisCommand;
|
|
||||||
mdCommand local;
|
|
||||||
|
|
||||||
int deviceHandle(paramList.getInt(0));
|
|
||||||
std::string commandText(paramList.getString(1));
|
|
||||||
paramList.verifyEnd(2);
|
|
||||||
std::string tails=tail(commandText);
|
|
||||||
|
|
||||||
// if (thisService->validateHandleForCmds(deviceHandle)) {
|
|
||||||
// if (thisCommand = thisDevice->commands[head(commandText)])
|
|
||||||
// *retvalP = xmlrpc_c::value_string(thisCommand->dO(thisDevice,&tails)) ;
|
|
||||||
// else {
|
|
||||||
// *retvalP = xmlrpc_c::value_string(std::string("Error: Can't construct SCPI Command '" + commandText + "'"));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// *retvalP = xmlrpc_c::value_string(std::string("Error: Unknown Device"));
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*! \brief getMDversion
|
|
||||||
* core API.
|
|
||||||
*
|
|
||||||
* Report the configuration of the MD. This API can be called at
|
|
||||||
* any time and does not require a device handle.
|
|
||||||
*/
|
|
||||||
class getMDversion : public xmlrpc_c::method {
|
|
||||||
public:
|
|
||||||
getMDversion() {
|
|
||||||
|
|
||||||
_signature = "i:s";
|
|
||||||
_help = "Accepts a device handle and returns the version identification "
|
|
||||||
"of the MD. ";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
execute(xmlrpc_c::paramList const& paramList,
|
|
||||||
xmlrpc_c::value * const retvalP) {
|
|
||||||
|
|
||||||
int const addend(paramList.getInt(0));
|
|
||||||
|
|
||||||
paramList.verifyEnd(1);
|
|
||||||
*retvalP = xmlrpc_c::value_string("OpenAUC v 0.5");
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
Loading…
Reference in New Issue