diff options
Diffstat (limited to 'sdl2')
-rw-r--r-- | sdl2/bindings.scm | 3 | ||||
-rw-r--r-- | sdl2/input/game-controller.scm | 20 |
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 ." |