Skip to content
This repository was archived by the owner on Nov 23, 2025. It is now read-only.

Commit 6d7b866

Browse files
committed
Adding a system for linking aliased analog and digital pins.
1 parent 12171a7 commit 6d7b866

File tree

4 files changed

+38
-20
lines changed

4 files changed

+38
-20
lines changed

CHANGES.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Version 0.4.0
1313
complexity.
1414
* Correcting a mistake in the arduino_nano device definition.
1515
This had 9x pins defined where only 8x exist on this device.
16+
* Redesigning the analog and digital pins to define aliases where
17+
they physically are the same pin.
1618

1719
Version 0.3.0
1820
-------------

tests/test_devices.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,7 @@
77

88

99
def test_get_compatible_pins(uos_device: UOSDevice):
10-
"""Checks the device function for returning lists of compatible pins.
11-
12-
:param uos_device:
13-
:return:
14-
"""
10+
"""Checks the device function for returning lists of compatible pins."""
1511
# Check lookup of digital / analog pins works.
1612
for function in (
1713
UOSFunctions.set_gpio_output,
@@ -35,3 +31,20 @@ def test_get_compatible_pins(uos_device: UOSDevice):
3531
uos_device.device.get_compatible_pins(
3632
UOSFunction(name="bad_function", address_lut={}, ack=False)
3733
)
34+
35+
36+
def test_pin_aliases(uos_device: UOSDevice):
37+
"""Makes sure all aliases are defined bidirectionally."""
38+
# Check digital pins have valid analog aliases and vice-versa.
39+
for pin_mapping in (
40+
(uos_device.device.digital_pins, uos_device.device.analog_pins),
41+
(uos_device.device.analog_pins, uos_device.device.digital_pins),
42+
):
43+
for pin_number in pin_mapping[0]:
44+
pin = pin_mapping[0][pin_number]
45+
if pin.alias is not None:
46+
assert isinstance(pin.alias, int)
47+
assert pin.alias in pin_mapping[1]
48+
alias = pin_mapping[1][pin.alias]
49+
assert alias.alias is not None
50+
assert alias.alias == pin_number

uoshardware/abstractions.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ class Pin:
240240
comp: dict = field(default_factory=dict)
241241
spi: dict = field(default_factory=dict)
242242
i2c: dict = field(default_factory=dict)
243+
alias: int | None = None
243244

244245

245246
@dataclass(frozen=True)
@@ -250,7 +251,7 @@ class Device:
250251
interfaces: list
251252
functions_enabled: dict
252253
digital_pins: dict = field(default_factory=dict)
253-
analogue_pins: dict = field(default_factory=dict)
254+
analog_pins: dict = field(default_factory=dict)
254255
aux_params: dict = field(default_factory=dict)
255256

256257
def get_compatible_pins(self, function: UOSFunction) -> dict:
@@ -267,7 +268,7 @@ def get_compatible_pins(self, function: UOSFunction) -> dict:
267268
requirements = function.pin_requirements
268269
if requirements is None: # pins are not relevant to this function
269270
return {}
270-
pin_dict = self.analogue_pins if "adc_in" in requirements else self.digital_pins
271+
pin_dict = self.analog_pins if "adc_in" in requirements else self.digital_pins
271272
return {
272273
pin_name: pin
273274
for pin_name, pin in pin_dict.items()

uoshardware/devices/_arduino.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,32 +74,34 @@
7474
pc_int=True,
7575
i2c={"type": "sck", "bus": 0},
7676
),
77-
14: Pin(gpio_out=True, gpio_in=True, pull_up=True, pc_int=True), # analog pin 0
78-
15: Pin(gpio_out=True, gpio_in=True, pull_up=True, pc_int=True), # analog pin 1
79-
16: Pin(gpio_out=True, gpio_in=True, pull_up=True, pc_int=True), # analog pin 2
80-
17: Pin(gpio_out=True, gpio_in=True, pull_up=True, pc_int=True), # analog pin 3
77+
14: Pin(gpio_out=True, gpio_in=True, pull_up=True, pc_int=True, alias=0),
78+
15: Pin(gpio_out=True, gpio_in=True, pull_up=True, pc_int=True, alias=1),
79+
16: Pin(gpio_out=True, gpio_in=True, pull_up=True, pc_int=True, alias=2),
80+
17: Pin(gpio_out=True, gpio_in=True, pull_up=True, pc_int=True, alias=3),
8181
18: Pin(
8282
gpio_out=True,
8383
gpio_in=True,
8484
pull_up=True,
8585
pc_int=True,
8686
i2c={"type": "sda", "bus": 0},
87-
), # analog pin 4
87+
alias=4,
88+
),
8889
19: Pin(
8990
gpio_out=True,
9091
gpio_in=True,
9192
pull_up=True,
9293
pc_int=True,
9394
i2c={"type": "scl", "bus": 0},
94-
), # analog pin 5
95+
alias=5,
96+
),
9597
},
96-
analogue_pins={
97-
0: Pin(adc_in=True),
98-
1: Pin(adc_in=True),
99-
2: Pin(adc_in=True),
100-
3: Pin(adc_in=True),
101-
4: Pin(adc_in=True),
102-
5: Pin(adc_in=True),
98+
analog_pins={
99+
0: Pin(adc_in=True, alias=14),
100+
1: Pin(adc_in=True, alias=15),
101+
2: Pin(adc_in=True, alias=16),
102+
3: Pin(adc_in=True, alias=17),
103+
4: Pin(adc_in=True, alias=18),
104+
5: Pin(adc_in=True, alias=19),
103105
6: Pin(adc_in=True),
104106
7: Pin(adc_in=True),
105107
},

0 commit comments

Comments
 (0)