HidDevice now supports capabilities and button capabilities.
3 using System.Collections;
4 using System.ComponentModel;
5 using System.Windows.Forms;
7 using Devices.RemoteControl;
9 namespace RemoteControlSample
12 /// Summary description for Form1.
14 public class MainForm : System.Windows.Forms.Form
17 /// Required designer variable.
19 private System.ComponentModel.Container components = null;
20 private RemoteControlDevice _remote;
21 private Label labelButtonName;
22 private Label labelDeviceName;
23 private ListView listViewEvents;
24 private ColumnHeader columnHeaderUsages;
25 private ColumnHeader columnHeaderUsagePage;
26 private ColumnHeader columnHeaderUsageCollection;
27 private ColumnHeader columnHeaderRepeat;
28 private ColumnHeader columnHeaderTime;
29 private Button buttonClear;
30 private ColumnHeader columnHeaderInputReport;
33 public delegate void OnHidEventDelegate(object aSender, Hid.HidEvent aHidEvent);
38 // Required for Windows Form Designer support
40 InitializeComponent();
43 _timer.Interval = 3000;
44 _timer.Enabled = false;
45 _timer.Tick +=new EventHandler(_timer_Tick);
49 /// Clean up any resources being used.
51 protected override void Dispose( bool disposing )
55 if (components != null)
60 base.Dispose( disposing );
63 #region Windows Form Designer generated code
65 /// Required method for Designer support - do not modify
66 /// the contents of this method with the code editor.
68 private void InitializeComponent()
70 this.labelButtonName = new System.Windows.Forms.Label();
71 this.labelDeviceName = new System.Windows.Forms.Label();
72 this.listViewEvents = new System.Windows.Forms.ListView();
73 this.columnHeaderUsages = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
74 this.columnHeaderUsagePage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
75 this.columnHeaderUsageCollection = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
76 this.columnHeaderRepeat = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
77 this.columnHeaderTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
78 this.buttonClear = new System.Windows.Forms.Button();
79 this.columnHeaderInputReport = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
84 this.labelButtonName.AutoSize = true;
85 this.labelButtonName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
86 this.labelButtonName.Location = new System.Drawing.Point(811, 55);
87 this.labelButtonName.Name = "labelButtonName";
88 this.labelButtonName.Size = new System.Drawing.Size(103, 20);
89 this.labelButtonName.TabIndex = 0;
90 this.labelButtonName.Text = "Button Name";
94 this.labelDeviceName.AutoSize = true;
95 this.labelDeviceName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
96 this.labelDeviceName.Location = new System.Drawing.Point(811, 35);
97 this.labelDeviceName.Name = "labelDeviceName";
98 this.labelDeviceName.Size = new System.Drawing.Size(103, 20);
99 this.labelDeviceName.TabIndex = 1;
100 this.labelDeviceName.Text = "Device Name";
104 this.listViewEvents.Alignment = System.Windows.Forms.ListViewAlignment.Left;
105 this.listViewEvents.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
106 | System.Windows.Forms.AnchorStyles.Left)));
107 this.listViewEvents.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
108 this.listViewEvents.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
109 this.columnHeaderUsages,
110 this.columnHeaderInputReport,
111 this.columnHeaderUsagePage,
112 this.columnHeaderUsageCollection,
113 this.columnHeaderRepeat,
114 this.columnHeaderTime});
115 this.listViewEvents.GridLines = true;
116 this.listViewEvents.Location = new System.Drawing.Point(12, 12);
117 this.listViewEvents.Name = "listViewEvents";
118 this.listViewEvents.Size = new System.Drawing.Size(766, 369);
119 this.listViewEvents.TabIndex = 2;
120 this.listViewEvents.UseCompatibleStateImageBehavior = false;
121 this.listViewEvents.View = System.Windows.Forms.View.Details;
123 // columnHeaderUsages
125 this.columnHeaderUsages.Text = "Usages";
126 this.columnHeaderUsages.Width = 180;
128 // columnHeaderUsagePage
130 this.columnHeaderUsagePage.Text = "Usage Page";
131 this.columnHeaderUsagePage.Width = 87;
133 // columnHeaderUsageCollection
135 this.columnHeaderUsageCollection.Text = "Usage Collection";
136 this.columnHeaderUsageCollection.Width = 134;
138 // columnHeaderRepeat
140 this.columnHeaderRepeat.Text = "Repeat";
141 this.columnHeaderRepeat.Width = 68;
145 this.columnHeaderTime.Text = "Time";
146 this.columnHeaderTime.Width = 76;
150 this.buttonClear.Location = new System.Drawing.Point(839, 9);
151 this.buttonClear.Name = "buttonClear";
152 this.buttonClear.Size = new System.Drawing.Size(75, 23);
153 this.buttonClear.TabIndex = 3;
154 this.buttonClear.Text = "Clear";
155 this.buttonClear.UseVisualStyleBackColor = true;
156 this.buttonClear.Click += new System.EventHandler(this.buttonClear_Click);
158 // columnHeaderInputReport
160 this.columnHeaderInputReport.Text = "Input Report";
161 this.columnHeaderInputReport.Width = 176;
165 this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
166 this.BackColor = System.Drawing.SystemColors.Control;
167 this.ClientSize = new System.Drawing.Size(926, 393);
168 this.Controls.Add(this.buttonClear);
169 this.Controls.Add(this.listViewEvents);
170 this.Controls.Add(this.labelDeviceName);
171 this.Controls.Add(this.labelButtonName);
172 this.Name = "MainForm";
173 this.Text = "Remote Control Sample";
174 this.Load += new System.EventHandler(this.Form1_Load);
175 this.ResumeLayout(false);
176 this.PerformLayout();
179 #endregion Windows Form Designer generated code
182 /// The main entry point for the application.
187 Application.Run(new MainForm());
190 private void Form1_Load(object sender, System.EventArgs e)
192 _remote = new RemoteControlDevice(this.Handle);
193 _remote.ButtonPressed += new Devices.RemoteControl.RemoteControlDevice.RemoteControlDeviceEventHandler(_remote_ButtonPressed);
194 _remote.iHidHandler.OnHidEvent += HandleHidEventThreadSafe;
197 public void HandleHidEventThreadSafe(object aSender, Hid.HidEvent aHidEvent)
199 if (aHidEvent.IsStray)
201 //Stray event just ignore it
205 if (this.InvokeRequired)
207 //Not in the proper thread, invoke ourselves
208 OnHidEventDelegate d = new OnHidEventDelegate(HandleHidEventThreadSafe);
209 this.Invoke(d, new object[] { aSender, aHidEvent });
213 //We are in the proper thread
214 listViewEvents.Items.Insert(0, aHidEvent.ToListViewItem());
218 protected override void WndProc(ref Message message)
222 _remote.ProcessMessage(message);
224 base.WndProc(ref message);
227 private bool _remote_ButtonPressed(object sender, RemoteControlEventArgs e)
229 //Set text from here was disabled because of threading issues
230 //That whole thing should be removed anyway
231 bool processed = false;
232 _timer.Enabled = false;
233 if (e.Button != RemoteControlButton.Unknown)
235 //labelButtonName.Text = e.Button.ToString();
238 else if (e.MceButton != Hid.UsageTables.WindowsMediaCenterRemoteControl.Null)
240 //Display MCE button name
241 //labelButtonName.Text = e.MceButton.ToString();
242 //Check if this is an HP extension
243 if (Enum.IsDefined(typeof(Hid.UsageTables.HpWindowsMediaCenterRemoteControl), (ushort)e.MceButton))
245 //Also display HP button name
246 //labelButtonName.Text += " / HP:" + ((Hid.UsageTables.HpWindowsMediaCenterRemoteControl)e.MceButton).ToString();
251 else if (e.ConsumerControl != Hid.UsageTables.ConsumerControl.Null)
253 //Display consumer control name
254 //labelButtonName.Text = e.ConsumerControl.ToString();
259 //labelButtonName.Text = "Unknown";
261 //labelDeviceName.Text = e.Device.ToString();
262 _timer.Enabled = true;
266 private void _timer_Tick(object sender, EventArgs e)
268 _timer.Enabled = false;
269 labelButtonName.Text = "Ready...";
272 private void buttonClear_Click(object sender, EventArgs e)
274 listViewEvents.Items.Clear();