Homepage | Demos | Overview | Downloads | Tutorials | Reference | Credits |
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->forgetListener(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_0 $ 00076 * $Revision: 1.3 $ 00077 * $State: Exp $ 00078 * $Date: 2004/01/14 20:44:31 $ 00079 */ 00080
Tekkotsu v2.0 |
Generated Wed Jan 21 03:20:28 2004 by Doxygen 1.3.4 |