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 wireless->setReceiver(cmdsock->sock, callback); 00014 wireless->listen(cmdsock->sock, config->main.estopControl_port); 00015 } 00016 00017 void EStopControllerBehavior::DoStop() { 00018 // Turn off timers 00019 erouter->forgetListener(this); 00020 // Close socket; turn wireless off 00021 wireless->close(cmdsock); 00022 // Total behavior stop 00023 BehaviorBase::DoStop(); 00024 } 00025 00026 void EStopControllerBehavior::runCommand(std::string s) { 00027 if(s==std::string("start")) { 00028 MMAccessor<EmergencyStopMC> estop(estop_id); 00029 estop->setStopped(false); 00030 } else if(s==std::string("stop")) { 00031 MMAccessor<EmergencyStopMC> estop(estop_id); 00032 estop->setStopped(true); 00033 } else if(s==std::string("refresh")) { 00034 MMAccessor<EmergencyStopMC> estop(estop_id); 00035 if(estop.checkin(estop->getStopped())) 00036 cmdsock->printf("on\n"); 00037 else 00038 cmdsock->printf("off\n"); 00039 } else { 00040 serr->printf("EStopControllerBehavior::runCommand() - bad message: '%s'",s.c_str()); 00041 } 00042 } 00043 00044 void EStopControllerBehavior::processEvent(const EventBase & e) { 00045 if(e.getTypeID()==EventBase::activateETID) { 00046 cmdsock->printf("on\n"); 00047 } else if(e.getTypeID()==EventBase::deactivateETID) { 00048 cmdsock->printf("off\n"); 00049 } 00050 } 00051 00052 // The command packet reassembly mechanism 00053 int EStopControllerBehavior::callback(char *buf, int bytes) { 00054 static std::string cmd; 00055 for(int i=0; i<bytes; i++) { 00056 if(buf[i]=='\n') { 00057 EStopControllerBehavior::theOne->runCommand(cmd); 00058 cmd.clear(); 00059 } else 00060 cmd+=buf[i]; 00061 } 00062 return 0; 00063 } 00064 00065 /*! @file 00066 * @brief Implements EStopControllerBehavior, listens to commands coming in from the command port for remotely controlling toggling the estop 00067 * @author tss (Creator) 00068 * 00069 * $Author: ejt $ 00070 * $Name: tekkotsu-1_4_1 $ 00071 * $Revision: 1.2 $ 00072 * $State: Exp $ 00073 * $Date: 2003/07/09 00:10:57 $ 00074 */ 00075
Tekkotsu v1.4 |
Generated Sat Jul 19 00:06:30 2003 by Doxygen 1.3.2 |