Source

Target

Commits (1)
  • Denis Shienkov's avatar
    Windows: Fix false ResourceError triggering for CDC ACM devices · 2bcac223
    Denis Shienkov authored
    
    When transmitted data to the USB serial port of the class CDC ACM, is
    triggered an unexpected TXEMPTY event, which we didn't add to a mask of
    events in SetCommMask(). In this case handler processCompletionRoutine()
    interpreted it as ResourceError.
    
    This DCD ACM devices over USB connection using the Microsoft USB serial
    driver (usbser.sys). Thus, allegedly, this behavior identical for all
    standard CDC ACM devices on Windows.
    
    Solution - check on unexpected EV_TXEMPTY flag and immediately return
    true from processCompletionRoutine().
    
    Thanks to Josh Handley.
    
    Task-number: QTPLAYGROUND-22
    Change-Id: Iac3eccc79e243e5bbf1a34cd44458c9ad265a5db
    Reviewed-by: default avatarSergey Belyashov <Sergey.Belyashov@gmail.com>
    Reviewed-by: default avatarLaszlo Papp <lpapp@kde.org>
    2bcac223
Showing with 9 additions and 2 deletions
......@@ -146,8 +146,15 @@ public:
// Check for unexpected event. This event triggered when pulled previously
// opened device from the system, when opened as for not to read and not to
// write options and so forth.
if ((triggeredEventMask == 0)
|| ((originalEventMask & triggeredEventMask) == 0)) {
if (triggeredEventMask == 0)
error = true;
// Workaround for standard CDC ACM serial ports, for which triggered an
// unexpected event EV_TXEMPTY at data transmission.
if ((originalEventMask & triggeredEventMask) == 0) {
if (triggeredEventMask == EV_TXEMPTY) // it is not error
return true;
error = true;
}
......