summaryrefslogtreecommitdiff
path: root/AT91SAM7S256
diff options
context:
space:
mode:
authorTat-Chee Wan (USM)2011-03-15 13:01:10 +0800
committerTat-Chee Wan (USM)2011-03-15 13:01:10 +0800
commit00cfbb071f76c34c06d4cf343ba3452d67c6aa64 (patch)
tree3f3581f924925a53bc6dba3856c81612dedb162b /AT91SAM7S256
parent5ec6b212c148b98996eba98b4d3ce42ff9ec44fc (diff)
parent7c7337f0019ca5554145ad5aadf8be7994e4f8b3 (diff)
Merge branch 'master' of ssh://svc.cs.usm.my/~/gitrepo-bare/armdebug
Diffstat (limited to 'AT91SAM7S256')
-rw-r--r--AT91SAM7S256/armdebug/Debugger/debug_stub.S1
-rwxr-xr-xAT91SAM7S256/armdebug/Host/nxt-gdb-server.py22
2 files changed, 20 insertions, 3 deletions
diff --git a/AT91SAM7S256/armdebug/Debugger/debug_stub.S b/AT91SAM7S256/armdebug/Debugger/debug_stub.S
index b020a09..29e7814 100644
--- a/AT91SAM7S256/armdebug/Debugger/debug_stub.S
+++ b/AT91SAM7S256/armdebug/Debugger/debug_stub.S
@@ -191,6 +191,7 @@ debug_cmdIndexTable:
* On entry:
* R0: Input Message Parameter Buffer address pointer (points to contents after '$' and '<cmdchar>')
*/
+.align 4
debug_cmdJumpTable:
.word _dbg__cmd_GetAllRegs /* 'g' */
.word _dbg__cmd_SetAllRegs /* 'G' */
diff --git a/AT91SAM7S256/armdebug/Host/nxt-gdb-server.py b/AT91SAM7S256/armdebug/Host/nxt-gdb-server.py
index c2af26d..6563dc9 100755
--- a/AT91SAM7S256/armdebug/Host/nxt-gdb-server.py
+++ b/AT91SAM7S256/armdebug/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.
@@ -125,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)
@@ -132,21 +136,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
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)
+ if client:
+ client.send (data)
data = ''
print "Connection closed, waiting for GDB connection on port %s..." % self.port