interrupt safe USB send function

This commit is contained in:
Jan Käberich 2022-08-21 22:20:59 +02:00
parent 5137457545
commit c05d248f83
13 changed files with 38 additions and 73 deletions

View file

@ -581,16 +581,16 @@ void Device::transmissionFinished(TransmissionResult result)
// remove transmitted packet
// qDebug() << "Transmission finsished (" << result << "), queue at " << transmissionQueue.size() << " Outstanding ACKs:"<<outstandingAckCount;
if(transmissionQueue.empty()) {
qWarning() << "transmissionFinished with empty transmission queue, stray Ack?";
qWarning() << "transmissionFinished with empty transmission queue, stray Ack? Result:" << result;
return;
}
auto t = transmissionQueue.dequeue();
if(result == TransmissionResult::Timeout) {
qWarning() << "transmissionFinished with timeout";
qWarning() << "transmissionFinished with timeout, packettype:" << (int) t.packet.type << "Device:" << serial();
}
if(result == TransmissionResult::Nack) {
qWarning() << "transmissionFinished with NACK";
}
auto t = transmissionQueue.dequeue();
if(t.callback) {
t.callback(result);
}

View file

@ -118,7 +118,8 @@ private:
USBInBuffer *dataBuffer;
USBInBuffer *logBuffer;
using Transmission = struct {
class Transmission {
public:
Protocol::PacketInfo packet;
unsigned int timeout;
std::function<void(TransmissionResult)> callback;