private static List <ushort> GetPressedButtons(HIDP_CAPS hidCaps, IntPtr preparsedData, byte[] rawInputData) { var buttonCapsLength = hidCaps.NumberInputButtonCaps; var buttonCaps = new HIDP_BUTTON_CAPS[buttonCapsLength]; CheckError(HidP_GetButtonCaps(HIDP_REPORT_TYPE.HidP_Input, buttonCaps, ref buttonCapsLength, preparsedData)); var usagePages = new HashSet <ushort>(); foreach (var bc in buttonCaps) { usagePages.Add(bc.UsagePage); } var res = new List <ushort>(); foreach (var usagePage in usagePages) { int usageListLength = hidCaps.NumberInputButtonCaps; var usageList = new ushort[usageListLength]; CheckError(HidP_GetUsages(HIDP_REPORT_TYPE.HidP_Input, usagePage, 0, usageList, ref usageListLength, preparsedData, rawInputData, rawInputData.Length)); for (var i = 0; i < usageListLength; ++i) { res.Add(usageList[i]); } } return(res); }
public static string GetLinkName(this HIDP_BUTTON_CAPS caps) { if (!caps.HasLink()) { return(""); } var pageType = Utils.UsageType((UsagePage)caps.LinkUsagePage); return(Enum.GetName(pageType, caps.LinkUsage) + $"({pageType.Name})[{caps.LinkCollection}]"); }
public static int GetLinkIndex(this HIDP_BUTTON_CAPS caps) => caps.LinkCollection;
public static bool HasLink(this HIDP_BUTTON_CAPS caps) => caps.LinkUsage != 0;
public static string GetName(this HIDP_BUTTON_CAPS caps) { var pageType = Utils.UsageType((UsagePage)caps.UsagePage); return(Enum.GetName(pageType, caps.NotRange.Usage) + $"({pageType.Name})"); }
/// <summary> /// Provides name of the usage at the given index. /// </summary> /// <param name="index">Index of the usage concerned.</param> /// <returns></returns> internal string GetButtonName(HIDP_BUTTON_CAPS bc) { Type usageType = Utils.UsageType(this.UsagePageEnum); return(Enum.GetName(usageType, bc.NotRange.Usage)); }