Exemple #1
0
 internal static string DevicePath(IntPtr devptr)
 {
     unsafe {
         WrappedDevice *dev = (WrappedDevice *)devptr.ToPointer();
         return(Marshal.PtrToStringAnsi(dev->path));
     }
 }
Exemple #2
0
 internal void close_device()
 {
     unsafe {
         WrappedDevice *dev = (WrappedDevice *)self.ToPointer();
         dev->buttons = IntPtr.Zero;
         dev->axes    = IntPtr.Zero;
         buttons_handle.Free();
         axes_handle.Free();
     }
 }
Exemple #3
0
        internal Device(IntPtr devptr)
        {
            self = devptr;
            unsafe {
                WrappedDevice *dev = (WrappedDevice *)devptr.ToPointer();

                path        = Marshal.PtrToStringAnsi(dev->path);
                name        = Marshal.PtrToStringAnsi(dev->name);
                num_buttons = dev->num_buttons;
                buttons     = new Button[dev->num_buttons];
                num_axes    = dev->num_axes;
                axes        = new Axis[dev->num_axes];

                int bsize = Marshal.SizeOf(typeof(Button));
                if (dev->num_buttons > 0)
                {
                    for (int i = 0; i < dev->num_buttons; i++)
                    {
                        IntPtr bptr = new IntPtr(dev->buttons.ToInt64() + i * bsize);
                        buttons[i] = (Button)Marshal.PtrToStructure(bptr, typeof(Button));
                    }
                    buttons_handle = GCHandle.Alloc(buttons, GCHandleType.Pinned);
                    dev->buttons   = buttons_handle.AddrOfPinnedObject();
                }

                int asize = Marshal.SizeOf(typeof(Axis));
                if (dev->num_axes > 0)
                {
                    for (int i = 0; i < dev->num_axes; i++)
                    {
                        IntPtr aptr = new IntPtr(dev->axes.ToInt64() + i * asize);
                        axes[i] = (Axis)Marshal.PtrToStructure(aptr, typeof(Axis));
                    }
                    axes_handle = GCHandle.Alloc(axes, GCHandleType.Pinned);
                    dev->axes   = axes_handle.AddrOfPinnedObject();
                }
            }
        }