private async Task <uint> SendCommand(byte[] cmd) { //Setup the pipe. UsbBulkOutPipe writePipe = _targetDevice.DefaultInterface.BulkOutPipes[1]; //not sure which one, lets try.. writePipe.WriteOptions |= UsbWriteOptions.ShortPacketTerminate; //Setup the stream. var stream = writePipe.OutputStream; DataWriter writer = new DataWriter(stream); //WriteAllData. writer.WriteBytes(cmd); //Push. UInt32 bytesWritten = 0; try { bytesWritten = await writer.StoreAsync(); } catch (Exception exception) { Debug.WriteLine(exception.Message.ToString()); } return(bytesWritten); }
/// <summary> /// Creates a packet to send to Fadecandy from a 64 byte array /// </summary> /// <param name="packetContents"></param> /// <returns></returns> private static async Task SendPackets(byte[] packetBytes) { UsbDevice usbDevice = FadecandyEventHandler.Current.Device; UsbBulkOutPipe writePipe = usbDevice.DefaultInterface.BulkOutPipes[0]; var stream = writePipe.OutputStream; DataWriter writer = new DataWriter(stream); writer.WriteBytes(packetBytes); uint bytesWritten = 0; try { bytesWritten = await writer.StoreAsync(); } catch (Exception exception) { MainPage.Current.AddMessage(exception.Message.ToString(), null); } finally { MainPage.Current.UpdateStatus($"Data written: {bytesWritten} bytes.", NotifyType.StatusMessage); } }
private async void OnDeviceAdded(DeviceWatcher watcher, DeviceInformation deviceInformation) { if (deviceInformation.Name.StartsWith("acA1920-40um") && deviceInformation.IsEnabled) { _targetDevice = await UsbDevice.FromIdAsync(deviceInformation.Id); foreach (var interf in _targetDevice.Configuration.UsbInterfaces) { if (interf.InterfaceNumber == 0) { _controlInPipe = interf.BulkInPipes[0]; _controlOutPipe = interf.BulkOutPipes[0]; } else if (interf.InterfaceNumber == 2) _streamInPipe = interf.BulkInPipes[0]; } OnConnected(EventArgs.Empty); } }
public async Task <bool> OpenAsync() { if (IsOpen) { return(true); // we're already open } // Calling this will "open" the device, blocking any other app from using it. // This will return null if another program already has the device open. usbDevice = await UsbDevice.FromIdAsync(DevicePath); if (usbDevice == null) { return(false); } cts = new CancellationTokenSource(); // https://msdn.microsoft.com/en-us/library/windows/hardware/dn303346(v=vs.85).aspx Version = (ushort)usbDevice.DeviceDescriptor.BcdDeviceRevision; pinConfigPipe = usbDevice.DefaultInterface.BulkOutPipes[0]; peripheralOutPipe = usbDevice.DefaultInterface.BulkOutPipes[1]; pinConfigWriter = new DataWriter(pinConfigPipe.OutputStream); peripheralWriter = new DataWriter(peripheralOutPipe.OutputStream); pinEventPipe = usbDevice.DefaultInterface.BulkInPipes[0]; pinEventReader = new DataReader(pinEventPipe.InputStream); peripheralInPipe = usbDevice.DefaultInterface.BulkInPipes[1]; peripheralReader = new DataReader(peripheralInPipe.InputStream); IsOpen = true; pinEventListerner(cts.Token); Debug.WriteLine("Connection opened"); return(true); }
public async Task<bool> OpenAsync() { if (IsOpen) return true; // we're already open // Calling this will "open" the device, blocking any other app from using it. // This will return null if another program already has the device open. this.usbDevice = await UsbDevice.FromIdAsync(DevicePath); if (this.usbDevice == null) return false; cts = new CancellationTokenSource(); // https://msdn.microsoft.com/en-us/library/windows/hardware/dn303346(v=vs.85).aspx Version = (short)usbDevice.DeviceDescriptor.BcdDeviceRevision; pinConfigPipe = usbDevice.DefaultInterface.BulkOutPipes[0]; pinConfigPipe.WriteOptions |= UsbWriteOptions.ShortPacketTerminate; peripheralOutPipe = usbDevice.DefaultInterface.BulkOutPipes[1]; peripheralOutPipe.WriteOptions |= UsbWriteOptions.ShortPacketTerminate; pinConfigWriter = new DataWriter(pinConfigPipe.OutputStream); peripheralWriter = new DataWriter(peripheralOutPipe.OutputStream); pinEventPipe = usbDevice.DefaultInterface.BulkInPipes[0]; pinEventReader = new DataReader(pinEventPipe.InputStream); peripheralInPipe = usbDevice.DefaultInterface.BulkInPipes[1]; peripheralReader = new DataReader(peripheralInPipe.InputStream); isOpen = true; pinEventListerner(cts.Token); Debug.WriteLine("Connection opened"); return true; }