Example #1
0
        public BaseEvent ProcessEvent(uint data1, uint data2, DateTime time)
        {
            EventCategory ec = (EventCategory)(0xFF & (data1 >> 8));
            BaseEvent     be = null;

            if (ec == EventCategory.SleepLevel)
            {
                SleepEvent ev = new SleepEvent();

                ev.EventType    = (SleepEventType)(data1 & 0xFF); // data1 encodes the type in the lower 16 bits and...
                ev.Level        = SleepLevel.Awake;
                ev.WakeUpEvents = (HardwareEvent)data2;
                ev.Time         = time;

                be = ev;
            }
            else if (ec == EventCategory.PowerLevel)
            {
                PowerEvent ev = new PowerEvent();

                ev.EventType = PowerEventType.PostNotify;
                ev.Level     = (PowerLevel)data2;
                ev.Time      = time;

                be = ev;
            }

            return(be);
        }
Example #2
0
        /// <summary>
        /// The Sleep method puts the device into a sleeps state that is only woken by the events described in the paramter wakeUpEvents.
        /// Please note that if the event SystemTimer is not used, the system will not be woken up by any managed timers.  In addition,
        /// other threads will not be executed until this sleep call exits.  This method raises the OnSleepChange event.
        ///
        /// The MaximumTimeToActive property contains the timeout value for this call.
        /// </summary>
        /// <param name="level">Determines what level of sleep the system should enter.  The behavior of the level is determined
        /// by the hardware vendor.</param>
        /// <param name="wakeUpEvents">Determines the events that will cause the system to exit the given sleep level</param>
        public static void Sleep(SleepLevel level, HardwareEvent wakeUpEvents)
        {
            SleepChangeEventHandler h = OnSleepChange;

            if (h != null)
            {
                SleepEvent e = new SleepEvent();

                e.EventType    = SleepEventType.ChangeRequested;
                e.Level        = level;
                e.WakeUpEvents = wakeUpEvents;
                e.Time         = DateTime.UtcNow;

                h(e);
            }

            InternalSleep(level, wakeUpEvents);
        }
Example #3
0
        //--//

        void SleepChange(SleepEvent ev)
        {
            if (ev.EventType == SleepEventType.ChangeRequested)
            {
                _change.Set();
                _changeEvent = ev;
            }
            else if (ev.EventType == SleepEventType.WakeUp)
            {
                _wakeup.Set();
                _wakeupEvent = ev;
            }
            else
            {
                Debug.Assert( false );
            }
        }
Example #4
0
        public MFTestResults Sleep_3_NoSystemTimerTest()
        {
            bool result = true;

            TimeSpan backup = PowerState.MaximumTimeToActive;

            try
            {
                PowerState.MaximumTimeToActive = new TimeSpan(0,0,0,2);
                TimeSpan tsTimeout = PowerState.MaximumTimeToActive;

                PowerState.OnSleepChange += new SleepChangeEventHandler(this.SleepChange);

                HardwareEvent newEvents = HardwareEvent.OEMReserved1;

                _timerFired.Reset();
                _wakeupEvent = null;

                Timer t = new Timer(new TimerCallback(this.TimerCallback), null, tsTimeout.Milliseconds / 2, Timeout.Infinite);

                DateTime dtStart = DateTime.Now;

                // this will wake up with the max time allowed
                PowerState.Sleep(SleepLevel.Sleep, newEvents);


                ///
                /// When the debugging is enbled on a device the debug port is selected as a wakeup event by default,
                /// so we ignore this test if we get any events.
                /// 
                if (_timerFired.WaitOne(1000, false) && (_wakeupEvent == null || _wakeupEvent.WakeUpEvents == 0))
                {
                    result = (_timerTime - dtStart) > tsTimeout;
                }

                PowerState.OnSleepChange -= new SleepChangeEventHandler(this.SleepChange);
            }
            finally
            {
                PowerState.MaximumTimeToActive = backup;
            }
            
            return result ? MFTestResults.Pass : MFTestResults.Fail;
        }
Example #5
0
        public BaseEvent ProcessEvent(uint data1, uint data2, DateTime time)
        {
            EventCategory ec = (EventCategory)(0xFF & (data1 >> 8));
            BaseEvent be = null;

            if (ec == EventCategory.SleepLevel)
            {
                SleepEvent ev = new SleepEvent();

                ev.EventType = (SleepEventType)(data1 & 0xFF);    // data1 encodes the type in the lower 16 bits and...
                ev.Level = SleepLevel.Awake;
                ev.WakeUpEvents = (HardwareEvent)data2;
                ev.Time = time;

                be = ev;
            }
            else if (ec == EventCategory.PowerLevel)
            {
                PowerEvent ev = new PowerEvent();

                ev.EventType = PowerEventType.PostNotify;
                ev.Level = (PowerLevel)data2;
                ev.Time = time;

                be = ev;
            }

            return be;
        }
Example #6
0
        /// <summary>
        /// The Sleep method puts the device into a sleeps state that is only woken by the events described in the paramter wakeUpEvents.
        /// Please note that if the event SystemTimer is not used, the system will not be woken up by any managed timers.  In addition,
        /// other threads will not be executed until this sleep call exits.  This method raises the OnSleepChange event.
        ///
        /// The MaximumTimeToActive property contains the timeout value for this call.
        /// </summary>
        /// <param name="level">Determines what level of sleep the system should enter.  The behavior of the level is determined
        /// by the hardware vendor.</param>
        /// <param name="wakeUpEvents">Determines the events that will cause the system to exit the given sleep level</param>
        public static void Sleep(SleepLevel level, HardwareEvent wakeUpEvents)
        {
            SleepChangeEventHandler h = OnSleepChange;

            if (h != null)
            {
                SleepEvent e = new SleepEvent();

                e.EventType = SleepEventType.ChangeRequested;
                e.Level = level;
                e.WakeUpEvents = wakeUpEvents;
                e.Time = DateTime.UtcNow;

                h(e);
            }

            InternalSleep(level, wakeUpEvents);
        }