switched mResults over to a unique_ptr, because resetting the class directly with the default assignment operator broke its mutexes.

This commit is contained in:
Marcus10110
2024-07-31 13:57:47 -07:00
parent 9a0511d7f2
commit 432743b060
3 changed files with 16 additions and 16 deletions

View File

@@ -667,7 +667,7 @@ extern "C" ANALYZER_EXPORT void __cdecl DestroyAnalyzer( Analyzer* analyzer );
Youll also need these member variables:
```c++
{YourName}AnalyzerSettings mSettings;
{YourName}AnalyzerResults mResults;
std::unique_ptr<{YourName}AnalyzerResults> mResults;
{YourName}SimulationDataGenerator mSimulationDataGenerator;
bool mSimulationInitialized;
```
@@ -686,7 +686,6 @@ Your constructor will look something like this
{YourName}Analyzer::{YourName}Analyzer()
: Analyzer(),
mSettings(),
mResults(this, &mSettings),
mSimulationInitialized( false )
{
SetAnalyzerSettings( &mSettings );
@@ -765,15 +764,15 @@ delete analyzer;
## ```{YourName}Analyzer::WorkerThread()```
Ok, now that everything else is taken care of, lets look at the most important part of the analyzer in detail. First, well reset our ```AnalyzerResults``` derived object. This is because your analyzer class instance may be re-used for multiple runs, so at the beginning of each run, the generated results must be reset.
```c++
mResults = {YourName}AnalyzerResults( this, &mSettings );
mResults.reset( new {YourName}AnalyzerResults( this, &mSettings ) );
```
Well provide a pointer to our results to the base class:
```c++
SetAnalyzerResults( &mResults );
SetAnalyzerResults( mResults.get() );
```
Lets indicate which channels well be displaying results on (in the form of bubbles). Usually this will only be one channel. (Except in the case of SPI, where well want to put bubbles on both the MISO and MISO lines.) Only indicate where we will display bubbles other markup, like tick marks, arrows, etc, are not bubbles, and should not be reported here.
```c++
mResults.AddChannelBubblesWillAppearOn( mSettings.mInputChannel );
mResults->AddChannelBubblesWillAppearOn( mSettings.mInputChannel );
```
Well probably want to know (and save in a member variable) the sample rate.
```c++
@@ -862,8 +861,8 @@ if( such_and_such_error == true )
frame.mFlags |= SUCH_AND_SUCH_ERROR_FLAG | DISPLAY_AS_ERROR_FLAG;
if( such_and_such_warning == true )
frame.mFlags |= SUCH_AND_SUCH_WARNING_FLAG | DISPLAY_AS_WARNING_FLAG;
mResults.AddFrame( frame );
mResults.CommitResults();
mResults->AddFrame( frame );
mResults->CommitResults();
ReportProgress( frame.mEndingSampleInclusive );
```
@@ -886,7 +885,7 @@ void AddMarker( U64 sample_number, MarkerType marker_type, Channel& channel );
```
For example, from ```SerialAnalyzer.cpp``` :
```c++
mResults.AddMarker( marker_location, AnalyzerResults::Dot, mSettings.mInputChannel );
mResults->AddMarker( marker_location, AnalyzerResults::Dot, mSettings.mInputChannel );
```
Currently, the available graphical artifacts are

View File

@@ -5,7 +5,6 @@
SimpleSerialAnalyzer::SimpleSerialAnalyzer()
: Analyzer2(),
mSettings(),
mResults(this, &mSettings),
mSimulationInitilized( false )
{
SetAnalyzerSettings( &mSettings );
@@ -19,9 +18,9 @@ SimpleSerialAnalyzer::~SimpleSerialAnalyzer()
void SimpleSerialAnalyzer::SetupResults()
{
// SetupResults is called each time the analyzer is run. Because the same instance can be used for multiple runs, we need to clear the results each time.
mResults = SimpleSerialAnalyzerResults( this, &mSettings );
SetAnalyzerResults( &mResults );
mResults.AddChannelBubblesWillAppearOn( mSettings.mInputChannel );
mResults.reset(new SimpleSerialAnalyzerResults( this, &mSettings ));
SetAnalyzerResults( mResults.get() );
mResults->AddChannelBubblesWillAppearOn( mSettings.mInputChannel );
}
void SimpleSerialAnalyzer::WorkerThread()
@@ -50,7 +49,7 @@ void SimpleSerialAnalyzer::WorkerThread()
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 );
mResults->AddMarker( mSerial->GetSampleNumber(), AnalyzerResults::Dot, mSettings.mInputChannel );
if( mSerial->GetBitState() == BIT_HIGH )
data |= mask;
@@ -68,8 +67,8 @@ void SimpleSerialAnalyzer::WorkerThread()
frame.mStartingSampleInclusive = starting_sample;
frame.mEndingSampleInclusive = mSerial->GetSampleNumber();
mResults.AddFrame( frame );
mResults.CommitResults();
mResults->AddFrame( frame );
mResults->CommitResults();
ReportProgress( frame.mEndingSampleInclusive );
}
}

View File

@@ -5,6 +5,8 @@
#include "SimpleSerialAnalyzerSettings.h"
#include "SimpleSerialAnalyzerResults.h"
#include "SimpleSerialSimulationDataGenerator.h"
#include <memory>
class ANALYZER_EXPORT SimpleSerialAnalyzer : public Analyzer2
{
public:
@@ -22,7 +24,7 @@ public:
protected: //vars
SimpleSerialAnalyzerSettings mSettings;
SimpleSerialAnalyzerResults mResults;
std::unique_ptr<SimpleSerialAnalyzerResults> mResults;
AnalyzerChannelData* mSerial;
SimpleSerialSimulationDataGenerator mSimulationDataGenerator;