Skip to content

Commit 7fe7944

Browse files
committed
add sampling dots
1 parent b425744 commit 7fe7944

1 file changed

Lines changed: 39 additions & 1 deletion

File tree

src/FlexRayAnalyzer.cpp

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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+
4658
U8 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

Comments
 (0)