diff --git a/corel8 b/corel8 new file mode 100755 index 0000000..a6c6b27 Binary files /dev/null and b/corel8 differ diff --git a/csdr b/csdr new file mode 160000 index 0000000..6ef2a74 --- /dev/null +++ b/csdr @@ -0,0 +1 @@ +Subproject commit 6ef2a74206887155290a54c7117636f66742f858 diff --git a/dvbrf b/dvbrf new file mode 100755 index 0000000..c9f70ae Binary files /dev/null and b/dvbrf differ diff --git a/freedv b/freedv new file mode 100755 index 0000000..1789dec Binary files /dev/null and b/freedv differ diff --git a/pichirp b/pichirp new file mode 100755 index 0000000..5006ed7 Binary files /dev/null and b/pichirp differ diff --git a/pifmrds b/pifmrds new file mode 100755 index 0000000..b5e1bca Binary files /dev/null and b/pifmrds differ diff --git a/pift8 b/pift8 new file mode 100755 index 0000000..d2884f2 Binary files /dev/null and b/pift8 differ diff --git a/piopera b/piopera new file mode 100755 index 0000000..4f9761a Binary files /dev/null and b/piopera differ diff --git a/pocsag b/pocsag new file mode 100755 index 0000000..83bd4e4 Binary files /dev/null and b/pocsag differ diff --git a/sendiq b/sendiq new file mode 100755 index 0000000..9d39448 Binary files /dev/null and b/sendiq differ diff --git a/spectrumpaint b/spectrumpaint new file mode 100755 index 0000000..281ce49 Binary files /dev/null and b/spectrumpaint differ diff --git a/src/librpitx b/src/librpitx new file mode 160000 index 0000000..c9714b2 --- /dev/null +++ b/src/librpitx @@ -0,0 +1 @@ +Subproject commit c9714b2a7da7cb154f8d2d480200a09e495793bb diff --git a/src/pifmrds/rds_wav b/src/pifmrds/rds_wav new file mode 100755 index 0000000..7ce5a54 Binary files /dev/null and b/src/pifmrds/rds_wav differ diff --git a/src/pift8/ft8_lib b/src/pift8/ft8_lib index dd6599b..c6d79b9 160000 --- a/src/pift8/ft8_lib +++ b/src/pift8/ft8_lib @@ -1 +1 @@ -Subproject commit dd6599bee686b10b4b2661fda1f593d15d498544 +Subproject commit c6d79b961cd5425ede48ba5e5f3c279d0932c806 diff --git a/src/sendiq.cpp b/src/sendiq.cpp index d4495ce..6c522b8 100644 --- a/src/sendiq.cpp +++ b/src/sendiq.cpp @@ -4,15 +4,28 @@ #include #include #include +#include //Used for shared memory +//----- SHARED MEMORY STRUCTURE ----- +struct shared_memory_struct { + bool updated; + int command; + float data; + char common_data[1024]; +}; -bool running=true; +bool running=true; +bool fdds=false; //operate as a DDS +float drivedds=1.0; //drive level -#define PROGRAM_VERSION "0.1" +#define PROGRAM_VERSION "0.2" -void SimpleTestFileIQ(uint64_t Freq) -{ - -} +// *----- Shared memory Variables + + void *pshared = (void *)0; //pointer to IPC structure + struct shared_memory_struct *sharedmem; //Actual shared memory area + int sharedmem_id; //token is an unique ID for shared memory + int sharedmem_token=0; //key ID, =0 means no shared memory +// *----- End of shared memory definitions void print_usage(void) { @@ -23,6 +36,9 @@ Usage:\nsendiq [-i File Input][-s Samplerate][-l] [-f Frequency] [-h Harmonic nu -i path to File Input \n\ -s SampleRate 10000-250000 \n\ -f float central frequency Hz(50 kHz to 1500 MHz),\n\ +-m int shared memory token,\n\ +-d dds mode,\n\ +-p power level (0.00 to 7.00),\n\ -l loop mode for file input\n\ -h Use harmonic number n\n\ -t IQ type (i16 default) {i16,u8,float,double}\n\ @@ -36,7 +52,7 @@ static void terminate(int num) { running=false; - fprintf(stderr,"Caught signal - Terminating %x\n",num); + fprintf(stderr,"Caught signal - Terminating %x\n",num); } @@ -54,9 +70,10 @@ int main(int argc, char* argv[]) enum {typeiq_i16,typeiq_u8,typeiq_float,typeiq_double}; int InputType=typeiq_i16; int Decimation=1; + while(1) { - a = getopt(argc, argv, "i:f:s:h:lt:"); + a = getopt(argc, argv, "i:f:s:m:p:h:ldt:"); if(a == -1) { @@ -70,14 +87,24 @@ int main(int argc, char* argv[]) case 'i': // File name FileName = optarg; break; + case 'd': // dds mode + fdds=true; + break; + case 'p': // driver level (power) + drivedds=atof(optarg); + if (drivedds<0.0) {drivedds=0.0;} + if (drivedds>7.0) {drivedds=7.0;} + break; case 'f': // Frequency SetFrequency = atof(optarg); break; + case 'm': // Shared memory token + sharedmem_token = atoi(optarg); + break; case 's': // SampleRate (Only needeed in IQ mode) SampleRate = atoi(optarg); if(SampleRate>MAX_SAMPLERATE) { - for(int i=2;i<12;i++) //Max 10 times samplerate { if(SampleRate/i%d sample/s",10*MAX_SAMPLERATE); exit(1); - } + } else - { + { fprintf(stderr,"Warning samplerate too high, decimation by %d will be performed",Decimation); - } - }; + } + }; break; case 'h': // help Harmonic=atoi(optarg); @@ -154,14 +181,43 @@ int main(int argc, char* argv[]) } #define IQBURST 4000 - int SR=48000; int FifoSize=IQBURST*4; iqdmasync iqtest(SetFrequency,SampleRate,14,FifoSize,MODE_IQ); iqtest.SetPLLMasterLoop(3,4,0); + + if (fdds==true) { //if instructed to operate as DDS start with carrier, otherwise I/Q mode it is + iqtest.ModeIQ=MODE_FREQ_A; + } + //iqtest.print_clock_tree(); //iqtest.SetPLLMasterLoop(5,6,0); - +//========================================================================================================= +// *------ Shared memory definitions if enabled +//========================================================================================================= + if (sharedmem_token != 0) { + sharedmem_id = shmget((key_t)sharedmem_token, sizeof(struct shared_memory_struct), 0666 | IPC_CREAT); //<<<<< SET THE SHARED MEMORY KEY (Shared memory key , Size in bytes, Permission flags) + if (sharedmem_id == -1) { + printf("Shared memory shmget() failed\n"); + exit(8); + } + +// *----- Make the shared memory accessible to the program + pshared = shmat(sharedmem_id, (void *)0, 0); + if (pshared == (void *)-1) { + printf("Shared memory shmat() failed\n"); + exit(16); + } + +// *----- Assign the shared_memory segment + sharedmem = (struct shared_memory_struct *)pshared; + + sharedmem->updated=false; + sharedmem->command=0x00; + sharedmem->data=0; + } +//========================================================================================================= + std::complex CIQBuffer[IQBURST]; while(running) { @@ -173,7 +229,6 @@ int main(int argc, char* argv[]) { static short IQBuffer[IQBURST*2]; int nbread=fread(IQBuffer,sizeof(short),IQBURST*2,iqfile); - //if(nbread==0) continue; if(nbread>0) { for(int i=0;i((IQBuffer[i*2]-127.5)/128.0,(IQBuffer[i*2+1]-127.5)/128.0); } - //printf("%f %f\n",(IQBuffer[i*2]-127.5)/128.0,(IQBuffer[i*2+1]-127.5)/128.0); } } else @@ -226,17 +280,47 @@ int main(int argc, char* argv[]) { static float IQBuffer[IQBURST*2]; int nbread=fread(IQBuffer,sizeof(float),IQBURST*2,iqfile); - //if(nbread==0) continue; if(nbread>0) { for(int i=0;iupdated==true) { + if (sharedmem->command == 1111) { + iqtest.ModeIQ=MODE_IQ; + } + if (sharedmem->command == 2222) { + iqtest.ModeIQ=MODE_FREQ_A; + } + + if (sharedmem->command == 3333) { + drivedds=sharedmem->data; + } + if (sharedmem->command == 4444) { + SetFrequency=sharedmem->data; + iqtest.clkgpio::disableclk(4); + iqtest.clkgpio::SetAdvancedPllMode(true); + iqtest.clkgpio::SetCenterFrequency(SetFrequency,SampleRate); + iqtest.clkgpio::SetFrequency(0); + iqtest.clkgpio::enableclk(4); + } + sharedmem->updated=false; + } + } + if (iqtest.ModeIQ==MODE_FREQ_A) { //if into Frequency-Amplitude mode then only drive a constant carrier + IQBuffer[i*2]=10.0; //should be 10 Hz + IQBuffer[i*2+1]=drivedds; //at the defined drive level + } +// *--------------------------------------------------------------------------------------------------------------------------------------------- if(i%Decimation==0) - { + { CIQBuffer[CplxSampleNumber++]=std::complex(IQBuffer[i*2],IQBuffer[i*2+1]); - - } - //printf("%f %f\n",(IQBuffer[i*2]-127.5)/128.0,(IQBuffer[i*2+1]-127.5)/128.0); + } } } else @@ -263,7 +347,6 @@ int main(int argc, char* argv[]) CIQBuffer[CplxSampleNumber++]=std::complex(IQBuffer[i*2],IQBuffer[i*2+1]); } - //printf("%f %f\n",(IQBuffer[i*2]-127.5)/128.0,(IQBuffer[i*2+1]-127.5)/128.0); } } else @@ -281,7 +364,19 @@ int main(int argc, char* argv[]) iqtest.SetIQSamples(CIQBuffer,CplxSampleNumber,Harmonic); } + iqtest.stop(); - + +// *--- Detach and delete shared memory + if (sharedmem_token != 0) { + if (shmdt(pshared) == -1) { + printf("shmdt failed\n"); + } else { + if (shmctl(sharedmem_id, IPC_RMID, 0) == -1) { + printf("shmctl(IPC_RMID) failed\n"); + } + } + } +// *--- end of shared memory detach } diff --git a/tune b/tune new file mode 100755 index 0000000..a0ed48c Binary files /dev/null and b/tune differ