commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r4293 - in gnuradio/trunk: gnuradio-core/src/lib/io gn


From: trondeau
Subject: [Commit-gnuradio] r4293 - in gnuradio/trunk: gnuradio-core/src/lib/io gnuradio-examples/python/hier gnuradio-examples/python/hier/networking
Date: Fri, 26 Jan 2007 12:24:07 -0700 (MST)

Author: trondeau
Date: 2007-01-26 12:24:06 -0700 (Fri, 26 Jan 2007)
New Revision: 4293

Added:
   gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.cc
   gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.h
   gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.i
   gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.cc
   gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.h
   gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.i
   gnuradio/trunk/gnuradio-examples/python/hier/networking/
   gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_sink.py
   gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_source.py
   gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_sink.py
   gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_source.py
Removed:
   gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_sink.py
   gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_source.py
   gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_sink.py
   gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_source.py
Modified:
   gnuradio/trunk/gnuradio-core/src/lib/io/Makefile.am
   gnuradio/trunk/gnuradio-core/src/lib/io/io.i
Log:
merged changeset r4281:4292 on trondeau/ethernet into trunk

Modified: gnuradio/trunk/gnuradio-core/src/lib/io/Makefile.am
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/io/Makefile.am 2007-01-25 03:47:24 UTC 
(rev 4292)
+++ gnuradio/trunk/gnuradio-core/src/lib/io/Makefile.am 2007-01-26 19:24:06 UTC 
(rev 4293)
@@ -50,7 +50,9 @@
        microtune_xxxx_eval_board.cc    \
        ppio.cc                         \
        ppio_ppdev.cc                   \
-       sdr_1000.cc                     
+       sdr_1000.cc                     \
+       gr_udp_sink.cc                  \
+       gr_udp_source.cc
 
 grinclude_HEADERS =                    \
        gr_file_sink.h                  \
@@ -93,4 +95,6 @@
        microtune_4702_eval_board.i     \
        microtune_4937_eval_board.i     \
        ppio.i                          \
-       sdr_1000.i                      
+       sdr_1000.i                      \
+       gr_udp_sink.i                   \
+       gr_udp_source.i

Copied: gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.cc (from rev 4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_udp_sink.cc)
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.cc                      
        (rev 0)
+++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.cc      2007-01-26 
19:24:06 UTC (rev 4293)
@@ -0,0 +1,157 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 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 2, 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_udp_sink.h>
+#include <gr_io_signature.h>
+#include <cstdio>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdexcept>
+
+#define SNK_VERBOSE 0
+
+gr_udp_sink::gr_udp_sink (size_t itemsize, 
+                         const char *ipaddrl, unsigned short portl,
+                         const char *ipaddrr, unsigned short portr,
+                         unsigned int mtu)
+  : gr_sync_block ("udp_sink",
+                  gr_make_io_signature (1, 1, itemsize),
+                  gr_make_io_signature (0, 0, 0)),
+    d_itemsize (itemsize), d_updated(false), d_mtu(mtu)
+{
+  // Set up the address stucture for the local address and port numbers
+  inet_aton(ipaddrl, &d_ipaddr_local);     // format IP address
+  inet_aton(ipaddrr, &d_ipaddr_remote);    // format IP address
+  d_port_local  = htons(portl);            // format port number
+  d_port_remote = htons(portr);            // format port number
+
+  d_sockaddr_local.sin_family = AF_INET;
+  d_sockaddr_local.sin_addr   = d_ipaddr_local;
+  d_sockaddr_local.sin_port   = d_port_local;
+
+  d_sockaddr_remote.sin_family = AF_INET;
+  d_sockaddr_remote.sin_addr   = d_ipaddr_remote;
+  d_sockaddr_remote.sin_port   = d_port_remote;
+  
+  open();
+}
+
+// public constructor that returns a shared_ptr
+
+gr_udp_sink_sptr
+gr_make_udp_sink (size_t itemsize, 
+                 const char *ipaddrl, unsigned short portl,
+                 const char *ipaddrr, unsigned short portr,
+                 unsigned int mtu)
+{
+  return gr_udp_sink_sptr (new gr_udp_sink (itemsize, 
+                                                     ipaddrl, portl,
+                                                     ipaddrr, portr,
+                                                     mtu));
+}
+
+gr_udp_sink::~gr_udp_sink ()
+{
+  close();
+}
+
+bool
+gr_udp_sink::open()
+{
+  omni_mutex_lock l(d_mutex);  // hold mutex for duration of this function
+
+  // create socket
+  if((d_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == NULL) {
+    perror("socket open");
+    throw std::runtime_error("can't open socket");
+  }
+
+  // Turn on reuse address
+  bool opt_val = true;
+  if(setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, (void*)&opt_val, 
sizeof(int))) {
+    perror("SO_REUSEADDR");
+    throw std::runtime_error("can't set socket option SO_REUSEADDR");
+  }
+
+  // Don't wait when shutting down
+  linger lngr;
+  lngr.l_onoff  = 1;
+  lngr.l_linger = 0;
+  if(setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (void*)&lngr, 
sizeof(linger))) {
+    perror("SO_LINGER");
+    throw std::runtime_error("can't set socket option SO_LINGER");
+  }
+
+  // bind socket to an address and port number to listen on
+  if(bind (d_socket, (sockaddr*)&d_sockaddr_local, sizeof(struct sockaddr))) {
+    perror("socket bind");
+    throw std::runtime_error("can't bind socket");
+  }
+
+  // Not sure if we should throw here or allow retries
+  if(connect(d_socket, (sockaddr*)&d_sockaddr_remote, sizeof(struct 
sockaddr))) {
+    perror("socket connect");
+    throw std::runtime_error("can't connect to socket");
+  }
+
+  d_updated = true;
+  return d_socket != 0;
+}
+
+void
+gr_udp_sink::close()
+{
+  omni_mutex_lock l(d_mutex);  // hold mutex for duration of this function
+
+  if (d_socket){
+    shutdown(d_socket, SHUT_RDWR);
+    d_socket = 0;
+  }
+  d_updated = true;
+}
+
+int 
+gr_udp_sink::work (int noutput_items,
+                  gr_vector_const_void_star &input_items,
+                  gr_vector_void_star &output_items)
+{
+  char *in = (char *) input_items[0];
+  socklen_t bytes=0, bytes_sent=0, bytes_to_send=0;
+  unsigned int total_size = noutput_items*d_itemsize;
+
+  while(bytes_sent < total_size) {
+    bytes_to_send = (bytes_sent+d_mtu < total_size ? d_mtu : 
total_size-bytes_sent);
+    bytes =send(d_socket, (in+bytes_sent), bytes_to_send, MSG_DONTWAIT);
+    bytes_sent += bytes;
+  }
+
+  #if SNK_VERBOSE
+  printf("Sent: %d bytes (noutput_items: %d)\n", bytes_sent, noutput_items);
+  #endif
+
+  return noutput_items;
+}

Copied: gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.h (from rev 4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_udp_sink.h)
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.h                       
        (rev 0)
+++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.h       2007-01-26 
19:24:06 UTC (rev 4293)
@@ -0,0 +1,103 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 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 2, 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.
+ */
+
+#ifndef INCLUDED_GR_UDP_SINK_H
+#define INCLUDED_GR_UDP_SINK_H
+
+#include <gr_sync_block.h>
+#include <omnithread.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+class gr_udp_sink;
+typedef boost::shared_ptr<gr_udp_sink> gr_udp_sink_sptr;
+
+/*!
+ * \brief Write stream to an Udp port (over UDP).
+ * \ingroup sink
+ */
+
+gr_udp_sink_sptr
+gr_make_udp_sink (size_t itemsize, 
+                 const char *ipaddrl, unsigned short portl,
+                 const char *ipaddrr, unsigned short portr,
+                 unsigned int mtu=540);
+
+class gr_udp_sink : public gr_sync_block
+{
+  friend gr_udp_sink_sptr gr_make_udp_sink (size_t itemsize, 
+                                           const char *ipaddrl, unsigned short 
portl,
+                                           const char *ipaddrr, unsigned short 
portr,
+                                           unsigned int mtu);
+ private:
+  size_t       d_itemsize;
+  bool         d_updated;
+  omni_mutex   d_mutex;
+
+  unsigned int   d_mtu;             // maximum transmission unit (packet 
length)
+  int            d_socket;          // handle to socket
+  int            d_socket_rcv;      // handle to socket retuned in the accept 
call
+  struct in_addr d_ipaddr_local;    // store the local IP address to use
+  struct in_addr d_ipaddr_remote;   // store the remote IP address that 
connected to us
+  unsigned short d_port_local;      // the port number to open for connections 
to this service
+  unsigned short d_port_remote;     // port number of the remove system
+  sockaddr_in    d_sockaddr_local;  // store the local sockaddr data 
(formatted IP address and port number)
+  sockaddr_in    d_sockaddr_remote; // store the remote sockaddr data 
(formatted IP address and port number)
+
+ protected:
+  gr_udp_sink (size_t itemsize, 
+                   const char *ipaddrl, unsigned short portl,
+                   const char *ipaddrr, unsigned short portr,
+                   unsigned int mtu);
+
+ public:
+  ~gr_udp_sink ();
+
+  /*!
+   * \brief open a socket specified by the port and ip address info
+   *
+   * Opens a socket, binds to the address, and makes connectionless association
+   * over UDP. If any of these fail, the fuction retuns the error and exits.
+   */
+  bool open();
+
+  /*!
+   * \brief Close current socket.
+   *
+   * Shuts down read/write on the socket
+   */
+  void close();
+
+  /*! \brief set the MTU of the socket */
+  void set_mtu(unsigned int mtu) { d_mtu = mtu; }
+
+  /*! \brief return the MTU of the socket */
+  unsigned int mtu() { return d_mtu; }
+
+  // should we export anything else?
+
+  int work (int noutput_items,
+           gr_vector_const_void_star &input_items,
+           gr_vector_void_star &output_items);
+};
+
+#endif /* INCLUDED_GR_UDP_SINK_H */

Copied: gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.i (from rev 4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_udp_sink.i)
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.i                       
        (rev 0)
+++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_sink.i       2007-01-26 
19:24:06 UTC (rev 4293)
@@ -0,0 +1,47 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 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 2, 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.
+ */
+
+
+GR_SWIG_BLOCK_MAGIC(gr,udp_sink)
+
+gr_udp_sink_sptr 
+gr_make_udp_sink (size_t itemsize, 
+                 const char *ipaddrl, unsigned short portl,
+                 const char *ipaddrr, unsigned short portr,
+                 unsigned int mtu=540);
+
+class gr_udp_sink : public gr_sync_block
+{
+ protected:
+  gr_udp_sink (size_t itemsize, 
+              const char *ipaddrl, unsigned short portl,
+              const char *ipaddrr, unsigned short portr,
+              unsigned int mtu);
+
+  bool open();
+  void close();
+  void set_mtu(unsigned int mtu) { d_mtu = mtu; }
+  unsigned int mtu() { return d_mtu; }
+
+ public:
+  ~gr_udp_sink ();
+};

Copied: gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.cc (from rev 
4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_udp_source.cc)
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.cc                    
        (rev 0)
+++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.cc    2007-01-26 
19:24:06 UTC (rev 4293)
@@ -0,0 +1,160 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004,2006 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 2, 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_udp_source.h>
+#include <gr_io_signature.h>
+#include <cstdio>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdexcept>
+
+#define SRC_VERBOSE 0
+
+gr_udp_source::gr_udp_source(size_t itemsize, const char *ipaddr, 
+                            unsigned short port, unsigned int mtu)
+  : gr_sync_block ("udp_source",
+                  gr_make_io_signature(0, 0, 0),
+                  gr_make_io_signature(1, 1, itemsize)),
+    d_itemsize(itemsize), d_updated(false), d_mtu(mtu)
+{
+  // Set up the address stucture for the local address and port numbers
+  inet_aton(ipaddr, &d_ipaddr_local);     // format IP address
+  d_port_local = htons(port);             // format port number
+  
+  d_sockaddr_local.sin_family = AF_INET;
+  d_sockaddr_local.sin_addr   = d_ipaddr_local;
+  d_sockaddr_local.sin_port   = d_port_local;
+  
+  open();
+}
+
+gr_udp_source_sptr
+gr_make_udp_source (size_t itemsize, const char *ipaddr, 
+                   unsigned short port, unsigned int mtu)
+{
+  return gr_udp_source_sptr (new gr_udp_source (itemsize, ipaddr, 
+                                               port, mtu));
+}
+
+gr_udp_source::~gr_udp_source ()
+{
+  close();
+}
+
+bool
+gr_udp_source::open()
+{
+  omni_mutex_lock l(d_mutex);  // hold mutex for duration of this function
+   
+  // create socket
+  d_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+  if(d_socket == 0) {
+    perror("socket open");
+    throw std::runtime_error("can't open socket");
+  }
+
+  // Turn on reuse address
+  bool opt_val = true;
+  if(setsockopt(d_socket, SOL_SOCKET, SO_REUSEADDR, (void*)&opt_val, 
sizeof(int))) {
+    perror("SO_REUSEADDR");
+    throw std::runtime_error("can't set socket option SO_REUSEADDR");
+  }
+
+  // Don't wait when shutting down
+  linger lngr;
+  lngr.l_onoff  = 1;
+  lngr.l_linger = 0;
+  if(setsockopt(d_socket, SOL_SOCKET, SO_LINGER, (void*)&lngr, 
sizeof(linger))) {
+    perror("SO_LINGER");
+    throw std::runtime_error("can't set socket option SO_LINGER");
+  }
+
+  // Set a timeout on the receive function to not block indefinitely
+  // This value can (and probably should) be changed
+  timeval timeout;
+  timeout.tv_sec = 1;
+  timeout.tv_usec = 0;
+  if(setsockopt(d_socket, SOL_SOCKET, SO_RCVTIMEO, (void*)&timeout, 
sizeof(timeout))) {
+    perror("SO_RCVTIMEO");
+    throw std::runtime_error("can't set socket option SO_RCVTIMEO");
+  }
+
+  // bind socket to an address and port number to listen on
+  if(bind (d_socket, (sockaddr*)&d_sockaddr_local, sizeof(struct sockaddr))) {
+    perror("socket bind");
+    throw std::runtime_error("can't bind socket");
+  }
+  
+  d_updated = true;
+  return d_socket != 0;
+}
+
+void
+gr_udp_source::close()
+{
+  omni_mutex_lock l(d_mutex);  // hold mutex for duration of this function
+
+  if (d_socket){
+    shutdown(d_socket, SHUT_RDWR);
+    d_socket = 0;
+  }
+  d_updated = true;
+}
+
+int 
+gr_udp_source::work (int noutput_items,
+                    gr_vector_const_void_star &input_items,
+                    gr_vector_void_star &output_items)
+{
+  char *out = (char *) output_items[0];
+  socklen_t bytes_to_receive=0, bytes_received=0;
+  int bytes=0;
+
+  while((bytes_received < (unsigned)noutput_items) && (bytes>-1)) {
+    // caclulate the number of byte left if we can fit in all d_mtu bytes
+    bytes_to_receive = (bytes_received+d_mtu < noutput_items ? 
+                       d_mtu : noutput_items-bytes_received);
+    
+    // get the data into our output buffer and record the number of bytes
+    // This is a blocking call, but it's timeout has been set in the 
constructor
+    bytes = recv(d_socket, out, bytes_to_receive, 0);
+
+    if(bytes > 0) {
+      // keep track of the total number of bytes received
+      bytes_received += bytes;
+
+      // increment the pointer
+      out += bytes;
+    }
+  }
+
+  #if SRC_VERBOSE
+  printf("\nTotal Bytes Received: %d (noutput_items=%d)\n", bytes_received, 
noutput_items); 
+  #endif
+
+  return int(bytes_received / d_itemsize);
+}

Copied: gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.h (from rev 4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_udp_source.h)
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.h                     
        (rev 0)
+++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.h     2007-01-26 
19:24:06 UTC (rev 4293)
@@ -0,0 +1,92 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 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 2, 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.
+ */
+
+#ifndef INCLUDED_GR_UDP_SOURCE_H
+#define INCLUDED_GR_UDP_SOURCE_H
+
+#include <gr_sync_block.h>
+#include <omnithread.h>
+#include <sys/socket.h>
+#include <arpa/inet.h>
+
+class gr_udp_source;
+typedef boost::shared_ptr<gr_udp_source> gr_udp_source_sptr;
+
+gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char *ipaddr, 
+                                     unsigned short port, unsigned int 
mtu=540);
+
+class gr_udp_source : public gr_sync_block
+{
+  friend gr_udp_source_sptr gr_make_udp_source(size_t itemsize, const char 
*ipaddr, 
+                                              unsigned short port, unsigned 
int mtu);
+
+ private:
+  size_t       d_itemsize;
+  bool         d_updated;
+  omni_mutex   d_mutex;
+
+  unsigned int   d_mtu;           // maximum transmission unit (packet length)
+  int            d_socket;        // handle to socket
+  int            d_socket_rcv;    // handle to socket retuned in the accept 
call
+  struct in_addr d_ipaddr_local;  // store the local IP address to use
+  struct in_addr d_ipaddr_remote; // store the remote IP address that 
connected to us
+  unsigned short d_port_local;    // the port number to open for connections 
to this service
+  unsigned short d_port_remote;   // port number of the remove system
+  sockaddr_in    d_sockaddr_local;  // store the local sockaddr data 
(formatted IP address and port number)
+  sockaddr_in    d_sockaddr_remote; // store the remote sockaddr data 
(formatted IP address and port number)
+  
+ protected:
+  gr_udp_source(size_t itemsize, const char *ipaddr, unsigned short port, 
unsigned int mtu);
+
+ public:
+  ~gr_udp_source();
+
+  /*!
+   * \brief open a socket specified by the port and ip address info
+   *
+   * Opens a socket, binds to the address, and waits for a connection
+   * over UDP. If any of these fail, the fuction retuns the error and exits.
+   */
+  bool open();
+
+  /*!
+   * \brief Close current socket.
+   *
+   * Shuts down read/write on the socket
+   */
+  void close();
+
+  /*! \brief set the MTU of the socket */
+  void set_mtu(unsigned int mtu) { d_mtu = mtu; }
+
+  /*! \brief return the MTU of the socket */
+  unsigned int mtu() { return d_mtu; }
+
+  // should we export anything else?
+
+  int work(int noutput_items,
+          gr_vector_const_void_star &input_items,
+          gr_vector_void_star &output_items);
+};
+
+
+#endif /* INCLUDED_GR_UDP_SOURCE_H */

Copied: gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.i (from rev 4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-core/src/lib/io/gr_udp_source.i)
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.i                     
        (rev 0)
+++ gnuradio/trunk/gnuradio-core/src/lib/io/gr_udp_source.i     2007-01-26 
19:24:06 UTC (rev 4293)
@@ -0,0 +1,43 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 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 2, 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.
+ */
+
+GR_SWIG_BLOCK_MAGIC(gr,udp_source)
+
+gr_udp_source_sptr 
+gr_make_udp_source (size_t itemsize, const char *ipaddr, 
+                   unsigned short port, unsigned int mtu=540);
+
+class gr_udp_source : public gr_sync_block
+{
+ protected:
+  gr_udp_source (size_t itemsize, const char *ipaddr, 
+                unsigned short port, unsigned int mtu);
+
+ public:
+  ~gr_udp_source ();
+
+  bool open();
+  void close();
+  void set_mtu(unsigned int mtu) { d_mtu = mtu; }
+  unsigned int mtu() { return d_mtu; }
+
+};

Modified: gnuradio/trunk/gnuradio-core/src/lib/io/io.i
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/io/io.i        2007-01-25 03:47:24 UTC 
(rev 4292)
+++ gnuradio/trunk/gnuradio-core/src/lib/io/io.i        2007-01-26 19:24:06 UTC 
(rev 4293)
@@ -34,6 +34,8 @@
 #include <ppio.h>
 #include <gr_message_source.h>
 #include <gr_message_sink.h>
+#include <gr_udp_sink.cc>
+#include <gr_udp_source.cc>
 
 %}
 
@@ -49,4 +51,6 @@
 %include "ppio.i"
 %include "gr_message_source.i"
 %include "gr_message_sink.i"
+%include "gr_udp_sink.i"
+%include "gr_udp_source.i"
 

Copied: gnuradio/trunk/gnuradio-examples/python/hier/networking (from rev 4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-examples/python/hier/networking)

Deleted: 
gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_sink.py

Copied: 
gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_sink.py (from 
rev 4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-examples/python/hier/networking/dial_tone_sink.py)
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_sink.py   
                        (rev 0)
+++ gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_sink.py   
2007-01-26 19:24:06 UTC (rev 4293)
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+#
+# Copyright 2006 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 2, 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.
+# 
+
+from gnuradio import gr, audio
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+
+class dial_tone_sink(gr.hier_block2):
+    def __init__(self, local_ipaddress, port, mtu, sample_rate):
+        gr.hier_block2.__init__(self, 
+                                "dial_tone_sink",      # Block type 
+                                gr.io_signature(0,0,0), # Input signature
+                                gr.io_signature(0,0,0)) # Output signature
+
+
+        self.define_component("src",  gr.udp_source(gr.sizeof_float,
+                                                    local_ipaddress, port,
+                                                    mtu))
+        self.define_component("dst",  audio.sink(sample_rate))
+
+        self.connect("src", 0, "dst", 0)       
+        
+if __name__ == '__main__':
+    parser = OptionParser(option_class=eng_option)
+    parser.add_option("", "--local-ipaddr", type="string", default="127.0.0.1",
+                      help="local IP address")
+    parser.add_option("", "--local-port", type="int", default=65500,
+                      help="port value to listen to for connection")
+    parser.add_option("", "--mtu", type="int", default=540,
+                     help="packet size.")
+    parser.add_option("-r", "--sample-rate", type="int", default=8000,
+                      help="audio signal sample rate [default=%default]")
+    (options, args) = parser.parse_args()
+    if len(args) != 0:
+        parser.print_help()
+        raise SystemExit, 1
+
+    # Create an instance of a hierarchical block
+    top_block = dial_tone_sink(options.local_ipaddr, options.local_port,
+                               options.mtu, options.sample_rate)
+    
+    # Create an instance of a runtime, passing it the top block
+    runtime = gr.runtime(top_block)
+    
+    try:    
+        # Run forever
+        runtime.run()
+    except KeyboardInterrupt:
+        # Ctrl-C exits
+        pass
+    

Deleted: 
gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_source.py

Copied: 
gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_source.py 
(from rev 4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-examples/python/hier/networking/dial_tone_source.py)
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_source.py 
                        (rev 0)
+++ gnuradio/trunk/gnuradio-examples/python/hier/networking/dial_tone_source.py 
2007-01-26 19:24:06 UTC (rev 4293)
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+#
+# Copyright 2006 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 2, 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.
+# 
+
+from gnuradio import gr
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+
+class dial_tone_source(gr.hier_block2):
+    def __init__(self, local_ipaddress, remote_ipaddress, port, mtu, 
sample_rate):
+        gr.hier_block2.__init__(self, 
+                                "dial_tone_source",    # Block type 
+                                gr.io_signature(0,0,0), # Input signature
+                                gr.io_signature(0,0,0)) # Output signature
+
+        amplitude = 0.3
+        self.define_component("src0", gr.sig_source_f (sample_rate, 
gr.GR_SIN_WAVE,
+                                                       350, amplitude))
+        self.define_component("src1", gr.sig_source_f (sample_rate, 
gr.GR_SIN_WAVE,
+                                                       440, amplitude))
+        self.define_component("add", gr.add_ff())
+
+       self.define_component("thr", gr.throttle(gr.sizeof_float, sample_rate))
+       self.define_component("dst",  gr.udp_sink(gr.sizeof_float,
+                                                  local_ipaddress, 0,
+                                                  remote_ipaddress, port,
+                                                  mtu))
+        
+        self.connect("src0", 0, "add", 0)      
+        self.connect("src1", 0, "add", 1)
+       self.connect("add", 0, "thr", 0)
+       self.connect("thr", 0, "dst", 0)
+
+if __name__ == '__main__':
+    parser = OptionParser(option_class=eng_option)
+    parser.add_option("", "--local-ipaddr", type="string", default="127.0.0.1",
+                      help="local IP address")
+    parser.add_option("", "--remote-ipaddr", type="string", 
default="127.0.0.1",
+                      help="Remote IP address")
+    parser.add_option("", "--remote-port", type="int", default=65500,
+                      help="port value to connect to")
+    parser.add_option("", "--mtu", type="int", default=540,
+                     help="packet size.")
+    parser.add_option("-r", "--sample-rate", type="int", default=8000,
+                    help="audio signal sample rate [default=%default]")
+    (options, args) = parser.parse_args()
+    if len(args) != 0:
+        parser.print_help()
+        raise SystemExit, 1
+
+    # Create an instance of a hierarchical block
+    top_block = dial_tone_source(options.local_ipaddr, options.remote_ipaddr,
+                                 options.remote_port, options.mtu, 
options.sample_rate)
+    
+    # Create an instance of a runtime, passing it the top block
+    runtime = gr.runtime(top_block)
+    
+    try:    
+        # Run forever
+        runtime.run()
+    except KeyboardInterrupt:
+        # Ctrl-C exits
+        pass
+    

Deleted: gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_sink.py

Copied: gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_sink.py 
(from rev 4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-examples/python/hier/networking/vector_sink.py)
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_sink.py      
                        (rev 0)
+++ gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_sink.py      
2007-01-26 19:24:06 UTC (rev 4293)
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+#
+# Copyright 2006 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 2, 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.
+# 
+
+from gnuradio import gr
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+
+class vector_sink(gr.hier_block2):
+    def __init__(self, local_ipaddress, port, mtu):
+        gr.hier_block2.__init__(self, 
+                                "vector_sink",         # Block type 
+                                gr.io_signature(0,0,0), # Input signature
+                                gr.io_signature(0,0,0)) # Output signature
+
+        udp = gr.udp_source(gr.sizeof_char, local_ipaddress, port, mtu)
+        
+        self.define_component("src", udp)
+        self.define_component("dst", gr.file_sink(gr.sizeof_char, 
"received.dat"))
+
+        self.connect("src", 0, "dst", 0)       
+
+if __name__ == "__main__":
+    parser = OptionParser(option_class=eng_option)
+    parser.add_option("", "--local-ipaddr", type="string", default="127.0.0.1",
+                      help="local IP address")
+    parser.add_option("", "--local-port", type="int", default=65500,
+                      help="port value to listen to for connection")
+    parser.add_option("", "--mtu", type="int", default=540,
+                     help="packet size.")
+    (options, args) = parser.parse_args()
+    if len(args) != 0:
+        parser.print_help()
+        raise SystemExit, 1
+    
+    # Create an instance of a hierarchical block
+    top_block = vector_sink(options.local_ipaddr, options.local_port,
+                            options.mtu)
+    
+    # Create an instance of a runtime, passing it the top block
+    runtime = gr.runtime(top_block)
+    
+    try:    
+        # Run forever
+        runtime.run()
+    except KeyboardInterrupt:
+        # Ctrl-C exits
+        pass
+    

Deleted: 
gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_source.py

Copied: 
gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_source.py (from 
rev 4292, 
gnuradio/branches/developers/trondeau/ethernet/gnuradio-examples/python/hier/networking/vector_source.py)
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_source.py    
                        (rev 0)
+++ gnuradio/trunk/gnuradio-examples/python/hier/networking/vector_source.py    
2007-01-26 19:24:06 UTC (rev 4293)
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+#
+# Copyright 2006 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 2, 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.
+# 
+
+from gnuradio import gr
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+
+class vector_source(gr.hier_block2):
+    def __init__(self, local_ipaddress, remote_ipaddress, port, mtu):
+        gr.hier_block2.__init__(self, 
+                                "vector_source",       # Block type 
+                                gr.io_signature(0,0,0), # Input signature
+                                gr.io_signature(0,0,0)) # Output signature
+
+        data = [i*0.1 for i in range(1000)]
+        self.define_component("data", gr.vector_source_f(data, True))
+       self.define_component("thr", gr.throttle(gr.sizeof_float, 8000))
+
+        udp = gr.udp_sink(gr.sizeof_float, local_ipaddress, 0,
+                          remote_ipaddress, port, mtu)
+        self.define_component("dst",  udp)
+
+        self.connect("data", 0, "thr", 0)
+       self.connect("thr", 0, "dst", 0)
+
+if __name__ == '__main__':
+    parser = OptionParser(option_class=eng_option)
+    parser.add_option("", "--local-ipaddr", type="string", default="127.0.0.1",
+                      help="local IP address")
+    parser.add_option("", "--remote-ipaddr", type="string", 
default="127.0.0.1",
+                      help="Remote IP address")
+    parser.add_option("", "--remote-port", type="int", default=65500,
+                      help="port value to connect to")
+    parser.add_option("", "--mtu", type="int", default=540,
+                     help="packet size.")
+    (options, args) = parser.parse_args()
+    if len(args) != 0:
+        parser.print_help()
+        raise SystemExit, 1
+
+# Create an instance of a hierarchical block
+    top_block = vector_source(options.local_ipaddr, options.remote_ipaddr,
+                              options.remote_port, options.mtu)
+    
+    # Create an instance of a runtime, passing it the top block
+    runtime = gr.runtime(top_block)
+    
+    try:    
+        # Run forever
+        runtime.run()
+    except KeyboardInterrupt:
+        # Ctrl-C exits
+        pass
+    





reply via email to

[Prev in Thread] Current Thread [Next in Thread]