Homepage Demos Overview Downloads Tutorials Reference
Credits
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members | Related Pages | Search

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   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