Skip to content

Commit

Permalink
Added support for RPCS3/rpcs3#9861
Browse files Browse the repository at this point in the history
  • Loading branch information
nefarius committed Feb 28, 2021
1 parent 0e82998 commit 0650b06
Showing 1 changed file with 40 additions and 23 deletions.
63 changes: 40 additions & 23 deletions sys/DsHidMiniDrv.c
Original file line number Diff line number Diff line change
Expand Up @@ -874,13 +874,20 @@ DsHidMini_WriteReport(
break;
}

//
// External output report overrides internal behaviour, keep note
//
pDevCtx->OutputReport.Mode = Ds3OutputReportModeWriteReportPassThrough;

DS3_SET_SMALL_RUMBLE_DURATION(pDevCtx, Packet->reportBuffer[4]);
DS3_SET_SMALL_RUMBLE_STRENGTH(pDevCtx, Packet->reportBuffer[5]);

DS3_SET_LARGE_RUMBLE_DURATION(pDevCtx, Packet->reportBuffer[6]);
DS3_SET_LARGE_RUMBLE_STRENGTH(pDevCtx, Packet->reportBuffer[7]);

DS3_SET_LED(pDevCtx, Packet->reportBuffer[12]);

(void)Ds_SendOutputReport(pDevCtx);

break;

Expand Down Expand Up @@ -1111,9 +1118,12 @@ VOID DsUsb_EvtUsbInterruptPipeReadComplete(
{
pDevCtx->BatteryStatus = battery;

DS3_USB_SET_LED(pDevCtx->Connection.Usb.OutputReport, DS3_LED_4);
if (pDevCtx->OutputReport.Mode == Ds3OutputReportModeDriverHandled)
{
DS3_USB_SET_LED(pDevCtx->Connection.Usb.OutputReport, DS3_LED_4);

(void)Ds_SendOutputReport(pDevCtx);
(void)Ds_SendOutputReport(pDevCtx);
}
}
//
// If charging, cycle LEDs
Expand Down Expand Up @@ -1149,9 +1159,12 @@ VOID DsUsb_EvtUsbInterruptPipeReadComplete(
led = DS3_LED_1;
}

DS3_USB_SET_LED(pDevCtx->Connection.Usb.OutputReport, led);
if (pDevCtx->OutputReport.Mode == Ds3OutputReportModeDriverHandled)
{
DS3_USB_SET_LED(pDevCtx->Connection.Usb.OutputReport, led);

(void)Ds_SendOutputReport(pDevCtx);
(void)Ds_SendOutputReport(pDevCtx);
}
}
}
else
Expand Down Expand Up @@ -1256,6 +1269,7 @@ void DsBth_HidInterruptReadRequestCompletionRoutine(

//
// Handle special case of SIXAXIS.SYS emulation
// TODO: fix sensor translation
//
if (pDevCtx->Configuration.HidDeviceMode == DsHidMiniDeviceModeSixaxisCompatible)
{
Expand Down Expand Up @@ -1312,27 +1326,30 @@ void DsBth_HidInterruptReadRequestCompletionRoutine(
//
if (DS3_BTH_GET_LED(outputBuffer) != 0x00)
{
switch (battery)
if (pDevCtx->OutputReport.Mode == Ds3OutputReportModeDriverHandled)
{
case DsBatteryStatusCharged:
case DsBatteryStatusFull:
case DsBatteryStatusHigh:
DS3_BTH_SET_LED(outputBuffer, DS3_LED_4);
break;
case DsBatteryStatusMedium:
DS3_BTH_SET_LED(outputBuffer, DS3_LED_3);
break;
case DsBatteryStatusLow:
DS3_BTH_SET_LED(outputBuffer, DS3_LED_2);
break;
case DsBatteryStatusDying:
DS3_BTH_SET_LED(outputBuffer, DS3_LED_1);
break;
default:
break;
switch (battery)
{
case DsBatteryStatusCharged:
case DsBatteryStatusFull:
case DsBatteryStatusHigh:
DS3_BTH_SET_LED(outputBuffer, DS3_LED_4);
break;
case DsBatteryStatusMedium:
DS3_BTH_SET_LED(outputBuffer, DS3_LED_3);
break;
case DsBatteryStatusLow:
DS3_BTH_SET_LED(outputBuffer, DS3_LED_2);
break;
case DsBatteryStatusDying:
DS3_BTH_SET_LED(outputBuffer, DS3_LED_1);
break;
default:
break;
}

(void)Ds_SendOutputReport(pDevCtx);
}

(void)Ds_SendOutputReport(pDevCtx);
}

//
Expand Down

0 comments on commit 0650b06

Please sign in to comment.