1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Reflection;
5
using System.Text;
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;
11
12
namespace SharpDisplayManager
13
{
14
[DataContract]
15
[Ear.AttributeObject(Id = "Event.Hid", Name = "HID", Description = "Corresponding HID message received.")]
16
public class EventHid: Ear.Event
17
18
public EventHid()
19
20
}
21
22
[DataMember]
23
public ushort UsagePage { get; set; }
24
25
26
public ushort UsageCollection { get; set; }
27
28
29
public ushort Usage { get; set; }
30
31
32
public Keys Key { get; set; }
33
34
35
[Ear.AttributeObjectProperty
36
(
37
Id = "HID.Keyboard.IsKeyUp",
38
Name = "Key Up",
39
Description = "Key up if set, key down otherwise."
40
)]
41
public bool IsKeyUp { get; set; } = false;
42
43
44
public bool IsMouse { get; set; } = false;
45
46
47
public bool IsKeyboard { get; set; } = false;
48
49
50
public bool IsGeneric { get; set; } = false;
51
52
53
public bool HasModifierShift { get; set; } = false;
54
55
56
public bool HasModifierControl { get; set; } = false;
57
58
59
public bool HasModifierAlt { get; set; } = false;
60
61
62
public bool HasModifierWindows { get; set; } = false;
63
64
65
public string PersistedBrief { get; set; } = "Press a key";
66
67
68
69
protected override void DoConstruct()
70
71
base.DoConstruct();
72
UpdateDynamicProperties();
73
74
75
private void UpdateDynamicProperties()
76
77
78
79
80
/// <summary>
81
/// Make sure we distinguish between various configuration of this event
82
/// </summary>
83
/// <returns></returns>
84
public override string Brief()
85
86
string brief = Name + ": ";
87
88
if (IsKeyboard)
89
90
brief += Key.ToString();
91
92
if (HasModifierAlt)
93
94
brief += " + ALT";
95
96
97
if (HasModifierControl)
98
99
brief += " + CTRL";
100
101
102
if (HasModifierShift)
103
104
brief += " + SHIFT";
105
106
107
if (HasModifierWindows)
108
109
brief += " + WIN";
110
111
112
else if (IsGeneric)
113
114
brief += PersistedBrief;
115
116
117
if (IsKeyUp)
118
119
brief += " (UP)";
120
121
else
122
123
brief += " (DOWN)";
124
125
126
return brief;
127
128
129
130
///
131
132
/// <param name="obj"></param>
133
134
public override bool Equals(object obj)
135
136
if (obj is EventHidKeyboard)
137
138
EventHidKeyboard e = (EventHidKeyboard)obj;
139
return e.Key == Key
140
&& e.IsKeyUp == IsKeyUp
141
&& e.HasModifierAlt == HasModifierAlt
142
&& e.HasModifierControl == HasModifierControl
143
&& e.HasModifierShift == HasModifierShift
144
&& e.HasModifierWindows == HasModifierWindows;
145
146
147
return false;
148
149
150
151
152
153
154
protected override void OnStateLeave()
155
156
if (CurrentState == State.Edit)
157
158
// Leaving edit mode
159
// Unhook HID events
160
Program.HidHandler.OnHidEvent -= HandleHidEvent;
161
162
163
164
165
166
167
168
protected override void OnStateEnter()
169
170
171
172
// Enter edit mode
173
// Hook-in HID events
174
Program.HidHandler.OnHidEvent += HandleHidEvent;
175
176
177
178
179
180
/// Here we receive HID events from our HID library.
181
182
/// <param name="aSender"></param>
183
/// <param name="aHidEvent"></param>
184
public void HandleHidEvent(object aSender, SharpLib.Hid.Event aHidEvent)
185
186
if (CurrentState != State.Edit
187
|| aHidEvent.IsMouse
188
|| aHidEvent.IsButtonUp
189
|| !aHidEvent.IsValid
190
|| aHidEvent.IsBackground
191
|| aHidEvent.IsRepeat
192
|| aHidEvent.IsStray)
193
194
return;
195
196
197
PrivateCopy(aHidEvent);
198
//
199
200
//Tell observer the object itself changed
201
OnPropertyChanged("Brief");
202
203
204
205
206
207
208
public void Copy(Hid.Event aHidEvent)
209
210
211
//We need the key up/down too here
212
IsKeyUp = aHidEvent.IsButtonUp;
213
214
215
216
217
218
219
private void PrivateCopy(Hid.Event aHidEvent)
220
221
//Copy for scan
222
UsagePage = aHidEvent.UsagePage;
223
UsageCollection = aHidEvent.UsageCollection;
224
IsGeneric = aHidEvent.IsGeneric;
225
IsKeyboard = aHidEvent.IsKeyboard;
226
IsMouse = aHidEvent.IsMouse;
227
228
if (IsGeneric)
229
230
if (aHidEvent.Usages.Count > 0)
231
232
Usage = aHidEvent.Usages[0];
233
PersistedBrief = aHidEvent.UsageName(0);
234
235
236
Key = Keys.None;
237
HasModifierAlt = false;
238
HasModifierControl = false;
239
HasModifierShift = false;
240
HasModifierWindows = false;
241
242
else if (IsKeyboard)
243
244
Usage = 0;
245
Key = aHidEvent.VirtualKey;
246
HasModifierAlt = aHidEvent.HasModifierAlt;
247
HasModifierControl = aHidEvent.HasModifierControl;
248
HasModifierShift = aHidEvent.HasModifierShift;
249
HasModifierWindows = aHidEvent.HasModifierWindows;
250
251
252
253
254
255
256