added cycletime + fix last frame
Some checks failed
Build / windows (push) Has been cancelled
Build / macos (push) Has been cancelled
Build / linux (push) Has been cancelled
Build / publish (push) Has been cancelled

This commit is contained in:
2025-12-24 00:08:44 +01:00
parent 0bcef21995
commit cc52743f65
2 changed files with 127 additions and 200 deletions

View File

@@ -28,189 +28,110 @@ void TLC59731Analyzer::WorkerThread()
mSampleRateHz = GetSampleRate();
mSerial = GetAnalyzerChannelData( mSettings.mInputChannel );
bool run = 1;
while( SamplesToNS( mSerial->GetSampleOfNextEdge() - mSerial->GetSampleNumber() ) < TLL_MIN || mSerial->GetBitState() == BIT_HIGH )
while( run )
{
mSerial->AdvanceToNextEdge();
}
while( mSerial->GetBitState() != BIT_HIGH )
{
mSerial->AdvanceToNextEdge(); // wait for rising
}
U32 data = 0;
// measure cycletime
// start of bit
U64 SoB = mSerial->GetSampleNumber();
U64 starting_sample = SoB;
mSerial->AdvanceToNextEdge(); // falling edge
if( SamplesToNS( mSerial->GetSampleOfNextEdge() - SoB ) <= MAX_CYCLETIME )
{
mSerial->AdvanceToNextEdge(); // rising edge of second 0
cycleTime = SamplesToNS( mSerial->GetSampleNumber() - SoB );
SoB = mSerial->GetSampleNumber();
}
while( 1 )
{
mSerial->AdvanceToNextEdge(); // falling edge
if( SamplesToNS( mSerial->GetSampleOfNextEdge() - SoB ) < cycleTime / 2.0 + 1000 )
while( SamplesToNS( mSerial->GetSampleOfNextEdge() - mSerial->GetSampleNumber() ) < TLL_MIN || mSerial->GetBitState() == BIT_HIGH )
{
// 1
data <<= 1;
data |= 1;
mSerial->AdvanceToNextEdge(); // rising edge of second pulse of 1
mSerial->AdvanceToNextEdge(); // falling edge of second ṕulse of 1
}
else
{
// 0
data <<= 1;
}
if( SamplesToNS( mSerial->GetSampleOfNextEdge() - SoB ) < cycleTime * 2 )
{
mSerial->AdvanceToNextEdge(); // rising edge of next bit
SoB = mSerial->GetSampleNumber();
}
else if( SamplesToNS( mSerial->GetSampleOfNextEdge() - SoB ) < cycleTime * 5.5 ||
SamplesToNS( mSerial->GetSampleOfNextEdge() - SoB ) > cycleTime * 8 )
{
// EOS end of sequence
Frame frame;
frame.mData1 = data;
frame.mFlags = 0;
frame.mStartingSampleInclusive = starting_sample;
frame.mEndingSampleInclusive = mSerial->GetSampleNumber();
mResults->AddFrame( frame );
ReportProgress( frame.mEndingSampleInclusive );
FrameV2 framev2;
framev2.AddInteger("data", frame.mData1);
mResults->AddFrameV2(framev2, "ledData", frame.mStartingSampleInclusive, frame.mEndingSampleInclusive);
mResults->CommitResults();
data = 0;
mSerial->AdvanceToNextEdge();
}
while( mSerial->GetBitState() != BIT_HIGH )
{
mSerial->AdvanceToNextEdge(); // wait for rising
}
U32 data = 0;
U32 bitCtr = 1;
// measure cycletime
// start of bit
U64 SoB = mSerial->GetSampleNumber();
U64 starting_sample = SoB;
mSerial->AdvanceToNextEdge(); // falling edge
if( SamplesToNS( mSerial->GetSampleOfNextEdge() - SoB ) <= MAX_CYCLETIME )
{
mSerial->AdvanceToNextEdge(); // rising edge of second 0
cycleTime = SamplesToNS( mSerial->GetSampleNumber() - SoB );
SoB = mSerial->GetSampleNumber();
starting_sample = SoB;
}
while( 1 )
{
mSerial->AdvanceToNextEdge(); // falling edge
// test if bits for one exist
if( mSerial->WouldAdvancingCauseTransition( NSToSamples( cycleTime / 2 ) ) )
{
// 1
data <<= 1;
data |= 1;
mSerial->AdvanceToNextEdge(); // rising edge of second pulse of 1
mSerial->AdvanceToNextEdge(); // falling edge of second pulse of 1
}
else
{
// 0
data <<= 1;
}
if( !mSerial->WouldAdvancingCauseTransition( NSToSamples( 8 * cycleTime ) ) )
{
Frame frame;
frame.mData1 = data;
frame.mFlags = 0;
frame.mStartingSampleInclusive = starting_sample;
frame.mEndingSampleInclusive = mSerial->GetSampleNumber();
mResults->AddFrame( frame );
ReportProgress( frame.mEndingSampleInclusive );
FrameV2 framev2;
framev2.AddInteger( "data", frame.mData1 );
framev2.AddInteger( "cycletime", cycleTime );
mResults->AddFrameV2( framev2, "ledData", frame.mStartingSampleInclusive, frame.mEndingSampleInclusive );
mResults->CommitResults();
mSerial->Advance( NSToSamples( 8 * cycleTime ) );
if( !mSerial->DoMoreTransitionsExistInCurrentData() )
{
run = 0;
}
break;
}
if( SamplesToNS( mSerial->GetSampleOfNextEdge() - SoB ) < cycleTime * 2 )
{
mSerial->AdvanceToNextEdge(); // rising edge of next bit
SoB = mSerial->GetSampleNumber();
}
else if( SamplesToNS( mSerial->GetSampleOfNextEdge() - SoB ) < cycleTime * 5.5 )
// ||
// SamplesToNS( mSerial->GetSampleOfNextEdge() - SoB ) > cycleTime * 8 )
{
// EOS end of sequence
Frame frame;
frame.mData1 = data;
frame.mFlags = 0;
frame.mStartingSampleInclusive = starting_sample;
frame.mEndingSampleInclusive = mSerial->GetSampleNumber();
mResults->AddFrame( frame );
ReportProgress( frame.mEndingSampleInclusive );
FrameV2 framev2;
framev2.AddInteger( "data", frame.mData1 );
framev2.AddInteger( "cycletime", cycleTime );
mResults->AddFrameV2( framev2, "ledData", frame.mStartingSampleInclusive, frame.mEndingSampleInclusive );
mResults->CommitResults();
data = 0;
mSerial->AdvanceToNextEdge();
SoB = mSerial->GetSampleNumber();
starting_sample = SoB;
}
}
}
// if( mSerial->GetBitState() == BIT_LOW )
// mSerial->AdvanceToNextEdge();
// U32 samples_per_bit = mSampleRateHz / mSettings.mBitRate;
// U32 samples_to_first_center_of_first_data_bit = U32( 1.5 * double( mSampleRateHz ) / double( mSettings.mBitRate ) );
// bool firstRun = 1;
// U64 startEdge, starting_sample;
// U8 bits = 0;
// while( 1 )
// {
// if( firstRun )
// {
// startEdge = mSerial->GetSampleNumber();
// starting_sample = startEdge;
// mSerial->AdvanceToNextEdge(); // falling edge
// cycleTime = SamplesToNS( mSerial->GetSampleOfNextEdge() - startEdge );
// firstRun = false;
// bits = 1;
// }
// else
// {
// }
// U32 data = 0;
// U8 bits = 2;
// mSerial->AdvanceToNextEdge(); // rising edge
// startEdge = mSerial->GetSampleNumber();
// mSerial->AdvanceToNextEdge(); // falling edge // second zero
// while( 1 )
// {
// if( SamplesToNS( mSerial->GetSampleOfNextEdge() - startEdge ) < cycleTime / 2 )
// {
// // one
// data <<= 1;
// data |= 1;
// bits += 1;
// mResults->AddMarker( startEdge, AnalyzerResults::One, mSettings.mInputChannel );
// }
// else if( SamplesToNS( mSerial->GetSampleOfNextEdge() - startEdge ) < cycleTime * 2 )
// {
// // zero
// data <<= 1;
// bits += 1;
// mResults->AddMarker( startEdge, AnalyzerResults::Zero, mSettings.mInputChannel );
// }
// else if( SamplesToNS( mSerial->GetSampleOfNextEdge() - startEdge ) < cycleTime * 5.5 )
// {
// }
// else if( SamplesToNS( mSerial->GetSampleOfNextEdge() - startEdge ) > cycleTime * 8 )
// {
// // cleanup
// }
// if( bits == 32 )
// {
// break;
// }
// else
// {
// mSerial->AdvanceToNextEdge(); // rising edge
// startEdge = mSerial->GetSampleOfNextEdge();
// mSerial->AdvanceToNextEdge(); // falling edge
// }
// }
// Frame frame;
// frame.mData1 = data;
// frame.mFlags = 0;
// frame.mStartingSampleInclusive = starting_sample;
// frame.mEndingSampleInclusive = mSerial->GetSampleNumber();
// mResults->AddFrame( frame );
// mResults->CommitResults();
// ReportProgress( frame.mEndingSampleInclusive );
// }
// for( ;; )
// {
// U8 data = 0;
// U8 mask = 1 << 7;
// mSerial->AdvanceToNextEdge(); // falling edge -- beginning of the start bit
// U64 starting_sample = mSerial->GetSampleNumber();
// // mSerial->Advance( samples_to_first_center_of_first_data_bit );
// for( U32 i = 0; i < 8; i++ )
// {
// // let's put a dot exactly where we sample this bit:
// mResults->AddMarker( mSerial->GetSampleNumber(), AnalyzerResults::Dot, mSettings.mInputChannel );
// if( mSerial->GetBitState() == BIT_HIGH )
// data |= mask;
// // mSerial->Advance( samples_per_bit );
// mask = mask >> 1;
// }
// // we have a byte to save.
// Frame frame;
// frame.mData1 = data;
// frame.mFlags = 0;
// frame.mStartingSampleInclusive = starting_sample;
// frame.mEndingSampleInclusive = mSerial->GetSampleNumber();
// mResults->AddFrame( frame );
// mResults->CommitResults();
// ReportProgress( frame.mEndingSampleInclusive );
// }
}
bool TLC59731Analyzer::NeedsRerun()

View File

@@ -14,38 +14,44 @@
class ANALYZER_EXPORT TLC59731Analyzer : public Analyzer2
{
public:
TLC59731Analyzer();
virtual ~TLC59731Analyzer();
public:
TLC59731Analyzer();
virtual ~TLC59731Analyzer();
virtual void SetupResults();
virtual void WorkerThread();
virtual void SetupResults();
virtual void WorkerThread();
virtual U32 GenerateSimulationData( U64 newest_sample_requested, U32 sample_rate, SimulationChannelDescriptor** simulation_channels );
virtual U32 GetMinimumSampleRateHz();
virtual U32 GenerateSimulationData( U64 newest_sample_requested, U32 sample_rate, SimulationChannelDescriptor** simulation_channels );
virtual U32 GetMinimumSampleRateHz();
virtual const char* GetAnalyzerName() const;
virtual bool NeedsRerun();
U64 SamplesToNS(U64 samples) { return (samples * 1000000000) / mSampleRateHz; }
virtual const char* GetAnalyzerName() const;
virtual bool NeedsRerun();
U64 SamplesToNS( U64 samples )
{
return ( samples * 1000000000 ) / mSampleRateHz;
}
U32 NSToSamples( U64 time )
{
return ( time * mSampleRateHz ) / 1000000000;
}
protected: //vars
TLC59731AnalyzerSettings mSettings;
std::unique_ptr<TLC59731AnalyzerResults> mResults;
AnalyzerChannelData* mSerial;
protected: // vars
TLC59731AnalyzerSettings mSettings;
std::unique_ptr<TLC59731AnalyzerResults> mResults;
AnalyzerChannelData* mSerial;
TLC59731SimulationDataGenerator mSimulationDataGenerator;
bool mSimulationInitilized;
//Serial analysis vars:
U32 mSampleRateHz;
U64 cycleTime;
U32 mStartOfStopBitOffset;
U32 mEndOfStopBitOffset;
TLC59731SimulationDataGenerator mSimulationDataGenerator;
bool mSimulationInitilized;
// Serial analysis vars:
U32 mSampleRateHz;
U64 cycleTime;
U32 mStartOfStopBitOffset;
U32 mEndOfStopBitOffset;
};
extern "C" ANALYZER_EXPORT const char* __cdecl GetAnalyzerName();
extern "C" ANALYZER_EXPORT Analyzer* __cdecl CreateAnalyzer( );
extern "C" ANALYZER_EXPORT Analyzer* __cdecl CreateAnalyzer();
extern "C" ANALYZER_EXPORT void __cdecl DestroyAnalyzer( Analyzer* analyzer );
#endif //TLC59731_ANALYZER_H
#endif // TLC59731_ANALYZER_H