diff rsib.py @ 71:00800345fbae default tip

Python3ise RSIB code
author Daniel O'Connor <doconnor@gsoft.com.au>
date Thu, 24 Aug 2023 16:52:10 +0930
parents 91b476ebc0f2
children
line wrap: on
line diff
--- a/rsib.py	Mon Aug 30 12:40:43 2021 +0930
+++ b/rsib.py	Thu Aug 24 16:52:10 2023 +0930
@@ -77,7 +77,6 @@
 MSG_CMD = 0x90     # Command to the instrument
 MSG_SRQ = 0x91	   # Query SRQ
 
-import exceptions
 import socket
 
 class RSIBDevice(object):
@@ -93,12 +92,12 @@
         s1 = socket.socket()
         s1.settimeout(5)
         s1.connect((self.host, self.port))
-        s1.send('\x00\x00\x00\x40')
-        rx = ''
+        s1.send(b'\x00\x00\x00\x40')
+        rx = b''
         while len(rx) < 8:
             rx = rx + s1.recv(8)
-            if rx == '':
-                raise exceptions.IOError("EOF from device")
+            if rx == b'':
+                raise IOError("EOF from device")
 
         s2 = socket.socket()
         s2.settimeout(5)
@@ -114,11 +113,11 @@
         self.s1.settimeout(timeout)
 
         if len(cmd) > 0x99:
-            raise exceptions.ValueError("Command too long")
+            raise ValueError("Command too long")
         
         # Pre-increment for easy comparison in read
         self.tag = (self.tag + 1) & 0xff
-        msg = '\x00\x00\x00' + chr(len(cmd)) + '\x90\x00' + chr(self.tag) + cmd
+        msg = b'\x00\x00\x00' + bytes([len(cmd)]) + b'\x90\x00' + bytes([self.tag]) + cmd.encode('ascii')
         self.s1.send(msg)
         
     def read(self, timeout = 0.5):
@@ -127,67 +126,67 @@
         self.s1.settimeout(timeout)
         
         # Fetch the header
-        rx = ''
+        rx = b''
         while len(rx) < 7:
             rx = self.s1.recv(7)
-            if rx == '':
-                raise exceptions.IOError("EOF from device")
+            if rx == b'':
+                raise IOError("EOF from device")
         
-        if self.tag != ord(rx[6]):
-            raise exceptions.IOError("Reply out of order, got 0x%02x expected 0x%02x" % (ord(rx[6]), self.tag))
+        if self.tag != rx[6]:
+            raise IOError("Reply out of order, got 0x%02x expected 0x%02x" % (ord(rx[6]), self.tag))
 
-        rxlen = ord(rx[0]) << 24 | ord(rx[1]) << 16 | ord(rx[2]) << 8 | ord(rx[3])
-        #print "Msg ID 0x%02x" % (ord(rx[4]))
-        if False and ord(rx[4]) != MSG_CMDREP:
-            raise exceptions.IOError("Unexpected Msg ID 0x%02x" % (ord(rx[4])))
+        rxlen = rx[0] << 24 | rx[1] << 16 | rx[2] << 8 | rx[3]
+        #print "Msg ID 0x%02x" % (rx[4])
+        if False and rx[4] != MSG_CMDREP:
+            raise IOError("Unexpected Msg ID 0x%02x" % (rx[4]))
         
-        if ord(rx[5]) != 0:
-            print("Mystery byte %d != 0" % (ord(rx[5])))
+        if rx[5] != 0:
+            print("Mystery byte %d != 0" % (rx[5]))
         # Fetch the actual reply now we know the length
-        reply = ''
+        reply = b''
         while len(reply) < rxlen:
             rx = self.s1.recv(rxlen)
-            if rx == '':
-                raise exceptions.IOError("EOF from device")
+            if rx == b'':
+                raise IOError("EOF from device")
             reply += rx
             
         return(reply)
 
     def queryrsb(self):
-        msg = '\x00\x00\x00\x00\xd1\x18\x00'
+        msg = b'\x00\x00\x00\x00\xd1\x18\x00'
         self.s2.send(msg)
         
-        reply = ''
+        reply = b''
         while len(reply) < 7:
             rx = self.s2.recv(7)
-            if rx == '':
-                raise exceptions.IOError("EOF from device")
+            if rx == b'':
+                raise IOError("EOF from device")
             reply += rx
 
         # '\x00\x00\x00\x00\x80\x04\x01' => STB = 4
-        if rx[4] != '\x80':
-            raise exceptions.IOError("Incorrect Msg ID in response to STB query")
+        if rx[4] != b'\x80':
+            raise IOError("Incorrect Msg ID in response to STB query")
         
-        return ord(rx[5])
+        return rx[5]
 
     def waitsrq(self):
-        msg = '\x00\x00\x00\x00\xb1\x00\x00'
+        msg = b'\x00\x00\x00\x00\xb1\x00\x00'
         
     def testsrq(self):
-        msg = '\x00\x00\x00\x00\x91\x00\x00'
+        msg = b'\x00\x00\x00\x00\x91\x00\x00'
         self.s2.send(msg)
-        reply = ''
+        reply = b''
         while len(reply) < 7:
             rx = self.s2.recv(7)
-            if rx == '':
-                raise exceptions.IOError("EOF from device")
+            if rx == b'':
+                raise IOError("EOF from device")
             reply += rx
             
         # 00 00 00 00 80 14 08 - SRQ = 0
         # 00 00 00 00 a0 64 07 - SRQ = 1
-        if rx == '\x00\x00\x00\x00\x80\x14\x08':
+        if rx == b'\x00\x00\x00\x00\x80\x14\x08':
             return False
-        elif rx == '\x00\x00\x00\x00\xa0\x64\x07':
+        elif rx == b'\x00\x00\x00\x00\xa0\x64\x07':
             return True
         else:
-            raise exceptions.IOError("Unknown SRQ byte sequence - " + str(list(map(ord, rx))))
+            raise IOError("Unknown SRQ byte sequence - " + str(rx))