从串行AT设备读取数据

时间:2017-08-07 13:56:32

标签: c# uwp serial-port at-command

我能够从串行AT设备(即只说“AT”命令的串行设备)读取数据的唯一方法是一次读取一个字节。

问题在于,如果我尝试读取的内容超过了从设备获取的代码冻结,则LoadAsync方法永远不会返回。我的解决方案是一次读取一个字节并使用取消令牌,如果它在几毫秒后没有返回,它将取消该任务。

 public async Task<DeviceResponse> ReadStringInBatchAsync(int timeoutMilliseconds)
        {

            readCancellationTokenSource = new CancellationTokenSource();
            readCancellationTokenSource.CancelAfter(timeoutMilliseconds);


            Task<UInt32> loadAsyncTask;

            DeviceDataReader.InputStreamOptions = InputStreamOptions.Partial;
            UInt32 bytesRead = 0;
            string response = string.Empty;
            try
            {
                do
                {
                    loadAsyncTask = DeviceDataReader.LoadAsync(1).AsTask(readCancellationTokenSource.Token);
                    bytesRead = await loadAsyncTask;
                    response += DeviceDataReader.ReadString(bytesRead);
                } while (bytesRead > 0);
            }
            catch (Exception) { }
            readCancellationTokenSource?.Dispose();

            return new DeviceResponse() { FullResponse = response };

        }

知道为什么会这样吗?我尝试使用非AT设备,读取超过1个字节没有问题。我也尝试过两种不同的AT设备,它们的行为方式相同。

0 个答案:

没有答案