#include #include "../src/librpitx.h" #include #include "stdio.h" #include #include bool running=true; void SimpleTest(uint64_t Freq) { generalgpio genpio; fprintf(stderr,"GPIOPULL =%x\n",genpio.gpioreg[GPPUDCLK0]); #define PULL_OFF 0 #define PULL_DOWN 1 #define PULL_UP 2 genpio.gpioreg[GPPUD]=PULL_DOWN; usleep(100); genpio.gpioreg[GPPUDCLK0]=(1<<4); //GPIO CLK is GPIO 4 usleep(100); //genpio.gpioreg[GPPUDCLK0]=(0); //GPIO CLK is GPIO 4 clkgpio clk; clk.print_clock_tree(); clk.SetPllNumber(clk_plld,1); clk.SetAdvancedPllMode(true); //clk.Setppm(+7.7); clk.SetCenterFrequency(Freq,1000); double freqresolution=clk.GetFrequencyResolution(); double RealFreq=clk.GetRealFrequency(0); fprintf(stderr,"Frequency resolution=%f Error freq=%f\n",freqresolution,RealFreq); int Deviation=0; clk.SetFrequency(000); clk.enableclk(4); while(running) { clk.SetFrequency(000); sleep(5); clk.SetFrequency(freqresolution); sleep(5); } /* for(int i=0;i<100000;i+=1) { clk.SetFrequency(0); usleep(1000); }*/ clk.disableclk(4); } void SimpleTestDMA(uint64_t Freq) { int SR=1000; int FifoSize=4096; ngfmdmasync ngfmtest(Freq,SR,14,FifoSize); for(int i=0;running;) { //usleep(10); usleep(FifoSize*1000000.0*3.0/(4.0*SR)); int Available=ngfmtest.GetBufferAvailable(); if(Available>FifoSize/2) { int Index=ngfmtest.GetUserMemIndex(); //printf("GetIndex=%d\n",Index); for(int j=0;j5000)?1000:0); ngfmtest.SetFrequencySample(Index+j,(i%SR)/10.0); i++; } } } fprintf(stderr,"End\n"); ngfmtest.stop(); } void SimpleTestFileIQ(uint64_t Freq) { FILE *iqfile=NULL; iqfile=fopen("../ssbtest.iq","rb"); if (iqfile==NULL) printf("input file issue\n"); #define IQBURST 1280 bool stereo=true; int SR=48000; int FifoSize=512; iqdmasync iqtest(Freq,SR,14,FifoSize); short IQBuffer[IQBURST*2]; std::complex CIQBuffer[IQBURST]; while(running) { int nbread=fread(IQBuffer,sizeof(short),IQBURST*2,iqfile); if(nbread>0) { for(int i=0;i(IQBuffer[i*2]/32768.0,IQBuffer[i*2+1]/32768.0); } iqtest.SetIQSamples(CIQBuffer,nbread/2,1); } else { printf("End of file\n"); fseek ( iqfile , 0 , SEEK_SET ); } } iqtest.stop(); } void SimpleTestbpsk(uint64_t Freq) { clkgpio clk; clk.print_clock_tree(); int SR=100000; int FifoSize=1024; int NumberofPhase=2; phasedmasync biphase(Freq,SR,NumberofPhase,14,FifoSize); int lastphase=0; while(running) { //usleep(FifoSize*1000000.0*1.0/(8.0*SR)); usleep(10); int Available=biphase.GetBufferAvailable(); if(Available>256) { int Index=biphase.GetUserMemIndex(); for(int i=0;i256) { int Index=testserial.GetUserMemIndex(); for(int i=0;i256) { int Index=amtest.GetUserMemIndex(); int nbread=fread(AudioBuffer,sizeof(short),128*2,audiofile); if(nbread>0) { for(int i=0;i256) { int Index=amtest.GetUserMemIndex(); for(int i=0;i2000) count=0; } } } amtest.stop(); } void SimpleTestBurstFsk(uint64_t Freq) { //int SR=40625; int SR=40625; float Deviation=26370; int FiFoSize=4000; fskburst fsktest(Freq,SR,Deviation,14,FiFoSize); unsigned char TabSymbol[FiFoSize]; int BurstSize=100; while(running) { int i; int BurstLen=rand()%FiFoSize; for(i=0;i1) Freq=atol(argv[1]); for (int i = 0; i < 64; i++) { struct sigaction sa; std::memset(&sa, 0, sizeof(sa)); sa.sa_handler = terminate; sigaction(i, &sa, NULL); } SimpleTest(Freq); //SimpleTestbpsk(Freq); //SimpleTestFileIQ(Freq); //SimpleTestDMA(Freq); //SimpleTestAm(Freq); //SimpleTestOOK(Freq); //SimpleTestBurstFsk(Freq); }