implemented DOUT
This commit is contained in:
@@ -79,6 +79,10 @@ class Client:
|
||||
|
||||
def get_callsign(self, name:str, type:str = None) -> int:
|
||||
""" Find unit by name and type """
|
||||
|
||||
if name not in self.unit_lu:
|
||||
raise Exception("No %s unit called \"%s\"" % (type or '*', name))
|
||||
|
||||
u = self.unit_lu[name]
|
||||
|
||||
if type is not None:
|
||||
|
||||
@@ -8,6 +8,7 @@ from gex.Client import Client
|
||||
|
||||
# import all the units
|
||||
from gex.units.Pin import Pin
|
||||
from gex.units.DOut import DOut
|
||||
|
||||
|
||||
# General, low level
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
import gex
|
||||
|
||||
class DOut(gex.Unit):
|
||||
"""
|
||||
Digital output port.
|
||||
Pins are represented by bits of a control word, right-aligned.
|
||||
|
||||
For example, if pins C6, C5 and C0 are selected for the unit,
|
||||
calling the "set" function with a word 0b111 will set all three to 1,
|
||||
0b100 will set only C6.
|
||||
"""
|
||||
|
||||
def _type(self):
|
||||
return 'DO'
|
||||
|
||||
def write(self, pins:int):
|
||||
""" Set pins to a value """
|
||||
pb = gex.PayloadBuilder()
|
||||
pb.u16(pins)
|
||||
self.send(0x00, pb.close())
|
||||
|
||||
def set(self, pins:int):
|
||||
""" Set pins high """
|
||||
pb = gex.PayloadBuilder()
|
||||
pb.u16(pins)
|
||||
self.send(0x01, pb.close())
|
||||
|
||||
def clear(self, pins:int):
|
||||
""" Set pins low """
|
||||
pb = gex.PayloadBuilder()
|
||||
pb.u16(pins)
|
||||
self.send(0x02, pb.close())
|
||||
|
||||
def toggle(self, pins:int):
|
||||
""" Toggle pins """
|
||||
pb = gex.PayloadBuilder()
|
||||
pb.u16(pins)
|
||||
self.send(0x03, pb.close())
|
||||
@@ -14,9 +14,24 @@ if False:
|
||||
|
||||
client.bulk_write(gex.MSG_INI_WRITE, buf)
|
||||
|
||||
if True:
|
||||
if False:
|
||||
led = gex.Pin(client, 'LED')
|
||||
|
||||
for i in range(0,10):
|
||||
led.toggle()
|
||||
time.sleep(.1)
|
||||
|
||||
if True:
|
||||
leds = gex.DOut(client, 'TST')
|
||||
|
||||
for i in range(0,0x41):
|
||||
leds.write(i&0x3F)
|
||||
time.sleep(.1)
|
||||
|
||||
if False:
|
||||
leds = gex.DOut(client, 'TST')
|
||||
|
||||
for i in range(0, 0x41):
|
||||
#leds.write(i & 0x3F)
|
||||
leds.toggle(0xFF)
|
||||
time.sleep(.1)
|
||||
Reference in New Issue
Block a user