diff --git a/MAC/APL/TestCtlr/src/TestController.cc b/MAC/APL/TestCtlr/src/TestController.cc index aaffef6536292f17b4dd956bfdd174480da1cac8..22f8085c882fd22eb7141a4bc30cd52ce9cc988b 100644 --- a/MAC/APL/TestCtlr/src/TestController.cc +++ b/MAC/APL/TestCtlr/src/TestController.cc @@ -297,6 +297,206 @@ GCFEvent::TResult TestController::prepare_state(GCFEvent& event, GCFPortInterfac return (status); } +// +// run_state(event, port) +// +GCFEvent::TResult TestController::run_state(GCFEvent& event, GCFPortInterface& /*port*/) +{ + LOG_DEBUG_STR ("run_state:" << evtstr(event)); + + GCFEvent::TResult status = GCFEvent::HANDLED; + + switch (event.signal) { + case F_INIT: + break; + + case F_ENTRY: { + // Start ChildControl task + cout << "Requesting controller to goto RUN state..." << endl;; + string cntlrName = controllerName(itsCntlrType, 0, itsObsNr); + if (!itsChildControl->requestState(CTState::ACTIVE, cntlrName, itsObsNr, itsCntlrType)) { + cout << "Error during state request, bailing out" << endl; + stop(); + } + } + break; + + case F_TIMER: + case F_CONNECTED: + case F_DISCONNECTED: + break; + + case CONTROL_RESUMED: { + CONTROLResumedEvent msg(event); + cout << endl << "Resume result = " << msg.result << endl; + if (msg.result != CT_RESULT_NO_ERROR) { + cout << "Bailing out because of the errors." << endl; + stop (); + } + else { + _doActionMenu(); + } + } + break; + + default: + LOG_DEBUG ("TestController::run, default"); + status = GCFEvent::NOT_HANDLED; + break; + } + return (status); +} + +// +// suspend_state(event, port) +// +GCFEvent::TResult TestController::suspend_state(GCFEvent& event, GCFPortInterface& /*port*/) +{ + LOG_DEBUG_STR ("suspend_state:" << evtstr(event)); + + GCFEvent::TResult status = GCFEvent::HANDLED; + + switch (event.signal) { + case F_INIT: + break; + + case F_ENTRY: { + // Start ChildControl task + cout << "Requesting controller to goto SUSPEND state..." << endl;; + string cntlrName = controllerName(itsCntlrType, 0, itsObsNr); + if (!itsChildControl->requestState(CTState::SUSPEND, cntlrName, itsObsNr, itsCntlrType)) { + cout << "Error during state request, bailing out" << endl; + stop(); + } + } + break; + + case F_TIMER: + case F_CONNECTED: + case F_DISCONNECTED: + break; + + case CONTROL_SUSPENDED: { + CONTROLSuspendedEvent msg(event); + cout << endl << "Suspend result = " << msg.result << endl; + if (msg.result != CT_RESULT_NO_ERROR) { + cout << "Bailing out because of the errors." << endl; + stop (); + } + else { + _doActionMenu(); + } + } + break; + + default: + LOG_DEBUG ("TestController::suspend, default"); + status = GCFEvent::NOT_HANDLED; + break; + } + return (status); +} + +// +// release_state(event, port) +// +GCFEvent::TResult TestController::release_state(GCFEvent& event, GCFPortInterface& /*port*/) +{ + LOG_DEBUG_STR ("release_state:" << evtstr(event)); + + GCFEvent::TResult status = GCFEvent::HANDLED; + + switch (event.signal) { + case F_INIT: + break; + + case F_ENTRY: { + // Start ChildControl task + cout << "Requesting controller to goto RELEASE state..." << endl;; + string cntlrName = controllerName(itsCntlrType, 0, itsObsNr); + if (!itsChildControl->requestState(CTState::ACTIVE, cntlrName, itsObsNr, itsCntlrType)) { + cout << "Error during state request, bailing out" << endl; + stop(); + } + } + break; + + case F_TIMER: + case F_CONNECTED: + case F_DISCONNECTED: + break; + + case CONTROL_RELEASED: { + CONTROLReleasedEvent msg(event); + cout << endl << "Release result = " << msg.result << endl; + if (msg.result != CT_RESULT_NO_ERROR) { + cout << "Bailing out because of the errors." << endl; + stop (); + } + else { + _doActionMenu(); + } + } + break; + + default: + LOG_DEBUG ("TestController::release, default"); + status = GCFEvent::NOT_HANDLED; + break; + } + return (status); +} + +// +// finish_state(event, port) +// +GCFEvent::TResult TestController::finish_state(GCFEvent& event, GCFPortInterface& /*port*/) +{ + LOG_DEBUG_STR ("finish_state:" << evtstr(event)); + + GCFEvent::TResult status = GCFEvent::HANDLED; + + switch (event.signal) { + case F_INIT: + break; + + case F_ENTRY: { + // Start ChildControl task + cout << "Requesting controller to goto FINISH state..." << endl;; + string cntlrName = controllerName(itsCntlrType, 0, itsObsNr); + if (!itsChildControl->requestState(CTState::FINISH, cntlrName, itsObsNr, itsCntlrType)) { + cout << "Error during state request, bailing out" << endl; + stop(); + } + } + break; + + case F_TIMER: + case F_CONNECTED: + case F_DISCONNECTED: + break; + + case CONTROL_FINISHED: { + CONTROLFinishedEvent msg(event); + cout << endl << "Finish result = " << msg.result << endl; + if (msg.result != CT_RESULT_NO_ERROR) { + cout << "Bailing out because of the errors." << endl; + stop (); + } + else { + _doActionMenu(); + } + } + break; + + default: + LOG_DEBUG ("TestController::finish, default"); + status = GCFEvent::NOT_HANDLED; + break; + } + return (status); +} + // // _chooseController @@ -314,7 +514,7 @@ int16 TestController::_chooseController() // cout << " 6. StationControl" << endl; cout << " 7. DigitalBoardControl" << endl; cout << " 8. BeamControl" << endl; -// cout << " 9. CalibrationControl" << endl; + cout << " 9. CalibrationControl" << endl; // cout << "10. StationInfraControl" << endl; cout << endl; cout << " 0. stop" << endl; @@ -324,7 +524,7 @@ int16 TestController::_chooseController() cout << endl; cout << "Type number of your choice: "; cin >> CntlrType; - if (CntlrType < 0 || CntlrType > 8 || (CntlrType > 3 && CntlrType < 7)) { + if (CntlrType < 0 || CntlrType > 9 || (CntlrType > 3 && CntlrType < 7)) { cout << endl << "Wrong number, please retry." << endl; CntlrType = -1; } @@ -382,11 +582,13 @@ void TestController::_doActionMenu() cout << endl; cout << "Action to perform" << endl; cout << "=================" << endl; - cout << " C Claim" << endl; - cout << " P Prepare" << endl; - cout << " S Start" << endl; - cout << " F Finish" << endl << endl; - cout << " Q Quit program" << endl; + cout << " c Claim" << endl; + cout << " p Prepare" << endl; + cout << " R Resume (run)" << endl; + cout << " s Suspend" << endl; + cout << " r Release" << endl; + cout << " f Finish" << endl << endl; + cout << " q Quit menuprogram" << endl; string command; while (command.empty()) { @@ -395,25 +597,31 @@ void TestController::_doActionMenu() cin.clear(); cin >> command; switch (command.c_str()[0]) { - case 'C': + case 'c': TRAN(TestController::claim_state); return; break; - case 'P': + case 'p': TRAN(TestController::prepare_state); return; break; -#if 0 - case 'S': - TRAN(TestController::start_state); + case 'R': + TRAN(TestController::run_state); + return; + break; + case 's': + TRAN(TestController::suspend_state); + return; + break; + case 'r': + TRAN(TestController::release_state); return; break; - case 'F': + case 'f': TRAN(TestController::finish_state); return; break; -#endif - case 'Q': + case 'q': stop(); break; default: diff --git a/MAC/APL/TestCtlr/src/TestController.h b/MAC/APL/TestCtlr/src/TestController.h index 18c9a3c58d076e0eb01adf7e1adeeffc8f40df0d..4803ac66a20b9d866205aafdf4085ea3b03651c1 100644 --- a/MAC/APL/TestCtlr/src/TestController.h +++ b/MAC/APL/TestCtlr/src/TestController.h @@ -71,6 +71,10 @@ public: GCFEvent::TResult startup_state (GCFEvent& e, GCFPortInterface& p); GCFEvent::TResult claim_state (GCFEvent& e, GCFPortInterface& p); GCFEvent::TResult prepare_state (GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult run_state (GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult suspend_state (GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult release_state (GCFEvent& e, GCFPortInterface& p); + GCFEvent::TResult finish_state (GCFEvent& e, GCFPortInterface& p); private: // avoid copying