From 1b5e7677a0762d5c720338deea2f7902992cbaa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Valenti=C4=87?= Date: Thu, 10 Sep 2026 15:26:31 +0200 Subject: [PATCH 1/2] JayD hardware revision: reworked Pins class --- ports/esp32/boards/CM_JayD/mpconfigboard.h | 2 +- ports/esp32/libraries/JayD/MatrixMap.py | 2 +- ports/esp32/libraries/JayD/Nuvoton.py | 6 +- ports/esp32/libraries/JayD/Pins.py | 117 +++++++++++++++------ ports/esp32/libraries/JayD/__init__.py | 38 ++++--- 5 files changed, 114 insertions(+), 51 deletions(-) diff --git a/ports/esp32/boards/CM_JayD/mpconfigboard.h b/ports/esp32/boards/CM_JayD/mpconfigboard.h index d3206357bb9..f98a1ce4f40 100644 --- a/ports/esp32/boards/CM_JayD/mpconfigboard.h +++ b/ports/esp32/boards/CM_JayD/mpconfigboard.h @@ -1,2 +1,2 @@ -#define MICROPY_HW_BOARD_NAME "CircuitMess Synthia" +#define MICROPY_HW_BOARD_NAME "CircuitMess JayD" #define MICROPY_HW_MCU_NAME "ESP32" diff --git a/ports/esp32/libraries/JayD/MatrixMap.py b/ports/esp32/libraries/JayD/MatrixMap.py index 92c861a2a4d..f22e2ce16e3 100644 --- a/ports/esp32/libraries/JayD/MatrixMap.py +++ b/ports/esp32/libraries/JayD/MatrixMap.py @@ -7,7 +7,7 @@ def __init__(self, output: MatrixOutputBuffered, revision: int): self.revision = revision def map(self, x, y): - if (self.revision == 2): + if self.revision == 2 or self.revision == 3: return x, y else: return self.get_width() - x - 1, y diff --git a/ports/esp32/libraries/JayD/Nuvoton.py b/ports/esp32/libraries/JayD/Nuvoton.py index 59ff67302be..36426df378f 100644 --- a/ports/esp32/libraries/JayD/Nuvoton.py +++ b/ports/esp32/libraries/JayD/Nuvoton.py @@ -15,9 +15,9 @@ class Nuvoton: NUM_ENC = const(7) NUM_POT = const(3) - def __init__(self, i2c: I2C, revision: int): + def __init__(self, i2c: I2C, revision: int, pins: Pins): self.i2c = i2c - self.pin_reset = Pin(Pins.NUVO_RESET, Pin.OUT) + self.pin_reset = Pin(pins.get(Pins.NUVO_RESET), Pin.OUT) self.revision = revision self._on_press = [None] * self.NUM_BTN @@ -141,11 +141,9 @@ def scan(self): new_val = evt.val if evt.id != 0: new_val = 255 - new_val - print("raw val", evt.val) new_val = max(min(new_val, max_val), min_val) # constrain to 70 - 185 new_val = (((float)(new_val) - min_val) / (max_val - min_val)) * 255.0 evt.val = new_val - print("mapped val", evt.val) self._sliderVals[evt.id] = evt.val if self._on_slider[evt.id] is not None: diff --git a/ports/esp32/libraries/JayD/Pins.py b/ports/esp32/libraries/JayD/Pins.py index e836f597a53..b66420ed9ec 100644 --- a/ports/esp32/libraries/JayD/Pins.py +++ b/ports/esp32/libraries/JayD/Pins.py @@ -2,47 +2,104 @@ class Pins: - I2C_SDA = const(26) - I2C_SCL = const(27) + I2C_SDA: int = const(0) + I2C_SCL: int = const(1) - BL = const(25) + BL: int = const(2) - SPI_SCK = const(18) - SPI_MISO = const(19) - SPI_MOSI = const(23) + SPI_SCK: int = const(3) + SPI_MISO: int = const(4) + SPI_MOSI: int = const(5) - SD_CS = const(22) + SD_CS: int = const(6) - TFT_CS = const(32) - TFT_DC = const(33) - TFT_RST = const(2) + TFT_CS: int = const(7) + TFT_DC: int = const(8) + TFT_RST: int = const(9) - NUVO_RESET: int = const(13) + NUVO_RESET: int = const(10) + + # For original Jay-D and Jay-D v1.7 (eFuse revision 0, 1, 2) + Rev1Map = { + I2C_SDA: const(26), + I2C_SCL: const(27), + + BL: const(25), + + SPI_SCK: const(18), + SPI_MISO: const(19), + SPI_MOSI: const(23), + + SD_CS: const(22), + + TFT_CS: const(32), + TFT_DC: const(33), + TFT_RST: const(2), + + NUVO_RESET: const(13), + } + + # For Jay-D v1.9 (eFuse revision 3) - SD card moved to SD-MMC, so there is no + # SPI MISO / SD_CS; GPIO19 is I2S data out and the TFT reset moved to GPIO12 + Rev2Map = { + I2C_SDA: const(26), + I2C_SCL: const(27), + + BL: const(25), + + SPI_SCK: const(18), + SPI_MISO: const(-1), + SPI_MOSI: const(23), + + SD_CS: const(-1), + + TFT_CS: const(32), + TFT_DC: const(33), + TFT_RST: const(12), + + NUVO_RESET: const(13), + } + + def __init__(self, revision): + self.currentMap = None + if revision == 0 or revision == 1 or revision == 2: + self.currentMap = self.Rev1Map + elif revision == 3: + self.currentMap = self.Rev2Map + else: + print("Unknown revision", revision) + + def get(self, pin: int) -> int: + if not pin in self.currentMap: + print("Pin", pin, "not in map") + return -1 + + return self.currentMap[pin] class Buttons: - Left = 0 - Right = 1 - Enc_Mid = const(2) - Enc_Left1 = const(3) - Enc_Left2 = const(8) - Enc_Left3 = const(7) - Enc_Right1 = const(6) - Enc_Right2 = const(5) - Enc_Right3 = const(4) + Left: int = 0 + Right: int = 1 + Enc_Mid: int = const(2) + Enc_Left1: int = const(3) + Enc_Left2: int = const(8) + Enc_Left3: int = const(7) + Enc_Right1: int = const(6) + Enc_Right2: int = const(5) + Enc_Right3: int = const(4) class Encoders: - Mid = 0 - Left1 = const(1) - Left2 = const(6) - Left3 = const(5) - Right1 = const(4) - Right2 = const(3) - Right3 = const(2) + Mid: int = 0 + Left1: int = const(1) + Left2: int = const(6) + Left3: int = const(5) + Right1: int = const(4) + Right2: int = const(3) + Right3: int = const(2) class Sliders: - Mid = const(0) - Left = const(1) - Right = const(2) + Mid: int = const(0) + Left: int = const(1) + Right: int = const(2) diff --git a/ports/esp32/libraries/JayD/__init__.py b/ports/esp32/libraries/JayD/__init__.py index e7ba9fc1cdd..f5721a95f9e 100644 --- a/ports/esp32/libraries/JayD/__init__.py +++ b/ports/esp32/libraries/JayD/__init__.py @@ -6,8 +6,9 @@ import efuse revision = efuse.read_rev() +pins = Pins(revision) -i2c = I2C(0, sda=Pin(Pins.I2C_SDA), scl=Pin(Pins.I2C_SCL), freq=100000) +i2c = I2C(0, sda=Pin(pins.get(Pins.I2C_SDA)), scl=Pin(pins.get(Pins.I2C_SCL)), freq=100000) charlie = IS31FL3731(i2c) matrix_out = MatrixOutputCharlie(charlie) matrix_buf = MatrixOutputBuffered(matrix_out) @@ -17,24 +18,31 @@ matrix_left = Matrix(MatrixLeft(matrix_buf)) matrix_right = Matrix(MatrixRight(matrix_buf)) -spiTFT: SPI = SPI(1, baudrate=27000000, polarity=0, phase=0, sck=Pin(Pins.SPI_SCK), mosi=Pin(Pins.SPI_MOSI), - miso=Pin(Pins.SPI_MISO)) - -if (revision == 2): # rev3 - panel = PanelST7735(spiTFT, dc=Pin(Pins.TFT_DC, Pin.OUT), reset=Pin(Pins.TFT_RST, Pin.OUT), - cs=Pin(Pins.TFT_CS, Pin.OUT), rotation=3, color_order_rgb=True) -elif (revision == 1): # rev2 - panel = PanelST7735(spiTFT, dc=Pin(Pins.TFT_DC, Pin.OUT), reset=Pin(Pins.TFT_RST, Pin.OUT), - cs=Pin(Pins.TFT_CS, Pin.OUT), rotation=1, color_order_rgb=True) +# Rev 3 (v1.9) has no SPI MISO - the SD card is on SD-MMC and GPIO19 is I2S data out +miso_pin = pins.get(Pins.SPI_MISO) +if miso_pin != -1: + spiTFT: SPI = SPI(1, baudrate=27000000, polarity=0, phase=0, sck=Pin(pins.get(Pins.SPI_SCK)), + mosi=Pin(pins.get(Pins.SPI_MOSI)), miso=Pin(miso_pin)) +else: + spiTFT: SPI = SPI(1, baudrate=27000000, polarity=0, phase=0, sck=Pin(pins.get(Pins.SPI_SCK)), + mosi=Pin(pins.get(Pins.SPI_MOSI))) + +dc = Pin(pins.get(Pins.TFT_DC), Pin.OUT) +reset = Pin(pins.get(Pins.TFT_RST), Pin.OUT) +cs = Pin(pins.get(Pins.TFT_CS), Pin.OUT) + +if revision == 2 or revision == 3: # eFuse rev 2 (Jay-D v1.7) and rev 3 (v1.9) share the same panel + panel = PanelST7735(spiTFT, dc=dc, reset=reset, cs=cs, rotation=3, color_order_rgb=True) +elif revision == 1: # rev2 + panel = PanelST7735(spiTFT, dc=dc, reset=reset, cs=cs, rotation=1, color_order_rgb=True) else: # rev1 - panel = PanelST7735(spiTFT, dc=Pin(Pins.TFT_DC, Pin.OUT), reset=Pin(Pins.TFT_RST, Pin.OUT), - cs=Pin(Pins.TFT_CS, Pin.OUT), rotation=1) + panel = PanelST7735(spiTFT, dc=dc, reset=reset, cs=cs, rotation=1) display = Display(panel) -blPin = Pin(Pins.BL, mode=Pin.OUT, value=True) +blPin = Pin(pins.get(Pins.BL), mode=Pin.OUT, value=True) backlight = Signal(blPin, invert=True) -input = Nuvoton(i2c, revision) +input = Nuvoton(i2c, revision, pins) def begin(): @@ -56,7 +64,7 @@ def begin(): panel.init() # Can't set TFT offset before this, since panel.init() resets it to default - if (revision == 2 or revision == 1): + if revision == 1 or revision == 2 or revision == 3: panel.tft.offset(1, 2) display.fill(display.Color.Black) From 260afe0afb5bea4e86251706cbf03cc5b763e8cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Valenti=C4=87?= Date: Thu, 10 Sep 2026 15:28:00 +0200 Subject: [PATCH 2/2] ByteBoi hardware revision: reworked Pins class --- ports/esp32/libraries/ByteBoi/Pins.py | 346 ++++++++++++++-------- ports/esp32/libraries/ByteBoi/__init__.py | 66 +++-- 2 files changed, 267 insertions(+), 145 deletions(-) diff --git a/ports/esp32/libraries/ByteBoi/Pins.py b/ports/esp32/libraries/ByteBoi/Pins.py index cc7a33bac6b..a9119d23918 100644 --- a/ports/esp32/libraries/ByteBoi/Pins.py +++ b/ports/esp32/libraries/ByteBoi/Pins.py @@ -1,125 +1,235 @@ from micropython import const -pinMap = [0] * 11 - class Pins: - # Unused pins, no need to define them across all variants - # SPEAKER = const(25) - # SPEAKER_EN = const(13) - BL = 0 - BATT = const(36) - CHARGE = 4 - SD_SENSE = 5 - - LED_R = 1 - LED_G = 2 - LED_B = 3 - - SPI_SCK = 6 - SPI_MISO = const(5) - SPI_MOSI = const(32) - - SD_CS = const(2) - - TFT_DC = const(21) - TFT_RST = const(27) - TFT_MISO = 7 - TFT_MOSI = 8 - TFT_CS = 9 - TFT_SCK = 10 - - I2C_SDA = const(23) - I2C_SCL = const(22) - - SHIFT_CLK = const(15) - SHIFT_DAT = const(4) - SHIFT_PL = const(0) + BL: int = const(0) + BATT: int = const(1) + CHARGE: int = const(2) + SD_SENSE: int = const(3) + + LED_R: int = const(4) + LED_G: int = const(5) + LED_B: int = const(6) + + SPI_SCK: int = const(7) + SPI_MISO: int = const(8) + SPI_MOSI: int = const(9) + SD_CS: int = const(10) + + TFT_SCK: int = const(11) + TFT_MOSI: int = const(12) + TFT_CS: int = const(13) + TFT_DC: int = const(14) + TFT_RST: int = const(15) + + I2C_SDA: int = const(16) + I2C_SCL: int = const(17) + + SHIFT_CLK: int = const(18) + SHIFT_DAT: int = const(19) + SHIFT_PL: int = const(20) + + # Button IDs as seen by the input driver (expander pin or shift register bit) + BTN_UP: int = const(21) + BTN_DOWN: int = const(22) + BTN_LEFT: int = const(23) + BTN_RIGHT: int = const(24) + BTN_A: int = const(25) + BTN_B: int = const(26) + BTN_C: int = const(27) + + # ByteBoi v1.0 (eFuse revision 0, PCA95XX expander present) + # BL, CHARGE, SD_SENSE, LED_* and BTN_* are expander pins, the display shares the SD SPI bus + Rev1Map = { + BL: const(12), + BATT: const(36), + CHARGE: const(10), + SD_SENSE: const(8), + + LED_R: const(14), + LED_G: const(15), + LED_B: const(13), + + SPI_SCK: const(26), + SPI_MISO: const(5), + SPI_MOSI: const(32), + SD_CS: const(2), + + TFT_SCK: const(26), + TFT_MOSI: const(32), + TFT_CS: const(33), + TFT_DC: const(21), + TFT_RST: const(27), + + I2C_SDA: const(23), + I2C_SCL: const(22), + + SHIFT_CLK: const(-1), + SHIFT_DAT: const(-1), + SHIFT_PL: const(-1), + + BTN_UP: const(0), + BTN_DOWN: const(3), + BTN_LEFT: const(1), + BTN_RIGHT: const(2), + BTN_A: const(6), + BTN_B: const(5), + BTN_C: const(4), + } + + # ByteBoi v1.1 (eFuse revision 0, no expander) - shift register input, GPIO RGB LED + Rev2Map = { + BL: const(18), + BATT: const(36), + CHARGE: const(35), + SD_SENSE: const(7), + + LED_R: const(22), + LED_G: const(23), + LED_B: const(19), + + SPI_SCK: const(14), + SPI_MISO: const(5), + SPI_MOSI: const(32), + SD_CS: const(2), + + TFT_SCK: const(26), + TFT_MOSI: const(33), + TFT_CS: const(-1), # CS isn't connected in this variant + TFT_DC: const(21), + TFT_RST: const(27), + + I2C_SDA: const(-1), + I2C_SCL: const(-1), + + SHIFT_CLK: const(15), + SHIFT_DAT: const(4), + SHIFT_PL: const(0), + + BTN_UP: const(7), + BTN_DOWN: const(4), + BTN_LEFT: const(5), + BTN_RIGHT: const(6), + BTN_A: const(3), + BTN_B: const(2), + BTN_C: const(1), + } + + # ByteBoi v2.0 (eFuse revision 1) - no RGB LED + Rev3Map = { + BL: const(18), + BATT: const(36), + CHARGE: const(39), + SD_SENSE: const(34), + + LED_R: const(-1), + LED_G: const(-1), + LED_B: const(-1), + + SPI_SCK: const(14), + SPI_MISO: const(5), + SPI_MOSI: const(32), + SD_CS: const(2), + + TFT_SCK: const(26), + TFT_MOSI: const(33), + TFT_CS: const(-1), # CS isn't connected in this variant + TFT_DC: const(21), + TFT_RST: const(27), + + I2C_SDA: const(-1), + I2C_SCL: const(-1), + + SHIFT_CLK: const(15), + SHIFT_DAT: const(4), + SHIFT_PL: const(0), + + BTN_UP: const(7), + BTN_DOWN: const(4), + BTN_LEFT: const(5), + BTN_RIGHT: const(6), + BTN_A: const(3), + BTN_B: const(2), + BTN_C: const(1), + } + + # ByteBoi v2.6 (eFuse revision 2) - shift register moved, SD on SDMMC + Rev4Map = { + BL: const(18), + BATT: const(36), + CHARGE: const(39), + SD_SENSE: const(34), + + LED_R: const(-1), + LED_G: const(-1), + LED_B: const(-1), + + # SD is on the native SDMMC slot-1 pins, driven in 1-bit mode. The SPI_* names carry + # CLK/D0/CMD. DAT3/CS isn't GPIO-connected (pulled up), so SPI mode is impossible - no SD_CS. + SPI_SCK: const(14), + SPI_MISO: const(2), + SPI_MOSI: const(15), + SD_CS: const(-1), + + TFT_SCK: const(26), + TFT_MOSI: const(33), + TFT_CS: const(-1), # CS isn't connected in this variant + TFT_DC: const(21), + TFT_RST: const(27), + + I2C_SDA: const(-1), + I2C_SCL: const(-1), + + SHIFT_CLK: const(22), + SHIFT_DAT: const(4), + SHIFT_PL: const(19), + + BTN_UP: const(7), + BTN_DOWN: const(4), + BTN_LEFT: const(5), + BTN_RIGHT: const(6), + BTN_A: const(3), + BTN_B: const(2), + BTN_C: const(1), + } + + def __init__(self, variant): + self.currentMap = None + if variant == 0: + self.currentMap = self.Rev1Map + elif variant == 1: + self.currentMap = self.Rev2Map + elif variant == 2: + self.currentMap = self.Rev3Map + elif variant == 3: + self.currentMap = self.Rev4Map + else: + print("Unknown variant", variant) + + def get(self, pin: int) -> int: + if not pin in self.currentMap: + print("Pin", pin, "not in map") + return -1 + + return self.currentMap[pin] class Buttons: - Up = const(0) - Down = const(3) - Left = const(1) - Right = const(2) - A = const(6) - B = const(5) - C = const(4) - - -def init_pins(variant: int): - if variant == 0: - pinMap[0] = const(12) # BL_PIN - - pinMap[1] = const(14) # LED_R - pinMap[2] = const(15) # LED_G - pinMap[3] = const(13) # LED_B - pinMap[4] = const(10) # CHARGE_DETECT_PIN - pinMap[5] = const(8) # SD_DETECT_PIN - - pinMap[6] = const(26) # SPI_SCK - - pinMap[7] = const(5) - pinMap[8] = const(32) - pinMap[9] = const(33) - pinMap[10] = -1 - - elif variant == 1: - pinMap[0] = const(18) # BL_PIN - - pinMap[1] = const(22) # LED_R - pinMap[2] = const(23) # LED_G - pinMap[3] = const(19) # LED_B - pinMap[4] = const(35) # CHARGE_DETECT_PIN - pinMap[5] = const(7) # SD_DETECT_PIN - - pinMap[6] = const(14) # SPI_SCK - - pinMap[7] = -1 # TFT_MISO - pinMap[8] = const(33) # TFT_MOSI - pinMap[9] = -1 # TFT_CS <- CS isn't connected in this variant - pinMap[10] = const(26) # TFT_SCK - - Buttons.Up = const(7) - Buttons.Down = const(4) - Buttons.Left = const(5) - Buttons.Right = const(6) - Buttons.A = const(3) - Buttons.B = const(2) - Buttons.C = const(1) - - elif variant == 2: - pinMap[0] = const(18) # BL_PIN - - pinMap[1] = const(-1) # LED_R - pinMap[2] = const(-1) # LED_G - pinMap[3] = const(-1) # LED_B - pinMap[4] = const(39) # CHARGE_DETECT_PIN - pinMap[5] = const(34) # SD_DETECT_PIN - - pinMap[6] = const(14) # SPI_SCK - - pinMap[7] = -1 # TFT_MISO - pinMap[8] = const(33) # TFT_MOSI - pinMap[9] = -1 # TFT_CS <- CS isn't connected in this variant - pinMap[10] = const(26) # TFT_SCK - - Buttons.Up = const(7) - Buttons.Down = const(4) - Buttons.Left = const(5) - Buttons.Right = const(6) - Buttons.A = const(3) - Buttons.B = const(2) - Buttons.C = const(1) - - Pins.BL = pinMap[0] - Pins.LED_R = pinMap[1] - Pins.LED_G = pinMap[2] - Pins.LED_B = pinMap[3] - Pins.CHARGE = pinMap[4] - Pins.SD_SENSE = pinMap[5] - Pins.SPI_SCK = pinMap[6] - Pins.TFT_MISO = pinMap[7] - Pins.TFT_MOSI = pinMap[8] - Pins.TFT_CS = pinMap[9] - Pins.TFT_SCK = pinMap[10] + # Defaults match the v1.0 expander layout; Buttons.init(pins) applies the current variant's IDs + Up: int = 0 + Down: int = 3 + Left: int = 1 + Right: int = 2 + A: int = 6 + B: int = 5 + C: int = 4 + + @classmethod + def init(cls, pins: Pins): + cls.Up = pins.get(Pins.BTN_UP) + cls.Down = pins.get(Pins.BTN_DOWN) + cls.Left = pins.get(Pins.BTN_LEFT) + cls.Right = pins.get(Pins.BTN_RIGHT) + cls.A = pins.get(Pins.BTN_A) + cls.B = pins.get(Pins.BTN_B) + cls.C = pins.get(Pins.BTN_C) diff --git a/ports/esp32/libraries/ByteBoi/__init__.py b/ports/esp32/libraries/ByteBoi/__init__.py index ae52071cdab..880e3bbda1d 100644 --- a/ports/esp32/libraries/ByteBoi/__init__.py +++ b/ports/esp32/libraries/ByteBoi/__init__.py @@ -4,27 +4,35 @@ import efuse revision = efuse.read_rev() -i2c = I2C(0, sda=Pin(Pins.I2C_SDA), scl=Pin(Pins.I2C_SCL)) -expander = PCA95XX(i2c) +i2c = None +expander = None -if revision == 1: - variant = 2 +if revision == 2: + variant = 3 # v2.6 +elif revision == 1: + variant = 2 # v2.0 else: - variant = 1 - if expander.begin(): - variant = 0 + # HW v1.x: probe for the PCA95XX expander on the v1.0 I2C pins + probe = Pins(0) + i2c = I2C(0, sda=Pin(probe.get(Pins.I2C_SDA)), scl=Pin(probe.get(Pins.I2C_SCL))) + expander = PCA95XX(i2c) + variant = 0 if expander.begin() else 1 # v1.0 with expander, otherwise v1.1 -init_pins(variant) +pins = Pins(variant) +Buttons.init(pins) -spi: SPI = SPI(1, baudrate=16000000, polarity=0, phase=0, sck=Pin(Pins.SPI_SCK), mosi=Pin(Pins.SPI_MOSI), - miso=Pin(Pins.SPI_MISO)) +# Shared SD (and v1.0 display) SPI bus. On v2.6 these lines belong to the SDMMC peripheral. +spi = None +if variant != 3: + spi: SPI = SPI(1, baudrate=16000000, polarity=0, phase=0, sck=Pin(pins.get(Pins.SPI_SCK)), + mosi=Pin(pins.get(Pins.SPI_MOSI)), miso=Pin(pins.get(Pins.SPI_MISO))) if variant == 0: from CircuitOS import PanelILI9341, InputPCA95XX - panel = PanelILI9341(spi, dc=Pin(Pins.TFT_DC, Pin.OUT), reset=Pin(Pins.TFT_RST, Pin.OUT), - cs=Pin(Pins.TFT_CS, Pin.OUT), rotation=1) + panel = PanelILI9341(spi, dc=Pin(pins.get(Pins.TFT_DC), Pin.OUT), reset=Pin(pins.get(Pins.TFT_RST), Pin.OUT), + cs=Pin(pins.get(Pins.TFT_CS), Pin.OUT), rotation=1) panel.init() buttons = InputPCA95XX(expander) for btn in dir(Buttons): @@ -37,43 +45,47 @@ class BBBacklight: def __init__(self): - expander.pin_mode(Pins.BL, Pin.OUT) + expander.pin_mode(pins.get(Pins.BL), Pin.OUT) def on(self): - expander.pin_write(Pins.BL, False) + expander.pin_write(pins.get(Pins.BL), False) def off(self): - expander.pin_write(Pins.BL, True) + expander.pin_write(pins.get(Pins.BL), True) backlight = BBBacklight() - rgb = RGBSolidExpander(Pins.LED_R, Pins.LED_G, Pins.LED_B, expander) + rgb = RGBSolidExpander(pins.get(Pins.LED_R), pins.get(Pins.LED_G), pins.get(Pins.LED_B), expander) elif variant == 1: from CircuitOS import PanelST7789, InputShift - spiTFT: SPI = SPI(2, baudrate=16000000, polarity=1, phase=1, sck=Pin(Pins.TFT_SCK), mosi=Pin(Pins.TFT_MOSI)) - panel = PanelST7789(spiTFT, dc=Pin(Pins.TFT_DC, Pin.OUT), reset=Pin(Pins.TFT_RST, Pin.OUT), rotation=1) + spiTFT: SPI = SPI(2, baudrate=16000000, polarity=1, phase=1, sck=Pin(pins.get(Pins.TFT_SCK)), + mosi=Pin(pins.get(Pins.TFT_MOSI))) + panel = PanelST7789(spiTFT, dc=Pin(pins.get(Pins.TFT_DC), Pin.OUT), reset=Pin(pins.get(Pins.TFT_RST), Pin.OUT), + rotation=1) panel.init() - blPin = Pin(Pins.BL, mode=Pin.OUT, value=True) + blPin = Pin(pins.get(Pins.BL), mode=Pin.OUT, value=True) backlight = Signal(blPin, invert=True) - buttons = InputShift(Pins.SHIFT_DAT, Pins.SHIFT_CLK, Pins.SHIFT_PL) - rgb = RGBSolidGPIO(Pins.LED_R, Pins.LED_G, Pins.LED_B) -else: # variant == 2 + buttons = InputShift(pins.get(Pins.SHIFT_DAT), pins.get(Pins.SHIFT_CLK), pins.get(Pins.SHIFT_PL)) + rgb = RGBSolidGPIO(pins.get(Pins.LED_R), pins.get(Pins.LED_G), pins.get(Pins.LED_B)) +else: # variant 2 (v2.0) and 3 (v2.6) share the same panel setup from CircuitOS import PanelST7789, InputShift - spiTFT: SPI = SPI(2, baudrate=16000000, polarity=1, phase=1, sck=Pin(Pins.TFT_SCK), mosi=Pin(Pins.TFT_MOSI)) - panel = PanelST7789(spiTFT, dc=Pin(Pins.TFT_DC, Pin.OUT), reset=Pin(Pins.TFT_RST, Pin.OUT), rotation=3) + spiTFT: SPI = SPI(2, baudrate=16000000, polarity=1, phase=1, sck=Pin(pins.get(Pins.TFT_SCK)), + mosi=Pin(pins.get(Pins.TFT_MOSI))) + panel = PanelST7789(spiTFT, dc=Pin(pins.get(Pins.TFT_DC), Pin.OUT), reset=Pin(pins.get(Pins.TFT_RST), Pin.OUT), + rotation=3) panel.init() - blPin = Pin(Pins.BL, mode=Pin.OUT, value=True) + blPin = Pin(pins.get(Pins.BL), mode=Pin.OUT, value=True) backlight = Signal(blPin, invert=True) - buttons = InputShift(Pins.SHIFT_DAT, Pins.SHIFT_CLK, Pins.SHIFT_PL) - rgb = RGBSolidGPIO(Pins.LED_R, Pins.LED_G, Pins.LED_B) + buttons = InputShift(pins.get(Pins.SHIFT_DAT), pins.get(Pins.SHIFT_CLK), pins.get(Pins.SHIFT_PL)) + rgb = RGBSolidGPIO(pins.get(Pins.LED_R), pins.get(Pins.LED_G), pins.get(Pins.LED_B)) display = Display(panel)