From 7793c786c38369943c2e0fd20ed559fc9af50061 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Fri, 8 Apr 2016 13:10:42 -0700 Subject: [PATCH] SetAveraging --- dump.py | 3 +++ ilt1000.py | 43 ++++++++++++++++++++++++++++++++----------- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/dump.py b/dump.py index 7fcb1ec..8fddcd0 100755 --- a/dump.py +++ b/dump.py @@ -23,6 +23,9 @@ def PrintLine(label, value, unit=''): ilt = ilt1000.ILT1000(device=FLAGS.device) +ilt.SetAveraging(ilt.AVERAGING_AUTO) + + LINES = [ ('Model', ilt.GetModelName, ''), ('Generation', ilt.GetGeneration, ''), diff --git a/ilt1000.py b/ilt1000.py index 4998795..74607a3 100755 --- a/ilt1000.py +++ b/ilt1000.py @@ -25,14 +25,14 @@ class Saturated(Error): pass +class CommandError(Error): + pass + + # TODO commands: # eraselogdata # getlogdata -# setautaveraging # setcurrentloop -# sethiaveraging -# setlowaveraging -# setmedaveraging # setsimpleirrcal # setuserdark # startlogdata @@ -61,6 +61,11 @@ class ILT1000(object): FEEDBACK_RES_MEDIUM = 2 FEEDBACK_RES_HIGH = 3 + AVERAGING_AUTO = 0 + AVERAGING_LOW = 1 # 5 ㎐ + AVERAGING_MEDIUM = 2 # 2 ㎐ + AVERAGING_HIGH = 3 # 0.5 ㎐ + # ILT1000 presents two FTDI serial devices, which become ttyUSB0 and ttyUSB1 # if nothing else is attached. ttyUSB0 seems to be completely non-responsive. # We default to ttyUSB1 @@ -68,7 +73,7 @@ class ILT1000(object): def __init__(self, device='/dev/ttyUSB1', set_time=True): self._dev = serial.Serial(device, baudrate=115200) self._Clear() - assert int(self._SendCommand('echooff')) == 0 + self._SendCommandOrDie('echooff') if set_time: self.SetDateTime() @@ -91,6 +96,11 @@ class ILT1000(object): raise Saturated(command) return ret + def _SendCommandOrDie(self, command): + ret = self._SendCommand(command) + if int(ret) != 0: + raise CommandError + def GetModelName(self): return self._SendCommand('getmodelname') @@ -109,7 +119,7 @@ class ILT1000(object): def SetAuxSerialNumber(self, serial): # SPEC ERROR # This is undocumented. - assert int(self._SendCommand('setauxserialno %s' % serial)) == 0 + self._SendCommandOrDie('setauxserialno %s' % serial) def GetControllerTempF(self): return int(self._SendCommand('gettemp')) @@ -127,8 +137,7 @@ class ILT1000(object): def SetDateTime(self, now=None): now = now or datetime.datetime.utcnow() timestr = now.strftime('%m/%d/%Y %H:%M:%S') - ret = self._SendCommand('setdatetime ' + timestr) - assert int(ret) == 0 + self._SendCommandOrDie('setdatetime ' + timestr) def GetSensorCurrent(self): # SPEC ERROR @@ -172,7 +181,7 @@ class ILT1000(object): } def SetDarkMode(self, mode): - assert int(self._SendCommand(self._DARK_MODE_COMMANDS[mode])) == 0 + self._SendCommandOrDie(self._DARK_MODE_COMMANDS[mode]) def GetFactoryDarkVoltages(self): # SPEC ERROR @@ -200,7 +209,7 @@ class ILT1000(object): # SPEC ERROR # Command returns -999 on my ILT1000-V02. Implementation below is untested # and likely wrong. - assert int(self._SendCommand('setclockfreq')) == 0 + self._SendCommandOrDie('setclockfreq') self._dev.write(b'A') time.sleep(60.0) self._dev.write(b'B') @@ -210,4 +219,16 @@ class ILT1000(object): return float(ret) * 100 def SetFeedbackResistor(self, resistor): - assert int(self._SendCommand('usefeedbackres %d' % resistor)) == 0 + self._SendCommandOrDie('usefeedbackres %d' % resistor) + + _AVERAGING_COMMANDS = { + AVERAGING_AUTO: 'setautaveraging', + AVERAGING_LOW: 'setlowaveraging', + AVERAGING_MEDIUM: 'setmedaveraging', + AVERAGING_HIGH: 'sethiaveraging', + } + + def SetAveraging(self, averaging): + # SPEC WARNING + # There does not appear to be a way to read this back. + self._SendCommandOrDie(self._AVERAGING_COMMANDS[averaging])