// ************************************************************************** //
//                                                                            //
//    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                                             //
//                                                                            //
// ************************************************************************** //
//  Service Lamp determines "lampBrightness" and "LampCfg"                    //
// ************************************************************************** //

package LightControl;

macro LAMP_Dimming   = 2;
macro LAMP_Switching = 1;
macro LAMP_Off       = 0;


module Lamp(
   bool ?hasDimmerValue,
   bool ?lightOnOff,
   nat{3} !lampBrightness,
   event nat{3} !LampCfg) {
   LampCfg = LAMP_Off;
   loop {
      pause;
      case
         // -----------------------------------------------------------------------
         // switch to mode LAMP_Dimming
         // -----------------------------------------------------------------------
         (hasDimmerValue & lightOnOff)
         do {
            LampCfg = LAMP_Dimming;
            next(lampBrightness) = LAMP_Dimming;
         }
         // -----------------------------------------------------------------------
         // switch to mode LAMP_Switching
         // -----------------------------------------------------------------------
         (lightOnOff)
         do {
            LampCfg = LAMP_Switching;
            next(lampBrightness) = LAMP_Switching;
         }
         // -----------------------------------------------------------------------
         // switch to mode LAMP_Off
         // -----------------------------------------------------------------------
         default {
            LampCfg = LAMP_Off;
            next(lampBrightness) = LAMP_Off;
         }
   }
}