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);
        }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 4
0
        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;
        }