Ear HID event now functional.
2 using System.Collections.Generic;
4 using System.Reflection;
6 using System.Threading.Tasks;
7 using System.Runtime.Serialization;
8 using System.Windows.Forms;
9 using Ear = SharpLib.Ear;
10 using Hid = SharpLib.Hid;
12 namespace SharpDisplayManager
15 [Ear.AttributeObject(Id = "Event.Hid", Name = "HID", Description = "Handle input from Keyboards and Remotes.")]
16 public class EventHid: Ear.Event
23 public ushort UsagePage { get; set; }
26 public ushort UsageCollection { get; set; }
29 public ushort Usage { get; set; }
32 public Keys Key { get; set; }
35 [Ear.AttributeObjectProperty
37 Id = "HID.Keyboard.IsKeyUp",
39 Description = "Key up if set, key down otherwise."
41 public bool IsKeyUp { get; set; } = false;
44 public bool IsMouse { get; set; } = false;
47 public bool IsKeyboard { get; set; } = false;
50 public bool IsGeneric { get; set; } = false;
53 public bool HasModifierShift { get; set; } = false;
56 public bool HasModifierControl { get; set; } = false;
59 public bool HasModifierAlt { get; set; } = false;
62 public bool HasModifierWindows { get; set; } = false;
65 public string UsageName { get; set; } = "Press a key";
69 protected override void DoConstruct()
72 UpdateDynamicProperties();
75 private void UpdateDynamicProperties()
81 /// Make sure we distinguish between various configuration of this event
83 /// <returns></returns>
84 public override string Brief()
86 string brief = Name + ": ";
90 brief += Key.ToString();
97 if (HasModifierControl)
102 if (HasModifierShift)
107 if (HasModifierWindows)
132 /// <param name="obj"></param>
133 /// <returns></returns>
134 public override bool Equals(object obj)
138 EventHid e = (EventHid)obj;
141 && e.UsagePage == UsagePage
142 && e.UsageCollection == UsageCollection
143 && e.IsKeyUp == IsKeyUp
144 && e.IsGeneric == IsGeneric
145 && e.IsKeyboard == IsKeyboard
146 && e.IsMouse == IsMouse
147 && e.HasModifierAlt == HasModifierAlt
148 && e.HasModifierControl == HasModifierControl
149 && e.HasModifierShift == HasModifierShift
150 && e.HasModifierWindows == HasModifierWindows;
160 protected override void OnStateLeave()
162 if (CurrentState == State.Edit)
166 Program.HidHandler.OnHidEvent -= HandleHidEvent;
174 protected override void OnStateEnter()
176 if (CurrentState == State.Edit)
179 // Hook-in HID events
180 Program.HidHandler.OnHidEvent += HandleHidEvent;
186 /// Here we receive HID events from our HID library.
188 /// <param name="aSender"></param>
189 /// <param name="aHidEvent"></param>
190 public void HandleHidEvent(object aSender, SharpLib.Hid.Event aHidEvent)
192 if (CurrentState != State.Edit
194 || aHidEvent.IsButtonUp
195 || !aHidEvent.IsValid
196 || aHidEvent.IsBackground
197 || aHidEvent.IsRepeat
198 || aHidEvent.IsStray)
203 PrivateCopy(aHidEvent);
206 //Tell observer the object itself changed
207 OnPropertyChanged("Brief");
213 /// <param name="aHidEvent"></param>
214 public void Copy(Hid.Event aHidEvent)
216 PrivateCopy(aHidEvent);
217 //We need the key up/down too here
218 IsKeyUp = aHidEvent.IsButtonUp;
224 /// <param name="aHidEvent"></param>
225 private void PrivateCopy(Hid.Event aHidEvent)
228 UsagePage = aHidEvent.UsagePage;
229 UsageCollection = aHidEvent.UsageCollection;
230 IsGeneric = aHidEvent.IsGeneric;
231 IsKeyboard = aHidEvent.IsKeyboard;
232 IsMouse = aHidEvent.IsMouse;
236 if (aHidEvent.Usages.Count > 0)
238 Usage = aHidEvent.Usages[0];
239 UsageName = aHidEvent.UsageName(0);
243 HasModifierAlt = false;
244 HasModifierControl = false;
245 HasModifierShift = false;
246 HasModifierWindows = false;
251 Key = aHidEvent.VirtualKey;
252 HasModifierAlt = aHidEvent.HasModifierAlt;
253 HasModifierControl = aHidEvent.HasModifierControl;
254 HasModifierShift = aHidEvent.HasModifierShift;
255 HasModifierWindows = aHidEvent.HasModifierWindows;
263 /// <returns></returns>
264 public override bool IsValid()
266 return IsGeneric || IsKeyboard;