/// <summary>
        /// Learn an infrared command.
        /// </summary>
        /// <param name="data">New infrared command.</param>
        /// <returns>
        /// Tells the calling code if the learn was Successful, Failed or Timed Out.
        /// </returns>
        public LearnStatus Learn(out byte[] data)
        {
            LearnStatus status = LearnStatus.Failure;

            data = null;

            if (_deviceType != DeviceType.Tira)
            {
                throw new ApplicationException("Ira and Ira-2 do not support IR Learn");
            }

            Disconnect();
            Connect(57600);

            /*
             * if (_learnTimedOut)
             * {
             * status = LearnStatus.Timeout;
             * }
             * else if (result)
             * {
             * data = Encoding.ASCII.GetBytes(irCode.ToString());
             *
             * status = LearnStatus.Success;
             * }
             * else
             * {
             * status = LearnStatus.Failure;
             * }
             */
            Disconnect();
            Connect(9600);

            return(status);
        }
Exemple #2
0
 /// <summary>
 /// Chuyển lớp cho học sinh
 /// </summary>
 /// <param name="ClassID"></param>
 /// <param name="Identifier"></param>
 /// <returns></returns>
 public JsonResult SwitchClass(int ClassID, string Identifier)
 {
     try
     {
         // Lấy niên khóa
         Configure Configure = db.ConfigRepository.GetAll().Where(e => e.IsActive).FirstOrDefault();
         // Nếu chuyển ở năm học hiện tại thì cho phép, còn lại thì không
         User student    = db.UserRepository.FindByIdentifier(Identifier);
         bool IsLearning = db.MemberRepository.GetAll().Any(e => e.LearnStatus == LearnStatus.Learning && e.ConfigureID == Configure.ID && e.UserID == student.ID);
         if (!IsLearning)
         {
             return(Json(new { message = "Học sinh này đã tốt nghiệp", success = false }, JsonRequestBehavior.AllowGet));
         }
         List <ClassMember> old_member = db.MemberRepository.GetAll().Where(e => e.UserID == student.ID).ToList();
         bool CurrentClass             = old_member.Any(e => e.ClassID == ClassID && Configure.ID == e.ConfigureID);
         //Không cho chuyển trùng lớp đang học
         if (CurrentClass)
         {
             return(Json(new { message = "Bạn chuyển trùng lớp đang học", success = false }, JsonRequestBehavior.AllowGet));
         }
         LearnStatus status         = LearnStatus.Learning;
         bool        SwitchOldClass = false;
         //Bỏ các lớp khác
         old_member.ForEach(e =>
         {
             // Lấy tình trạng học của lớp cũ để đưa sang lớp mới
             if (e.LearnStatus == LearnStatus.Learning)
             {
                 status = e.LearnStatus;
                 //Đánh dấu đã chuyển
                 e.LearnStatus = LearnStatus.Switched;
             }
             //Nếu trường hợp chuyển lại lớp cũ..
             if (e.LearnStatus == LearnStatus.Switched && e.ClassID == ClassID)
             {
                 e.LearnStatus  = LearnStatus.Learning;
                 SwitchOldClass = true;
             }
         });
         if (!SwitchOldClass)
         {
             ClassMember new_member = new ClassMember
             {
                 UserID      = student.ID,
                 ClassID     = ClassID,
                 ConfigureID = Configure.ID,
                 LearnStatus = status,
             };
             db.MemberRepository.Add(new_member);
         }
         db.SaveChanges();
         return(Json(new { message = "Chuyển lớp thành công!", success = true }, JsonRequestBehavior.AllowGet));
     }
     catch (Exception e)
     {
         Response.StatusCode = 500;
         return(Json(e.Message, JsonRequestBehavior.AllowGet));
     }
 }
Exemple #3
0
        /// <summary>
        /// Learn an IR Command.
        /// </summary>
        /// <param name="learnTimeout">How long to wait before aborting learn.</param>
        /// <param name="learned">Newly learned IR Command.</param>
        /// <returns>Learn status.</returns>
        public override LearnStatus Learn(int learnTimeout, out IrCode learned)
        {
            DebugWriteLine("Learn()");

            learned       = null;
            _learningCode = new IrCode();

            SetInputPort(InputPort.Learning);

            int learnStartTick = Environment.TickCount;

            _readThreadMode = ReadThreadMode.Learning;

            // Wait for the learning to finish ...
            while (_readThreadMode == ReadThreadMode.Learning && Environment.TickCount < learnStartTick + learnTimeout)
            {
                Thread.Sleep(PacketTimeout);
            }

            DebugWriteLine("End Learn");

            ReadThreadMode modeWas = _readThreadMode;

            _readThreadMode = ReadThreadMode.Receiving;
            SetInputPort(InputPort.Receive);

            LearnStatus status = LearnStatus.Failure;

            switch (modeWas)
            {
            case ReadThreadMode.Learning:
                status = LearnStatus.Timeout;
                break;

            case ReadThreadMode.LearningFailed:
                status = LearnStatus.Failure;
                break;

            case ReadThreadMode.LearningDone:
                DebugDump(_learningCode.TimingData);
                if (_learningCode.FinalizeData())
                {
                    learned = _learningCode;
                    status  = LearnStatus.Success;
                }
                break;
            }

            _learningCode = null;
            return(status);
        }
Exemple #4
0
        /// <summary>
        /// Learn an infrared command.
        /// </summary>
        /// <param name="data">New infrared command.</param>
        /// <returns>
        /// Tells the calling code if the learn was Successful, Failed or Timed Out.
        /// </returns>
        public LearnStatus Learn(out byte[] data)
        {
            IrCode code;

            LearnStatus status = _driver.Learn(_config.LearnTimeout, out code);

            if (code != null)
            {
                data = code.ToByteArray();
            }
            else
            {
                data = null;
            }

            return(status);
        }
Exemple #5
0
 internal LearnResult(LearnStatus status, IRCode code)
 {
     Status = status;
     Code = code;
 }