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); }
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); }
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); }
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); }