// ************************************************************************** //
//                                                                            //
//    eses                   eses                                             //
//   eses                     eses                                            //
//  eses    eseses  esesese    eses   Embedded Systems Group                  //
//  ese    ese  ese ese         ese                                           //
//  ese    eseseses eseseses    ese   Department of Computer Science          //
//  eses   eses          ese   eses                                           //
//   eses   eseses  eseseses  eses    University of Kaiserslautern            //
//    eses                   eses                                             //
//                                                                            //
// ************************************************************************** //
// This module describes the behavior of the operator whose task is to start  //
// and stop the pump according to the alerts given by the CO and Methane      //
// monitors, as well as the water level.                                      //
// ************************************************************************** //

package MinePump;


module Operator(event
      ?SVStartPump,?SVStopPump,
      ?OPStartPump,?OPStopPump,
      ?MethaneCritical,?WaterLVMid,?AlertOP,
      !StartPump,!StopPump,!Alarm) {
   loop {
      pause;
      if(SVStartPump) {
         if(!MethaneCritical)
            emit (StartPump);
      } else if(SVStopPump)
         emit (StopPump);
      else if(OPStartPump) {
         if(WaterLVMid & !MethaneCritical)
            emit (StartPump);
      } else if(OPStopPump) {
         if(WaterLVMid)
            emit (StopPump);
      }
      if(AlertOP)
         emit (Alarm);
   }
}