summary refs log tree commit diff
path: root/lib/lufa/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/lufa/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.cs')
-rw-r--r--lib/lufa/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.cs115
1 files changed, 115 insertions, 0 deletions
diff --git a/lib/lufa/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.cs b/lib/lufa/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.cs
new file mode 100644
index 0000000000..32543fc59b
--- /dev/null
+++ b/lib/lufa/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.cs
@@ -0,0 +1,115 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using Microsoft.Win32;
+
+namespace CPUMonitor
+{
+    public partial class frmCPU : Form
+    {
+        private RegistryKey AppRegKey;
+
+        private const int LIGHT_MAX = 0x1F;
+
+        public frmCPU()
+        {
+            InitializeComponent();
+
+            nicoNotifyIcon.Icon = this.Icon;
+            nicoNotifyIcon.MouseClick += new MouseEventHandler(TrayIconClick);        
+        }
+
+        private void Form1_Load(object sender, EventArgs e)
+        {
+            AppRegKey = Registry.CurrentUser.CreateSubKey("Software\\CPUMonitor");
+
+            String[] PortNames = System.IO.Ports.SerialPort.GetPortNames();
+            Array.Sort<String>(PortNames, delegate(string strA, string strB) { return int.Parse(strA.Substring(3)).CompareTo(int.Parse(strB.Substring(3))); });
+            cmbComPort.Items.Clear();
+            cmbComPort.Items.AddRange(PortNames);
+
+            cmbComPort.SelectedIndex = System.Convert.ToInt32(AppRegKey.GetValue("Port", "1")) - 1;
+            serSerialPort.PortName = cmbComPort.Text;
+
+            Hide();
+        }
+
+        private void NotifyLight(int Red, int Green, int Blue)
+        {
+            byte[] buffer = new byte[3];
+            buffer[0] = (byte)(0x80 | (Red & LIGHT_MAX));
+            buffer[1] = (byte)(0x40 | (Green & LIGHT_MAX));
+            buffer[2] = (byte)(0x20 | (Blue & LIGHT_MAX));
+
+            try
+            {
+                serSerialPort.PortName = cmbComPort.Text;
+                serSerialPort.Open();
+                serSerialPort.Write(buffer, 0, buffer.Length);
+                serSerialPort.Close();
+            }
+            catch (Exception e)
+            {
+
+            }
+        }
+
+        private void tmrCPUTimer_Tick(object sender, EventArgs e)
+        {
+            float CPUUsage = pcCPUUsage.NextValue();
+
+            int Red = 0;
+            int Green = 0;
+            int Blue = 0;
+
+            if (CPUUsage < 25)
+            {
+                Green = (int)((LIGHT_MAX / 25) * CPUUsage);
+            }
+            else if (CPUUsage < 50)
+            {
+                Blue = (int)((LIGHT_MAX / 25) * (CPUUsage - 25));
+                Green = LIGHT_MAX - Blue;
+            }
+            else if (CPUUsage < 75)
+            {
+                Red = (int)((LIGHT_MAX / 25) * (CPUUsage - 50));
+                Blue = LIGHT_MAX - Red;
+            }
+            else
+            {
+                Red = LIGHT_MAX;
+            }
+
+            NotifyLight(Red, Green, Blue);
+            lblCPU.Text = ((int)CPUUsage).ToString() + "%";
+        }
+
+        private void btnExit_Click(object sender, EventArgs e)
+        {
+            Application.Exit();
+        }
+
+        private void btnMinimizeToTray_Click(object sender, EventArgs e)
+        {
+            this.Hide();
+        }
+
+        private void TrayIconClick(object sender, MouseEventArgs e)
+        {
+            this.Show();
+            this.WindowState = FormWindowState.Normal;
+        }
+
+        private void cbPort_SelectedIndexChanged(object sender, EventArgs e)
+        {
+            AppRegKey.SetValue("Port", cmbComPort.SelectedIndex + 1);
+            serSerialPort.PortName = cmbComPort.Text;
+        }
+    }
+}