У меня есть программа, которая записывает данные на USB-устройство HID. Когда данные принимаются с устройства USB, я получаю обратный вызов из библиотеки usblib
через событие делегирования DataRecievedEventHandler
.Слушайте синхронные обратные вызовы с C#
Я привык к программированию на прошивке с прерываниями, так что я могу сделать
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, совпадает с this one. В 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;
}
Можете ли вы представить фактический код в 'sendUsbData' и код что обновляет 'receivedFlagRaised'? – meilke
there you go @meilke – chwi
Вы когда-нибудь получали обратный вызов? Плюс: 'receivedFlagRaised' не' receiveComplete'. – meilke