diff -r 8becd52c2171 -r 1bbea188a7e5 prologix.py --- a/prologix.py Mon Feb 04 19:49:48 2008 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -""" -prologix -======== - -Module defining a communication object to talk to Prologix USB-GPIB controler. - -""" -import serial -import time - -import pygpib -from pygpib import ConnectionError - -GPIB_CONTROLLER = 1 -GPIB_DEVICE = 0 - -class GPIB(object): - _retries = 15 - def __init__(self, device="/dev/ttyUSB0", baudrate=115200, timeout=0.1, - address=0, mode=1): - """ - Create a new GPIB controller for the Prologix USB-GPIB device - located on serial device 'device'. - """ - self._cnx = serial.Serial(port=device, baudrate=baudrate, timeout=timeout) - self._timeout = timeout - - self.set_mode(mode) - self.set_address(address) - - def set_address(self, address): - """ - Set the address of the GPIB device: - - - if the device is the Controller In Charge, this is the - address of the device commands are sent to, - - - if the device is in GPIB_DEVICE mode, this is its address. - """ - self._set_cmd('addr', address) - self._adress = address - - def set_mode(self, mode): - """ - Set GPIB device mode to 'mode': - - - GPIB_CONTROLLER: set the device as the Controller In Charge - on the GPIB bus - - - GPIB_DEVICE: set the device as a standard GPIB device on the - bus. - """ - self._set_cmd('mode', mode) - self._mode = mode - - def set_controller(self): - """ - Set GPIB device the Controller In Charge on the GPIB bus. - """ - self.set_mode(1) - - def set_device(self): - """ - Set the GPIB device as a simple device on the GPIB bus. - """ - self.set_mode(0) - - def send_command(self, cmd): - """ - Send the specified GPIB command on the bus (must be the CIC), - and read the answer. - """ - assert self._mode == 1 - self._cnx.write(cmd+'\r') - time.sleep(self._timeout) # required? - ret = self._cnx.readlines() - return ''.join(ret) - - def check_srq(self): - """ - Check the SRQ line - """ - assert self._mode == 1, "must be the Controller In Charge" - self._cnx.write('++srq\r') - ret = self._cnx.readline().strip() - if ret: - return bool(int(ret)) - return None - - def poll(self): - """ - Poll every address, and return a dictionnary - {add: status, ...} - """ - assert self._mode == 1, "must be the Controller In Charge" - dico = {} - for add in range(31): - self._cnx.write('++spoll %d\r'%i) - ret = self._cnx.readline().strip() - if ret: - dico[i] = int(ret) - return dico - - def _read(self): - for i in range(self._retries): - rdata = self._cnx.readline() - if rdata.strip() != "": - break - time.sleep(self._timeout) - return rdata - - def _set_cmd(self, cmd, value): - self._cnx.write('++%s %d\r'%(cmd, value)) - self._cnx.write('++%s\r'%(cmd)) - rval = self._read().strip() - if not rval.isdigit() or int(rval) != value: - raise ConnectionError("Can't set GPIB %s to %s [ret=%s]"%(cmd, value, repr(rval)))