From 825d770993ca25d7b40a0f4b7dd2705050660209 Mon Sep 17 00:00:00 2001 From: F5OEO Date: Wed, 21 Mar 2018 09:44:43 +0000 Subject: [PATCH] Add block write method --- src/iqdmasync.cpp | 35 +++++++++++++++++++++++++++++++++-- src/iqdmasync.h | 4 +++- src/ngfmdmasync.cpp | 36 ++++++++++++++++++++++++++++++++++-- src/ngfmdmasync.h | 4 +++- 4 files changed, 73 insertions(+), 6 deletions(-) diff --git a/src/iqdmasync.cpp b/src/iqdmasync.cpp index ed75588..afb4f3a 100644 --- a/src/iqdmasync.cpp +++ b/src/iqdmasync.cpp @@ -19,15 +19,17 @@ This program is free software: you can redistribute it and/or modify #include "stdio.h" #include "iqdmasync.h" +#include +#include -iqdmasync::iqdmasync(uint64_t TuneFrequency,uint32_t SampleRate,int Channel,uint32_t FifoSize):bufferdma(Channel,FifoSize,4,3) +iqdmasync::iqdmasync(uint64_t TuneFrequency,uint32_t SR,int Channel,uint32_t FifoSize):bufferdma(Channel,FifoSize,4,3) { // Usermem : // FRAC frequency // PAD Amplitude // FSEL for amplitude 0 - + SampleRate=SR; tunefreq=TuneFrequency; clkgpio::SetAdvancedPllMode(true); clkgpio::SetCenterFrequency(TuneFrequency,SampleRate); // Write Mult Int and Frac : FixMe carrier is already there @@ -162,4 +164,33 @@ void iqdmasync::SetIQSample(uint32_t Index,std::complex sample) PushSample(Index); } +void iqdmasync::SetIQSamples(std::complex *sample,size_t Size) +{ + size_t NbWritten=0; + int OSGranularity=100; + while(NbWritten0) + { + //fprintf(stderr,"buffer size %d Available %d SampleRate %d Sleep %d\n",buffersize,Available,SampleRate,TimeToSleep); + usleep(TimeToSleep); + } + else + { + //fprintf(stderr,"No Sleep %d\n",TimeToSleep); + sched_yield(); + } + Available=GetBufferAvailable(); + int Index=GetUserMemIndex(); + int ToWrite=((int)Size-(int)NbWritten) sample); + void SetIQSamples(std::complex *sample,size_t Size); }; #endif diff --git a/src/ngfmdmasync.cpp b/src/ngfmdmasync.cpp index 3611408..7512e0a 100644 --- a/src/ngfmdmasync.cpp +++ b/src/ngfmdmasync.cpp @@ -19,12 +19,14 @@ This program is free software: you can redistribute it and/or modify #include "stdio.h" #include "ngfmdmasync.h" +#include +#include -ngfmdmasync::ngfmdmasync(uint64_t TuneFrequency,uint32_t SampleRate,int Channel,uint32_t FifoSize):bufferdma(Channel,FifoSize,2,1) +ngfmdmasync::ngfmdmasync(uint64_t TuneFrequency,uint32_t SR,int Channel,uint32_t FifoSize):bufferdma(Channel,FifoSize,2,1) { - + SampleRate=SR; tunefreq=TuneFrequency; clkgpio::SetAdvancedPllMode(true); clkgpio::SetCenterFrequency(TuneFrequency,SampleRate); // Write Mult Int and Frac : FixMe carrier is already there @@ -114,4 +116,34 @@ void ngfmdmasync::SetFrequencySample(uint32_t Index,double Frequency) PushSample(Index); } +void ngfmdmasync::SetFrequencySamples(double *sample,size_t Size) +{ + size_t NbWritten=0; + int OSGranularity=100; + while(NbWritten0) + { + //fprintf(stderr,"buffer size %d Available %d SampleRate %d Sleep %d\n",buffersize,Available,SampleRate,TimeToSleep); + usleep(TimeToSleep); + } + else + { + //fprintf(stderr,"No Sleep %d\n",TimeToSleep); + sched_yield(); + } + Available=GetBufferAvailable(); + int Index=GetUserMemIndex(); + int ToWrite=((int)Size-(int)NbWritten)