implemented DOUT

doublebuf
Ondřej Hruška 7 years ago
parent 94ae9a3608
commit 02e368abce
Signed by: MightyPork
GPG Key ID: 2C5FD5035250423D
  1. 4
      gex/Client.py
  2. 1
      gex/__init__.py
  3. 38
      gex/units/DOut.py
  4. 17
      main.py

@ -79,6 +79,10 @@ class Client:
def get_callsign(self, name:str, type:str = None) -> int: def get_callsign(self, name:str, type:str = None) -> int:
""" Find unit by name and type """ """ 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] u = self.unit_lu[name]
if type is not None: if type is not None:

@ -8,6 +8,7 @@ from gex.Client import Client
# import all the units # import all the units
from gex.units.Pin import Pin from gex.units.Pin import Pin
from gex.units.DOut import DOut
# General, low level # 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) client.bulk_write(gex.MSG_INI_WRITE, buf)
if True: if False:
led = gex.Pin(client, 'LED') led = gex.Pin(client, 'LED')
for i in range(0,10): for i in range(0,10):
led.toggle() led.toggle()
time.sleep(.1) 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)
Loading…
Cancel
Save