From owner-svn-ports-all@FreeBSD.ORG Sun Jun 14 08:58:08 2015 Return-Path: Delivered-To: svn-ports-all@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 710BDE17; Sun, 14 Jun 2015 08:58:08 +0000 (UTC) (envelope-from mva@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 51947EAC; Sun, 14 Jun 2015 08:58:08 +0000 (UTC) (envelope-from mva@FreeBSD.org) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t5E8w8VG064693; Sun, 14 Jun 2015 08:58:08 GMT (envelope-from mva@FreeBSD.org) Received: (from mva@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t5E8w7EA064691; Sun, 14 Jun 2015 08:58:07 GMT (envelope-from mva@FreeBSD.org) Message-Id: <201506140858.t5E8w7EA064691@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: mva set sender to mva@FreeBSD.org using -f From: Marcus von Appen Date: Sun, 14 Jun 2015 08:58:07 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r389607 - in head/devel/sdl12: . files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2015 08:58:08 -0000 Author: mva Date: Sun Jun 14 08:58:07 2015 New Revision: 389607 URL: https://svnweb.freebsd.org/changeset/ports/389607 Log: - Fix delayed inputs for joysticks with high sampling rates PR: 200173 Submitted by: kikuchan98@gmail.com Modified: head/devel/sdl12/Makefile head/devel/sdl12/files/patch-src_joystick_bsd_SDL_sysjoystick.c Modified: head/devel/sdl12/Makefile ============================================================================== --- head/devel/sdl12/Makefile Sun Jun 14 08:44:44 2015 (r389606) +++ head/devel/sdl12/Makefile Sun Jun 14 08:58:07 2015 (r389607) @@ -3,7 +3,7 @@ PORTNAME= sdl PORTVERSION= 1.2.15 -PORTREVISION= 6 +PORTREVISION= 7 PORTEPOCH= 2 CATEGORIES= devel MASTER_SITES= http://www.libsdl.org/release/ Modified: head/devel/sdl12/files/patch-src_joystick_bsd_SDL_sysjoystick.c ============================================================================== --- head/devel/sdl12/files/patch-src_joystick_bsd_SDL_sysjoystick.c Sun Jun 14 08:44:44 2015 (r389606) +++ head/devel/sdl12/files/patch-src_joystick_bsd_SDL_sysjoystick.c Sun Jun 14 08:58:07 2015 (r389607) @@ -1,5 +1,5 @@ --- src/joystick/bsd/SDL_sysjoystick.c.orig 2012-01-19 07:30:06.000000000 +0100 -+++ src/joystick/bsd/SDL_sysjoystick.c 2012-07-21 10:09:16.000000000 +0200 ++++ src/joystick/bsd/SDL_sysjoystick.c 2015-05-06 22:52:50.648504057 +0900 @@ -82,7 +82,9 @@ #define MAX_JOYS (MAX_UHID_JOYS + MAX_JOY_JOYS) @@ -23,7 +23,203 @@ #elif (defined(__FREEBSD__) && (__FreeBSD_kernel_version > 800063)) #define REP_BUF_DATA(rep) ((rep)->buf->ugd_data) #else -@@ -582,8 +586,12 @@ +@@ -411,47 +415,47 @@ + struct joystick gameport; + + if (joy->hwdata->type == BSDJOY_JOY) { +- if (read(joy->hwdata->fd, &gameport, sizeof gameport) != sizeof gameport) +- return; +- if (abs(joy->hwdata->x - gameport.x) > 8) { +- joy->hwdata->x = gameport.x; +- if (joy->hwdata->x < joy->hwdata->xmin) { +- joy->hwdata->xmin = joy->hwdata->x; +- } +- if (joy->hwdata->x > joy->hwdata->xmax) { +- joy->hwdata->xmax = joy->hwdata->x; +- } +- if (joy->hwdata->xmin == joy->hwdata->xmax) { +- joy->hwdata->xmin--; +- joy->hwdata->xmax++; +- } +- v = (Sint32)joy->hwdata->x; +- v -= (joy->hwdata->xmax + joy->hwdata->xmin + 1)/2; +- v *= 32768/((joy->hwdata->xmax - joy->hwdata->xmin + 1)/2); +- SDL_PrivateJoystickAxis(joy, 0, v); +- } +- if (abs(joy->hwdata->y - gameport.y) > 8) { +- joy->hwdata->y = gameport.y; +- if (joy->hwdata->y < joy->hwdata->ymin) { +- joy->hwdata->ymin = joy->hwdata->y; ++ while (read(joy->hwdata->fd, &gameport, sizeof gameport) == sizeof gameport) { ++ if (abs(joy->hwdata->x - gameport.x) > 8) { ++ joy->hwdata->x = gameport.x; ++ if (joy->hwdata->x < joy->hwdata->xmin) { ++ joy->hwdata->xmin = joy->hwdata->x; ++ } ++ if (joy->hwdata->x > joy->hwdata->xmax) { ++ joy->hwdata->xmax = joy->hwdata->x; ++ } ++ if (joy->hwdata->xmin == joy->hwdata->xmax) { ++ joy->hwdata->xmin--; ++ joy->hwdata->xmax++; ++ } ++ v = (Sint32)joy->hwdata->x; ++ v -= (joy->hwdata->xmax + joy->hwdata->xmin + 1)/2; ++ v *= 32768/((joy->hwdata->xmax - joy->hwdata->xmin + 1)/2); ++ SDL_PrivateJoystickAxis(joy, 0, v); ++ } ++ if (abs(joy->hwdata->y - gameport.y) > 8) { ++ joy->hwdata->y = gameport.y; ++ if (joy->hwdata->y < joy->hwdata->ymin) { ++ joy->hwdata->ymin = joy->hwdata->y; ++ } ++ if (joy->hwdata->y > joy->hwdata->ymax) { ++ joy->hwdata->ymax = joy->hwdata->y; ++ } ++ if (joy->hwdata->ymin == joy->hwdata->ymax) { ++ joy->hwdata->ymin--; ++ joy->hwdata->ymax++; ++ } ++ v = (Sint32)joy->hwdata->y; ++ v -= (joy->hwdata->ymax + joy->hwdata->ymin + 1)/2; ++ v *= 32768/((joy->hwdata->ymax - joy->hwdata->ymin + 1)/2); ++ SDL_PrivateJoystickAxis(joy, 1, v); + } +- if (joy->hwdata->y > joy->hwdata->ymax) { +- joy->hwdata->ymax = joy->hwdata->y; ++ if (gameport.b1 != joy->buttons[0]) { ++ SDL_PrivateJoystickButton(joy, 0, gameport.b1); + } +- if (joy->hwdata->ymin == joy->hwdata->ymax) { +- joy->hwdata->ymin--; +- joy->hwdata->ymax++; ++ if (gameport.b2 != joy->buttons[1]) { ++ SDL_PrivateJoystickButton(joy, 1, gameport.b2); + } +- v = (Sint32)joy->hwdata->y; +- v -= (joy->hwdata->ymax + joy->hwdata->ymin + 1)/2; +- v *= 32768/((joy->hwdata->ymax - joy->hwdata->ymin + 1)/2); +- SDL_PrivateJoystickAxis(joy, 1, v); +- } +- if (gameport.b1 != joy->buttons[0]) { +- SDL_PrivateJoystickButton(joy, 0, gameport.b1); +- } +- if (gameport.b2 != joy->buttons[1]) { +- SDL_PrivateJoystickButton(joy, 1, gameport.b2); + } + return; + } +@@ -459,65 +463,61 @@ + + rep = &joy->hwdata->inreport; + +- if (read(joy->hwdata->fd, REP_BUF_DATA(rep), rep->size) != rep->size) { +- return; +- } ++ while (read(joy->hwdata->fd, REP_BUF_DATA(rep), rep->size) == rep->size) { + #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); ++ hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input, rep->rid); + #else +- hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input); ++ hdata = hid_start_parse(joy->hwdata->repdesc, 1 << hid_input); + #endif +- if (hdata == NULL) { +- fprintf(stderr, "%s: Cannot start HID parser\n", +- joy->hwdata->path); +- return; +- } ++ if (hdata == NULL) { ++ /*fprintf(stderr, "%s: Cannot start HID parser\n", joy->hwdata->path);*/ ++ continue; ++ } + +- for (nbutton = 0; hid_get_item(hdata, &hitem) > 0;) { +- switch (hitem.kind) { +- case hid_input: +- switch (HID_PAGE(hitem.usage)) { +- case HUP_GENERIC_DESKTOP: { +- unsigned usage = HID_USAGE(hitem.usage); +- int joyaxe = usage_to_joyaxe(usage); +- if (joyaxe >= 0) { +- naxe = joy->hwdata->axis_map[joyaxe]; +- /* scaleaxe */ +- v = (Sint32)hid_get_data(REP_BUF_DATA(rep), +- &hitem); +- v -= (hitem.logical_maximum + hitem.logical_minimum + 1)/2; +- v *= 32768/((hitem.logical_maximum - hitem.logical_minimum + 1)/2); +- if (v != joy->axes[naxe]) { +- SDL_PrivateJoystickAxis(joy, naxe, v); ++ for (nbutton = 0; hid_get_item(hdata, &hitem) > 0;) { ++ switch (hitem.kind) { ++ case hid_input: ++ switch (HID_PAGE(hitem.usage)) { ++ case HUP_GENERIC_DESKTOP: { ++ unsigned usage = HID_USAGE(hitem.usage); ++ int joyaxe = usage_to_joyaxe(usage); ++ if (joyaxe >= 0) { ++ naxe = joy->hwdata->axis_map[joyaxe]; ++ /* scaleaxe */ ++ v = (Sint32)hid_get_data(REP_BUF_DATA(rep), ++ &hitem); ++ v -= (hitem.logical_maximum + hitem.logical_minimum + 1)/2; ++ v *= 32768/((hitem.logical_maximum - hitem.logical_minimum + 1)/2); ++ if (v != joy->axes[naxe]) { ++ SDL_PrivateJoystickAxis(joy, naxe, v); ++ } ++ } else if (usage == HUG_HAT_SWITCH) { ++ v = (Sint32)hid_get_data(REP_BUF_DATA(rep), ++ &hitem); ++ SDL_PrivateJoystickHat(joy, 0, ++ hatval_to_sdl(v)-hitem.logical_minimum); ++ } ++ break; + } +- } else if (usage == HUG_HAT_SWITCH) { +- v = (Sint32)hid_get_data(REP_BUF_DATA(rep), +- &hitem); +- SDL_PrivateJoystickHat(joy, 0, +- hatval_to_sdl(v)-hitem.logical_minimum); +- } +- break; +- } +- case HUP_BUTTON: +- v = (Sint32)hid_get_data(REP_BUF_DATA(rep), +- &hitem); +- if (joy->buttons[nbutton] != v) { +- SDL_PrivateJoystickButton(joy, +- nbutton, v); ++ case HUP_BUTTON: ++ v = (Sint32)hid_get_data(REP_BUF_DATA(rep), ++ &hitem); ++ if (joy->buttons[nbutton] != v) { ++ SDL_PrivateJoystickButton(joy, ++ nbutton, v); ++ } ++ nbutton++; ++ break; ++ default: ++ continue; + } +- nbutton++; + break; + default: +- continue; ++ break; + } +- break; +- default: +- break; + } ++ hid_end_parse(hdata); + } +- hid_end_parse(hdata); +- +- return; + } + + /* Function to close a joystick after use */ +@@ -582,8 +582,12 @@ r->size = len; if (r->size > 0) {