@@ -35,7 +35,6 @@ struct ClockRecoveryState
3535struct WakeupTiming
3636{
3737 U32 mRxLowMinBits = 0 ;
38- U32 mRxLowMaxBits = 0 ;
3938 U32 mRxIdleMinBits = 0 ;
4039 U32 mRxWindowBits = 0 ;
4140 U32 mTxIdleBits = 0 ;
@@ -86,22 +85,19 @@ WakeupTiming GetWakeupTiming( U32 bit_rate )
8685 {
8786 case 2500000 :
8887 timing.mRxLowMinBits = 11 ;
89- timing.mRxLowMaxBits = 14 ;
9088 timing.mRxIdleMinBits = 14 ;
9189 timing.mRxWindowBits = 76 ;
9290 timing.mTxIdleBits = 45 ;
9391 break ;
9492 case 5000000 :
9593 timing.mRxLowMinBits = 23 ;
96- timing.mRxLowMaxBits = 29 ;
9794 timing.mRxIdleMinBits = 29 ;
9895 timing.mRxWindowBits = 151 ;
9996 timing.mTxIdleBits = 90 ;
10097 break ;
10198 case 10000000 :
10299 default :
103100 timing.mRxLowMinBits = 46 ;
104- timing.mRxLowMaxBits = 59 ;
105101 timing.mRxIdleMinBits = 59 ;
106102 timing.mRxWindowBits = 301 ;
107103 timing.mTxIdleBits = 180 ;
@@ -282,9 +278,10 @@ void FlexRayAnalyzer::WorkerThread()
282278 const U64 first_edge_after_tss = mInput ->GetSampleOfNextEdge ();
283279 const double high_after_tss_samples = static_cast <double >( first_edge_after_tss - tss_end_sample );
284280 const U32 observed_post_low_high_bits = RoundBitsFromSamples ( first_edge_after_tss - tss_end_sample, bit_width );
281+ const double observed_wakeup_symbol_window_samples = static_cast <double >( first_edge_after_tss - tss_start_sample );
285282
286- if ( observed_tss_bits >= wakeup_timing.mRxLowMinBits && observed_tss_bits < = wakeup_timing.mRxLowMaxBits &&
287- observed_post_low_high_bits >= wakeup_timing. mRxIdleMinBits )
283+ if ( observed_tss_bits >= wakeup_timing.mRxLowMinBits && observed_post_low_high_bits > = wakeup_timing.mRxIdleMinBits &&
284+ observed_wakeup_symbol_window_samples + ( bit_width * 0.25 ) <= maximum_wakeup_window_samples )
288285 {
289286 const U32 displayed_idle_bits = std::min ( observed_post_low_high_bits, wakeup_timing.mTxIdleBits );
290287 const U64 nominal_wakeup_end_sample =
@@ -322,6 +319,19 @@ void FlexRayAnalyzer::WorkerThread()
322319 if ( have_pending_wakeup_pattern )
323320 flush_pending_wakeup_pattern ();
324321
322+ if ( observed_tss_bits >= kCasRxLowMinBits && observed_tss_bits <= kCasRxLowMaxBits && high_after_tss_samples > ( bit_width * 2.75 ) )
323+ {
324+ const U64 cas_end_sample = segment_end ( tss_end_sample > 0 ? ( tss_end_sample - 1 ) : tss_end_sample );
325+ add_segment ( tss_start_sample, cas_end_sample, FlexRayCasField, 0 , " CAS" , " Collision avoidance symbol" , " cas_field" , nullptr ,
326+ [&]( FrameV2& frame_v2 ) { frame_v2.AddByte ( " low_bits" , static_cast <U8>( observed_tss_bits ) ); } );
327+
328+ FlexRayFrameRecord record;
329+ record.mTssBits = observed_tss_bits;
330+ record.mSymbolName = " CAS" ;
331+ commit_record ( tss_start_sample, cas_end_sample, 0 , std::move ( record ) );
332+ continue ;
333+ }
334+
325335 if ( high_after_tss_samples < ( bit_width * 1.25 ) || high_after_tss_samples > ( bit_width * 2.75 ) )
326336 continue ;
327337
0 commit comments