Adding 'Audio' tab.
Volume indicator of MDM16AA display now working.
Adding server side dependency on NAudio.
It was decided to have a server side dependency so that we could implement
new fields control such as:
* Volume indicator
* Mute indicator
* Spectrum visualizer
* Meter visualizer
* Fancy visualizer
2 using System.Collections.Generic;
5 using System.Threading.Tasks;
7 using System.Runtime.InteropServices;
8 //using System.Runtime.Serialization;
10 namespace SharpDisplayManager
15 /// Provide access to our display hardware through MiniDisplay API.
19 public delegate void OnOpenedHandler(Display aDisplay);
20 public event OnOpenedHandler OnOpened;
22 public delegate void OnClosedHandler(Display aDisplay);
23 public event OnClosedHandler OnClosed;
25 //Our display device handle
29 public static int TypeCount()
31 return MiniDisplayTypeCount();
34 public static string TypeName(TMiniDisplayType aType)
36 IntPtr ptr = MiniDisplayTypeName(aType);
37 string str = Marshal.PtrToStringUni(ptr);
44 iDevice = IntPtr.Zero;
48 public bool Open(TMiniDisplayType aType)
52 //Already open return an error
56 iDevice = MiniDisplayOpen(aType);
58 bool success = iDevice != IntPtr.Zero;
61 //Broadcast opened event
76 //Controversially clearing our screen before closing
77 //Consider moving this up into the UI layer
81 MiniDisplayClose(iDevice);
82 iDevice = IntPtr.Zero;
83 //Broadcast closed event
89 return iDevice != IntPtr.Zero;
94 MiniDisplayClear(iDevice);
99 MiniDisplayFill(iDevice);
102 public void SwapBuffers()
104 MiniDisplaySwapBuffers(iDevice);
107 public int MaxBrightness()
109 return MiniDisplayMaxBrightness(iDevice);
112 public int MinBrightness()
114 return MiniDisplayMinBrightness(iDevice);
117 public void SetBrightness(int aBrightness)
119 if (!IsOpen()) return;
121 MiniDisplaySetBrightness(iDevice, aBrightness);
124 public int WidthInPixels()
126 return MiniDisplayWidthInPixels(iDevice);
129 public int HeightInPixels()
131 return MiniDisplayHeightInPixels(iDevice);
134 public void SetPixel(int aX, int aY, uint aValue)
136 MiniDisplaySetPixel(iDevice,aX,aY,aValue);
139 public void RequestPowerSupplyStatus()
141 MiniDisplayRequest(iDevice, TMiniDisplayRequest.EMiniDisplayRequestPowerSupplyStatus);
144 public void RequestDeviceId()
146 MiniDisplayRequest(iDevice, TMiniDisplayRequest.EMiniDisplayRequestDeviceId);
149 public void RequestFirmwareRevision()
151 MiniDisplayRequest(iDevice, TMiniDisplayRequest.EMiniDisplayRequestFirmwareRevision);
154 public void PowerOn()
156 MiniDisplayPowerOn(iDevice);
159 public void PowerOff()
161 MiniDisplayPowerOff(iDevice);
164 public bool SupportPowerOnOff()
166 return MiniDisplaySupportPowerOnOff(iDevice);
169 public void ShowClock()
171 MiniDisplayShowClock(iDevice);
174 public void HideClock()
176 MiniDisplayHideClock(iDevice);
179 public bool SupportClock()
181 return MiniDisplaySupportClock(iDevice);
184 public bool PowerSupplyStatus()
186 bool res = MiniDisplayPowerSupplyStatus(iDevice);
190 public TMiniDisplayRequest AttemptRequestCompletion()
192 return MiniDisplayAttemptRequestCompletion(iDevice);
195 public TMiniDisplayRequest CurrentRequest()
197 return MiniDisplayCurrentRequest(iDevice);
200 public bool IsRequestPending()
202 return CurrentRequest() != TMiniDisplayRequest.EMiniDisplayRequestNone;
206 public int IconCount(TMiniDisplayIconType aIcon)
208 return MiniDisplayIconCount(iDevice,aIcon);
211 public int IconStatusCount(TMiniDisplayIconType aIcon)
213 return MiniDisplayIconStatusCount(iDevice, aIcon);
216 public void SetIconStatus(TMiniDisplayIconType aIcon, int aIndex, int aStatus)
218 MiniDisplaySetIconStatus(iDevice, aIcon, aIndex, aStatus);
221 public void SetAllIconsStatus(int aStatus)
223 foreach (TMiniDisplayIconType icon in Enum.GetValues(typeof(TMiniDisplayIconType)))
225 int count=IconCount(icon);
226 for (int i = 0; i < count; i++)
228 SetIconStatus(icon,i,aStatus);
236 public string Vendor()
238 IntPtr ptr = MiniDisplayVendor(iDevice);
239 string str = Marshal.PtrToStringUni(ptr);
243 public string Product()
245 IntPtr ptr = MiniDisplayProduct(iDevice);
246 string str = Marshal.PtrToStringUni(ptr);
250 public string SerialNumber()
252 IntPtr ptr = MiniDisplaySerialNumber(iDevice);
253 string str = Marshal.PtrToStringUni(ptr);
257 public string DeviceId()
259 IntPtr ptr = MiniDisplayDeviceId(iDevice);
260 string str = Marshal.PtrToStringAnsi(ptr);
264 public string FirmwareRevision()
266 IntPtr ptr = MiniDisplayFirmwareRevision(iDevice);
267 string str = Marshal.PtrToStringAnsi(ptr);
272 public enum TMiniDisplayType
274 EMiniDisplayAutoDetect, /*Not yet implemented*/
275 //[EnumMember(Value = "EMiniDisplayFutabaGP1212A01")]
276 EMiniDisplayFutabaGP1212A01,
277 //[EnumMember(Value = "EMiniDisplayFutabaGP1212A01")]
278 EMiniDisplayFutabaGP1212A02
284 public enum TMiniDisplayRequest
286 EMiniDisplayRequestNone,
287 EMiniDisplayRequestDeviceId,
288 EMiniDisplayRequestFirmwareRevision,
289 EMiniDisplayRequestPowerSupplyStatus
294 /// Define the various type of icons we support.
295 /// For binary compatibility new entries must be added at the end.
297 public enum TMiniDisplayIconType
299 EMiniDisplayIconNetwork=0,
300 EMiniDisplayIconEmail,
301 EMiniDisplayIconMute,
302 EMiniDisplayIconVolume,
303 EMiniDisplayIconVolumeLabel,
304 EMiniDisplayIconPlay,
305 EMiniDisplayIconPause,
306 EMiniDisplayIconRecording
309 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
310 public static extern IntPtr MiniDisplayOpen(TMiniDisplayType aType);
312 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
313 public static extern void MiniDisplayClose(IntPtr aDevice);
315 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
316 public static extern int MiniDisplayTypeCount();
318 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
319 public static extern IntPtr MiniDisplayTypeName(TMiniDisplayType aType);
321 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
322 public static extern void MiniDisplayClear(IntPtr aDevice);
324 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
325 public static extern void MiniDisplayFill(IntPtr aDevice);
327 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
328 public static extern void MiniDisplaySwapBuffers(IntPtr aDevice);
330 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
331 public static extern void MiniDisplaySetBrightness(IntPtr aDevice, int aBrightness);
333 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
334 public static extern int MiniDisplayMinBrightness(IntPtr aDevice);
336 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
337 public static extern int MiniDisplayMaxBrightness(IntPtr aDevice);
339 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
340 public static extern int MiniDisplayWidthInPixels(IntPtr aDevice);
342 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
343 public static extern int MiniDisplayHeightInPixels(IntPtr aDevice);
345 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
346 public static extern int MiniDisplaySetPixel(IntPtr aDevice, int aX, int aY, uint aValue);
348 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
349 public static extern IntPtr MiniDisplayVendor(IntPtr aDevice);
351 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
352 public static extern IntPtr MiniDisplayProduct(IntPtr aDevice);
354 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
355 public static extern IntPtr MiniDisplaySerialNumber(IntPtr aDevice);
357 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
358 public static extern IntPtr MiniDisplayDeviceId(IntPtr aDevice);
360 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
361 public static extern IntPtr MiniDisplayFirmwareRevision(IntPtr aDevice);
363 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
364 [return: MarshalAs(UnmanagedType.I1)]
365 public static extern bool MiniDisplayPowerSupplyStatus(IntPtr aDevice);
367 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
368 public static extern void MiniDisplayRequest(IntPtr aDevice, TMiniDisplayRequest aRequest);
370 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
371 public static extern TMiniDisplayRequest MiniDisplayAttemptRequestCompletion(IntPtr aDevice);
373 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
374 public static extern TMiniDisplayRequest MiniDisplayCurrentRequest(IntPtr aDevice);
376 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
377 public static extern void MiniDisplayCancelRequest(IntPtr aDevice);
379 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
380 public static extern void MiniDisplayPowerOn(IntPtr aDevice);
382 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
383 public static extern void MiniDisplayPowerOff(IntPtr aDevice);
385 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
386 [return: MarshalAs(UnmanagedType.I1)]
387 public static extern bool MiniDisplaySupportPowerOnOff(IntPtr aDevice);
389 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
390 public static extern void MiniDisplayShowClock(IntPtr aDevice);
392 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
393 public static extern void MiniDisplayHideClock(IntPtr aDevice);
395 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
396 [return: MarshalAs(UnmanagedType.I1)]
397 public static extern bool MiniDisplaySupportClock(IntPtr aDevice);
399 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
400 public static extern int MiniDisplayIconCount(IntPtr aDevice, TMiniDisplayIconType aIcon);
402 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
403 public static extern int MiniDisplayIconStatusCount(IntPtr aDevice, TMiniDisplayIconType aIcon);
405 [DllImport("MiniDisplay.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.Cdecl)]
406 public static extern void MiniDisplaySetIconStatus(IntPtr aDevice, TMiniDisplayIconType aIcon, int aIndex, int aStatus);