#!/usr//bin/env python # vim: ts=8 sts=4 sw=4 expandtab # Author: Douglas Clowes (dcl@ansto.gov.au) 2012-06-29 from twisted.internet import reactor from twisted.python import log from twisted.internet.task import LoopingCall import argparse import random import re import os import sys import time import inspect from galilfactory import GalilFactory import curses sys.path.insert(0, os.path.realpath(os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]),"../../util")))) from displayscreen import Screen def device_iterator(): now = time.time() def display_iterator(): global screen, devices try: rows, cols = screen.stdscr.getmaxyx() col = 0 for idx in sorted(devices.keys()): line = 0; col += 1 screen.stdscr.addstr(line, 13 * (col - 1), idx) for mtr in sorted(devices[idx].motors.keys()): line += 1 screen.stdscr.addstr(line, 13 * (col - 1), "%1s:%8.3f" % (mtr, devices[idx].motors[mtr].getPosition())) if (devices[idx].motors[mtr].motorState == "OFF"): screen.stdscr.addstr(line, 13 * (col - 1) + 10, " ") else: screen.stdscr.addstr(line, 13 * (col - 1) + 10, "*") except: raise finally: try: screen.stdscr.refresh() except: pass class MyScreen(Screen): def __init__(self, stdscr): Screen.__init__(self, stdscr) def sendLine(self, txt): global devices dev, cmd = line.split(":") print "Dev:", dev, "Cmd:", cmd if dev in devices: myDev = devices[dev] myDev.protocol = self myDev.dataReceived(cmd) def write(self, txt): try: newLine = self.lines[-1] + " => " + txt del self.lines[-1] self.addLine(newLine) except: pass def main(**kwargs): global screen, devices parser = argparse.ArgumentParser( description="Generates fake Galil controllers for testing SICS" ) parser.add_argument("instrument", help="The instrument name") args = parser.parse_args() basePort = { 'echidna': 62034, 'wombat': 62134, 'kowari': 62230, 'dingo': 62300, 'quokka': 62430, 'platypus': 62530, 'pelican': 62630, 'taipan': 62730, 'lyrebird': 62830, 'kookaburra': 62930, 'bilby': 63030, 'emu': 63130 } #log.startLogging(sys.stdout) log.startLogging(open(("/tmp/Fake_Galil_%d.log" % basePort[args.instrument]), "w")) devices = {} for dev in range(0, 6): port = basePort[args.instrument] + dev controllerName = "mc%d" % (dev + 1) factory = GalilFactory(port) devices[controllerName] = factory.device reactor.listenTCP(port, factory) stdscr = curses.initscr() screen = MyScreen(stdscr) reactor.addReader(screen) #lc = LoopingCall(device_iterator) #lc.start(0.5) dc = LoopingCall(display_iterator) dc.start(0.5) reactor.run() if __name__ == '__main__': main()