我正在研发USB通讯UWP APP。我可以毫无问题地获得SerialDevice实例,但是当我调用myDevice.OutputStream.FlushAsync()时,我没有实现异常。
这是我的代码
private async void EstablishConButton_Click(object sender, RoutedEventArgs e)
{
var DeviceSelector = SerialDevice.GetDeviceSelector();
var Devices = await DeviceInformation.FindAllAsync(DeviceSelector);
var deviceInfo = Devices.FirstOrDefault();
SerialDevice myDevice = await SerialDevice.FromIdAsync(deviceInfo.Id);
if (myDevice == null)
{
Debugg("Device not found!");
return;
}
Debugg("Device found!");
byte[] buffer = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05 , 0x05 , 0x05 , 0x05 , 0x05 , 0x05 };
var rBuffer = (buffer).AsBuffer();
await myDevice.OutputStream.WriteAsync(rBuffer);
await myDevice.OutputStream.FlushAsync();
var responseBufer = (new byte[11]).AsBuffer();
await myDevice.InputStream.ReadAsync(responseBufer, 11,InputStreamOptions.None);
}
我的清单:
<DeviceCapability Name="usb">
<Device Id="vidpid:0403 6015">
<Function Type="name:vendorSpecific" />
</Device>
</DeviceCapability>
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
感谢您的回复
答案 0 :(得分:0)
它在msdn上说&#34;要写入数据,首先使用OutputStream属性从SerialDevice对象获取输出流,然后使用DataWriter对象写入实际的缓冲区。&#34; < / p>
因此,尝试使用DataWriter,您的代码将如下所示:
var DeviceSelector = SerialDevice.GetDeviceSelector();
var Devices = await DeviceInformation.FindAllAsync(DeviceSelector);
var deviceInfo = Devices.FirstOrDefault();
SerialDevice myDevice = await SerialDevice.FromIdAsync(deviceInfo.Id);
if (myDevice == null)
{
Debug.WriteLine("Device not found!");
return;
}
Debug.WriteLine("Device found!");
byte[] buffer = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05 };
var rBuffer = (buffer).AsBuffer();
using (var dataWriter = new DataWriter(myDevice.OutputStream))
{
dataWriter.WriteBuffer(rBuffer);
}
var responseBufer = (new byte[11]).AsBuffer();
await myDevice.InputStream.ReadAsync(responseBufer, 11, InputStreamOptions.None);
在这里你不必调用dataWriter.FlushAsync(),因为它假设在处理时自动刷新,但是如果出现任何问题 - 添加刷新并再次检查。
答案 1 :(得分:0)
讨论很晚,但在遇到同样的问题后,在我的搜索中没有发现任何有用的东西,这就是我的结论......
问题在于实际上并没有使用写命令发送字节(至少不是立即发送)。
对 writer.FlushAsync() 的调用确实导致字节流出,但随后抛出 NotImplementedException。
答案是:writer.StoreAsync()。这会导致字节立即传输,更重要的是,不会引发异常。