From b32da0908a2768d03fe57c8b43435971d9685fec Mon Sep 17 00:00:00 2001 From: FreeArtMan <=> Date: Sat, 26 Sep 2015 14:32:36 +0100 Subject: Added test terminal waterafall --- test/.gitignore | 1 + test/Makefile | 2 +- test/colors.sh | 25 ++++ test/ui_gl_waterfall.c | 7 ++ test/ui_tui_waterfall.c | 325 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 359 insertions(+), 1 deletion(-) create mode 100755 test/colors.sh create mode 100644 test/ui_gl_waterfall.c (limited to 'test') diff --git a/test/.gitignore b/test/.gitignore index bc5e3c4..c096546 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,4 +1,5 @@ get_device_list read_samples ui_tui_waterfall +ui_gl_waterfall *.o diff --git a/test/Makefile b/test/Makefile index 7fb106d..348fd86 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,7 +1,7 @@ CC=gcc CFLAGS=-I../ #LDFLAGS= `pkg-config --libs libusb` -L../../../r820t -lr820t -Wl,-rpath=../../../r820t -LDFLAGS=`pkg-config --libs libusb` -lrtlsdr ../radiola.o +LDFLAGS=`pkg-config --libs libusb` -lrtlsdr -lm ../radiola.o SOURCE = $(wildcard *.c) OBJECTS = BIN = $(SOURCE:.c=) diff --git a/test/colors.sh b/test/colors.sh new file mode 100755 index 0000000..7882c40 --- /dev/null +++ b/test/colors.sh @@ -0,0 +1,25 @@ +echo -en "\e[38;5;16m#\e[0m" +echo -en "\e[38;5;17m#\e[0m" +echo -en "\e[38;5;18m#\e[0m" +echo -en "\e[38;5;19m#\e[0m" +echo -en "\e[38;5;20m#\e[0m" +echo -en "\e[38;5;21m#\e[0m" +echo -en "\e[38;5;26m#\e[0m" +echo -en "\e[38;5;27m#\e[0m" +echo -en "\e[38;5;44m#\e[0m" +echo -en "\e[38;5;45m#\e[0m" +echo -en "\e[38;5;86m#\e[0m" +echo -en "\e[38;5;87m#\e[0m" +echo -en "\e[38;5;230m#\e[0m" +echo -en "\e[38;5;229m#\e[0m" +echo -en "\e[38;5;228m#\e[0m" +echo -en "\e[38;5;227m#\e[0m" +echo -en "\e[38;5;226m#\e[0m" +echo -en "\e[38;5;214m#\e[0m" +echo -en "\e[38;5;202m#\e[0m" +echo -en "\e[38;5;202m#\e[0m" +echo -en "\e[38;5;196m#\e[0m" +echo -en "\e[38;5;160m#\e[0m" +echo -en "\e[38;5;124m#\e[0m" +echo -en "\e[38;5;88m#\e[0m" +echo -en "\e[38;5;52m#\e[0m" \ No newline at end of file diff --git a/test/ui_gl_waterfall.c b/test/ui_gl_waterfall.c new file mode 100644 index 0000000..40872c8 --- /dev/null +++ b/test/ui_gl_waterfall.c @@ -0,0 +1,7 @@ +#include +#include + +int main() +{ + return 0; +} \ No newline at end of file diff --git a/test/ui_tui_waterfall.c b/test/ui_tui_waterfall.c index a0a83bc..43a21e9 100644 --- a/test/ui_tui_waterfall.c +++ b/test/ui_tui_waterfall.c @@ -1,11 +1,336 @@ +#include #include #include +#include //radiola #include +#include + +#define SAMPLE_RATE 2048000 + +#define CENTER_FREQ 100500000 +#define FFT_LEVEL 10 +#define FFT_SIZE (1 << FFT_LEVEL) +#define BUF_LENGHT (2 * FFT_SIZE) +#define PRESCALE 8 +#define POSTSCALE 2 + +static rtlsdr_dev_t *dev = NULL; + +int16_t* Sinewave; +int N_WAVE, LOG2_N_WAVE; +double* power_table; + +int sdr_init() +{ + int ret; + uint32_t dev_index = 0; + + //open tunner + ret = rtlsdr_open(&dev, (uint32_t)dev_index); + if ( ret < 0 ) + { + printf("Cannot open device %02d\n", dev_index ); + return -1; + } + + ret = rtlsdr_reset_buffer(dev); + if ( ret < 0 ) + { + printf("Couldnt reset buffer\n"); + return -1; + } + + ret = rtlsdr_set_sample_rate(dev, SAMPLE_RATE); + if ( ret < 0 ) + { + printf("Coulnt set sample rate to %d\n", SAMPLE_RATE); + return -1; + } + + ret = rtlsdr_set_center_freq( dev, CENTER_FREQ ); + if ( ret < 0 ) + { + printf("Couldnt set freq %d\n", CENTER_FREQ); + return -1; + } + + ret = rtlsdr_set_tuner_gain_mode( dev, 1 ); + if ( ret < 0 ) + { + printf("Cannot set auto gain mode\n"); + return -1; + } + + ret = rtlsdr_set_agc_mode( dev, 1); + if ( ret < 0 ) + { + printf("Cannot set agc mode\n"); + return -1; + } + + return 0; +} + + +int sdr_close() +{ + //close tunner + if ( dev != NULL) + { + rtlsdr_close( dev ); + dev = NULL; + return 0; + } + return -1; +} + +int sdr_get_samples( uint8_t *buf, int len ) +{ + int ret, read_num; + + ret = rtlsdr_read_sync( dev, buf, len, &read_num ); + if (ret < 0) + { + printf("sync read failed\n"); + return -1; + } + + return 0; +} + +//better to have size size mod olen == 0 +int normalise( uint8_t *ibuf, int ilen, uint8_t *obuf, int olen ) +{ + int i,j,m; + int ppi; + + if ( ilen >= olen ) + { + ppi = ilen / olen; + } else { + return -1; + } + m = 0; + i = 0; + while ( (i < ilen) && (m < olen) ) + { + uint32_t sum=0; + for ( j=0; j> 14; + b = c & 0x01; + return (c >> 1) + b; +} + +int32_t real_conj(int16_t real, int16_t imag) +/* real(n * conj(n)) */ +{ + return ((int32_t)real*(int32_t)real + (int32_t)imag*(int32_t)imag); +} + +int fix_fft(int16_t iq[], int m) +/* interleaved iq[], 0 <= n < 2**m, changes in place */ +{ + int mr, nn, i, j, l, k, istep, n, shift; + int16_t qr, qi, tr, ti, wr, wi; + n = 1 << m; + if (n > N_WAVE) + {return -1;} + mr = 0; + nn = n - 1; + /* decimation in time - re-order data */ + for (m=1; m<=nn; ++m) { + l = n; + do + {l >>= 1;} + while (mr+l > nn); + mr = (mr & (l-1)) + l; + if (mr <= m) + {continue;} + // real = 2*m, imag = 2*m+1 + tr = iq[2*m]; + iq[2*m] = iq[2*mr]; + iq[2*mr] = tr; + ti = iq[2*m+1]; + iq[2*m+1] = iq[2*mr+1]; + iq[2*mr+1] = ti; + } + l = 1; + k = LOG2_N_WAVE-1; + while (l < n) { + shift = 1; + istep = l << 1; + for (m=0; m>= 1; wi >>= 1;} + for (i=m; i>= 1; qi >>= 1;} + iq[2*j] = qr - tr; + iq[2*j+1] = qi - ti; + iq[2*i] = qr + tr; + iq[2*i+1] = qi + ti; + } + } + --k; + l = istep; + } + return 0; +} + +//fftize +int simple_fft( uint8_t *buf, int len ) +{ + int i,j; + uint16_t p; + int fft_len; + + for (i=0; iw; + buf = malloc( buf_len ); + + sample_len = BUF_LENGHT; + sample_buf = malloc( sample_len ); + + srand(0); //fake seed + for ( i=0; i<20;i++ ) + { + //for (j=0; j