Merge branch 'adafruit:main' into audiofilters_distortion

This commit is contained in:
Cooper Dalrymple 2025-01-17 15:20:09 -06:00 committed by GitHub
commit e18e5b2d24
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
175 changed files with 3702 additions and 587 deletions

View file

@ -22,7 +22,7 @@ inputs:
- restore
version:
description: 'Whether to generate CP version'
description: 'Whether to fetch tags to identify CP version'
required: false
default: false
type: boolean

View file

@ -183,6 +183,8 @@ jobs:
python-version: 3.x
- name: Set up submodules
uses: ./.github/actions/deps/submodules
with:
version: true
- name: Install dependencies
run: |
sudo apt-get update

4
.gitmodules vendored
View file

@ -143,7 +143,7 @@
[submodule "ports/espressif/esp-idf"]
path = ports/espressif/esp-idf
url = https://github.com/adafruit/esp-idf.git
branch = circuitpython-v5.3.1
branch = circuitpython-v5.3.2
[submodule "ports/espressif/esp-protocols"]
path = ports/espressif/esp-protocols
url = https://github.com/adafruit/esp-protocols.git
@ -345,7 +345,7 @@
url = https://github.com/adafruit/Adafruit_CircuitPython_Wave.git
[submodule "ports/raspberrypi/lib/Pico-PIO-USB"]
path = ports/raspberrypi/lib/Pico-PIO-USB
url = https://github.com/sekigon-gonnoc/Pico-PIO-USB.git
url = https://github.com/adafruit/Pico-PIO-USB.git
[submodule "lib/micropython-lib"]
path = lib/micropython-lib
url = https://github.com/micropython/micropython-lib.git

View file

@ -40,7 +40,7 @@ ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(BASEOPTS)
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(BASEOPTS)
TRANSLATE_SOURCES = extmod lib main.c ports/atmel-samd ports/cxd56 ports/espressif ports/mimxrt10xx ports/nordic ports/raspberrypi ports/stm py shared-bindings shared-module supervisor
TRANSLATE_SOURCES = extmod lib main.c ports/atmel-samd ports/analog ports/cxd56 ports/espressif ports/mimxrt10xx ports/nordic ports/raspberrypi ports/renode ports/stm py shared-bindings shared-module supervisor
# Paths to exclude from TRANSLATE_SOURCES
# Each must be preceded by "-path"; if any wildcards, enclose in quotes.
# Separate by "-o" (Find's "or" operand)
@ -268,7 +268,7 @@ stubs:
@$(PYTHON) tools/extract_pyi.py ports/atmel-samd/bindings $(STUBDIR)
@$(PYTHON) tools/extract_pyi.py ports/espressif/bindings $(STUBDIR)
@$(PYTHON) tools/extract_pyi.py ports/raspberrypi/bindings $(STUBDIR)
@cp setup.py-stubs circuitpython-stubs/setup.py
@sed -e "s,__version__,`python -msetuptools_scm`," < setup.py-stubs > circuitpython-stubs/setup.py
@cp README.rst-stubs circuitpython-stubs/README.rst
@cp MANIFEST.in-stubs circuitpython-stubs/MANIFEST.in
@$(PYTHON) tools/board_stubs/build_board_specific_stubs/board_stub_builder.py

View file

@ -136,6 +136,9 @@ Behavior
- Adds a safe mode that does not run user code after a hard crash or brown out. This makes it
possible to fix code that causes nasty crashes by making it available through mass storage after
the crash. A reset (the button) is needed after it's fixed to get back into normal mode.
- A 1 second delay is added to the boot process during which time the status LED will flash, and
resetting the device or pressing the boot button will force the device into safe mode. This delay
can be removed by a compile time option (``CIRCUITPY_SKIP_SAFE_MODE_WAIT``).
- Safe mode may be handled programmatically by providing a ``safemode.py``.
``safemode.py`` is run if the board has reset due to entering safe mode, unless the safe mode
initiated by the user by pressing button(s).

84
conf.py
View file

@ -174,74 +174,22 @@ version = release = final_version
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ["**/build*",
".git",
".github",
".env",
".venv",
".direnv",
".devcontainer/Readme.md",
"circuitpython-stubs",
"data",
"docs/autoapi",
"docs/README.md",
"drivers",
"examples",
"extmod",
"frozen",
"lib",
"main.c",
"mpy-cross",
"ports/*/*.c",
"ports/*/*.h",
"ports/*/boards",
"ports/*/common-hal",
"ports/*/supervisor",
"ports/atmel-samd/asf4",
"ports/atmel-samd/asf4_conf",
"ports/atmel-samd/external_flash",
"ports/atmel-samd/freetouch",
"ports/atmel-samd/peripherals",
"ports/atmel-samd/QTouch",
"ports/atmel-samd/tools",
"ports/broadcom/firmware",
"ports/broadcom/peripherals",
"ports/cxd56/mkspk",
"ports/cxd56/spresense-exported-sdk",
"ports/espressif/certificates",
"ports/espressif/esp-idf",
"ports/espressif/esp-camera",
"ports/espressif/esp-protocols",
"ports/espressif/.idf_tools",
"ports/espressif/peripherals",
"ports/litex/hw",
"ports/minimal",
"ports/mimxrt10xx/peripherals",
"ports/mimxrt10xx/sdk",
"ports/nordic/device",
"ports/nordic/bluetooth",
"ports/nordic/modules",
"ports/nordic/nrfx",
"ports/nordic/peripherals",
"ports/nordic/usb",
"ports/raspberrypi/sdk",
"ports/raspberrypi/pioasm",
"ports/raspberrypi/lib",
"ports/silabs/gecko_sdk",
"ports/silabs/tools",
"ports/stm/st_driver",
"ports/stm/packages",
"ports/stm/peripherals",
"ports/stm/ref",
"py",
"shared/*",
"shared-bindings/util.*",
"shared-module",
"supervisor",
"tests",
"test-stubs",
"tools",
"circuitpython-stubs/README.rst"]
include_patterns = [
# Top directory documentation
"*.rst",
"*.md",
# Docs inherited from microypython (but not templates or README.md, see below)
"docs/**",
# Module documentation
"shared-bindings/**",
"ports/*/bindings/**",
# Port READMEs in various formats
"ports/*/README*",
]
exclude_patterns = ["docs/autoapi/templates/**", "docs/README.md"]
# The reST default role (used for this markup: `text`) to use for all
# documents.

View file

@ -111,6 +111,7 @@ during power up at 1024x600 otherwise the display will be initialized at a resol
of 800x480.
`Sunton ESP32-2432S028 <https://circuitpython.org/board/sunton_esp32_2432S028/>`_
`Sunton ESP32-2432S024C <https://circuitpython.org/board/sunton_esp32_2432S024C/>`_
CIRCUITPY_DISPLAY_ROTATION
~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -119,3 +120,13 @@ If the CIRCUITPY_DISPLAY_ROTATION parameter is set the display will be initializ
during power up with the selected rotation, otherwise the display will be initialized with
a rotation of 0. Attempting to initialize the screen with a rotation other than 0,
90, 180 or 270 is not supported and will result in an unexpected screen rotation.
`Sunton ESP32-8048S050 <https://circuitpython.org/board/sunton_esp32_8048S050/>`_
CIRCUITPY_DISPLAY_FREQUENCY
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Allows the entry of a display frequency used during the "dotclock" framebuffer construction.
If a valid frequency is not defined the board will initialize the framebuffer with a
frequency of 12500000hz (12.5Mhz). The value should be entered as an integer in hertz
i.e. CIRCUITPY_DISPLAY_FREQUENCY=16000000 will override the default value with a 16Mhz
display frequency.

View file

@ -230,7 +230,7 @@ msgstr "%q harus kelipatan 8."
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q harus bertipe %q atau %q, bukan %q"
@ -817,6 +817,10 @@ msgstr "Tidak dapat menentukan RTS atau CTS dalam mode RS485"
msgid "Cannot subclass slice"
msgstr "Tidak dapat membuat subkelas dari irisan"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr "Tidak dapat bangun di tepi pin, hanya level"
@ -2362,6 +2366,7 @@ msgstr "Anda menekan kedua tombol saat memulai."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr "Anda menekan tombol A saat memulai."
@ -3434,10 +3439,6 @@ msgstr ""
msgid "label redefined"
msgstr "label didefinis ulang"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr ""
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr ""

View file

@ -218,7 +218,7 @@ msgstr ""
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr ""
@ -795,6 +795,10 @@ msgstr ""
msgid "Cannot subclass slice"
msgstr ""
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr ""
@ -2311,6 +2315,7 @@ msgstr ""
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
@ -3383,10 +3388,6 @@ msgstr ""
msgid "label redefined"
msgstr ""
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr ""
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr ""

View file

@ -229,7 +229,7 @@ msgstr ""
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q musí být typu %q nebo %q, ne %q"
@ -811,6 +811,10 @@ msgstr "Nelze určit RTS nebo CTS v režimu RS485"
msgid "Cannot subclass slice"
msgstr "Nelze použít řez podtřídy"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr "Nelze probudit hranou na pinu, pouze úrovní"
@ -2342,6 +2346,7 @@ msgstr "Při spuštění jsi stiskl obě tlačítka."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr "Při spuštění jsi stiskl tlačítko A."
@ -3414,10 +3419,6 @@ msgstr ""
msgid "label redefined"
msgstr ""
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr ""
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr ""

View file

@ -6,14 +6,14 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2024-10-23 01:15+0000\n"
"Last-Translator: Sokromatrix <kroschewski1971@gmail.com>\n"
"PO-Revision-Date: 2024-12-15 14:00+0000\n"
"Last-Translator: Exp3rt <jannik.homberg@gmail.com>\n"
"Language: de_DE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.8.2-dev\n"
"X-Generator: Weblate 5.9-rc\n"
#: main.c
msgid ""
@ -202,7 +202,7 @@ msgstr "%q muss >= %d sein"
#: shared-module/audiofilters/Filter.c
msgid "%q must be a %q object, %q, or %q"
msgstr ""
msgstr "%q muss ein %q Objekt, %q, oder %q sein"
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
@ -232,7 +232,7 @@ msgstr "%q muss ein Vielfaches von 8 sein."
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q muss von Typ %q oder %q sein, nicht %q"
@ -815,6 +815,10 @@ msgstr "RTS oder CTS können im RS485-Modus nicht angegeben werden"
msgid "Cannot subclass slice"
msgstr "Slice kann keine sub-klasse sein"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr "Kann nicht durch Flanke an Pin geweckt werden, sondern nur durch Pegel"
@ -2374,6 +2378,7 @@ msgstr "Beide Knöpfe wurden beim Starten gedrückt."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr "Knopf A wurde beim Starten gedrückt."
@ -3464,10 +3469,6 @@ msgstr "Label '%q' nicht definiert"
msgid "label redefined"
msgstr "Label neu definiert"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "Der Pegel muss zwischen 0 und 1 liegen"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "lhs und rhs sollten kompatibel sein"
@ -4459,6 +4460,9 @@ msgstr "zi muss eine Gleitkommazahl sein"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi muss die Form (n_section, 2) haben"
#~ msgid "level must be between 0 and 1"
#~ msgstr "Der Pegel muss zwischen 0 und 1 liegen"
#~ msgid "init I2C"
#~ msgstr "initialisiere I2C"

View file

@ -233,7 +233,7 @@ msgstr ""
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q πρέπει να είναι τύπου %q ή %q, όχι %q"
@ -816,6 +816,10 @@ msgstr "Δεν μπορεί να οριστεί RTS ή CTS σε RS485 mode"
msgid "Cannot subclass slice"
msgstr "Δεν γίνεται υποκατηγορία ενός slice"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr "Δεν γίνεται αφύπνηση σε pin edge, αλλά μόνο σε level"
@ -2339,6 +2343,7 @@ msgstr ""
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
@ -3411,10 +3416,6 @@ msgstr ""
msgid "label redefined"
msgstr ""
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr ""
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr ""

View file

@ -231,7 +231,7 @@ msgstr "%q must be multiple of 8."
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q must be of type %q or %q, not %q"
@ -810,6 +810,10 @@ msgstr "Cannot specify RTS or CTS in RS485 mode"
msgid "Cannot subclass slice"
msgstr "Cannot subclass slice"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr "Cannot wake on pin edge, only level"
@ -2346,6 +2350,7 @@ msgstr "You pressed both buttons at start up."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr "You pressed button A at start up."
@ -3421,10 +3426,6 @@ msgstr "label '%q' not defined"
msgid "label redefined"
msgstr "label redefined"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "level must be between 0 and 1"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "lhs and rhs should be compatible"
@ -4406,6 +4407,9 @@ msgstr "zi must be of float type"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi must be of shape (n_section, 2)"
#~ msgid "level must be between 0 and 1"
#~ msgstr "level must be between 0 and 1"
#~ msgid "init I2C"
#~ msgstr "init I2C"

View file

@ -233,7 +233,7 @@ msgstr "%q debe ser múltiplo de 8."
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q debe ser del tipo %q o %q, y no %q"
@ -819,6 +819,10 @@ msgstr "No se puede especificar RTS o CTS en modo RS485"
msgid "Cannot subclass slice"
msgstr "No se puede manejar la partición en una subclase"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr "No puede ser despertado en transición de pin, only nivel"
@ -2381,6 +2385,7 @@ msgstr "Usted presionó ambos botones al iniciar."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr "Usted presionó el botón A al iniciar."
@ -3463,10 +3468,6 @@ msgstr "etiqueta '%q' no definida"
msgid "label redefined"
msgstr "etiqueta redefinida"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "el nivel debe ser entre 0 y 1"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "lhs y rhs deben ser compatibles"
@ -4373,8 +4374,8 @@ msgid ""
"weights must be a sequence with an odd square number of elements (usually 9 "
"or 25)"
msgstr ""
"los pesos deben ser una secuencia con una raíz cuadrada impar de elementos ("
"usualmente 9 o 25)"
"los pesos deben ser una secuencia con una raíz cuadrada impar de elementos "
"(usualmente 9 o 25)"
#: shared-bindings/bitmapfilter/__init__.c
msgid "weights must be an object of type %q, %q, %q, or %q, not %q "
@ -4451,6 +4452,9 @@ msgstr "zi debe ser de tipo flotante"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi debe ser una forma (n_section,2)"
#~ msgid "level must be between 0 and 1"
#~ msgstr "el nivel debe ser entre 0 y 1"
#~ msgid "init I2C"
#~ msgstr "inicializacion I2C"

View file

@ -221,7 +221,7 @@ msgstr ""
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr ""
@ -804,6 +804,10 @@ msgstr ""
msgid "Cannot subclass slice"
msgstr "Hindi magawa ang sublcass slice"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr ""
@ -2330,6 +2334,7 @@ msgstr ""
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
@ -3415,10 +3420,6 @@ msgstr "label '%d' kailangan na i-define"
msgid "label redefined"
msgstr "ang label ay na-define ulit"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr ""
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "lhs at rhs ay dapat magkasundo"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2024-11-27 20:00+0000\n"
"PO-Revision-Date: 2024-12-13 23:00+0000\n"
"Last-Translator: Olivier Deveault <olivierdeveault+g@gmail.com>\n"
"Language-Team: \n"
"Language: fr\n"
@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.9-dev\n"
"X-Generator: Weblate 5.9-rc\n"
#: main.c
msgid ""
@ -234,7 +234,7 @@ msgstr "%q doit être un multiple de 8."
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q doit être de type %q ou %q, pas %q"
@ -468,9 +468,8 @@ msgstr ", dans %q\n"
#: shared-bindings/busdisplay/BusDisplay.c
#: shared-bindings/epaperdisplay/EPaperDisplay.c
#: shared-bindings/framebufferio/FramebufferDisplay.c
#, fuzzy
msgid ".show(x) removed. Use .root_group = x"
msgstr ".show(x) n'est plus disponible. Merci d'utiliser .root_group = x"
msgstr ".show(x) retiré. Utilisez .root_group = x"
#: py/objcomplex.c
msgid "0.0 to a complex power"
@ -824,6 +823,10 @@ msgstr "Impossible de spécifier RTS ou CTS en mode RS485"
msgid "Cannot subclass slice"
msgstr "On ne peut faire de sous-classes de tranches"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr ""
@ -861,7 +864,7 @@ msgstr "Les tableaux de coordonnées sont de longueur différentes"
#: shared-bindings/bitmaptools/__init__.c
msgid "Coordinate arrays types have different sizes"
msgstr "Les types des matrices de coordonnées sont de longueur différentes"
msgstr "Les types des tableaux de coordonnées sont de longueur différentes"
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
@ -922,7 +925,7 @@ msgstr "La capacité de destination est plus petite que 'destination_length'."
#: shared-module/jpegio/JpegDecoder.c
msgid "Device error or wrong termination of input stream"
msgstr ""
msgstr "Erreur de l'appareil ou terminaison incorrecte du flux d'entrée"
#: ports/nordic/common-hal/audiobusio/I2SOut.c
msgid "Device in use"
@ -1189,11 +1192,11 @@ msgstr "Chiffrement insuffisant"
#: shared-module/jpegio/JpegDecoder.c
msgid "Insufficient memory pool for the image"
msgstr ""
msgstr "Le pool de mémoire est insuffisant pour l'image"
#: shared-module/jpegio/JpegDecoder.c
msgid "Insufficient stream input buffer"
msgstr ""
msgstr "Tampon de flux d'entrée insuffisant"
#: ports/espressif/common-hal/wifi/Radio.c
msgid "Interface must be started"
@ -1227,7 +1230,7 @@ msgstr "Erreur interne #%d"
#: ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2350.c
#: shared-bindings/pwmio/PWMOut.c
msgid "Internal resource(s) in use"
msgstr ""
msgstr "Ressource(s) interne(s) en utilisation"
#: supervisor/shared/safe_mode.c
msgid "Internal watchdog timer expired."
@ -1239,7 +1242,7 @@ msgstr "Erreur d'interruption."
#: shared-module/jpegio/JpegDecoder.c
msgid "Interrupted by output function"
msgstr ""
msgstr "Interrompu par une fonction de sortie"
#: ports/espressif/common-hal/_bleio/Service.c
#: ports/espressif/common-hal/espulp/ULP.c
@ -1258,7 +1261,7 @@ msgstr "%q invalide"
#: ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2350.c
#: shared-module/aurora_epaper/aurora_framebuffer.c
msgid "Invalid %q and %q"
msgstr ""
msgstr "%q et %q invalides"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: ports/espressif/common-hal/dotclockframebuffer/DotClockFramebuffer.c
@ -1361,7 +1364,7 @@ msgstr "Le calque doit être une sous-classe de Group ou TileGrid"
#: shared-bindings/audiocore/RawSample.c
msgid "Length of %q must be an even multiple of channel_count * type_size"
msgstr ""
msgstr "Longueur de %q doit être un multiple pair de channel_count * type_size"
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
@ -1370,7 +1373,7 @@ msgstr "Adresse physique (MAC) invalide"
#: ports/espressif/common-hal/_bleio/Characteristic.c
#: ports/espressif/common-hal/_bleio/Descriptor.c
msgid "MITM security not supported"
msgstr ""
msgstr "Sécurité MITM n'est pas supportée"
#: shared-bindings/is31fl3741/IS31FL3741.c
msgid "Mapping must be a tuple"
@ -1419,11 +1422,11 @@ msgstr ""
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Missing jmp_pin. %q[%u] jumps on pin"
msgstr ""
msgstr "Manque jmp_pin. %q[%u] effectue un saut sur broche"
#: shared-module/storage/__init__.c
msgid "Mount point directory missing"
msgstr ""
msgstr "Répertoire de montage manquant"
#: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c
msgid "Must be a %q subclass."
@ -1459,9 +1462,8 @@ msgid "New bitmap must be same size as old bitmap"
msgstr "La taille du nouveau bitmap doit être la même que l'ancien"
#: ports/espressif/common-hal/_bleio/__init__.c
#, fuzzy
msgid "Nimble out of memory"
msgstr "Nimble n'a plus de mémoire"
msgstr "Mémoire nimble épuisée"
#: ports/atmel-samd/common-hal/busio/UART.c
#: ports/espressif/common-hal/busio/SPI.c
@ -1511,7 +1513,7 @@ msgstr "Aucune IP"
#: ports/cxd56/common-hal/microcontroller/__init__.c
#: ports/mimxrt10xx/common-hal/microcontroller/__init__.c
msgid "No bootloader present"
msgstr ""
msgstr "Aucun bootloader présent"
#: shared-module/usb/core/Device.c
msgid "No configuration set"
@ -1607,13 +1609,13 @@ msgstr "Ne joue pas"
#: shared-module/jpegio/JpegDecoder.c
msgid "Not supported JPEG standard"
msgstr ""
msgstr "Standard JPEG non supporté"
#: ports/espressif/common-hal/paralleldisplaybus/ParallelBus.c
#: ports/espressif/common-hal/sdioio/SDCard.c
#, c-format
msgid "Number of data_pins must be %d or %d, not %d"
msgstr ""
msgstr "Nombre de data_pins doit être %d ou %d, pas %d"
#: shared-bindings/util.c
msgid ""
@ -1638,7 +1640,7 @@ msgstr "OK"
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
#, c-format
msgid "Only 8 or 16 bit mono with %dx oversampling supported."
msgstr ""
msgstr "Seulement 8 ou 16 bits mono avec suréchantillonnage %dx supporté."
#: ports/espressif/common-hal/wifi/__init__.c
#: ports/raspberrypi/common-hal/wifi/__init__.c
@ -1749,7 +1751,7 @@ msgstr "Canal A de PWM slice est utilisé"
#: shared-module/jpegio/JpegDecoder.c
msgid "Parameter error"
msgstr ""
msgstr "Erreur de paramètre"
#: ports/espressif/common-hal/audiobusio/__init__.c
msgid "Peripheral in use"
@ -1861,7 +1863,7 @@ msgstr "RISE_AND_FALL n'est pas disponible sur cette puce"
#: shared-module/displayio/OnDiskBitmap.c
msgid "RLE-compressed BMP not supported"
msgstr ""
msgstr "BMP avec compression RLE non supporté"
#: ports/stm/common-hal/os/__init__.c
msgid "RNG DeInit Error"
@ -1930,7 +1932,7 @@ msgstr "Canal droit non supporté"
#: shared-module/jpegio/JpegDecoder.c
msgid "Right format but not supported"
msgstr ""
msgstr "Format correct mais non supporté"
#: main.c
msgid "Running in safe mode! Not running saved code.\n"
@ -1953,7 +1955,7 @@ msgstr "Erreur de SDIO GetCardInfo %d"
#: ports/stm/common-hal/sdioio/SDCard.c
#, c-format
msgid "SDIO Init Error %x"
msgstr ""
msgstr "Erreur d'initialisation SDIO %x"
#: ports/espressif/common-hal/busio/SPI.c
msgid "SPI configuration failed"
@ -2020,7 +2022,7 @@ msgstr "Spécifiez une unique broche parmi data0 ou data_pins"
#: supervisor/shared/safe_mode.c
msgid "Stack overflow. Increase stack size."
msgstr ""
msgstr "Débordement de pile. Augmentez la taille de pile."
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Supply one of monotonic_time or epoch_time"
@ -2049,7 +2051,7 @@ msgstr "La taille de rgb_pins doit être 6, 12, 18, 24 ou 30"
#: shared-module/audiodelays/Echo.c shared-module/audiofilters/Filter.c
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's %q does not match"
msgstr ""
msgstr "Le %q de l'échantillon ne concorde pas"
#: supervisor/shared/safe_mode.c
msgid "Third-party firmware fatal error."
@ -2099,7 +2101,7 @@ msgstr "Trop de canaux dans l'échantillon."
#: ports/espressif/common-hal/_bleio/Characteristic.c
msgid "Too many descriptors"
msgstr ""
msgstr "Trop de descripteurs"
#: shared-module/displayio/__init__.c
msgid "Too many display busses; forgot displayio.release_displays() ?"
@ -2192,7 +2194,7 @@ msgstr "Impossible d'allouer des tampons pour une conversion signée"
#: supervisor/shared/safe_mode.c
msgid "Unable to allocate to the heap."
msgstr ""
msgstr "Impossible d'allouer sur le tas."
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
@ -2317,12 +2319,12 @@ msgstr "Algorithme de hachage non supporté"
#: ports/espressif/common-hal/socketpool/Socket.c
msgid "Unsupported socket type"
msgstr ""
msgstr "Type de socket non supporté"
#: ports/espressif/common-hal/_bleio/Adapter.c
#: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update failed"
msgstr ""
msgstr "Échec de mise à jour"
#: ports/espressif/common-hal/_bleio/Characteristic.c
#: ports/nordic/common-hal/_bleio/Characteristic.c
@ -2397,6 +2399,7 @@ msgstr "Vous avez appuyé les deux boutons au démarrage."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr "Vous avez appuyé le bouton A au démarrage."
@ -2411,7 +2414,7 @@ msgstr "Vous avez appuyé le bouton BOOT au démarrage"
#: ports/espressif/boards/adafruit_feather_esp32c6_4mbflash_nopsram/mpconfigboard.h
#: ports/espressif/boards/adafruit_itsybitsy_esp32/mpconfigboard.h
msgid "You pressed the BOOT button at start up."
msgstr ""
msgstr "Vous avez appuyé sur BOOT au démarrage."
#: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h
msgid "You pressed the GPIO0 button at start up."
@ -2497,6 +2500,7 @@ msgstr "argsort n'est pas implémenté pour les arrays aplatis"
#: extmod/ulab/code/numpy/random/random.c
msgid "argument must be None, an integer or a tuple of integers"
msgstr ""
"paramètre doit être None, un nombre entier ou un tuple de nombres entiers"
#: py/compile.c
msgid "argument name reused"
@ -2586,11 +2590,11 @@ msgstr "opération binaire '%q' non implémentée"
#: ports/espressif/common-hal/audiobusio/PDMIn.c
msgid "bit_depth must be 8, 16, 24, or 32."
msgstr ""
msgstr "bit_depth doit être 8, 16, 24 ou 32."
#: shared-module/bitmapfilter/__init__.c
msgid "bitmap size and depth must match"
msgstr ""
msgstr "taille et profondeur du bitmap doivent correspondre"
#: shared-bindings/bitmaptools/__init__.c
msgid "bitmap sizes must match"
@ -2635,7 +2639,7 @@ msgstr "tampon trop petit pour le nombre d'octets demandé"
#: py/emitbc.c
msgid "bytecode overflow"
msgstr ""
msgstr "débordement du bytecode"
#: py/objarray.c
msgid "bytes length not a multiple of item size"
@ -2740,7 +2744,7 @@ msgstr "opération binaire impossible entre '%q' et '%q'"
#: py/emitnative.c
msgid "can't do unary op of '%q'"
msgstr ""
msgstr "impossible d'effectuer l'opération unaire de '%q'"
#: py/emitnative.c
msgid "can't implicitly convert '%q' to 'bool'"
@ -2844,7 +2848,7 @@ msgstr "les éléments de la matrice ne peut être supprimés"
#: extmod/ulab/code/ndarray.c
msgid "cannot reshape array"
msgstr ""
msgstr "Impossible de transformer le tableau"
#: py/emitnative.c
msgid "casting"
@ -3390,7 +3394,7 @@ msgstr "interval doit être dans la portée %s-%s"
#: py/compile.c
msgid "invalid arch"
msgstr ""
msgstr "arch invalide"
#: shared-bindings/bitmaptools/__init__.c
#, c-format
@ -3479,6 +3483,7 @@ msgstr ""
#: py/argcheck.c
msgid "keyword argument(s) not implemented - use normal args instead"
msgstr ""
"paramètre mot clé non implanté - utilisez paramètres normaux à la place"
#: py/emitinlinethumb.c py/emitinlinextensa.c
msgid "label '%q' not defined"
@ -3488,10 +3493,6 @@ msgstr "label '%q' non supporté"
msgid "label redefined"
msgstr "étiquette redéfinie"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "le niveau doit être compris entre 0 et 1"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "les parties gauches et droites doivent être compatibles"
@ -3576,7 +3577,7 @@ msgstr "l'allocation de mémoire a échoué, le tas est vérrouillé"
#: py/objarray.c
msgid "memoryview offset too large"
msgstr ""
msgstr "décalage memoryview trop large"
#: py/objarray.c
msgid "memoryview: length is not a multiple of itemsize"
@ -3632,7 +3633,7 @@ msgstr "nom non défini"
#: py/qstr.c
msgid "name too long"
msgstr ""
msgstr "nom trop long"
#: py/persistentcode.c
msgid "native code in .mpy unsupported"
@ -3902,7 +3903,7 @@ msgstr "matrice de sortie est trop petite"
#: extmod/ulab/code/numpy/random/random.c
msgid "out has wrong type"
msgstr ""
msgstr "sortie est de type incorrect"
#: extmod/ulab/code/numpy/vector.c
msgid "out keyword is not supported for complex dtype"
@ -3930,11 +3931,11 @@ msgstr "hors de l'intervalle de la cible"
#: extmod/ulab/code/numpy/random/random.c
msgid "output array has wrong type"
msgstr ""
msgstr "tableau de sortie est de type incorrect"
#: extmod/ulab/code/numpy/random/random.c
msgid "output array must be contiguous"
msgstr ""
msgstr "tableau de sortie doit être contiguë"
#: py/objint_mpz.c
msgid "overflow converting long int to machine word"
@ -3980,11 +3981,11 @@ msgstr "port doit être >= 0"
#: py/compile.c
msgid "positional arg after **"
msgstr ""
msgstr "paramètre positionnel après **"
#: py/compile.c
msgid "positional arg after keyword arg"
msgstr ""
msgstr "argument positionnel après argument mot clé"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@ -4064,7 +4065,7 @@ msgstr "set non-supporté"
#: extmod/ulab/code/numpy/random/random.c
msgid "shape must be None, and integer or a tuple of integers"
msgstr ""
msgstr "shape doit être None et nombre entier ou un tuple de nombres entiers"
#: extmod/ulab/code/ndarray.c
msgid "shape must be integer or tuple of integers"
@ -4088,7 +4089,7 @@ msgstr "la taille n'est définie que pour les ndarrays"
#: extmod/ulab/code/numpy/random/random.c
msgid "size must match out.shape when used together"
msgstr ""
msgstr "taille doit correspondre à out.shape lorsqu'employés ensemble"
#: py/nativeglue.c
msgid "slice unsupported"
@ -4136,7 +4137,7 @@ msgstr "source_bitmap doit avoir une value_count de 8"
#: extmod/modre.c
msgid "splitting with sub-captures"
msgstr ""
msgstr "scission avec sous-captures"
#: py/objstr.c
msgid "start/end indices"
@ -4189,12 +4190,12 @@ msgstr "le délai (timeout) doit être < 655.35 secondes"
#: ports/raspberrypi/common-hal/floppyio/__init__.c
msgid "timeout waiting for flux"
msgstr ""
msgstr "délai d'expiration en attente du flux"
#: ports/raspberrypi/common-hal/floppyio/__init__.c
#: shared-module/floppyio/__init__.c
msgid "timeout waiting for index pulse"
msgstr ""
msgstr "délai d'expiration en attente de l'index de pulsation"
#: shared-module/sdcardio/SDCard.c
msgid "timeout waiting for v1 card"
@ -4346,7 +4347,7 @@ msgstr "instruction Xtensa '%s' non supportée avec %d paramètres"
#: shared-module/bitmapfilter/__init__.c
msgid "unsupported bitmap depth"
msgstr ""
msgstr "profondeur de bitmap non supportée"
#: shared-module/gifio/GifWriter.c
msgid "unsupported colorspace for GifWriter"
@ -4399,10 +4400,12 @@ msgid ""
"weights must be a sequence with an odd square number of elements (usually 9 "
"or 25)"
msgstr ""
"poids doit être une séquence avec nombre carré impair d'éléments "
"(habituellement 9 ou 25)"
#: shared-bindings/bitmapfilter/__init__.c
msgid "weights must be an object of type %q, %q, %q, or %q, not %q "
msgstr ""
msgstr "poids doit être un objet de type %q, %q, %q ou %q, pas %q. "
#: shared-bindings/is31fl3741/FrameBuffer.c
msgid "width must be greater than zero"
@ -4475,6 +4478,9 @@ msgstr "zi doit être de type float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi doit être de forme (n_section, 2)"
#~ msgid "level must be between 0 and 1"
#~ msgstr "le niveau doit être compris entre 0 et 1"
#~ msgid "init I2C"
#~ msgstr "initialisation I2C"

View file

@ -220,7 +220,7 @@ msgstr ""
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr ""
@ -797,6 +797,10 @@ msgstr ""
msgid "Cannot subclass slice"
msgstr ""
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr ""
@ -2313,6 +2317,7 @@ msgstr ""
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
@ -3385,10 +3390,6 @@ msgstr ""
msgid "label redefined"
msgstr ""
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr ""
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr ""

View file

@ -222,7 +222,7 @@ msgstr ""
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr ""
@ -803,6 +803,10 @@ msgstr ""
msgid "Cannot subclass slice"
msgstr "Impossibile subclasare slice"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr ""
@ -2328,6 +2332,7 @@ msgstr ""
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
@ -3413,10 +3418,6 @@ msgstr "etichetta '%q' non definita"
msgid "label redefined"
msgstr "etichetta ridefinita"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr ""
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "lhs e rhs devono essere compatibili"

View file

@ -232,7 +232,7 @@ msgstr "%q は 8 の倍数である必要があります"
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q は %q 型か %q 型である必要があります、 %q 型は使用できません"
@ -814,6 +814,10 @@ msgstr "RS485モードにRTSまたはCTSを指定できません"
msgid "Cannot subclass slice"
msgstr "sliceをサブクラス化することはできません"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr ""
@ -2336,6 +2340,7 @@ msgstr ""
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
@ -3413,10 +3418,6 @@ msgstr "ラベル'%q'は定義されていません"
msgid "label redefined"
msgstr "ラベルの再定義"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "levelは0から1の間でなければなりません"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "左辺と右辺が互換でなければなりません"
@ -4396,6 +4397,9 @@ msgstr "ziはfloat値でなければなりません"
msgid "zi must be of shape (n_section, 2)"
msgstr ""
#~ msgid "level must be between 0 and 1"
#~ msgstr "levelは0から1の間でなければなりません"
#~ msgid "The sample's bits_per_sample does not match the mixer's"
#~ msgstr "サンプルのbits_per_sampleがミキサーのそれと一致しません"

View file

@ -237,7 +237,7 @@ msgstr ""
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q는 %q가 아닌 %q 또는 %q 유형이어야 합니다"
@ -840,6 +840,10 @@ msgstr "RS485 모드에서는 RTS 또는 CTS를 지정할 수 없습니다"
msgid "Cannot subclass slice"
msgstr ""
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
#, fuzzy
msgid "Cannot wake on pin edge, only level"
@ -2391,6 +2395,7 @@ msgstr ""
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
@ -3463,10 +3468,6 @@ msgstr ""
msgid "label redefined"
msgstr ""
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr ""
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr ""

View file

@ -218,7 +218,7 @@ msgstr ""
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr ""
@ -798,6 +798,10 @@ msgstr "Kan RTS of CTS niet specificeren in RS485 modus"
msgid "Cannot subclass slice"
msgstr "Kan slice niet subclasseren"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr ""
@ -2331,6 +2335,7 @@ msgstr ""
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
@ -3409,10 +3414,6 @@ msgstr "label '%q' is niet gedefinieerd"
msgid "label redefined"
msgstr "label opnieuw gedefinieerd"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "level moet tussen 0 en 1 liggen"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "lhs en rhs moeten compatibel zijn"
@ -4392,6 +4393,9 @@ msgstr "zi moet van type float zijn"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi moet vorm (n_section, 2) hebben"
#~ msgid "level must be between 0 and 1"
#~ msgstr "level moet tussen 0 en 1 liggen"
#~ msgid "The sample's bits_per_sample does not match the mixer's"
#~ msgstr "De sample's bits_per_sample komen niet overeen met die van de mixer"

View file

@ -226,7 +226,7 @@ msgstr ""
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr ""
@ -809,6 +809,10 @@ msgstr "Nie można określić RTS ani CTS w trybie RS485"
msgid "Cannot subclass slice"
msgstr "Nie można dziedziczyć ze slice"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr ""
@ -2343,6 +2347,7 @@ msgstr ""
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
@ -3417,10 +3422,6 @@ msgstr "etykieta '%q' niezdefiniowana"
msgid "label redefined"
msgstr "etykieta przedefiniowana"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "poziom musi wynosić od 0 do 1"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "lewa i prawa strona powinny być kompatybilne"
@ -4400,6 +4401,9 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
#~ msgid "level must be between 0 and 1"
#~ msgstr "poziom musi wynosić od 0 do 1"
#~ msgid "The sample's bits_per_sample does not match the mixer's"
#~ msgstr "Wartość bits_per_sample nie pasuje do miksera"

View file

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2024-12-04 19:57+0000\n"
"PO-Revision-Date: 2025-01-12 00:19+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: \n"
"Language: pt_BR\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.9-dev\n"
"X-Generator: Weblate 5.10-dev\n"
#: main.c
msgid ""
@ -231,7 +231,7 @@ msgstr "%q deve ser um múltiplo de 8."
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q deve ser do tipo %q ou %q e não %q"
@ -817,6 +817,10 @@ msgstr "Não é possível definir o RTS ou CTS no modo RS485"
msgid "Cannot subclass slice"
msgstr "Não é possível subclassificar a fatia"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr "Não é possível usar GPIO0..15 junto com GPIO32..47"
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr "Não é possível acordar na borda do pino, nível apenas"
@ -2381,6 +2385,7 @@ msgstr "Você pressionou os dois botões durante a inicialização."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr "Você pressionou o botão A na inicialização."
@ -3467,10 +3472,6 @@ msgstr "o rótulo '%q' não foi definido"
msgid "label redefined"
msgstr "o rótulo foi redefinido"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "o nível deve estar entre 0 e 1"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "o lhs e rhs devem ser compatíveis"
@ -4460,6 +4461,9 @@ msgstr "zi deve ser de um tipo float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi deve estar na forma (n_section, 2)"
#~ msgid "level must be between 0 and 1"
#~ msgstr "o nível deve estar entre 0 e 1"
#~ msgid "init I2C"
#~ msgstr "inicialização do I2C"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-07-29 17:55+0000\n"
"PO-Revision-Date: 2025-01-13 14:00+0000\n"
"Last-Translator: gfbdrgng <hnaofegnp@hldrive.com>\n"
"Language-Team: none\n"
"Language: ru\n"
@ -16,7 +16,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.7-dev\n"
"X-Generator: Weblate 5.10-dev\n"
#: main.c
msgid ""
@ -204,7 +204,7 @@ msgstr "%q должно быть >= %d"
#: shared-module/audiofilters/Filter.c
msgid "%q must be a %q object, %q, or %q"
msgstr ""
msgstr "%q должен быть объектом %q, %q или %q"
#: shared-bindings/analogbufio/BufferedIn.c
msgid "%q must be a bytearray or array of type 'H' or 'B'"
@ -233,7 +233,7 @@ msgstr "%q должно быть кратно 8."
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q должно быть типа%q или%q, а не%q"
@ -436,7 +436,7 @@ msgstr "«метка» требует 1 аргумент"
#: py/emitnative.c
msgid "'not' not implemented"
msgstr ""
msgstr "'не' не реализовано"
#: py/compile.c
msgid "'return' outside function"
@ -572,7 +572,7 @@ msgstr "Уже есть универсальный слушатель"
#: ports/espressif/common-hal/_bleio/__init__.c
msgid "Already in progress"
msgstr ""
msgstr "Уже в процессе"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
@ -694,7 +694,7 @@ msgstr "Размер буфера %d слишком большой. Он дол
#: shared-module/sdcardio/SDCard.c
#, c-format
msgid "Buffer must be a multiple of %d bytes"
msgstr ""
msgstr "Буфер должен быть кратен %d байт"
#: shared-bindings/_bleio/PacketBuffer.c
#, c-format
@ -818,6 +818,10 @@ msgstr "Невозможно указать RTS или CTS в режиме RS485
msgid "Cannot subclass slice"
msgstr "Невозможно создать подкласс среза"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr "Невозможно использовать GPIO0..15 вместе с GPIO32..47"
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr ""
@ -1250,7 +1254,7 @@ msgstr "Недопустимый %q"
#: ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2350.c
#: shared-module/aurora_epaper/aurora_framebuffer.c
msgid "Invalid %q and %q"
msgstr ""
msgstr "Недопустимые %q и %q"
#: ports/atmel-samd/common-hal/microcontroller/Pin.c
#: ports/espressif/common-hal/dotclockframebuffer/DotClockFramebuffer.c
@ -1598,7 +1602,7 @@ msgstr "Не поддерживается Стандарт JPEG"
#: ports/espressif/common-hal/sdioio/SDCard.c
#, c-format
msgid "Number of data_pins must be %d or %d, not %d"
msgstr ""
msgstr "Количество выводов_данных должно быть %d или %d, а не %d"
#: shared-bindings/util.c
msgid ""
@ -1937,7 +1941,7 @@ msgstr "Ошибка получения информации о карте SDIO
#: ports/stm/common-hal/sdioio/SDCard.c
#, c-format
msgid "SDIO Init Error %x"
msgstr ""
msgstr "Ошибка инициализации SDIO %x"
#: ports/espressif/common-hal/busio/SPI.c
msgid "SPI configuration failed"
@ -2036,7 +2040,7 @@ msgstr "Длина rgb_pins должна быть 6, 12, 18, 24 или 30"
#: shared-module/audiodelays/Echo.c shared-module/audiofilters/Filter.c
#: shared-module/audiomixer/MixerVoice.c
msgid "The sample's %q does not match"
msgstr ""
msgstr "%q образца не совпадает"
#: supervisor/shared/safe_mode.c
msgid "Third-party firmware fatal error."
@ -2381,6 +2385,7 @@ msgstr "Вы нажали обе кнопки при запуске."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr "Вы нажали кнопку A при запуске."
@ -2480,7 +2485,7 @@ msgstr "сортировка arg не реализована для сглаже
#: extmod/ulab/code/numpy/random/random.c
msgid "argument must be None, an integer or a tuple of integers"
msgstr ""
msgstr "аргумент должен быть None, целым числом или кортежем целых чисел"
#: py/compile.c
msgid "argument name reused"
@ -2574,7 +2579,7 @@ msgstr "двоичная операция %q не реализована"
#: ports/espressif/common-hal/audiobusio/PDMIn.c
msgid "bit_depth must be 8, 16, 24, or 32."
msgstr ""
msgstr "Глубина_бита должна быть равна 8, 16, 24 или 32."
#: shared-module/bitmapfilter/__init__.c
msgid "bitmap size and depth must match"
@ -2728,7 +2733,7 @@ msgstr "Не могу выполнить двоичную операцию ме
#: py/emitnative.c
msgid "can't do unary op of '%q'"
msgstr ""
msgstr "Невозможно выполнить унарную операцию '%q'"
#: py/emitnative.c
msgid "can't implicitly convert '%q' to 'bool'"
@ -3472,10 +3477,6 @@ msgstr "Метка '%q' не определена"
msgid "label redefined"
msgstr "Метка переопределена"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "уровень должен быть между 0 и 1"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "lhs и rhs должны быть совместимыми"
@ -3618,7 +3619,7 @@ msgstr "Имя не определено"
#: py/qstr.c
msgid "name too long"
msgstr ""
msgstr "слишком длинное имя"
#: py/persistentcode.c
msgid "native code in .mpy unsupported"
@ -3886,7 +3887,7 @@ msgstr "Наш массив слишком мал"
#: extmod/ulab/code/numpy/random/random.c
msgid "out has wrong type"
msgstr ""
msgstr "out имеет неправильный тип"
#: extmod/ulab/code/numpy/vector.c
msgid "out keyword is not supported for complex dtype"
@ -3914,11 +3915,11 @@ msgstr "вне досягаемости цели"
#: extmod/ulab/code/numpy/random/random.c
msgid "output array has wrong type"
msgstr ""
msgstr "Выходной массив имеет неправильный тип"
#: extmod/ulab/code/numpy/random/random.c
msgid "output array must be contiguous"
msgstr ""
msgstr "выходной массив должен быть непрерывным"
#: py/objint_mpz.c
msgid "overflow converting long int to machine word"
@ -4048,7 +4049,7 @@ msgstr "Установить не поддерживается"
#: extmod/ulab/code/numpy/random/random.c
msgid "shape must be None, and integer or a tuple of integers"
msgstr ""
msgstr "форма должна быть None, целым числом или кортежем целых чисел"
#: extmod/ulab/code/ndarray.c
msgid "shape must be integer or tuple of integers"
@ -4072,7 +4073,7 @@ msgstr "размер определен только для массива ndarr
#: extmod/ulab/code/numpy/random/random.c
msgid "size must match out.shape when used together"
msgstr ""
msgstr "Размер должен соответствовать out.shape при совместном использовании"
#: py/nativeglue.c
msgid "slice unsupported"
@ -4464,6 +4465,9 @@ msgstr "zi должно быть типа float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi должен иметь форму (n_section, 2)"
#~ msgid "level must be between 0 and 1"
#~ msgstr "уровень должен быть между 0 и 1"
#~ msgid "init I2C"
#~ msgstr "инициализация I2C"

View file

@ -232,7 +232,7 @@ msgstr "%q måste vara en multipel av 8."
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q måste vara av typen %q eller %q, inte %q"
@ -813,6 +813,10 @@ msgstr "Det går inte att specificera RTS eller CTS i RS485-läget"
msgid "Cannot subclass slice"
msgstr "Det går inte att subklassa slice"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr "Kan inte vakna på pin edge, bara nivå"
@ -2357,6 +2361,7 @@ msgstr "Du tryckte ner båda knapparna vid start."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr "Du tryckte ner knapp A vid start."
@ -3436,10 +3441,6 @@ msgstr "etiketten '%q' har inte definierats"
msgid "label redefined"
msgstr "etiketten omdefinierad"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "level ska ligga mellan 0 och 1"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "lhs och rhs måste vara kompatibla"
@ -4419,6 +4420,9 @@ msgstr "zi måste vara av typ float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi måste vara i formen (n_section, 2)"
#~ msgid "level must be between 0 and 1"
#~ msgstr "level ska ligga mellan 0 och 1"
#~ msgid "init I2C"
#~ msgstr "I2C start"

View file

@ -231,7 +231,7 @@ msgstr ""
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr ""
@ -811,6 +811,10 @@ msgstr "RS485 modunda RTS veya CTS belirtilemez"
msgid "Cannot subclass slice"
msgstr ""
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr ""
@ -2335,6 +2339,7 @@ msgstr ""
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr ""
@ -3407,10 +3412,6 @@ msgstr ""
msgid "label redefined"
msgstr ""
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr ""
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr ""

View file

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: circuitpython-cn\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2024-11-17 01:00+0000\n"
"PO-Revision-Date: 2024-12-21 21:01+0000\n"
"Last-Translator: hexthat <hexthat@gmail.com>\n"
"Language-Team: Chinese Hanyu Pinyin\n"
"Language: zh_Latn_pinyin\n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.9-dev\n"
"X-Generator: Weblate 5.10-dev\n"
#: main.c
msgid ""
@ -233,7 +233,7 @@ msgstr "%q bìxū shì 8 debèishù."
#: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c
#: shared-bindings/bitmapfilter/__init__.c shared-bindings/canio/CAN.c
#: shared-bindings/digitalio/Pull.c shared-bindings/supervisor/__init__.c
#: shared-module/synthio/Synthesizer.c
#: shared-module/synthio/Biquad.c shared-module/synthio/Synthesizer.c
msgid "%q must be of type %q or %q, not %q"
msgstr "%q de lèi xíng bì xū shì %q huò %q, ér bù shì %q"
@ -815,6 +815,10 @@ msgstr "wúfǎ zài RS485 móshì xià zhǐdìng RTS huò CTS"
msgid "Cannot subclass slice"
msgstr "bùnéng zǐlèihuà qiēpiàn"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
msgstr "wúfǎ shǐyòng biānyuán huànxǐng, zhǐnéng shǐyòng diànpíng"
@ -2363,6 +2367,7 @@ msgstr "nín zài qǐ dòng shí àn xià le liǎng gè àn niǔ."
#: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h
#: ports/espressif/boards/m5stack_stick_c_plus2/mpconfigboard.h
msgid "You pressed button A at start up."
msgstr "nín zài qǐ dòng shí àn xià le àn niǔ A."
@ -2552,7 +2557,7 @@ msgstr "èrjìnzhì bǎn qián bǎn %q wèi zhíxíng"
#: ports/espressif/common-hal/audiobusio/PDMIn.c
msgid "bit_depth must be 8, 16, 24, or 32."
msgstr ""
msgstr "bit_depth bìxū shì 8, 16, 24, huò 32."
#: shared-module/bitmapfilter/__init__.c
msgid "bitmap size and depth must match"
@ -3442,10 +3447,6 @@ msgstr "biāoqiān '%q' wèi dìngyì"
msgid "label redefined"
msgstr "biāoqiān chóngxīn dìngyì"
#: shared-bindings/audiomixer/MixerVoice.c
msgid "level must be between 0 and 1"
msgstr "Level bìxū jiè yú 0 hé 1 zhī jiān"
#: py/objarray.c
msgid "lhs and rhs should be compatible"
msgstr "lhs hé rhs yīnggāi jiānróng"
@ -4431,6 +4432,9 @@ msgstr "zi bìxū wèi fú diǎn xíng"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)"
#~ msgid "level must be between 0 and 1"
#~ msgstr "Level bìxū jiè yú 0 hé 1 zhī jiān"
#~ msgid "init I2C"
#~ msgstr "chūshǐhuà I2C"

View file

@ -75,6 +75,7 @@ INC += \
-isystem esp-idf/components/esp_hw_support/dma/include \
-isystem esp-idf/components/esp_hw_support/include \
-isystem esp-idf/components/esp_hw_support/include/soc \
-isystem esp-idf/components/esp_hw_support/port/$(IDF_TARGET)/private_include \
-isystem esp-idf/components/esp_mm/include \
-isystem esp-idf/components/esp_netif/include \
-isystem esp-idf/components/esp_partition/include \
@ -245,6 +246,7 @@ CHIP_COMPONENTS = \
else ifeq ($(IDF_TARGET),esp32c2)
LDFLAGS += \
-Tesp32c2.rom.ble.ld \
-Tesp32c2.rom.heap.ld \
-Tesp32c2.rom.newlib.ld \
-Tesp32c2.rom.version.ld \
@ -261,7 +263,8 @@ LDFLAGS += \
-Tesp32c3.rom.newlib.ld \
-Tesp32c3.rom.newlib-time.ld \
-Tesp32c3.rom.version.ld \
-Tesp32c3.rom.eco3.ld
-Tesp32c3.rom.eco3.ld \
-Tesp32c3.rom.bt_funcs.ld
CHIP_COMPONENTS = \
esp_driver_tsens
@ -317,7 +320,8 @@ LDFLAGS += \
-Tesp32s3.rom.newlib.ld \
-Tesp32s3.rom.version.ld \
-Tesp32s3.rom.systimer.ld \
-Tesp32s3.rom.wdt.ld
-Tesp32s3.rom.wdt.ld \
-Tesp32s3.rom.bt_funcs.ld
CHIP_COMPONENTS = \
esp_driver_tsens
@ -626,8 +630,12 @@ ifneq ($(CIRCUITPY_BLEIO),0)
endif
ifeq ($(BLE_IMPL),libble)
BINARY_BLOBS += esp-idf/components/esp_phy/lib/$(IDF_TARGET)/libbtbb.a \
esp-idf/components/bt/controller/lib_$(IDF_TARGET)/$(IDF_TARGET)-bt-lib/libble_app.a
BINARY_BLOBS += esp-idf/components/esp_phy/lib/$(IDF_TARGET)/libbtbb.a
ifeq ($(IDF_TARGET),esp32c6)
BINARY_BLOBS += esp-idf/components/bt/controller/lib_$(IDF_TARGET)/$(IDF_TARGET)-bt-lib/$(IDF_TARGET)/libble_app.a
else
BINARY_BLOBS += esp-idf/components/bt/controller/lib_$(IDF_TARGET)/$(IDF_TARGET)-bt-lib/libble_app.a
endif
endif
endif
ifneq ($(CIRCUITPY_ESPULP),0)

View file

@ -0,0 +1,9 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View file

@ -0,0 +1,25 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2022 Dan Halbert for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#pragma once
// Micropython setup
#define MICROPY_HW_BOARD_NAME "Adafruit Mini Sparkle Motion"
#define MICROPY_HW_MCU_NAME "ESP32"
#define MICROPY_HW_LED_STATUS (&pin_GPIO12)
#define MICROPY_HW_NEOPIXEL (&pin_GPIO18)
#define CIRCUITPY_BOARD_I2C (1)
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO22, .sda = &pin_GPIO19}}
#define CIRCUITPY_BOARD_UART (1)
#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO25, .rx = &pin_GPIO26}}
// UART pins attached to the USB-serial converter chip
#define CIRCUITPY_CONSOLE_UART_TX (&pin_GPIO1)
#define CIRCUITPY_CONSOLE_UART_RX (&pin_GPIO3)

View file

@ -0,0 +1,11 @@
CIRCUITPY_CREATOR_ID = 0x0000239A
CIRCUITPY_CREATION_ID = 0x00320007
IDF_TARGET = esp32
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_BLEIO = 0
CIRCUITPY_ESPCAMERA = 0

View file

@ -0,0 +1,49 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
// External pins are in silkscreen order, from top to bottom, left side, then right side
{ MP_ROM_QSTR(MP_QSTR_BOOT), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_D27), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO25) },
{ MP_ROM_QSTR(MP_QSTR_D25), MP_ROM_PTR(&pin_GPIO25) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_D26), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_D33), MP_ROM_PTR(&pin_GPIO33) },
{ MP_ROM_QSTR(MP_QSTR_D32), MP_ROM_PTR(&pin_GPIO32) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_D18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_MIC), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_D22), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_D19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
{ MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -0,0 +1,9 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View file

@ -0,0 +1,25 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2022 Dan Halbert for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#pragma once
// Micropython setup
#define MICROPY_HW_BOARD_NAME "Adafruit Sparkle Motion"
#define MICROPY_HW_MCU_NAME "ESP32"
#define MICROPY_HW_LED_STATUS (&pin_GPIO4)
#define MICROPY_HW_NEOPIXEL (&pin_GPIO2)
#define CIRCUITPY_BOARD_I2C (1)
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO13, .sda = &pin_GPIO14}}
#define CIRCUITPY_BOARD_UART (1)
#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO9, .rx = &pin_GPIO10}}
// UART pins attached to the USB-serial converter chip
#define CIRCUITPY_CONSOLE_UART_TX (&pin_GPIO1)
#define CIRCUITPY_CONSOLE_UART_RX (&pin_GPIO3)

View file

@ -0,0 +1,11 @@
CIRCUITPY_CREATOR_ID = 0x0000239A
CIRCUITPY_CREATION_ID = 0x00320006
IDF_TARGET = esp32
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_BLEIO = 0
CIRCUITPY_ESPCAMERA = 0

View file

@ -0,0 +1,58 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
// External pins are in silkscreen order, from top to bottom, left side, then right side
{ MP_ROM_QSTR(MP_QSTR_IR), MP_ROM_PTR(&pin_GPIO32) },
{ MP_ROM_QSTR(MP_QSTR_D32), MP_ROM_PTR(&pin_GPIO32) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_SIG1), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_D21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_SIG2), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_D22), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_SIG3), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_D19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_BOOT), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_MIC), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_D27), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_SIG4), MP_ROM_PTR(&pin_GPIO23) },
{ MP_ROM_QSTR(MP_QSTR_D23), MP_ROM_PTR(&pin_GPIO23) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_D18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
{ MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -15,3 +15,6 @@
#define DEFAULT_UART_BUS_RX (&pin_GPIO38)
#define DEFAULT_UART_BUS_TX (&pin_GPIO37)
// Use the second USB device (numbered 0 and 1)
#define CIRCUITPY_USB_DEVICE_INSTANCE 1

View file

@ -1,22 +0,0 @@
#
# Espressif IoT Development Framework Configuration
#
#
# Component config
#
#
# ESP System Settings
#
CONFIG_ESP_CONSOLE_UART_CUSTOM=y
# CONFIG_ESP_CONSOLE_NONE is not set
CONFIG_ESP_CONSOLE_UART=y
CONFIG_ESP_CONSOLE_UART_CUSTOM_NUM_0=y
CONFIG_ESP_CONSOLE_UART_NUM=0
CONFIG_ESP_CONSOLE_UART_TX_GPIO=1
CONFIG_ESP_CONSOLE_UART_RX_GPIO=3
CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200
# end of ESP System Settings
# end of Component config
# end of Espressif IoT Development Framework Configuration

View file

@ -110,6 +110,8 @@ void cardputer_keyboard_init(void) {
row_addr_pins, // row_addr_pins
7, // num_column_pins
column_pins, // column_pins
true, // columns_to_anodes
false, // transpose
0.01f, // interval
20, // max_events
2 // debounce_threshold

View file

@ -0,0 +1,7 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: 2025 Stella Schwankl
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"

View file

@ -0,0 +1,20 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: 2025 Stella Schwankl
//
// SPDX-License-Identifier: MIT
#pragma once
// Micropython setup
#define MICROPY_HW_BOARD_NAME "M5Stack Stamp-S3"
#define MICROPY_HW_MCU_NAME "ESP32-S3FN8"
#define MICROPY_HW_NEOPIXEL (&pin_GPIO21)
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO15)
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO13)
#define DEFAULT_UART_BUS_RX (&pin_GPIO44)
#define DEFAULT_UART_BUS_TX (&pin_GPIO43)

View file

@ -0,0 +1,14 @@
USB_VID = 0x303A
USB_PID = 0x816B
USB_PRODUCT = "M5Stack StampS3 - CircuitPython"
USB_MANUFACTURER = "M5STACK"
IDF_TARGET = esp32s3
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 8MB
CIRCUITPY_ESPCAMERA = 0
# Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel

View file

@ -0,0 +1,152 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: 2025 Stella Schwankl
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
#include "shared-module/displayio/__init__.h"
CIRCUITPY_BOARD_BUS_SINGLETON(sd_spi, spi, 1)
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
// Button
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_G0), MP_ROM_PTR(&pin_GPIO0) },
// GPIO
{ MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_G1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_TCH1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_G2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_TCH2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_G3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_TCH3), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_G4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_TCH4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_G5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_TCH5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_G6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_TCH6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_G7), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_TCH7), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_A8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_G8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_TCH8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_A9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_G9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_TCH9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_A10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_G10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_TCH10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_A11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_G11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_TCH11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_A12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_G12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_TCH12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_A13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_G13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_TCH13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_A14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_G14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_TCH14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_A15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_G15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_G39), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_G40), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_G41), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_IO42), MP_ROM_PTR(&pin_GPIO42) },
{ MP_ROM_QSTR(MP_QSTR_G42), MP_ROM_PTR(&pin_GPIO42) },
{ MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_G43), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_G44), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_IO46), MP_ROM_PTR(&pin_GPIO46) },
{ MP_ROM_QSTR(MP_QSTR_G46), MP_ROM_PTR(&pin_GPIO46) },
// I2C
{ MP_ROM_QSTR(MP_QSTR_I2C_SCL), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_I2C_SDA), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
// UART
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
// Neopixel
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO21) },
// Display
{ MP_ROM_QSTR(MP_QSTR_TFT_RST), MP_ROM_PTR(&pin_GPIO33) },
{ MP_ROM_QSTR(MP_QSTR_TFT_RESET), MP_ROM_PTR(&pin_GPIO33) },
{ MP_ROM_QSTR(MP_QSTR_TFT_DC), MP_ROM_PTR(&pin_GPIO34) },
{ MP_ROM_QSTR(MP_QSTR_TFT_RS), MP_ROM_PTR(&pin_GPIO34) },
{ MP_ROM_QSTR(MP_QSTR_TFT_MOSI), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_TFT_DAT), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_TFT_DATA), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_TFT_SCK), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_TFT_CS), MP_ROM_PTR(&pin_GPIO37) },
{ MP_ROM_QSTR(MP_QSTR_TFT_BACKLIGHT), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_TFT_BL), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_TFT_SPI), MP_ROM_PTR(&board_spi_obj) },
// Extended Port Pins
{ MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_G16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_G17), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_G18), MP_ROM_PTR(&pin_GPIO18) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -0,0 +1,14 @@
#
# Espressif IoT Development Framework Configuration
#
#
# Component config
#
#
# LWIP
#
# end of LWIP
# end of Component config
# end of Espressif IoT Development Framework Configuration

View file

@ -0,0 +1,137 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2023 n0xa, 2025 bootc
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
#include "mpconfigboard.h"
#include "shared-bindings/busio/SPI.h"
#include "shared-bindings/busio/I2C.h"
#include "shared-bindings/fourwire/FourWire.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/displayio/mipi_constants.h"
#include "shared-bindings/board/__init__.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "driver/gpio.h"
#include "common-hal/microcontroller/Pin.h"
// display init sequence according to adafruit_st7735r.py library
uint8_t display_init_sequence[] = {
0x01, 0x80, 0x96, // SWRESET and Delay 150ms
0x11, 0x80, 0xff, // SLPOUT and Delay
0xb1, 0x03, 0x01, 0x2C, 0x2D, // _FRMCTR1
0xb2, 0x03, 0x01, 0x2C, 0x2D, // _FRMCTR2
0xb3, 0x06, 0x01, 0x2C, 0x2D, 0x01, 0x2C, 0x2D, // _FRMCTR3
0xb4, 0x01, 0x07, // _INVCTR line inversion
0xc0, 0x03, 0xa2, 0x02, 0x84, // _PWCTR1 GVDD = 4.7V, 1.0uA
0xc1, 0x01, 0xc5, // _PWCTR2 VGH=14.7V, VGL=-7.35V
0xc2, 0x02, 0x0a, 0x00, // _PWCTR3 Opamp current small, Boost frequency
0xc3, 0x02, 0x8a, 0x2a,
0xc4, 0x02, 0x8a, 0xee,
0xc5, 0x01, 0x0e, // _VMCTR1 VCOMH = 4V, VOML = -1.1V
0x36, 0x01, 0xc8, // MADCTL Rotate display
0x21, 0x00, // _INVON
0x3a, 0x01, 0x05, // COLMOD - 16bit color
0xe0, 0x10, 0x02, 0x1c, 0x07, 0x12, 0x37, 0x32, 0x29, 0x2d, 0x29, 0x25, 0x2B, 0x39, 0x00, 0x01, 0x03, 0x10, // _GMCTRP1 Gamma
0xe1, 0x10, 0x03, 0x1d, 0x07, 0x06, 0x2E, 0x2C, 0x29, 0x2D, 0x2E, 0x2E, 0x37, 0x3F, 0x00, 0x00, 0x02, 0x10, // _GMCTRN1
0x13, 0x80, 0x0a, // _NORON
0x29, 0x80, 0x64 // _DISPON
};
static void display_init(void) {
fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus;
busio_spi_obj_t *spi = &bus->inline_bus;
common_hal_busio_spi_construct(spi, &pin_GPIO13, &pin_GPIO15, NULL, false);
common_hal_busio_spi_never_reset(spi);
bus->base.type = &fourwire_fourwire_type;
common_hal_fourwire_fourwire_construct(
bus,
spi,
&pin_GPIO14, // DC
&pin_GPIO5, // CS
&pin_GPIO12, // RST
10000000, // baudrate
0, // polarity
0 // phase
);
busdisplay_busdisplay_obj_t *display = &allocate_display()->display;
display->base.type = &busdisplay_busdisplay_type;
common_hal_busdisplay_busdisplay_construct(
display,
bus,
135, // width (after rotation)
240, // height (after rotation)
40, // column start
52, // row start
1, // rotation
16, // color depth
false, // grayscale
false, // pixels in a byte share a row. Only valid for depths < 8
1, // bytes per cell. Only valid for depths < 8
false, // reverse_pixels_in_byte. Only valid for depths < 8
true, // reverse_pixels_in_word
MIPI_COMMAND_SET_COLUMN_ADDRESS, // set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // set row command
MIPI_COMMAND_WRITE_MEMORY_START, // write memory command
display_init_sequence,
sizeof(display_init_sequence),
&pin_GPIO27, // backlight pin
NO_BRIGHTNESS_COMMAND,
1.0f, // brightness
false, // single_byte_bounds
false, // data_as_commands
true, // auto_refresh
60, // native_frames_per_second
true, // backlight_on_high
false, // SH1107_addressing
50000 // backlight pwm frequency
);
}
void board_init(void) {
display_init();
}
bool board_requests_safe_mode(void) {
// Enable HOLD early on
config_pin_as_output_with_level(GPIO_NUM_4, true);
// Change the buttons to inputs
gpio_set_direction(GPIO_NUM_35, GPIO_MODE_INPUT);
gpio_set_pull_mode(GPIO_NUM_35, GPIO_FLOATING);
gpio_set_direction(GPIO_NUM_37, GPIO_MODE_INPUT);
gpio_set_pull_mode(GPIO_NUM_37, GPIO_FLOATING);
gpio_set_direction(GPIO_NUM_39, GPIO_MODE_INPUT);
gpio_set_pull_mode(GPIO_NUM_39, GPIO_FLOATING);
// Let the pins settle
mp_hal_delay_ms(1);
// Safe mode if BTN_A is held at boot (logic low)
return gpio_get_level(GPIO_NUM_37) == 0; // BTN_A
}
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
switch (pin_number) {
case GPIO_NUM_4: // HOLD
// HOLD(G4) pin must be set high to avoid a power off when battery powered
config_pin_as_output_with_level(pin_number, true);
return true;
case GPIO_NUM_35: // BTN_C/PWR
case GPIO_NUM_37: // BTN_A
case GPIO_NUM_39: // BTN_B
gpio_set_direction(pin_number, GPIO_MODE_INPUT);
gpio_set_pull_mode(pin_number, GPIO_FLOATING);
return true;
default:
return false;
}
return false;
}

View file

@ -0,0 +1,28 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2023 n0xa, 2025 bootc
//
// SPDX-License-Identifier: MIT
#pragma once
// Micropython setup
#define MICROPY_HW_BOARD_NAME "M5Stack Stick C Plus2"
#define MICROPY_HW_MCU_NAME "ESP32"
#define MICROPY_HW_LED_STATUS (&pin_GPIO19)
#define CIRCUITPY_BOARD_I2C (2)
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO22, .sda = &pin_GPIO21}, \
{.scl = &pin_GPIO33, .sda = &pin_GPIO32}}
// For entering safe mode
#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO37)
// Explanation of how a user got into safe mode
#define BOARD_USER_SAFE_MODE_ACTION MP_ERROR_TEXT("You pressed button A at start up.")
// UART pins attached to the USB-serial converter chip
#define CIRCUITPY_CONSOLE_UART_TX (&pin_GPIO1)
#define CIRCUITPY_CONSOLE_UART_RX (&pin_GPIO3)

View file

@ -0,0 +1,20 @@
CIRCUITPY_CREATOR_ID = 0x10151015
CIRCUITPY_CREATION_ID = 0x0032000C
IDF_TARGET = esp32
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 8MB
CIRCUITPY_ESP_PSRAM_MODE = qio
CIRCUITPY_ESP_PSRAM_FREQ = 80m
CIRCUITPY_ESP_PSRAM_SIZE = 2MB
# The safe mode wait gets us very close to the 3s time for the board to shut
# down when BTN_C/PWR is held down. We skip the wait and instead enter safe
# mode if BTN_A is held down during boot with no timeout.
CIRCUITPY_SKIP_SAFE_MODE_WAIT = 1
# Enable PDMIn for the microphone
CIRCUITPY_AUDIOBUSIO_PDMIN = 1

View file

@ -0,0 +1,78 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2023 n0xa, 2025 bootc
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
#include "shared-module/displayio/__init__.h"
CIRCUITPY_BOARD_BUS_SINGLETON(grove_i2c, i2c, 1)
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
// Pin port on the top
{ MP_ROM_QSTR(MP_QSTR_G26), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_G36), MP_ROM_PTR(&pin_GPIO36) }, // G36/G25 pin
{ MP_ROM_QSTR(MP_QSTR_G25), MP_ROM_PTR(&pin_GPIO25) }, // G36/G25 pin
{ MP_ROM_QSTR(MP_QSTR_G0), MP_ROM_PTR(&pin_GPIO0) }, // also PDM_MIC_CLK
// Grove port on the bottom
{ MP_ROM_QSTR(MP_QSTR_G32), MP_ROM_PTR(&pin_GPIO32) },
{ MP_ROM_QSTR(MP_QSTR_GROVE_SDA), MP_ROM_PTR(&pin_GPIO32) },
{ MP_ROM_QSTR(MP_QSTR_G33), MP_ROM_PTR(&pin_GPIO33) },
{ MP_ROM_QSTR(MP_QSTR_GROVE_SCL), MP_ROM_PTR(&pin_GPIO33) },
{ MP_ROM_QSTR(MP_QSTR_GROVE_I2C), MP_ROM_PTR(&board_grove_i2c_obj) },
// Buttons
{ MP_ROM_QSTR(MP_QSTR_G37), MP_ROM_PTR(&pin_GPIO37) },
{ MP_ROM_QSTR(MP_QSTR_BTN_A), MP_ROM_PTR(&pin_GPIO37) },
{ MP_ROM_QSTR(MP_QSTR_G39), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_BTN_B), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_G35), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_BTN_C), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_BTN_PWR), MP_ROM_PTR(&pin_GPIO35) }, // also WAKE
// Buzzer / Speaker
{ MP_ROM_QSTR(MP_QSTR_G2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_SPEAKER), MP_ROM_PTR(&pin_GPIO2) },
// Red and IR LED (single pin)
{ MP_ROM_QSTR(MP_QSTR_G19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_IR_LED), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO19) },
// LCD display
{ MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CLK), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_LCD_RST), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_LCD_BL), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)},
// Battery voltage sense
{ MP_ROM_QSTR(MP_QSTR_G38), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_BAT_ADC), MP_ROM_PTR(&pin_GPIO38) },
// Microphone
{ MP_ROM_QSTR(MP_QSTR_PDM_MIC_CLK), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_G34), MP_ROM_PTR(&pin_GPIO34) },
{ MP_ROM_QSTR(MP_QSTR_PDM_MIC_DATA), MP_ROM_PTR(&pin_GPIO34) },
// Internal I2C (IMU and RTC)
{ MP_ROM_QSTR(MP_QSTR_G21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_SYS_SDA), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_G22), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_SYS_SCL), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
// Sleep/Wake signal
{ MP_ROM_QSTR(MP_QSTR_WAKE), MP_ROM_PTR(&pin_GPIO35) },
// Power hold
{ MP_ROM_QSTR(MP_QSTR_G4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_HOLD), MP_ROM_PTR(&pin_GPIO4) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -0,0 +1,14 @@
#
# Espressif IoT Development Framework Configuration
#
#
# Component config
#
#
# LWIP
#
# end of LWIP
# end of Component config
# end of Espressif IoT Development Framework Configuration

View file

@ -12,8 +12,8 @@ CIRCUITPY_BOARD_BUS_SINGLETON(stemma_i2c, i2c, 1)
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{ MP_ROM_QSTR(MP_QSTR_BTN5), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_BTN5), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_LCD_LED), MP_ROM_PTR(&pin_GPIO19) },
@ -39,7 +39,6 @@ static const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_IN06), MP_ROM_PTR(&pin_GPIO34) },
{ MP_ROM_QSTR(MP_QSTR_IN07), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },

View file

@ -0,0 +1,111 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2024 Olav Schettler
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
#include "mpconfigboard.h"
#include "shared-bindings/board/__init__.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/displayio/mipi_constants.h"
#include "driver/gpio.h"
#include "common-hal/microcontroller/Pin.h"
#include "shared-module/os/__init__.h"
uint8_t display_init_sequence[] = {
0x01, 0x80, 0x80, // # Software reset then delay 0x80 (128ms)
0xEF, 0x03, 0x03, 0x80, 0x02,
0xCF, 0x03, 0x00, 0xC1, 0x30,
0xED, 0x04, 0x64, 0x03, 0x12, 0x81,
0xE8, 0x03, 0x85, 0x00, 0x78,
0xCB, 0x05, 0x39, 0x2C, 0x00, 0x34, 0x02,
0xF7, 0x01, 0x20,
0xEA, 0x02, 0x00, 0x00,
0xc0, 0x01, 0x23, // # Power control VRH[5:0]
0xc1, 0x01, 0x10, // # Power control SAP[2:0];BT[3:0]
0xc5, 0x02, 0x3e, 0x28, // # VCM control
0xc7, 0x01, 0x86, // # VCM control2
0x36, 0x01, 0x38, // # Memory Access Control
0x37, 0x01, 0x00, // # Vertical scroll zero
0x3a, 0x01, 0x55, // # COLMOD: Pixel Format Set
0xb1, 0x02, 0x00, 0x18, // # Frame Rate Control (In Normal Mode/Full Colors)
0xb6, 0x03, 0x08, 0x82, 0x27, // # Display Function Control
0xF2, 0x01, 0x00, // # 3Gamma Function Disable
0x26, 0x01, 0x01, // # Gamma curve selected
0xe0, 0x0f, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00, // # Set Gamma
0xe1, 0x0f, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F, // # Set Gamma
0x11, 0x80, 0x48, // # Exit Sleep then delay
0x29, 0x80, 0x78, // # Display on then delay 0x78 (120ms)
};
static void display_init(void) {
fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus;
busio_spi_obj_t *spi = &bus->inline_bus;
mp_int_t rotation;
common_hal_busio_spi_construct(spi, &pin_GPIO14, &pin_GPIO13, &pin_GPIO12, false);
common_hal_busio_spi_never_reset(spi);
bus->base.type = &fourwire_fourwire_type;
common_hal_fourwire_fourwire_construct(bus,
spi,
&pin_GPIO2, // TFT_DC Command or data
&pin_GPIO15, // TFT_CS Chip select
NULL, // TFT_RST Reset
6000000, // Baudrate
0, // Polarity
0); // Phase
busdisplay_busdisplay_obj_t *display = &allocate_display()->display;
display->base.type = &busdisplay_busdisplay_type;
os_getenv_err_t result = common_hal_os_getenv_int("CIRCUITPY_DISPLAY_ROTATION", &rotation);
if (result != GETENV_OK) {
rotation = 0;
}
common_hal_busdisplay_busdisplay_construct(display,
bus,
320, // Width
240, // Height
0, // column start
0, // row start
rotation, // rotation
16, // Color depth
false, // Grayscale
false, // pixels in a byte share a row. Only valid for depths < 8
1, // bytes per cell. Only valid for depths < 8
false, // reverse_pixels_in_byte. Only valid for depths < 8
true, // reverse_pixels_in_word
MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command
display_init_sequence,
sizeof(display_init_sequence),
&pin_GPIO27, // backlight pin
NO_BRIGHTNESS_COMMAND,
1.0f, // brightness
false, // single_byte_bounds
false, // data_as_commands
true, // auto_refresh
60, // native_frames_per_second
true, // backlight_on_high
false, // SH1107_addressing
50000); // backlight pwm frequency
}
void board_init(void) {
display_init();
}
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
// Pull the speaker pin low to reduce noise on reset
if (pin_number == 26) {
// Turn on TFT
config_pin_as_output_with_level(pin_number, false);
return true;
}
return false;
}
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View file

@ -0,0 +1,27 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2024 Olav Schettler
//
// SPDX-License-Identifier: MIT
#pragma once
// Micropython setup
#define MICROPY_HW_BOARD_NAME "sunton_esp32_2432S024C"
#define MICROPY_HW_MCU_NAME "ESP32-D0WD-V3"
#define MICROPY_HW_LED_STATUS (&pin_GPIO17) // LED_BLUE
#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO0)
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO33)
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO32)
#define CIRCUITPY_BOARD_SPI (2)
#define CIRCUITPY_BOARD_SPI_PIN { \
{.clock = &pin_GPIO18, .mosi = &pin_GPIO23, .miso = &pin_GPIO19}, /*SD*/ \
{.clock = &pin_GPIO14, .mosi = &pin_GPIO13, .miso = &pin_GPIO12}, /*LCD*/ \
}
#define CIRCUITPY_CONSOLE_UART_TX (&pin_GPIO1)
#define CIRCUITPY_CONSOLE_UART_RX (&pin_GPIO3)

View file

@ -0,0 +1,14 @@
CIRCUITPY_CREATOR_ID = 0x19991000
CIRCUITPY_CREATION_ID = 0x00AA024C
IDF_TARGET = esp32
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESPCAMERA = 0
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_BUILD_EXTENSIONS = bin

View file

@ -0,0 +1,68 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2024 Olav Schettler
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
#include "shared-module/displayio/__init__.h"
CIRCUITPY_BOARD_BUS_SINGLETON(sd_spi, spi, 0)
CIRCUITPY_BOARD_BUS_SINGLETON(lcd_spi, spi, 2)
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
// Boot button
{ MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) },
// Blue LED
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO17) },
// RGB LED
{ MP_ROM_QSTR(MP_QSTR_LED_GREEN), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_LED_RED), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_LED_BLUE), MP_ROM_PTR(&pin_GPIO17) },
// CDS Light sensor (Not present on all boards)
{ MP_ROM_QSTR(MP_QSTR_LDR), MP_ROM_PTR(&pin_GPIO34) },
// Speaker pin
{ MP_ROM_QSTR(MP_QSTR_SPEAKER), MP_ROM_PTR(&pin_GPIO26) },
// User available GPIO
{ MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) }, // P3 Pin 1
{ MP_ROM_QSTR(MP_QSTR_IO22), MP_ROM_PTR(&pin_GPIO22) }, // P3 Pin 2
{ MP_ROM_QSTR(MP_QSTR_IO35), MP_ROM_PTR(&pin_GPIO35) }, // P3 Pin 3
// i2c
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO33) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO32) },
// TF card slot
{ MP_ROM_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_GPIO23) },
{ MP_ROM_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_SD_SCK), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO5) },
// ILI9341 dsplay (spi)
{ MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_LCD_MISO), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_LCD_SCK), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_LCD_BCKL), MP_ROM_PTR(&pin_GPIO27) },
// Touch (CST820)
{ MP_ROM_QSTR(MP_QSTR_TOUCH_INT), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_TOUCH_RST), MP_ROM_PTR(&pin_GPIO25) },
// objects
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SD_SPI), MP_ROM_PTR(&board_sd_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_LCD_SPI), MP_ROM_PTR(&board_lcd_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -12,6 +12,7 @@
#include "shared-bindings/framebufferio/FramebufferDisplay.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/os/__init__.h"
static const mcu_pin_obj_t *blue_pins[] = {
&pin_GPIO8,
@ -37,6 +38,7 @@ static const mcu_pin_obj_t *red_pins[] = {
};
static void display_init(void) {
mp_int_t frequency;
// Turn on backlight
gpio_set_direction(2, GPIO_MODE_DEF_OUTPUT);
@ -45,6 +47,10 @@ static void display_init(void) {
dotclockframebuffer_framebuffer_obj_t *framebuffer = &allocate_display_bus_or_raise()->dotclock;
framebuffer->base.type = &dotclockframebuffer_framebuffer_type;
os_getenv_err_t result = common_hal_os_getenv_int("CIRCUITPY_DISPLAY_FREQUENCY", &frequency);
if (result != GETENV_OK) {
frequency = 12500000;
}
common_hal_dotclockframebuffer_framebuffer_construct(
framebuffer,
@ -55,7 +61,7 @@ static void display_init(void) {
red_pins, MP_ARRAY_SIZE(red_pins),
green_pins, MP_ARRAY_SIZE(green_pins),
blue_pins, MP_ARRAY_SIZE(blue_pins),
12500000, // Frequency
frequency, // Frequency
800, // width
480, // height
4, 8, 8, true, // horiz: pulse, back porch, front porch, idle low

View file

@ -0,0 +1,9 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View file

@ -0,0 +1,17 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#pragma once
// Micropython setup
#define MICROPY_HW_BOARD_NAME "Waveshare ESP32-S3-ETH"
#define MICROPY_HW_MCU_NAME "ESP32S3"
#define MICROPY_HW_NEOPIXEL (&pin_GPIO21)
#define DEFAULT_UART_BUS_RX (&pin_GPIO44)
#define DEFAULT_UART_BUS_TX (&pin_GPIO43)

View file

@ -0,0 +1,14 @@
USB_VID = 0x303a
USB_PID = 0x82a7
USB_PRODUCT = "ESP32-S3-ETH"
USB_MANUFACTURER = "Waveshare Electronics"
IDF_TARGET = esp32s3
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 16MB
CIRCUITPY_ESP_PSRAM_MODE = opi
CIRCUITPY_ESP_PSRAM_FREQ = 80m
CIRCUITPY_ESP_PSRAM_SIZE = 8MB

View file

@ -0,0 +1,80 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) },
// SD
{ MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_SD_CLK), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) },
// Ethernet
{ MP_ROM_QSTR(MP_QSTR_ETH_RST), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_ETH_INT), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_ETH_MOSI), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_ETH_MISO), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_ETH_CLK), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_ETH_CS), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) },
// USB - these pins are broken out on the header
// D_N
{ MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) },
// D_P
{ MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) },
// NeoPixel
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_IO33), MP_ROM_PTR(&pin_GPIO33) },
{ MP_ROM_QSTR(MP_QSTR_IO34), MP_ROM_PTR(&pin_GPIO34) },
{ MP_ROM_QSTR(MP_QSTR_IO35), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_IO37), MP_ROM_PTR(&pin_GPIO37) },
{ MP_ROM_QSTR(MP_QSTR_IO38), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_IO42), MP_ROM_PTR(&pin_GPIO42) },
// UART
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) },
{ MP_ROM_QSTR(MP_QSTR_IO46), MP_ROM_PTR(&pin_GPIO46) },
{ MP_ROM_QSTR(MP_QSTR_IO47), MP_ROM_PTR(&pin_GPIO47) },
{ MP_ROM_QSTR(MP_QSTR_IO48), MP_ROM_PTR(&pin_GPIO48) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -0,0 +1,14 @@
#
# Espressif IoT Development Framework Configuration
#
#
# Component config
#
#
# LWIP
#
# end of LWIP
# end of Component config
# end of Espressif IoT Development Framework Configuration

View file

@ -11,6 +11,7 @@
#define MICROPY_HW_BOARD_NAME "Waveshare ESP32-S3-Pico"
#define MICROPY_HW_MCU_NAME "ESP32S3"
#define MICROPY_HW_NEOPIXEL_ORDER_GRB (1)
#define MICROPY_HW_NEOPIXEL (&pin_GPIO21)
#define DEFAULT_UART_BUS_RX (&pin_GPIO12)

View file

@ -6,6 +6,7 @@
#include "shared-bindings/busio/I2C.h"
#include "py/mperrno.h"
#include "py/mphal.h"
#include "py/runtime.h"
#include "components/driver/i2c/include/driver/i2c.h"
@ -134,6 +135,12 @@ void common_hal_busio_i2c_deinit(busio_i2c_obj_t *self) {
bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) {
esp_err_t result = i2c_master_probe(self->handle, addr, 10);
#if defined(CONFIG_IDF_TARGET_ESP32S2)
// ESP32-S2 gives spurious results when probe is called multiple times in succession without this delay.
mp_hal_delay_ms(1);
#endif
return result == ESP_OK;
}

@ -1 +1 @@
Subproject commit 3ecf6bafcf045e0d2705ef49524456801df4f754
Subproject commit f388200aba73826b9039be6f4fb5385c6b7136c6

View file

@ -1,6 +1,10 @@
#
# Espressif IoT Development Framework Configuration
#
# Compiler options
#
CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS=y
# end of Compiler options
#
# Component config
#

View file

@ -1,6 +1,10 @@
#
# Espressif IoT Development Framework Configuration
#
# Compiler options
#
CONFIG_COMPILER_SAVE_RESTORE_LIBCALLS=y
# end of Compiler options
#
# Component config
#

View file

@ -17,8 +17,6 @@
#define CIRCUITPY_DIGITALIO_HAVE_INPUT_ONLY (1)
#define CIRCUITPY_USB_DEVICE_INSTANCE 1
#include "py/circuitpy_mpconfig.h"
#define MICROPY_NLR_SETJMP (1)

View file

@ -292,6 +292,10 @@ safe_mode_t port_init(void) {
break;
}
if (board_requests_safe_mode()) {
return SAFE_MODE_USER;
}
return SAFE_MODE_NONE;
}

View file

@ -89,9 +89,36 @@ void tud_cdc_rx_cb(uint8_t itf) {
}
#endif // CIRCUITPY_USB_DEVICE
#if defined(CONFIG_IDF_TARGET_ESP32S3)
// TEMPORARY WORKAROUND for https://github.com/hathach/tinyusb/issues/2943
#include "soc/rtc_cntl_struct.h"
#include "soc/usb_wrap_struct.h"
#endif
void init_usb_hardware(void) {
#if CIRCUITPY_USB_DEVICE
// Configure USB PHY
// TEMPORARY WORKAROUND for https://github.com/hathach/tinyusb/issues/2943
#if defined(CONFIG_IDF_TARGET_ESP32S3)
(void)phy_hdl;
periph_module_reset(PERIPH_USB_MODULE);
periph_module_enable(PERIPH_USB_MODULE);
USB_WRAP.otg_conf.pad_enable = 1;
// USB_OTG use internal PHY
USB_WRAP.otg_conf.phy_sel = 0;
// phy_sel is controlled by the following register value
RTCCNTL.usb_conf.sw_hw_usb_phy_sel = 1;
// phy_sel=sw_usb_phy_sel=1, USB_OTG is connected with internal PHY
RTCCNTL.usb_conf.sw_usb_phy_sel = 1;
gpio_set_drive_capability(USBPHY_DM_NUM, GPIO_DRIVE_CAP_3);
gpio_set_drive_capability(USBPHY_DP_NUM, GPIO_DRIVE_CAP_3);
#else
usb_phy_config_t phy_conf = {
.controller = USB_PHY_CTRL_OTG,
.target = USB_PHY_TARGET_INT,
@ -104,6 +131,7 @@ void init_usb_hardware(void) {
#endif
};
usb_new_phy(&phy_conf, &phy_hdl);
#endif
// Pin the USB task to the same core as CircuitPython. This way we leave
// the other core for networking.

View file

@ -139,10 +139,9 @@ def sym_default(sym):
# to n or the symbol to m in those cases).
if (
sym.choice
and not sym.choice.is_optional
and sym.choice._selection_from_defaults() is sym
and sym.orig_type is kconfiglib.core.BOOL
and sym.tri_value == 2
and sym.orig_type == kconfiglib.core.BOOL
and sym.bool_value == 2
):
return True

View file

@ -207,7 +207,7 @@ CFLAGS += $(OPTIMIZATION_FLAGS)
CFLAGS += $(CFLAGS_CYW43)
#Debugging/Optimization
ifeq ($(DEBUG), 1)
CFLAGS += -ggdb3 -O3
CFLAGS += -ggdb3 -Og
# No LTO because we may place some functions in RAM instead of flash.
else
CFLAGS += -DNDEBUG
@ -219,8 +219,7 @@ else
endif
endif
# Remove -Wno-stringop-overflow after we can test with CI's GCC 10. Mac's looks weird.
DISABLE_WARNINGS = -Wno-stringop-overflow -Wno-cast-align
DISABLE_WARNINGS = -Wno-cast-align
CFLAGS += $(INC) -Wall -Werror -std=gnu11 -fshort-enums $(BASE_CFLAGS) $(CFLAGS_MOD) $(COPT) $(DISABLE_WARNINGS) -Werror=missing-prototypes

View file

@ -24,9 +24,13 @@
//| import memorymap
//|
//| FifoType = Literal["auto", "txrx", "tx", "rx", "txput", "txget", "putget"]
//| """A type representing one of the strings ``"auto"``, ``"txrx"``, ``"tx"``, ``"rx"``, ``"txput"``, ``"txget"`` or ``"putget"``. These values are supported on RP2350. For type-checking only, not actually defined in CircuitPython."""
//| FifoType_piov0 = Literal["auto", "txrx", "tx", "rx"]
//| """A type representing one of the strings ``"auto"``, ``"txrx"``, ``"tx"``, or ``"rx"``. These values are supported on both RP2350 and RP2040. For type-checking only, not actually defined in CircuitPython."""
//| MovStatusType = Literal["txfifo", "rxfifo", "irq"]
//| """A type representing one of the strings ``"txfifo"``, ``"rxfifo"``, or ``"irq"``. These values are supported on RP2350. For type-checking only, not actually defined in CircuitPython."""
//| MovStatusType_piov0 = Literal["txfifo"]
//| """A type representing the string ``"txfifo"``. This value is supported on RP2350 and RP2040. For type-checking only, not actually defined in CircuitPython."""
//|
//| class StateMachine:
//| """A single PIO StateMachine
@ -152,8 +156,8 @@
//| :param int wrap: The instruction after which to wrap to the ``wrap``
//| instruction. As a special case, -1 (the default) indicates the
//| last instruction of the program.
//| :param FifoType fifo_type: How the program accessess the FIFOs. PIO version 0 only supports a subset of values.
//| :param MovStatusType mov_status_type: What condition the ``mov status`` instruction checks. PIO version 0 only supports a subset of values.
//| :param FifoType fifo_type: How the program accessess the FIFOs. PIO version 0 in the RP2040 only supports a subset of values, `FifoType_piov0`.
//| :param MovStatusType mov_status_type: What condition the ``mov status`` instruction checks. PIO version 0 in the RP2040 only supports a subset of values, `MovStatusType_piov0`.
//| :param MovStatusType mov_status_n: The FIFO depth or IRQ the ``mov status`` instruction checks for. For ``mov_status irq`` this includes the encoding of the ``next``/``prev`` selection bits.
//| """
//| ...
@ -330,14 +334,14 @@ static mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n
args[ARG_frequency].u_int,
init_bufinfo.buf, init_bufinfo.len / 2,
may_exec_bufinfo.buf, may_exec_bufinfo.len / 2,
first_out_pin, out_pin_count, args[ARG_initial_out_pin_state].u_int, args[ARG_initial_out_pin_direction].u_int,
first_in_pin, in_pin_count, args[ARG_pull_in_pin_up].u_int, args[ARG_pull_in_pin_down].u_int,
first_set_pin, set_pin_count, args[ARG_initial_set_pin_state].u_int, args[ARG_initial_set_pin_direction].u_int,
first_out_pin, out_pin_count, PIO_PINMASK32_FROM_VALUE(args[ARG_initial_out_pin_state].u_int), PIO_PINMASK32_FROM_VALUE(args[ARG_initial_out_pin_direction].u_int),
first_in_pin, in_pin_count, PIO_PINMASK32_FROM_VALUE(args[ARG_pull_in_pin_up].u_int), PIO_PINMASK32_FROM_VALUE(args[ARG_pull_in_pin_down].u_int),
first_set_pin, set_pin_count, PIO_PINMASK32_FROM_VALUE(args[ARG_initial_set_pin_state].u_int), PIO_PINMASK32_FROM_VALUE(args[ARG_initial_set_pin_direction].u_int),
first_sideset_pin, sideset_pin_count, args[ARG_sideset_pindirs].u_bool,
args[ARG_initial_sideset_pin_state].u_int, args[ARG_initial_sideset_pin_direction].u_int,
PIO_PINMASK32_FROM_VALUE(args[ARG_initial_sideset_pin_state].u_int), PIO_PINMASK32_FROM_VALUE(args[ARG_initial_sideset_pin_direction].u_int),
args[ARG_sideset_enable].u_bool,
jmp_pin, jmp_pin_pull,
0,
PIO_PINMASK_FROM_VALUE(0), // wait_gpio_mask
args[ARG_exclusive_pin_use].u_bool,
args[ARG_auto_pull].u_bool, pull_threshold, args[ARG_out_shift_right].u_bool,
args[ARG_wait_for_txstall].u_bool,

View file

@ -21,14 +21,14 @@ void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self,
size_t frequency,
const uint16_t *init, size_t init_len,
const uint16_t *may_exec, size_t may_exec_len,
const mcu_pin_obj_t *first_out_pin, uint8_t out_pin_count, uint32_t initial_out_pin_state, uint32_t initial_out_pin_direction,
const mcu_pin_obj_t *first_in_pin, uint8_t in_pin_count, uint32_t pull_pin_up, uint32_t pull_pin_down,
const mcu_pin_obj_t *first_set_pin, uint8_t set_pin_count, uint32_t initial_set_pin_state, uint32_t initial_set_pin_direction,
const mcu_pin_obj_t *first_out_pin, uint8_t out_pin_count, pio_pinmask32_t initial_out_pin_state, pio_pinmask32_t initial_out_pin_direction,
const mcu_pin_obj_t *first_in_pin, uint8_t in_pin_count, pio_pinmask32_t in_pull_pin_up, pio_pinmask32_t in_pull_pin_down,
const mcu_pin_obj_t *first_set_pin, uint8_t set_pin_count, pio_pinmask32_t initial_set_pin_state, pio_pinmask32_t initial_set_pin_direction,
const mcu_pin_obj_t *first_sideset_pin, uint8_t sideset_pin_count, bool sideset_pindirs,
uint32_t initial_sideset_pin_state, uint32_t initial_sideset_pin_direction,
pio_pinmask32_t initial_sideset_pin_state, pio_pinmask32_t initial_sideset_pin_direction,
bool sideset_enable,
const mcu_pin_obj_t *jmp_pin, digitalio_pull_t jmp_pin_pull,
uint32_t wait_gpio_mask,
pio_pinmask_t wait_gpio_mask,
bool exclusive_pin_use,
bool auto_pull, uint8_t pull_threshold, bool out_shift_right,
bool wait_for_txstall,

View file

@ -0,0 +1,9 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View file

@ -0,0 +1,21 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#pragma once
#define MICROPY_HW_BOARD_NAME "8086 RP2040 Interfacer"
#define MICROPY_HW_MCU_NAME "rp2040"
#define MICROPY_HW_LED_STATUS (&pin_GPIO16)
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO27)
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO26)
#define DEFAULT_UART_BUS_RX (&pin_GPIO13)
#define DEFAULT_UART_BUS_TX (&pin_GPIO12)
// #define CIRCUITPY_CONSOLE_UART_RX DEFAULT_UART_BUS_RX
// #define CIRCUITPY_CONSOLE_UART_TX DEFAULT_UART_BUS_TX

View file

@ -0,0 +1,9 @@
USB_VID = 0x3171
USB_PID = 0x010D
USB_PRODUCT = "RP2040 Interfacer"
USB_MANUFACTURER = "8086 Consultancy"
CHIP_VARIANT = RP2040
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"

View file

@ -0,0 +1,12 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#pragma once
// Put board-specific pico-sdk definitions here. This file must exist.
// Allow extra time for xosc to start.
#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64

View file

@ -0,0 +1,48 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_GP26), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_PULL_SDA), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_GP18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_PULL_SCL), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_GP19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_GP16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_LED_UART), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_GP14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_LED_STQW), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_GP17), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_GP13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_GP12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO23) },
{ MP_ROM_QSTR(MP_QSTR_GP23), MP_ROM_PTR(&pin_GPIO23) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -37,9 +37,14 @@ static const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D22), MP_ROM_PTR(&pin_GPIO22) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO23) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D23), MP_ROM_PTR(&pin_GPIO23) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO24) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_BOOT), MP_ROM_PTR(&pin_GPIO24) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO20) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_D20), MP_ROM_PTR(&pin_GPIO20) },

View file

@ -0,0 +1,93 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
#include "mpconfigboard.h"
#include "shared-bindings/busio/SPI.h"
#include "shared-bindings/fourwire/FourWire.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/displayio/mipi_constants.h"
#include "supervisor/shared/board.h"
#define DELAY 0x80
uint8_t display_init_sequence[] = {
0x01, 0 | DELAY, 150, // SWRESET
0x36, 1, 0x04, // MADCTL
0x35, 1, 0x00, // TEON
0xB2, 5, 0x0c, 0x0c, 0x00, 0x33, 0x33, // FRMCTR2
0x3A, 1, 0x05, // COLMOD
0xB7, 1, 0x14, // GCTRL
0xBB, 1, 0x37, // VCOMS
0xC0, 1, 0x2c, // LCMCTRL
0xC2, 1, 0x01, // VDVVRHEN
0xC3, 1, 0x12, // VRHS
0xC4, 1, 0x20, // VDVS
0xD0, 2, 0xa4, 0xa1, // PWRCTRL1
0xC6, 1, 0x0f, // FRCTRL2
0xE0, 14, 0xd0, 0x04, 0x0d, 0x11, 0x13, 0x2b, 0x3f, 0x54, 0x4c, 0x18, 0x0d, 0x0b, 0x1f, 0x23, // GMCTRP1
0xE1, 14, 0xd0, 0x04, 0x0c, 0x11, 0x13, 0x2c, 0x3f, 0x44, 0x51, 0x2f, 0x1f, 0x1f, 0x20, 0x23, // GMCTRN1
0x21, 0, // INVON
0x11, 0 | DELAY, 255, // SLPOUT
0x29, 0 | DELAY, 100, // DISPON
0x2a, 4, 0x00, 0, 0x00, 0xfe, // CASET
0x2b, 4, 0x00, 0, 0x00, 0xfe, // RASET
0x2c, 0, // RAMWR
};
void board_init(void) {
fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus;
busio_spi_obj_t *spi = &bus->inline_bus;
common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO19, NULL, false);
common_hal_busio_spi_never_reset(spi);
bus->base.type = &fourwire_fourwire_type;
common_hal_fourwire_fourwire_construct(bus,
spi,
&pin_GPIO16, // TFT_DC Command or data
&pin_GPIO17, // TFT_CS Chip select
NULL, // TFT_RST Reset
62500000, // Baudrate
0, // Polarity
0); // Phase
busdisplay_busdisplay_obj_t *display = &allocate_display()->display;
display->base.type = &busdisplay_busdisplay_type;
common_hal_busdisplay_busdisplay_construct(display,
bus,
240, // Width
280, // Height
0, // column start
20, // row start
0, // rotation
16, // Color depth
false, // Grayscale
false, // pixels in a byte share a row. Only valid for depths < 8
1, // bytes per cell. Only valid for depths < 8
false, // reverse_pixels_in_byte. Only valid for depths < 8
true, // reverse_bytes_in_word
MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command
display_init_sequence,
sizeof(display_init_sequence),
NULL, // no backlight pin
NO_BRIGHTNESS_COMMAND,
1.0f, // brightness
false, // single_byte_bounds
false, // data_as_commands
true, // auto_refresh
60, // native_frames_per_second
true, // backlight_on_high
false, // SH1107_addressing
0); // backlight pwm frequency
}
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View file

@ -0,0 +1,20 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#pragma once
#define MICROPY_HW_BOARD_NAME "HEIA-FR Picomo V3"
#define MICROPY_HW_MCU_NAME "rp2040"
#define CIRCUITPY_RGB_STATUS_R (&pin_GPIO10)
#define CIRCUITPY_RGB_STATUS_G (&pin_GPIO9)
#define CIRCUITPY_RGB_STATUS_B (&pin_GPIO8)
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO21)
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO20)
#define DEFAULT_SPI_BUS_SCK (&pin_GPIO18)
#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO19)

View file

@ -0,0 +1,18 @@
USB_VID = 0x2E8A
USB_PID = 0x10C4
USB_PRODUCT = "Picomo V3"
USB_MANUFACTURER = "HEIA-FR"
CHIP_VARIANT = RP2040
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"
CIRCUITPY__EVE = 1
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Register
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_ST7789
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Display_Shapes
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Display_Text
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_ProgressBar

View file

@ -0,0 +1,9 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#pragma once
// Put board-specific pico-sdk definitions here. This file must exist.

View file

@ -0,0 +1,110 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
#include "shared-module/displayio/__init__.h"
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{MP_ROM_QSTR(MP_QSTR_GP0), MP_ROM_PTR(&pin_GPIO0)},
{MP_ROM_QSTR(MP_QSTR_GP1), MP_ROM_PTR(&pin_GPIO1)},
{MP_ROM_QSTR(MP_QSTR_GP2), MP_ROM_PTR(&pin_GPIO2)},
{MP_ROM_QSTR(MP_QSTR_SW_UP), MP_ROM_PTR(&pin_GPIO3)},
{MP_ROM_QSTR(MP_QSTR_S1), MP_ROM_PTR(&pin_GPIO3)},
{MP_ROM_QSTR(MP_QSTR_GP3), MP_ROM_PTR(&pin_GPIO3)},
{MP_ROM_QSTR(MP_QSTR_SW_MID), MP_ROM_PTR(&pin_GPIO4)},
{MP_ROM_QSTR(MP_QSTR_S5), MP_ROM_PTR(&pin_GPIO4)},
{MP_ROM_QSTR(MP_QSTR_GP4), MP_ROM_PTR(&pin_GPIO4)},
{MP_ROM_QSTR(MP_QSTR_SW_DOWN), MP_ROM_PTR(&pin_GPIO5)},
{MP_ROM_QSTR(MP_QSTR_S2), MP_ROM_PTR(&pin_GPIO5)},
{MP_ROM_QSTR(MP_QSTR_GP5), MP_ROM_PTR(&pin_GPIO5)},
{MP_ROM_QSTR(MP_QSTR_SW_TOPR), MP_ROM_PTR(&pin_GPIO6)},
{MP_ROM_QSTR(MP_QSTR_BOOTSEL), MP_ROM_PTR(&pin_GPIO6)},
{MP_ROM_QSTR(MP_QSTR_S7), MP_ROM_PTR(&pin_GPIO6)},
{MP_ROM_QSTR(MP_QSTR_GP6), MP_ROM_PTR(&pin_GPIO6)},
{MP_ROM_QSTR(MP_QSTR_SW_RIGHT), MP_ROM_PTR(&pin_GPIO7)},
{MP_ROM_QSTR(MP_QSTR_S4), MP_ROM_PTR(&pin_GPIO7)},
{MP_ROM_QSTR(MP_QSTR_GP7), MP_ROM_PTR(&pin_GPIO7)},
{MP_ROM_QSTR(MP_QSTR_LED_B), MP_ROM_PTR(&pin_GPIO8)},
{MP_ROM_QSTR(MP_QSTR_GP8), MP_ROM_PTR(&pin_GPIO8)},
{MP_ROM_QSTR(MP_QSTR_LED_G), MP_ROM_PTR(&pin_GPIO9)},
{MP_ROM_QSTR(MP_QSTR_GP9), MP_ROM_PTR(&pin_GPIO9)},
{MP_ROM_QSTR(MP_QSTR_LED_R), MP_ROM_PTR(&pin_GPIO10)},
{MP_ROM_QSTR(MP_QSTR_GP10), MP_ROM_PTR(&pin_GPIO10)},
{MP_ROM_QSTR(MP_QSTR_GP11), MP_ROM_PTR(&pin_GPIO11)},
{MP_ROM_QSTR(MP_QSTR_GP12), MP_ROM_PTR(&pin_GPIO12)},
{MP_ROM_QSTR(MP_QSTR_BUZZER), MP_ROM_PTR(&pin_GPIO12)},
{MP_ROM_QSTR(MP_QSTR_GP13), MP_ROM_PTR(&pin_GPIO13)},
{MP_ROM_QSTR(MP_QSTR_VER_MSB), MP_ROM_PTR(&pin_GPIO13)},
{MP_ROM_QSTR(MP_QSTR_GP14), MP_ROM_PTR(&pin_GPIO14)},
{MP_ROM_QSTR(MP_QSTR_VER_LSB), MP_ROM_PTR(&pin_GPIO14)},
{MP_ROM_QSTR(MP_QSTR_GP15), MP_ROM_PTR(&pin_GPIO15)},
{MP_ROM_QSTR(MP_QSTR_DISP_DC), MP_ROM_PTR(&pin_GPIO16)},
{MP_ROM_QSTR(MP_QSTR_GP16), MP_ROM_PTR(&pin_GPIO16)},
{MP_ROM_QSTR(MP_QSTR_DISP_CS), MP_ROM_PTR(&pin_GPIO17)},
{MP_ROM_QSTR(MP_QSTR_GP17), MP_ROM_PTR(&pin_GPIO17)},
{MP_ROM_QSTR(MP_QSTR_DISP_SCL), MP_ROM_PTR(&pin_GPIO18)},
{MP_ROM_QSTR(MP_QSTR_GP18), MP_ROM_PTR(&pin_GPIO18)},
{MP_ROM_QSTR(MP_QSTR_DISP_SDA), MP_ROM_PTR(&pin_GPIO19)},
{MP_ROM_QSTR(MP_QSTR_GP19), MP_ROM_PTR(&pin_GPIO19)},
{MP_ROM_QSTR(MP_QSTR_TEMP_SDA), MP_ROM_PTR(&pin_GPIO20)},
{MP_ROM_QSTR(MP_QSTR_GP20), MP_ROM_PTR(&pin_GPIO20)},
{MP_ROM_QSTR(MP_QSTR_TEMP_SCL), MP_ROM_PTR(&pin_GPIO21)},
{MP_ROM_QSTR(MP_QSTR_GP21), MP_ROM_PTR(&pin_GPIO21)},
{MP_ROM_QSTR(MP_QSTR_SW_LEFT), MP_ROM_PTR(&pin_GPIO22)},
{MP_ROM_QSTR(MP_QSTR_S3), MP_ROM_PTR(&pin_GPIO22)},
{MP_ROM_QSTR(MP_QSTR_GP22), MP_ROM_PTR(&pin_GPIO22)},
{MP_ROM_QSTR(MP_QSTR_SW_TOPL), MP_ROM_PTR(&pin_GPIO23)},
{MP_ROM_QSTR(MP_QSTR_S6), MP_ROM_PTR(&pin_GPIO23)},
{MP_ROM_QSTR(MP_QSTR_GP23), MP_ROM_PTR(&pin_GPIO23)},
{MP_ROM_QSTR(MP_QSTR_USB_OVCUR), MP_ROM_PTR(&pin_GPIO24)},
{MP_ROM_QSTR(MP_QSTR_GP24), MP_ROM_PTR(&pin_GPIO24)},
{MP_ROM_QSTR(MP_QSTR_GP25), MP_ROM_PTR(&pin_GPIO25)},
{MP_ROM_QSTR(MP_QSTR_GP26_A0), MP_ROM_PTR(&pin_GPIO26)},
{MP_ROM_QSTR(MP_QSTR_GP26), MP_ROM_PTR(&pin_GPIO26)},
{MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26)},
{MP_ROM_QSTR(MP_QSTR_GP27_A1), MP_ROM_PTR(&pin_GPIO27)},
{MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27)},
{MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27)},
{MP_ROM_QSTR(MP_QSTR_GP28_A2), MP_ROM_PTR(&pin_GPIO28)},
{MP_ROM_QSTR(MP_QSTR_GP28), MP_ROM_PTR(&pin_GPIO28)},
{MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28)},
{MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO29)},
{MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_GPIO29)},
{MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj)},
{MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj)},
{MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)},
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -0,0 +1,9 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View file

@ -0,0 +1 @@
firmware_size = 3064k;

View file

@ -0,0 +1,29 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2024 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#define MICROPY_HW_BOARD_NAME "Pimoroni Plasma 2350W"
#define MICROPY_HW_MCU_NAME "rp2350A"
#define CIRCUITPY_RGB_STATUS_INVERTED_PWM
#define CIRCUITPY_RGB_STATUS_R (&pin_GPIO16)
#define CIRCUITPY_RGB_STATUS_G (&pin_GPIO17)
#define CIRCUITPY_RGB_STATUS_B (&pin_GPIO18)
#define CIRCUITPY_BOARD_I2C (1)
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO21, .sda = &pin_GPIO20}}
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO21)
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO20)
#define DEFAULT_SPI_BUS_SCK (&pin_GPIO10)
#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO11)
#define DEFAULT_SPI_BUS_MISO (&pin_GPIO8)
#define DEFAULT_UART_BUS_RX (&pin_GPIO1)
#define DEFAULT_UART_BUS_TX (&pin_GPIO0)
#define CIRCUITPY_DIGITALIO_HAVE_INVALID_PULL (1)
#define CIRCUITPY_DIGITALIO_HAVE_INVALID_DRIVE_MODE (1)

View file

@ -0,0 +1,35 @@
USB_VID = 0x2E8A
USB_PID = 0x10BF
USB_PRODUCT = "Plasma 2350 W"
USB_MANUFACTURER = "Pimoroni"
CHIP_VARIANT = RP2350
CHIP_PACKAGE = A
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q32JVxQ"
CIRCUITPY__EVE = 1
CIRCUITPY_CYW43 = 1
CIRCUITPY_SSL = 1
CIRCUITPY_HASHLIB = 1
CIRCUITPY_WEB_WORKFLOW = 1
CIRCUITPY_MDNS = 1
CIRCUITPY_SOCKETPOOL = 1
CIRCUITPY_WIFI = 1
CIRCUITPY_PICODVI = 0
CIRCUITPY_USB_HOST = 0
CFLAGS += \
-DCYW43_PIN_WL_DYNAMIC=0 \
-DCYW43_DEFAULT_PIN_WL_HOST_WAKE=24 \
-DCYW43_DEFAULT_PIN_WL_REG_ON=23 \
-DCYW43_DEFAULT_PIN_WL_CLOCK=29 \
-DCYW43_DEFAULT_PIN_WL_DATA_IN=24 \
-DCYW43_DEFAULT_PIN_WL_DATA_OUT=24 \
-DCYW43_DEFAULT_PIN_WL_CS=25 \
-DCYW43_WL_GPIO_COUNT=3 \
-DCYW43_WL_GPIO_LED_PIN=0
# Must be accompanied by a linker script change
CFLAGS += -DCIRCUITPY_FIRMWARE_SIZE='(3064 * 1024)'

View file

@ -0,0 +1,7 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
// Put board-specific pico-sdk definitions here. This file must exist.

View file

@ -0,0 +1,78 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2024 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
{ MP_ROM_QSTR(MP_QSTR_GP0), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_GP1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO1) },
// GPIO2 through GPIO11 are unconnected
{ MP_ROM_QSTR(MP_QSTR_GP12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_SW_A), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO12) },
// GPIO13 is unconnected
{ MP_ROM_QSTR(MP_QSTR_GP14), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_CLK), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_GP15), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_DATA), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_GP16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_LED_R), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_GP17), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_LED_G), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_GP18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_LED_B), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_GP19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_INT), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_GP20), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_GP21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_GP22), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_SW_BOOT), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_BOOT), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_USER_SW), MP_ROM_PTR(&pin_GPIO22) },
// GPIO23 through GPIO25 are connected to the RM2 module
{ MP_ROM_QSTR(MP_QSTR_GP26), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_GP26_A0), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) },
{ MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_GP27_A1), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) },
{ MP_ROM_QSTR(MP_QSTR_GP28), MP_ROM_PTR(&pin_GPIO28) },
{ MP_ROM_QSTR(MP_QSTR_GP28_A2), MP_ROM_PTR(&pin_GPIO28) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28) },
// GPIO29 is connected to the RM2 module
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -0,0 +1,86 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2024 Adafruit Industries LLC
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
#include "mpconfigboard.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/displayio/mipi_constants.h"
#include "shared-bindings/board/__init__.h"
#define DELAY 0x80
// display init sequence according to https://github.com/adafruit/Adafruit_CircuitPython_ST7789
uint8_t display_init_sequence[] = {
0x01, 0 | DELAY, 0x96, // _SWRESET and Delay 150ms
0x11, 0 | DELAY, 0xFF, // _SLPOUT and Delay 500ms
0x3A, 0x81, 0x55, 0x0A, // _COLMOD and Delay 10ms
0x36, 0x01, 0x08, // _MADCTL
0x21, 0 | DELAY, 0x0A, // _INVON Hack and Delay 10ms
0x13, 0 | DELAY, 0x0A, // _NORON and Delay 10ms
0x36, 0x01, 0xC0, // _MADCTL
0x29, 0 | DELAY, 0xFF, // _DISPON and Delay 500ms
};
static void display_init(void) {
busio_spi_obj_t *spi = common_hal_board_create_spi(0);
fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus;
bus->base.type = &fourwire_fourwire_type;
common_hal_fourwire_fourwire_construct(
bus,
spi,
&pin_GPIO8, // TFT_DC
&pin_GPIO9, // TFT_CS
&pin_GPIO12, // TFT_RST
50000000, // Baudrate
0, // Polarity
0 // Phase
);
busdisplay_busdisplay_obj_t *display = &allocate_display()->display;
display->base.type = &busdisplay_busdisplay_type;
common_hal_busdisplay_busdisplay_construct(
display,
bus,
240, // Width
135, // Height
53, // column start
40, // row start
270, // rotation
16, // Color depth
false, // Grayscale
false, // Pixels in a byte share a row
1, // bytes per cell
false, // reverse_pixels_in_byte
true, // reverse_pixels_in_word
MIPI_COMMAND_SET_COLUMN_ADDRESS, // set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // set row command
MIPI_COMMAND_WRITE_MEMORY_START, // write memory command
display_init_sequence,
sizeof(display_init_sequence),
&pin_GPIO25, // backlight pin
NO_BRIGHTNESS_COMMAND,
1.0f, // brightness
false, // single_byte_bounds
false, // data_as_commands
true, // auto_refresh
60, // native_frames_per_second
true, // backlight_on_high
false, // SH1107_addressing
1000 // backlight pwm frequency
);
}
void board_init(void) {
display_init();
}

View file

@ -0,0 +1,22 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
// SPDX-FileCopyrightText: Copyright (c) 2024 Cooper Dalrymple
//
// SPDX-License-Identifier: MIT
#pragma once
// Micropython setup
#define MICROPY_HW_BOARD_NAME "Waveshare RP2350-GEEK"
#define MICROPY_HW_MCU_NAME "rp2350"
#define CIRCUITPY_BOARD_I2C (1)
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO29, .sda = &pin_GPIO28}}
#define CIRCUITPY_BOARD_SPI (2)
#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO10, .mosi = &pin_GPIO11}, \
{.clock = &pin_GPIO18, .mosi = &pin_GPIO19, .miso = &pin_GPIO20}}
#define CIRCUITPY_BOARD_UART (1)
#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO4, .rx = &pin_GPIO5}}

View file

@ -0,0 +1,12 @@
USB_VID = 0x2E8A
USB_PID = 0x10B6
USB_PRODUCT = "RP2350-GEEK"
USB_MANUFACTURER = "Waveshare Electronics"
CHIP_VARIANT = RP2350
CHIP_PACKAGE = A
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "W25Q128JVxQ"
CIRCUITPY__EVE = 1

View file

@ -0,0 +1,9 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2024 Adafruit Industries LLC
//
// SPDX-License-Identifier: MIT
#pragma once
// Put board-specific pico-sdk definitions here. This file must exist.

View file

@ -0,0 +1,78 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2024 Adafruit Industries LLC
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/board/__init__.h"
#include "shared-module/displayio/__init__.h"
CIRCUITPY_BOARD_BUS_SINGLETON(sd_spi, spi, 1)
static const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
// 2-3 DEBUG
{ MP_ROM_QSTR(MP_QSTR_GP2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_GP3), MP_ROM_PTR(&pin_GPIO3) },
// 4-5 UART
{ MP_ROM_QSTR(MP_QSTR_GP4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_GP5), MP_ROM_PTR(&pin_GPIO5) },
// 8-12 LCD
{ MP_ROM_QSTR(MP_QSTR_GP8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_GP9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_GP10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_GP11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_GP12), MP_ROM_PTR(&pin_GPIO12) },
// 16-17 I2C
{ MP_ROM_QSTR(MP_QSTR_GP16), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_GP17), MP_ROM_PTR(&pin_GPIO17) },
// 18-23 SD Card
{ MP_ROM_QSTR(MP_QSTR_GP18), MP_ROM_PTR(&pin_GPIO18) },
{ MP_ROM_QSTR(MP_QSTR_GP19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_GP20), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_GP21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_GP22), MP_ROM_PTR(&pin_GPIO22) },
{ MP_ROM_QSTR(MP_QSTR_GP23), MP_ROM_PTR(&pin_GPIO23) },
// 25 LCD Backlight
{ MP_ROM_QSTR(MP_QSTR_GP25), MP_ROM_PTR(&pin_GPIO25) },
// 28-29 I2C
{ MP_ROM_QSTR(MP_QSTR_GP28), MP_ROM_PTR(&pin_GPIO28) },
{ MP_ROM_QSTR(MP_QSTR_GP29), MP_ROM_PTR(&pin_GPIO29) },
// UART
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
// I2C
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO29) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO28) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
// SPI SD Card
{ MP_ROM_QSTR(MP_QSTR_SD_SCK), MP_ROM_PTR(&pin_GPIO18)},
{ MP_ROM_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_GPIO19)},
{ MP_ROM_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_GPIO20)},
{ MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO23)},
{ MP_ROM_QSTR(MP_QSTR_SD_SPI), MP_ROM_PTR(&board_sd_spi_obj) },
// SDIO SD Card
{ MP_ROM_QSTR(MP_QSTR_SDIO_CLK), MP_ROM_PTR(&pin_GPIO18)},
{ MP_ROM_QSTR(MP_QSTR_SDIO_COMMAND), MP_ROM_PTR(&pin_GPIO19)},
{ MP_ROM_QSTR(MP_QSTR_SDIO_DATA0), MP_ROM_PTR(&pin_GPIO20)},
{ MP_ROM_QSTR(MP_QSTR_SDIO_DATA1), MP_ROM_PTR(&pin_GPIO21)},
{ MP_ROM_QSTR(MP_QSTR_SDIO_DATA2), MP_ROM_PTR(&pin_GPIO22)},
{ MP_ROM_QSTR(MP_QSTR_SDIO_DATA3), MP_ROM_PTR(&pin_GPIO23)},
// LCD
{ MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CLK), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_LCD_RST), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_LCD_BACKLIGHT), MP_ROM_PTR(&pin_GPIO25) },
{ MP_ROM_QSTR(MP_QSTR_LCD_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View file

@ -0,0 +1,109 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
//
// SPDX-License-Identifier: MIT
#include "supervisor/board.h"
#include "mpconfigboard.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/displayio/mipi_constants.h"
#define DELAY 0x80
// display init sequence according to Adafruit_CircuitPython_ST7735R
// https://github.com/adafruit/Adafruit_CircuitPython_ST7735R
uint8_t display_init_sequence[] = {
// sw reset
0x01, 0 | DELAY, 0x96,
// SLPOUT and Delay
0x11, 0 | DELAY, 0xFF,
0xB1, 0x03, 0x01, 0x2C, 0x2D, // _FRMCTR1
0xB3, 0x06, 0x01, 0x2C, 0x2D, 0x01, 0x2C, 0x2D, // _FRMCTR3
0xB4, 0x01, 0x07, // _INVCTR line inversion
0xC0, 0x03, 0xA2, 0x02, 0x84, // _PWCTR1 GVDD = 4.7V, 1.0uA
0xC1, 0x01, 0xC5, // _PWCTR2 VGH=14.7V, VGL=-7.35V
0xC2, 0x02, 0x0A, 0x00, // _PWCTR3 Opamp current small, Boost frequency
0xC3, 0x02, 0x8A, 0x2A,
0xC4, 0x02, 0x8A, 0xEE,
0xC5, 0x01, 0x0E, // _VMCTR1 VCOMH = 4V, VOML = -1.1V
0x20, 0x00, // _INVOFF
0x36, 0x01, 0x18, // _MADCTL bottom to top refresh
// 1 clk cycle nonoverlap, 2 cycle gate rise, 3 cycle osc equalie,
// fix on VTL
0x3A, 0x01, 0x05, // COLMOD - 16bit color
0xE0, 0x10, 0x02, 0x1C, 0x07, 0x12, 0x37, 0x32, 0x29, 0x2D, 0x29, 0x25, 0x2B, 0x39, 0x00, 0x01, 0x03, 0x10, // _GMCTRP1 Gamma
0xE1, 0x10, 0x03, 0x1D, 0x07, 0x06, 0x2E, 0x2C, 0x29, 0x2D, 0x2E, 0x2E, 0x37, 0x3F, 0x00, 0x00, 0x02, 0x10, // _GMCTRN1
0x13, 0 | DELAY, 0x0A, // _NORON
0x29, 0 | DELAY, 0x64, // _DISPON
// 0x36, 0x01, 0xC0, // _MADCTL Default rotation plus BGR encoding
0x36, 0x01, 0xC8, // _MADCTL Default rotation plus RGB encoding
0x21, 0x00, // _INVON
};
static void display_init(void) {
fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus;
busio_spi_obj_t *spi = &bus->inline_bus;
common_hal_busio_spi_construct(
spi,
&pin_GPIO10, // CLK
&pin_GPIO11, // MOSI
NULL, // MISO not connected
false // Not half-duplex
);
common_hal_busio_spi_never_reset(spi);
bus->base.type = &fourwire_fourwire_type;
common_hal_fourwire_fourwire_construct(
bus,
spi,
&pin_GPIO8, // DC
&pin_GPIO9, // CS
&pin_GPIO12, // RST
40000000, // baudrate
0, // polarity
0 // phase
);
busdisplay_busdisplay_obj_t *display = &allocate_display()->display;
display->base.type = &busdisplay_busdisplay_type;
common_hal_busdisplay_busdisplay_construct(
display,
bus,
160, // width (after rotation)
80, // height (after rotation)
26, // column start
1, // row start
90, // rotation
16, // color depth
false, // grayscale
false, // pixels in a byte share a row. Only valid for depths < 8
1, // bytes per cell. Only valid for depths < 8
false, // reverse_pixels_in_byte. Only valid for depths < 8
true, // reverse_pixels_in_word
MIPI_COMMAND_SET_COLUMN_ADDRESS, // set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // set row command
MIPI_COMMAND_WRITE_MEMORY_START, // write memory command
display_init_sequence,
sizeof(display_init_sequence),
&pin_GPIO25, // backlight pin
NO_BRIGHTNESS_COMMAND,
1.0f, // brightness
false, // single_byte_bounds
false, // data_as_commands
true, // auto_refresh
60, // native_frames_per_second
true, // backlight_on_high
false, // SH1107_addressing
50000 // backlight pwm frequency
);
}
void board_init(void) {
// Display
display_init();
}
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View file

@ -0,0 +1,20 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
// SPDX-FileCopyrightText: Copyright (c) 2024 Cooper Dalrymple
//
// SPDX-License-Identifier: MIT
#pragma once
#define MICROPY_HW_BOARD_NAME "Waveshare RP2350-LCD-0.96"
#define MICROPY_HW_MCU_NAME "rp2350"
#define CIRCUITPY_BOARD_I2C (1)
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO21, .sda = &pin_GPIO20}}
#define CIRCUITPY_BOARD_SPI (1)
#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO18, .mosi = &pin_GPIO19, .miso = &pin_GPIO16}}
#define CIRCUITPY_BOARD_UART (1)
#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO0, .rx = &pin_GPIO1}}

View file

@ -0,0 +1,12 @@
USB_VID = 0x2E8A
USB_PID = 0x10B7
USB_PRODUCT = "Waveshare RP2350-LCD-0.96"
USB_MANUFACTURER = "Waveshare Electronics"
CHIP_VARIANT = RP2350
CHIP_PACKAGE = A
CHIP_FAMILY = rp2
EXTERNAL_FLASH_DEVICES = "P25Q32SH"
CIRCUITPY__EVE = 1

Some files were not shown because too many files have changed in this diff Show more