]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/nova/pin.py
Add support for digitalio pins
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / nova / pin.py
1 class Pin:
2     """A basic Pin class for use with Binho Nova."""
3
4     IN = 'DIN'
5     OUT = 'DOUT'
6     AIN = 'AIN'
7     AOUT = 'AOUT'
8     PWM = 'PWM'
9     LOW = 0
10     HIGH = 1
11
12     _nova = None
13
14     def __init__(self, pin_id=None):
15         if not Pin._nova:
16             from binhoHostAdapter import binhoHostAdapter
17             from binhoHostAdapter import binhoUtilities
18
19             utilities = binhoUtilities.binhoUtilities()
20             devices = utilities.listAvailableDevices()
21
22             if len(devices) > 0:
23                 Pin._nova = binhoHostAdapter.binhoHostAdapter(devices[0])
24         # check if pin is valid
25         if pin_id > 4:
26             raise ValueError("Invalid pin {}.".format(pin_id))
27
28         self.id = pin_id
29
30     def init(self, mode=IN, pull=None):
31         if self.id is None:
32             raise RuntimeError("Can not init a None type pin.")
33         # Nova does't have configurable internal pulls for 
34         if pull:
35             raise ValueError("Internal pull up/down not currently supported.")
36         Pin._nova.setIOpinMode(self.id, mode)
37
38     def value(self, val=None):
39         if self.id is None:
40             raise RuntimeError("Can not access a None type pin.")
41         # read
42         if val is None:
43             return int(Pin._nova.getIOpinValue(self.id).split('VALUE ')[1])
44         # write
45         elif val in (self.LOW, self.HIGH):
46             Pin._nova.setIOpinValue(self.id, val)
47         else:
48             raise RuntimeError("Invalid value for pin")
49
50 # create pin instances for each pin
51 IO0 = Pin(0)
52 IO1 = Pin(1)
53 IO2 = Pin(2)
54 IO3 = Pin(3)
55 IO4 = Pin(4)