@@ -43,6 +43,18 @@ struct WakeupTiming
4343 U32 mRxWindowBits = 0 ;
4444};
4545
46+ enum class FlexRayMarkerType : U8
47+ {
48+ DataBit,
49+ SyntaxBit
50+ };
51+
52+ struct FlexRayMarker
53+ {
54+ U64 mSample = 0 ;
55+ FlexRayMarkerType mType = FlexRayMarkerType::DataBit;
56+ };
57+
4658U8 GetWireBit ( BitState state, bool invert_input )
4759{
4860 U8 bit = state == BIT_HIGH ? 1 : 0 ;
@@ -382,6 +394,7 @@ void FlexRayAnalyzer::WorkerThread()
382394 U32 bit_index = 0 ;
383395 U64 last_sample = tss_end_sample;
384396 bool packet_has_segments = false ;
397+ std::vector<FlexRayMarker> packet_markers;
385398
386399 auto commit_packet = [&]( U64 end_sample, U8 frame_flags, FlexRayFrameRecord record ) {
387400 if ( record.mIsError == false && record.mSymbolName .empty () == true )
@@ -413,6 +426,13 @@ void FlexRayAnalyzer::WorkerThread()
413426 mResults ->AddFrameV2 ( frame_v2_packet, " frame" , tss_start_sample, end_sample );
414427 }
415428
429+ for ( const FlexRayMarker& marker : packet_markers )
430+ {
431+ mResults ->AddMarker ( marker.mSample ,
432+ marker.mType == FlexRayMarkerType::DataBit ? AnalyzerResults::Dot : AnalyzerResults::ErrorX,
433+ mSettings .mInputChannel );
434+ }
435+
416436 if ( record.mIsError == true && packet_has_segments == false )
417437 add_segment ( tss_start_sample, end_sample, FlexRayErrorField, DISPLAY_AS_ERROR_FLAG, " Err" , record.mErrorText , " error_field" ,
418438 &packet_has_segments, [&]( FrameV2& frame_v2 ) { frame_v2.AddString ( " error" , record.mErrorText .c_str () ); } );
@@ -452,11 +472,20 @@ void FlexRayAnalyzer::WorkerThread()
452472 }
453473 };
454474
455- auto read_expected_bit = [&]( U8 expected_bit, const char * label, std::string& error_text, U64* observed_sample = nullptr ) -> bool {
475+ auto add_bit_marker = [&]( U64 sample_number, FlexRayMarkerType marker_type ) {
476+ FlexRayMarker marker;
477+ marker.mSample = sample_number;
478+ marker.mType = marker_type;
479+ packet_markers.push_back ( marker );
480+ };
481+
482+ auto read_expected_bit = [&]( U8 expected_bit, const char * label, std::string& error_text, U64* observed_sample = nullptr ,
483+ FlexRayMarkerType marker_type = FlexRayMarkerType::SyntaxBit ) -> bool {
456484 U8 actual_bit = 0 ;
457485 U64 sample_number = 0 ;
458486 read_bit ( bit_index, actual_bit, sample_number );
459487 last_sample = sample_number;
488+ add_bit_marker ( sample_number, marker_type );
460489
461490 if ( observed_sample != nullptr )
462491 *observed_sample = sample_number;
@@ -496,6 +525,7 @@ void FlexRayAnalyzer::WorkerThread()
496525 U64 sample_number = 0 ;
497526 read_bit ( bit_index, sampled_bit, sample_number );
498527 last_sample = sample_number;
528+ add_bit_marker ( sample_number, FlexRayMarkerType::DataBit );
499529 value = static_cast <U8>( ( value << 1 ) | sampled_bit );
500530 ++bit_index;
501531
@@ -518,6 +548,7 @@ void FlexRayAnalyzer::WorkerThread()
518548 U64 fss_sample = 0 ;
519549 read_bit ( bit_index, fss_bit, fss_sample );
520550 last_sample = fss_sample;
551+ add_bit_marker ( fss_sample, FlexRayMarkerType::SyntaxBit );
521552
522553 if ( fss_bit != 1 )
523554 continue ;
@@ -536,13 +567,15 @@ void FlexRayAnalyzer::WorkerThread()
536567 U64 header_start_sample = 0 ;
537568 read_bit ( bit_index, first_bss_high, header_start_sample );
538569 last_sample = header_start_sample;
570+ add_bit_marker ( header_start_sample, FlexRayMarkerType::SyntaxBit );
539571 if ( first_bss_high != 1 )
540572 continue ;
541573 header_byte_start_samples.push_back ( header_start_sample );
542574 ++bit_index;
543575
544576 U8 first_bss_low = 0 ;
545577 read_bit ( bit_index, first_bss_low, last_sample );
578+ add_bit_marker ( last_sample, FlexRayMarkerType::SyntaxBit );
546579 if ( first_bss_low != 0 )
547580 {
548581 if ( observed_tss_bits >= kCasRxLowMinBits && observed_tss_bits <= kCasRxLowMaxBits )
@@ -581,6 +614,7 @@ void FlexRayAnalyzer::WorkerThread()
581614 U64 sample_number = 0 ;
582615 read_bit ( bit_index, sampled_bit, sample_number );
583616 last_sample = sample_number;
617+ add_bit_marker ( sample_number, FlexRayMarkerType::DataBit );
584618 header_bit_samples.push_back ( sample_number );
585619 first_header_byte = static_cast <U8>( ( first_header_byte << 1 ) | sampled_bit );
586620 ++bit_index;
@@ -791,6 +825,7 @@ void FlexRayAnalyzer::WorkerThread()
791825 U64 post_fes_sample = 0 ;
792826 read_bit ( bit_index, post_fes_bit, post_fes_sample );
793827 last_sample = post_fes_sample;
828+ add_bit_marker ( post_fes_sample, FlexRayMarkerType::SyntaxBit );
794829
795830 if ( post_fes_bit == 0 )
796831 {
@@ -807,6 +842,7 @@ void FlexRayAnalyzer::WorkerThread()
807842 read_bit ( bit_index, bit, sample_number );
808843 last_sample = sample_number;
809844 dts_end_sample = sample_number;
845+ add_bit_marker ( sample_number, FlexRayMarkerType::SyntaxBit );
810846
811847 if ( bit == 1 )
812848 {
@@ -836,6 +872,7 @@ void FlexRayAnalyzer::WorkerThread()
836872 U64 sample_number = 0 ;
837873 read_bit ( bit_index, cid_value, sample_number );
838874 last_sample = sample_number;
875+ add_bit_marker ( sample_number, FlexRayMarkerType::SyntaxBit );
839876
840877 if ( cid_value != 1 )
841878 {
@@ -882,6 +919,7 @@ void FlexRayAnalyzer::WorkerThread()
882919 U64 sample_number = 0 ;
883920 read_bit ( bit_index, cid_value, sample_number );
884921 last_sample = sample_number;
922+ add_bit_marker ( sample_number, FlexRayMarkerType::SyntaxBit );
885923
886924 if ( cid_value != 1 )
887925 {
0 commit comments