From a8e0d810000c080e2ea966bc967fd0c6d21da61d Mon Sep 17 00:00:00 2001 From: Michael Dickens Date: Mon, 1 Nov 2010 15:57:52 -0400 Subject: Tweak LIBUSB m4 script to not check for 'usb_debug' symbol on Windows, because the symbol does not exist for that platform (only, it seems) --- config/usrp_libusb.m4 | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/config/usrp_libusb.m4 b/config/usrp_libusb.m4 index a434d379d..e4f567ce4 100644 --- a/config/usrp_libusb.m4 +++ b/config/usrp_libusb.m4 @@ -135,21 +135,28 @@ AC_DEFUN([USRP_LIBUSB], [ if test $libusbok = yes; then if test ${libusb_name} != "libusb-1.0"; then dnl PKGCONFIG found a legacy version of libusb; make sure the - dnl variable _usb_debug is available in the found library - AC_LANG_PUSH(C) - save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$USB_INCLUDES" - save_LIBS="$LIBS" - LIBS="$USB_LIBS" - AC_MSG_CHECKING([$libusb_name for symbol usb_debug in library $usb_lib_name]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - extern int usb_debug;]], - [[usb_debug = 0;]])], - [libusbok=yes],[libusbok=no]) - AC_MSG_RESULT([$libusbok]) - LIBS="$save_LIBS" - CPPFLAGS="$save_CPPFLAGS" - AC_LANG_POP(C) + dnl variable _usb_debug is available in the found library. + dnl Do not test on Windows, since that symbol is not defined. + case "$host_os" in + cygwin* | mingw*) + ;; + *) + AC_LANG_PUSH(C) + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$USB_INCLUDES" + save_LIBS="$LIBS" + LIBS="$USB_LIBS" + AC_MSG_CHECKING([$libusb_name for symbol usb_debug in library $usb_lib_name]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + extern int usb_debug;]], + [[usb_debug = 0;]])], + [libusbok=yes],[libusbok=no]) + AC_MSG_RESULT([$libusbok]) + LIBS="$save_LIBS" + CPPFLAGS="$save_CPPFLAGS" + AC_LANG_POP(C) + ;; + esac fi fi fi -- cgit From a45a71005ba215673da78fabc0edae323eebed34 Mon Sep 17 00:00:00 2001 From: Michael Dickens Date: Thu, 4 Nov 2010 21:49:52 -0400 Subject: first shot at Windows-compatible LIBUSB check --- config/usrp_libusb.m4 | 133 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 87 insertions(+), 46 deletions(-) diff --git a/config/usrp_libusb.m4 b/config/usrp_libusb.m4 index e4f567ce4..cc3410f41 100644 --- a/config/usrp_libusb.m4 +++ b/config/usrp_libusb.m4 @@ -24,28 +24,43 @@ dnl Boston, MA 02110-1301, USA. AC_DEFUN([USRP_LIBUSB], [ - dnl Use PKGCONFIG to check for packages first, then check to - dnl make sure the USB_* variables work (whether from PKGCONFIG - dnl or overridden by the user) - - dnl do not use LDFLAGS, since PKGCONFIG will provide everything + dnl do not use LDFLAGS, except on Windows saved_LDFLAGS=${LDFLAGS} - LDFLAGS= - LIBUSB_PKG_CONFIG_NAME= + case "$host_os" in + cygwin* | mingw*) + ;; + *) + LDFLAGS= + ;; + esac - dnl loop over various possible 'libusb' PKGCONFIG names, and choose - dnl the first one that meets both the user's selection (via - dnl configure flags) as well as what is installed + dnl this variable is set in usrp/usrp.pc.in as a requirement + dnl for libusrp; it is OK to be empty. + LIBUSB_PKG_CONFIG_NAME= - dnl create the list of libusb PKGCONFIG modules to test + dnl for Windows (cygin, mingw), do not use PKGCONFIG since LIBUSB + dnl does not install a .pc file. For all other OSs, use + dnl PKGCONFIG to check for various package names first. libusb_list='' - if test x$1 = xyes; then - dnl libusb-1.0 was requested; just test for it - libusb_list="libusb-1.0" - else - dnl test for legacy libusb only - libusb_list="libusb libusb-legacy" - fi + case "$host_os" in + cygwin* | mingw*) + libusb_list='libusb' + ;; + *) + dnl create the list of libusb PKGCONFIG modules to test + if test x$1 = xyes; then + dnl libusb-1.0 was requested; just test for it + libusb_list="libusb-1.0" + else + dnl test for legacy libusb only + libusb_list="libusb libusb-legacy" + fi + ;; + esac + + dnl loop over various possible 'libusb' names, and + dnl choose the first one that meets both the user's selection + dnl (via configure flags) as well as what is installed for libusb_name in ${libusb_list}; do dnl clear internal variables libusbok=no @@ -54,31 +69,45 @@ AC_DEFUN([USRP_LIBUSB], [ usb_lib_func='' usb_lib_name='' - dnl start checks - AC_MSG_NOTICE([Checking for LIBUSB version '${libusb_name}']) - if test ${libusb_name} = "libusb-1.0"; then - dnl see if the pkgconfig module is available - PKG_CHECK_MODULES(USB, ${libusb_name}, [ - libusbok=yes - have_libusb1=yes - usb_header='libusb-1.0/libusb.h' - usb_lib_func='libusb_bulk_transfer' - ], [libusbok=no]) - else - dnl see if the pkgconfig module is available - PKG_CHECK_MODULES(USB, ${libusb_name}, [ - libusbok=yes + case "$host_os" in + cygwin* | mingw*) + USB_INCLUDEDIR= + USB_INCLUDES= + USB_LIBS=-lusb usb_header='usb.h' usb_lib_func='usb_bulk_write' - ], [libusbok=no]) - fi + libusbok=yes + ;; + *) + dnl start checks + AC_MSG_NOTICE([Checking for LIBUSB version '${libusb_name}']) + if test ${libusb_name} = "libusb-1.0"; then + dnl see if the pkgconfig module is available + PKG_CHECK_MODULES(USB, ${libusb_name}, [ + libusbok=yes + have_libusb1=yes + usb_header='libusb-1.0/libusb.h' + usb_lib_func='libusb_bulk_transfer' + ], [libusbok=no]) + else + dnl see if the pkgconfig module is available + PKG_CHECK_MODULES(USB, ${libusb_name}, [ + libusbok=yes + usb_header='usb.h' + usb_lib_func='usb_bulk_write' + ], [libusbok=no]) + fi + ;; + esac if test $libusbok = yes; then - dnl PKGCONFIG found a version of LIBUSB. + dnl PKGCONFIG found a version of LIBUSB, or the info was + dnl provided by the user, or the OS is Windows. + dnl Check it to make sure it meets enough criteria: dnl Verify that $usb_header is a valid header. If so, then dnl verify that $usb_lib_func can be found in the library dnl $usb_lib_name. if so, verify that the symbol 'usb_debug' is - dnl found in the library. + dnl found in the library if not using Windows. dnl Check for the header. Similar to AC_CHECK_HEADERS, dnl but doesn't append to known \#defines. @@ -143,7 +172,9 @@ AC_DEFUN([USRP_LIBUSB], [ *) AC_LANG_PUSH(C) save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$USB_INCLUDES" + if test x$USB_INCLUDEDIR != x; then + CPPFLAGS="$USB_INCLUDES" + fi save_LIBS="$LIBS" LIBS="$USB_LIBS" AC_MSG_CHECKING([$libusb_name for symbol usb_debug in library $usb_lib_name]) @@ -163,7 +194,13 @@ AC_DEFUN([USRP_LIBUSB], [ fi dnl if everything checks out OK, finish up if test $libusbok = yes; then - LIBUSB_PKG_CONFIG_NAME="${libusb_name}" + case "$host_os" in + cygwin* | mingw*) + ;; + *) + LIBUSB_PKG_CONFIG_NAME="${libusb_name}" + ;; + esac break else dnl something wasn't found in this LIBUSB version. @@ -180,7 +217,9 @@ AC_DEFUN([USRP_LIBUSB], [ dnl final error checking, mostly to create #define's AC_LANG_PUSH(C) save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$USB_INCLUDES" + if test x$USB_INCLUDEDIR != x; then + CPPFLAGS="$USB_INCLUDES" + fi dnl Check for the header. AC_CHECK_HEADERS([$usb_header], [], [libusbok=no]) CPPFLAGS="$save_CPPFLAGS" @@ -192,18 +231,20 @@ AC_DEFUN([USRP_LIBUSB], [ dnl check for the library (again) AC_LANG_PUSH(C) save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$USB_INCLUDES" + if test x$USB_INCLUDEDIR != x; then + CPPFLAGS="$USB_INCLUDES" + fi save_LIBS="$LIBS" LIBS="$USB_LIBS" AC_CHECK_LIB([$usb_lib_name], [$usb_lib_func], [], [ libusbok=no AC_MSG_RESULT([USRP requires library '$usb_lib_name' with function '$usb_lib_func', which was either not found or was not usable. See http://www.libusb.org])]) - case "$host_os" in - cygwin* | mingw*) - USB_LIBS="$LIBS" - ;; - *) ;; - esac +# case "$host_os" in +# cygwin* | mingw*) +# USB_LIBS="$LIBS" +# ;; +# *) ;; +# esac LIBS="$save_LIBS" CPPFLAGS="$save_CPPFLAGS" AC_LANG_POP(C) -- cgit From d46b800b882724c07975f1dc897f8166d45150fb Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Mon, 8 Nov 2010 00:47:10 -0500 Subject: Fixing signed/unsigned warnings. --- gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.cc | 11 +++++------ gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.cc | 2 +- gnuradio-core/src/lib/general/gr_float_to_complex.cc | 4 ++-- gnuradio-core/src/lib/gengen/gr_add_XX.cc.t | 2 +- gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t | 4 ++-- gnuradio-core/src/lib/gengen/gr_multiply_XX.cc.t | 2 +- gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t | 4 ++-- 7 files changed, 14 insertions(+), 15 deletions(-) diff --git a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.cc b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.cc index 399632003..59b76a6f0 100644 --- a/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.cc +++ b/gnuradio-core/src/lib/filter/gr_pfb_arb_resampler_ccf.cc @@ -71,7 +71,7 @@ gr_pfb_arb_resampler_ccf::gr_pfb_arb_resampler_ccf (float rate, // Create an FIR filter for each channel and zero out the taps std::vector vtaps(0, d_int_rate); - for(int i = 0; i < d_int_rate; i++) { + for(unsigned int i = 0; i < d_int_rate; i++) { d_filters[i] = gr_fir_util::create_gr_fir_ccf(vtaps); d_diff_filters[i] = gr_fir_util::create_gr_fir_ccf(vtaps); } @@ -97,8 +97,6 @@ gr_pfb_arb_resampler_ccf::create_taps (const std::vector &newtaps, std::vector< std::vector > &ourtaps, std::vector &ourfilter) { - int i,j; - unsigned int ntaps = newtaps.size(); d_taps_per_filter = (unsigned int)ceil((double)ntaps/(double)d_int_rate); @@ -114,10 +112,10 @@ gr_pfb_arb_resampler_ccf::create_taps (const std::vector &newtaps, } // Partition the filter - for(i = 0; i < d_int_rate; i++) { + for(unsigned int i = 0; i < d_int_rate; i++) { // Each channel uses all d_taps_per_filter with 0's if not enough taps to fill out ourtaps[d_int_rate-1-i] = std::vector(d_taps_per_filter, 0); - for(j = 0; j < d_taps_per_filter; j++) { + for(unsigned int j = 0; j < d_taps_per_filter; j++) { ourtaps[d_int_rate - 1 - i][j] = tmp_taps[i + j*d_int_rate]; } @@ -173,7 +171,8 @@ gr_pfb_arb_resampler_ccf::general_work (int noutput_items, return 0; // history requirements may have changed. } - int i = 0, j, count = d_start_index; + int i = 0, count = d_start_index; + unsigned int j; gr_complex o0, o1; // Restore the last filter position diff --git a/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.cc b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.cc index 8a0ad1c4c..e20bc38bb 100644 --- a/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.cc +++ b/gnuradio-core/src/lib/filter/gr_pfb_interpolator_ccf.cc @@ -132,7 +132,7 @@ gr_pfb_interpolator_ccf::work (int noutput_items, int i = 0, count = 0; while(i < noutput_items) { - for(int j = 0; j < d_rate; j++) { + for(unsigned int j = 0; j < d_rate; j++) { out[i] = d_filters[j]->filter(&in[count]); i++; } diff --git a/gnuradio-core/src/lib/general/gr_float_to_complex.cc b/gnuradio-core/src/lib/general/gr_float_to_complex.cc index 89ef18869..a392abd06 100644 --- a/gnuradio-core/src/lib/general/gr_float_to_complex.cc +++ b/gnuradio-core/src/lib/general/gr_float_to_complex.cc @@ -52,12 +52,12 @@ gr_float_to_complex::work (int noutput_items, switch (input_items.size ()){ case 1: - for (int j = 0; j < noutput_items*d_vlen; j++) + for (size_t j = 0; j < noutput_items*d_vlen; j++) out[j] = gr_complex (r[j], 0); break; case 2: - for (int j = 0; j < noutput_items*d_vlen; j++) + for (size_t j = 0; j < noutput_items*d_vlen; j++) out[j] = gr_complex (r[j], i[j]); break; diff --git a/gnuradio-core/src/lib/gengen/gr_add_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_add_XX.cc.t index 58a25325a..0e8b23ee1 100644 --- a/gnuradio-core/src/lib/gengen/gr_add_XX.cc.t +++ b/gnuradio-core/src/lib/gengen/gr_add_XX.cc.t @@ -52,7 +52,7 @@ int int ninputs = input_items.size (); - for (int i = 0; i < noutput_items*d_vlen; i++){ + for (size_t i = 0; i < noutput_items*d_vlen; i++){ @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; for (int j = 1; j < ninputs; j++) acc += ((@I_TYPE@ *) input_items[j])[i]; diff --git a/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t index 1200145fa..ea245b57b 100644 --- a/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t +++ b/gnuradio-core/src/lib/gengen/gr_divide_XX.cc.t @@ -53,13 +53,13 @@ int int ninputs = input_items.size (); if (ninputs == 1){ // compute reciprocal - for (int i = 0; i < noutput_items*d_vlen; i++) + for (size_t i = 0; i < noutput_items*d_vlen; i++) *optr++ = (@O_TYPE@) ((@O_TYPE@) 1 / ((@I_TYPE@ *) input_items[0])[i]); } else { - for (int i = 0; i < noutput_items*d_vlen; i++){ + for (size_t i = 0; i < noutput_items*d_vlen; i++){ @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; for (int j = 1; j < ninputs; j++) acc /= ((@I_TYPE@ *) input_items[j])[i]; diff --git a/gnuradio-core/src/lib/gengen/gr_multiply_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_multiply_XX.cc.t index 13ec0c8b3..5d270c763 100644 --- a/gnuradio-core/src/lib/gengen/gr_multiply_XX.cc.t +++ b/gnuradio-core/src/lib/gengen/gr_multiply_XX.cc.t @@ -52,7 +52,7 @@ int int ninputs = input_items.size (); - for (int i = 0; i < noutput_items*d_vlen; i++){ + for (size_t i = 0; i < noutput_items*d_vlen; i++){ @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; for (int j = 1; j < ninputs; j++) acc *= ((@I_TYPE@ *) input_items[j])[i]; diff --git a/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t b/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t index f0ed75217..1dcdf81ad 100644 --- a/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t +++ b/gnuradio-core/src/lib/gengen/gr_sub_XX.cc.t @@ -53,12 +53,12 @@ int int ninputs = input_items.size (); if (ninputs == 1){ // negate - for (int i = 0; i < noutput_items*d_vlen; i++) + for (size_t i = 0; i < noutput_items*d_vlen; i++) *optr++ = (@O_TYPE@) -((@I_TYPE@ *) input_items[0])[i]; } else { - for (int i = 0; i < noutput_items*d_vlen; i++){ + for (size_t i = 0; i < noutput_items*d_vlen; i++){ @I_TYPE@ acc = ((@I_TYPE@ *) input_items[0])[i]; for (int j = 1; j < ninputs; j++) acc -= ((@I_TYPE@ *) input_items[j])[i]; -- cgit From 8e64eed7ed9680db139a84e2370135cf619534bf Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Mon, 8 Nov 2010 00:47:33 -0500 Subject: Fixed warning re defining GNU_SOURCE. Can probably just remove it since it's defined in config, but this won't hurt anyone. --- gnuradio-core/src/lib/filter/gr_sincos.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gnuradio-core/src/lib/filter/gr_sincos.c b/gnuradio-core/src/lib/filter/gr_sincos.c index 240a84852..3543ebfde 100644 --- a/gnuradio-core/src/lib/filter/gr_sincos.c +++ b/gnuradio-core/src/lib/filter/gr_sincos.c @@ -24,7 +24,9 @@ #include "config.h" #endif +#ifndef _GNU_SOURCE #define _GNU_SOURCE // ask for GNU extensions if available +#endif #include #include -- cgit From ee02e4e66a291685ce6399d7871b98ffccbdca54 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Mon, 8 Nov 2010 01:34:53 -0500 Subject: Fixing copyright date. --- gnuradio-core/src/lib/filter/gr_sincos.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnuradio-core/src/lib/filter/gr_sincos.c b/gnuradio-core/src/lib/filter/gr_sincos.c index 3543ebfde..57b26b22f 100644 --- a/gnuradio-core/src/lib/filter/gr_sincos.c +++ b/gnuradio-core/src/lib/filter/gr_sincos.c @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2004 Free Software Foundation, Inc. + * Copyright 2004,2010 Free Software Foundation, Inc. * * This file is part of GNU Radio * -- cgit From 9eeb6dbaa1398946229db780f2eb1ca4e9eae04b Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Mon, 8 Nov 2010 01:44:16 -0500 Subject: Adding a bit more checking on file operations. --- gnuradio-core/src/lib/general/gr_circular_file.cc | 7 +++++-- gnuradio-core/src/lib/runtime/gr_preferences.cc | 24 +++++++++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/gnuradio-core/src/lib/general/gr_circular_file.cc b/gnuradio-core/src/lib/general/gr_circular_file.cc index 468b49a10..c9222597a 100644 --- a/gnuradio-core/src/lib/general/gr_circular_file.cc +++ b/gnuradio-core/src/lib/general/gr_circular_file.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2002 Free Software Foundation, Inc. + * Copyright 2002,2010 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -66,7 +66,10 @@ gr_circular_file::gr_circular_file (const char *filename, exit (1); } #ifdef HAVE_MMAP /* FIXME */ - ftruncate (d_fd, size + HEADER_SIZE); + if(ftruncate (d_fd, size + HEADER_SIZE) != 0) { + perror (filename); + exit (1); + } #endif } else { diff --git a/gnuradio-core/src/lib/runtime/gr_preferences.cc b/gnuradio-core/src/lib/runtime/gr_preferences.cc index e0be2db62..5f7412248 100644 --- a/gnuradio-core/src/lib/runtime/gr_preferences.cc +++ b/gnuradio-core/src/lib/runtime/gr_preferences.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2003 Free Software Foundation, Inc. + * Copyright 2003,2010 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -77,11 +77,20 @@ gr_preferences::get (const char *key) static char buf[1024]; FILE *fp = fopen (pathname (key), "r"); - if (fp == 0) + if (fp == 0) { + perror (pathname (key)); return 0; + } memset (buf, 0, sizeof (buf)); - fread (buf, 1, sizeof (buf) - 1, fp); + size_t ret = fread (buf, 1, sizeof (buf) - 1, fp); + if(ret == 0) { + if(ferror(fp) != 0) { + perror (pathname (key)); + fclose (fp); + return 0; + } + } fclose (fp); return buf; } @@ -97,6 +106,13 @@ gr_preferences::set (const char *key, const char *value) return; } - fwrite (value, 1, strlen (value), fp); + size_t ret = fwrite (value, 1, strlen (value), fp); + if(ret == 0) { + if(ferror(fp) != 0) { + perror (pathname (key)); + fclose (fp); + return; + } + } fclose (fp); }; -- cgit From 6fc05897572c82ebb523d0ab0ac4cf763d00cb4a Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Mon, 8 Nov 2010 22:31:56 -0500 Subject: Potential fix to MSDD warnings by setting sequence number from buffer more explicitly. --- gr-msdd6000/src/msdd_rs_source_simple.cc | 5 ++++- gr-msdd6000/src/msdd_source_simple.cc | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/gr-msdd6000/src/msdd_rs_source_simple.cc b/gr-msdd6000/src/msdd_rs_source_simple.cc index c44808f51..70e692d83 100644 --- a/gr-msdd6000/src/msdd_rs_source_simple.cc +++ b/gr-msdd6000/src/msdd_rs_source_simple.cc @@ -64,7 +64,10 @@ msdd_rs_source_simple::work (int noutput_items, /* Read a buffer out -- looking at UDP payload at this point.*/ rcv->read( &buffer[0], BUF_LEN ); - int seq = *((int*) &buffer[2]); + //int seq = *((int*) &buffer[2]); + int seq; + memcpy(&seq, &buffer[2], 4*sizeof(char)); + char type = buffer[0]; //printf("Sequence %d\n",seq); diff --git a/gr-msdd6000/src/msdd_source_simple.cc b/gr-msdd6000/src/msdd_source_simple.cc index 076a305f1..20b15c43d 100644 --- a/gr-msdd6000/src/msdd_source_simple.cc +++ b/gr-msdd6000/src/msdd_source_simple.cc @@ -64,7 +64,9 @@ msdd_source_simple::work (int noutput_items, char buffer[BUF_LEN]; rcv->read( &buffer[0], BUF_LEN ); - int seq = *((int*) &buffer[2]); + //int seq = *((int*) &buffer[2]); + int seq; + memcpy(&seq, &buffer[2], 4*sizeof(char)); if(d_lastseq == -MSDD_COMPLEX_SAMPLES_PER_PACKET){ // not started case -- cgit From 5d1baa5a96e3dac0756571da9fc115dba14bbbff Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Tue, 9 Nov 2010 22:08:58 -0500 Subject: Updating audio_jack to new interface for creating a client. Fixes depricated warning. --- gr-audio-jack/src/audio_jack_sink.cc | 13 +++++++++---- gr-audio-jack/src/audio_jack_source.cc | 7 ++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gr-audio-jack/src/audio_jack_sink.cc b/gr-audio-jack/src/audio_jack_sink.cc index 6e39135c9..f28fddc34 100644 --- a/gr-audio-jack/src/audio_jack_sink.cc +++ b/gr-audio-jack/src/audio_jack_sink.cc @@ -105,12 +105,17 @@ audio_jack_sink::audio_jack_sink (int sampling_rate, d_nunderuns (0) { #ifndef NO_PTHREAD - pthread_cond_init(&d_ringbuffer_ready, NULL);; - pthread_mutex_init(&d_jack_process_lock, NULL); + pthread_cond_init(&d_ringbuffer_ready, NULL);; + pthread_mutex_init(&d_jack_process_lock, NULL); #endif - + // try to become a client of the JACK server - if ((d_jack_client = jack_client_new (d_device_name.c_str ())) == 0) { + jack_options_t options = JackNullOption; + jack_status_t status; + const char *server_name = NULL; + if ((d_jack_client = jack_client_open (d_device_name.c_str (), + options, &status, + server_name)) == NULL) { fprintf (stderr, "audio_jack_sink[%s]: jack server not running?\n", d_device_name.c_str()); throw std::runtime_error ("audio_jack_sink"); diff --git a/gr-audio-jack/src/audio_jack_source.cc b/gr-audio-jack/src/audio_jack_source.cc index ca3df51d7..a92e970f5 100644 --- a/gr-audio-jack/src/audio_jack_source.cc +++ b/gr-audio-jack/src/audio_jack_source.cc @@ -110,7 +110,12 @@ audio_jack_source::audio_jack_source (int sampling_rate, #endif // try to become a client of the JACK server - if ((d_jack_client = jack_client_new (d_device_name.c_str ())) == 0) { + jack_options_t options = JackNullOption; + jack_status_t status; + const char *server_name = NULL; + if ((d_jack_client = jack_client_open (d_device_name.c_str (), + options, &status, + server_name)) == NULL) { fprintf (stderr, "audio_jack_source[%s]: jack server not running?\n", d_device_name.c_str()); throw std::runtime_error ("audio_jack_source"); -- cgit From a72819e861caaabdea0ac41f5f5e387cb61d3513 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Tue, 9 Nov 2010 22:45:02 -0500 Subject: Adding file operations result checking. --- gr-trellis/src/lib/fsm.cc | 20 +++++++++++++++++--- gr-trellis/src/lib/interleaver.cc | 13 +++++++++++-- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/gr-trellis/src/lib/fsm.cc b/gr-trellis/src/lib/fsm.cc index c65b13456..5950b56b9 100644 --- a/gr-trellis/src/lib/fsm.cc +++ b/gr-trellis/src/lib/fsm.cc @@ -86,16 +86,30 @@ fsm::fsm(const char *name) if((fsmfile=fopen(name,"r"))==NULL) throw std::runtime_error ("fsm::fsm(const char *name): file open error\n"); //printf("file open error in fsm()\n"); + + if(fscanf(fsmfile,"%d %d %d\n",&d_I,&d_S,&d_O) == EOF) { + if(ferror(fsmfile) != 0) + throw std::runtime_error ("fsm::fsm(const char *name): file read error\n"); + } - fscanf(fsmfile,"%d %d %d\n",&d_I,&d_S,&d_O); d_NS.resize(d_I*d_S); d_OS.resize(d_I*d_S); for(int i=0;i1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and -- cgit From 9922d3553e4e3ec6d55cfe8b7aab9323f649247f Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Mon, 15 Nov 2010 23:15:54 -0800 Subject: Removing autogenerated file. --- .../lib/filter/gri_fir_filter_with_buffer_ccf.h | 131 --------------------- 1 file changed, 131 deletions(-) delete mode 100644 gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h diff --git a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h b/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h deleted file mode 100644 index bd7fa33cf..000000000 --- a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h +++ /dev/null @@ -1,131 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2010 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -/* - * WARNING: This file is automatically generated by generate_gri_fir_XXX.py - * Any changes made to this file will be overwritten. - */ - - -#ifndef INCLUDED_GRI_FIR_FILTER_WITH_BUFFER_CCF_H -#define INCLUDED_GRI_FIR_FILTER_WITH_BUFFER_CCF_H - -#include -#include -#include -#include -#include - -/*! - * \brief FIR with internal buffer for gr_complex input, - gr_complex output and float taps - * \ingroup filter - * - */ - -class gri_fir_filter_with_buffer_ccf { - -protected: - std::vector d_taps; // reversed taps - gr_complex *d_buffer; - unsigned int d_idx; - -public: - - // CONSTRUCTORS - - /*! - * \brief construct new FIR with given taps. - * - * Note that taps must be in forward order, e.g., coefficient 0 is - * stored in new_taps[0], coefficient 1 is stored in - * new_taps[1], etc. - */ - gri_fir_filter_with_buffer_ccf (const std::vector &taps); - - ~gri_fir_filter_with_buffer_ccf (); - - // MANIPULATORS - - /*! - * \brief compute a single output value. - * - * \p input is a single input value of the filter type - * - * \returns the filtered input value. - */ - gr_complex filter (gr_complex input); - - - /*! - * \brief compute a single output value; designed for decimating filters. - * - * \p input is a single input value of the filter type. The value of dec is the - * decimating value of the filter, so input[] must have dec valid values. - * The filter pushes dec number of items onto the circ. buffer before computing - * a single output. - * - * \returns the filtered input value. - */ - gr_complex filter (const gr_complex input[], unsigned long dec); - - /*! - * \brief compute an array of N output values. - * - * \p input must have (n - 1 + ntaps()) valid entries. - * input[0] .. input[n - 1 + ntaps() - 1] are referenced to compute the output values. - */ - void filterN (gr_complex output[], const gr_complex input[], - unsigned long n); - - /*! - * \brief compute an array of N output values, decimating the input - * - * \p input must have (decimate * (n - 1) + ntaps()) valid entries. - * input[0] .. input[decimate * (n - 1) + ntaps() - 1] are referenced to - * compute the output values. - */ - void filterNdec (gr_complex output[], const gr_complex input[], - unsigned long n, unsigned long decimate); - - /*! - * \brief install \p new_taps as the current taps. - */ - void set_taps (const std::vector &taps); - - // ACCESSORS - - /*! - * \return number of taps in filter. - */ - unsigned ntaps () const { return d_taps.size (); } - - /*! - * \return current taps - */ - const std::vector get_taps () const - { - return gr_reverse(d_taps); - } -}; - -#endif /* INCLUDED_GRI_FIR_FILTER_WITH_BUFFER_CCF_H */ -- cgit From 67782265f5c9d5e29eb4921d14114346e80bfa81 Mon Sep 17 00:00:00 2001 From: Michael Dickens Date: Mon, 1 Nov 2010 15:57:52 -0400 Subject: Tweak LIBUSB m4 script to not check for 'usb_debug' symbol on Windows, because the symbol does not exist for that platform (only, it seems) --- config/usrp_libusb.m4 | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/config/usrp_libusb.m4 b/config/usrp_libusb.m4 index a434d379d..e4f567ce4 100644 --- a/config/usrp_libusb.m4 +++ b/config/usrp_libusb.m4 @@ -135,21 +135,28 @@ AC_DEFUN([USRP_LIBUSB], [ if test $libusbok = yes; then if test ${libusb_name} != "libusb-1.0"; then dnl PKGCONFIG found a legacy version of libusb; make sure the - dnl variable _usb_debug is available in the found library - AC_LANG_PUSH(C) - save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$USB_INCLUDES" - save_LIBS="$LIBS" - LIBS="$USB_LIBS" - AC_MSG_CHECKING([$libusb_name for symbol usb_debug in library $usb_lib_name]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[ - extern int usb_debug;]], - [[usb_debug = 0;]])], - [libusbok=yes],[libusbok=no]) - AC_MSG_RESULT([$libusbok]) - LIBS="$save_LIBS" - CPPFLAGS="$save_CPPFLAGS" - AC_LANG_POP(C) + dnl variable _usb_debug is available in the found library. + dnl Do not test on Windows, since that symbol is not defined. + case "$host_os" in + cygwin* | mingw*) + ;; + *) + AC_LANG_PUSH(C) + save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$USB_INCLUDES" + save_LIBS="$LIBS" + LIBS="$USB_LIBS" + AC_MSG_CHECKING([$libusb_name for symbol usb_debug in library $usb_lib_name]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ + extern int usb_debug;]], + [[usb_debug = 0;]])], + [libusbok=yes],[libusbok=no]) + AC_MSG_RESULT([$libusbok]) + LIBS="$save_LIBS" + CPPFLAGS="$save_CPPFLAGS" + AC_LANG_POP(C) + ;; + esac fi fi fi -- cgit From e90e0af122570193a3daecb1a4b4ef45dae3c83c Mon Sep 17 00:00:00 2001 From: Michael Dickens Date: Thu, 4 Nov 2010 21:49:52 -0400 Subject: first shot at Windows-compatible LIBUSB check --- config/usrp_libusb.m4 | 133 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 87 insertions(+), 46 deletions(-) diff --git a/config/usrp_libusb.m4 b/config/usrp_libusb.m4 index e4f567ce4..cc3410f41 100644 --- a/config/usrp_libusb.m4 +++ b/config/usrp_libusb.m4 @@ -24,28 +24,43 @@ dnl Boston, MA 02110-1301, USA. AC_DEFUN([USRP_LIBUSB], [ - dnl Use PKGCONFIG to check for packages first, then check to - dnl make sure the USB_* variables work (whether from PKGCONFIG - dnl or overridden by the user) - - dnl do not use LDFLAGS, since PKGCONFIG will provide everything + dnl do not use LDFLAGS, except on Windows saved_LDFLAGS=${LDFLAGS} - LDFLAGS= - LIBUSB_PKG_CONFIG_NAME= + case "$host_os" in + cygwin* | mingw*) + ;; + *) + LDFLAGS= + ;; + esac - dnl loop over various possible 'libusb' PKGCONFIG names, and choose - dnl the first one that meets both the user's selection (via - dnl configure flags) as well as what is installed + dnl this variable is set in usrp/usrp.pc.in as a requirement + dnl for libusrp; it is OK to be empty. + LIBUSB_PKG_CONFIG_NAME= - dnl create the list of libusb PKGCONFIG modules to test + dnl for Windows (cygin, mingw), do not use PKGCONFIG since LIBUSB + dnl does not install a .pc file. For all other OSs, use + dnl PKGCONFIG to check for various package names first. libusb_list='' - if test x$1 = xyes; then - dnl libusb-1.0 was requested; just test for it - libusb_list="libusb-1.0" - else - dnl test for legacy libusb only - libusb_list="libusb libusb-legacy" - fi + case "$host_os" in + cygwin* | mingw*) + libusb_list='libusb' + ;; + *) + dnl create the list of libusb PKGCONFIG modules to test + if test x$1 = xyes; then + dnl libusb-1.0 was requested; just test for it + libusb_list="libusb-1.0" + else + dnl test for legacy libusb only + libusb_list="libusb libusb-legacy" + fi + ;; + esac + + dnl loop over various possible 'libusb' names, and + dnl choose the first one that meets both the user's selection + dnl (via configure flags) as well as what is installed for libusb_name in ${libusb_list}; do dnl clear internal variables libusbok=no @@ -54,31 +69,45 @@ AC_DEFUN([USRP_LIBUSB], [ usb_lib_func='' usb_lib_name='' - dnl start checks - AC_MSG_NOTICE([Checking for LIBUSB version '${libusb_name}']) - if test ${libusb_name} = "libusb-1.0"; then - dnl see if the pkgconfig module is available - PKG_CHECK_MODULES(USB, ${libusb_name}, [ - libusbok=yes - have_libusb1=yes - usb_header='libusb-1.0/libusb.h' - usb_lib_func='libusb_bulk_transfer' - ], [libusbok=no]) - else - dnl see if the pkgconfig module is available - PKG_CHECK_MODULES(USB, ${libusb_name}, [ - libusbok=yes + case "$host_os" in + cygwin* | mingw*) + USB_INCLUDEDIR= + USB_INCLUDES= + USB_LIBS=-lusb usb_header='usb.h' usb_lib_func='usb_bulk_write' - ], [libusbok=no]) - fi + libusbok=yes + ;; + *) + dnl start checks + AC_MSG_NOTICE([Checking for LIBUSB version '${libusb_name}']) + if test ${libusb_name} = "libusb-1.0"; then + dnl see if the pkgconfig module is available + PKG_CHECK_MODULES(USB, ${libusb_name}, [ + libusbok=yes + have_libusb1=yes + usb_header='libusb-1.0/libusb.h' + usb_lib_func='libusb_bulk_transfer' + ], [libusbok=no]) + else + dnl see if the pkgconfig module is available + PKG_CHECK_MODULES(USB, ${libusb_name}, [ + libusbok=yes + usb_header='usb.h' + usb_lib_func='usb_bulk_write' + ], [libusbok=no]) + fi + ;; + esac if test $libusbok = yes; then - dnl PKGCONFIG found a version of LIBUSB. + dnl PKGCONFIG found a version of LIBUSB, or the info was + dnl provided by the user, or the OS is Windows. + dnl Check it to make sure it meets enough criteria: dnl Verify that $usb_header is a valid header. If so, then dnl verify that $usb_lib_func can be found in the library dnl $usb_lib_name. if so, verify that the symbol 'usb_debug' is - dnl found in the library. + dnl found in the library if not using Windows. dnl Check for the header. Similar to AC_CHECK_HEADERS, dnl but doesn't append to known \#defines. @@ -143,7 +172,9 @@ AC_DEFUN([USRP_LIBUSB], [ *) AC_LANG_PUSH(C) save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$USB_INCLUDES" + if test x$USB_INCLUDEDIR != x; then + CPPFLAGS="$USB_INCLUDES" + fi save_LIBS="$LIBS" LIBS="$USB_LIBS" AC_MSG_CHECKING([$libusb_name for symbol usb_debug in library $usb_lib_name]) @@ -163,7 +194,13 @@ AC_DEFUN([USRP_LIBUSB], [ fi dnl if everything checks out OK, finish up if test $libusbok = yes; then - LIBUSB_PKG_CONFIG_NAME="${libusb_name}" + case "$host_os" in + cygwin* | mingw*) + ;; + *) + LIBUSB_PKG_CONFIG_NAME="${libusb_name}" + ;; + esac break else dnl something wasn't found in this LIBUSB version. @@ -180,7 +217,9 @@ AC_DEFUN([USRP_LIBUSB], [ dnl final error checking, mostly to create #define's AC_LANG_PUSH(C) save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$USB_INCLUDES" + if test x$USB_INCLUDEDIR != x; then + CPPFLAGS="$USB_INCLUDES" + fi dnl Check for the header. AC_CHECK_HEADERS([$usb_header], [], [libusbok=no]) CPPFLAGS="$save_CPPFLAGS" @@ -192,18 +231,20 @@ AC_DEFUN([USRP_LIBUSB], [ dnl check for the library (again) AC_LANG_PUSH(C) save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$USB_INCLUDES" + if test x$USB_INCLUDEDIR != x; then + CPPFLAGS="$USB_INCLUDES" + fi save_LIBS="$LIBS" LIBS="$USB_LIBS" AC_CHECK_LIB([$usb_lib_name], [$usb_lib_func], [], [ libusbok=no AC_MSG_RESULT([USRP requires library '$usb_lib_name' with function '$usb_lib_func', which was either not found or was not usable. See http://www.libusb.org])]) - case "$host_os" in - cygwin* | mingw*) - USB_LIBS="$LIBS" - ;; - *) ;; - esac +# case "$host_os" in +# cygwin* | mingw*) +# USB_LIBS="$LIBS" +# ;; +# *) ;; +# esac LIBS="$save_LIBS" CPPFLAGS="$save_CPPFLAGS" AC_LANG_POP(C) -- cgit From 88c83cf6e9374f2cbd5483798a0614d72fb3dcbd Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Tue, 23 Nov 2010 23:57:02 -0500 Subject: Fixing output types from tap_type to o_type in gr_single_pole_iir.h. Doesn't make a difference in the current uses of this class, but could in the future. Thanks to Achilleas Anastasopoulos for pointing this out. --- gnuradio-core/src/lib/filter/gr_single_pole_iir.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gnuradio-core/src/lib/filter/gr_single_pole_iir.h b/gnuradio-core/src/lib/filter/gr_single_pole_iir.h index bd59e53ac..da919b35c 100644 --- a/gnuradio-core/src/lib/filter/gr_single_pole_iir.h +++ b/gnuradio-core/src/lib/filter/gr_single_pole_iir.h @@ -71,12 +71,12 @@ public: d_prev_output = 0; } - tap_type prev_output () { return d_prev_output; } + o_type prev_output () { return d_prev_output; } protected: tap_type d_alpha; tap_type d_one_minus_alpha; - tap_type d_prev_output; + o_type d_prev_output; }; @@ -87,7 +87,7 @@ template o_type gr_single_pole_iir::filter (const i_type input) { - tap_type output; + o_type output; output = d_alpha * input + d_one_minus_alpha * d_prev_output; d_prev_output = output; -- cgit From e5198a304a12410da8936a16900feba2fad1edae Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Wed, 24 Nov 2010 16:54:13 -0500 Subject: Removing warnings in portaudio source/sink. --- gr-audio-portaudio/src/audio_portaudio_sink.cc | 5 ++++- gr-audio-portaudio/src/audio_portaudio_source.cc | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/gr-audio-portaudio/src/audio_portaudio_sink.cc b/gr-audio-portaudio/src/audio_portaudio_sink.cc index 9a3baf40e..64e64ccf4 100644 --- a/gr-audio-portaudio/src/audio_portaudio_sink.cc +++ b/gr-audio-portaudio/src/audio_portaudio_sink.cc @@ -102,7 +102,10 @@ portaudio_sink_callback (const void *inputBuffer, else { // underrun self->d_nunderuns++; - ::write(2, "aU", 2); // FIXME change to non-blocking call + ssize_t r = ::write(2, "aU", 2); // FIXME change to non-blocking call + if(r == -1) { + perror("audio_portaudio_source::portaudio_source_callback write error to stderr."); + } // FIXME we should transfer what we've got and pad the rest memset(outputBuffer, 0, nreqd_samples * sizeof(sample_t)); diff --git a/gr-audio-portaudio/src/audio_portaudio_source.cc b/gr-audio-portaudio/src/audio_portaudio_source.cc index 23801a8bf..e508fda22 100644 --- a/gr-audio-portaudio/src/audio_portaudio_source.cc +++ b/gr-audio-portaudio/src/audio_portaudio_source.cc @@ -105,7 +105,10 @@ portaudio_source_callback (const void *inputBuffer, else { // overrun self->d_noverruns++; - ::write(2, "aO", 2); // FIXME change to non-blocking call + ssize_t r = ::write(2, "aO", 2); // FIXME change to non-blocking call + if(r == -1) { + perror("audio_portaudio_source::portaudio_source_callback write error to stderr."); + } self->d_ringbuffer_ready = false; self->d_ringbuffer_cond.notify_one(); // Tell the sink to get going! -- cgit From 522073fa95ffcb231bf8c72105bc5cc62dd8d9ed Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Wed, 24 Nov 2010 18:20:40 -0500 Subject: Adding typedef for uint64_t and int64_t so we can use them through SWIG. --- gnuradio-core/src/lib/swig/gnuradio.i | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gnuradio-core/src/lib/swig/gnuradio.i b/gnuradio-core/src/lib/swig/gnuradio.i index 7d0241f1c..e15a0059c 100644 --- a/gnuradio-core/src/lib/swig/gnuradio.i +++ b/gnuradio-core/src/lib/swig/gnuradio.i @@ -46,6 +46,8 @@ typedef std::complex gr_complex; typedef std::complex gr_complexd; +typedef unsigned long long uint64_t; +typedef long long int64_t; // instantiate the required template specializations -- cgit From dd656e9db5e69ed6b11653deea710e299d72827e Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Wed, 24 Nov 2010 18:21:02 -0500 Subject: Changing API for gr_skiphead to use uint64_t for the offset instead of size_t (still unsigned). Fixes issue #304. Also uses uint64_t's internally so everyone is always on the same type. This should not affect anyone's use of the block. --- gnuradio-core/src/lib/general/gr_skiphead.cc | 8 ++++---- gnuradio-core/src/lib/general/gr_skiphead.h | 10 +++++----- gnuradio-core/src/lib/general/gr_skiphead.i | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/gnuradio-core/src/lib/general/gr_skiphead.cc b/gnuradio-core/src/lib/general/gr_skiphead.cc index ea7e9405f..1670eb7cf 100644 --- a/gnuradio-core/src/lib/general/gr_skiphead.cc +++ b/gnuradio-core/src/lib/general/gr_skiphead.cc @@ -27,7 +27,7 @@ #include #include -gr_skiphead::gr_skiphead (size_t itemsize, size_t nitems_to_skip) +gr_skiphead::gr_skiphead (size_t itemsize, uint64_t nitems_to_skip) : gr_block ("skiphead", gr_make_io_signature(1, 1, itemsize), gr_make_io_signature(1, 1, itemsize)), @@ -36,7 +36,7 @@ gr_skiphead::gr_skiphead (size_t itemsize, size_t nitems_to_skip) } gr_skiphead_sptr -gr_make_skiphead (size_t itemsize, size_t nitems_to_skip) +gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip) { return gnuradio::get_initial_sptr(new gr_skiphead (itemsize, nitems_to_skip)); } @@ -55,11 +55,11 @@ gr_skiphead::general_work(int noutput_items, while (ii < ninput_items){ - long long ni_total = ii + d_nitems; // total items processed so far + uint64_t ni_total = ii + d_nitems; // total items processed so far if (ni_total < d_nitems_to_skip){ // need to skip some more int n_to_skip = (int) std::min(d_nitems_to_skip - ni_total, - (long long)(ninput_items - ii)); + (uint64_t)(ninput_items - ii)); ii += n_to_skip; } diff --git a/gnuradio-core/src/lib/general/gr_skiphead.h b/gnuradio-core/src/lib/general/gr_skiphead.h index 965feff9b..933c126e3 100644 --- a/gnuradio-core/src/lib/general/gr_skiphead.h +++ b/gnuradio-core/src/lib/general/gr_skiphead.h @@ -39,11 +39,11 @@ typedef boost::shared_ptr gr_skiphead_sptr; class gr_skiphead : public gr_block { - friend gr_skiphead_sptr gr_make_skiphead (size_t itemsize, size_t nitems_to_skip); - gr_skiphead (size_t itemsize, size_t nitems_to_skip); + friend gr_skiphead_sptr gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip); + gr_skiphead (size_t itemsize, uint64_t nitems_to_skip); - long long d_nitems_to_skip; - long long d_nitems; // total items seen + uint64_t d_nitems_to_skip; + uint64_t d_nitems; // total items seen public: @@ -54,7 +54,7 @@ class gr_skiphead : public gr_block }; gr_skiphead_sptr -gr_make_skiphead (size_t itemsize, size_t nitems_to_skip); +gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip); #endif /* INCLUDED_GR_SKIPHEAD_H */ diff --git a/gnuradio-core/src/lib/general/gr_skiphead.i b/gnuradio-core/src/lib/general/gr_skiphead.i index 52c0808f0..45cbd0437 100644 --- a/gnuradio-core/src/lib/general/gr_skiphead.i +++ b/gnuradio-core/src/lib/general/gr_skiphead.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2005,2007 Free Software Foundation, Inc. + * Copyright 2005,2007,2010 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -22,9 +22,9 @@ GR_SWIG_BLOCK_MAGIC(gr,skiphead); -gr_skiphead_sptr gr_make_skiphead (size_t itemsize, size_t nitems_to_skip); +gr_skiphead_sptr gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip); class gr_skiphead : public gr_block { - friend gr_skiphead_sptr gr_make_skiphead (size_t itemsize, size_t nitems_to_skip); - gr_skiphead (size_t itemsize, size_t nitems_to_skip); + friend gr_skiphead_sptr gr_make_skiphead (size_t itemsize, uint64_t nitems_to_skip); + gr_skiphead (size_t itemsize, uint64_t nitems_to_skip); }; -- cgit From 6246efbefcdb6807daa7c245ebe7a975ab0ce7d4 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Mon, 6 Dec 2010 13:52:55 -0500 Subject: Modifying blsk2 wrapper for PFB arbitrary resampler to allow the user to just specify the requested resampling rate without providing their own filter taps. Taps are then generated inside hier_block2 to cover full bandwidth of input signal. Optional attenuation parameter may be provided. --- .../src/python/gnuradio/blks2impl/pfb_arb_resampler.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/gnuradio-core/src/python/gnuradio/blks2impl/pfb_arb_resampler.py b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_arb_resampler.py index e40d9636a..cd9289fa5 100644 --- a/gnuradio-core/src/python/gnuradio/blks2impl/pfb_arb_resampler.py +++ b/gnuradio-core/src/python/gnuradio/blks2impl/pfb_arb_resampler.py @@ -31,15 +31,22 @@ class pfb_arb_resampler_ccf(gr.hier_block2): streams. This block is provided to be consistent with the interface to the other PFB block. ''' - def __init__(self, rate, taps, flt_size=32): + def __init__(self, rate, taps=None, flt_size=32, atten=80): gr.hier_block2.__init__(self, "pfb_arb_resampler_ccf", gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature self._rate = rate - self._taps = taps self._size = flt_size + if taps is not None: + self._taps = taps + else: + # Create a filter that covers the full bandwidth of the input signal + bw = 0.5 + tb = 0.1 + self._taps = gr.firdes.low_pass_2(self._size, self._size, bw, tb, atten) + self.pfb = gr.pfb_arb_resampler_ccf(self._rate, self._taps, self._size) self.connect(self, self.pfb) -- cgit From 7b19372f83fede6a1d55e4b70202aa58b004e9f8 Mon Sep 17 00:00:00 2001 From: Tom Rondeau Date: Mon, 6 Dec 2010 13:59:20 -0500 Subject: Adding new example script for using the new PFB arbitrary resampler interface. One resampler takes user-generated taps and another resampler just takes the resampling rate. Both input and output signals are plotted. --- gnuradio-examples/python/pfb/resampler.py | 95 +++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100755 gnuradio-examples/python/pfb/resampler.py diff --git a/gnuradio-examples/python/pfb/resampler.py b/gnuradio-examples/python/pfb/resampler.py new file mode 100755 index 000000000..6be7cf14e --- /dev/null +++ b/gnuradio-examples/python/pfb/resampler.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +from gnuradio import gr, blks2 +import scipy, pylab + +class mytb(gr.top_block): + def __init__(self, fs_in, fs_out, fc, N=10000): + gr.top_block.__init__(self) + + rerate = float(fs_out) / float(fs_in) + print "Resampling from %f to %f by %f " %(fs_in, fs_out, rerate) + + # Creating our own taps + taps = gr.firdes.low_pass_2(32, 32, 0.25, 0.1, 80) + + self.src = gr.sig_source_c(fs_in, gr.GR_SIN_WAVE, fc, 1) + #self.src = gr.noise_source_c(gr.GR_GAUSSIAN, 1) + self.head = gr.head(gr.sizeof_gr_complex, N) + + # A resampler with our taps + self.resamp_0 = blks2.pfb_arb_resampler_ccf(rerate, taps, + flt_size=32) + + # A resampler that just needs a resampling rate. + # Filter is created for us and designed to cover + # entire bandwidth of the input signal. + # An optional atten=XX rate can be used here to + # specify the out-of-band rejection (default=80). + self.resamp_1 = blks2.pfb_arb_resampler_ccf(rerate) + + self.snk_in = gr.vector_sink_c() + self.snk_0 = gr.vector_sink_c() + self.snk_1 = gr.vector_sink_c() + + self.connect(self.src, self.head, self.snk_in) + self.connect(self.head, self.resamp_0, self.snk_0) + self.connect(self.head, self.resamp_1, self.snk_1) + +def main(): + fs_in = 8000 + fs_out = 20000 + fc = 1000 + N = 10000 + + tb = mytb(fs_in, fs_out, fc, N) + tb.run() + + + # Plot PSD of signals + nfftsize = 2048 + fig1 = pylab.figure(1, figsize=(10,10), facecolor="w") + sp1 = fig1.add_subplot(2,1,1) + sp1.psd(tb.snk_in.data(), NFFT=nfftsize, + noverlap=nfftsize/4, Fs = fs_in) + sp1.set_title(("Input Signal at f_s=%.2f kHz" % (fs_in/1000.0))) + sp1.set_xlim([-fs_in/2, fs_in/2]) + + sp2 = fig1.add_subplot(2,1,2) + sp2.psd(tb.snk_0.data(), NFFT=nfftsize, + noverlap=nfftsize/4, Fs = fs_out, + label="With our filter") + sp2.psd(tb.snk_1.data(), NFFT=nfftsize, + noverlap=nfftsize/4, Fs = fs_out, + label="With auto-generated filter") + sp2.set_title(("Output Signals at f_s=%.2f kHz" % (fs_out/1000.0))) + sp2.set_xlim([-fs_out/2, fs_out/2]) + sp2.legend() + + # Plot signals in time + Ts_in = 1.0/fs_in + Ts_out = 1.0/fs_out + t_in = scipy.arange(0, len(tb.snk_in.data())*Ts_in, Ts_in) + t_out = scipy.arange(0, len(tb.snk_0.data())*Ts_out, Ts_out) + + fig2 = pylab.figure(2, figsize=(10,10), facecolor="w") + sp21 = fig2.add_subplot(2,1,1) + sp21.plot(t_in, tb.snk_in.data()) + sp21.set_title(("Input Signal at f_s=%.2f kHz" % (fs_in/1000.0))) + sp21.set_xlim([t_in[100], t_in[200]]) + + sp22 = fig2.add_subplot(2,1,2) + sp22.plot(t_out, tb.snk_0.data(), + label="With our filter") + sp22.plot(t_out, tb.snk_1.data(), + label="With auto-generated filter") + sp22.set_title(("Output Signals at f_s=%.2f kHz" % (fs_out/1000.0))) + r = float(fs_out)/float(fs_in) + sp22.set_xlim([t_out[r * 100], t_out[r * 200]]) + sp22.legend() + + pylab.show() + +if __name__ == "__main__": + main() + -- cgit