diff --git a/easytest.sh b/easytest.sh index d21658c..f77507a 100755 --- a/easytest.sh +++ b/easytest.sh @@ -25,6 +25,7 @@ do_stop_transmit() sudo killall freedv 2>/dev/null sudo killall pisstv 2>/dev/null sudo killall csdr 2>/dev/null + sudo killall pirtty 2>/dev/null case "$menuchoice" in @@ -40,6 +41,7 @@ do_stop_transmit() 9\ *) sudo killall testsstv.sh >/dev/null 2>/dev/null ;; 10\ *) sudo killall testpocsag.sh >/dev/null 2>/dev/null ;; 11\ *) sudo killall testopera.sh >/dev/null 2>/dev/null ;; + 12\ *) sudo killall testrtty.sh >/dev/null 2>/dev/null ;; esac } @@ -71,6 +73,7 @@ do_freq_setup "9 SSTV" "Pattern picture" \ "10 Pocsag" "Pager message" \ "11 Opera" "Like morse but need Opera decoder" \ + "12 RTTY" "Radioteletype" \ 3>&2 2>&1 1>&3) RET=$? if [ $RET -eq 1 ]; then @@ -102,6 +105,8 @@ do_freq_setup do_status;; 11\ *) "./testopera.sh" "$OUTPUT_FREQ""e6">/dev/null 2>/dev/null & do_status;; + 12\ *) "./testrtty.sh" "$OUTPUT_FREQ""e6">/dev/null 2>/dev/null & + do_status;; *) status=1 whiptail --title "Bye bye" --msgbox "Thx for using rpitx" 8 78 ;; diff --git a/install.sh b/install.sh index 6db8dfd..82c7726 100755 --- a/install.sh +++ b/install.sh @@ -16,11 +16,15 @@ cd ../ || exit cd src || exit git clone https://github.com/F5OEO/librpitx cd librpitx/src || exit -make +make && sudo make install cd ../../ || exit cd pift8 -git clone https://github.com/kgoba/ft8_lib +git clone https://github.com/F5OEO/ft8_lib +cd ft8_lib +make && sudo make install +cd ../ +make cd ../ make diff --git a/src/Makefile b/src/Makefile index 78f26c7..a7cc023 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,97 +1,102 @@ -all: ../pisstv ../piopera ../pifsq ../pichirp ../sendiq ../tune ../freedv ../pocsag ../spectrumpaint ../pifmrds ../rpitx ../corel8 ../pift8 ../sendook ../morse ../foxhunt +all: ../pisstv ../piopera ../pifsq ../pichirp ../sendiq ../tune ../freedv ../pocsag ../spectrumpaint ../pifmrds ../rpitx ../corel8 ../pift8 ../sendook ../morse ../foxhunt ../pirtty -CFLAGS = -Wall -g -O2 -Wno-unused-variable -CXXFLAGS = -std=c++11 -Wall -g -O2 -Wno-unused-variable -LDFLAGS = librpitx/src/librpitx.a -lm -lrt -lpthread -L/opt/vc/lib -lbcm_host -CCP = c++ -CC = cc +CFLAGS ?= -Wall -g -O2 -Wno-unused-variable +CXXFLAGS ?= -std=c++11 -Wall -g -O2 -Wno-unused-variable +LDFLAGS ?= -L/opt/vc/lib +LDFLAGS += -lrpitx -lm -lrt -lpthread +CXX ?= c++ +CC ?= cc CFLAGS_Pissb = -Wall -g -O2 -Wno-unused-variable -LDFLAGS_Pissb = librpitx/src/librpitx.a -lm -lrt -lpthread -lsndfile -lliquid -L/opt/vc/lib -lbcm_host +LDFLAGS_Pissb = $(LDFLAGS) -lsndfile -lliquid -../pissb: ssbgen/test_ssb.c ssbgen/ssb_gen.c ssbgen/liquid_ssb.c librpitx/src/librpitx.a +../pissb: ssbgen/test_ssb.c ssbgen/ssb_gen.c ssbgen/liquid_ssb.c $(CC) $(CFLAGS_Pissb) -o ../pissb ssbgen/liquid_ssb.c $(LDFLAGS_Pissb) -../pisstv : sstv/pisstv.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../pisstv sstv/pisstv.cpp $(LDFLAGS) +../pisstv : sstv/pisstv.cpp + $(CXX) $(CXXFLAGS) -o ../pisstv sstv/pisstv.cpp $(LDFLAGS) -../foxhunt : foxhunt/foxhunt.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../foxhunt foxhunt/foxhunt.cpp $(LDFLAGS) +../foxhunt : foxhunt/foxhunt.cpp + $(CXX) $(CXXFLAGS) -o ../foxhunt foxhunt/foxhunt.cpp $(LDFLAGS) + + +../pirtty : pirtty/pirtty.cpp + $(CXX) $(CXXFLAGS) -o ../pirtty pirtty/pirtty.cpp $(LDFLAGS) -../piopera : opera/opera.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../piopera opera/opera.cpp $(LDFLAGS) +../piopera : opera/opera.cpp + $(CXX) $(CXXFLAGS) -o ../piopera opera/opera.cpp $(LDFLAGS) -../pifsq : fsq/pifsq.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../pifsq fsq/pifsq.cpp $(LDFLAGS) +../pifsq : fsq/pifsq.cpp + $(CXX) $(CXXFLAGS) -o ../pifsq fsq/pifsq.cpp $(LDFLAGS) -../pichirp : chirp/chirp.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../pichirp chirp/chirp.cpp $(LDFLAGS) +../pichirp : chirp/chirp.cpp + $(CXX) $(CXXFLAGS) -o ../pichirp chirp/chirp.cpp $(LDFLAGS) -../morse : morse/morse.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../morse morse/morse.cpp $(LDFLAGS) +../morse : morse/morse.cpp + $(CXX) $(CXXFLAGS) -o ../morse morse/morse.cpp $(LDFLAGS) -../sendiq : sendiq.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../sendiq sendiq.cpp $(LDFLAGS) +../sendiq : sendiq.cpp + $(CXX) $(CXXFLAGS) -o ../sendiq sendiq.cpp $(LDFLAGS) -../tune : tune.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../tune tune.cpp $(LDFLAGS) +../tune : tune.cpp + $(CXX) $(CXXFLAGS) -o ../tune tune.cpp $(LDFLAGS) -../freedv : freedv/freedv.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../freedv freedv/freedv.cpp $(LDFLAGS) +../freedv : freedv/freedv.cpp + $(CXX) $(CXXFLAGS) -o ../freedv freedv/freedv.cpp $(LDFLAGS) -../dvbrf : dvb/dvbrf.cpp dvb/dvbsenco8.s dvb/fec100.c dvb/dvbs2arm_1v30.s librpitx/src/librpitx.a +../dvbrf : dvb/dvbrf.cpp dvb/dvbsenco8.s dvb/fec100.c dvb/dvbs2arm_1v30.s $(CC) $(CFLAGS) -c -o dvb/dvbsenco8.o dvb/dvbsenco8.s $(CC) $(CFLAGS) -c -o dvb/dvbs2arm_1v30.o dvb/dvbs2arm_1v30.s $(CC) $(CFLAGS) -c -o dvb/fec100.o dvb/fec100.c - $(CCP) $(CXXFLAGS) -o ../dvbrf dvb/dvbrf.cpp dvb/dvbsenco8.o dvb/fec100.o dvb/dvbs2arm_1v30.o $(LDFLAGS) + $(CXX) $(CXXFLAGS) -o ../dvbrf dvb/dvbrf.cpp dvb/dvbsenco8.o dvb/fec100.o dvb/dvbs2arm_1v30.o $(LDFLAGS) -../pocsag: pocsag/pocsag.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../pocsag pocsag/pocsag.cpp $(LDFLAGS) +../pocsag: pocsag/pocsag.cpp + $(CXX) $(CXXFLAGS) -o ../pocsag pocsag/pocsag.cpp $(LDFLAGS) -../spectrumpaint: spectrumpaint/spectrum.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -o ../spectrumpaint spectrumpaint/spectrum.cpp $(LDFLAGS) +../spectrumpaint: spectrumpaint/spectrum.cpp + $(CXX) $(CXXFLAGS) -o ../spectrumpaint spectrumpaint/spectrum.cpp $(LDFLAGS) -../pifmrds: pifmrds/rds.c pifmrds/waveforms.c pifmrds/pi_fm_rds.cpp pifmrds/fm_mpx.c pifmrds/control_pipe.c librpitx/src/librpitx.a +../pifmrds: pifmrds/rds.c pifmrds/waveforms.c pifmrds/pi_fm_rds.cpp pifmrds/fm_mpx.c pifmrds/control_pipe.c $(CC) $(CFLAGS) -c -o pifmrds/rds.o pifmrds/rds.c $(CC) $(CFLAGS) -c -o pifmrds/control_pipe.o pifmrds/control_pipe.c $(CC) $(CFLAGS) -c -o pifmrds/waveforms.o pifmrds/waveforms.c $(CC) $(CFLAGS) -c -o pifmrds/rds_wav.o pifmrds/rds_wav.c $(CC) $(CFLAGS) -c -o pifmrds/fm_mpx.o pifmrds/fm_mpx.c $(CC) -o pifmrds/rds_wav pifmrds/rds_wav.o pifmrds/rds.o pifmrds/waveforms.o pifmrds/fm_mpx.o -lm -lsndfile - $(CCP) $(CXXFLAGS) -Wno-write-strings -o ../pifmrds pifmrds/rds.o pifmrds/waveforms.o pifmrds/pi_fm_rds.cpp pifmrds/fm_mpx.o pifmrds/control_pipe.o librpitx/src/librpitx.a -lm -lsndfile -lrt -lpthread -L/opt/vc/lib -lbcm_host + $(CXX) $(CXXFLAGS) -Wno-write-strings -o ../pifmrds pifmrds/rds.o pifmrds/waveforms.o pifmrds/pi_fm_rds.cpp pifmrds/fm_mpx.o pifmrds/control_pipe.o -lm -lsndfile -lrt -lpthread -L/opt/vc/lib -lrpitx -../rpitx: rpitxv1/rpitx.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -Wno-write-strings -o ../rpitx rpitxv1/rpitx.cpp $(LDFLAGS) +../rpitx: rpitxv1/rpitx.cpp + $(CXX) $(CXXFLAGS) -Wno-write-strings -o ../rpitx rpitxv1/rpitx.cpp $(LDFLAGS) -../corel8: corel8/corel8.cpp corel8/costas8.h librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -Wno-write-strings -o ../corel8 corel8/corel8.cpp $(LDFLAGS) +../corel8: corel8/corel8.cpp corel8/costas8.h + $(CXX) $(CXXFLAGS) -Wno-write-strings -o ../corel8 corel8/corel8.cpp $(LDFLAGS) -../pift8 : pift8/pift8.cpp pift8/ft8_lib/ft8/constants.cpp pift8/ft8_lib/ft8/text.cpp pift8/ft8_lib/ft8/pack.cpp pift8/ft8_lib/ft8/encode.cpp librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -Wno-write-strings -o ../pift8 pift8/pift8.cpp pift8/ft8_lib/ft8/constants.cpp pift8/ft8_lib/ft8/text.cpp pift8/ft8_lib/ft8/pack.cpp pift8/ft8_lib/ft8/encode.cpp $(LDFLAGS) +../pift8 : pift8/pift8.cpp + $(CXX) $(CXXFLAGS) -Wno-write-strings -o ../pift8 pift8/pift8.cpp -lft8 $(LDFLAGS) -../sendook: ook/sendook.cpp ook/optparse.c librpitx/src/librpitx.a - $(CCP) $(CXXFLAGS) -Wno-write-strings -o ../sendook ook/sendook.cpp ook/optparse.c $(LDFLAGS) +../sendook: ook/sendook.cpp ook/optparse.c + $(CXX) $(CXXFLAGS) -Wno-write-strings -o ../sendook ook/sendook.cpp ook/optparse.c $(LDFLAGS) CFLAGS_Pifm = -Wall -g -O2 -Wno-unused-variable -LDFLAGS_Pifm = librpitx/src/librpitx.a -lm -lrt -lpthread -lsndfile -L/opt/vc/lib -lbcm_host +LDFLAGS_Pifm = $(LDFLAGS) -lsndfile ../pifm : ../fm/pifm.c $(CC) $(CFLAGS_Pifm) -o ../pifm ../fm/pifm.c $(LDFLAGS_Pifm) CFLAGS_Piam = -Wall -g -O2 -Wno-unused-variable -LDFLAGS_Piam = librpitx/src/librpitx.a -lm -lrt -lpthread -lsndfile -L/opt/vc/lib -lbcm_host +LDFLAGS_Piam = $(LDFLAGS_Pifm) ../piam : ../am/piam.c $(CC) $(CFLAGS_Piam) -o ../piam ../am/piam.c $(LDFLAGS_Piam) CFLAGS_Pidcf77 = -Wall -g -O2 -Wno-unused-variable -LDFLAGS_Pidcf77 = librpitx/src/librpitx.a -lm -lrt -lpthread -L/opt/vc/lib -lbcm_host ../pidcf77 : ../dcf77/pidcf77.c - $(CC) $(CFLAGS_Piam) -o ../pidcf77 ../dcf77/pidcf77.c $(LDFLAGS_Piam) + $(CC) $(CFLAGS_Piam) -o ../pidcf77 ../dcf77/pidcf77.c $(LDFLAGS) clean: rm -f ../dvbrf ../sendiq ../pissb ../pisstv ../pifsq ../pifm ../piam ../pidcf77 ../pichirp ../tune ../freedv ../piopera ../spectrumpaint ../pocsag ../pifmrds ../rpitx ../sendook install: all install -m 0755 ../pisstv /usr/bin install -m 0755 ../foxhunt /usr/bin + install -m 0755 ../pirtty /usr/bin install -m 0755 ../piopera /usr/bin install -m 0755 ../pifsq /usr/bin install -m 0755 ../pichirp /usr/bin diff --git a/src/chirp/chirp.cpp b/src/chirp/chirp.cpp index f6ff2b8..53b18fe 100644 --- a/src/chirp/chirp.cpp +++ b/src/chirp/chirp.cpp @@ -1,5 +1,5 @@ #include -#include "../librpitx/src/librpitx.h" +#include #include #include "stdio.h" #include diff --git a/src/corel8/corel8.cpp b/src/corel8/corel8.cpp index 4a47ba8..7a56f49 100644 --- a/src/corel8/corel8.cpp +++ b/src/corel8/corel8.cpp @@ -14,7 +14,7 @@ #include #include -#include "../librpitx/src/librpitx.h" +#include #include "costas8.h" float frequency=14.07e6; diff --git a/src/dvb/dvbrf.cpp b/src/dvb/dvbrf.cpp index 2ac5984..6121907 100644 --- a/src/dvb/dvbrf.cpp +++ b/src/dvb/dvbrf.cpp @@ -1,6 +1,6 @@ #include -#include "../librpitx/src/librpitx.h" -#include "stdio.h" +#include +#include #include #include #include diff --git a/src/foxhunt/foxhunt.cpp b/src/foxhunt/foxhunt.cpp index 78fb2ec..2f7a595 100644 --- a/src/foxhunt/foxhunt.cpp +++ b/src/foxhunt/foxhunt.cpp @@ -1,113 +1,87 @@ -#include -#include -#include #include #include +#include +#include +#include #include #include -#include -#include -#include -#include -#include -#include +#include +#include #include +#include +#include +#include +#include - -#include "../librpitx/src/librpitx.h" - +#include int FileFreqTiming; ngfmdmasync *fmmod; -static double GlobalTuningFrequency=00000.0; -int FifoSize=10000; //10ms -double frequencyshift=20000; -bool running=true; +static double GlobalTuningFrequency = 00000.0; +int FifoSize = 10000; // 10ms +double frequencyshift = 20000; +bool running = true; -void playtone(double Frequency,uint32_t Timing)//Timing in 0.1us +void playtone(double Frequency, uint32_t Timing) // Timing in 0.1us { - uint32_t SumTiming=0; - SumTiming+=Timing%100; - if(SumTiming>=100) - { - Timing+=100; - SumTiming=SumTiming-100; - } - int NbSamples=(Timing/100); + uint32_t SumTiming = 0; + SumTiming += Timing % 100; + if (SumTiming >= 100) { + Timing += 100; + SumTiming = SumTiming - 100; + } + int NbSamples = (Timing / 100); - while(NbSamples>0) - { - usleep(10); - int Available=fmmod->GetBufferAvailable(); - if(Available>FifoSize/2) - { - int Index=fmmod->GetUserMemIndex(); - if(Available>NbSamples) Available=NbSamples; - for(int j=0;jSetFrequencySample(Index+j,Frequency); - NbSamples--; - - } - } - } -} - - - - - -static void SendTones() -{ -double basefreq = 1100; -double freq2 = 1100 + frequencyshift; -while(running) -{ - playtone( 1100 , 10000000) ; - playtone( freq2 , 10000000) ; -} -} - -static void -terminate(int num) -{ - running=false; - fprintf(stderr,"Caught signal - Terminating %x\n",num); - -} - -int main(int argc, char **argv) -{ - float frequency=144.5e6; - if (argc > 1) - { - - - frequency=atof(argv[1]); - frequencyshift=atof(argv[2]); - - } - else - { - printf("usage : foxhunt frequency(Hz) frequency shift(Hz)\n"); - exit(0); - } - - for (int i = 0; i < 64; i++) { - struct sigaction sa; - - std::memset(&sa, 0, sizeof(sa)); - sa.sa_handler = terminate; - sigaction(i, &sa, NULL); + while (NbSamples > 0) { + usleep(10); + int Available = fmmod->GetBufferAvailable(); + if (Available > FifoSize / 2) { + int Index = fmmod->GetUserMemIndex(); + if (Available > NbSamples) + Available = NbSamples; + for (int j = 0; j < Available; j++) { + fmmod->SetFrequencySample(Index + j, Frequency); + NbSamples--; + } } - - fmmod=new ngfmdmasync(frequency,100000,14,FifoSize); - SendTones(); - delete fmmod; - return 0; + } } +static void SendTones() { + double basefreq = 1100; + double freq2 = 1100 + frequencyshift; + while (running) { + playtone(1100, 10000000); + playtone(freq2, 10000000); + } +} +static void terminate(int num) { + running = false; + fprintf(stderr, "Caught signal - Terminating %x\n", num); +} +int main(int argc, char **argv) { + float frequency = 144.5e6; + if (argc > 1) { + frequency = atof(argv[1]); + frequencyshift = atof(argv[2]); + } else { + printf("usage : foxhunt frequency(Hz) frequency shift(Hz)\n"); + exit(0); + } + for (int i = 0; i < 64; i++) { + struct sigaction sa; + + std::memset(&sa, 0, sizeof(sa)); + sa.sa_handler = terminate; + sigaction(i, &sa, NULL); + } + + fmmod = new ngfmdmasync(frequency, 100000, 14, FifoSize); + SendTones(); + delete fmmod; + return 0; +} diff --git a/src/freedv/freedv.cpp b/src/freedv/freedv.cpp index 8375ffe..9da0fce 100644 --- a/src/freedv/freedv.cpp +++ b/src/freedv/freedv.cpp @@ -14,7 +14,7 @@ #include #include -#include "../librpitx/src/librpitx.h" +#include int FileVCO; bool running=true; diff --git a/src/fsq/pifsq.cpp b/src/fsq/pifsq.cpp index f55b638..d31a3fa 100644 --- a/src/fsq/pifsq.cpp +++ b/src/fsq/pifsq.cpp @@ -40,7 +40,7 @@ #include #include #include -#include "../librpitx/src/librpitx.h" +#include #define TONE_SPACING 8789 // ~8.7890625 Hz #define BAUD_2 7812 // CTC value for 2 baud diff --git a/src/morse/morse.cpp b/src/morse/morse.cpp index f5d9a3a..ddb6869 100644 --- a/src/morse/morse.cpp +++ b/src/morse/morse.cpp @@ -13,7 +13,7 @@ #include #include #include -#include "../librpitx/src/librpitx.h" +#include #define MORSECODES 37 diff --git a/src/ook/sendook.cpp b/src/ook/sendook.cpp index 20a1c91..f962b9b 100644 --- a/src/ook/sendook.cpp +++ b/src/ook/sendook.cpp @@ -1,5 +1,5 @@ #include -#include "../librpitx/src/librpitx.h" +#include #include "optparse.h" #include #include "stdio.h" diff --git a/src/opera/opera.cpp b/src/opera/opera.cpp index acd8302..ed713dc 100644 --- a/src/opera/opera.cpp +++ b/src/opera/opera.cpp @@ -37,7 +37,7 @@ #include "math.h" #include #include -#include "../librpitx/src/librpitx.h" +#include bool running=true; //#define __VCpp__ TRUE diff --git a/src/pifmrds/pi_fm_rds.cpp b/src/pifmrds/pi_fm_rds.cpp index 19f0fd5..a3c7b68 100644 --- a/src/pifmrds/pi_fm_rds.cpp +++ b/src/pifmrds/pi_fm_rds.cpp @@ -112,7 +112,7 @@ extern "C" #include "control_pipe.h" } -#include "../librpitx/src/librpitx.h" +#include ngfmdmasync *fmmod; // The deviation specifies how wide the signal is. diff --git a/src/pift8/Makefile b/src/pift8/Makefile index de96446..9aed4fe 100644 --- a/src/pift8/Makefile +++ b/src/pift8/Makefile @@ -1,17 +1,15 @@ -CXXFLAGS = -std=c++14 -I. +CXXFLAGS ?= -std=c++14 -I. LDFLAGS = -lm -gen_ft8: gen_ft8.o ft8/encode.o ft8/pack.o ft8/text.o ft8/pack_77.o ft8/encode_91.o common/wave.o - $(CXX) $(LDFLAGS) -o $@ $^ - -pift8: pift8.o ft8/encode.o ft8/pack.o ft8/text.o ft8/pack_77.o ft8/encode_91.o common/wave.o ../librpitx/src/librpitx.a - $(CXX) $(LDFLAGS) -o $@ $^ +pift8: pift8.o + $(CXX) $(LDFLAGS) -o $@ $^ -lrpitx -lft8 .PHONY: run_tests run_tests: test @./test -test: test.o ft8/encode.o ft8/pack.o ft8/text.o ft8/pack_77.o ft8/encode_91.o ft8/unpack.o - $(CXX) $(LDFLAGS) -o $@ $^ - +test: test.o + $(CXX) $(LDFLAGS) -o $@ $^ -lft8 +clean : + rm pift8 diff --git a/src/pift8/pift8.cpp b/src/pift8/pift8.cpp index 4ce6fca..b72f220 100644 --- a/src/pift8/pift8.cpp +++ b/src/pift8/pift8.cpp @@ -10,7 +10,7 @@ #include "ft8_lib/ft8/encode.h" #include "ft8_lib/ft8/constants.h" -#include "../librpitx/src/librpitx.h" +#include bool running=true; diff --git a/src/pirtty/pirtty.cpp b/src/pirtty/pirtty.cpp new file mode 100644 index 0000000..00a721e --- /dev/null +++ b/src/pirtty/pirtty.cpp @@ -0,0 +1,251 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define byte uint8_t + +int MARK = 2125; +int SPACE = 1955; + + +#define BAUDOT_SHIFT_LTRS 0x1f +#define BAUDOT_SHIFT_FIGS 0x1b +int BAUD_RATE = 22; // 45.45 baud + + +char BAUDOT_FIGS[] = " \r\n1234567890-\a@!&#'()\"/:;?,."; +char BAUDOT_LTRS[] = " \r\nQWERTYUIOPASDFGHJKLZXCVBNM"; +uint8_t baudot[] = {0x4,0x8,0x2,0x1d,0x19,0x10,0xa,0x1,0x15,0x1c,0xc,0x3,0xd,0x18,0x14,0x12,0x16,0xb,0x5,0x1a,0x1e,0x9,0x11,0x17,0xe,0xf,0x13,0x6,0x7}; + + +char TXTEXT[] = "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG"; + + + + + + + + + + + + + + + + + +int FileFreqTiming; + +ngfmdmasync *fmmod; +static double GlobalTuningFrequency=00000.0; +int FifoSize=10000; //10ms +double frequencyshift=20000; +bool running=true; + +void playtone(double Frequency,uint32_t Timing)//Timing in 0.1us +{ + uint32_t SumTiming=0; + SumTiming+=Timing%100; + if(SumTiming>=100) + { + Timing+=100; + SumTiming=SumTiming-100; + } + int NbSamples=(Timing/100); + + while(NbSamples>0) + { + usleep(10); + int Available=fmmod->GetBufferAvailable(); + if(Available>FifoSize/2) + { + int Index=fmmod->GetUserMemIndex(); + if(Available>NbSamples) Available=NbSamples; + for(int j=0;jSetFrequencySample(Index+j,Frequency); + NbSamples--; + + } + } + } +} + + + + + + + + + + + + + + + +void rtty_txbit (bool bit) +{ + if(running) { + if (bit) + { + // MARK + playtone(MARK, BAUD_RATE*10000); + } + else + { + // SPACE + playtone(SPACE, BAUD_RATE*10000); + } + } + +} + + +void rtty_txbyte (byte c) +{ + + + rtty_txbit (0); // Start bit + // Send bits for for char MSB first + for (byte i = 5; i > 0; --i) + { + if ((c & (1 << (i-1))) != 0) + rtty_txbit(1); + else + rtty_txbit(0); + } + rtty_txbit (1); // Stop bits + rtty_txbit (1); +} + + + +void tx(char* string) +{ + char c = *string++; + byte index = 0, pos = 0; + byte shift = 0; + + while (c != '\0') + { + char* index = strchr(BAUDOT_FIGS, c); + if(index != NULL) { + pos = index - BAUDOT_FIGS; + if(pos > 2 && shift != 1) { + shift = 1; + rtty_txbyte(BAUDOT_SHIFT_FIGS); + } + rtty_txbyte (baudot[pos]); + } else { + c = toupper(c); + index = strchr(BAUDOT_LTRS, c); + pos = index - BAUDOT_LTRS; + if(pos > 2 && shift != 2) { + shift = 2; + rtty_txbyte(31); + } + rtty_txbyte (baudot[pos]); + } + c = *string++; + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +static void SendTones() +{ +double basefreq = 0; +double freq2 = 1100 + frequencyshift; +//while(running) +//{ +// tone(1100); +//} +tx(TXTEXT); +} + +static void +terminate(int num) +{ + running=false; + fprintf(stderr,"Caught signal - Terminating %x\n",num); + +} + +int main(int argc, char **argv) +{ + float frequency=144.5e6; + if (argc > 3) + { + + + frequency=atof(argv[1]); + SPACE = atoi(argv[2]); + MARK = SPACE + 170; + strcpy(TXTEXT, argv[3]); + + } + else + { + printf("usage : pirtty [frequency(Hz)] [Space Frequency(hz)] [text]\n"); + exit(0); + } + + for (int i = 0; i < 64; i++) { + struct sigaction sa; + + std::memset(&sa, 0, sizeof(sa)); + sa.sa_handler = terminate; + sigaction(i, &sa, NULL); + } + + fmmod=new ngfmdmasync(frequency,100000,14,FifoSize); + SendTones(); + delete fmmod; + return 0; +} + + + + diff --git a/src/pocsag/pocsag.cpp b/src/pocsag/pocsag.cpp index c3dc487..3ff3ea4 100644 --- a/src/pocsag/pocsag.cpp +++ b/src/pocsag/pocsag.cpp @@ -33,7 +33,7 @@ Fork and modification for rpitx (c)(F5OEO 2018) #include #include #include -#include "../librpitx/src/librpitx.h" +#include #define PROGRAM_VERSION "0.3" //Check out main() at the bottom of the file diff --git a/src/rpitxv1/rpitx.cpp b/src/rpitxv1/rpitx.cpp index 0419c26..f7958bc 100644 --- a/src/rpitxv1/rpitx.cpp +++ b/src/rpitxv1/rpitx.cpp @@ -20,8 +20,8 @@ Helped by a code fragment by PE1NNZ (http://pe1nnz.nl.eu.org/2013/05/direct-ssb-generation-on-pll.html) */ #include -#include "../librpitx/src/librpitx.h" -#include "stdio.h" +#include +#include #include /* va_list, va_start, va_arg, va_end */ #include #include diff --git a/src/sendiq.cpp b/src/sendiq.cpp index 1bf1101..49fb145 100644 --- a/src/sendiq.cpp +++ b/src/sendiq.cpp @@ -1,5 +1,5 @@ #include -#include "librpitx/src/librpitx.h" +#include #include "stdio.h" #include #include diff --git a/src/spectrumpaint/spectrum.cpp b/src/spectrumpaint/spectrum.cpp index c12cc78..ec9e896 100644 --- a/src/spectrumpaint/spectrum.cpp +++ b/src/spectrumpaint/spectrum.cpp @@ -14,7 +14,7 @@ #include #include -#include "../librpitx/src/librpitx.h" +#include int FilePicture; int FileFreqTiming; diff --git a/src/sstv/pisstv.cpp b/src/sstv/pisstv.cpp index 2b697fb..34d70ab 100644 --- a/src/sstv/pisstv.cpp +++ b/src/sstv/pisstv.cpp @@ -15,7 +15,7 @@ #include -#include "../librpitx/src/librpitx.h" +#include int FilePicture; int FileFreqTiming; diff --git a/src/tune.cpp b/src/tune.cpp index 344a71c..5d1d3ff 100644 --- a/src/tune.cpp +++ b/src/tune.cpp @@ -1,5 +1,5 @@ #include -#include "librpitx/src/librpitx.h" +#include #include "stdio.h" #include #include diff --git a/testrtty.sh b/testrtty.sh new file mode 100755 index 0000000..ed8dfd2 --- /dev/null +++ b/testrtty.sh @@ -0,0 +1,2 @@ +#!/bin/bash +sudo ./pirtty "$1" 1000 "the quick brown fox jumps over the lazy dog"