diff --git a/lib/python/labcomm/LabComm.py b/lib/python/labcomm/LabComm.py index 2a66397bd46e82ace847832ee6c8870ebf8167d6..6fa3ca8e50ff8abfe3a7c19f22360e6d2894a30e 100644 --- a/lib/python/labcomm/LabComm.py +++ b/lib/python/labcomm/LabComm.py @@ -93,6 +93,7 @@ # sequences of 7 bit chunks, represented in bytes with the high bit meaning # that more data is to come. +import types import struct as packer VERSION = "LabComm2013" @@ -316,18 +317,26 @@ class array(object): encoder.encode_packed32(i) encoder.encode_type_number(self.decl) - def min_max_shape(self, l, depth=0, shape=[]): - if isinstance(l, list): + def min_max_shape(self, l, depth, shape): + if isinstance(l, types.StringTypes): + return shape + try: length = len(l) if len(shape) <= depth: shape.append((length, length)) + pass else: (low, high) = shape[depth] low = min(low, length) high = max(high, length) shape[depth] = (low, high) + pass for e in l: shape = self.min_max_shape(e, depth + 1, shape) + pass + pass + except TypeError: + pass return shape def shape(self, l): @@ -356,7 +365,8 @@ class array(object): return depth def encode_value(self, encoder, value, depth): - if depth and isinstance(value, list): + # if depth and isinstance(value, list): + if depth: for e in value: self.encode_value(encoder, e, depth - 1) else: @@ -585,7 +595,7 @@ class Encoder(Codec): self.pack("!b", 0) def encode_byte(self, v): - self.pack("!b", v) + self.pack("!B", v) def encode_short(self, v): self.pack("!h", v) @@ -669,7 +679,7 @@ class Decoder(Codec): return self.unpack("!b") != 0 def decode_byte(self): - return self.unpack("!b") + return self.unpack("!B") def decode_short(self): return self.unpack("!h") diff --git a/test/test_encoder_decoder.py b/test/test_encoder_decoder.py index acd08e5e4e15f9ccf8b517b606fd17360474861e..3818ab45a990ae13b34b119d153b114fca3c083a 100755 --- a/test/test_encoder_decoder.py +++ b/test/test_encoder_decoder.py @@ -59,7 +59,7 @@ def generate(decl): return [False, True] elif decl.__class__ == labcomm.BYTE: - return [-128, 0, 127] + return [0, 127, 128, 255] elif decl.__class__ == labcomm.SHORT: return [-32768, 0, 32767]