public ExpanderEventArgs(ExpanderState expst)
 {
     this.expst = expst;
 }
Пример #2
0
        private Task Refresh()
        {
            return(Task.Run(() =>
            {
                ExpanderCommandHandle[] cmdhdls;
                ExpanderCommand[] expcmds = new ExpanderCommand[5];
                expcmds[0] = new ExpanderCommand(ExpanderCommand.READ_EXPANDERS_COMMAND);
                expcmds[1] = new ExpanderCommand(ExpanderCommand.READ_FAN_SPEED_COMMAND);
                expcmds[2] = new ExpanderCommand(ExpanderCommand.READ_POWER_MONITOR_COMMAND);
                expcmds[3] = new ExpanderCommand(ExpanderCommand.READ_TEMPERATURES_COMMAND);
                expcmds[4] = new ExpanderCommand(ExpanderCommand.READ_UPTIME_COMMAND);

                lock (expander_connection_lock)
                    cmdhdls = expconn.EnqueueCommands(expcmds);

                ExpanderState new_state = new ExpanderState();

                //fill expander state
                cmdhdls[0].Handle.WaitOne();
                byte[] buffer = new byte[4];
                Array.Copy(cmdhdls[0].Command.RxPacket, 1, buffer, 0, 4);

                bool[] converted = buffer.SelectMany(Utilities.GetBits).ToArray(); //resulting order 0: 1, 0 1: 1, 0
                Array.Copy(converted, 8, new_state.Expander0State, 0, 8);
                Array.Copy(converted, 0, new_state.Expander0State, 8, 8);
                Array.Copy(converted, 24, new_state.Expander1State, 0, 8);
                Array.Copy(converted, 16, new_state.Expander1State, 8, 8);

                //apply hardware configuration
                lock (hwconfig_lock)
                    for (int index_counter = 0; index_counter < 16; index_counter++)
                    {
                        new_state.Expander0State[index_counter] ^= exphwconfig.Expander0Configuration[index_counter];
                        new_state.Expander1State[index_counter] ^= exphwconfig.Expander1Configuration[index_counter];
                    }

                cmdhdls[1].Handle.WaitOne();
                buffer = new byte[2];
                Array.Copy(cmdhdls[1].Command.RxPacket, 1, buffer, 0, 2);
                new_state.FanSpeed = BitConverter.ToUInt16(buffer, 0);

                cmdhdls[2].Handle.WaitOne();
                buffer = new byte[8];
                Array.Copy(cmdhdls[2].Command.RxPacket, 1, buffer, 0, 8);
                new_state.BusVoltage = BitConverter.ToSingle(buffer, 0);
                new_state.BusPower = BitConverter.ToSingle(buffer, 4);

                cmdhdls[3].Handle.WaitOne();
                buffer = new byte[12];
                Array.Copy(cmdhdls[3].Command.RxPacket, 1, buffer, 0, 12);
                new_state.FanTemperature = BitConverter.ToSingle(buffer, 0);
                new_state.Board0Temperature = BitConverter.ToSingle(buffer, 4);
                new_state.Board1Temperature = BitConverter.ToSingle(buffer, 8);

                cmdhdls[4].Handle.WaitOne();
                buffer = new byte[8];
                Array.Copy(cmdhdls[4].Command.RxPacket, 1, buffer, 0, 4);
                new_state.Uptime = BitConverter.ToUInt64(buffer, 0);

                lock (expander_state_lock)
                    expst = new ExpanderState(new_state);

                if (freshstateevent != null)
                {
                    freshstateevent(this, new ExpanderEventArgs(new_state));
                }
            }));
        }