2

私は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>

返信ありがとう

4

2 に答える 2

0

msdn では、「データを書き込むには、最初に OutputStream プロパティを使用して SerialDevice オブジェクトから出力ストリームを取得し、次に DataWriter オブジェクトを使用して実際のバッファーを書き込む」と述べています。

代わりに 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() を呼び出す必要はありません。これは、破棄中に自動的にフラッシュすると想定されているためですが、問題が発生した場合は、フラッシュを追加して再度確認してください。

于 2016-06-06T20:07:31.350 に答える