summaryrefslogtreecommitdiffstats
path: root/Mac
diff options
context:
space:
mode:
Diffstat (limited to 'Mac')
-rw-r--r--Mac/Lib/mactty.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/Mac/Lib/mactty.py b/Mac/Lib/mactty.py
new file mode 100644
index 0000000..e09a50c
--- /dev/null
+++ b/Mac/Lib/mactty.py
@@ -0,0 +1,74 @@
+#
+# mactty module - Use a terminal line as communications channel.
+#
+# Note that this module is not very complete or well-designed, but it
+# will have to serve until I have time to write something better. A unix
+# module with the same API is available too, contact me (jack@cwi.nl)
+# if you need it.
+#
+# Usage:
+# t = Tty(toolname)
+# t.raw() Set in raw/no-echo mode
+# t.baudrate(rate) Set baud rate
+# t.reset() Back to normal
+# t.read(len) Read up to 'len' bytes (but often reads less)
+# t.readall(len) Read 'len' bytes
+# t.timedread(len,tout) Read upto 'len' bytes, or until 'tout' seconds idle
+# t.getmode() Get parameters as a string
+# t.setmode(args) Set parameters
+#
+# Jack Jansen, CWI, January 1997
+#
+import ctb
+DEBUG=1
+
+class Tty:
+ def __init__(self, name=None):
+ self.connection = ctb.CMNew('Serial Tool', (10000, 10000, 0, 0, 0, 0))
+ #self.orig_data = self.connection.GetConfig()
+ #if name:
+ # self.connection.SetConfig(self.orig_data + ' Port "%s"'%name)
+ self.connection.Open(10)
+ sizes, status = self.connection.Status()
+
+ def getmode(self):
+ return self.connection.GetConfig()
+
+ def setmode(self, mode):
+ length = self.connection.SetConfig(mode)
+ if length != 0 and length != len(mode):
+ raise 'SetConfig Error', (mode[:length], mode[length:])
+
+ def raw(self):
+ pass
+
+ def baudrate(self, rate):
+ self.setmode(self.getmode()+' baud %d'%rate)
+
+ def reset(self):
+ self.setmode(self.orig_data)
+
+ def readall(self, length):
+ data = ''
+ while len(data) < length:
+ data = data + self.read(length-len(data))
+ return data
+
+ def timedread(self,length, timeout):
+ self.connection.Idle()
+ data, eom = self.connection.Read(length, ctb.cmData, timeout*10)
+ if DEBUG:
+ print 'Timedread(%d, %d)->%s'%(length, timeout, `data`)
+ return data
+
+ def read(self, length):
+ return self.timedread(length, 0x3fffffff)
+
+ def write(self, data):
+ if DEBUG:
+ print 'Write(%s)'%`data`
+ while data:
+ self.connection.Idle()
+ done = self.connection.Write(data, ctb.cmData, 0x3fffffff, 0)
+ self.connection.Idle()
+ data = data[done:]