internal void SetParamaters(byte currentPowerState, byte lastEvent, byte miscState)
        {
            if (base.CompletionCode == 0)
            {

                #region Power State

                // [0] Power is on, 1 = On, 0 = Off
                byte state = Convert.ToByte((currentPowerState & 0x01));

                // Translate the current power state into an enumeration.
                switch (state)
                {
                    case 0x00:
                        this.powerstate = IpmiPowerState.Off;
                        break;
                    case 0x01:
                        this.powerstate = IpmiPowerState.On;
                        break;
                    default:
                        this.powerstate = IpmiPowerState.Invalid;
                        break;
                }

                #endregion

                #region Power Policy

                state = Convert.ToByte((currentPowerState & 0x60) >> 5);

                // Translate the state into Power on Policy.
                switch (state)
                {
                    case 0x00:
                        this.powerOnPolicy = PowerRestoreOption.StayOff;
                        break;
                    case 0x01:
                        this.powerOnPolicy = PowerRestoreOption.PreviousState;
                        break;
                    case 0x02:
                        this.powerOnPolicy = PowerRestoreOption.AlwaysPowerUp;
                        break;
                    default:
                        this.powerOnPolicy = PowerRestoreOption.Unknown;
                        break;
                }

                #endregion

                #region Power Fault

                // [7:5] -  reserved
                // [4]   -   1b = last ‘Power is on’ state was entered via IPMI command 
                // [3]   -   1b = last power downcaused by power fault
                // [2]   -   1b = last power down caused by a power interlockbeing activated 
                // [1]   -   1b = last power down caused by a Power overload
                // [0]   -   1b = AC failed
                state = Convert.ToByte((lastEvent & 0x1F));

                switch (state)
                {
                    case 0x00:
                        this.lastPowerEvent = PowerEvent.ACfailed;
                        break;
                    case 0x01:
                        this.lastPowerEvent = PowerEvent.PowerOverload;
                        break;
                    case 0x02:
                        this.lastPowerEvent = PowerEvent.PowerInterlockActive;
                        break;
                    case 0x03:
                        this.lastPowerEvent = PowerEvent.PowerFault;
                        break;
                    case 0x04:
                        this.lastPowerEvent = PowerEvent.IpmiSetState;
                        break;
                    default:
                        this.lastPowerEvent = PowerEvent.Unknown;
                        break;
                }

                #endregion

                #region Identity LED

                // [7:4] -  reserved
                // [6] -    1b = Chassis Identify command and state info supported (Optional)
                //          0b = Chassis Identify command support unspecified via this 
                //          command.
                byte identitySupport = Convert.ToByte((miscState & 0x40) >> 6);

                if (identitySupport == 0x01)
                    this.identitySupported = true;

                // [5:4] -  Chassis Identify State.  Mandatory when bit [6] = 1b, reserved (return 
                // as 00b) otherwise.Returns the present chassis identify state. Refer to 
                // the Chassis Identify command for more info.
                // 00b = chassis identify state = Off
                // 01b = chassis identify state = Temporary (timed) On
                // 10b = chassis identify state = Indefinite On
                // 11b = reserved

                byte Identity = Convert.ToByte((miscState & 0x30) >> 4);

                switch (Identity)
                {
                    case 0x00:
                        this.identityState = IdentityState.Off;
                        break;
                    case 0x01:
                        this.identityState = IdentityState.TemporaryOn;
                        break;
                    case 0x02:
                        this.identityState = IdentityState.On;
                        break;
                    default:
                        this.identityState = IdentityState.Unknown;
                        break;
                }

                #endregion

            }
            else
            {
                this.powerstate = IpmiPowerState.Invalid;
            }          
        }
Example #2
0
        static EventBase GetFakeEvent()
        {
            var selector = Faker.NumberFaker.Number(0, 5);

            switch (selector)
            {
            case 0:
                var e = new DoorEvent
                {
                    Eventno   = count++,
                    EventType = DoorEventEventType.DoorEvent,
                    Doors     = new DoorsSchema
                    {
                        Event = count++,
                        Left  = new Doorpos
                        {
                            Count = Faker.NumberFaker.Number(0, 65000),
                            Open  = Faker.BooleanFaker.Boolean()
                        },
                        Right = new Doorpos
                        {
                            Count = Faker.NumberFaker.Number(0, 65000),
                            Open  = Faker.BooleanFaker.Boolean()
                        }
                    }
                };
                return(e);

            case 1:
                var le = new LightEvent
                {
                    Eventno   = count++,
                    EventType = LightEventEventType.LightEvent,
                    Lights    = new LightsSchema
                    {
                        Event     = Faker.NumberFaker.Number(0, 11),
                        Frontpass = Faker.BooleanFaker.Boolean(),
                        Rearpass  = Faker.BooleanFaker.Boolean(),
                        Left      = new Lightpos
                        {
                            Count = Faker.NumberFaker.Number(0, 65000),
                            Lit   = Faker.BooleanFaker.Boolean()
                        },
                        Right = new Lightpos
                        {
                            Count = Faker.NumberFaker.Number(0, 65000),
                            Lit   = Faker.BooleanFaker.Boolean()
                        },
                        Rear = new Lightpos
                        {
                            Count = Faker.NumberFaker.Number(0, 65000),
                            Lit   = Faker.BooleanFaker.Boolean()
                        }
                    }
                };
                return(le);

            case 2:
                var re = new RelocatedEvent
                {
                    EventType = RelocatedEventEventType.RelocatedEvent,
                    Location  = GetFakeLocation()
                };
                return(re);

            case 3:
                var pe = new PowerEvent
                {
                    EventType = PowerEventEventType.PowerEvent,
                    Msg       = Faker.TextFaker.Sentence()
                };
                return(pe);

            case 4:
                var ce = new CommEvent
                {
                    EventType = CommEventEventType.CommEventSuccess,
                    Conncount = count++,
                    Humidity  = Faker.NumberFaker.Number(0, 100),
                    Tempf     = Faker.NumberFaker.Number(0, 100),
                    Msgnum    = count,
                    Msg       = Faker.TextFaker.Sentence()
                };
                return(ce);

            case 5:
                var cee = new CommEvent
                {
                    EventType = CommEventEventType.CommEventError,
                    Conncount = count++,
                    Humidity  = Faker.NumberFaker.Number(0, 100),
                    Tempf     = Faker.NumberFaker.Number(0, 100),
                    Msgnum    = count,
                    Msg       = Faker.TextFaker.Sentence()
                };
                return(cee);

            default:
                return(null);
            }
        }
        public PowerEvent GetNextEvent()
        {
            //Working variables
            ArrayList EventList = new ArrayList();
            PowerEvent OnEvent1 = new PowerEvent();
            PowerEvent OffEvent1 = new PowerEvent();
            PowerEvent OnEvent2 = new PowerEvent();
            PowerEvent OffEvent2 = new PowerEvent();
            bool OffEventOffset1 = false;
            bool OffEventOffset2 = false;

            //Set the current weekday
            EditSchedule.WeekDays CurrentDay = GetScheduleDay(DateTime.Now);
            EditSchedule.WeekDays YesterDay = GetScheduleDay(DateTime.Now.AddDays(-1));

            //Reload the settings
            settings.Reload();

            //Get the adjusted time of each event
            OnEvent1.EventTime = DateTime.Parse(settings.PowerOn1);
            OnEvent1.EventType = PowerEventType.PowerOn;
            OffEvent1.EventTime = DateTime.Parse(settings.PowerOff1);
            OffEvent1.EventType = PowerEventType.PowerOff;
            if (OffEvent1.EventTime < OnEvent1.EventTime)
            {
                OffEvent1.EventTime = OffEvent1.EventTime.AddDays(1);
                OffEventOffset1 = true;
            }

            OnEvent2.EventTime = DateTime.Parse(settings.PowerOn2);
            OnEvent2.EventType = PowerEventType.PowerOn;
            OffEvent2.EventTime = DateTime.Parse(settings.PowerOff2);
            OffEvent2.EventType = PowerEventType.PowerOff;
            if (OffEvent2.EventTime < OnEvent2.EventTime)
            {
                OffEvent2.EventTime = OffEvent2.EventTime.AddDays(1);
                OffEventOffset2 = true;
            }

            //If the event is on a valid day, add it to the list
            if ((settings.Weekday1 & (int)CurrentDay) > 0)
            {
                EventList.Add(OnEvent1);
                EventList.Add(OffEvent1);
            }

            if ((settings.Weekday2 & (int)CurrentDay) > 0)
            {
                EventList.Add(OnEvent2);
                EventList.Add(OffEvent2);
            }

            if (OffEventOffset1)
                if ((settings.Weekday1 & (int)YesterDay) > 0)
                    EventList.Add(OffEvent1);

            if (OffEventOffset2)
                if ((settings.Weekday2 & (int)YesterDay) > 0)
                    EventList.Add(OffEvent2);

            //Sort the list
            EventList.Sort(new PowerEventSort());

            //Get the next event
            PowerEvent NextEvent = new PowerEvent();
            NextEvent.EventType = PowerEventType.NoAction;

            foreach (PowerEvent pe in EventList)
            {
                if (pe.EventTime > DateTime.Now)
                {
                    NextEvent = pe;
                    break;
                }
            }

            //Note that we have updated the schedule
            ScheduleChanged = false;

            //Return the next event
            return NextEvent;
        }