392f8d7e51
Quote taken straight from the docstring of get_pin: >Cross-platform method to find a pin by string. > >The pin definitions are platform-dependent, but this provides >a way to say "I'm using pin D20" without rolling a D20 and >having to actually learn MicroPython/CircuitPython and the >differences in how they handle pinouts. > >This also makes the keymap sanity checker actually work for >CircuitPython boards, since it's not possible in CPY to >define a module stub for `board` that uses Passthrough >natively (which is how the MicroPython stub worked originally)
41 lines
1020 B
Python
41 lines
1020 B
Python
try:
|
|
import board
|
|
|
|
PLATFORM = 'CircuitPython'
|
|
PIN_SOURCE = board
|
|
except ImportError:
|
|
import machine
|
|
|
|
PLATFORM = 'MicroPython'
|
|
PIN_SOURCE = machine.Pin.board
|
|
except ImportError:
|
|
from kmk.common.types import Passthrough
|
|
|
|
PLATFORM = 'Unit Testing'
|
|
PIN_SOURCE = Passthrough()
|
|
|
|
|
|
def get_pin(pin):
|
|
'''
|
|
Cross-platform method to find a pin by string.
|
|
|
|
The pin definitions are platform-dependent, but this provides
|
|
a way to say "I'm using pin D20" without rolling a D20 and
|
|
having to actually learn MicroPython/CircuitPython and the
|
|
differences in how they handle pinouts.
|
|
|
|
This also makes the keymap sanity checker actually work for
|
|
CircuitPython boards, since it's not possible in CPY to
|
|
define a module stub for `board` that uses Passthrough
|
|
natively (which is how the MicroPython stub worked originally)
|
|
'''
|
|
return getattr(PIN_SOURCE, pin)
|
|
|
|
|
|
class PinLookup:
|
|
def __getattr__(self, attr):
|
|
return get_pin(attr)
|
|
|
|
|
|
Pin = PinLookup()
|