]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/libsdl/contrib/src/joystick/bsd/SDL_sysjoystick.c
update
[l4.git] / l4 / pkg / libsdl / contrib / src / joystick / bsd / SDL_sysjoystick.c
index 149da621602b3352f99ac0d9ed3a82b516e24b27..500fc62951eb812c4ce9e6dbbb84b731c5e7ee1b 100644 (file)
@@ -1,6 +1,6 @@
 /*
     SDL - Simple DirectMedia Layer
-    Copyright (C) 1997-2009 Sam Lantinga
+    Copyright (C) 1997-2012 Sam Lantinga
 
     This library is free software; you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public
 #include <libusbhid.h>
 #endif
 
-#ifdef __FREEBSD__
+#if defined(__FREEBSD__) || defined(__FreeBSD_kernel__)
 #ifndef __DragonFly__
 #include <osreldate.h>
 #endif
+#if __FreeBSD_kernel_version > 800063
+#include <dev/usb/usb_ioctl.h>
+#endif
 #include <sys/joystick.h>
 #endif
 
 #define MAX_JOY_JOYS   2
 #define MAX_JOYS       (MAX_UHID_JOYS + MAX_JOY_JOYS)
 
-#if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063)
-struct usb_ctl_report {
-       int     ucr_report;
-       u_char  ucr_data[1024]; /* filled data size will vary */
-};
-#endif
-
 struct report {
+#if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063)
+       struct  usb_gen_descriptor *buf;        /* Buffer */
+#else
        struct  usb_ctl_report *buf;    /* Buffer */
+#endif
        size_t  size;                   /* Buffer size */
        int     rid;                    /* Report ID */
        enum {
@@ -148,8 +148,10 @@ static char *joydevnames[MAX_JOYS];
 static int     report_alloc(struct report *, struct report_desc *, int);
 static void    report_free(struct report *);
 
-#if defined(USBHID_UCR_DATA) || (defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063))
+#if defined(USBHID_UCR_DATA) || defined(__FreeBSD_kernel__)
 #define REP_BUF_DATA(rep) ((rep)->buf->ucr_data)
+#elif (defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063))
+#define REP_BUF_DATA(rep) ((rep)->buf->ugd_data)
 #else
 #define REP_BUF_DATA(rep) ((rep)->buf->data)
 #endif
@@ -303,11 +305,11 @@ SDL_SYS_JoystickOpen(SDL_Joystick *joy)
                    strerror(errno));
                goto usberr;
        }
-#if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063)
+       rep = &hw->inreport;
+#if defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063) || defined(__FreeBSD_kernel__)
        rep->rid = hid_get_report_id(fd);
        if (rep->rid < 0) {
 #else
-       rep = &hw->inreport;
        if (ioctl(fd, USB_GET_REPORT_ID, &rep->rid) < 0) {
 #endif
                rep->rid = -1; /* XXX */
@@ -321,7 +323,7 @@ SDL_SYS_JoystickOpen(SDL_Joystick *joy)
                goto usberr;
        }
 
-#if defined(USBHID_NEW) || (defined(__FREEBSD__) && __FreeBSD_kernel_version >= 500111)
+#if defined(USBHID_NEW) || (defined(__FREEBSD__) && __FreeBSD_kernel_version >= 500111) || defined(__FreeBSD_kernel__)
        hdata = hid_start_parse(hw->repdesc, 1 << hid_input, rep->rid);
 #else
        hdata = hid_start_parse(hw->repdesc, 1 << hid_input);
@@ -405,7 +407,7 @@ SDL_SYS_JoystickUpdate(SDL_Joystick *joy)
        int nbutton, naxe = -1;
        Sint32 v;
 
-#if defined(__FREEBSD__) || SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H
+#if defined(__FREEBSD__) || SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H || defined(__FreeBSD_kernel__)
        struct joystick gameport;
  
        if (joy->hwdata->type == BSDJOY_JOY) {
@@ -460,7 +462,7 @@ SDL_SYS_JoystickUpdate(SDL_Joystick *joy)
        if (read(joy->hwdata->fd, REP_BUF_DATA(rep), rep->size) != rep->size) {
                return;
        }
-#if defined(USBHID_NEW) || (defined(__FREEBSD__) && __FreeBSD_kernel_version >= 500111)
+#if defined(USBHID_NEW) || (defined(__FREEBSD__) && __FreeBSD_kernel_version >= 500111) || defined(__FreeBSD_kernel__)
        hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input, rep->rid);
 #else
        hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input);