@@ -131,62 +131,63 @@ def load_sdl_mappings(self):
131131 log .exception (e )
132132 return False
133133
134- for line in db .readlines ():
135- if line .startswith (weird_id ):
136- log .info ("Loading mappings for '%s' from gamecontrollerdb" , weird_id )
137- log .debug ("Buttons: %s" , buttons )
138- log .debug ("Axes: %s" , axes )
139- for token in line .strip ().split ("," ):
140- if ":" in token :
141- k , v = token .split (":" , 1 )
142- k = SDL_TO_SCC_NAMES .get (k , k )
143- if v .startswith ("b" ) and hasattr (SCButtons , k .upper ()):
144- try :
145- keycode = buttons [int (v .strip ("b" ))]
146- except IndexError :
147- log .warning ("Skipping unknown gamecontrollerdb button->button mapping: '%s'" , v )
148- continue
149- button = getattr (SCButtons , k .upper ())
150- self ._mappings [keycode ] = button
151- elif v .startswith ("b" ) and k in SDL_AXES :
152- try :
153- keycode = buttons [int (v .strip ("b" ))]
154- except IndexError :
155- log .warning ("Skipping unknown gamecontrollerdb button->axis mapping: '%s'" , v )
156- continue
157- log .info ("Adding button -> axis mapping for %s" , k )
158- self ._mappings [keycode ] = self ._axis_data [SDL_AXES .index (k )]
159- self ._mappings [keycode ].min = STICK_PAD_MIN
160- self ._mappings [keycode ].max = STICK_PAD_MAX
161- elif v .startswith ("h" ) and 16 in axes and 17 in axes :
162- # Special case for evdev hatswitch
163- if v == "h0.1" and k == "dpup" :
164- self ._mappings [16 ] = self ._axis_data [SDL_AXES .index ("dpadx" )]
165- self ._mappings [17 ] = self ._axis_data [SDL_AXES .index ("dpady" )]
166- elif k in SDL_AXES :
167- try :
168- code = axes [int (v .strip ("a" ))]
169- except IndexError :
170- log .warning ("Skipping unknown gamecontrollerdb axis: '%s'" , v )
171- continue
172- self ._mappings [code ] = self ._axis_data [SDL_AXES .index (k )]
173- elif k in SDL_DPAD and v .startswith ("b" ):
174- try :
175- keycode = buttons [int (v .strip ("b" ))]
176- except IndexError :
177- log .warning ("Skipping unknown gamecontrollerdb button->dpad mapping: %s" , v )
178- continue
179- index , positive = SDL_DPAD [k ]
180- data = DPadEmuData (self ._axis_data [index ], positive )
181- self ._mappings [keycode ] = data
182- elif k == "platform" :
183- # Not interesting
184- pass
185- else :
186- log .warning ("Skipping unknown gamecontrollerdb mapping %s:%s" , k , v )
187- return True
188- else :
189- log .debug ("Mappings for '%s' not found in gamecontrollerdb" , weird_id )
134+ with db :
135+ for line in db .readlines ():
136+ if line .startswith (weird_id ):
137+ log .info ("Loading mappings for '%s' from gamecontrollerdb" , weird_id )
138+ log .debug ("Buttons: %s" , buttons )
139+ log .debug ("Axes: %s" , axes )
140+ for token in line .strip ().split ("," ):
141+ if ":" in token :
142+ k , v = token .split (":" , 1 )
143+ k = SDL_TO_SCC_NAMES .get (k , k )
144+ if v .startswith ("b" ) and hasattr (SCButtons , k .upper ()):
145+ try :
146+ keycode = buttons [int (v .strip ("b" ))]
147+ except IndexError :
148+ log .warning ("Skipping unknown gamecontrollerdb button->button mapping: '%s'" , v )
149+ continue
150+ button = getattr (SCButtons , k .upper ())
151+ self ._mappings [keycode ] = button
152+ elif v .startswith ("b" ) and k in SDL_AXES :
153+ try :
154+ keycode = buttons [int (v .strip ("b" ))]
155+ except IndexError :
156+ log .warning ("Skipping unknown gamecontrollerdb button->axis mapping: '%s'" , v )
157+ continue
158+ log .info ("Adding button -> axis mapping for %s" , k )
159+ self ._mappings [keycode ] = self ._axis_data [SDL_AXES .index (k )]
160+ self ._mappings [keycode ].min = STICK_PAD_MIN
161+ self ._mappings [keycode ].max = STICK_PAD_MAX
162+ elif v .startswith ("h" ) and 16 in axes and 17 in axes :
163+ # Special case for evdev hatswitch
164+ if v == "h0.1" and k == "dpup" :
165+ self ._mappings [16 ] = self ._axis_data [SDL_AXES .index ("dpadx" )]
166+ self ._mappings [17 ] = self ._axis_data [SDL_AXES .index ("dpady" )]
167+ elif k in SDL_AXES :
168+ try :
169+ code = axes [int (v .strip ("a" ))]
170+ except IndexError :
171+ log .warning ("Skipping unknown gamecontrollerdb axis: '%s'" , v )
172+ continue
173+ self ._mappings [code ] = self ._axis_data [SDL_AXES .index (k )]
174+ elif k in SDL_DPAD and v .startswith ("b" ):
175+ try :
176+ keycode = buttons [int (v .strip ("b" ))]
177+ except IndexError :
178+ log .warning ("Skipping unknown gamecontrollerdb button->dpad mapping: %s" , v )
179+ continue
180+ index , positive = SDL_DPAD [k ]
181+ data = DPadEmuData (self ._axis_data [index ], positive )
182+ self ._mappings [keycode ] = data
183+ elif k == "platform" :
184+ # Not interesting
185+ pass
186+ else :
187+ log .warning ("Skipping unknown gamecontrollerdb mapping %s:%s" , k , v )
188+ return True
189+ else :
190+ log .debug ("Mappings for '%s' not found in gamecontrollerdb" , weird_id )
190191
191192 return False
192193
0 commit comments