Skip to content

Commit 320ce6e

Browse files
committed
proper table formatting
1 parent 2e86063 commit 320ce6e

1 file changed

Lines changed: 50 additions & 13 deletions

File tree

src/FlexRayAnalyzer.cpp

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <AnalyzerChannelData.h>
44
#include <algorithm>
55
#include <cmath>
6+
#include <functional>
67
#include <iomanip>
78
#include <sstream>
89
#include <vector>
@@ -177,7 +178,8 @@ void FlexRayAnalyzer::WorkerThread()
177178
};
178179

179180
auto add_segment = [&]( U64 start_sample, U64 end_sample, U8 frame_type, U8 frame_flags, const std::string& short_text,
180-
const std::string& long_text, const char* frame_v2_type, bool* packet_has_segments = nullptr ) {
181+
const std::string& long_text, const char* frame_v2_type, bool* packet_has_segments = nullptr,
182+
const std::function<void( FrameV2& )>& populate_frame_v2 = std::function<void( FrameV2& )>() ) {
181183
Frame frame;
182184
frame.mStartingSampleInclusive = start_sample;
183185
frame.mEndingSampleInclusive = std::max( start_sample, end_sample );
@@ -192,8 +194,8 @@ void FlexRayAnalyzer::WorkerThread()
192194
mResults->AddFlexRaySegment( frame, std::move( record ) );
193195

194196
FrameV2 frame_v2;
195-
frame_v2.AddString( "label", short_text.c_str() );
196-
frame_v2.AddString( "description", long_text.empty() ? short_text.c_str() : long_text.c_str() );
197+
if( populate_frame_v2 )
198+
populate_frame_v2( frame_v2 );
197199
mResults->AddFrameV2( frame_v2, frame_v2_type, frame.mStartingSampleInclusive, frame.mEndingSampleInclusive );
198200

199201
if( packet_has_segments != nullptr )
@@ -289,7 +291,11 @@ void FlexRayAnalyzer::WorkerThread()
289291
const U64 wakeup_end_sample = first_edge_after_tss > 0 ? first_edge_after_tss - 1 : first_edge_after_tss;
290292
std::ostringstream wakeup_text;
291293
wakeup_text << "Wakeup symbol (" << observed_tss_bits << " low, " << observed_post_low_high_bits << " idle bits)";
292-
add_segment( tss_start_sample, wakeup_end_sample, FlexRayWakeupSymbolField, 0, "WUS", wakeup_text.str(), "wakeup_symbol" );
294+
add_segment( tss_start_sample, wakeup_end_sample, FlexRayWakeupSymbolField, 0, "WUS", wakeup_text.str(), "wakeup_symbol", nullptr,
295+
[&]( FrameV2& frame_v2 ) {
296+
frame_v2.AddByte( "low_bits", static_cast<U8>( observed_tss_bits ) );
297+
frame_v2.AddByte( "idle_bits", static_cast<U8>( observed_post_low_high_bits ) );
298+
} );
293299

294300
if( have_pending_wakeup_pattern == true &&
295301
static_cast<double>( tss_start_sample - pending_wakeup_last_low_start_sample ) + ( bit_width * 0.25 ) <= maximum_wakeup_window_samples )
@@ -336,7 +342,7 @@ void FlexRayAnalyzer::WorkerThread()
336342
auto commit_packet = [&]( U64 end_sample, U8 frame_flags, FlexRayFrameRecord record ) {
337343
if( record.mIsError == true && packet_has_segments == false )
338344
add_segment( tss_start_sample, end_sample, FlexRayErrorField, DISPLAY_AS_ERROR_FLAG, "Err", record.mErrorText, "error_field",
339-
&packet_has_segments );
345+
&packet_has_segments, [&]( FrameV2& frame_v2 ) { frame_v2.AddString( "error", record.mErrorText.c_str() ); } );
340346

341347
commit_record( tss_start_sample, end_sample, frame_flags, std::move( record ) );
342348
};
@@ -459,7 +465,8 @@ void FlexRayAnalyzer::WorkerThread()
459465
if( observed_tss_bits >= kCasRxLowMinBits && observed_tss_bits <= kCasRxLowMaxBits )
460466
{
461467
add_segment( tss_start_sample, last_sample + end_padding_samples, FlexRayCasField, 0, "CAS", "Collision avoidance symbol", "cas_field",
462-
&packet_has_segments );
468+
&packet_has_segments,
469+
[&]( FrameV2& frame_v2 ) { frame_v2.AddByte( "low_bits", static_cast<U8>( observed_tss_bits ) ); } );
463470
record.mSymbolName = "CAS";
464471
packet_end_sample = last_sample + end_padding_samples;
465472
commit_packet( packet_end_sample, 0, std::move( record ) );
@@ -469,7 +476,8 @@ void FlexRayAnalyzer::WorkerThread()
469476
++bit_index;
470477

471478
add_segment( tss_start_sample, tss_end_sample > 0 ? ( tss_end_sample - 1 ) : tss_end_sample, FlexRayTssField, 0,
472-
"TSS", "Transmission start sequence", "tss_field", &packet_has_segments );
479+
"TSS", "Transmission start sequence", "tss_field", &packet_has_segments,
480+
[&]( FrameV2& frame_v2 ) { frame_v2.AddByte( "low_bits", static_cast<U8>( observed_tss_bits ) ); } );
473481
add_segment( segment_start( fss_sample ), segment_end( fss_sample ), FlexRayFssField, 0, "FSS", "Frame start sequence", "fss_field",
474482
&packet_has_segments );
475483

@@ -532,7 +540,19 @@ void FlexRayAnalyzer::WorkerThread()
532540
<< " Cyc " << static_cast<U32>( record.mCycle )
533541
<< " Len " << static_cast<U32>( record.mPayloadLengthWords ) * 2 << "B";
534542
add_segment( segment_start( header_start_sample ), segment_end( header_end_sample ), FlexRayHeaderField, 0, "Hdr",
535-
header_text.str(), "header_field", &packet_has_segments );
543+
header_text.str(), "header_field", &packet_has_segments, [&]( FrameV2& frame_v2 ) {
544+
frame_v2.AddString( "identifier", format_hex( record.mFrameId, 3 ).c_str() );
545+
frame_v2.AddByte( "cycle", record.mCycle );
546+
frame_v2.AddByte( "payload_length_words", record.mPayloadLengthWords );
547+
frame_v2.AddByte( "payload_length_bytes", static_cast<U8>( record.mPayloadLengthWords * 2 ) );
548+
frame_v2.AddBoolean( "reserved_bit", record.mReservedBit );
549+
frame_v2.AddBoolean( "payload_preamble", record.mPayloadPreamble );
550+
frame_v2.AddBoolean( "null_frame", record.mNullFrame );
551+
frame_v2.AddBoolean( "sync_frame", record.mSyncFrame );
552+
frame_v2.AddBoolean( "startup_frame", record.mStartupFrame );
553+
frame_v2.AddString( "header_crc", format_hex( record.mHeaderCrc, 3 ).c_str() );
554+
frame_v2.AddBoolean( "header_crc_ok", record.mHeaderCrcOk );
555+
} );
536556
}
537557

538558
std::vector<U8> payload_bits;
@@ -554,7 +574,11 @@ void FlexRayAnalyzer::WorkerThread()
554574
std::ostringstream payload_text;
555575
payload_text << "Payload[" << payload_index << "] 0x" << format_hex_byte( payload_byte );
556576
add_segment( segment_start( payload_start_sample ), segment_end( payload_end_sample ), FlexRayPayloadByteField, 0,
557-
format_hex_byte( payload_byte ), payload_text.str(), "payload_byte", &packet_has_segments );
577+
format_hex_byte( payload_byte ), payload_text.str(), "payload_byte", &packet_has_segments,
578+
[&]( FrameV2& frame_v2 ) {
579+
frame_v2.AddByte( "index", static_cast<U8>( payload_index ) );
580+
frame_v2.AddByte( "data", payload_byte );
581+
} );
558582
}
559583

560584
if( syntax_error.empty() == false )
@@ -608,7 +632,11 @@ void FlexRayAnalyzer::WorkerThread()
608632
std::ostringstream crc_text;
609633
crc_text << "Frame CRC " << format_hex( record.mFrameCrc, 6 ) << ( record.mFrameCrcOk ? " OK" : " BAD" );
610634
add_segment( segment_start( frame_crc_start_sample ), segment_end( frame_crc_end_sample ), FlexRayFrameCrcField,
611-
record.mFrameCrcOk ? 0 : DISPLAY_AS_ERROR_FLAG, "FCRC", crc_text.str(), "frame_crc_field", &packet_has_segments );
635+
record.mFrameCrcOk ? 0 : DISPLAY_AS_ERROR_FLAG, "FCRC", crc_text.str(), "frame_crc_field", &packet_has_segments,
636+
[&]( FrameV2& frame_v2 ) {
637+
frame_v2.AddString( "crc", format_hex( record.mFrameCrc, 6 ).c_str() );
638+
frame_v2.AddBoolean( "crc_ok", record.mFrameCrcOk );
639+
} );
612640
}
613641

614642
U64 fes_low_sample = 0;
@@ -662,7 +690,8 @@ void FlexRayAnalyzer::WorkerThread()
662690
std::ostringstream dts_text;
663691
dts_text << "Dynamic trailing sequence (" << record.mDtsBits << " bits)";
664692
add_segment( segment_start( dts_start_sample ), segment_end( dts_end_sample ), FlexRayDtsField, 0, "DTS", dts_text.str(),
665-
"dts_field", &packet_has_segments );
693+
"dts_field", &packet_has_segments,
694+
[&]( FrameV2& frame_v2 ) { frame_v2.AddByte( "dts_bits", static_cast<U8>( record.mDtsBits ) ); } );
666695
packet_end_sample = segment_end( dts_end_sample );
667696
}
668697

@@ -698,7 +727,11 @@ void FlexRayAnalyzer::WorkerThread()
698727
cid_text << ", truncated";
699728
cid_text << ")";
700729
add_segment( segment_start( cid_start_sample ), segment_end( cid_end_sample ), FlexRayCidField,
701-
record.mCidOk ? 0 : DISPLAY_AS_WARNING_FLAG, "CID", cid_text.str(), "cid_field", &packet_has_segments );
730+
record.mCidOk ? 0 : DISPLAY_AS_WARNING_FLAG, "CID", cid_text.str(), "cid_field", &packet_has_segments,
731+
[&]( FrameV2& frame_v2 ) {
732+
frame_v2.AddByte( "cid_bits", static_cast<U8>( record.mCidBits ) );
733+
frame_v2.AddBoolean( "cid_ok", record.mCidOk );
734+
} );
702735
packet_end_sample = segment_end( cid_end_sample );
703736
}
704737
}
@@ -736,7 +769,11 @@ void FlexRayAnalyzer::WorkerThread()
736769
cid_text << ", truncated";
737770
cid_text << ")";
738771
add_segment( segment_start( cid_start_sample ), segment_end( cid_end_sample ), FlexRayCidField,
739-
record.mCidOk ? 0 : DISPLAY_AS_WARNING_FLAG, "CID", cid_text.str(), "cid_field", &packet_has_segments );
772+
record.mCidOk ? 0 : DISPLAY_AS_WARNING_FLAG, "CID", cid_text.str(), "cid_field", &packet_has_segments,
773+
[&]( FrameV2& frame_v2 ) {
774+
frame_v2.AddByte( "cid_bits", static_cast<U8>( record.mCidBits ) );
775+
frame_v2.AddBoolean( "cid_ok", record.mCidOk );
776+
} );
740777
packet_end_sample = segment_end( cid_end_sample );
741778
}
742779

0 commit comments

Comments
 (0)