70 lines
2.2 KiB
Python
70 lines
2.2 KiB
Python
from frappy.core import StringType, BoolType, Parameter, Property, PersistentParam, Command, IDLE, ERROR, WARN, Writable
|
|
import time
|
|
|
|
class RheoTrigger(Writable):
|
|
addr = Property('Port address', StringType())
|
|
value = Parameter('Output state', BoolType(), default=0)
|
|
target = Parameter('target', BoolType(), default=0, readonly=False)
|
|
status = Parameter()
|
|
doBeep = Property('Make noise', BoolType(), default=0)
|
|
|
|
_status = 0
|
|
|
|
def initModule(self):
|
|
super().initModule()
|
|
with open('/sys/class/ionopimax/digital_io/'+self.addr+'_mode', 'w') as f :
|
|
f.write('out')
|
|
|
|
if self.doBeep:
|
|
with open('/sys/class/ionopimax/buzzer/beep', 'w') as f :
|
|
f.write('200 50 3')
|
|
|
|
def read_value(self):
|
|
with open('/sys/class/ionopimax/digital_io/'+self.addr, 'r') as f :
|
|
file_value = f.read()
|
|
if file_value == '0\n':
|
|
value = False
|
|
self._status = 0
|
|
elif file_value == '1\n':
|
|
value = True
|
|
self._status = 1
|
|
else:
|
|
self._status = -1
|
|
value = False
|
|
return value
|
|
|
|
|
|
def write_target(self,target):
|
|
if target == self.value:
|
|
return target
|
|
else:
|
|
with open('/sys/class/ionopimax/digital_io/'+self.addr, 'w') as f :
|
|
if target == True:
|
|
f.write('1')
|
|
elif target == False:
|
|
f.write('0')
|
|
time.sleep(0.05)
|
|
if self.doBeep:
|
|
with open('/sys/class/ionopimax/buzzer/beep', 'w') as f :
|
|
f.write('200')
|
|
self.status = self.read_status()
|
|
return target
|
|
|
|
def read_status(self):
|
|
self.value = self.read_value()
|
|
if self._status == 0:
|
|
return IDLE, 'Signal low'
|
|
elif self._status == 1:
|
|
return IDLE, 'Signal high'
|
|
else:
|
|
return ERROR, 'Cannot read status'
|
|
|
|
|
|
@Command
|
|
def toggle(self):
|
|
"""Toggle output"""
|
|
value = self.read_value()
|
|
if value == True:
|
|
self.write_target(False)
|
|
else:
|
|
self.write_target(True) |