summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreb2008-01-16 20:38:04 +0000
committereb2008-01-16 20:38:04 +0000
commit7b14a03f48984d20d0ff969eaa327078cd2773cb (patch)
treea023adad8a2a614b6ad3f1710546a46babb5b11b
parentbcb3b35f329f5cfc286c3fd86d349470d29366d5 (diff)
downloadgnuradio-7b14a03f48984d20d0ff969eaa327078cd2773cb.tar.gz
gnuradio-7b14a03f48984d20d0ff969eaa327078cd2773cb.tar.bz2
gnuradio-7b14a03f48984d20d0ff969eaa327078cd2773cb.zip
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
-rw-r--r--configure.ac3
-rw-r--r--gnuradio-core/src/lib/io/gr_udp_sink.cc5
-rw-r--r--gnuradio-core/src/lib/io/gr_udp_sink.h10
-rw-r--r--gnuradio-core/src/lib/io/gr_udp_source.cc5
-rw-r--r--gnuradio-core/src/lib/io/gr_udp_source.h8
-rw-r--r--gnuradio-core/src/lib/io/ppio_ppdev.cc184
6 files changed, 164 insertions, 51 deletions
diff --git a/configure.ac b/configure.ac
index cb1a6b26e..147fb9449 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 2b60c534e..15bcf9a83 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 <gr_udp_sink.h>
#include <gr_io_signature.h>
#include <stdexcept>
diff --git a/gnuradio-core/src/lib/io/gr_udp_sink.h b/gnuradio-core/src/lib/io/gr_udp_sink.h
index 606dcfc78..4f08136ec 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 <omnithread.h>
#include <sys/socket.h>
#include <arpa/inet.h>
+#include <sys/socket.h>
+#if defined(HAVE_NETINET_IN_H)
+#include <netinet/in.h>
+#endif
class gr_udp_sink;
typedef boost::shared_ptr<gr_udp_sink> 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 fa7d43d1b..f7f04d3cf 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 <gr_udp_source.h>
#include <gr_io_signature.h>
#include <stdexcept>
diff --git a/gnuradio-core/src/lib/io/gr_udp_source.h b/gnuradio-core/src/lib/io/gr_udp_source.h
index 70e071e5b..83bebf84d 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 <omnithread.h>
#include <sys/socket.h>
#include <arpa/inet.h>
+#if defined(HAVE_NETINET_IN_H)
+#include <netinet/in.h>
+#endif
class gr_udp_source;
typedef boost::shared_ptr<gr_udp_source> 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 61591ad1b..074de1aa1 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 <errno.h>
#include <stdio.h>
#include <stdexcept>
-#ifdef HAVE_LINUX_PPDEV_H
+#if defined(HAVE_LINUX_PPDEV_H)
#include <sys/ioctl.h>
#include <linux/ppdev.h>
#include <linux/parport.h>
#include <sstream>
+#elif defined(HAVE_DEV_PPBUS_PPI_H)
+#include <sys/ioctl.h>
+#include <dev/ppbus/ppi.h>
+#include <dev/ppbus/ppbconf.h>
+#include <sstream>
#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