00001
00002 #ifndef INCLUDED_RunSequenceControl_h_
00003 #define INCLUDED_RunSequenceControl_h_
00004
00005 #include "FileBrowserControl.h"
00006 #include "Motion/MotionSequenceMC.h"
00007 #include "Motion/EmergencyStopMC.h"
00008 #include "Motion/LedMC.h"
00009 #include "Sound/SoundManager.h"
00010 #include "Motion/MMAccessor.h"
00011 #include "Shared/TimeET.h"
00012 #include "Shared/Config.h"
00013 #include <string>
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 template<unsigned int SequenceSize>
00027 class RunSequenceControl : public FileBrowserControl, public EventListener {
00028 public:
00029
00030 RunSequenceControl(const std::string& n, MotionManager::MC_ID estop_id)
00031 : FileBrowserControl(n,"Runs a motion sequence from a user-specified file",config->portPath(config->motion.root)),
00032 estopid(estop_id), ledid(MotionManager::invalid_MC_ID), waitingFile()
00033 {
00034 setFilter("*.mot");
00035 }
00036
00037
00038 virtual ~RunSequenceControl() {
00039 erouter->removeListener(this);
00040 motman->removeMotion(ledid);
00041 }
00042
00043
00044 virtual void processEvent(const EventBase& ) {
00045 erouter->removeListener(this);
00046 runFile();
00047 motman->removeMotion(ledid);
00048 }
00049
00050 protected:
00051
00052 void runFile() {
00053
00054 SharedObject< MotionSequenceMC<SequenceSize> > s(waitingFile);
00055
00056 motman->addPrunableMotion(s);
00057 waitingFile="";
00058 }
00059
00060
00061 virtual ControlBase* selectedFile(const std::string& f) {
00062 waitingFile=f;
00063 if(!MMAccessor<EmergencyStopMC>(estopid)->getStopped()) {
00064 runFile();
00065 } else {
00066
00067 sndman->playFile("donkey.wav");
00068 SharedObject<LedMC> led;
00069 led->cset(FaceLEDMask,0);
00070 led->cycle(BotLLEDMask,1000,3,0,0);
00071 led->cycle(BotRLEDMask,1000,3,0,500);
00072 ledid=motman->addPersistentMotion(led);
00073 erouter->addListener(this,EventBase::estopEGID,estopid,EventBase::deactivateETID);
00074 }
00075 return this;
00076 }
00077
00078 MotionManager::MC_ID estopid;
00079 MotionManager::MC_ID ledid;
00080 std::string waitingFile;
00081 };
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094 #endif