Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ports/esp32/boards/CM_JayD/mpconfigboard.h
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
#define MICROPY_HW_BOARD_NAME "CircuitMess Synthia"
#define MICROPY_HW_BOARD_NAME "CircuitMess JayD"
#define MICROPY_HW_MCU_NAME "ESP32"
346 changes: 228 additions & 118 deletions ports/esp32/libraries/ByteBoi/Pins.py
Original file line number Diff line number Diff line change
@@ -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)
Loading