Skip to content

Commit 14713e6

Browse files
committed
Fix wakeup behavior
1 parent 18dd5a6 commit 14713e6

2 files changed

Lines changed: 12 additions & 3 deletions

File tree

assets/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.pdf

src/FlexRayAnalyzer.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ struct WakeupTiming
3838
U32 mRxLowMaxBits = 0;
3939
U32 mRxIdleMinBits = 0;
4040
U32 mRxWindowBits = 0;
41+
U32 mTxIdleBits = 0;
4142
};
4243

4344
enum class FlexRayMarkerType : U8
@@ -88,19 +89,22 @@ WakeupTiming GetWakeupTiming( U32 bit_rate )
8889
timing.mRxLowMaxBits = 14;
8990
timing.mRxIdleMinBits = 14;
9091
timing.mRxWindowBits = 76;
92+
timing.mTxIdleBits = 45;
9193
break;
9294
case 5000000:
9395
timing.mRxLowMinBits = 23;
9496
timing.mRxLowMaxBits = 29;
9597
timing.mRxIdleMinBits = 29;
9698
timing.mRxWindowBits = 151;
99+
timing.mTxIdleBits = 90;
97100
break;
98101
case 10000000:
99102
default:
100103
timing.mRxLowMinBits = 46;
101104
timing.mRxLowMaxBits = 59;
102105
timing.mRxIdleMinBits = 59;
103106
timing.mRxWindowBits = 301;
107+
timing.mTxIdleBits = 180;
104108
break;
105109
}
106110

@@ -282,13 +286,17 @@ void FlexRayAnalyzer::WorkerThread()
282286
if( observed_tss_bits >= wakeup_timing.mRxLowMinBits && observed_tss_bits <= wakeup_timing.mRxLowMaxBits &&
283287
observed_post_low_high_bits >= wakeup_timing.mRxIdleMinBits )
284288
{
285-
const U64 wakeup_end_sample = first_edge_after_tss > 0 ? first_edge_after_tss - 1 : first_edge_after_tss;
289+
const U32 displayed_idle_bits = std::min( observed_post_low_high_bits, wakeup_timing.mTxIdleBits );
290+
const U64 nominal_wakeup_end_sample =
291+
tss_end_sample + static_cast<U64>( std::max( 1L, std::lround( bit_width * static_cast<double>( displayed_idle_bits ) ) ) ) - 1;
292+
const U64 wakeup_end_sample =
293+
first_edge_after_tss > 0 ? std::min( nominal_wakeup_end_sample, first_edge_after_tss - 1 ) : nominal_wakeup_end_sample;
286294
std::ostringstream wakeup_text;
287-
wakeup_text << "Wakeup symbol (" << observed_tss_bits << " low, " << observed_post_low_high_bits << " idle bits)";
295+
wakeup_text << "Wakeup symbol (" << observed_tss_bits << " low, " << displayed_idle_bits << " idle bits)";
288296
add_segment( tss_start_sample, wakeup_end_sample, FlexRayWakeupSymbolField, 0, "WUS", wakeup_text.str(), "wakeup_symbol", nullptr,
289297
[&]( FrameV2& frame_v2 ) {
290298
frame_v2.AddByte( "low_bits", static_cast<U8>( observed_tss_bits ) );
291-
frame_v2.AddByte( "idle_bits", static_cast<U8>( observed_post_low_high_bits ) );
299+
frame_v2.AddByte( "idle_bits", static_cast<U8>( displayed_idle_bits ) );
292300
} );
293301

294302
if( have_pending_wakeup_pattern &&

0 commit comments

Comments
 (0)