#include /*! \brief mdDevice * General abstraction of all MD clients * * For historical reasons all clients are considered to be * devices, though mdclient and US clients have a non-device * client type. The central device of the system has zero * device type. * */ using namespace std; using boost::asio::ip::udp; template class mdDevice { public: bool isSingleton; int clieverGroup, // masterDaemonConfig.thisMachineContext handle,mdStdDevIdx; md_device type; mdState state; udp::endpoint ip; // Only Machine and Instrument use below InstructionSet cmds; // Some parameters initially here are now all uniformly ODEs // defined in the COOL scripts. ~mdDevice() {} mdDevice(md_device t) : type(t) {clieverGroup = handle = mdStdDevIdx = -1;} void lxi_control(T* device,std::string scpiText); T* registeR(md_device t); xmlrpc_c::value* fetchCommands(std::string subSystem); void registerCmd(const char *cmdName,const mdIncoming &mdI); }; class mdClientServer; class mdClientServer : public mdDevice { public: mdClientServer() : mdDevice( MDDEV_CD ) {}; mdClientServer *validateClient(int handle, mdResponse &r); }; class mdMachine; class mdMachine : public mdDevice { public: mdMachine() : mdDevice( MACHINE ) { cmds["RST"] = new mdCommand(MD_SCPI,std::string("RST")); } mdMachine *validateClient(int handle, const mdClientBirth &c, mdResponse &r); void registerCmd(const char *cmdName,const mdIncoming &mdI); }; class mdInstrument; class mdInstrument : public mdDevice { public: mdInstrument() : mdDevice( MDDEV_INSTRUMENT ) { cmds["RST"] = new mdCommand(MD_SCPI,std::string("RST")); } mdInstrument *validateClient(int handle, const mdClientBirth &c, mdResponse &r); void registerCmd(const char *cmdName,const mdIncoming &mdI); }; class mdDataClient; class mdDataClient : public mdDevice { public: mdDataClient() : mdDevice( MDDEV_DATACLIENT ) {}; mdDataClient *validateClient(int handle); }; class masterDaemon; class mdDeviceFabrik : public mdDevice {public: mdDeviceFabrik() : mdDevice( MDDEV_MD ) {} void newFromHeartbeat(const mdClientBirth &itsAWhat); std::string newFromAPI(md_device type,std::string signature); };