//for converting a struct to byte array public static byte[] getBytesGDJ(GetDataJoy gdj, int size) { var arr = new byte[size]; var ptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(gdj, ptr, false); Marshal.Copy(ptr, arr, 0, size); Marshal.FreeHGlobal(ptr); return(arr); }
//for converting a byte array to struct static GetDataJoy fromBytes(byte[] arr) { var str = new GetDataJoy(); var size = Marshal.SizeOf(str); var ptr = Marshal.AllocHGlobal(size); Marshal.Copy(arr, 0, ptr, size); str = (GetDataJoy)Marshal.PtrToStructure(ptr, str.GetType()); Marshal.FreeHGlobal(ptr); return(str); }
//here we get data from the joystick void Get_Data_From_Joystick() { var JoyData = new GetDataJoy(); //convert struct to buffer var buf = getBytesGDJ(JoyData, Marshal.SizeOf(JoyData)); //send empty buffer to driver HID.ReadData(buf, (uint)Marshal.SizeOf(JoyData)); var jd = fromBytes(buf); pbX.Value = jd.X; pbY.Value = jd.Y; pbZ.Value = jd.Z; pbrX.Value = jd.rX; pbrY.Value = jd.rY; pbrZ.Value = jd.rZ; pbSlider.Value = jd.slider; pbWheel.Value = jd.wheel; pbDial.Value = jd.dial; lbHatData.Content = jd.hat.ToString(); //let's convert the button bit array to two strings for display string s; s = Convert.ToString(jd.btn0, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn1, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn2, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn3, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn4, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn5, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn6, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn7, 2).PadLeft(8, '0'); lbButtonsData1.Content = s; s = Convert.ToString(jd.btn8, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn9, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn10, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn11, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn12, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn13, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn14, 2).PadLeft(8, '0'); s = s + " " + Convert.ToString(jd.btn15, 2).PadLeft(8, '0'); lbButtonsData2.Content = s; }