#include "SimpleSerialSimulationDataGenerator.h" #include "SimpleSerialAnalyzerSettings.h" #include SimpleSerialSimulationDataGenerator::SimpleSerialSimulationDataGenerator() : mSerialText( "My first analyzer, woo hoo!" ), mStringIndex( 0 ) { } SimpleSerialSimulationDataGenerator::~SimpleSerialSimulationDataGenerator() { } void SimpleSerialSimulationDataGenerator::Initialize( U32 simulation_sample_rate, SimpleSerialAnalyzerSettings* settings ) { mSimulationSampleRateHz = simulation_sample_rate; mSettings = settings; mSerialSimulationData.SetChannel( mSettings->mInputChannel ); mSerialSimulationData.SetSampleRate( simulation_sample_rate ); mSerialSimulationData.SetInitialBitState( BIT_HIGH ); } U32 SimpleSerialSimulationDataGenerator::GenerateSimulationData( U64 largest_sample_requested, U32 sample_rate, SimulationChannelDescriptor** simulation_channel ) { U64 adjusted_largest_sample_requested = AnalyzerHelpers::AdjustSimulationTargetSample( largest_sample_requested, sample_rate, mSimulationSampleRateHz ); while( mSerialSimulationData.GetCurrentSampleNumber() < adjusted_largest_sample_requested ) { CreateSerialByte(); } *simulation_channel = &mSerialSimulationData; return 1; } void SimpleSerialSimulationDataGenerator::CreateSerialByte() { U32 samples_per_bit = mSimulationSampleRateHz / mSettings->mBitRate; U8 byte = mSerialText[ mStringIndex ]; mStringIndex++; if( mStringIndex == mSerialText.size() ) mStringIndex = 0; //we're currenty high //let's move forward a little mSerialSimulationData.Advance( samples_per_bit * 10 ); mSerialSimulationData.Transition(); //low-going edge for start bit mSerialSimulationData.Advance( samples_per_bit ); //add start bit time U8 mask = 0x1 << 7; for( U32 i=0; i<8; i++ ) { if( ( byte & mask ) != 0 ) mSerialSimulationData.TransitionIfNeeded( BIT_HIGH ); else mSerialSimulationData.TransitionIfNeeded( BIT_LOW ); mSerialSimulationData.Advance( samples_per_bit ); mask = mask >> 1; } mSerialSimulationData.TransitionIfNeeded( BIT_HIGH ); //we need to end high //lets pad the end a bit for the stop bit: mSerialSimulationData.Advance( samples_per_bit ); }