@@ -38,6 +38,7 @@ struct WakeupTiming
3838 U32 mRxLowMaxBits = 0 ;
3939 U32 mRxIdleMinBits = 0 ;
4040 U32 mRxWindowBits = 0 ;
41+ U32 mTxIdleBits = 0 ;
4142};
4243
4344enum 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