summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@ultra10.(none)>2009-03-14 07:37:37 -0400
committerroot <root@ultra10.(none)>2009-03-14 07:37:37 -0400
commit866d5ed1bfb2540570f791e269fd97ba0b9f2d11 (patch)
treeb48be56f137b9e87d29e42d366efe5b78a0ce45d
parent34c950c4df410da18c3d6ffb16a9e8de975dae3d (diff)
downloadpython-sbus-master.tar.gz
python-sbus-master.tar.xz
python-sbus-master.zip
Fix some bugs and add more debugging outputHEADmaster
-rw-r--r--lssbus.py50
1 files changed, 26 insertions, 24 deletions
diff --git a/lssbus.py b/lssbus.py
index d148e1e..f2bba44 100644
--- a/lssbus.py
+++ b/lssbus.py
@@ -48,15 +48,25 @@ MAX_VAL = 4096-128-4
#
#openpromio = OpenPromIO()
+from decorator import decorator
+
+@decorator
+def trace(f, *args, **kw):
+ r = None
+ try:
+ r = f(*args, **kw)
+ finally:
+ print "%s(%s, %s) = %s" % (f.func_name, str(args[1:])[1:-2], kw, r)
+ return r
+
class OpenProm(object):
dev = '/dev/openprom'
- current_node = None
-
def __init__(self):
self.promfd = open(self.dev)
+ @trace
def get_sibling(self, node):
"""
static int prom_getsibling(int node)
@@ -72,28 +82,18 @@ class OpenProm(object):
}
"""
if node == -1:
+ print "Invalid sibling requested"
return 0
- # trying the struct method...
- #args = struct.pack('Is', sizeof(c_int), '')
- #args = struct.pack('Is', sizeof(c_int), buffer(c_int(node))[:])
- #args = struct.pack('Is', sizeof(c_int), struct.pack('I', 0))
-
- # lets try the ctypes Structure method
- #openpromio.oprom_size = sizeof(c_int)
- #openpromio.oprom_array = pointer(c_int(0))
- #args = buffer(openpromio)[:]
-
- args = struct.pack('II', 4, node)
- #print "ioctl(%r, %r, %r)" % (self.promfd, OPROMNEXT, args)
+ args = struct.pack('II', sizeof(c_int), node)
+ print "ioctl(%r, %s, %r)" % (self.promfd, 'OPROMNEXT', args)
result = fcntl.ioctl(self.promfd, OPROMNEXT, args)
oprom_size, oprom_array = struct.unpack('II', result)
assert oprom_size == 4
assert oprom_array
- print "oprom_array = ", oprom_array
- self.current_node = oprom_array
return oprom_array
+ @trace
def get_property(self, prop):
"""
static char *prom_getproperty(char *prop, int *lenp)
@@ -107,29 +107,28 @@ class OpenProm(object):
return op->oprom_array;
}
"""
- print "get_property(%s)" % prop
args = struct.pack('I%ds' % len(prop), MAX_VAL, prop)
- #print "ioctl(%r, %r, %r)" % (self.promfd, OPROMGETPROP, args)
+ print "ioctl(%r, %s, %r)" % (self.promfd, 'OPROMGETPROP', args)
results = fcntl.ioctl(self.promfd, OPROMGETPROP, args)
+ print "results = %r" % results
oprom_size, oprom_array = struct.unpack('I%ds' % len(prop), results)
- #print "oprom_size =", oprom_size
- print "oprom_array =", oprom_array
return oprom_size, oprom_array
+ @trace
def get_child(self, node):
- print "get_child(%s)" % node
if node in (None, -1):
+ print "Invalid child requested"
return None
args = struct.pack('II', sizeof(c_int), node)
- print "ioctl(%r, %r, %r)" % (self.promfd, OPROMCHILD, args)
+ print "ioctl(%r, %s, %r)" % (self.promfd, 'OPROMCHILD', args)
results = fcntl.ioctl(self.promfd, OPROMCHILD, args)
oprom_size, oprom_array = struct.unpack('II', results)
print "oprom_size =", oprom_size
print "oprom_array =", oprom_array
- self.current_node = oprom_array
return oprom_array
+ @trace
def walk(self, node, sbus, ebus, probe_class, devlist):
nsbus = sbus
nebus = ebus
@@ -144,6 +143,8 @@ class OpenProm(object):
sense = -1
size, prop = self.get_property('device_type')
+ print "size = %r, prop = %r" % (size, prop)
+
if size <= 0:
prop = None
@@ -158,7 +159,7 @@ class OpenProm(object):
# umm, do we need to do this??
# while ((*prop >= 'A' && *prop <= 'Z') || *prop == ',') prop++;
if not sbus:
- print "no sbus"
+ print "no sbus; skipping..."
size, prop = self.get_property('device_type')
break
if prop == 'hme':
@@ -495,6 +496,7 @@ class LsBus(object):
print "No prom_root_node found!"
return devlist
+ print "Walking root_node: %r" % prom_root_node
devlist = prom.walk(prom_root_node, 0, 0, probe_class, devlist)
return devlist