From ee54694a8d4e39b8d5e085acd5d377a5ffe19349 Mon Sep 17 00:00:00 2001 From: Tat-Chee Wan (USM) Date: Tue, 15 Mar 2011 10:19:03 +0800 Subject: added support for blocking libusb, ignore some errors for usb send LibUSB 0.12.x on Linux blocks on receive(). Ignore No Errors for send(). --- Host/nxt-gdb-server.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/Host/nxt-gdb-server.py b/Host/nxt-gdb-server.py index c2af26d..8c02ca8 100755 --- a/Host/nxt-gdb-server.py +++ b/Host/nxt-gdb-server.py @@ -27,6 +27,9 @@ SELECT_TIMEOUT = 0.1 DEBUG = True NXT_RECV_ERR = -1 +# Libusb 0.12.x blocks on USB reads +LIBUSB_RECEIVE_BLOCKING = True + class NXTGDBServer: # Socket read size. @@ -132,21 +135,33 @@ class NXTGDBServer: assert c is client # Data from client, read it and forward it to NXT brick. data = client.recv (self.recv_size) + data = data.strip() if data: if DEBUG: - print "[GDB->NXT] %s" % data + print "[GDB->NXT] %s\n" % data segments = self.segment (data) + data = '' for s in segments: - brick.sock.send (s) + try: + brick.sock.send (s) + except usb.USBError as e: + # Some pyusb are buggy, ignore some "errors". + if e.args != ('No error', ): + raise e + if LIBUSB_RECEIVE_BLOCKING: + data = self.reassemble (brick.sock) else: client.close () client = None + if not LIBUSB_RECEIVE_BLOCKING: + data = self.reassemble (brick.sock) + # Is there something from NXT brick? - data = self.reassemble (brick.sock) if data: if DEBUG: - print "[NXT->GDB] %s" % data - client.send (data) + print "[NXT->GDB] %s\n" % data + if client: + client.send (data) data = '' print "Connection closed, waiting for GDB connection on port %s..." % self.port -- cgit v1.2.3 From eb9d23d6647c07f897a6f6df1f9fb41a43ae45cd Mon Sep 17 00:00:00 2001 From: Tat-Chee Wan (USM) Date: Tue, 15 Mar 2011 10:22:29 +0800 Subject: fix scoping error for data variable --- Host/nxt-gdb-server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Host/nxt-gdb-server.py b/Host/nxt-gdb-server.py index 8c02ca8..1f6ef76 100755 --- a/Host/nxt-gdb-server.py +++ b/Host/nxt-gdb-server.py @@ -128,6 +128,7 @@ class NXTGDBServer: print "Client from", addr # Work loop, wait for a message from client socket or NXT brick. while client is not None: + data = '' # Wait for a message from client or timeout. rlist, wlist, xlist = select.select ([ client ], [ ], [ ], SELECT_TIMEOUT) -- cgit v1.2.3 From 7606be8238c1e81a42c7cf0718c9d882802d31ed Mon Sep 17 00:00:00 2001 From: Tat-Chee Wan (USM) Date: Tue, 15 Mar 2011 10:25:52 +0800 Subject: dont add newline to debug message --- Host/nxt-gdb-server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Host/nxt-gdb-server.py b/Host/nxt-gdb-server.py index 1f6ef76..6563dc9 100755 --- a/Host/nxt-gdb-server.py +++ b/Host/nxt-gdb-server.py @@ -139,7 +139,7 @@ class NXTGDBServer: data = data.strip() if data: if DEBUG: - print "[GDB->NXT] %s\n" % data + print "[GDB->NXT] %s" % data segments = self.segment (data) data = '' for s in segments: @@ -160,7 +160,7 @@ class NXTGDBServer: # Is there something from NXT brick? if data: if DEBUG: - print "[NXT->GDB] %s\n" % data + print "[NXT->GDB] %s" % data if client: client.send (data) data = '' -- cgit v1.2.3 From 7c7337f0019ca5554145ad5aadf8be7994e4f8b3 Mon Sep 17 00:00:00 2001 From: Tat-Chee Wan (USM) Date: Tue, 15 Mar 2011 13:00:02 +0800 Subject: specify 4-byte alignment explicitly to avoid assembler issue --- Debugger/debug_stub.S | 1 + 1 file changed, 1 insertion(+) diff --git a/Debugger/debug_stub.S b/Debugger/debug_stub.S index b020a09..29e7814 100644 --- a/Debugger/debug_stub.S +++ b/Debugger/debug_stub.S @@ -191,6 +191,7 @@ debug_cmdIndexTable: * On entry: * R0: Input Message Parameter Buffer address pointer (points to contents after '$' and '') */ +.align 4 debug_cmdJumpTable: .word _dbg__cmd_GetAllRegs /* 'g' */ .word _dbg__cmd_SetAllRegs /* 'G' */ -- cgit v1.2.3