From 0b0f523d25d87427e44b8dfa894151442f14b7c8 Mon Sep 17 00:00:00 2001 From: ttsou Date: Mon, 14 Sep 2009 19:50:26 -0400 Subject: [PATCH] Removed preprocessor declrs out of fusb.h and created separate fusb_libusb1_base.h --- host/lib/Makefile.am | 9 +- host/lib/fusb.cc | 11 ++- host/lib/fusb.h | 12 --- host/lib/fusb_libusb1.cc | 6 +- host/lib/fusb_libusb1.h | 2 +- host/lib/fusb_libusb1_base.h | 140 +++++++++++++++++++++++++++++ host/lib/fusb_linux.cc | 6 +- host/lib/fusb_sysconfig_libusb1.cc | 2 +- host/lib/fusb_win32.cc | 6 +- host/lib/usrp_basic_common.cc | 21 ++--- host/lib/usrp_basic_libusb0.cc | 6 +- host/lib/usrp_basic_libusb1.cc | 2 +- host/lib/usrp_prims_common.cc | 12 +-- 13 files changed, 186 insertions(+), 49 deletions(-) create mode 100644 host/lib/fusb_libusb1_base.h diff --git a/host/lib/Makefile.am b/host/lib/Makefile.am index 7455b15..3687aae 100644 --- a/host/lib/Makefile.am +++ b/host/lib/Makefile.am @@ -61,7 +61,9 @@ BUILT_SOURCES += usrp_dbid.cc \ generic_CODE = \ fusb_generic.cc \ - fusb_sysconfig_generic.cc + fusb_sysconfig_generic.cc \ + usrp_prims_libusb0.cc \ + usrp_basic_libusb0.cc darwin_CODE = \ fusb_darwin.cc \ @@ -87,7 +89,9 @@ linux_CODE = \ ra_wb_CODE = \ fusb_ra_wb.cc \ - fusb_sysconfig_ra_wb.cc + fusb_sysconfig_ra_wb.cc \ + usrp_prims_libusb0.cc \ + usrp_basic_libusb0.cc libusb1_CODE = \ fusb_libusb1.cc \ @@ -162,6 +166,7 @@ noinst_HEADERS = \ db_boards.h \ db_util.h \ fusb.h \ + fusb_libusb1_base.h \ fusb_darwin.h \ fusb_generic.h \ fusb_linux.h \ diff --git a/host/lib/fusb.cc b/host/lib/fusb.cc index 0bd9ded..992e1a2 100644 --- a/host/lib/fusb.cc +++ b/host/lib/fusb.cc @@ -20,12 +20,15 @@ * Boston, MA 02110-1301, USA. */ -//#ifdef HAVE_CONFIG_H -//#include "config.h" -//#endif +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#ifdef HAVE_LIBUSB_1 +#include +#else #include - +#endif // ------------------------------------------------------------------------ // device handle diff --git a/host/lib/fusb.h b/host/lib/fusb.h index 2ff7dc8..506f396 100644 --- a/host/lib/fusb.h +++ b/host/lib/fusb.h @@ -25,20 +25,8 @@ #ifndef _FUSB_H_ #define _FUSB_H_ -/* - * This is bad, but it works for now. The fusb header files are not installed. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#ifdef HAVE_LIBUSB_1 -struct libusb_device_handle; -#else struct usb_dev_handle; typedef usb_dev_handle libusb_device_handle; -#endif struct libusb_context; class fusb_ephandle; diff --git a/host/lib/fusb_libusb1.cc b/host/lib/fusb_libusb1.cc index 1be2fa2..6ea7607 100644 --- a/host/lib/fusb_libusb1.cc +++ b/host/lib/fusb_libusb1.cc @@ -20,9 +20,9 @@ * Boston, MA 02110-1301, USA. */ -//#ifdef HAVE_CONFIG_H -//#include "config.h" -//#endif +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include #include diff --git a/host/lib/fusb_libusb1.h b/host/lib/fusb_libusb1.h index 4bc49aa..0257ac3 100644 --- a/host/lib/fusb_libusb1.h +++ b/host/lib/fusb_libusb1.h @@ -23,7 +23,7 @@ #ifndef _FUSB_LIBUSB1_H_ #define _FUSB_LIBUSB1_H_ -#include +#include #include struct libusb_transfer; diff --git a/host/lib/fusb_libusb1_base.h b/host/lib/fusb_libusb1_base.h new file mode 100644 index 0000000..6a24364 --- /dev/null +++ b/host/lib/fusb_libusb1_base.h @@ -0,0 +1,140 @@ +/* -*- c++ -*- */ +/* + * Copyright 2003 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. + */ + +// Fast USB interface + +#ifndef _FUSB_LIBUSB1_BASE_H_ +#define _FUSB_LIBUSB1_BASE_H_ + +struct libusb_device_handle; +struct libusb_context; +class fusb_ephandle; + +/*! + * \brief abstract usb device handle + */ +class fusb_devhandle { +private: + // NOT IMPLEMENTED + fusb_devhandle (const fusb_devhandle &rhs); // no copy constructor + fusb_devhandle &operator= (const fusb_devhandle &rhs); // no assignment operator + +protected: + libusb_device_handle *d_udh; + +public: + // CREATORS + fusb_devhandle (libusb_device_handle *udh); + virtual ~fusb_devhandle (); + + // MANIPULATORS + + /*! + * \brief return an ephandle of the correct subtype + */ + virtual fusb_ephandle *make_ephandle (int endpoint, bool input_p, + int block_size = 0, int nblocks = 0) = 0; + + // ACCESSORS + libusb_device_handle *get_usb_dev_handle () const { return d_udh; } +}; + + +/*! + * \brief abstract usb end point handle + */ +class fusb_ephandle { +private: + // NOT IMPLEMENTED + fusb_ephandle (const fusb_ephandle &rhs); // no copy constructor + fusb_ephandle &operator= (const fusb_ephandle &rhs); // no assignment operator + +protected: + int d_endpoint; + bool d_input_p; + int d_block_size; + int d_nblocks; + bool d_started; + +public: + fusb_ephandle (int endpoint, bool input_p, + int block_size = 0, int nblocks = 0); + virtual ~fusb_ephandle (); + + virtual bool start () = 0; //!< begin streaming i/o + virtual bool stop () = 0; //!< stop streaming i/o + + /*! + * \returns \p nbytes if write was successfully enqueued, else -1. + * Will block if no free buffers available. + */ + virtual int write (const void *buffer, int nbytes) = 0; + + /*! + * \returns number of bytes read or -1 if error. + * number of bytes read will be <= nbytes. + * Will block if no input available. + */ + virtual int read (void *buffer, int nbytes) = 0; + + /* + * block until all outstanding writes have completed + */ + virtual void wait_for_completion () = 0; + + /*! + * \brief returns current block size. + */ + int block_size () { return d_block_size; }; +}; + + +/*! + * \brief factory for creating concrete instances of the appropriate subtype. + */ +class fusb_sysconfig { +public: + /*! + * \brief returns fusb_devhandle or throws if trouble + */ + static fusb_devhandle *make_devhandle (libusb_device_handle *udh, + libusb_context *ctx = 0); + + /*! + * \brief Returns max block size in bytes (hard limit). + */ + static int max_block_size (); + + /*! + * \brief Returns default block size in bytes. + */ + static int default_block_size (); + + /*! + * \brief Returns the default buffer size in bytes. + */ + static int default_buffer_size (); + +}; + +#endif /*_FUSB_LIBUSB1_BASE_H_ */ + diff --git a/host/lib/fusb_linux.cc b/host/lib/fusb_linux.cc index 0b3aaed..6c48456 100644 --- a/host/lib/fusb_linux.cc +++ b/host/lib/fusb_linux.cc @@ -20,9 +20,9 @@ * Boston, MA 02110-1301, USA. */ -//#ifdef HAVE_CONFIG_H -//#include "config.h" -//#endif +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include #include // libusb header diff --git a/host/lib/fusb_sysconfig_libusb1.cc b/host/lib/fusb_sysconfig_libusb1.cc index f71e34f..ab3c475 100644 --- a/host/lib/fusb_sysconfig_libusb1.cc +++ b/host/lib/fusb_sysconfig_libusb1.cc @@ -20,7 +20,7 @@ * Boston, MA 02110-1301, USA. */ -#include +#include #include static const int MAX_BLOCK_SIZE = 16 * 1024; // hard limit diff --git a/host/lib/fusb_win32.cc b/host/lib/fusb_win32.cc index 7b11bb9..8900576 100644 --- a/host/lib/fusb_win32.cc +++ b/host/lib/fusb_win32.cc @@ -20,9 +20,9 @@ * Boston, MA 02110-1301, USA. */ -//#ifdef HAVE_CONFIG_H -//#include "config.h" -//#endif +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include #include diff --git a/host/lib/usrp_basic_common.cc b/host/lib/usrp_basic_common.cc index ad1eca5..9a1f9fd 100644 --- a/host/lib/usrp_basic_common.cc +++ b/host/lib/usrp_basic_common.cc @@ -20,16 +20,23 @@ * Boston, MA 02110-1301, USA. */ -//#ifdef HAVE_CONFIG_H -//#include "config.h" -//#endif +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_LIBUSB_1 +#include "fusb_libusb1_base.h" +#include +#else +#include "fusb.h" +#include +#endif #include "usrp/usrp_basic.h" #include "usrp/usrp_prims.h" #include "usrp_interfaces.h" #include "fpga_regs_common.h" #include "fpga_regs_standard.h" -#include "fusb.h" #include "db_boards.h" #include #include @@ -38,12 +45,6 @@ #include #include -#ifdef HAVE_LIBUSB_1 -#include -#else -#include -#endif - using namespace ad9862; #define NELEM(x) (sizeof (x) / sizeof (x[0])) diff --git a/host/lib/usrp_basic_libusb0.cc b/host/lib/usrp_basic_libusb0.cc index bd22d6a..6e41585 100644 --- a/host/lib/usrp_basic_libusb0.cc +++ b/host/lib/usrp_basic_libusb0.cc @@ -20,9 +20,9 @@ * Boston, MA 02110-1301, USA. */ -//#ifdef HAVE_CONFIG_H -//#include "config.h" -//#endif +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include #include "usrp/usrp_prims.h" diff --git a/host/lib/usrp_basic_libusb1.cc b/host/lib/usrp_basic_libusb1.cc index 64cff60..7cfd69b 100644 --- a/host/lib/usrp_basic_libusb1.cc +++ b/host/lib/usrp_basic_libusb1.cc @@ -29,7 +29,7 @@ #include "usrp_interfaces.h" #include "fpga_regs_common.h" #include "fpga_regs_standard.h" -#include "fusb.h" +#include "fusb_libusb1_base.h" #include "db_boards.h" #include #include diff --git a/host/lib/usrp_prims_common.cc b/host/lib/usrp_prims_common.cc index c9fcf80..41722b2 100644 --- a/host/lib/usrp_prims_common.cc +++ b/host/lib/usrp_prims_common.cc @@ -24,6 +24,12 @@ #include "config.h" #endif +#ifdef HAVE_LIBUSB_1 +#include +#else +#include +#endif + #include "usrp/usrp_prims.h" #include "usrp_commands.h" #include "usrp_ids.h" @@ -42,12 +48,6 @@ #include #include "std_paths.h" -#ifdef HAVE_LIBUSB_1 -#include -#else -#include -#endif - extern "C" { #include "md5.h" };