Skip to content

Commit

Permalink
Merge pull request acq4#33 from davoudian/LED-xkeys
Browse files Browse the repository at this point in the history
Led xkeys
  • Loading branch information
campagnola committed Mar 24, 2017
2 parents b54a597 + 27ec97f commit 0806d13
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 6 deletions.
4 changes: 3 additions & 1 deletion acq4/devices/LEDLightSource/LEDLightSource.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def __init__(self, dm, config, name):
dev.sigHoldingChanged.connect(self._mkcb(dev))

conf['active'] = bool(dev.getChanHolding(chan))
self._sources[name] = conf
self.addSource(name, conf)
self._channelsByName[name] = (dev, chan)
self._channelNames[(dev, chan)] = name

Expand All @@ -30,7 +30,9 @@ def _channelStateChanged(self, dev, channel, value):
if self._sources[name]['active'] != state:
self._sources[name]['active'] = state
self.sigLightChanged.emit(self, name)
self._updateXkeyLight(name)

def setSourceActive(self, name, active):
dev, chan = self._channelsByName[name]
dev.setChanHolding(chan, float(active))

35 changes: 34 additions & 1 deletion acq4/devices/LightSource/LightSource.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,16 @@ def __init__(self, dm, config, name):
Device.__init__(self, dm, config, name)
self._sources = OrderedDict() # [name: {'active': bool, 'wavelength': float, 'power': float, ...}, ...]
self._lock = Mutex.Mutex()
self._xkeysDevs = []

def addSource(self, name, conf):
self._sources[name] = conf
if 'xkey' in conf:
devname, row, col = self._sources[name]['xkey']
dev = self.dm.getDevice(devname)
if dev not in self._xkeysDevs:
dev.sigStateChanged.connect(self._xkeyStateChanged)
self._xkeysDevs.append(dev)

def describe(self, onlyActive=True):
"""Return a description of the current state of all active light sources.
Expand All @@ -34,9 +44,32 @@ def activeSources(self):
def sourceActive(self, name):
"""Return True if the named light source is currently active.
"""
return self.sources[name]['active']
return self._sources[name]['active']

def setSourceActive(self, name, active):
"""Activate / deactivate a light source.
"""
raise NotImplementedError()

def _updateXkeyLight(self, name):
if 'xkey' in self._sources[name]:
devname, row, col = self._sources[name]['xkey']
dev = self.dm.getDevice(devname)
bl = dev.getBacklights()
bl[row,col] = int(self._sources[name]['active'])
dev.setBacklights(bl)

def _xkeyStateChanged(self, dev, changes):
keych = changes.get('keys')
if keych is None:
return
for pos, state in keych:
if state is False:
continue
for name, source in self._sources.items():
if source.get('xkey')[1:] == pos:
self.setSourceActive(name, not self.sourceActive(name))




4 changes: 1 addition & 3 deletions acq4/modules/DataManager/DataManagerModule.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
from acq4.Manager import logMsg, logExc
from acq4.util.StatusBar import StatusBar



class Window(QtGui.QMainWindow):

sigClosed = QtCore.Signal()
Expand Down Expand Up @@ -250,7 +248,7 @@ def newFolder(self):
self.ui.fileTreeWidget.refresh(parent) ## fileTreeWidget waits a while before updating; force it to refresh immediately.
self.ui.fileTreeWidget.select(nd)
##self.ui.fileInfo.setCurrentFile(nd)

logMsg("Created new folder: %s" %nd.name(relativeTo=self.baseDir), msgType='status', importance=7)
self.manager.setCurrentDir(nd)

Expand Down
3 changes: 2 additions & 1 deletion acq4/modules/MultiPatch/multipatch.py
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,8 @@ def updateXKeysBacklight(self):
if self.xkdev is None:
return
sel = self.selectedPipettes()
bl = np.zeros(self.xkdev.keyshape + (2,), dtype='ubyte')
# bl = np.zeros(self.xkdev.keyshape + (2,), dtype='ubyte')
bl = self.xkdev.getBacklights()
for i, ctrl in enumerate(self.pipCtrls):
pip = ctrl.pip
bl[0, i+4, 0] = 1 if ctrl.selected() else 0
Expand Down

0 comments on commit 0806d13

Please sign in to comment.