- Proper gyro settings (may need re-looking at, but good enough right now)

This commit is contained in:
David Khachaturov 2020-04-22 21:01:01 +01:00
parent cce68c35c3
commit da9680eb9a

View file

@ -224,6 +224,7 @@ namespace BetterJoyForCemu {
public IXbox360Controller xin; public IXbox360Controller xin;
public IDualShock4Controller ds4; public IDualShock4Controller ds4;
ushort ds4_ts = 0; ushort ds4_ts = 0;
ulong lag;
int rumblePeriod = Int32.Parse(ConfigurationManager.AppSettings["RumblePeriod"]); int rumblePeriod = Int32.Parse(ConfigurationManager.AppSettings["RumblePeriod"]);
int lowFreq = Int32.Parse(ConfigurationManager.AppSettings["LowFreqRumble"]); int lowFreq = Int32.Parse(ConfigurationManager.AppSettings["LowFreqRumble"]);
@ -492,6 +493,9 @@ namespace BetterJoyForCemu {
Timestamp += (ulong)lag * 5000; // add lag once Timestamp += (ulong)lag * 5000; // add lag once
ProcessButtonsAndStick(raw_buf); ProcessButtonsAndStick(raw_buf);
// process buttons here to have them affect DS4
DoThingsWithButtons();
int newbat = battery; int newbat = battery;
battery = (raw_buf[2] >> 4) / 2; battery = (raw_buf[2] >> 4) / 2;
if (newbat != battery) if (newbat != battery)
@ -502,11 +506,18 @@ namespace BetterJoyForCemu {
packetCounter++; packetCounter++;
if (Program.server != null) if (Program.server != null)
Program.server.NewReportIncoming(this); Program.server.NewReportIncoming(this);
SetDS4ReportState(n);
if (ds4 != null) {
try {
ds4.SubmitReport();
} catch (Exception e) {
// ignore /shrug
}
}
} }
DoThingsWithButtons();
SetXInputReportState(); SetXInputReportState();
SetDS4ReportState();
// no reason to send XInput reports so often // no reason to send XInput reports so often
if (xin != null) { if (xin != null) {
@ -517,13 +528,6 @@ namespace BetterJoyForCemu {
} }
} }
if (ds4 != null) {
try {
ds4.SubmitReport();
} catch (Exception e) {
// ignore /shrug
}
}
if (ts_en == raw_buf[1] && !isSnes) { if (ts_en == raw_buf[1] && !isSnes) {
form.AppendTextBox("Duplicate timestamp enqueued.\r\n"); form.AppendTextBox("Duplicate timestamp enqueued.\r\n");
@ -886,7 +890,7 @@ namespace BetterJoyForCemu {
} }
// TODO: Check sticks AND/OR DPAD - wrong translation // TODO: Check sticks AND/OR DPAD - wrong translation
private void SetDS4ReportState() { private void SetDS4ReportState(int n) {
if (ds4 == null) if (ds4 == null)
return; return;
@ -1001,16 +1005,20 @@ namespace BetterJoyForCemu {
} }
// Gyro and accel // Gyro and accel
ds4_ts += 188; // 1.5ms // Timestamp is in us. DS4 is in 5.33us
ushort dt = (ushort) ((Timestamp - lag)/1000);
ds4_ts += (ushort) ((n == 0) ? 5 : 4);
ds4.SetIMUTimestamp(ds4_ts); ds4.SetIMUTimestamp(ds4_ts);
Vector3 gyr = GetGyro(); //* 1024f; Vector3 gyr = GetGyro() * 16;
ds4.SetIMUValue(DualShock4IMU.GyroX, (short) gyr.X); ds4.SetIMUValue(DualShock4IMU.GyroX, (short) gyr.Y);
ds4.SetIMUValue(DualShock4IMU.GyroY, (short) gyr.Y); ds4.SetIMUValue(DualShock4IMU.GyroY, (short) -gyr.Z);
ds4.SetIMUValue(DualShock4IMU.GyroZ, (short) gyr.Z); ds4.SetIMUValue(DualShock4IMU.GyroZ, (short) -gyr.X);
Vector3 acc = GetAccel() * 8192f; Vector3 acc = GetAccel() * 8192f;
ds4.SetIMUValue(DualShock4IMU.AccelX, (short) acc.X); ds4.SetIMUValue(DualShock4IMU.AccelX, (short) -acc.Y);
ds4.SetIMUValue(DualShock4IMU.AccelY, (short)-acc.Y); ds4.SetIMUValue(DualShock4IMU.AccelY, (short) acc.Z);
ds4.SetIMUValue(DualShock4IMU.AccelZ, (short)acc.Z); ds4.SetIMUValue(DualShock4IMU.AccelZ, (short) -acc.X);
lag = Timestamp;
} }
// Get Gyro/Accel data // Get Gyro/Accel data