private static void InputReportReceived(HidDevice sender, HidInputReportReceivedEventArgs args)
{
var dPad = (int)args.Report.GetNumericControl(0x01, 0x39).Value;
var lstickX = args.Report.GetNumericControl(0x01, 0x30).Value - 32768;
var lstickY = args.Report.GetNumericControl(0x01, 0x31).Value - 32768;
var rstickX = args.Report.GetNumericControl(0x01, 0x33).Value - 32768;
var rstickY = args.Report.GetNumericControl(0x01, 0x34).Value - 32768;
var lt = (int)Math.Max(0, args.Report.GetNumericControl(0x01, 0x32).Value - 32768);
var rt = (int)Math.Max(0, -1 * (args.Report.GetNumericControl(0x01, 0x32).Value - 32768));
foreach (var btn in args.Report.ActivatedBooleanControls) //StartAsync = 7, Back = 6
{
var id = (int)(btn.Id - 5);
if (id < 4)
{
FunctionButtonChanged?.Invoke(id);
}
else if (id >= 4 && id < 6)
{
BumperButtonChanged?.Invoke(id);
}
else
{
FunctionButtonChanged?.Invoke(id);
}
}
if (_leftTrigger != lt)
{
LeftTriggerChanged?.Invoke(lt);
_leftTrigger = lt;
}
if (_rightTrigger != rt)
{
RightTriggerChanged?.Invoke(rt);
_rightTrigger = rt;
}
var lStickMagnitude = GetMagnitude(lstickX, lstickY);
var rStickMagnitude = GetMagnitude(rstickX, rstickY);
var vector = new ControllerVector
{
Direction = CoordinatesToDirection(lstickX, lstickY),
Magnitude = lStickMagnitude
};
if (!_leftStickDirectionVector.Equals(vector) && LeftDirectionChanged != null)
{
_leftStickDirectionVector = vector;
LeftDirectionChanged(_leftStickDirectionVector);
}
vector = new ControllerVector
{
Direction = CoordinatesToDirection(rstickX, rstickY),
Magnitude = rStickMagnitude
};
if (!_rightStickDirectionVector.Equals(vector) && RightDirectionChanged != null)
{
_rightStickDirectionVector = vector;
RightDirectionChanged(_rightStickDirectionVector);
}
vector = new ControllerVector
{
Direction = (ControllerDirection)dPad,
Magnitude = 10000
};
if (_dpadDirectionVector.Equals(vector) || DpadDirectionChanged == null)
{
return;
}
_dpadDirectionVector = vector;
DpadDirectionChanged(vector);
}