private void CardsMonitoring()
        {
            var messageBus = _messageBusFactory.Create();

            Task.Factory.StartNew(async() =>
            {
                do
                {
                    _lockEvent.WaitOne();
                    try
                    {
                        var ctrlGpu        = new ControlMemory();
                        var voltageMonitor = new HardwareMonitor();
                        var voltage        = new List <VoltageInfo>();
                        var temp           = new List <TempInfo>();

                        foreach (var vol in voltageMonitor.Entries.Where(x => x.SrcId == 96))
                        {
                            voltage.Add(new VoltageInfo {
                                Current = vol.Data, Max = vol.MaxLimit, CardId = vol.GPU
                            });
                        }
                        messageBus.Handle(new AutobernerVoltageCardsInfoMessage {
                            VoltageInfoModel = voltage.ToArray()
                        });

                        foreach (var vol in voltageMonitor.Entries.Where(x => x.SrcId == 0))
                        {
                            temp.Add(new TempInfo {
                                Current = vol.Data, CardId = vol.GPU
                            });
                        }
                        messageBus.Handle(new AutobernerTempCardsInfoMessage {
                            TempInfoModel = temp.ToArray()
                        });

                        ctrlGpu.Connect();
                        ctrlGpu.ReloadAll();
                        ctrlGpu.Reinitialize();

                        var actualList = FindCards(ctrlGpu);

                        messageBus.Handle(new AutobernerInformationMessage {
                            CurrentInfoCards = actualList.ToList()
                        });
                        ctrlGpu.Disconnect();
                    }
                    catch (Exception ex)
                    {
                        _logger.Error($"CardsMonitoring error: {ex.Message}");
                    }
                    await Task.Delay(_config.MonitoringInterval, _token.Token);
                } while (!_token.IsCancellationRequested);
            }, _token.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default)
            .ContinueWith((x) =>
            {
                messageBus.Handle <AutobernerStopWatchingMessage>();
            },
                          TaskContinuationOptions.OnlyOnFaulted);
        }
        private void CardsMonitoring(CardParam[] configCards)
        {
            var messageBus = _messageBusFactory.Create();

            Task.Factory.StartNew(async() =>
            {
                do
                {
                    _lockEvent.WaitOne();
                    try
                    {
                        var ctrlGpu = new ControlMemory();
                        ctrlGpu.Connect();
                        ctrlGpu.ReloadAll();
                        ctrlGpu.Reinitialize();

                        var actualList = FindCards(ctrlGpu);

                        ctrlGpu.Disconnect();

                        if (_config.WatchDog)
                        {
                            WatchDog(configCards, actualList);
                        }
                    }
                    catch (Exception ex)
                    {
                        _logger.Error($"CardsMonitoring error: {ex.Message}");
                    }
                    await Task.Delay(_config.MonitoringInterval, _token.Token);
                } while (!_token.IsCancellationRequested);
            }, _token.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default)
            .ContinueWith((x) =>
            {
                messageBus.Publish <AutobernerStopWatchingMessage>();
            },
                          TaskContinuationOptions.OnlyOnFaulted);
        }
        private void RestoreCard(CardPramsMessageModel card)
        {
            const int divider    = 1000;
            var       messageBus = _messageBusFactory.Create();

            try
            {
                var lmacm = new ControlMemory();
                lmacm.Connect();

                var flags = lmacm.GpuEntries[card.Id].Flags;

                var voltageBoost     = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.CORE_VOLTAGE_BOOST);
                var coreclockBoost   = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.CORE_CLOCK_BOOST);
                var memoryclockBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.MEMORY_CLOCK_BOOST);


                lmacm.GpuEntries[card.Id].ThermalLimitCur = (int)card.TempLimit;
                lmacm.GpuEntries[card.Id].PowerLimitCur   = (int)card.PowerLimit;
                lmacm.GpuEntries[card.Id].FanSpeedCur     = (uint)card.FanSpeed;

                if (voltageBoost)
                {
                    lmacm.GpuEntries[card.Id].CoreVoltageBoostCur = (int)card.Voltage;
                }
                else
                {
                    lmacm.GpuEntries[card.Id].CoreVoltageCur = (uint)card.Voltage;
                }

                if (coreclockBoost)
                {
                    lmacm.GpuEntries[card.Id].CoreClockBoostCur = (int)card.CoreClock * divider;
                }
                else
                {
                    lmacm.GpuEntries[card.Id].CoreClockCur = (uint)card.CoreClock * divider;
                }

                if (memoryclockBoost)
                {
                    lmacm.GpuEntries[card.Id].MemoryClockBoostCur = (int)card.MemoryClock * divider;
                }
                else
                {
                    lmacm.GpuEntries[card.Id].MemoryClockCur = (uint)card.MemoryClock * divider;
                }


                lmacm.CommitChanges();
                lmacm.Disconnect();

                if (_logger.IsWarnEnabled)
                {
                    _logger.Warn($"Restore card > {card}");
                }
                messageBus.Handle(new AutobernerWatchdogResetMessage {
                    Status = MessageStatus.Ok
                });
            }
            catch (Exception ex)
            {
                _logger.Error($"inner exception: {ex.InnerException?.Message ?? string.Empty} > exception: {ex.Message}", ex);
                messageBus.Handle(new AutobernerWatchdogResetMessage {
                    Status = MessageStatus.Error
                });
            }
        }
        private void RestoreCard(CardParam[] configCards, CardParam card)
        {
            const int divider    = 1000;
            var       messageBus = _messageBusFactory.Create();

            try
            {
                if (card == null)
                {
                    _logger.Error("card for restore is null!, ret <");
                    return;
                }

                var lmacm = new ControlMemory();
                lmacm.Connect();

                var configCardParam = configCards.FirstOrDefault(x => x.Id == card.Id);

                if (configCardParam == null)
                {
                    if (_logger.IsDebugEnabled)
                    {
                        _logger.Debug($"Try restore card > {card} - error > not found in config");
                    }
                    return;
                }

                var flags = lmacm.GpuEntries[card.Id].Flags;

                var voltageBoost     = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.CORE_VOLTAGE_BOOST);
                var coreclockBoost   = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.CORE_CLOCK_BOOST);
                var memoryclockBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.MEMORY_CLOCK_BOOST);


                lmacm.GpuEntries[card.Id].ThermalLimitCur = (int)configCardParam.TempLimit.Current;
                lmacm.GpuEntries[card.Id].PowerLimitCur   = (int)configCardParam.PowerLimit.Current;
                lmacm.GpuEntries[card.Id].FanSpeedCur     = (uint)configCardParam.FanSpeed.Current;

                if (voltageBoost)
                {
                    lmacm.GpuEntries[card.Id].CoreVoltageBoostCur = (int)configCardParam.Voltage.Current;
                }
                else
                {
                    lmacm.GpuEntries[card.Id].CoreVoltageCur = (uint)configCardParam.Voltage.Current;
                }

                if (coreclockBoost)
                {
                    lmacm.GpuEntries[card.Id].CoreClockBoostCur = (int)configCardParam.CoreClock.Current * divider;
                }
                else
                {
                    lmacm.GpuEntries[card.Id].CoreClockCur = (uint)configCardParam.CoreClock.Current * divider;
                }

                if (memoryclockBoost)
                {
                    lmacm.GpuEntries[card.Id].MemoryClockBoostCur = (int)configCardParam.MemoryClock.Current * divider;
                }
                else
                {
                    lmacm.GpuEntries[card.Id].MemoryClockCur = (uint)configCardParam.MemoryClock.Current * divider;
                }


                lmacm.CommitChanges();
                lmacm.Disconnect();

                if (_logger.IsWarnEnabled)
                {
                    _logger.Warn($"Restore card > {card}");
                }
                messageBus.Publish(new AutobernerWatchdogResetMessage {
                    Status = MessageStatus.Ok
                });
            }
            catch (Exception ex)
            {
                _logger.Error($"inner exception: {ex.InnerException.Message} > exception: {ex.Message}", ex);
                messageBus.Publish(new AutobernerWatchdogResetMessage {
                    Status = MessageStatus.Error
                });
            }
        }
Пример #5
0
        //private void a

        private bool ShowMsiState()
        {
            txtLog.Clear();
            //lvMsi.Items.Clear();
            //lvMsi.Clear();

            int normalColumnWidth = 20;

            dgvMSI.Rows.Clear();
            dgvMSI.Columns.Clear();
            dgvMSI.AutoGenerateColumns       = false;
            dgvMSI.RowHeadersVisible         = false;
            dgvMSI.MultiSelect               = false;
            dgvMSI.SelectionMode             = DataGridViewSelectionMode.FullRowSelect;
            dgvMSI.AutoSizeRowsMode          = DataGridViewAutoSizeRowsMode.AllCells;
            dgvMSI.DefaultCellStyle.WrapMode = DataGridViewTriState.True;

            //dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() {HeaderText = "Index", ReadOnly = true, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = normalColumnWidth });
            //dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() {HeaderText = "Device", ReadOnly = true, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = normalColumnWidth });
            //dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() {HeaderText = "GpuId", ReadOnly = true, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = normalColumnWidth });

            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "Index", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "Device", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "GpuId", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "Val", ReadOnly = true, FillWeight = normalColumnWidth
            });

            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "FanSpeed", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "CoreClock", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "ShaderClock", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "MemoryClock", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "CoreVoltage", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "MemoryVoltage", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "AuxVoltage", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "CoreVoltageBoost", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "MemoryVoltageBoost", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "AuxVoltageBoost", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "PowerLimit", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "CoreClockBoost", ReadOnly = true, FillWeight = normalColumnWidth
            });
            dgvMSI.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "MemoryClockBoost", ReadOnly = true, FillWeight = normalColumnWidth
            });


            //lvMsi.Columns.Add("Index", normalColumnWidth);
            //lvMsi.Columns.Add("Device", normalColumnWidth);
            //lvMsi.Columns.Add("GpuId", normalColumnWidth);

            //foreach (ColumnHeader cl in lvMsi.Columns)
            //{
            //  //cl.
            //}

            bool result = true;

            try
            {
                if (macm == null)
                {
                    macm = new ControlMemory();
                }
                else
                {
                    macm.Disconnect();
                    macm.Connect();
                }
            }
            catch (Exception e)
            {
                Wr(e.Message);
                result = false;
                //return false;
            }

            try
            {
                if (mahm == null)
                {
                    mahm = new HardwareMonitor();
                }
                else
                {
                    mahm.Disconnect();
                    mahm.Connect();
                }
            }
            catch (Exception e)
            {
                Wr(e.Message);
                result = false;
                //return false;
            }

            if (!result)
            {
                return(result);
            }

            for (int i = 0; i < mahm.Header.GpuEntryCount; i++)
            {
                //wr("***** MSI AFTERTERBURNER GPU " + i + " *****");
                ControlMemoryGpuEntry ge = macm.GpuEntries[i];
                dgvMSI.Rows.Add(new String[]
                                { i.ToString(),
                                  mahm.GpuEntries[i].Index.ToString(),
                                  mahm.GpuEntries[i].Device,
                                  mahm.GpuEntries[i].GpuId,
                                  "Cur:" + "\n" + "Min:" + "\n" + "Max:" + "\n" + "Def:",
                                  ge.FanSpeedCur.ToString() + "\n" + ge.FanSpeedMin.ToString() + "\n" + ge.FanSpeedMax.ToString() + "\n" + ge.FanSpeedDef.ToString(),
                                  ge.CoreClockCur.ToString() + "\n" + ge.CoreClockMin.ToString() + "\n" + ge.CoreClockMax.ToString() + "\n" + ge.CoreClockDef.ToString(),
                                  ge.ShaderClockCur.ToString() + "\n" + ge.ShaderClockMin.ToString() + "\n" + ge.ShaderClockMax.ToString() + "\n" + ge.ShaderClockDef.ToString(),
                                  ge.MemoryClockCur.ToString() + "\n" + ge.MemoryClockMin.ToString() + "\n" + ge.MemoryClockMax.ToString() + "\n" + ge.MemoryClockDef.ToString(),
                                  ge.CoreVoltageCur.ToString() + "\n" + ge.CoreVoltageMin.ToString() + "\n" + ge.CoreVoltageMax.ToString() + "\n" + ge.CoreVoltageDef.ToString(),
                                  ge.MemoryVoltageCur.ToString() + "\n" + ge.MemoryVoltageMin.ToString() + "\n" + ge.MemoryVoltageMax.ToString() + "\n" + ge.MemoryVoltageDef.ToString(),
                                  ge.AuxVoltageCur.ToString() + "\n" + ge.AuxVoltageMin.ToString() + "\n" + ge.AuxVoltageMax.ToString() + "\n" + ge.AuxVoltageDef.ToString(),
                                  ge.CoreVoltageBoostCur.ToString() + "\n" + ge.CoreVoltageBoostMin.ToString() + "\n" + ge.CoreVoltageBoostMax.ToString() + "\n" + ge.CoreVoltageBoostDef.ToString(),
                                  ge.MemoryVoltageBoostCur.ToString() + "\n" + ge.MemoryVoltageBoostMin.ToString() + "\n" + ge.MemoryVoltageBoostMax.ToString() + "\n" + ge.MemoryVoltageBoostDef.ToString(),
                                  ge.AuxVoltageBoostCur.ToString() + "\n" + ge.AuxVoltageBoostMin.ToString() + "\n" + ge.AuxVoltageBoostMax.ToString() + "\n" + ge.AuxVoltageBoostDef.ToString(),
                                  ge.PowerLimitCur.ToString() + "\n" + ge.PowerLimitMin.ToString() + "\n" + ge.PowerLimitMax.ToString() + "\n" + ge.PowerLimitDef.ToString(),
                                  ge.CoreClockBoostCur.ToString() + "\n" + ge.CoreClockBoostMin.ToString() + "\n" + ge.CoreClockBoostMax.ToString() + "\n" + ge.CoreClockBoostDef.ToString(),
                                  ge.MemoryClockBoostCur.ToString() + "\n" + ge.MemoryClockBoostMin.ToString() + "\n" + ge.MemoryClockBoostMax.ToString() + "\n" + ge.MemoryClockBoostDef.ToString() });

                //ListViewItem li =  lvMsi.Items.Add(mahm.GpuEntries[i].Index.ToString());
                //li.SubItems.Add(mahm.GpuEntries[i].Device);
                //li.SubItems.Add(mahm.GpuEntries[i].GpuId);

                //li.SubItems.Add(mahm.Entries[i].);
            }

            Wr("***** macm.Header.MasterGpu " + macm.Header.MasterGpu.ToString());
            Wr();
            for (int i = 0; i < macm.Header.GpuEntryCount; i++)
            {
                Wr("***** MSI AFTERTERBURNER GPU " + i + " *****");
                Wr("Index: " + macm.GpuEntries[i].Index.ToString());
                Wr(macm.GpuEntries[i].ToString().Replace(";", Environment.NewLine));
                Wr();
            }

            Wr();
            Wr("****************************************************************");
            Wr();
            for (int i = 0; i < mahm.Header.EntryCount; i++)
            {
                Wr("***** MSI AFTERTERBURNER DATA SOURCE " + i + " *****");
                Wr(mahm.Entries[i].ToString());//.Replace(";", "\n"));
                Wr();
            }
            return(true);
        }