diff --git a/examples/simple/run.sh b/examples/simple/run.sh index 24521ab2a0c60f89b845a3a8b789b8e524aefe64..fc3239ca3c4e30c9f0030f0bec73635a8ee63e39 100644 --- a/examples/simple/run.sh +++ b/examples/simple/run.sh @@ -11,7 +11,7 @@ java -cp .:../../lib/java:gen Encoder encoded_data java -cp .:../../lib/java:gen Decoder encoded_data echo "running python decoder (from wiki_example):" -PYTHONPATH=../../lib/python ../wiki_example/example_decoder.py encoded_data +PYTHONPATH=../../lib/python ../wiki_example/example_decoder.py encoded_data LabComm2013 echo echo "*******************************************************" @@ -23,3 +23,6 @@ java -cp .:../../lib/java:gen06 Encoder06 encoded_data06 ./example_decoder06 encoded_data06 ./example_encoder06 encoded_data06 java -cp .:../../lib/java:gen06 Decoder06 encoded_data06 + +echo "running python decoder (from wiki_example):" +PYTHONPATH=../../lib/python ../wiki_example/example_decoder.py encoded_data06 LabComm2006 diff --git a/examples/wiki_example/example_decoder.py b/examples/wiki_example/example_decoder.py index d729145300388c3a7a005bbfc6acc741669c2ac6..8a0ba7b81c1bebdd2fb291ebff51a713fcaac719 100755 --- a/examples/wiki_example/example_decoder.py +++ b/examples/wiki_example/example_decoder.py @@ -4,12 +4,13 @@ import labcomm import sys if __name__ == "__main__": - d = labcomm.Decoder(labcomm.StreamReader(open(sys.argv[1]))) + d = labcomm.Decoder(labcomm.StreamReader(open(sys.argv[1])), sys.argv[2]) while True: try: data,decl = d.decode() if data: print data - except: + except Exception, e: + print e break diff --git a/examples/wiki_example/run b/examples/wiki_example/run index 90331819ce0ffd1e32e3eed5943b60af5c808a08..62c288e6ef6a93d89f511bcd8727ecb70aaea4c1 100755 --- a/examples/wiki_example/run +++ b/examples/wiki_example/run @@ -21,4 +21,4 @@ javac -cp ../../lib/java:. *.java # Run through all executables (c->java->Python) ./example_encoder one two java -cp ../../lib/java:. example_decoder_encoder example.encoded example.javaencoded -PYTHONPATH=../../lib/python ./example_decoder.py example.javaencoded +PYTHONPATH=../../lib/python ./example_decoder.py example.javaencoded LabComm2013 diff --git a/lib/python/labcomm/LabComm.py b/lib/python/labcomm/LabComm.py index 6fa3ca8e50ff8abfe3a7c19f22360e6d2894a30e..4be9f8b9193610b9cb86a75256ae4cee636ea9a3 100644 --- a/lib/python/labcomm/LabComm.py +++ b/lib/python/labcomm/LabComm.py @@ -96,7 +96,14 @@ import types import struct as packer -VERSION = "LabComm2013" +#VERSION = "LabComm2013" + +# Version testing +def sendVersionString(version): + return version == "LabComm2013" + +def usePacked32(version): + return version == "LabComm2013" i_TYPEDEF = 0x01 i_SAMPLE = 0x02 @@ -546,10 +553,11 @@ class Codec(object): class Encoder(Codec): - def __init__(self, writer): + def __init__(self, writer, version): super(Encoder, self).__init__() self.writer = writer - self.writer.start(self, VERSION) + self.versoin = version + self.writer.start(self, self.version) def pack(self, format, *args): self.writer.write(packer.pack(format, *args)) @@ -575,14 +583,21 @@ class Encoder(Codec): decl.encode_decl(self) def encode_packed32(self, v): - v = v & 0xffffffff - tmp = [ v & 0x7f ] - v = v >> 7 - while v: - tmp.append(v & 0x7f | 0x80) + #if usePacked32(self.version) : + if self.version == "LabComm2013" : + v = v & 0xffffffff + tmp = [ v & 0x7f ] v = v >> 7 - for c in reversed(tmp): - self.encode_byte(c) + while v: + tmp.append(v & 0x7f | 0x80) + v = v >> 7 + for c in reversed(tmp): + self.encode_byte(c) + elif self.version == "LabComm2006" : + v = v & 0xffffffff + self.encode_int(v) + else : + raise Exception("Unsupported labcomm version %s" % self.version) def encode_type(self, index): self.encode_packed32(index) @@ -619,10 +634,11 @@ class Encoder(Codec): # self.pack("!i%ds" % len(s), len(s), s) class Decoder(Codec): - def __init__(self, reader): + def __init__(self, reader, version): super(Decoder, self).__init__() self.reader = reader - self.reader.start(self, VERSION) + self.version = version + self.reader.start(self, version) def unpack(self, format): size = packer.calcsize(format) @@ -664,13 +680,18 @@ class Decoder(Codec): return result def decode_packed32(self): - result = 0 - while True: - tmp = self.decode_byte() - result = (result << 7) | (tmp & 0x7f) - if (tmp & 0x80) == 0: - break - return result + if self.version == "LabComm2013" : + result = 0 + while True: + tmp = self.decode_byte() + result = (result << 7) | (tmp & 0x7f) + if (tmp & 0x80) == 0: + break + return result + elif self.version == "LabComm2006" : + return self.decode_int() + else : + raise Exception("Unsupported labcomm version %s" % self.version) def decode_type_number(self): return self.decode_packed32() diff --git a/lib/python/labcomm/StreamReader.py b/lib/python/labcomm/StreamReader.py index 08c97abe045a69ec93d4f0ff06212a121180d344..b20983ad214f8005b0a995ddff1dce112b13870d 100644 --- a/lib/python/labcomm/StreamReader.py +++ b/lib/python/labcomm/StreamReader.py @@ -1,3 +1,5 @@ +import labcomm + class StreamReader: def __init__(self, stream): @@ -5,10 +7,13 @@ class StreamReader: pass def start(self, decoder, version): - other_version = decoder.decode_string() - if version != other_version: - raise Exception("LabComm version mismatch %s != %s" % - (version, other_version)) + self.version = version; + if labcomm.LabComm.sendVersionString(version): + other_version = decoder.decode_string() + if version != other_version: + raise Exception("LabComm version mismatch %s != %s" % + (version, other_version)) + pass pass def read(self, count): diff --git a/lib/python/labcomm/StreamWriter.py b/lib/python/labcomm/StreamWriter.py index ae57c96d2b6290efe29e65b411474328f992c17e..759f56e8d9d7fb059da316329b54e3d0574ee349 100644 --- a/lib/python/labcomm/StreamWriter.py +++ b/lib/python/labcomm/StreamWriter.py @@ -1,3 +1,5 @@ +import labcomm + class StreamWriter: def __init__(self, stream): @@ -5,8 +7,11 @@ class StreamWriter: pass def start(self, encoder, version): - encoder.encode_string(version) - pass + self.version = version; + + if labcomm.LabComm.sendVersionString(version): + encoder.encode_string(version) + pass def write(self, data): self.stream.write(data)