diff --git a/src/amdmasync.cpp b/src/amdmasync.cpp index 1af14f8..ff4d76a 100644 --- a/src/amdmasync.cpp +++ b/src/amdmasync.cpp @@ -17,13 +17,17 @@ This program is free software: you can redistribute it and/or modify #include "stdio.h" #include "amdmasync.h" +#include "gpio.h" +#include #include +#include +#include -amdmasync::amdmasync(uint64_t TuneFrequency,uint32_t SampleRate,int Channel,uint32_t FifoSize):bufferdma(Channel,FifoSize,3,2) +amdmasync::amdmasync(uint64_t TuneFrequency,uint32_t SR,int Channel,uint32_t FifoSize):bufferdma(Channel,FifoSize,3,2) { - + SampleRate=SR; tunefreq=TuneFrequency; clkgpio::SetAdvancedPllMode(true); clkgpio::SetCenterFrequency(TuneFrequency,SampleRate); @@ -136,4 +140,45 @@ void amdmasync::SetAmSample(uint32_t Index,float Amplitude) //-1;1 PushSample(Index); } +void amdmasync::SetAmSamples(float *sample,size_t Size) +{ + size_t NbWritten=0; + int OSGranularity=100; + + long int start_time; + long time_difference=0; + struct timespec gettime_now; + + 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(); + } + clock_gettime(CLOCK_REALTIME, &gettime_now); + time_difference = gettime_now.tv_nsec - start_time; + if(time_difference<0) time_difference+=1E9; + //fprintf(stderr,"Measure samplerate=%d\n",(int)((GetBufferAvailable()-Available)*1e9/time_difference)); + Available=GetBufferAvailable(); + int Index=GetUserMemIndex(); + int ToWrite=((int)Size-(int)NbWritten)