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);
        }
Beispiel #3
0
        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));
        }
Beispiel #5
0
        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));
        }
Beispiel #6
0
 public abstract ControlEvent UpdateValue(Ps3InputData data);