Самый эффективный способ передачи 32768 значений int16_t через USB? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть проект, который выдает 32768 значений int16_t каждые 1,125 секунды. Какой самый эффективный способ «упаковать» их для передачи через 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, чтобы я мог выполнить некоторые БПФ.

Я признаю, что прямо сейчас я действительно взломал это вместе и надеюсь, что это сработает, но я бы хотел надежный и надежный способ сделать это правильно.

...