Homepage Demos Overview Downloads Tutorials Reference
Credits

EStopControllerBehavior.cc

Go to the documentation of this file.
00001 #include "EStopControllerBehavior.h"
00002 #include "Motion/EmergencyStopMC.h"
00003 #include "Motion/MMAccessor.h"
00004 
00005 EStopControllerBehavior* EStopControllerBehavior::theOne = NULL;
00006 
00007 void EStopControllerBehavior::DoStart() {
00008   // Behavior startup
00009   BehaviorBase::DoStart();
00010   // We listen to the estop
00011   erouter->addListener(this, EventBase::estopEGID);
00012   // Turn on wireless
00013   cmdsock=wireless->socket(SocketNS::SOCK_STREAM, 300, 300);
00014   wireless->setDaemon(cmdsock,true);
00015   wireless->setReceiver(cmdsock->sock, callback);
00016   wireless->listen(cmdsock->sock, config->main.estopControl_port);
00017 }
00018 
00019 void EStopControllerBehavior::DoStop() {
00020   // Turn off timers
00021   erouter->removeListener(this);
00022   // Close socket; turn wireless off
00023   wireless->setDaemon(cmdsock,false);
00024   wireless->close(cmdsock);
00025   // Total behavior stop
00026   BehaviorBase::DoStop();
00027 }
00028 
00029 void EStopControllerBehavior::runCommand(const std::string& s) {
00030   if(s==std::string("start")) {
00031     MMAccessor<EmergencyStopMC> estop(estop_id);
00032     estop->setStopped(false);
00033   } else if(s==std::string("stop")) {
00034     MMAccessor<EmergencyStopMC> estop(estop_id);
00035     estop->setStopped(true);
00036   } else if(s==std::string("refresh")) {
00037     MMAccessor<EmergencyStopMC> estop(estop_id);
00038     if(estop.checkin(estop->getStopped()))
00039       cmdsock->printf("on\n");
00040     else
00041       cmdsock->printf("off\n");
00042   } else {
00043     serr->printf("EStopControllerBehavior::runCommand() - bad message: '%s'",s.c_str());
00044   }
00045 }
00046 
00047 void EStopControllerBehavior::processEvent(const EventBase & e) {
00048   if(e.getTypeID()==EventBase::activateETID) {
00049     cmdsock->printf("on\n");
00050   } else if(e.getTypeID()==EventBase::deactivateETID) {
00051     cmdsock->printf("off\n");
00052   }
00053 }
00054 
00055 // The command packet reassembly mechanism
00056 int EStopControllerBehavior::callback(char *buf, int bytes) {
00057   if(EStopControllerBehavior::theOne==NULL)
00058     return 0;
00059   static std::string cmd;
00060   for(int i=0; i<bytes; i++) {
00061     if(buf[i]=='\n') {
00062       EStopControllerBehavior::theOne->runCommand(cmd);
00063       cmd.clear();
00064     } else
00065       cmd+=buf[i];
00066   }
00067   return 0;
00068 }
00069 
00070 /*! @file
00071  * @brief Implements EStopControllerBehavior, listens to commands coming in from the command port for remotely controlling toggling the estop
00072  * @author tss (Creator)
00073  * 
00074  * $Author: ejt $
00075  * $Name: tekkotsu-2_2_2 $
00076  * $Revision: 1.4 $
00077  * $State: Exp $
00078  * $Date: 2004/10/07 19:07:04 $
00079  */
00080 

Tekkotsu v2.2.2
Generated Tue Jan 4 15:43:13 2005 by Doxygen 1.4.0