Beispiel #1
0
        public override Task WriteValueAsyncInternal(byte[] aValue,
                                                     ButtplugDeviceWriteOptions aOptions,
                                                     CancellationToken aToken = default(CancellationToken))
        {
            LastWritten.Add(new WriteData()
            {
                Value             = (byte[])aValue.Clone(),
                Endpoint          = aOptions.Endpoint,
                WriteWithResponse = aOptions.WriteWithResponse,
            });
            ValueWritten?.Invoke(this, new EventArgs());
            try
            {
                var valueStr = Encoding.UTF8.GetString(aValue, 0, aValue.Length);
                if (ExpectedNotify.ContainsKey(valueStr))
                {
                    InvokeDataReceived(new ButtplugDeviceDataEventArgs("tx", ExpectedNotify[valueStr]));
                }
            }
            catch
            {
                // noop.
            }

            return(Task.CompletedTask);
        }
 public override async Task WriteValueAsyncInternal(byte[] aValue, ButtplugDeviceWriteOptions aOptions,
                                                    CancellationToken aToken = default(CancellationToken))
 {
     if (aOptions.Endpoint != Endpoints.Tx)
     {
         throw new ButtplugDeviceException(BpLogger, "Device only supports the tx endpoint.");
     }
     await _device.WriteAsync(aValue, 0, aValue.Length, aToken);
 }
Beispiel #3
0
 public override async Task WriteValueAsyncInternal(byte[] aValue,
                                                    ButtplugDeviceWriteOptions aOptions,
                                                    CancellationToken aToken = default(CancellationToken))
 {
     // Both Hid and Serial only have one outgoing endpoint.
     if (aOptions.Endpoint != Endpoints.Tx)
     {
         throw new ButtplugDeviceException(BpLogger, "HidDevice doesn't support any write endpoint except the default.");
     }
     await _stream.WriteAsync(aValue, 0, aValue.Length, aToken).ConfigureAwait(false);
 }
        public override async Task WriteValueAsyncInternal(byte[] aValue,
                                                           ButtplugDeviceWriteOptions aOptions,
                                                           CancellationToken aToken = default(CancellationToken))
        {
            if (!_indexedChars.ContainsKey(aOptions.Endpoint))
            {
                throw new ButtplugDeviceException(BpLogger,
                                                  $"WriteValue using indexed characteristics called with invalid index {aOptions.Endpoint} on {Name}");
            }

            await WriteValueAsync(_indexedChars[aOptions.Endpoint], aValue, aOptions.WriteWithResponse, aToken).ConfigureAwait(false);
        }
Beispiel #5
0
 public override Task WriteValueAsyncInternal(byte[] aValue,
                                              ButtplugDeviceWriteOptions aOptions,
                                              CancellationToken aToken = default(CancellationToken))
 {
     LastWritten.Add(new WriteData()
     {
         Value             = (byte[])aValue.Clone(),
         Endpoint          = aOptions.Endpoint,
         WriteWithResponse = aOptions.WriteWithResponse,
     });
     ValueWritten?.Invoke(this, new EventArgs());
     return(Task.CompletedTask);
 }
        public override Task WriteValueAsyncInternal(byte[] aValue,
                                                     ButtplugDeviceWriteOptions aOptions,
                                                     CancellationToken aToken = default(CancellationToken))
        {
            if (aValue.Length != 4)
            {
                throw new ButtplugDeviceException(BpLogger, "XInput requires 4 byte inputs.");
            }

            // This assumes we're getting the values in the correct endianness for the platform when
            // reconstructing the ushorts.
            var v = new Vibration
            {
                LeftMotorSpeed  = BitConverter.ToUInt16(aValue, 0),
                RightMotorSpeed = BitConverter.ToUInt16(aValue, 2),
            };

            _device.SetVibration(v);

            return(Task.CompletedTask);
        }
Beispiel #7
0
        public override Task WriteValueAsyncInternal(byte[] aValue,
                                                     ButtplugDeviceWriteOptions aOptions = default(ButtplugDeviceWriteOptions),
                                                     CancellationToken aToken            = default(CancellationToken))
        {
            // todo Throw or bail if we have nothing to send.
            if (aOptions.Endpoint == Endpoints.TxVendorControl)
            {
                _device.ControlOut(
                    0x02 << 5 | // Vendor Type
                        0x01 |  // Interface Recipient
                        0x00,   // Out Enpoint
                        1,
                        aValue[0],
                        0);
            }
            else
            {
                throw new ButtplugDeviceException(BpLogger, $"Unknown endpoint {aOptions.Endpoint}");
            }

            return(Task.CompletedTask);
        }