@@ -395,14 +395,32 @@ void CALLBACK XboxController::OnVigemNotification(PVIGEM_CLIENT Client, PVIGEM_T
395
395
LargeMotor = SmallMotor = 0 ;
396
396
397
397
memset (&controller.output_prev_ , 0 , sizeof (XboxOutputReport));
398
- controller.output_prev_ .bSize = sizeof (XboxOutputReport);
398
+ controller.output_prev_ .bReportId = XBOX_OUTPUT_REPORT_ID_RUMBLE;
399
+ controller.output_prev_ .bSize = 2 + sizeof (controller.output_prev_ .Rumble );
399
400
controller.output_prev_ .Rumble .wLeftMotorSpeed = _byteswap_ushort (LargeMotor); // why do these need to be byteswapped???
400
401
controller.output_prev_ .Rumble .wRightMotorSpeed = _byteswap_ushort (SmallMotor);
401
402
402
403
{
403
404
std::lock_guard<std::mutex> guard (usb_mutex_);
404
405
libusb_control_transfer (controller.usb_handle_ , LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,
405
- HID_SET_REPORT, (HID_REPORT_TYPE_OUTPUT << 8 ) | 0x00 , 0 , (unsigned char *)&controller.output_prev_ , sizeof (XboxOutputReport), 1000 );
406
+ HID_SET_REPORT, (HID_REPORT_TYPE_OUTPUT << 8 ) | 0x00 , 0 , (unsigned char *)&controller.output_prev_ , controller.output_prev_ .bSize , 1000 );
407
+ }
408
+
409
+ memset (&controller.output_prev_ , 0 , sizeof (XboxOutputReport));
410
+ controller.output_prev_ .bReportId = XBOX_OUTPUT_REPORT_ID_LED;
411
+ controller.output_prev_ .bSize = 2 + sizeof (controller.output_prev_ .LED );
412
+ switch (LedNumber) {
413
+ case 0 : controller.output_prev_ .LED .bAnimationId = LED_ANIMATION_ID_ON_1; break ;
414
+ case 1 : controller.output_prev_ .LED .bAnimationId = LED_ANIMATION_ID_ON_2; break ;
415
+ case 2 : controller.output_prev_ .LED .bAnimationId = LED_ANIMATION_ID_ON_3; break ;
416
+ case 3 : controller.output_prev_ .LED .bAnimationId = LED_ANIMATION_ID_ON_4; break ;
417
+ default : controller.output_prev_ .LED .bAnimationId = LED_ANIMATION_ID_ALL_OFF;
418
+ }
419
+
420
+ {
421
+ std::lock_guard<std::mutex> guard (usb_mutex_);
422
+ libusb_control_transfer (controller.usb_handle_ , LIBUSB_ENDPOINT_OUT | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE,
423
+ HID_SET_REPORT, (HID_REPORT_TYPE_OUTPUT << 8 ) | 0x00 , 0 , (unsigned char *)&controller.output_prev_ , controller.output_prev_ .bSize , 1000 );
406
424
}
407
425
408
426
break ;
0 commit comments