app-ScorbotSimpleServer.C

00001 #include <Ice/Ice.h>
00002 #include "Devices/Serial.H"
00003 #include "Component/ModelComponent.H"
00004 #include "Component/ModelManager.H"
00005 #include "Robots/Scorbot/ScorbotSimple.ice.H"
00006 
00007 class ScorbotSimpleI: public ScorbotSimpleIce::ScorbotSimple, public ModelComponent
00008 {
00009         public:
00010                 ScorbotSimpleI(OptionManager& mgr, 
00011                                 const std::string& descrName = "",
00012                                 const std::string& tagName = "") :
00013                         ModelComponent(mgr, descrName, tagName),
00014                         itsSerial(new Serial(mgr)) 
00015                         {
00016                                 addSubComponent(itsSerial);
00017                                 itsSerial->configure("/dev/ttyACM0", 115200, "8N1", false, false, 1000000);
00018                         }
00019 
00020                         bool getState(const Ice::Current&)
00021                         {
00022                                 char cmd = 'a';
00023                                 itsSerial->write(&cmd, 1);
00024                                 usleep(10000);
00025                                 char retVal;
00026                                 itsSerial->read(&retVal, 1);
00027                                 return (retVal == 'B');
00028                         }
00029 
00030                         void setNext(const Ice::Current&)
00031                         {
00032                                 char cmd = 'b';
00033                                 itsSerial->write(&cmd, 1);
00034                         }
00035 
00036                         void reset(const Ice::Current&)
00037                         {
00038                                 char cmd = 'c';
00039                                 itsSerial->write(&cmd, 1);
00040                                 usleep(10000);
00041                         }
00042 
00043         private:
00044                         nub::ref<Serial> itsSerial;
00045 };
00046 
00047 
00048 int main(int argc, char** argv)
00049 {
00050         ModelManager manager("ScorbotServerManager");
00051         nub::ref<ScorbotSimpleI> scorbot(new ScorbotSimpleI(manager));
00052         manager.addSubComponent(scorbot);
00053 
00054         manager.parseCommandLine(argc, argv, "", 0, 0);
00055         manager.start();
00056 
00057         std::string connString("default -p 10000");
00058 
00059         int status = 0;
00060         Ice::CommunicatorPtr ic;
00061 
00062         try {
00063                 ic = Ice::initialize(argc, argv);
00064                 Ice::ObjectAdapterPtr adapter = 
00065                         ic->createObjectAdapterWithEndpoints(
00066                                         "ScorbotServerAdapter", connString.c_str());
00067                 Ice::ObjectPtr object = scorbot.get();
00068                 adapter->add(object, ic->stringToIdentity("ScorbotServer"));
00069                 adapter->activate();
00070                 ic->waitForShutdown();
00071         } catch(const Ice::Exception& e) {
00072                 std::cerr << e << std::endl;
00073                 status = 1;
00074         } catch(const char* msg)  {
00075                 std::cerr << msg << std::endl;
00076                 status = 1;
00077         }
00078 
00079         if(ic) {
00080                 try {
00081                         ic->destroy(); 
00082                 } catch(const Ice::Exception& e) {
00083                         std::cerr << e << std::endl;
00084                         status = 1;
00085                 }
00086         }
00087 
00088         return status;
00089 }
00090 
Generated on Sun May 8 08:41:32 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3