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