diff --git a/SWIMAnalyzer/SWIMAnalyzer.cpp b/SWIMAnalyzer/SWIMAnalyzer.cpp index d63766e..dde29d5 100644 --- a/SWIMAnalyzer/SWIMAnalyzer.cpp +++ b/SWIMAnalyzer/SWIMAnalyzer.cpp @@ -149,6 +149,8 @@ void SWIMAnalyzer::SetupSample() { mLowSpeedSampleOffsets.push_back(clk_gen.AdvanceByHalfPeriod()); } + + mTimeoutSampleNum = clk_gen.AdvanceByTimeS(5e-4); // Set bit timeout 0.5ms } void SWIMAnalyzer::ParseSWIM(bool is_high_speed) @@ -457,7 +459,11 @@ BitState SWIMAnalyzer::ParseBit(bool is_high_speed) } } - mSWIM->AdvanceToNextEdge(); + if ((mSWIM->GetSampleOfNextEdge() - mSWIM->GetSampleNumber()) < mTimeoutSampleNum) + { + // Next bit present + mSWIM->AdvanceToNextEdge(); + } return bit; } @@ -469,7 +475,15 @@ BitState SWIMAnalyzer::ParseACK(bool is_high_speed) if (mSWIM->GetBitState() == BIT_HIGH) { - mSWIM->AdvanceToNextEdge(); + if ((mSWIM->GetSampleOfNextEdge() - mSWIM->GetSampleNumber()) < mTimeoutSampleNum) + { + mSWIM->AdvanceToNextEdge(); + } + else + { + // ACK edge not present + return BIT_LOW; + } } U64 starting_sample = mSWIM->GetSampleNumber(); diff --git a/SWIMAnalyzer/SWIMAnalyzer.h b/SWIMAnalyzer/SWIMAnalyzer.h index fa10789..9ca75df 100644 --- a/SWIMAnalyzer/SWIMAnalyzer.h +++ b/SWIMAnalyzer/SWIMAnalyzer.h @@ -63,6 +63,7 @@ class ANALYZER_EXPORT SWIMAnalyzer : public Analyzer U64 mCurrentSample; std::vector mHighSpeedSampleOffsets; std::vector mLowSpeedSampleOffsets; + U32 mTimeoutSampleNum; #pragma warning( pop ) };