Skip to content

Commit 0231833

Browse files
IDLE bit is marked by a STOP marker
1 parent 30edc5c commit 0231833

File tree

2 files changed

+42
-42
lines changed

2 files changed

+42
-42
lines changed

src/CANFDMolinaroAnalyzer.cpp

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -33,36 +33,39 @@ void CANFDMolinaroAnalyzer::SetupResults (void) {
3333

3434
//--------------------------------------------------------------------------------------------------
3535

36-
void CANFDMolinaroAnalyzer::WorkerThread () {
36+
void CANFDMolinaroAnalyzer::WorkerThread (void) {
37+
mResults.reset (new CANFDMolinaroAnalyzerResults (this, mSettings.get ())) ;
38+
SetAnalyzerResults (mResults.get()) ;
39+
mResults->AddChannelBubblesWillAppearOn (mSettings->mInputChannel) ;
40+
//---
3741
const bool inverted = mSettings->inverted () ;
3842
mSampleRateHz = GetSampleRate () ;
39-
mSerial = GetAnalyzerChannelData (mSettings->mInputChannel) ;
43+
AnalyzerChannelData * serial = GetAnalyzerChannelData (mSettings->mInputChannel) ;
4044
//--- Sample settings
4145
mCurrentSamplesPerBit = mSampleRateHz / mSettings->arbitrationBitRate () ;
4246
//--- Synchronize to recessive level
43-
if (mSerial->GetBitState() == (inverted ? BIT_HIGH : BIT_LOW)) {
44-
mSerial->AdvanceToNextEdge () ;
47+
if (serial->GetBitState() == (inverted ? BIT_HIGH : BIT_LOW)) {
48+
serial->AdvanceToNextEdge () ;
4549
}
50+
//---
51+
mFrameFieldEngineState = FrameFieldEngineState::IDLE ;
52+
mUnstuffingActive = false ;
53+
mPreviousBit = (serial->GetBitState () == BIT_HIGH) ^ inverted ;
54+
//---
4655
while (1) {
47-
//--- Synchronize on falling edge: this SOF bit
48-
mFrameFieldEngineState = FrameFieldEngineState::IDLE ;
49-
mUnstuffingActive = false ;
50-
//--- Loop util the end of the frame (11 consecutive high bits)
51-
bool currentBitState = true ;
52-
do{
53-
mSerial->AdvanceToNextEdge () ;
54-
currentBitState ^= true ;
55-
const U64 start = mSerial->GetSampleNumber () ;
56-
const U64 nextEdge = mSerial->GetSampleOfNextEdge () ;
57-
58-
U64 currentCenter = start + mCurrentSamplesPerBit / 2 ;
59-
while (currentCenter < (nextEdge + mCurrentSamplesPerBit / 4)) {
60-
enterBit (currentBitState, currentCenter) ;
61-
currentCenter += mCurrentSamplesPerBit ;
62-
}
63-
}while (mFrameFieldEngineState != FrameFieldEngineState::IDLE) ;
56+
// serial->AdvanceToNextEdge () ;
57+
const bool currentBitValue = (serial->GetBitState () == BIT_HIGH) ^ inverted ;
58+
const U64 start = serial->GetSampleNumber () ;
59+
const U64 nextEdge = serial->GetSampleOfNextEdge () ;
60+
61+
U64 currentCenter = start + mCurrentSamplesPerBit / 2 ;
62+
while (currentCenter < (nextEdge + mCurrentSamplesPerBit / 4)) {
63+
enterBit (currentBitValue, currentCenter) ;
64+
currentCenter += mCurrentSamplesPerBit ;
65+
}
6466
//---
6567
mResults->CommitResults () ;
68+
serial->AdvanceToNextEdge () ;
6669
}
6770
}
6871

@@ -137,7 +140,6 @@ void CANFDMolinaroAnalyzer::enterBit (const bool inBit, U64 & ioBitCenterSampleN
137140
enterBitInCRC21 (inBit) ;
138141
}else if ((mConsecutiveBitCountOfSamePolarity == 5) && (mPreviousBit == inBit)) { // Stuff Error
139142
addMark (ioBitCenterSampleNumber, AnalyzerResults::ErrorX);
140-
// const U32 samplesPerBit = mSampleRateHz / mSettings->arbitrationBitRate () ;
141143
enterInErrorMode (ioBitCenterSampleNumber + mCurrentSamplesPerBit / 2) ;
142144
mConsecutiveBitCountOfSamePolarity += 1 ;
143145
}else if (mPreviousBit == inBit) {
@@ -213,7 +215,9 @@ void CANFDMolinaroAnalyzer::decodeFrameBit (const bool inBit, U64 & ioBitCenterS
213215
//--------------------------------------------------------------------------------------------------
214216

215217
void CANFDMolinaroAnalyzer::handle_IDLE_state (const bool inBit, const U64 inBitCenterSampleNumber) {
216-
if (!inBit) {
218+
if (inBit) {
219+
addMark (inBitCenterSampleNumber, AnalyzerResults::Stop) ;
220+
}else{ // SOF
217221
mUnstuffingActive = true ;
218222
mCRC15Accumulator = 0 ;
219223
switch (mSettings->protocol ()) {
@@ -309,6 +313,7 @@ void CANFDMolinaroAnalyzer::handle_CONTROL_BASE_state (const bool inBit, const U
309313
mFrameFieldEngineState = FrameFieldEngineState::CONTROL_AFTER_R0 ;
310314
}
311315
}else if (inBit) { // R0 bit recessive -> error
316+
addMark (inBitCenterSampleNumber, AnalyzerResults::ErrorDot) ;
312317
enterInErrorMode (inBitCenterSampleNumber) ;
313318
}else{ // R0 dominant: ok
314319
addMark (inBitCenterSampleNumber, AnalyzerResults::Zero) ;
@@ -332,6 +337,7 @@ void CANFDMolinaroAnalyzer::handle_CONTROL_EXTENDED_state (const bool inBit, con
332337
addMark (inBitCenterSampleNumber, AnalyzerResults::DownArrow) ;
333338
}
334339
}else if (inBit) { // R0 bit recessive -> error
340+
addMark (inBitCenterSampleNumber, AnalyzerResults::ErrorDot) ;
335341
enterInErrorMode (inBitCenterSampleNumber) ;
336342
}else{ // R0 dominant: ok
337343
addMark (inBitCenterSampleNumber, AnalyzerResults::Zero) ;
@@ -469,6 +475,7 @@ void CANFDMolinaroAnalyzer::handle_SBC_state (const bool inBit, const U64 inBitC
469475
if (mFieldBitIndex == 1) { // Forced Stuff Bit
470476
mSBCField = 0 ;
471477
if (inBit == mPreviousBit) {
478+
addMark (inBitCenterSampleNumber, AnalyzerResults::ErrorX) ;
472479
enterInErrorMode (inBitCenterSampleNumber) ;
473480
}else{
474481
addMark (inBitCenterSampleNumber, AnalyzerResults::X);
@@ -515,6 +522,7 @@ void CANFDMolinaroAnalyzer::handle_CRC17_state (const bool inBit, const U64 inBi
515522
enterBitInCRC17 (inBit) ;
516523
addMark (inBitCenterSampleNumber, mMarkerTypeForDataAndCRC);
517524
}else if (inBit == mPreviousBit) {
525+
addMark (inBitCenterSampleNumber, AnalyzerResults::ErrorX) ;
518526
enterInErrorMode (inBitCenterSampleNumber) ;
519527
}else{
520528
addMark (inBitCenterSampleNumber, AnalyzerResults::X);
@@ -534,6 +542,7 @@ void CANFDMolinaroAnalyzer::handle_CRC21_state (const bool inBit, const U64 inBi
534542
enterBitInCRC21 (inBit) ;
535543
addMark (inBitCenterSampleNumber, mMarkerTypeForDataAndCRC);
536544
}else if (inBit == mPreviousBit) {
545+
addMark (inBitCenterSampleNumber, AnalyzerResults::ErrorX) ;
537546
enterInErrorMode (inBitCenterSampleNumber) ;
538547
}else{
539548
addMark (inBitCenterSampleNumber, AnalyzerResults::X);
@@ -566,6 +575,7 @@ void CANFDMolinaroAnalyzer::handle_CRCDEL_state (const bool inBit, U64 & ioBitCe
566575
//--- Switch to Data Bit Rate
567576
mCurrentSamplesPerBit = samplesPerArbitrationBit ;
568577
}else{
578+
addMark (ioBitCenterSampleNumber, AnalyzerResults::ErrorX) ;
569579
enterInErrorMode (ioBitCenterSampleNumber) ;
570580
}
571581
mStartOfFieldSampleNumber = ioBitCenterSampleNumber + mCurrentSamplesPerBit / 2 ;
@@ -580,13 +590,14 @@ void CANFDMolinaroAnalyzer::handle_ACK_state (const bool inBit, const U64 inBitC
580590
addMark (inBitCenterSampleNumber, inBit ? AnalyzerResults::ErrorSquare : AnalyzerResults::DownArrow);
581591
}else{ // ACK DELIMITER
582592
addBubble (ACK_FIELD_RESULT, 0, 0, inBitCenterSampleNumber) ;
593+
mFrameFieldEngineState = FrameFieldEngineState::ENDOFFRAME ;
583594
if (inBit) {
584595
addMark (inBitCenterSampleNumber, AnalyzerResults::One) ;
585596
}else{
597+
addMark (inBitCenterSampleNumber, AnalyzerResults::ErrorDot) ;
586598
enterInErrorMode (inBitCenterSampleNumber) ;
587599
}
588600
mFieldBitIndex = 0 ;
589-
mFrameFieldEngineState = FrameFieldEngineState::ENDOFFRAME ;
590601
}
591602
}
592603

@@ -596,6 +607,7 @@ void CANFDMolinaroAnalyzer::handle_ENDOFFRAME_state (const bool inBit, const U64
596607
if (inBit) {
597608
addMark (inBitCenterSampleNumber, AnalyzerResults::One) ;
598609
}else{
610+
addMark (inBitCenterSampleNumber, AnalyzerResults::ErrorX) ;
599611
enterInErrorMode (inBitCenterSampleNumber) ;
600612
}
601613
mFieldBitIndex ++ ;
@@ -612,6 +624,7 @@ void CANFDMolinaroAnalyzer::handle_INTERMISSION_state (const bool inBit, const U
612624
if (inBit) {
613625
addMark (inBitCenterSampleNumber, AnalyzerResults::One) ;
614626
}else{
627+
addMark (inBitCenterSampleNumber, AnalyzerResults::ErrorX) ;
615628
enterInErrorMode (inBitCenterSampleNumber) ;
616629
}
617630
mFieldBitIndex ++ ;
@@ -697,6 +710,7 @@ void CANFDMolinaroAnalyzer::addBubble (const U8 inBubbleType,
697710
const U64 endSampleNumber = inBitCenterSampleNumber + mCurrentSamplesPerBit / 2 ;
698711
frame.mEndingSampleInclusive = endSampleNumber ;
699712
mResults->AddFrame (frame) ;
713+
// mResults->CommitResults () ;
700714

701715
FrameV2 frameV2 ;
702716
switch (inBubbleType) {
@@ -764,27 +778,14 @@ void CANFDMolinaroAnalyzer::addBubble (const U8 inBubbleType,
764778
mResults->AddFrameV2 (frameV2, "EOF", mStartOfFieldSampleNumber, endSampleNumber) ;
765779
break ;
766780
case INTERMISSION_FIELD_RESULT :
767-
// { const U64 frameSampleCount = inData1 ;
768-
// const U32 samplesPerBit = mSampleRateHz / mSettings->mBitRate ;
769-
// const U64 length = (frameSampleCount + samplesPerBit / 2) / samplesPerBit ;
770-
// const U64 stuffBitCount = inData2 ;
771-
// const U64 durationMicroSeconds = frameSampleCount * 1000000 / mSampleRateHz ;
772-
// std::stringstream str ;
773-
// str << length << " bits, "
774-
// << durationMicroSeconds << "µs, "
775-
// << stuffBitCount << " stuff bit" << ((inData2 > 1) ? "s" : "") ;
776-
// frameV2.AddString ("Value", str.str ().c_str ()) ;
777-
mResults->AddFrameV2 (frameV2, "IFS", mStartOfFieldSampleNumber, endSampleNumber) ;
778-
// }
781+
mResults->AddFrameV2 (frameV2, "IFS", mStartOfFieldSampleNumber, endSampleNumber) ;
779782
break ;
780783
case CAN_ERROR_RESULT :
781784
mResults->AddFrameV2 (frameV2, "Error", mStartOfFieldSampleNumber, endSampleNumber) ;
782785
break ;
783786
}
784787

785788
mResults->CommitResults () ;
786-
787-
788789
ReportProgress (frame.mEndingSampleInclusive) ;
789790
//--- Prepare for next bubble
790791
mStartOfFieldSampleNumber = endSampleNumber ;
@@ -793,10 +794,9 @@ void CANFDMolinaroAnalyzer::addBubble (const U8 inBubbleType,
793794
//--------------------------------------------------------------------------------------------------
794795

795796
void CANFDMolinaroAnalyzer::enterInErrorMode (const U64 inBitCenterSampleNumber) {
796-
addMark (inBitCenterSampleNumber, AnalyzerResults::ErrorX);
797-
mStartOfFieldSampleNumber = inBitCenterSampleNumber + mCurrentSamplesPerBit / 2 ;
798-
mFrameFieldEngineState = FrameFieldEngineState::DECODER_ERROR ;
797+
mStartOfFieldSampleNumber = inBitCenterSampleNumber ;
799798
mCurrentSamplesPerBit = mSampleRateHz / mSettings->arbitrationBitRate () ;
799+
mFrameFieldEngineState = DECODER_ERROR ;
800800
mUnstuffingActive = false ;
801801
}
802802

src/CANFDMolinaroAnalyzer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class ANALYZER_EXPORT CANFDMolinaroAnalyzer : public Analyzer2 {
3737
//--- Protected properties
3838
protected: std::shared_ptr < CANFDMolinaroAnalyzerSettings > mSettings;
3939
protected: std::shared_ptr < CANFDMolinaroAnalyzerResults > mResults;
40-
protected: AnalyzerChannelData* mSerial;
40+
protected: // AnalyzerChannelData* mSerial;
4141

4242
protected: CANMolinaroSimulationDataGenerator mSimulationDataGenerator;
4343
protected: bool mSimulationInitialized ;

0 commit comments

Comments
 (0)