commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] gnuradio-examples/python/networking .cvsignore ...


From: Eric Blossom
Subject: [Commit-gnuradio] gnuradio-examples/python/networking .cvsignore ...
Date: Thu, 22 Jun 2006 00:18:51 +0000

CVSROOT:        /sources/gnuradio
Module name:    gnuradio-examples
Changes by:     Eric Blossom <eb>       06/06/22 00:18:51

Added files:
        python/networking: .cvsignore measurement_slave.py 

Log message:
        work-in-progress

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnuradio-examples/python/networking/.cvsignore?cvsroot=gnuradio&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/gnuradio-examples/python/networking/measurement_slave.py?cvsroot=gnuradio&rev=1.1

Patches:
Index: .cvsignore
===================================================================
RCS file: .cvsignore
diff -N .cvsignore
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ .cvsignore  22 Jun 2006 00:18:51 -0000      1.1
@@ -0,0 +1,10 @@
+Makefile
+Makefile.in
+.la
+.lo
+.deps
+.libs
+*.la
+*.lo
+*.pyc
+*.pyo

Index: measurement_slave.py
===================================================================
RCS file: measurement_slave.py
diff -N measurement_slave.py
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ measurement_slave.py        22 Jun 2006 00:18:51 -0000      1.1
@@ -0,0 +1,154 @@
+#!/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., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+# 
+
+import struct
+import socket
+import asyncore
+import sys
+import optparse
+from gnuradio.eng_option import eng_option
+
+LOOP_TIMEOUT = 0.001
+BROADCAST_ADDR = '255.255.255.255'
+
+BROADCAST_PORT = 27010   # UDP
+CONTROL_PORT   = 27011   # TCP
+
+PKT_HEADER_SIZE = 4      # 32-bit int
+
+
+def unpack_header(s):
+    (len,) = struct.unpack('!i', s)
+    return (len,)
+
+def pack_header(len):
+    return struct.pack('!i', len)
+
+
+class listener(asyncore.dispatcher):
+    def __init__(self, port=CONTROL_PORT, verbose=False):
+        """
+        @param port: TCP port to listen on.
+        @type port: int
+        """
+        asyncore.dispatcher.__init__(self)
+
+        self._verbose = verbose
+
+        host = ''                       # symbolic name for localhost
+        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
+        self.set_reuse_addr()
+
+        try:
+            self.bind((host, port))
+        except socket.error, err:
+            sys.stderr.write('Failed to bind to %s: %s\n' %
+                             ((host, port), os.strerror (err.args[0]),))
+            sys.exit(1)
+
+        self.listen(3)
+        
+    def handle_accept(self):
+        socket, addr = self.accept()
+        print "handle_accept:", addr
+        if not(socket is None):
+            # instantiate a server
+            # FIXME check for multiple connects.
+            s = server(socket, addr, self._verbose)
+        
+
+class gr_dispatcher(asyncore.dispatcher):
+    def __init__(self, sock=None, map=None):
+        asyncore.dispatcher.__init__(self, sock=sock, map=map)
+
+    def read_packet(self):
+        """
+        Returns None or packet
+        """
+        s = self.recvall(PKT_HEADER_SIZE)
+        if s == '':
+            return None
+        
+        (payload_len,) = unpack_header(s)
+
+        payload_len = int(payload_len)
+        print "payload_len =", payload_len
+        
+        if payload_len == 0:
+            payload = ''
+        else:
+            payload = self.recvall(payload_len)
+            if len(payload) != payload_len:
+                sys.stderr.write ('short recv, expected %d bytes, got %d\n' % (
+                    payload_len, len(payload)))
+                raise RuntimeError, "short recv"
+
+        return payload
+
+    def recvall(self, buffer_size):
+        result = ''
+        while len(result) < buffer_size:
+            data = self.recv(buffer_size - len(result))
+            if not data:
+                return ''
+            result += data
+        return result
+
+
+class server(gr_dispatcher):
+    def __init__(self, socket, addr, verbose=False):
+        gr_dispatcher.__init__(self, sock=socket)
+        
+        self.verbose = verbose
+        self.setblocking(1)
+
+    def writable(self):
+        return False
+
+    def handle_read(self):
+        pkt = self.read_packet()
+        if pkt:
+            print "Control: %s\n" % (pkt,)
+
+    def handle_close(self):
+        self.close()
+
+
+def main():
+    parser = optparse.OptionParser (option_class=eng_option)
+    parser.add_option ('-v', '--verbose', action="store_true", default=False,
+                       help="enable verbose diagnostics")
+
+    (options, args) = parser.parse_args ()
+    if len(args) != 0:
+        parser.print_help()
+        sys.exit(1)
+
+    L = listener(CONTROL_PORT, verbose=options.verbose)
+    asyncore.loop(LOOP_TIMEOUT)
+
+
+if __name__ == '__main__':
+    try:
+        main()
+    except KeyboardInterrupt:
+        pass




reply via email to

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