From 7b14a03f48984d20d0ff969eaa327078cd2773cb Mon Sep 17 00:00:00 2001 From: eb Date: Wed, 16 Jan 2008 20:38:04 +0000 Subject: [PATCH] Merged -r7436:7453 eb/freebsd into trunk. This is a part of a set of patches from Diane Bruce for FreeBSD. Still need to resolve the issue of where/how to include config.h in all swig code and how to select wx version on systems with more than one version installed. git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@7454 221aa14e-8319-0410-a670-987f0aec2ac5 --- configure.ac | 3 +- gnuradio-core/src/lib/io/gr_udp_sink.cc | 5 +- gnuradio-core/src/lib/io/gr_udp_sink.h | 10 +- gnuradio-core/src/lib/io/gr_udp_source.cc | 5 +- gnuradio-core/src/lib/io/gr_udp_source.h | 8 +- gnuradio-core/src/lib/io/ppio_ppdev.cc | 184 +++++++++++++++++----- 6 files changed, 164 insertions(+), 51 deletions(-) diff --git a/configure.ac b/configure.ac index cb1a6b26..147fb944 100644 --- a/configure.ac +++ b/configure.ac @@ -125,8 +125,9 @@ dnl Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(fcntl.h limits.h strings.h time.h sys/ioctl.h sys/time.h unistd.h) -AC_CHECK_HEADERS(linux/ppdev.h sys/mman.h sys/select.h sys/types.h) +AC_CHECK_HEADERS(linux/ppdev.h dev/ppbus/ppi.h sys/mman.h sys/select.h sys/types.h) AC_CHECK_HEADERS(sys/resource.h stdint.h sched.h signal.h sys/syscall.h) +AC_CHECK_HEADERS(netinet/in.h) AC_CHECK_HEADERS(windows.h) dnl Checks for typedefs, structures, and compiler characteristics. diff --git a/gnuradio-core/src/lib/io/gr_udp_sink.cc b/gnuradio-core/src/lib/io/gr_udp_sink.cc index 2b60c534..15bcf9a8 100644 --- a/gnuradio-core/src/lib/io/gr_udp_sink.cc +++ b/gnuradio-core/src/lib/io/gr_udp_sink.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2007 Free Software Foundation, Inc. + * Copyright 2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,6 +20,9 @@ * Boston, MA 02110-1301, USA. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include #include #include diff --git a/gnuradio-core/src/lib/io/gr_udp_sink.h b/gnuradio-core/src/lib/io/gr_udp_sink.h index 606dcfc7..4f08136e 100644 --- a/gnuradio-core/src/lib/io/gr_udp_sink.h +++ b/gnuradio-core/src/lib/io/gr_udp_sink.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2007 Free Software Foundation, Inc. + * Copyright 2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -27,6 +27,10 @@ #include #include #include +#include +#if defined(HAVE_NETINET_IN_H) +#include +#endif class gr_udp_sink; typedef boost::shared_ptr gr_udp_sink_sptr; @@ -70,8 +74,8 @@ class gr_udp_sink : public gr_sync_block struct in_addr d_ip_dst; // store the destination ip info unsigned short d_port_src; // the port number to open for connections to this service unsigned short d_port_dst; // port number of the remove system - sockaddr_in d_sockaddr_src; // store the source sockaddr data (formatted IP address and port number) - sockaddr_in d_sockaddr_dst; // store the destination sockaddr data (formatted IP address and port number) + struct sockaddr_in d_sockaddr_src; // store the source sockaddr data (formatted IP address and port number) + struct sockaddr_in d_sockaddr_dst; // store the destination sockaddr data (formatted IP address and port number) protected: /*! diff --git a/gnuradio-core/src/lib/io/gr_udp_source.cc b/gnuradio-core/src/lib/io/gr_udp_source.cc index fa7d43d1..f7f04d3c 100644 --- a/gnuradio-core/src/lib/io/gr_udp_source.cc +++ b/gnuradio-core/src/lib/io/gr_udp_source.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2007 Free Software Foundation, Inc. + * Copyright 2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -20,6 +20,9 @@ * Boston, MA 02110-1301, USA. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include #include #include diff --git a/gnuradio-core/src/lib/io/gr_udp_source.h b/gnuradio-core/src/lib/io/gr_udp_source.h index 70e071e5..83bebf84 100644 --- a/gnuradio-core/src/lib/io/gr_udp_source.h +++ b/gnuradio-core/src/lib/io/gr_udp_source.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2007 Free Software Foundation, Inc. + * Copyright 2007,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -27,6 +27,9 @@ #include #include #include +#if defined(HAVE_NETINET_IN_H) +#include +#endif class gr_udp_source; typedef boost::shared_ptr gr_udp_source_sptr; @@ -62,8 +65,7 @@ class gr_udp_source : public gr_sync_block int d_socket_rcv; // handle to socket retuned in the accept call struct in_addr d_ip_src; // store the source IP address to use unsigned short d_port_src; // the port number to open for connections to this service - sockaddr_in d_sockaddr_src; // store the source sockaddr data (formatted IP address and port number) - + struct sockaddr_in d_sockaddr_src; // store the source sockaddr data (formatted IP address and port number) char *d_temp_buff; // hold buffer between calls ssize_t d_residual; // hold information about number of bytes stored in the temp buffer size_t d_temp_offset; // point to temp buffer location offset diff --git a/gnuradio-core/src/lib/io/ppio_ppdev.cc b/gnuradio-core/src/lib/io/ppio_ppdev.cc index 61591ad1..074de1aa 100644 --- a/gnuradio-core/src/lib/io/ppio_ppdev.cc +++ b/gnuradio-core/src/lib/io/ppio_ppdev.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2001,2003,2004 Free Software Foundation, Inc. + * Copyright 2001,2003,2004,2008 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -32,11 +32,16 @@ #include #include #include -#ifdef HAVE_LINUX_PPDEV_H +#if defined(HAVE_LINUX_PPDEV_H) #include #include #include #include +#elif defined(HAVE_DEV_PPBUS_PPI_H) +#include +#include +#include +#include #else // #warn "ppio_ppdev is not functional on this platform" #endif @@ -53,84 +58,138 @@ static int CP_ACTIVE_LOW_BITS = 0x0B; static int SP_ACTIVE_LOW_BITS = 0x80; -#ifndef HAVE_LINUX_PPDEV_H // use stubs +#if defined(HAVE_LINUX_PPDEV_H) + +// The real Linux code... ppio_ppdev::ppio_ppdev (int which) { - std::cerr << "ppio_ppdev: Not implemented on this platform\n"; - throw std::runtime_error ("not implmeneted"); + std::ostringstream filename; + filename << "/dev/parport" << which; + const char *c_filename = filename.str().c_str(); + + if ((d_fd = open (c_filename, O_RDWR)) < 0){ + int my_errno = errno; + perror (c_filename); + if (my_errno == ENOENT){ + std::cerr << "Does the device file " << c_filename << " exist?\n"; + std::cerr << "If not, as root execute: \n"; + std::cerr << " # mknod " << c_filename << " c 99 0\n"; + std::cerr << " # chmod 666 " << c_filename << std::endl; + } + throw std::runtime_error ("open"); + } + + int mode = IEEE1284_MODE_COMPAT; + if (ioctl (d_fd, PPSETMODE, &mode) != 0){ + perror ("ppio_ppdev: PPSETMODE"); + close (d_fd); + throw std::runtime_error ("PPSETMODE"); + } } ppio_ppdev::~ppio_ppdev () { + close (d_fd); } + void ppio_ppdev::write_data (unsigned char v) { + if (ioctl (d_fd, PPWDATA, &v) != 0){ + perror ("ppio_ppdev: PPWDATA"); + throw std::runtime_error ("PPWDATA"); + } } unsigned char ppio_ppdev::read_data () { - return 0; + unsigned char v; + + if (ioctl (d_fd, PPRDATA, &v) != 0){ + perror ("ppio_ppdev: PPRDATA"); + throw std::runtime_error ("PPRDATA"); + } + return v; } void ppio_ppdev::write_control (unsigned char v) { + unsigned char ctrl = v ^ CP_ACTIVE_LOW_BITS; + if (ioctl (d_fd, PPWCONTROL, &ctrl) != 0){ + perror ("ppio_ppdev: PPWCONTROL"); + throw std::runtime_error ("PPWCONTROL"); + } } unsigned char ppio_ppdev::read_control () { - return 0; + unsigned char ctrl; + if (ioctl (d_fd, PPRCONTROL, &ctrl) != 0){ + perror ("ppio_ppdev: PPRCONTROL"); + throw std::runtime_error ("PPRCONTROL"); + } + + return ctrl ^ CP_ACTIVE_LOW_BITS; } unsigned char ppio_ppdev::read_status () { - return 0; + unsigned char status; + if (ioctl (d_fd, PPRSTATUS, &status) != 0){ + perror ("ppio_ppdev: PPRSTATUS"); + throw std::runtime_error ("PPRSTATUS"); + } + + return status ^ SP_ACTIVE_LOW_BITS; } void ppio_ppdev::lock () { + if (ioctl (d_fd, PPCLAIM) != 0){ + perror ("ppio_ppdev: PPCLAIM"); + throw std::runtime_error ("PPCLAIM"); + } } void ppio_ppdev::unlock () { + if (ioctl (d_fd, PPRELEASE) != 0){ + perror ("ppio_ppdev: PPRELEASE"); + throw std::runtime_error ("PPRELEASE"); + } } -#else +#elif defined(HAVE_DEV_PPBUS_PPI_H) -// The real code... +// The real FreeBSD code... (Could work on other BSDs as well) ppio_ppdev::ppio_ppdev (int which) { std::ostringstream filename; - filename << "/dev/parport" << which; + filename << "/dev/ppi" << which; const char *c_filename = filename.str().c_str(); - if ((d_fd = open (c_filename, O_RDWR)) < 0){ int my_errno = errno; perror (c_filename); - if (my_errno == ENOENT){ - std::cerr << "Does the device file " << c_filename << " exist?\n"; - std::cerr << "If not, as root execute: \n"; - std::cerr << " # mknod " << c_filename << " c 99 0\n"; - std::cerr << " # chmod 666 " << c_filename << std::endl; - } throw std::runtime_error ("open"); } +#if 0 int mode = IEEE1284_MODE_COMPAT; if (ioctl (d_fd, PPSETMODE, &mode) != 0){ perror ("ppio_ppdev: PPSETMODE"); close (d_fd); throw std::runtime_error ("PPSETMODE"); } +#endif } ppio_ppdev::~ppio_ppdev () @@ -142,9 +201,9 @@ ppio_ppdev::~ppio_ppdev () void ppio_ppdev::write_data (unsigned char v) { - if (ioctl (d_fd, PPWDATA, &v) != 0){ - perror ("ppio_ppdev: PPWDATA"); - throw std::runtime_error ("PPWDATA"); + if (ioctl (d_fd, PPISDATA, &v) != 0){ + perror ("ppio_ppdev: PPISDATA"); + throw std::runtime_error ("PPISDATA"); } } @@ -153,9 +212,9 @@ ppio_ppdev::read_data () { unsigned char v; - if (ioctl (d_fd, PPRDATA, &v) != 0){ - perror ("ppio_ppdev: PPRDATA"); - throw std::runtime_error ("PPRDATA"); + if (ioctl (d_fd, PPIGDATA, &v) != 0){ + perror ("ppio_ppdev: PPIGDATA"); + throw std::runtime_error ("PPIGDATA"); } return v; } @@ -164,9 +223,9 @@ void ppio_ppdev::write_control (unsigned char v) { unsigned char ctrl = v ^ CP_ACTIVE_LOW_BITS; - if (ioctl (d_fd, PPWCONTROL, &ctrl) != 0){ - perror ("ppio_ppdev: PPWCONTROL"); - throw std::runtime_error ("PPWCONTROL"); + if (ioctl (d_fd, PPISCTRL, &ctrl) != 0){ + perror ("ppio_ppdev: PPISCTRL"); + throw std::runtime_error ("PPISCTRL"); } } @@ -174,9 +233,9 @@ unsigned char ppio_ppdev::read_control () { unsigned char ctrl; - if (ioctl (d_fd, PPRCONTROL, &ctrl) != 0){ - perror ("ppio_ppdev: PPRCONTROL"); - throw std::runtime_error ("PPRCONTROL"); + if (ioctl (d_fd, PPIGCTRL, &ctrl) != 0){ + perror ("ppio_ppdev: PPIGCTRL"); + throw std::runtime_error ("PPIGCTRL"); } return ctrl ^ CP_ACTIVE_LOW_BITS; @@ -186,30 +245,71 @@ unsigned char ppio_ppdev::read_status () { unsigned char status; - if (ioctl (d_fd, PPRSTATUS, &status) != 0){ - perror ("ppio_ppdev: PPRSTATUS"); - throw std::runtime_error ("PPRSTATUS"); + if (ioctl (d_fd, PPIGSTATUS, &status) != 0){ + perror ("ppio_ppdev: PPIGSTATUS"); + throw std::runtime_error ("PPIGSTATUS"); } - return status ^ SP_ACTIVE_LOW_BITS; } void ppio_ppdev::lock () { - if (ioctl (d_fd, PPCLAIM) != 0){ - perror ("ppio_ppdev: PPCLAIM"); - throw std::runtime_error ("PPCLAIM"); - } } void ppio_ppdev::unlock () { - if (ioctl (d_fd, PPRELEASE) != 0){ - perror ("ppio_ppdev: PPRELEASE"); - throw std::runtime_error ("PPRELEASE"); - } +} +#else +/* Apparently, non real code */ + +ppio_ppdev::ppio_ppdev (int which) +{ + std::cerr << "ppio_ppdev: Not implemented on this platform\n"; + throw std::runtime_error ("not implmeneted"); +} + +ppio_ppdev::~ppio_ppdev () +{ +} + +void +ppio_ppdev::write_data (unsigned char v) +{ +} + +unsigned char +ppio_ppdev::read_data () +{ + return 0; +} + +void +ppio_ppdev::write_control (unsigned char v) +{ +} + +unsigned char +ppio_ppdev::read_control () +{ + return 0; +} + +unsigned char +ppio_ppdev::read_status () +{ + return 0; +} + +void +ppio_ppdev::lock () +{ +} + +void +ppio_ppdev::unlock () +{ } #endif -- 2.30.2