private void UpdateValues(GpuData gpu)
        {
            if (gpu != null)
            {
                PanelTitleLabel.BackColor = ThemeColors.PresetColors[gpu.Index];
                PanelTitleLabel.Text      = string.Format("GPU {0} - {1}", gpu.Index, gpu.Text);
                AverageLabel.Text         = gpu.AvergaeTemperature.ToString("n2");
                MinLabel.Text             = gpu.MinimumTemperature.ToString("n0");
                MaxLabel.Text             = gpu.MaximumTemperature.ToString("n0");
                SdLabel.Text = gpu.StdDevTemperature.ToString("n2");


                FanAverageLabel.Text = gpu.AvergaeFanSpeed.ToString("n2");
                FanMinLabel.Text     = gpu.MinimumFanSpeed.ToString("n0");
                FanMaxLabel.Text     = gpu.MaximumFanSpeed.ToString("n0");
                FanSdLabel.Text      = gpu.StdDevFanSpeed.ToString("n2");
            }
            else
            {
                PanelTitleLabel.BackColor = this.BackColor;
                PanelTitleLabel.Text      = "";
                AverageLabel.Text         = "N/A";
                MinLabel.Text             = "N/A";
                MaxLabel.Text             = "N/A";
                SdLabel.Text = "N/A";


                FanAverageLabel.Text = "N/A";
                FanMinLabel.Text     = "N/A";
                FanMaxLabel.Text     = "N/A";
                FanSdLabel.Text      = "N/A";
            }
        }
示例#2
0
 public GpuProfilesJsonDb()
 {
     Gpus           = new GpuData[0];
     GpuProfiles    = new List <GpuProfileData>();
     CoinOverClocks = new List <CoinOverClockData>();
     this.TimeStamp = Timestamp.GetTimestamp();
 }
示例#3
0
                public void ComputeGPUData()
                {
                    try
                    {
                        m_MinerResult      = new MinerDataResult();
                        m_MinerResult.GPUs = new List <GpuData>();

                        int totalHashrate = 0, totalShares = 0, rejected = 0;
                        foreach (Result item in m_EwbfData.result)
                        {
                            GpuData gpu = new GpuData(item.name);
                            gpu.IdentifyMake();

                            gpu.Hashrate    = item.speed_sps.ToString();
                            gpu.Temperature = item.temperature + "C";
                            m_MinerResult.GPUs.Add(gpu);
                            totalHashrate += item.speed_sps;
                            totalShares   += item.accepted_shares;
                            rejected      += item.rejected_shares;
                        }

                        m_MinerResult.TotalHashrate = totalHashrate;
                        m_MinerResult.TotalShares   = totalShares;
                        m_MinerResult.Rejected      = rejected;

                        m_EwbfData.MinerDataResult = m_MinerResult;
                    }
                    catch (Exception)
                    {
                        Succeeded = false;
                        throw;
                    }
                }
示例#4
0
        /// <summary>
        /// this is put here instead of in a central location like core because in future u might want to disable few graphic cards in which case
        /// this class will have that info as disabling will be specific to a miner
        /// </summary>
        public List <GpuData> GetGpuList()
        {
            try
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController");
                List <GpuData>           gpus     = new List <GpuData>();

                string graphicsCard = string.Empty;
                foreach (ManagementObject mo in searcher.Get())
                {
                    string name = mo["Name"] as string;
                    if (!string.IsNullOrEmpty(name))
                    {
                        GpuData data = new GpuData(name);
                        data.IdentifyMake();
                        gpus.Add(data);
                    }
                }
                return(gpus);
            }
            catch (Exception e)
            {
            }
            return(null);
        }
示例#5
0
        private bool ColorRender(EventArgs e, Graphics g, Rectangle r, Object rowObject)
        {
            GpuData gpu   = rowObject as GpuData;
            Color   color = ThemeColors.PresetColors[gpu.Index];

            if (ObjectListGpus.SelectedObject == rowObject)
            {
                g.Clear(ObjectListGpus.Focused ? ObjectListGpus.SelectedBackColor : ObjectListGpus.UnfocusedSelectedBackColor);
            }
            else
            {
                g.Clear(ObjectListGpus.BackColor);
            }

            RectangleF cellRect = new Rectangle(r.X + 2, r.Y + 2, r.Width - 5, r.Height - 5);

            g.FillRectangle(new SolidBrush(color), cellRect);

            StringFormat format = new StringFormat();

            format.Alignment     = StringAlignment.Center;
            format.LineAlignment = StringAlignment.Center;
            using (SolidBrush textBrush = new SolidBrush(ObjectListGpus.ForeColor))
                g.DrawString(gpu.Index.ToString(), ObjectListGpus.Font, textBrush, cellRect, format);

            return(true);
        }
示例#6
0
 public GpuViewModel(GpuData gpuData, GpuData[] gpuDatas)
 {
     if (gpuData == null)
     {
         throw new System.ArgumentNullException(nameof(gpuData));
     }
     if (gpuDatas == null)
     {
         throw new System.ArgumentNullException(nameof(gpuDatas));
     }
     _isGpuData           = true;
     _gpuDatas            = gpuDatas.Where(a => a.Index != NTMinerRoot.GpuAllId).ToArray();
     _overClock           = new EmptyOverClock();
     _index               = gpuData.Index;
     _name                = gpuData.Name;
     _temperature         = 0;
     _fanSpeed            = 0;
     _powerUsage          = 0;
     _coreClockDelta      = 0;
     _memoryClockDelta    = 0;
     _coreClockDeltaMin   = gpuData.CoreClockDeltaMin;
     _coreClockDeltaMax   = gpuData.CoreClockDeltaMax;
     _memoryClockDeltaMin = gpuData.MemoryClockDeltaMin;
     _memoryClockDeltaMax = gpuData.MemoryClockDeltaMax;
     _cool                = 0;
     _coolMin             = gpuData.CoolMin;
     _coolMax             = gpuData.CoolMax;
     _power               = 0;
     _powerMin            = gpuData.PowerMin;
     _powerMax            = gpuData.PowerMax;
 }
 private void UpdateValues(GpuData gpu)
 {
     if (gpu != null)
     {
         PanelTitleLabel.BackColor = ThemeColors.PresetColors[gpu.Index];
         PanelTitleLabel.Text      = string.Format("GPU {0} - {1}", gpu.Index, gpu.Text);
         AverageLabel.Text         = gpu.AvergaeHashRate.ToString("n4");
         MinLabel.Text             = gpu.MinimumHashRate.ToString("n2");
         MaxLabel.Text             = gpu.MaximumHashRate.ToString("n2");
         SdLabel.Text              = gpu.StdDevHashRate.ToString("n2");
         TotalSharesLabel.Text     = gpu.SharesFound.ToString();
         IncorrectSharesLabel.Text = gpu.IncorrectShares.ToString();
         SharesPerHourLabel.Text   = gpu.SharesPerHour.ToString("n2");
         FulfillmentLabel.Text     = gpu.TimeForOneShare;
     }
     else
     {
         PanelTitleLabel.BackColor = this.BackColor;
         PanelTitleLabel.Text      = "";
         AverageLabel.Text         = "N/A";
         MinLabel.Text             = "N/A";
         MaxLabel.Text             = "N/A";
         SdLabel.Text              = "N/A";
         TotalSharesLabel.Text     = "N/A";
         IncorrectSharesLabel.Text = "N/A";
         SharesPerHourLabel.Text   = "N/A";
         FulfillmentLabel.Text     = "N/A";
     }
 }
                public void IdentifyGPUs()
                {
                    try
                    {
                        //splot onto many lines
                        string[] result  = Regex.Split(m_fullLog, "\r\n|\r|\n");
                        string   pattern = @"(GPU)(.){2,12}(recognized as)(.)*";

                        foreach (string item in result)
                        {
                            Match  r        = Regex.Match(item, pattern);
                            string gpu_id   = "";
                            string gpu_name = "";
                            if (r.Success)
                            {
                                m_identified     = true;
                                m_reReadGpunames = false;//we dont need to read until told

                                string value = r.Value;
                                //ideally i would have used this to find and then separate the gpu number
                                //string pattern_gpuid = @"(#).";

                                //but the following site explains a way to get string affter the match using "positive lookbehind assertion
                                //https://stackoverflow.com/questions/5006716/getting-the-text-that-follows-after-the-regex-match

                                string pattern_gpuid = @"(?<=#).";
                                Match  r_gpu_id      = Regex.Match(value, pattern_gpuid);
                                if (r_gpu_id.Success)
                                {
                                    gpu_id = r_gpu_id.Value;
                                }

                                string pattern_gpuname = @"(?<=recognized as).*";
                                Match  r_gpu_name      = Regex.Match(value, pattern_gpuname);
                                if (r_gpu_name.Success)
                                {
                                    gpu_name = r_gpu_name.Value;
                                }
                                if (!string.IsNullOrEmpty(gpu_id) && !string.IsNullOrEmpty(gpu_name))
                                {
                                    //check if there is an item alredy
                                    object oldItem = m_Gpus[gpu_id];
                                    if (oldItem == null)
                                    {
                                        GpuData gpu = new GpuData(gpu_name);
                                        gpu.IdentifyMake();
                                        m_Gpus[gpu_id] = gpu;
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception)
                    {
                        Succeeded = false;
                        throw;
                    }
                }
示例#9
0
                public bool Parse(object obj)
                {
                    Succeeded     = false;
                    m_CgminerData = obj as CGMinerCommandOutputs;
                    try
                    {
                        if (m_CgminerData == null)
                        {
                            return(false);
                        }
                        m_MinerResult      = new MinerDataResult();
                        m_MinerResult.GPUs = new List <GpuData>();
                        try
                        {
                            string content = m_CgminerData.Summary.Replace(" ", "");
                            Logger.Instance.LogInfo("CGMiner summary: " + content);

                            content = content.Substring(0, content.Length - 1);
                            SummaryRoot minerResult = (SummaryRoot) new JavaScriptSerializer().Deserialize(content, typeof(SummaryRoot));
                            m_MinerResult.TotalHashrate  = (int)minerResult.SUMMARY[0].MHS5s;
                            m_MinerResult.TotalHashrate *= 1000;
                            m_MinerResult.TotalShares    = (int)minerResult.SUMMARY[0].Accepted;
                            m_MinerResult.Rejected       = (int)minerResult.SUMMARY[0].Rejected;
                            Logger.Instance.LogInfo("CCMiner TotalHashrate: " + m_MinerResult.TotalHashrate.ToString());
                        }
                        catch (Exception e)
                        {
                        }
                        //now read gpus from dev

                        try
                        {
                            string content = m_CgminerData.Devs.Replace(" ", "");
                            content = content.Substring(0, content.Length - 1);

                            RootObject minerResult = (RootObject) new JavaScriptSerializer().Deserialize(content, typeof(RootObject));
                            foreach (DEV item in minerResult.DEVS)
                            {
                                GpuData gpu = new GpuData("AMD GPU " + item.GPU.ToString()); //Todo: finfing the name has proven difficult
                                gpu.Make        = CardMake.Amd;
                                gpu.Hashrate    = (item.MHS5s * 1000).ToString();            //convert to Khs
                                gpu.Temperature = item.Temperature.ToString() + "C";
                                m_MinerResult.GPUs.Add(gpu);
                                Logger.Instance.LogInfo("GPU " + gpu.Hashrate.ToString());
                            }
                        }
                        catch (Exception e)
                        {
                        }
                        m_CgminerData.MinerDataResult = m_MinerResult;
                        return(true);
                    }
                    catch (Exception e)
                    {
                        Succeeded = false;
                    }
                    return(false);
                }
示例#10
0
        private void ObjectListGpus_SelectionChanged(object sender, EventArgs e)
        {
            GpuData gpu = (GpuData)ObjectListGpus.SelectedObject;

            if (gpu != null)
            {
                GpuSelected?.Invoke(this, new EventArgs <int>(gpu.Index));
            }
        }
示例#11
0
        private string GpuNameGetter(object rowObject)
        {
            GpuData gpu = rowObject as GpuData;

            if (gpu.NickName != null && gpu.NickName != "" && gpu.NickName != string.Empty)
            {
                return(gpu.NickName);
            }
            return(gpu.Name);
        }
示例#12
0
 private void ObjectListGpus_MouseClick(object sender, MouseEventArgs e)
 {
     if (e.Button == MouseButtons.Right)
     {
         GpuData          clickeGpu = ObjectListGpus.SelectedObject as GpuData;
         ContextMenuStrip menu      = new ContextMenuStrip();
         menu.RenderMode = ToolStripRenderMode.ManagerRenderMode;
         menu.Renderer   = new MenuStripCustomRenderer();
         menu.Items.Add(new ToolStripMenuItem("Set Nickname", null, (s, ea) => { ObjectListGpus.EditSubItem(ObjectListGpus.SelectedItem, 1); }, "Rename"));
         Point cursorPos = System.Windows.Forms.Cursor.Position;
         Point menuPos   = new Point(cursorPos.X - menu.Width / 2, cursorPos.Y);
         menu.Show(menuPos);
     }
 }
                public void ComputeGPUData()
                {
                    try
                    {
                        m_MinerResult.GPUs = new List <GpuData>();
                        string   hashCombined = m_MinerResult.result[3];
                        string[] hashrates    = hashCombined.Split(';');

                        string   fanTemp    = m_MinerResult.result[6];
                        string[] fanTempArr = fanTemp.Split(';');
                        if (hashrates != null && hashrates.Length > 0)
                        {
                            int j      = 0;
                            int gpu_id = 0;
                            foreach (string item in hashrates)
                            {
                                GpuData gpu       = null;
                                string  gpu_idstr = gpu_id.ToString();
                                gpu = m_Gpus[gpu_idstr] as GpuData;
                                if (gpu == null)
                                {
                                    gpu = new GpuData("CPU " + (gpu_id + 1).ToString());
                                }

                                gpu.Hashrate = item;
                                gpu.Make     = CardMake.CPU;
                                if (j < fanTempArr.Length)
                                {
                                    gpu.Temperature = fanTempArr[j] + "C";
                                    gpu.FanSpeed    = fanTempArr[j + 1] + "%";
                                }
                                else
                                {
                                    gpu.Temperature = "0C";
                                    gpu.FanSpeed    = "0%";
                                }

                                j += 2;
                                gpu_id++;
                                m_MinerResult.GPUs.Add(gpu);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Succeeded = false;
                        throw;
                    }
                }
示例#14
0
        private bool ColorRender(EventArgs e, Graphics g, Rectangle r, Object rowObject)
        {
            GpuData gpu   = rowObject as GpuData;
            Color   color = ThemeColors.PresetColors[gpu.Index];

            if (ObjectListGpus.SelectedObject == rowObject)
            {
                g.Clear(ObjectListGpus.Focused ? ObjectListGpus.SelectedBackColor : ObjectListGpus.UnfocusedSelectedBackColor);
            }
            else
            {
                g.Clear(ObjectListGpus.BackColor);
            }

            g.FillRectangle(new SolidBrush(color), r.X + 2, r.Y + 2, r.Width - 5, r.Height - 5);

            return(true);
        }
示例#15
0
 public GpuView(GpuData data, MinerInfoSummary parent)
 {
     GpuData  = data;
     m_Parent = parent;
     InitializeComponent();
 }
示例#16
0
        public GpuDetailPanel()
        {
            InitializeComponent();

            BackColor = ThemeColors.WindowContentBackgroundDarkTheme;
            ForeColor = ThemeColors.WindowContentForegroundDarkTheme;

            //Jus Some Color Games
            ObjectListGpus.BackColor                  = BackColor;
            ObjectListGpus.ForeColor                  = ForeColor;
            ObjectListGpus.SelectedBackColor          = ThemeColors.UnfocusedSelectedBackgroundColor;
            ObjectListGpus.UnfocusedSelectedBackColor = ThemeColors.UnfocusedSelectedBackgroundColor;
            ObjectListGpus.UnfocusedSelectedForeColor = ObjectListGpus.ForeColor;


            //Setting ObjectListView Aspect Handlers
            ColumnColor.AspectToStringConverter = (obj) => { return(" "); };
            ColumnColor.RendererDelegate        = ColorRender;
            ColumnBrand.ImageGetter             = (obj) => { return((obj as GpuData).Manufacturer.ToString().ToLower() + "_full.png"); };
            ColumnName.AspectPutter             = delegate(object gpu, object newValue) { GpuData gData = gpu as GpuData; gData.NickName = newValue.ToString(); GpuRenamed?.Invoke(this, new EventArgs <int>(gData.Index)); };

            //AspectGetter for Nullable Fields. It shows "N/A" instead of just being empty
            ColumnCClock.AspectToStringConverter = NullFieldAspectGetter;
            ColumnMClock.AspectToStringConverter = NullFieldAspectGetter;
            ColumnMvddc.AspectToStringConverter  = NullFieldAspectGetter;
            ColumnCvddc.AspectToStringConverter  = NullFieldAspectGetter;
            ColumnPowLim.AspectToStringConverter = NullFieldAspectGetter;
            ColumnTT.AspectToStringConverter     = NullFieldAspectGetter;

            //AspectGetter for fields which are calculated from the data
            ColumnAvgTemp.AspectGetter = (obj) => { return(string.Format("{0:0.00}", (obj as GpuData).AvergaeTemperature)); };
            ColumnAvgHash.AspectGetter = (obj) => { return(string.Format("{0:0.00}", (obj as GpuData).AvergaeHashRate)); };
            ColumnSdHash.AspectGetter  = (obj) => { return(string.Format("{0:0.00}", (obj as GpuData).StdDevHashRate)); };
            ColumnAvgFan.AspectGetter  = (obj) => { return(string.Format("{0:0.00}", (obj as GpuData).AvergaeFanSpeed)); };

            SetColumnHeaderStyles();
        }
        public void GpuSelectedHandler(object sender, EventArgs <int> ea)
        {
            GpuData gpu = Globals.GPUs[ea.Value];

            UpdateValues(gpu);
        }
示例#18
0
        public GpusPanel()
        {
            InitializeComponent();

            BackColor = ThemeColors.WindowContentBackgroundDarkTheme;
            ForeColor = ThemeColors.WindowContentForegroundDarkTheme;

            //Jus Some Color Games
            ObjectListGpus.BackColor                  = BackColor;
            ObjectListGpus.ForeColor                  = ForeColor;
            ObjectListGpus.SelectedBackColor          = ThemeColors.UnfocusedSelectedBackgroundColor;
            ObjectListGpus.UnfocusedSelectedBackColor = ThemeColors.UnfocusedSelectedBackgroundColor;
            ObjectListGpus.UnfocusedSelectedForeColor = ObjectListGpus.ForeColor;

            //Setting ObjectListView Aspect Handlers
            ColumnColor.AspectToStringConverter = (obj) => { return(" "); };
            ColumnColor.RendererDelegate        = ColorRender;
            ColumnName.AspectGetter             = GpuNameGetter;
            ColumnName.AspectPutter             = delegate(object gpu, object newValue) { GpuData gData = gpu as GpuData; gData.NickName = newValue.ToString(); GpuRenamed?.Invoke(this, new EventArgs <int>(gData.Index)); };

            //Wiring Events
            ObjectListGpus.ItemDrag         += ObjectListGpus_ItemDrag;
            ObjectListGpus.GiveFeedback     += ObjectListGpus_GiveFeedback;
            ObjectListGpus.SelectionChanged += ObjectListGpus_SelectionChanged;
            ObjectListGpus.MouseClick       += ObjectListGpus_MouseClick;
        }
示例#19
0
        public GpuData CreateTerrainMesh(Bitmap[,] surroundingHeightmaps, float heightScale = 1f)
        {
            if (surroundingHeightmaps.GetLength(0) != 3 ||
                surroundingHeightmaps.GetLength(1) != 3)
            {
                throw new Exception("Expected input bitmaps set to be of shape 3 by 3");
            }

            var imageWidth  = surroundingHeightmaps[1, 1].Width;
            var imageHeight = surroundingHeightmaps[1, 1].Height;
            var meshWidth   = imageWidth + 1;
            var meshHeight  = imageHeight + 1;

            var indexBufferBuilder  = new IndexBufferBuilder <ushort>(3 * 2 * imageHeight * imageWidth);
            var vertexBufferBuilder = new VertexBufferBuilder <VertexPositionNormalTexture>(meshWidth * meshHeight);

            var random = new Random();

            // Define sample function.
            float Sample(int coordinateX, int coordinateZ)
            {
                var surroundingIndexX = 1;
                var surroundingIndexZ = 1;

                if (coordinateX < 0)
                {
                    coordinateX      += imageWidth;
                    surroundingIndexX = 0;
                }
                if (coordinateZ < 0)
                {
                    coordinateZ      += 1;
                    surroundingIndexX = 0;
                }
                if (coordinateX >= imageWidth)
                {
                    coordinateX      -= imageWidth;
                    surroundingIndexX = 2;
                }
                if (coordinateZ >= imageHeight)
                {
                    coordinateZ      -= imageHeight;
                    surroundingIndexZ = 2;
                }
                return((float)surroundingHeightmaps[surroundingIndexX, surroundingIndexZ]
                       .GetPixel(coordinateX, coordinateZ).A *heightScale);
            }

            // Build vertices.
            var debugIndex = 0;

            for (var x = 0; x < meshWidth; x++)
            {
                for (var z = 0; z < meshHeight; z++)
                {
                    var rx = (x / (float)(meshWidth - 1));
                    var rz = (z / (float)(meshHeight - 1));

                    // v0_0 ◀---▶ v1_0
                    //  ▲            ▲
                    //  |      x     |
                    //  ▼            ▼
                    // v0_1 ◀---▶ v1_1

                    var v0_0 = Sample(x, z);
                    var v0_1 = Sample(x, z + 1);
                    var v1_0 = Sample(x + 1, z);
                    var v1_1 = Sample(x + 1, z + 1);

                    // Sample the height as the average of the four surrounding pixels.
                    var height = (v0_0 + v0_1 + v1_0 + v1_1) / 4f;

                    var wz = 1;
                    var wx = 0;
                    var wy = v0_1 - v0_0;
                    var vx = 1;
                    var vz = 0;
                    var vy = v1_0 - v0_0;

                    var normal_x = (vy * wz) - (vz * wy);
                    var normal_y = (vz * wx) - (vx * wz);
                    var normal_z = (vx * wy) - (vy * wx);

                    var normal = new Vector3(normal_x, normal_y, normal_z);
                    if (normal.Y < 0)
                    {
                        normal = -normal;
                    }
                    normal.Normalize();

                    //Console.WriteLine($"index: {debugIndex} - rx: {rx}   rz: {rz}");
                    debugIndex++;
                    vertexBufferBuilder.AddNext(
                        new VertexPositionNormalTexture(
                            new Vector3(rx, height, rz),
                            normal,
                            new Vector2(rx, rz)
                            )
                        );
                }
            }

            ushort GetVertexIndex(int x, int z)
            {
                return((ushort)(x + z * meshWidth));
            }

            for (var x = 0; x < imageWidth; x++)
            {
                for (var z = 0; z < imageHeight; z++)
                {
                    var i0_0 = GetVertexIndex(x, z);
                    var i1_0 = GetVertexIndex(x + 1, z);

                    var i0_1 = GetVertexIndex(x, z + 1);
                    var i1_1 = GetVertexIndex(x + 1, z + 1);

                    //Console.WriteLine($"tri {i0_0} {i1_0} {i0_1}");
                    //Console.WriteLine($"tri {i1_0} {i1_1} {i0_1}");

                    indexBufferBuilder
                    .AddNext(i0_0, i0_1, i1_0)
                    .AddNext(i1_0, i0_1, i1_1);
                }
            }

            return(GpuData.Create(indexBufferBuilder, vertexBufferBuilder, GraphicsDevice));
        }
示例#20
0
                public bool Parse(object obj)
                {
                    Succeeded     = false;
                    m_CCMinerData = obj as CCMinerCommandOutputs;
                    try
                    {
                        if (m_CCMinerData == null)
                        {
                            return(false);
                        }
                        m_MinerResult      = new MinerDataResult();
                        m_MinerResult.GPUs = new List <GpuData>();
                        try
                        {
                            string content = m_CCMinerData.Summary;
                            Logger.Instance.LogInfo("CCMiner summary: " + content);
                            string[] a = content.Split(new string[] { ";" }, StringSplitOptions.None);
                            foreach (string item in a)
                            {
                                if (item.Contains("KHS"))
                                {
                                    string[] values = item.Split(new string[] { "=" }, StringSplitOptions.None);
                                    string   kh     = values[1];
                                    double   kh_d   = double.Parse(kh);
                                    //kh_d /= 1024;
                                    m_MinerResult.TotalHashrate = (int)kh_d;
                                    Logger.Instance.LogInfo("CCMiner Hashrate: " + m_MinerResult.TotalHashrate.ToString());
                                }
                                else if (item.Contains("ACC"))
                                {
                                    string[] values = item.Split(new string[] { "=" }, StringSplitOptions.None);
                                    string   acc    = values[1];
                                    int      acc_i  = int.Parse(acc);
                                    m_MinerResult.TotalShares = acc_i;
                                }
                                else if (item.Contains("REJ"))
                                {
                                    string[] values = item.Split(new string[] { "=" }, StringSplitOptions.None);
                                    string   rej    = values[1];
                                    int      rej_i  = int.Parse(rej);
                                    m_MinerResult.Rejected = rej_i;
                                }
                            }
                        }
                        catch (Exception e)
                        {
                        }
                        //now read gpus from dev
                        try
                        {
                            string content = m_CCMinerData.Threads;
                            Logger.Instance.LogInfo("CCMiner Threads: " + content);

                            string[] b = content.Split(new string[] { "|" }, StringSplitOptions.None);

                            foreach (var ice in b)
                            {
                                bool    add = false;
                                GpuData gpu = new GpuData("");//Todo: finfing the name has proven difficult
                                gpu.Make = CardMake.Nvidia;
                                //m_MinerResult.GPUs.Add(gpu);
                                string[] a = ice.Split(new string[] { ";" }, StringSplitOptions.None);
                                foreach (string item in a)
                                {
                                    if (item.Contains("CARD"))
                                    {
                                        string[] values = item.Split(new string[] { "=" }, StringSplitOptions.None);
                                        gpu.GPUName = values[1];
                                    }
                                    if (item.Contains("FAN"))
                                    {
                                        string[] values = item.Split(new string[] { "=" }, StringSplitOptions.None);
                                        gpu.FanSpeed = values[1];
                                    }
                                    if (item.Contains("TEMP"))
                                    {
                                        string[] values = item.Split(new string[] { "=" }, StringSplitOptions.None);
                                        gpu.Temperature = values[1];
                                    }
                                    if (item.Contains("KHS"))
                                    {
                                        string[] values = item.Split(new string[] { "=" }, StringSplitOptions.None);
                                        string   kh     = values[1];
                                        double   kh_d   = double.Parse(kh);
                                        //kh_d /= 1024;
                                        gpu.Hashrate = kh_d.ToString();
                                        add          = true;
                                        Logger.Instance.LogInfo("CCMiner Hashrate: " + gpu.Hashrate.ToString());
                                    }
                                }
                                if (add)
                                {
                                    m_MinerResult.GPUs.Add(gpu);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                        }
                        m_CCMinerData.MinerDataResult = m_MinerResult;
                        return(true);
                    }
                    catch (Exception e)
                    {
                        Succeeded = false;
                    }
                    return(false);
                }