frappy_psi.drums: changes after test
when trying with Marcel, we needed these fixes
This commit is contained in:
parent
907a52ccdb
commit
7e2ccd214e
@ -56,7 +56,7 @@ class Drums(Writable):
|
|||||||
self._pos = 0
|
self._pos = 0
|
||||||
for i, action in enumerate(self.pattern[self._pos:]):
|
for i, action in enumerate(self.pattern[self._pos:]):
|
||||||
upper = action.upper()
|
upper = action.upper()
|
||||||
relais = self.actions.get(action.upper())
|
relais = self.actions.get(upper)
|
||||||
if relais:
|
if relais:
|
||||||
relais.write_target(upper == action) # True when capital letter
|
relais.write_target(upper == action) # True when capital letter
|
||||||
else:
|
else:
|
||||||
|
@ -18,16 +18,39 @@
|
|||||||
# Jael Celia Lorenzana <jael-celia.lorenzana@psi.ch>
|
# Jael Celia Lorenzana <jael-celia.lorenzana@psi.ch>
|
||||||
# *****************************************************************************
|
# *****************************************************************************
|
||||||
|
|
||||||
|
import os
|
||||||
|
from glob import glob
|
||||||
from frappy.core import Readable, Writable, Parameter, BoolType, StringType,\
|
from frappy.core import Readable, Writable, Parameter, BoolType, StringType,\
|
||||||
FloatRange, Property, TupleOf, ERROR, IDLE
|
FloatRange, Property, TupleOf, ERROR, IDLE
|
||||||
|
from frappy.errors import ConfigError
|
||||||
from math import log
|
from math import log
|
||||||
|
|
||||||
|
basepaths = '/sys/class/ionopimax', '/sys/class/ionopi'
|
||||||
|
|
||||||
|
|
||||||
class Base:
|
class Base:
|
||||||
addr = Property('address', StringType())
|
addr = Property('address', StringType())
|
||||||
|
_devpath = None
|
||||||
|
devclass = None
|
||||||
|
|
||||||
|
def initModule(self):
|
||||||
|
super().initModule()
|
||||||
|
# candidates = glob(f'/sys/class/iono*/*/{self.addr}')
|
||||||
|
# if not candidates:
|
||||||
|
# raise ConfigError(f'can not find path for {self.addr}')
|
||||||
|
for basepath in basepaths:
|
||||||
|
for devclass in ([self.devclass] if isinstance(self.devclass, str) else self.devclass):
|
||||||
|
devpath = f'{basepath}/{devclass}'
|
||||||
|
if os.path.exists(devpath):
|
||||||
|
self._devpath = devpath
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
self.log.info('%s does not exist', devpath)
|
||||||
|
else:
|
||||||
|
raise ConfigError(f'device path for {self.devclass} not found {devpath}')
|
||||||
|
|
||||||
def read(self, addr, scale=None):
|
def read(self, addr, scale=None):
|
||||||
with open(f'/sys/class/ionopimax/{self.devclass}/{addr}') as f:
|
with open(f'{self._devpath}/{addr}') as f:
|
||||||
result = f.read()
|
result = f.read()
|
||||||
if scale:
|
if scale:
|
||||||
return float(result) / scale
|
return float(result) / scale
|
||||||
@ -35,7 +58,7 @@ class Base:
|
|||||||
|
|
||||||
def write(self, addr, value, scale=None):
|
def write(self, addr, value, scale=None):
|
||||||
value = str(round(value * scale)) if scale else str(value)
|
value = str(round(value * scale)) if scale else str(value)
|
||||||
with open(f'/sys/class/ionopimax/{self.devclass}/{addr}', 'w') as f:
|
with open(f'{self._devpath}/{addr}', 'w') as f:
|
||||||
f.write(value)
|
f.write(value)
|
||||||
|
|
||||||
|
|
||||||
@ -49,7 +72,7 @@ class DigitalInput(Base, Readable):
|
|||||||
|
|
||||||
class DigitalOutput(DigitalInput, Writable):
|
class DigitalOutput(DigitalInput, Writable):
|
||||||
target = Parameter('output state', BoolType(), readonly=False)
|
target = Parameter('output state', BoolType(), readonly=False)
|
||||||
devclass = 'digital_out'
|
devclass = 'digital_out', 'relay'
|
||||||
|
|
||||||
def write_target(self, value):
|
def write_target(self, value):
|
||||||
self.write(self.addr, value, 1)
|
self.write(self.addr, value, 1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user