diff options
-rw-r--r-- | usrp/host/lib/Makefile.am | 9 | ||||
-rw-r--r-- | usrp/host/lib/fusb.cc | 11 | ||||
-rw-r--r-- | usrp/host/lib/fusb.h | 12 | ||||
-rw-r--r-- | usrp/host/lib/fusb_libusb1.cc | 6 | ||||
-rw-r--r-- | usrp/host/lib/fusb_libusb1.h | 2 | ||||
-rw-r--r-- | usrp/host/lib/fusb_libusb1_base.h | 140 | ||||
-rw-r--r-- | usrp/host/lib/fusb_linux.cc | 6 | ||||
-rw-r--r-- | usrp/host/lib/fusb_sysconfig_libusb1.cc | 2 | ||||
-rw-r--r-- | usrp/host/lib/fusb_win32.cc | 6 | ||||
-rw-r--r-- | usrp/host/lib/usrp_basic_common.cc | 21 | ||||
-rw-r--r-- | usrp/host/lib/usrp_basic_libusb0.cc | 6 | ||||
-rw-r--r-- | usrp/host/lib/usrp_basic_libusb1.cc | 2 | ||||
-rw-r--r-- | usrp/host/lib/usrp_prims_common.cc | 12 |
13 files changed, 186 insertions, 49 deletions
diff --git a/usrp/host/lib/Makefile.am b/usrp/host/lib/Makefile.am index 7455b1536..3687aae72 100644 --- a/usrp/host/lib/Makefile.am +++ b/usrp/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/usrp/host/lib/fusb.cc b/usrp/host/lib/fusb.cc index 0bd9ded59..992e1a2e9 100644 --- a/usrp/host/lib/fusb.cc +++ b/usrp/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 <fusb_libusb1_base.h> +#else #include <fusb.h> - +#endif // ------------------------------------------------------------------------ // device handle diff --git a/usrp/host/lib/fusb.h b/usrp/host/lib/fusb.h index 2ff7dc89f..506f396fa 100644 --- a/usrp/host/lib/fusb.h +++ b/usrp/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/usrp/host/lib/fusb_libusb1.cc b/usrp/host/lib/fusb_libusb1.cc index 1be2fa2f1..6ea760726 100644 --- a/usrp/host/lib/fusb_libusb1.cc +++ b/usrp/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 <fusb_libusb1.h> #include <libusb-1.0/libusb.h> diff --git a/usrp/host/lib/fusb_libusb1.h b/usrp/host/lib/fusb_libusb1.h index 4bc49aafb..0257ac38a 100644 --- a/usrp/host/lib/fusb_libusb1.h +++ b/usrp/host/lib/fusb_libusb1.h @@ -23,7 +23,7 @@ #ifndef _FUSB_LIBUSB1_H_ #define _FUSB_LIBUSB1_H_ -#include <fusb.h> +#include <fusb_libusb1_base.h> #include <list> struct libusb_transfer; diff --git a/usrp/host/lib/fusb_libusb1_base.h b/usrp/host/lib/fusb_libusb1_base.h new file mode 100644 index 000000000..6a2436453 --- /dev/null +++ b/usrp/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/usrp/host/lib/fusb_linux.cc b/usrp/host/lib/fusb_linux.cc index 0b3aaed71..6c484569f 100644 --- a/usrp/host/lib/fusb_linux.cc +++ b/usrp/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 <fusb_linux.h> #include <usb.h> // libusb header diff --git a/usrp/host/lib/fusb_sysconfig_libusb1.cc b/usrp/host/lib/fusb_sysconfig_libusb1.cc index f71e34fa9..ab3c475d5 100644 --- a/usrp/host/lib/fusb_sysconfig_libusb1.cc +++ b/usrp/host/lib/fusb_sysconfig_libusb1.cc @@ -20,7 +20,7 @@ * Boston, MA 02110-1301, USA. */ -#include <fusb.h> +#include <fusb_libusb1_base.h> #include <fusb_libusb1.h> static const int MAX_BLOCK_SIZE = 16 * 1024; // hard limit diff --git a/usrp/host/lib/fusb_win32.cc b/usrp/host/lib/fusb_win32.cc index 7b11bb919..8900576d9 100644 --- a/usrp/host/lib/fusb_win32.cc +++ b/usrp/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 <fusb_win32.h> #include <usb.h> diff --git a/usrp/host/lib/usrp_basic_common.cc b/usrp/host/lib/usrp_basic_common.cc index ad1eca56d..9a1f9fd55 100644 --- a/usrp/host/lib/usrp_basic_common.cc +++ b/usrp/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 <libusb-1.0/libusb.h> +#else +#include "fusb.h" +#include <usb.h> +#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 <stdexcept> #include <assert.h> @@ -38,12 +45,6 @@ #include <string.h> #include <cstdio> -#ifdef HAVE_LIBUSB_1 -#include <libusb-1.0/libusb.h> -#else -#include <usb.h> -#endif - using namespace ad9862; #define NELEM(x) (sizeof (x) / sizeof (x[0])) diff --git a/usrp/host/lib/usrp_basic_libusb0.cc b/usrp/host/lib/usrp_basic_libusb0.cc index bd22d6ad4..6e41585bb 100644 --- a/usrp/host/lib/usrp_basic_libusb0.cc +++ b/usrp/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 <usrp/usrp_basic.h> #include "usrp/usrp_prims.h" diff --git a/usrp/host/lib/usrp_basic_libusb1.cc b/usrp/host/lib/usrp_basic_libusb1.cc index 64cff6078..7cfd69be6 100644 --- a/usrp/host/lib/usrp_basic_libusb1.cc +++ b/usrp/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 <libusb-1.0/libusb.h> #include <stdexcept> diff --git a/usrp/host/lib/usrp_prims_common.cc b/usrp/host/lib/usrp_prims_common.cc index c9fcf80df..41722b23b 100644 --- a/usrp/host/lib/usrp_prims_common.cc +++ b/usrp/host/lib/usrp_prims_common.cc @@ -24,6 +24,12 @@ #include "config.h" #endif +#ifdef HAVE_LIBUSB_1 +#include <libusb-1.0/libusb.h> +#else +#include <usb.h> +#endif + #include "usrp/usrp_prims.h" #include "usrp_commands.h" #include "usrp_ids.h" @@ -42,12 +48,6 @@ #include <assert.h> #include "std_paths.h" -#ifdef HAVE_LIBUSB_1 -#include <libusb-1.0/libusb.h> -#else -#include <usb.h> -#endif - extern "C" { #include "md5.h" }; |