@startuml SAKDebuggerDataDriven
group Read bytes
    PhysicalDevice -> SAKDebuggerDevice: readyRead()
    activate SAKDebuggerDevice
        SAKDebuggerDevice -> SAKDebuggerDevice: readBytes()
        activate SAKDebuggerDevice
            SAKDebuggerDevice -> SAKDebuggerDevice: mask()
            SAKDebuggerDevice -> SAKDebuggerDevice: analyze()
            SAKDebuggerDevice -> SAKDebuggerOutput: bytesRead(QByteArray bytes)
            activate SAKDebuggerOutput
            SAKDebuggerOutput -> SAKDebuggerOutput: onBytesRead()
            deactivate SAKDebuggerOutput
            SAKDebuggerDevice -> SAKDebuggerStatistics: bytesRead(QByteArray bytes)
            activate SAKDebuggerStatistics
            SAKDebuggerStatistics -> SAKDebuggerStatistics: onBytesRead()
            deactivate SAKDebuggerStatistics
            SAKDebuggerDevice -> SAKDebuggerPlugins: bytesRead(QByteArray bytes)
            activate SAKDebuggerPlugins
            SAKDebuggerPlugins -> SAKDebuggerPlugins: onBytesRead()
            deactivate SAKDebuggerPlugins
        deactivate SAKDebuggerDevice
    deactivate SAKDebuggerDevice
end

group Write Bytes
    SAKDebuggerInput -> SAKDebuggerDevice: invokeWriteBytes(QByteArray bytes)
    activate SAKDebuggerDevice
        SAKDebuggerDevice -> SAKDebuggerDevice: writeBytes()
        activate SAKDebuggerDevice
            SAKDebuggerDevice -> SAKDebuggerDevice: mask()
            SAKDebuggerDevice -> SAKDebuggerDevice: writeBytes()
            SAKDebuggerDevice -> PhysicalDevice: writeBytes()
            SAKDebuggerDevice -> SAKDebuggerOutput: onBytesWritten(QByteArray bytes)
            activate SAKDebuggerOutput
            SAKDebuggerOutput -> SAKDebuggerOutput: onBytesWritten()
            deactivate SAKDebuggerOutput
            SAKDebuggerDevice -> SAKDebuggerStatistics: bytesRead(QByteArray bytes)
            activate SAKDebuggerStatistics
            SAKDebuggerStatistics -> SAKDebuggerStatistics: onBytesWritten()
            deactivate SAKDebuggerStatistics
            SAKDebuggerDevice -> SAKDebuggerPlugins: bytesWritten(QByteArray bytes)
            activate SAKDebuggerPlugins
            SAKDebuggerPlugins -> SAKDebuggerPlugins: onBytesWritten(QByteArray bytes)
            deactivate SAKDebuggerPlugins
        deactivate SAKDebuggerDevice
    deactivate SAKDebuggerDevice
end

group Write Bytes [cooked bytes]
SAKDebuggerPlugins -> SAKDebuggerDevice: invokeWriteCookedBytes(QByteArray bytes)
activate SAKDebuggerDevice
    activate SAKDebuggerDevice
            SAKDebuggerDevice -> SAKDebuggerDevice: mask()
            SAKDebuggerDevice -> SAKDebuggerDevice: writeBytes()
            SAKDebuggerDevice -> PhysicalDevice: writeBytes()
            SAKDebuggerDevice -> SAKDebuggerOutput: onBytesWritten(QByteArray bytes)
            activate SAKDebuggerOutput
            SAKDebuggerOutput -> SAKDebuggerOutput: onBytesWritten()
            deactivate SAKDebuggerOutput
            SAKDebuggerDevice -> SAKDebuggerStatistics: bytesRead(QByteArray bytes)
            activate SAKDebuggerStatistics
            SAKDebuggerStatistics -> SAKDebuggerStatistics: onBytesWritten()
            deactivate SAKDebuggerStatistics
            SAKDebuggerDevice -> SAKDebuggerPlugins: bytesWritten(QByteArray bytes)
            activate SAKDebuggerPlugins
            SAKDebuggerPlugins -> SAKDebuggerPlugins: onBytesWritten(QByteArray bytes)
            deactivate SAKDebuggerPlugins
        deactivate SAKDebuggerDevice
deactivate SAKDebuggerDevice
end

group Write Bytes [raw bytes]
    SAKDebuggerPlugins -> SAKDebuggerInput: invokeWriteRawBytes(QByteArray bytes)
    activate SAKDebuggerInput
    SAKDebuggerInput -> SAKDebuggerInput: cookRawBytes()
    SAKDebuggerInput -> SAKDebuggerDevice: invokeWriteBytes(QByteArray bytes)
    deactivate SAKDebuggerInput
    activate SAKDebuggerDevice
        SAKDebuggerDevice -> SAKDebuggerDevice: writeBytes()
        activate SAKDebuggerDevice
            SAKDebuggerDevice -> SAKDebuggerDevice: mask()
            SAKDebuggerDevice -> SAKDebuggerDevice: writeBytes()
            SAKDebuggerDevice -> PhysicalDevice: writeBytes()
            SAKDebuggerDevice -> SAKDebuggerOutput: onBytesWritten(QByteArray bytes)
            activate SAKDebuggerOutput
            SAKDebuggerOutput -> SAKDebuggerOutput: onBytesWritten()
            deactivate SAKDebuggerOutput
            SAKDebuggerDevice -> SAKDebuggerStatistics: bytesRead(QByteArray bytes)
            activate SAKDebuggerStatistics
            SAKDebuggerStatistics -> SAKDebuggerStatistics: onBytesWritten()
            deactivate SAKDebuggerStatistics
            SAKDebuggerDevice -> SAKDebuggerPlugins: bytesWritten(QByteArray bytes)
            activate SAKDebuggerPlugins
            SAKDebuggerPlugins -> SAKDebuggerPlugins: onBytesWritten(QByteArray bytes)
            deactivate SAKDebuggerPlugins
        deactivate SAKDebuggerDevice
    deactivate SAKDebuggerDevice
end
@enduml
