Ejemplo n.º 1
0
        /// <summary>
        /// Update labels on window with Device data
        /// </summary>
        /// <param name="Controller"></param>
        public void UpdateRawAxis(RawInputController Controller)
        {
            Lbl_RawInput.Text = "[ 0x" + Controller.Computed_X.ToString("X8") + ", " + Controller.Computed_Y.ToString("X8") + " ]";
            Lbl_AxisXMin.Text = Controller.Axis_X_Min.ToString() + " [ 0x" + Controller.Axis_X_Min.ToString("X8") + " ]";
            Lbl_AxisXMax.Text = Controller.Axis_X_Max.ToString() + " [ 0x" + Controller.Axis_X_Max.ToString("X8") + " ]";
            Lbl_AxisYMin.Text = Controller.Axis_Y_Min.ToString() + " [ 0x" + Controller.Axis_Y_Min.ToString("X8") + " ]";
            Lbl_AxisYMax.Text = Controller.Axis_Y_Max.ToString() + " [ 0x" + Controller.Axis_Y_Max.ToString("X8") + " ]";

            // Update screen/client info
            GetScreenResolution();
            GetClientSize();

            // Convert RAW to SCREEN
            Controller.Computed_X = ScreenScale(Controller.Computed_X, Controller.Axis_X_Min, Controller.Axis_X_Max, 0, _ScreenWidth);
            Controller.Computed_Y = ScreenScale(Controller.Computed_Y, Controller.Axis_Y_Min, Controller.Axis_Y_Max, 0, _ScreenHeight);
            _OnScreenX            = Controller.Computed_X;
            _OnScreenY            = Controller.Computed_Y;
            Lbl_OnScreen.Text     = _OnScreenX.ToString() + "x" + _OnScreenY.ToString();

            // Convert SCREEN to CLIENT
            AxisInfo i = new AxisInfo();

            i.pTarget.X = Controller.Computed_X;
            i.pTarget.Y = Controller.Computed_Y;
            ClientScale(i);
            Lbl_OnClient.Text = _OnClientX.ToString() + "x" + _OnClientY.ToString();

            // Display mark on client, moved to Timer to not overload GUI thread with too many rawinout data drawing
            //this.Invalidate();

            //Custom crosshair with PNG, not displaying well at all....
            //SetTargetLocation(i.pTarget.X, i.pTarget.Y);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Enumerates the Raw Input Devices and places their corresponding RawInputDevice structures into a List<string>
        /// We just filter to remove Keyboard devices and keep Mouse + HID devices
        /// </summary>
        private void GetRawInputDevices()
        {
            uint deviceCount = 0;
            var  dwSize      = (Marshal.SizeOf(typeof(RawInputDeviceList)));

            if (Win32API.GetRawInputDeviceList(IntPtr.Zero, ref deviceCount, (uint)dwSize) == 0)
            {
                var pRawInputDeviceList = Marshal.AllocHGlobal((int)(dwSize * deviceCount));
                Win32API.GetRawInputDeviceList(pRawInputDeviceList, ref deviceCount, (uint)dwSize);

                for (var i = 0; i < deviceCount; i++)
                {
                    // On Window 8 64bit when compiling against .Net > 3.5 using .ToInt32 you will generate an arithmetic overflow. Leave as it is for 32bit/64bit applications
                    RawInputDeviceList rid = (RawInputDeviceList)Marshal.PtrToStructure(new IntPtr((pRawInputDeviceList.ToInt64() + (dwSize * i))), typeof(RawInputDeviceList));

                    RawInputController c = new RawInputController(rid.hDevice, rid.dwType);

                    if (c.DeviceType == RawInputDeviceType.RIM_TYPEHID || c.DeviceType == RawInputDeviceType.RIM_TYPEMOUSE)
                    {
                        _Controllers.Add(c);
                    }
                }
                Marshal.FreeHGlobal(pRawInputDeviceList);
                return;
            }
            throw new Win32Exception(Marshal.GetLastWin32Error());
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Change of selected device in the list
        /// </summary>
        private void Cbo_Dev_SelectionChangeCommitted(object sender, System.EventArgs e)
        {
            _OnClientX = -1000;
            _OnClientY = -1000;

            if (Cbo_Dev.Text.Length > 0)
            {
                RawInputController Controller = GetControllerFromName(Cbo_Dev.Text);
                Lbl_dwType.Text       = Controller.DeviceType.ToString() + " - " + Controller.DHidUsage;
                Lbl_Manufacturer.Text = Controller.ManufacturerName;
                Lbl_Product.Text      = Controller.ProductName;
                Lbl_PID.Text          = Controller.PID;
                Lbl_VID.Text          = Controller.VID;
                _Btn_List.Clear();
                Lbl_Nbr_Buttons.Text = Controller.NumberOfButtons.ToString();
                FlowPanelButtons.Controls.Clear();
                for (int i = 0; i < Controller.NumberOfButtons; i++)
                {
                    Ds_Diag_Button b = new Ds_Diag_Button(i + 1);
                    b.Width  = 15;
                    b.Height = 15;
                    FlowPanelButtons.Controls.Add(b);
                    _Btn_List.Add(b);
                }

                if (Controller.DeviceType != RawInputDeviceType.RIM_TYPEHID)
                {
                    Lbl_AxisX_Txt.Visible    = false;
                    Lbl_AxisY_Txt.Visible    = false;
                    Lbl_Nbr_Axis_Txt.Visible = false;
                    Lbl_Nbr_Axis.Visible     = false;
                    Cbo_AxisX.Visible        = false;
                    Cbo_AxisY.Visible        = false;
                }
                else
                {
                    Lbl_AxisX_Txt.Visible    = true;
                    Lbl_AxisY_Txt.Visible    = true;
                    Lbl_Nbr_Axis_Txt.Visible = true;
                    Lbl_Nbr_Axis.Visible     = true;
                    Cbo_AxisX.Visible        = true;
                    Cbo_AxisY.Visible        = true;

                    Lbl_Nbr_Axis.Text = Controller.NumberOfAxis.ToString();

                    Cbo_AxisX.Items.Clear();
                    Cbo_AxisY.Items.Clear();
                    for (int i = 0; i < Controller.AxisList.Count; i++)
                    {
                        Cbo_AxisX.Items.Add("0x" + Controller.AxisList[i].ToString("X2"));
                        Cbo_AxisY.Items.Add("0x" + Controller.AxisList[i].ToString("X2"));
                    }
                    if (Cbo_AxisX.Items.Count > 1)
                    {
                        Cbo_AxisX.SelectedItem    = Cbo_AxisX.Items[1];
                        Cbo_AxisY.SelectedItem    = Cbo_AxisX.Items[0];
                        Controller.Selected_AxisX = ushort.Parse(Cbo_AxisX.Text.Substring(2), System.Globalization.NumberStyles.HexNumber);
                        Controller.Selected_AxisY = ushort.Parse(Cbo_AxisY.Text.Substring(2), System.Globalization.NumberStyles.HexNumber);
                    }
                }

                _SelectedDevice    = Cbo_Dev.Text;
                Btn_Export.Visible = true;
            }
            else
            {
                Btn_Export.Visible = false;
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Export device HID specifications for analysis
        /// </summary>
        private void Btn_Export_Click(object sender, EventArgs e)
        {
            RawInputController c        = GetControllerFromName(Cbo_Dev.Text);
            String             DataFile = Application.StartupPath + @"\DsDiag_Report_" + DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".txt";

            System.IO.StreamWriter sw = new System.IO.StreamWriter(DataFile, false);
            try
            {
                sw.WriteLine("----- Ds_Diag.exe Device Report File -----");
                sw.WriteLine("Device Name = " + c.DeviceName);
                sw.WriteLine("Device Type = " + c.DeviceType);
                if (c.DeviceType == RawInputDeviceType.RIM_TYPEHID)
                {
                    sw.WriteLine("HID Usage = " + c.DHidUsage.ToString());
                }
                sw.WriteLine("VID = " + c.VID);
                sw.WriteLine("PID = " + c.PID);
                sw.WriteLine("Device Description = " + c.ManufacturerName + " - " + c.ProductName);
                sw.WriteLine("Number of Buttons = " + c.NumberOfButtons);
                sw.WriteLine("Number of Axis = " + c.NumberOfAxis);
                string s = string.Empty;
                for (int i = 0; i < c.NumberOfAxis; i++)
                {
                    s += "0x" + c.AxisList[i].ToString("X2") + ", ";
                }
                sw.WriteLine("Axis List = " + s);
                if (c.DeviceType == RawInputDeviceType.RIM_TYPEHID)
                {
                    sw.WriteLine("----- HID detailed data  -----");
                    sw.WriteLine("Device Capabilities:");
                    sw.WriteLine("+ " + c.HID_Capabilities.ToString().Replace(", ", "\n+ "));
                    sw.WriteLine("");
                    sw.WriteLine("Button Capabilities :");
                    for (int i = 0; i < c.HID_ButtonCapabilitiesArray.Length; i++)
                    {
                        sw.WriteLine("+ [" + i.ToString("D2") + "]\n    + " + c.HID_ButtonCapabilitiesArray[i].ToString().Replace(", ", "\n    + "));
                    }
                    sw.WriteLine("");
                    sw.WriteLine("Values Capabilities :");
                    for (int i = 0; i < c.HID_ValueCapabilitiesArray.Length; i++)
                    {
                        sw.WriteLine("+ [" + i.ToString("D2") + "]\n    + " + c.HID_ValueCapabilitiesArray[i].ToString().Replace(", ", "\n    + "));
                    }
                    sw.WriteLine("");
                    sw.WriteLine("Values Capabilities :");
                    for (int i = 0; i < c.HID_OutputValueCapabilitiesArray.Length; i++)
                    {
                        sw.WriteLine("+ [" + i.ToString("D2") + "]\n    + " + c.HID_OutputValueCapabilitiesArray[i].ToString().Replace(", ", "\n    + "));
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            finally
            {
                sw.Close();
                MessageBox.Show("Device report saved to :\n" + DataFile);
            }
        }
Ejemplo n.º 5
0
        private void Cbo_AxisY_SelectionChangeCommitted(object sender, EventArgs e)
        {
            RawInputController c = GetControllerFromName(Cbo_Dev.Text);

            c.Selected_AxisY = ushort.Parse(Cbo_AxisY.Text.Substring(2), System.Globalization.NumberStyles.HexNumber);
        }