]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/pico_u2if/pin.py
Merge pull request #452 from twa127/master
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / pico_u2if / pin.py
1 """PICO pin names"""
2 from .pico_u2if import pico_u2if
3
4
5 class Pin:
6     """A basic Pin class for use with MCP2221."""
7
8     # pin modes
9     IN = 0
10     OUT = 1
11     # pin values
12     LOW = 0
13     HIGH = 1
14     # pin pulls
15     PULL_NONE = 0
16     PULL_UP = 1
17     PULL_DOWN = 2
18
19     def __init__(self, pin_id=None):
20         self.id = pin_id
21         self._mode = None
22         self._pull = None
23
24     def init(self, mode=IN, pull=PULL_NONE):
25         """Initialize the Pin"""
26         pull = Pin.PULL_NONE if pull is None else pull
27         if self.id is None:
28             raise RuntimeError("Can not init a None type pin.")
29         if mode not in (Pin.IN, Pin.OUT):
30             raise ValueError("Incorrect mode value.")
31         if pull not in (Pin.PULL_NONE, Pin.PULL_UP, Pin.PULL_DOWN):
32             raise ValueError("Incorrect pull value.")
33
34         pico_u2if.gpio_init_pin(self.id, mode, pull)
35
36         self._mode = mode
37         self._pull = pull
38
39     def value(self, val=None):
40         """Set or return the Pin Value"""
41         # Digital In / Out
42         if self._mode in (Pin.IN, Pin.OUT):
43             # digital read
44             if val is None:
45                 return pico_u2if.gpio_get_pin(self.id)
46             # digital write
47             if val in (Pin.LOW, Pin.HIGH):
48                 pico_u2if.gpio_set_pin(self.id, val)
49                 return None
50             # nope
51             raise ValueError("Invalid value for pin.")
52
53         raise RuntimeError(
54             "No action for mode {} with value {}".format(self._mode, val)
55         )
56
57
58 # create pin instances for each pin
59 GP0 = Pin(0)
60 GP1 = Pin(1)
61 GP2 = Pin(2)
62 GP3 = Pin(3)
63 GP4 = Pin(4)
64 GP5 = Pin(5)
65 GP6 = Pin(6)
66 GP7 = Pin(7)
67 GP8 = Pin(8)
68 GP9 = Pin(9)
69 GP10 = Pin(10)
70 GP11 = Pin(11)
71 GP12 = Pin(12)
72 GP13 = Pin(13)
73 GP14 = Pin(14)
74 GP15 = Pin(15)
75 GP16 = Pin(16)
76 GP17 = Pin(17)
77 GP18 = Pin(18)
78 GP19 = Pin(19)
79 GP20 = Pin(20)
80 GP21 = Pin(21)
81 GP22 = Pin(22)
82 GP26 = Pin(26)
83 GP27 = Pin(27)
84 GP28 = Pin(28)