+"""FT232H pin names"""
+
+
class Pin:
"""A basic Pin class for use with FT232H."""
# setup GPIO controller if not done yet
# use one provided by I2C as default
if not Pin.ft232h_gpio:
+ # pylint: disable=import-outside-toplevel
from pyftdi.i2c import I2cController
+
+ # pylint: enable=import-outside-toplevel
+
i2c = I2cController()
i2c.configure("ftdi://ftdi:ft232h/1")
Pin.ft232h_gpio = i2c.get_gpio()
self.id = pin_id
def init(self, mode=IN, pull=None):
+ """Initialize the Pin"""
if not self.id:
raise RuntimeError("Can not init a None type pin.")
# FT232H does't have configurable internal pulls?
Pin.ft232h_gpio.set_direction(pin_mask, current)
def value(self, val=None):
+ """Set or return the Pin Value"""
if not self.id:
raise RuntimeError("Can not access a None type pin.")
current = Pin.ft232h_gpio.read(with_output=True)
if val is None:
return 1 if current & 1 << self.id != 0 else 0
# write
- elif val in (self.LOW, self.HIGH):
+ if val in (self.LOW, self.HIGH):
if val == self.HIGH:
current |= 1 << self.id
else:
current &= ~(1 << self.id)
# must mask out any input pins
Pin.ft232h_gpio.write(current & Pin.ft232h_gpio.direction)
+ return None
# release the kraken
- else:
- raise RuntimeError("Invalid value for pin")
+ raise RuntimeError("Invalid value for pin")
+
# create pin instances for each pin
# D0 to D3 are used by I2C/SPI