public Ps3UsbDeviceInterface(Ps3UsbDeviceInfo deviceInfo) { _deviceInfo = Guard.NotNull(deviceInfo, nameof(deviceInfo)); var fileHandle = INVALID_HANDLE_VALUE; var preparsedData = INVALID_HANDLE_VALUE; var caps = new HIDP_CAPS(); var success = false; try { fileHandle = CreateFile( deviceInfo.DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, IntPtr.Zero ); if (fileHandle == INVALID_HANDLE_VALUE) { CheckError(false); } CheckError(HidD_GetPreparsedData(fileHandle, out preparsedData)); var status = HidP_GetCaps(preparsedData, caps); if (status != NTSTATUS.HIDP_STATUS_SUCCESS) { throw new Win32Exception($"HidP_GetCaps returned non-success status code {status}."); } _fileHandle = fileHandle; _caps = caps; _fileStream = new FileStream(new SafeFileHandle(_fileHandle, false), FileAccess.ReadWrite, 4096, true); _inputBuffer = new byte[caps.InputReportByteLength]; _inputData = new Ps3InputData(_inputBuffer); success = true; } finally { if (preparsedData != INVALID_HANDLE_VALUE) { HidD_FreePreparsedData(preparsedData); } if (!success) { if (fileHandle != INVALID_HANDLE_VALUE) { CloseHandle(fileHandle); } } } }
public override ControlEvent UpdateValue(Ps3InputData data) { var b = data.GetByte(_index); if (b == _byte) return null; _byte = b; var value = _value = b / 255f; return new ControlEvent(Ps3ControlInfo.ControlId, value); }
public override ControlEvent UpdateValue(Ps3InputData data) { var b = data.GetBit(_index, _bitMask); if (b == _bit) { return(null); } _bit = b; var value = _value = b ? 1f : 0f; return(new ControlEvent(Ps3ControlInfo.ControlId, value)); }
public override ControlEvent UpdateValue(Ps3InputData data) { var b = data.GetByte(_index); if (b == _byte) { return(null); } _byte = b; var value = _value = (b - 127.5f) / 127.5f; return(new ControlEvent(Ps3ControlInfo.ControlId, value)); }
public override ControlEvent UpdateValue(Ps3InputData data) { var b = data.GetDPad() == _dPadValue; if (b == _bit) { return(null); } _bit = b; var value = _value = b ? 1f : 0f; return(new ControlEvent(Ps3ControlInfo.ControlId, value)); }
public abstract ControlEvent UpdateValue(Ps3InputData data);