From 5fede66e27eb270075e09c9bb5122c5c80acbe0a Mon Sep 17 00:00:00 2001 From: ha7ilm Date: Thu, 3 Dec 2015 17:08:30 +0100 Subject: [PATCH] fastddc_inv_cc is now controllable via --fd and --fifo. --- csdr.c | 35 +++++++++++++++++++++++++++-------- ddcd.cpp | 2 +- ddcd.h | 8 ++++---- grc_tests/test_fastddc.grc | 10 +++++----- 4 files changed, 37 insertions(+), 18 deletions(-) diff --git a/csdr.c b/csdr.c index f6e4799..ba87564 100644 --- a/csdr.c +++ b/csdr.c @@ -1808,22 +1808,38 @@ int main(int argc, char *argv[]) } } - if( !strcmp(argv[1],"fastddc_inv_cc") ) // [transition_bw [window]] + if( !strcmp(argv[1],"fastddc_inv_cc") ) // [transition_bw [window]] { - int decimation; - if(argc<=2) return badsyntax("need required parameter (decimation)"); - sscanf(argv[2],"%d",&decimation); - float shift_rate; - if(argc>3) sscanf(argv[3],"%g",&shift_rate); + int plusarg=0; + + int fd; + if(fd=init_fifo(argc,argv)) + { + while(!read_fifo_ctl(fd,"%g\n",&shift_rate)) usleep(10000); + plusarg=1; + } + else + { + if(argc<=2) return badsyntax("need required parameter (rate)"); + sscanf(argv[2],"%g",&shift_rate); + } + + int decimation; + if(argc<=3+plusarg) return badsyntax("need required parameter (decimation)"); + sscanf(argv[3+plusarg],"%d",&decimation); + //fprintf(stderr, "dec=%d %d\n", decimation); float transition_bw = 0.05; - if(argc>4) sscanf(argv[4],"%g",&transition_bw); + if(argc>4+plusarg) sscanf(argv[4+plusarg],"%g",&transition_bw); window_t window = WINDOW_DEFAULT; - if(argc>5) window=firdes_get_window_from_string(argv[5]); + if(argc>5+plusarg) window=firdes_get_window_from_string(argv[5+plusarg]); else fprintf(stderr,"fastddc_apply_cc: window = %s\n",firdes_get_string_from_window(window)); + for(;;) + { + fastddc_t ddc; if(fastddc_init(&ddc, transition_bw, decimation, shift_rate)) { badsyntax("error in fastddc_init()"); return 1; } fastddc_print(&ddc,"fastddc_inv_cc"); @@ -1864,6 +1880,9 @@ int main(int argc, char *argv[]) fwrite(output, sizeof(complexf), shift_stat.output_size, stdout); //fprintf(stderr, "ss os = %d\n", shift_stat.output_size); TRY_YIELD; + if(read_fifo_ctl(fd,"%g\n",&shift_rate)) break; + } + } } diff --git a/ddcd.cpp b/ddcd.cpp index 9538bc9..11a17ac 100644 --- a/ddcd.cpp +++ b/ddcd.cpp @@ -479,7 +479,7 @@ void client() sprintf(client_subprocess_cmd_buf, subprocess_cmd_td, pipe_ctl[0], decimation, transition_bw); break; case M_FASTDDC: - sprintf(client_subprocess_cmd_buf, subprocess_args_fastddc_2, decimation, pipe_ctl[0], transition_bw); + sprintf(client_subprocess_cmd_buf, subprocess_args_fastddc_2, pipe_ctl[0], decimation, transition_bw); break; } diff --git a/ddcd.h b/ddcd.h index 9edd913..af4cfb5 100644 --- a/ddcd.h +++ b/ddcd.h @@ -56,7 +56,7 @@ const char subprocess_cmd_td[] = "csdr " #endif " --fd %d | csdr fir_decimate_cc %d %g"; -//const char subprocess_args_fastddc_1[] = "csdr fastddc_fwd_cc %d %g"; -const char subprocess_args_fastddc_1[] = "csdr through %d %g"; -//const char subprocess_args_fastddc_2[] = "csdr fastddc_inv_cc %d --pipe %d %g"; -const char subprocess_args_fastddc_2[] = "csdr convert_u8_f %d %d %g"; +const char subprocess_args_fastddc_1[] = "csdr fastddc_fwd_cc %d %g"; +//const char subprocess_args_fastddc_1[] = "csdr through %d %g"; +const char subprocess_args_fastddc_2[] = "csdr fastddc_inv_cc --fd %d %d %g"; +//const char subprocess_args_fastddc_2[] = "csdr convert_u8_f %d %d %g"; diff --git a/grc_tests/test_fastddc.grc b/grc_tests/test_fastddc.grc index 829a336..14acb88 100644 --- a/grc_tests/test_fastddc.grc +++ b/grc_tests/test_fastddc.grc @@ -257,7 +257,7 @@ _coordinate - (112, 875) + (112, 675) _rotation @@ -375,7 +375,7 @@ _coordinate - (136, 763) + (368, 691) _rotation @@ -465,7 +465,7 @@ commandline - csdr fastddc_fwd_cc %d | csdr fastddc_inv_cc %d 0.4"%(decimation,decimation)+" + csdr fastddc_fwd_cc %d | csdr fastddc_inv_cc 0.4 %d"%(decimation,decimation)+" comment @@ -690,7 +690,7 @@ _coordinate - (616, 379) + (616, 291) _rotation @@ -789,7 +789,7 @@ _coordinate - (400, 691) + (576, 619) _rotation