summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson@vistahigherlearning.com>2017-11-10 12:12:07 -0500
committerDavid Thompson <dthompson@vistahigherlearning.com>2017-11-10 13:53:45 -0500
commit6a5cb8729af617937ea569512506d5a11258df95 (patch)
tree425c7f3025cfd9d90e0f984ff5ff07fd63b5ad94
parentecdb209d374e62144defa4b80d6a1c9f46a727d1 (diff)
Add SDL_GameControllerAddMappingsFromRW binding.
* sdl2/bindings.scm (sdl-game-controller-add-mappings-from-file): New procedure. * sdl2/input/game-controller.scm (load-game-controller-mappings!): New procedure.
-rw-r--r--sdl2/bindings.scm3
-rw-r--r--sdl2/input/game-controller.scm20
2 files changed, 22 insertions, 1 deletions
diff --git a/sdl2/bindings.scm b/sdl2/bindings.scm
index dd0a619..180f887 100644
--- a/sdl2/bindings.scm
+++ b/sdl2/bindings.scm
@@ -1071,6 +1071,9 @@ RETURN-TYPE and accept arguments of ARG-TYPES."
(define-public SDL_CONTROLLER_BUTTON_DPAD_RIGHT 14)
(define-public SDL_CONTROLLER_BUTTON_MAX 15)
+(define-foreign sdl-game-controller-add-mappings-from-rw
+ int "SDL_GameControllerAddMappingsFromRW" (list '* int))
+
(define-foreign sdl-game-controller-add-mapping
int "SDL_GameControllerAddMapping" '(*))
diff --git a/sdl2/input/game-controller.scm b/sdl2/input/game-controller.scm
index 66441a9..120cc53 100644
--- a/sdl2/input/game-controller.scm
+++ b/sdl2/input/game-controller.scm
@@ -30,7 +30,8 @@
#:use-module (system foreign)
#:use-module ((sdl2 bindings) #:prefix ffi:)
#:use-module (sdl2)
- #:export (open-game-controller
+ #:export (load-game-controller-mappings!
+ open-game-controller
close-game-controller
game-controller?
game-controller-attached?
@@ -60,6 +61,23 @@
(define wrap-joystick (@@ (sdl2 input joystick) wrap-joystick))
+(define (load-game-controller-mappings! file)
+ "Load game controller mappings from FILE and return the number of
+mappings added this way.
+
+See
+https://raw.github.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt
+for a community maintained controller mapping file."
+ (let ((count (ffi:sdl-game-controller-add-mappings-from-rw
+ (ffi:sdl-rw-from-file (string->pointer file)
+ (string->pointer "rb"))
+ 1)))
+ (if (= count -1)
+ (sdl-error "load-game-controller-mappings!"
+ (string-append "failed to load game controller mappings from file "
+ file))
+ count)))
+
(define (open-game-controller joystick-index)
"Return a game controller object for the physical joystick device
associated with ."