From 7615b30b813e8ebe1221e386c63043410926a775 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Vauboin Date: Wed, 6 Mar 2019 13:44:20 +0100 Subject: [PATCH] show split transactions --- usbaggregator.cpp | 5 +++++ usbpacket.cpp | 4 ++++ usbproxy.cpp | 13 +++++++++++-- usbtransaction.cpp | 11 ++++++++++- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/usbaggregator.cpp b/usbaggregator.cpp index fbaa087..8e060b2 100644 --- a/usbaggregator.cpp +++ b/usbaggregator.cpp @@ -148,6 +148,11 @@ void USBAggregator::append(USBPacket* packet) _token = packet; _state = TRANS_TOKEN; } + } else if (pid == PID_SPLIT) { + /* Split transaction */ + endTransaction(); + _token = packet; + endTransaction(); } else if (pid == PID_SOF) { /* Catch SOF, nothing to do really */ } else { diff --git a/usbpacket.cpp b/usbpacket.cpp index 46a7ab8..3bc6316 100644 --- a/usbpacket.cpp +++ b/usbpacket.cpp @@ -167,6 +167,10 @@ const QString USBPacket::details() switch(getType()) { case PID_TYPE_SPECIAL: + if(getPid() == PID_SPLIT) { + details = QString("PID:\t0x%1\n") + .arg(m_Pid, 2, 16, QChar('0')); + } break; case PID_TYPE_TOKEN: diff --git a/usbproxy.cpp b/usbproxy.cpp index 99f0d42..7141f5a 100644 --- a/usbproxy.cpp +++ b/usbproxy.cpp @@ -16,17 +16,24 @@ void USBProxy::setFilter(const USBProxyFilter *filter) bool USBProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { + QModelIndex index = sourceModel()->index(sourceRow, RECORD_NAME, sourceParent); + if (!m_filter) { return true; } - /* Search inside record name */ + /* Search inside record name: SOF */ - QModelIndex index = sourceModel()->index(sourceRow, RECORD_NAME, sourceParent); if (sourceModel()->data(index).toString().contains("SOF")) { // FIXME check pid type instead of string matching return m_filter->sof; } + /* Search inside record name: SPLIT */ + + if (sourceModel()->data(index).toString().contains("SPLIT")) { // FIXME check pid type instead of string matching + return true; // XXX FIXME SPLIT filter not yet implemented + } + /* Search inside record status */ /* Accept if parent transaction is selected */ @@ -41,6 +48,8 @@ bool USBProxy::filterAcceptsRow(int sourceRow, return m_filter->nakOut; } else if (item->data(RECORD_NAME).toString().contains("SETUP")) { return m_filter->nakSetup; + } else { + return true; } } else { return true; diff --git a/usbtransaction.cpp b/usbtransaction.cpp index d41e4e7..518694f 100644 --- a/usbtransaction.cpp +++ b/usbtransaction.cpp @@ -21,7 +21,13 @@ QVariant USBTransaction::data(int column) const case RECORD_ENDPOINT: return QString("%1").arg(m_token->m_Endpoint, 2, 16, QChar('0')); case RECORD_STATUS: - return m_handshake ? m_handshake->getPidStr() : "Incomplete"; + if (m_handshake) { + return m_handshake->getPidStr(); + } else if (m_token->getPid() == PID_SPLIT) { + return QString(""); + } else { + return QString("Incomplete"); + } case RECORD_LENGTH: return m_data ? m_data->m_Data.count() : 0; case RECORD_SUMMARY: @@ -49,6 +55,9 @@ QBrush USBTransaction::background() const return !ack ? QBrush(QColor(165, 214, 167)) : QBrush(QColor(102, 187, 106)); case PID_OUT: return !ack ? QBrush(QColor(144, 202, 249)) : QBrush(QColor(66, 165, 245)); + default: + // XXX FIXME PID_SPLIT color not implemented + return QBrush(); } } return QBrush();