summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTC Wan2011-05-04 15:19:07 +0800
committerTC Wan2011-05-04 15:19:07 +0800
commit667197864959c669690dedd4de835328a5560201 (patch)
tree8c1d197df0582286b52c587352b71457cd07d64e
parente88dfbc47fc0a05d34368755a35ef27b4c11d89d (diff)
more testing code
Testing code for testing pyfantom read() and write(). read() must be provided with number of bytes to read argument which does not exceed the actual buffer contents size. Otherwise an Exception would be thrown.
-rw-r--r--nxt-python-fantom/nxt/fantomglue.py34
-rw-r--r--nxt-python-fantom/nxt/usbsock.py10
2 files changed, 27 insertions, 17 deletions
diff --git a/nxt-python-fantom/nxt/fantomglue.py b/nxt-python-fantom/nxt/fantomglue.py
index 1fd8792..359427d 100644
--- a/nxt-python-fantom/nxt/fantomglue.py
+++ b/nxt-python-fantom/nxt/fantomglue.py
@@ -42,6 +42,13 @@ class BluetoothSocket:
self._sock = _sock
self._proto = proto
+ def __str__(self):
+ return 'FantomGlue BT (%s)' % self.device_name()
+
+ def device_name(self):
+ devinfo = self._sock.get_device_info()
+ return devinfo.name
+
def connect(self, addrport):
addr, port = addrport
if self._sock is None:
@@ -72,9 +79,6 @@ def find_devices(lookup_names=False): # parameter is ignored
#addr = d.get_resource_string()
#print "NXT addr: ", addr
nxt = d.get_nxt()
- # BUG?: If nxt.get_firware_version() is enabled, d.get_nxt() will throw an exception
- # Related to Reference Counting for Obj-C Objects?
- #print " firmware version:", nxt.get_firmware_version()
devicelist.append(nxt)
return devicelist
@@ -101,6 +105,9 @@ class USBSocket:
self._sock = device
self.debug = False
+ def __str__(self):
+ return 'FantomGlue USB (%s)' % self.device_name()
+
def device_name(self):
devinfo = self._sock.get_device_info()
return devinfo.name
@@ -129,11 +136,6 @@ if __name__ == '__main__':
#get_info = False
get_info = True
write_read = True
- #for i in pyfantom.NXTIterator(False):
- # Enable Bluetooth Interface
- #for i in pyfantom.NXTIterator(True):
- #devices = find_devices()
- #for i in devices:
for i in find_devices():
if get_info:
print " firmware version:", i.get_firmware_version()
@@ -141,14 +143,14 @@ if __name__ == '__main__':
rs = i.get_resource_string()
print " resource string:", rs
if write_read:
- nxt = i
+ nxt = USBSocket(i)
import struct
# Write VERSION SYS_CMD.
# Query:
# SYS_CMD: 0x01
# VERSION: 0x88
cmd = struct.pack('2B', 0x01, 0x88)
- r = nxt.write(cmd)
+ r = nxt.send(cmd)
print "wrote", r
# Response:
# REPLY_CMD: 0x02
@@ -158,12 +160,18 @@ if __name__ == '__main__':
# PROTOCOL_VERSION major
# FIRMWARE_VERSION minor
# FIRMWARE_VERSION major
- rep = nxt.read(7)
+ #rep = nxt.recv(USB_BUFSIZE) # Doesn't work if it exceeds buffer content length (exception)
+ #rep = nxt.recv(7) # Works, since reply is 7 bytes
+ rep = nxt.recv(5) # Works, read length < remaining buffer content length
+ print "read", struct.unpack('%dB' % len(rep), rep)
+ rep = nxt.recv(2) # Works, read length <= remaining buffer content length
print "read", struct.unpack('%dB' % len(rep), rep)
+ #rep = nxt.recv(1) # Doesn't work if it exceeds buffer content length (exception)
# Same thing, without response.
#cmd = struct.pack('2B', 0x81, 0x88)
- #r = nxt.write(cmd)
+ #r = nxt.send(cmd)
#print "wrote", r
- #rep = nxt.read(7)
+ #rep = nxt.recv(USB_BUFSIZE)
+ #rep = nxt.recv(7)
#print "read", struct.unpack('%dB' % len(rep), rep)
del nxt
diff --git a/nxt-python-fantom/nxt/usbsock.py b/nxt-python-fantom/nxt/usbsock.py
index 1573bf8..70af774 100644
--- a/nxt-python-fantom/nxt/usbsock.py
+++ b/nxt-python-fantom/nxt/usbsock.py
@@ -57,7 +57,7 @@ class USBSock(object):
def recv(self):
'Use to recieve raw data over USB connection ***ADVANCED USERS ONLY***'
- data = self.sock.recv(USB_BUFSIZE)
+ data = self.sock.recv(USB_BUFSIZE) # FIXME: This will cause an exception since we cannot read more than the actual buffer contents
if self.debug:
print 'Recv:',
print ':'.join('%02x' % (c & 0xFF) for c in data)
@@ -83,6 +83,7 @@ if __name__ == '__main__':
write_read = True
socks = find_bricks()
for s in socks:
+ print s.sock
brick = s.connect()
if write_read:
import struct
@@ -92,7 +93,8 @@ if __name__ == '__main__':
# VERSION: 0x88
cmd = struct.pack('2B', 0x01, 0x88)
#brick.sock.send(cmd)
- s.send(cmd)
+ #s.send(cmd)
+ s.sock.send(cmd)
print "wrote", len(cmd)
# Response:
# REPLY_CMD: 0x02
@@ -103,7 +105,8 @@ if __name__ == '__main__':
# FIRMWARE_VERSION minor
# FIRMWARE_VERSION major
#rep = brick.sock.recv()
- rep = s.recv()
+ #rep = s.recv()
+ rep = s.sock.recv(7)
print "read", struct.unpack('%dB' % len(rep), rep)
# Same thing, without response.
#cmd = struct.pack('2B', 0x81, 0x88)
@@ -113,4 +116,3 @@ if __name__ == '__main__':
#print "read", struct.unpack('%dB' % len(rep), rep)
del brick
- \ No newline at end of file