@@ -387,18 +387,20 @@ DeviceDynamicEncodingSetup(SDL_HIDAPI_Device *device)
387
387
break ;
388
388
}
389
389
390
- Uint16 version = analogIndex ;
391
- version = version * SINPUT_TRIGGERSTYLE_MAX + triggerIndex ;
392
- version = version * SINPUT_PADDLESTYLE_MAX + paddleIndex ;
393
- version = version * SINPUT_METASTYLE_MAX + metaIndex ;
394
- version = version * SINPUT_TOUCHSTYLE_MAX + touchIndex ;
395
- version = version * SINPUT_MISCSTYLE_MAX + miscIndex ;
390
+ int version = analogIndex ;
391
+ version = version * ( int ) SINPUT_TRIGGERSTYLE_MAX + triggerIndex ;
392
+ version = version * ( int ) SINPUT_PADDLESTYLE_MAX + paddleIndex ;
393
+ version = version * ( int ) SINPUT_METASTYLE_MAX + metaIndex ;
394
+ version = version * ( int ) SINPUT_TOUCHSTYLE_MAX + touchIndex ;
395
+ version = version * ( int ) SINPUT_MISCSTYLE_MAX + miscIndex ;
396
396
397
397
ctx -> usage_masks [0 ] = mask [0 ];
398
398
ctx -> usage_masks [1 ] = mask [1 ];
399
399
ctx -> usage_masks [2 ] = mask [2 ];
400
400
ctx -> usage_masks [3 ] = mask [3 ];
401
401
402
+ version = SDL_clamp (version , 0 , UINT16_MAX );
403
+
402
404
device -> guid .data [12 ] = (Uint8 )(version & 0xFF );
403
405
device -> guid .data [13 ] = (Uint8 )(version >> 8 );
404
406
}
@@ -449,6 +451,7 @@ static void ProcessSDLFeaturesResponse(SDL_HIDAPI_Device *device, Uint8 *data)
449
451
ctx -> accelRange = EXTRACTUINT16 (data , 8 );
450
452
ctx -> gyroRange = EXTRACTUINT16 (data , 10 );
451
453
454
+ bool use_dynamic_mapping = false;
452
455
453
456
if ((device -> product_id == USB_PRODUCT_HANDHELDLEGEND_SINPUT_GENERIC ) && (device -> vendor_id == USB_VENDOR_RASPBERRYPI )) {
454
457
switch (ctx -> sub_type ) {
@@ -467,6 +470,7 @@ static void ProcessSDLFeaturesResponse(SDL_HIDAPI_Device *device, Uint8 *data)
467
470
ctx -> usage_masks [1 ] = data [13 ];
468
471
ctx -> usage_masks [2 ] = data [14 ];
469
472
ctx -> usage_masks [3 ] = data [15 ];
473
+ use_dynamic_mapping = true;
470
474
break ;
471
475
}
472
476
} else {
@@ -508,7 +512,9 @@ static void ProcessSDLFeaturesResponse(SDL_HIDAPI_Device *device, Uint8 *data)
508
512
ctx -> gyroScale = CalculateGyroScale (ctx -> gyroRange );
509
513
510
514
// Process dynamic controller info
511
- DeviceDynamicEncodingSetup (device );
515
+ if (use_dynamic_mapping ) {
516
+ DeviceDynamicEncodingSetup (device );
517
+ }
512
518
513
519
// Derive button count from mask
514
520
for (Uint8 byte = 0 ; byte < 4 ; ++ byte ) {
0 commit comments