Esempio n. 1
0
 /// <summary>
 /// gets triggered by LIListener when broadcast appears
 /// </summary>
 internal void ProcessBroadCast()
 {
     if (LastAnswer.GetType() == typeof(BCAllOff))
     {
         EmergencyOff = true;
         logme.Log(i18n.FlakeLIMsgs.EmergencyOffToggle, logme.LogLevel.info);
         return;
     }
     if (LastAnswer.GetType() == typeof(BCAllOn))
     {
         EmergencyOff  = false;
         EmergencyStop = false;
         ProgramMode   = false;
         logme.Log(i18n.FlakeLIMsgs.AllOnSet, logme.LogLevel.info);
         return;
     }
     if (LastAnswer.GetType() == typeof(BCAllLocosOff))
     {
         EmergencyStop = true;
         logme.Log(i18n.FlakeLIMsgs.EmergencyStopToggle, logme.LogLevel.info);
         return;
     }
     if (LastAnswer.GetType() == typeof(BCProgramMode))
     {
         ProgramMode = true;
         logme.Log(i18n.FlakeLIMsgs.ProgrammodeToggle, logme.LogLevel.info);
         return;
     }
 }
Esempio n. 2
0
 private void SaveLastAnswer(string lastAnswer, DateTime now)
 {
     LastAnswer = new LastAnswer
     {
         Answer        = lastAnswer,
         PreviousLapse = GetNextCardBefore(now).CurrentInterval
     };
 }
Esempio n. 3
0
        /// <summary>
        /// Send command to central and receive answer
        /// </summary>
        /// <param name="command"></param>
        private void SendCommandAndReceiveAnswer(LICommandAndAnswer command)
        {
            bool retry = true;

            while (retry)
            {
                SerialPortConnection.Write(command.Command.ByteArray, 0, command.Command.Length);
                logme.Log(command.Command.LogMessage, logme.LogLevel.limsg, command.Command.ByteArray);
                logme.AddLine();

                Thread.Sleep(Config.Data.TimeToWaitForLIAnswer_ms); // wait for central
                DateTime tmp = DateTime.Now;

                while (LastAnswer == null || EmergencyOff)
                {
                    // wait for answer
                    if (DateTime.Now > tmp.AddSeconds(Config.Data.TimeoutForLIResponse_s))
                    {
                        // timeout
                        logme.Log(Resources.FlakeLIErrors.LITimeout, logme.LogLevel.error, command.Command.ByteArray);
                        return;
                    }
                }
                if (LastAnswer.GetType() == typeof(ErrorUnknown))
                {
                    if (_ErrorInARow < Config.Data.AllowedCentralErrorsInARow)
                    {
                        // unknown error, send again, if error sum < n
                        _ErrorInARow++;
                    }
                    else
                    {
                        // Too much errors in a row
                        retry = false;
                        logme.Log(string.Format(Resources.FlakeLIErrors.ErrorSendingCommad, Config.Data.AllowedCentralErrorsInARow.ToString()), logme.LogLevel.error, command.Command.ByteArray);
                        return;
                    }
                }
                else
                {
                    _ErrorInARow = 0;
                    retry        = false;
                }
            }

            command.Answer = LastAnswer; // store answer to command for external use
            LastAnswer     = null;

            logme.Log(command.Answer.LogMessage, logme.LogLevel.limsg, command.Answer.ByteArray);
            logme.AddLine('=');
        }
Esempio n. 4
0
 public void TreatLastAnswerAsCorrect()
 {
     GetNextCard().PromoteFrom(LastAnswer.PreviousLapse);
     LastAnswer = LastAnswer.NullAnswer;
 }
 public void Update(LastAnswer answer)
 {
     cboxAnswer.Text = answer.Text;
     answerBool      = answer;
 }
        public LastAnswerCtrl(LastAnswer answer)
        {
            InitializeComponent();

            Update(answer);
        }