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