#print "Set %s=%s." % (name,adr);
class GoodFETbtser:
"""py-bluez class for emulating py-serial."""
- def __init__(self,watchaddr):
+ def __init__(self,btaddr):
import bluetooth;
- while watchaddr==None or watchaddr=="none":
+ while btaddr==None or btaddr=="none" or btaddr=="bluetooth":
print "performing inquiry..."
nearby_devices = bluetooth.discover_devices(lookup_names = True)
print "found %d devices" % len(nearby_devices)
for addr, name in nearby_devices:
print " %s - '%s'" % (addr, name)
if name=='FireFly-A6BD':
- watchaddr=addr;
- print "Identified GoodFET at %s" % watchaddr;
+ btaddr=addr;
+ print "Identified GoodFET at %s" % btaddr;
# BlueFET doesn't run the Service Discovery Protocol.
# Instead we manually use the portnumber.
port=1;
- print "Connecting to %s on port %i." % (watchaddr, port);
+ print "Connecting to %s on port %i." % (btaddr, port);
sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM);
self.sock=sock;
- sock.connect((watchaddr,port));
+ sock.connect((btaddr,port));
sock.settimeout(10); #IMPORTANT Must be patient.
+
+ ##This is what we'd do for a normal reset.
+ #str="";
+ #while not str.endswith("goodfet.sf.net/"):
+ # str=self.read(64);
+ # print str;
+
+ # Instead, just return and hope for the best.
+ return;
+
def write(self,msg):
"""Send traffic."""
+ import time;
+ time.sleep(0.1);
return self.sock.send(msg);
- def read(self,len):
+ def read(self,length):
"""Read traffic."""
- return self.sock.recv(len);
+ data="";
+ while len(data)<length:
+ data=data+self.sock.recv(length-len(data));
+ return data;
class GoodFET:
"""GoodFET Client Library"""
print "timeout\n";
def serInit(self, port=None, timeout=2, attemptlimit=None):
"""Open a serial port of some kind."""
- self.pyserInit(port,timeout,attemptlimit);
- #self.btInit(port,timeout,attemptlimit);
+ import re;
+
+ if port==None:
+ port=os.environ.get("GOODFET");
+ if port=="bluetooth" or (port is not None and re.match("..:..:..:..:..:..",port)):
+ self.btInit(port,timeout,attemptlimit);
+ else:
+ self.pyserInit(port,timeout,attemptlimit);
def btInit(self, port, timeout, attemptlimit):
"""Open a bluetooth port.""";
- self.verbose=True;
+ self.verbose=True; #For debugging BT.
self.serialport=GoodFETbtser(port);
+
def pyserInit(self, port, timeout, attemptlimit):
"""Open the serial port"""
# Make timeout None to wait forever, 0 for non-blocking mode.
+(ord(self.serialport.read(1))<<8)
);
- #if self.verbose:
- #print "Rx: ( 0x%02x, 0x%02x, 0x%04x )" % ( self.app, self.verb, self.count )
+ if self.verbose:
+ print "Rx: ( 0x%02x, 0x%02x, 0x%04x )" % ( self.app, self.verb, self.count )
#Debugging string; print, but wait.
if self.app==0xFF: