//## begin module%1.4%.codegen_version preserve=yes // Read the documentation to learn more about C++ code generator // versioning. //## end module%1.4%.codegen_version //## begin module%3D86D35000AA.cm preserve=no // %X% %Q% %Z% %W% //## end module%3D86D35000AA.cm //## begin module%3D86D35000AA.cp preserve=no //## end module%3D86D35000AA.cp //## Module: Commander%3D86D35000AA; Pseudo Package body //## Source file: C:\Program Files\Rational\Rose\C++\source\Commander.cpp //## begin module%3D86D35000AA.additionalIncludes preserve=no //## end module%3D86D35000AA.additionalIncludes //## begin module%3D86D35000AA.includes preserve=yes //## end module%3D86D35000AA.includes // Commander #include "Commander.h" //## begin module%3D86D35000AA.additionalDeclarations preserve=yes //## end module%3D86D35000AA.additionalDeclarations // Class Commander //## begin Commander::EXPLORING%3D9AB34601FE.attr preserve=no private: static int {UC} 0 const int Commander::EXPLORING = 0; //## end Commander::EXPLORING%3D9AB34601FE.attr //## begin Commander::PUSHING%3D9AB37502E4.attr preserve=no private: static int {UC} 1 const int Commander::PUSHING = 1; //## end Commander::PUSHING%3D9AB37502E4.attr //## begin Commander::AVOIDING%3D9AB375038E.attr preserve=no private: static int {UC} 2 const int Commander::AVOIDING = 2; //## end Commander::AVOIDING%3D9AB375038E.attr //## begin Commander::COMMUNICATING%3D9AB37601FE.attr preserve=no private: static int {UC} 3 const int Commander::COMMUNICATING = 3; //## end Commander::COMMUNICATING%3D9AB37601FE.attr Commander::Commander () : state(-1) ,Thread("commander", 128*1024, MAX_PRI, 1) { } void Commander::initialize(void) { mes[OSMachineID()] = this; explorer.initialize(); pusher.initialize(); avoider.initialize(); communicator.initialize(); } // Additional Declarations //## begin Commander%3D86D35000AA.declarations preserve=yes Commander* Commander::mes[NUMBER_OF_ROBOTS]; void Commander::run(void) { LCDPrintf("Commander started\n"); int result = explorer.activate(); state = EXPLORING; while(1) { if (state == EXPLORING) { if (result == explorer.CUBE_DETECTED) { result = pusher.activate(); state = PUSHING; } else if (result == explorer.ROBOT_DETECTED) { result = communicator.activate(); state = COMMUNICATING; } else if (result == explorer.DRIVE_STALLED) { result = communicator.activate(); state = COMMUNICATING; } } if (state == PUSHING) { if (result == pusher.ARRIVED) { result = avoider.activate(); state = AVOIDING; } else if (result == pusher.CUBE_LOST) { result = explorer.activate(); state = EXPLORING; } else if (result == pusher.DRIVE_STALLED) { result = avoider.activate(); state = AVOIDING; } } if (state == COMMUNICATING) { if (result == communicator.DONE) { result = avoider.activate(); state = AVOIDING; } else if (result == communicator.NOT_ONE_RESPONSE) { result = avoider.activate(); state = AVOIDING; } else if (result == communicator.ROBOT_LEFT) { result = avoider.activate(); state = AVOIDING; } } if (state == AVOIDING) { result = explorer.activate(); state = EXPLORING; } } } void Commander::doSleep(int hundredthSeconds) { sleep(hundredthSeconds); } void Commander::doReschedule(void) { reschedule(); } bool Commander::spawn () { threadControlBlock = OSSpawn(name, staticRun, stackSize, priority, OSMachineID()*10+id); if (threadControlBlock) return true; else return false; } void Commander::staticRun () { mes[OSMachineID()]->run(); } //## end Commander%3D86D35000AA.declarations //## begin module%3D86D35000AA.epilog preserve=yes //## end module%3D86D35000AA.epilog