通过USB传输32768 int16_t值的最有效方法?

时间:2018-09-10 20:35:49

标签: c# c++ uwp usb

我有一个项目,每1.125秒产生32768个int16_t值。将这些“打包”以通过USB传输的最有效方法是什么?目前,我正在使用每个值之间的逗号(以及每个4096个值的分号,最后一个字符为“ X”)抽出它们。在我看来,主机不会知道给定的值是一两个字节,因此预分配缓冲区并等待其填充将无法正常工作。

如果有帮助,则USB设备使用C ++编程,主机使用C#编程。在主机端,我从UWP示例中获得了此功能:

private async Task ReadAsync(CancellationToken cancellationToken)
    {

        Task<UInt32> loadAsyncTask;

        uint ReadBufferLength = 98305;

        // Don't start any IO if we canceled the task
        lock (ReadCancelLock)
        {
            cancellationToken.ThrowIfCancellationRequested();

            // Cancellation Token will be used so we can stop the task operation explicitly
            // The completion function should still be called so that we can properly handle a canceled task
            DataReaderObject.InputStreamOptions = InputStreamOptions.Partial;
            loadAsyncTask = DataReaderObject.LoadAsync(ReadBufferLength).AsTask(cancellationToken);
        }

        UInt32 bytesRead = await loadAsyncTask;
        if (bytesRead > 0)
        {
            ReadBytesTextBlock.Text += DataReaderObject.ReadString(bytesRead);
            ReadBytesCounter += bytesRead;
            UpdateReadBytesCounterView();

        }
        rootPage.NotifyUser("Read completed - " + bytesRead.ToString() + " bytes were read", NotifyType.StatusMessage);
    }

有没有一种方法可以让我阅读直到检测到某个字符(例如“ X”)?最终,这些值需要解析为int16_t数组,以便我可以执行一些FFT。

我承认,现在我真的在一起破解并希望它能起作用,但是我希望有一种可靠且强大的方法来正确执行此操作。

0 个答案:

没有答案