[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Commit-gnuradio] gnuradio-examples/python/networking .cvsignore ...,
Eric Blossom <=