USB HID デバイスにデータを書き込むプログラムがあります。USB デバイスからデータを受信するとusblib
、デリゲート イベントを通じてライブラリからコールバックを受け取りますDataRecievedEventHandler
。
私は割り込みを使用してファームウェアでプログラミングすることに慣れているので、できるようになります
while(!flag); // Will continue when interrupt triggers and change the flag
配列要素を要素ごとに USB に書き込み、各配列要素の後にデバイスからの戻りを待ちたい
for (int i = 0; i > 16; i++)
{
sendUsbData(array[i]);
while(!receivedComplete);
// Wait for response from USB before transmitting next iteration
}
問題は、そのwhile
ループでスプールしているときにコールバックがトリガーされないことです。この種の操作を行う方法について何か提案はありますか?
USB通信に使っているライブラリはこれと同じです。SpecifiedDevice.csには、public void SendData(byte[] data)
バイト配列を送信するために使用しているメソッドがあります。
送信方法:
public void sendUsbData(byte _txData)
{
byte[] txData = new byte[this.usb.SpecifiedDevice.OutputReportLength];
txData[1] = 0x50; // 0x50 = loopback command. Element 0 is always 0x00
int pos = 2;
foreach (byte b in _flashData)
{
txData[pos] = b;
pos++;
}
this.usb.SpecifiedDevice.SendData(txData);
}
USB からデータを受信すると、コールバックusb_OnDataRecieved
が呼び出されます。
private void usb_OnDataRecieved(object sender, DataRecievedEventArgs args)
{
this.ParseReceivePacket(args.data); // Format to string and print to textbox
/*public bool*/receiveComplete = true;
}