Skip to content

Commit 7e003e2

Browse files
committed
Improve WUS and CAS decoding
1 parent 14713e6 commit 7e003e2

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

src/FlexRayAnalyzer.cpp

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ struct ClockRecoveryState
3535
struct 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

Comments
 (0)