bluetooth-mitm: add crude dualshock4 rumble

This commit is contained in:
ndeadly 2020-10-01 01:03:34 +02:00
parent 1f2d0dc6ba
commit d9550e2292
2 changed files with 21 additions and 3 deletions

View file

@ -46,6 +46,12 @@ namespace ams::controller {
return ams::ResultSuccess();
}
Result Dualshock4Controller::SetVibration(const SwitchRumbleData *left, const SwitchRumbleData *right) {
m_rumble_state.amp_motor_left = left->low_band_amp;
m_rumble_state.amp_motor_right = right->high_band_amp;
return this->PushRumbleLedState();
}
Result Dualshock4Controller::SetPlayerLed(uint8_t led_mask) {
uint8_t player_number;
R_TRY(LedsMaskToPlayerNumber(led_mask, &player_number));
@ -147,7 +153,10 @@ namespace ams::controller {
}
Result Dualshock4Controller::PushRumbleLedState(void) {
Dualshock4OutputReport0x11 report = {0xa2, 0x11, 0xc0, 0x20, 0xf3, 0x04, 0x00, 0x00, 0x00, m_led_colour.r, m_led_colour.g, m_led_colour.b};
Dualshock4OutputReport0x11 report = {0xa2, 0x11, 0xc0, 0x20, 0xf3, 0x04, 0x00,
m_rumble_state.amp_motor_right, m_rumble_state.amp_motor_left,
m_led_colour.r, m_led_colour.g, m_led_colour.b
};
report.crc = crc32Calculate(report.data, sizeof(report.data));
s_output_report.size = sizeof(report) - 1;

View file

@ -62,6 +62,11 @@ namespace ams::controller {
uint8_t counter : 6;
} __attribute__((packed));
struct Dualshock4RumbleData {
uint8_t amp_motor_left;
uint8_t amp_motor_right;
} __attribute__((packed));
struct Dualshock4OutputReport0x11 {
struct {
uint8_t data[75];
@ -125,12 +130,15 @@ namespace ams::controller {
};
Dualshock4Controller(const bluetooth::Address *address)
: EmulatedSwitchController(address), m_led_colour({0, 0, 0}) { };
: EmulatedSwitchController(address)
, m_led_colour({0, 0, 0})
, m_rumble_state({0, 0}) { };
Result Initialize(void);
Result SetVibration(const SwitchRumbleData *left, const SwitchRumbleData *right);
Result SetPlayerLed(uint8_t led_mask);
Result SetLightbarColour(RGBColour colour);
void UpdateControllerState(const bluetooth::HidReport *report);
private:
@ -142,6 +150,7 @@ namespace ams::controller {
Result PushRumbleLedState(void);
RGBColour m_led_colour;
Dualshock4RumbleData m_rumble_state;
};
}