OpenTK.Platform.X11.X11Joystick.OpenJoystick C# (CSharp) Method

OpenJoystick() private method

private OpenJoystick ( string base_path, int number ) : JoystickDevice
base_path string
number int
return JoystickDevice
        JoystickDevice<X11JoyDetails> OpenJoystick(string base_path, int number)
        {
            string path = base_path + number.ToString();
            JoystickDevice<X11JoyDetails> stick = null;

            int fd = -1;
            try
            {
                fd = UnsafeNativeMethods.open(path, OpenFlags.NonBlock);
                if (fd == -1)
                    return null;

                // Check joystick driver version (must be 1.0+)
                int driver_version = 0x00000800;
                UnsafeNativeMethods.ioctl(fd, JoystickIoctlCode.Version, ref driver_version);
                if (driver_version < 0x00010000)
                    return null;

                // Get number of joystick axes
                int axes = 0;
                UnsafeNativeMethods.ioctl(fd, JoystickIoctlCode.Axes, ref axes);

                // Get number of joystick buttons
                int buttons = 0;
                UnsafeNativeMethods.ioctl(fd, JoystickIoctlCode.Buttons, ref buttons);

                stick = new JoystickDevice<X11JoyDetails>(fd, axes, buttons);

                StringBuilder sb = new StringBuilder(128);
                UnsafeNativeMethods.ioctl(fd, JoystickIoctlCode.Name128, sb);
                stick.Description = sb.ToString();

                Debug.Print("Found joystick on path {0}", path);
            }
            finally
            {
                if (stick == null && fd != -1)
                    UnsafeNativeMethods.close(fd);
            }

            return stick;
        }