Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 16 additions & 18 deletions src/input/target/dualsense.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,7 @@ pub struct DualSenseDevice {
context: u8,
hardware: DualSenseHardware,
queued_events: Vec<ScheduledNativeEvent>,
last_written: Option<Vec<u8>>,
}

impl DualSenseDevice {
Expand All @@ -137,6 +138,7 @@ impl DualSenseDevice {
context: Default::default(),
hardware,
queued_events: Vec::new(),
last_written: None,
Comment thread
pastaq marked this conversation as resolved.
})
}

Expand Down Expand Up @@ -193,26 +195,21 @@ impl DualSenseDevice {

/// Write the current device state to the device
fn write_state(&mut self) -> Result<(), Box<dyn Error>> {
match self.state {
PackedInputDataReport::Usb(state) => {
let data = state.pack()?;
let data = match self.state {
PackedInputDataReport::Usb(state) => state.pack()?.to_vec(),
PackedInputDataReport::Bluetooth(state) => state.pack()?.to_vec(),
};

// Write the state to the virtual HID
if let Err(e) = self.device.write(&data) {
let err = format!("Failed to write input data report: {:?}", e);
return Err(err.into());
}
}
PackedInputDataReport::Bluetooth(state) => {
let data = state.pack()?;
if self.last_written.as_ref() == Some(&data) {
Comment thread
pastaq marked this conversation as resolved.
return Ok(());
}

// Write the state to the virtual HID
if let Err(e) = self.device.write(&data) {
let err = format!("Failed to write input data report: {:?}", e);
return Err(err.into());
}
}
};
// Write the state to the virtual HID
if let Err(e) = self.device.write(&data) {
let err = format!("Failed to write input data report: {:?}", e);
return Err(err.into());
}
self.last_written = Some(data);

Ok(())
}
Expand Down Expand Up @@ -1073,6 +1070,7 @@ impl TargetOutputDevice for DualSenseDevice {
// send UHID_INPUT events to the kernel.
uhid_virt::OutputEvent::Open => {
log::debug!("Open event received");
self.last_written = None;
Comment thread
sunshineinabox marked this conversation as resolved.
Outdated
Ok(vec![])
}
// This is sent when there are no more processes which read the HID data. It is
Expand Down
Loading