merge from adafruit/main

This commit is contained in:
Dan Halbert 2025-06-16 09:12:47 -04:00
commit ce450dc271
131 changed files with 2758 additions and 282 deletions

View file

@ -14,7 +14,7 @@ echo -e "[cortex-m-toolchain.sh] downloading and installing gcc-arm-non-eabi too
cd /workspaces
wget -qO gcc-arm-none-eabi.tar.xz \
https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz
https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz
tar -xJf gcc-arm-none-eabi.tar.xz
ln -s arm-gnu-toolchain-14.2.Rel1-x86_64-arm-none-eabi gcc-arm-none-eabi

View file

@ -10,7 +10,7 @@ jobs:
permissions:
issues: write
steps:
- uses: tekktrik/issue-labeled-ping@v1
- uses: tekktrik/issue-labeled-ping@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
user: v923z

1
.gitignore vendored
View file

@ -9,6 +9,7 @@
*.o
*.a
!atmel-samd/asf/**/*.a
!ports/espressif/microros-lib/**/*.a
*.elf
*.bin
!*.toml.bin

3
.gitmodules vendored
View file

@ -412,3 +412,6 @@
[submodule "ports/analog/msdk"]
path = ports/analog/msdk
url = https://github.com/analogdevicesinc/msdk.git
[submodule "ports/espressif/microros-lib"]
path = ports/espressif/microros-lib
url = https://github.com/hierophect/microros-lib.git

View file

@ -871,6 +871,10 @@ msgstr "Deretan koordinat memiliki panjang yang berbeda"
msgid "Coordinate arrays types have different sizes"
msgstr "Tipe array koordinat memiliki ukuran yang berbeda"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Tidak dapat mengatur alamat"
@ -883,6 +887,11 @@ msgstr "Tidak dapat memulai interupsi, RX sibuk"
msgid "Couldn't allocate decoder"
msgstr "Tidak dapat mengalokasikan dekoder"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "Terjadi kesalahan saat menginisialisasi kanal DAC"
@ -1312,6 +1321,10 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Argumen tidak valid"
@ -1874,6 +1887,10 @@ msgstr "Ukuran program tidak valid"
msgid "Program too long"
msgstr "Program terlalu lama"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "Pull tidak digunakan saat arah output."
@ -1894,6 +1911,26 @@ msgstr "Kesalahan DeInit RNG"
msgid "RNG Init Error"
msgstr "Kesalahan Init RNG"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

View file

@ -848,6 +848,10 @@ msgstr ""
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr ""
@ -860,6 +864,11 @@ msgstr ""
msgid "Couldn't allocate decoder"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr ""
@ -1287,6 +1296,10 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr ""
@ -1841,6 +1854,10 @@ msgstr ""
msgid "Program too long"
msgstr ""
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr ""
@ -1861,6 +1878,26 @@ msgstr ""
msgid "RNG Init Error"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

View file

@ -865,6 +865,10 @@ msgstr "Pole souřadnic mají různé délky"
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Není možné nastavit adresu"
@ -877,6 +881,11 @@ msgstr "Nelze začít přerušení, RX je zaneprázdněn"
msgid "Couldn't allocate decoder"
msgstr "Dekodér nelze přiřadit"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "Chyba inicializace kanálu DAC"
@ -1307,6 +1316,10 @@ msgstr "Chybné BSSID"
msgid "Invalid MAC address"
msgstr "Chybná MAC adresa"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Neplatný argument"
@ -1864,6 +1877,10 @@ msgstr "Velikost programu je nesprávná"
msgid "Program too long"
msgstr "Program je příliš dlouhý"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr ""
@ -1884,6 +1901,26 @@ msgstr ""
msgid "RNG Init Error"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

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-12-15 14:00+0000\n"
"Last-Translator: Exp3rt <jannik.homberg@gmail.com>\n"
"PO-Revision-Date: 2025-06-12 23:09+0000\n"
"Last-Translator: MAE <martin-aehle@hotmail.de>\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.9-rc\n"
"X-Generator: Weblate 5.12-dev\n"
#: main.c
msgid ""
@ -117,7 +117,7 @@ msgstr "%q Fehler: %d"
#: shared-module/audiodelays/MultiTapDelay.c
msgid "%q in %q must be of type %q or %q, not %q"
msgstr ""
msgstr "%q in %q muss vom Typ %q oder %q sein, nicht %q"
#: py/argcheck.c shared-module/audiofilters/Filter.c
msgid "%q in %q must be of type %q, not %q"
@ -304,7 +304,7 @@ msgstr "%q[%u] schiebt mehr Bits raus als Pins vorhanden sind"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "%q[%u] uses extra pin"
msgstr ""
msgstr "%q[%u] verwendet zusätzlichen Pin"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "%q[%u] waits on input outside of count"
@ -495,7 +495,7 @@ msgstr "Adressbereich nicht erlaubt"
#: shared-bindings/memorymap/AddressRange.c
msgid "Address range wraps around"
msgstr ""
msgstr "Der Adressbereich umfasst folgende Bereiche"
#: ports/espressif/common-hal/canio/CAN.c
msgid "All CAN peripherals are in use"
@ -573,7 +573,7 @@ msgstr "All-Matchers-Listener bereits vorhanden"
#: ports/espressif/common-hal/_bleio/__init__.c
msgid "Already in progress"
msgstr ""
msgstr "Bereits in Arbeit"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
@ -613,7 +613,7 @@ msgstr "Array-Werte sollten aus Einzelbytes bestehen."
#: ports/atmel-samd/common-hal/spitarget/SPITarget.c
msgid "Async SPI transfer in progress on this bus, keep awaiting."
msgstr ""
msgstr "Asynchroner SPI-Transfer auf diesem Bus im Gange, warten Sie weiter."
#: shared-module/memorymonitor/AllocationAlarm.c
#, c-format
@ -627,7 +627,7 @@ msgstr "Audio-Konvertierung nicht implementiert"
#: ports/raspberrypi/common-hal/audiobusio/I2SOut.c
#: ports/raspberrypi/common-hal/audiopwmio/PWMAudioOut.c
msgid "Audio source error"
msgstr ""
msgstr "Audioquellenfehler"
#: shared-bindings/wifi/Radio.c
msgid "AuthMode.OPEN is not used with password"
@ -660,7 +660,7 @@ msgstr "Unterhalb der minimalen Frame Rate"
#: ports/raspberrypi/common-hal/audiobusio/I2SOut.c
msgid "Bit clock and word select must be sequential GPIO pins"
msgstr ""
msgstr "Bittakt und Wortauswahl müssen aufeinanderfolgende GPIO-Pins sein"
#: shared-bindings/bitmaptools/__init__.c
msgid "Bitmap size and bits per value must match"
@ -767,6 +767,8 @@ msgstr "Kann nur auf zwei Pins Alarm als low aus Deep Sleep auslösen."
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "Can't construct AudioOut because continuous channel already open"
msgstr ""
"AudioOut kann nicht erstellt werden, da ein kontinuierlicher Kanal bereits "
"geöffnet ist"
#: ports/espressif/common-hal/_bleio/Characteristic.c
#: ports/nordic/common-hal/_bleio/Characteristic.c
@ -816,6 +818,7 @@ msgstr "Aufnahme in eine Datei nicht möglich"
#: shared-module/storage/__init__.c
msgid "Cannot remount path when visible via USB."
msgstr ""
"Der Pfad kann nicht neu gemountet werden, wenn er über USB sichtbar ist."
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Cannot set value when direction is input."
@ -832,7 +835,7 @@ msgstr "Slice kann keine sub-klasse sein"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "Cannot use GPIO0..15 together with GPIO32..47"
msgstr ""
msgstr "GPIO0..15 kann nicht zusammen mit GPIO32..47 verwendet werden"
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
@ -870,6 +873,10 @@ msgstr "Koordinaten-Arrays haben unterschiedliche Längen"
msgid "Coordinate arrays types have different sizes"
msgstr "Typen der Koordinaten-Arrays haben unterschiedliche Längen"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Konnte Adresse nicht setzen"
@ -882,6 +889,11 @@ msgstr "Interrupt konnte nicht gestartet werden, RX beschäftigt"
msgid "Couldn't allocate decoder"
msgstr "Decoder konnte nicht zugeordnet werden"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "DAC-Kanal-Initialisierungsfehler"
@ -1000,12 +1012,14 @@ msgstr "Mutex konnte nicht akquiriert werden. Status: 0x%04x"
#: ports/raspberrypi/common-hal/mdns/Server.c
msgid "Failed to add service TXT record"
msgstr ""
msgstr "Fehler beim Hinzufügen des TXT-Diensteintrags"
#: shared-bindings/mdns/Server.c
msgid ""
"Failed to add service TXT record; non-string or bytes found in txt_records"
msgstr ""
"Fehler beim Hinzufügen des TXT-Diensteintrags; Nicht-Zeichenfolge oder Bytes "
"in txt_records gefunden"
#: shared-module/rgbmatrix/RGBMatrix.c
msgid "Failed to allocate %q buffer"
@ -1035,22 +1049,24 @@ msgstr "Verbindung nicht erfolgreich: timeout"
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "Failed to create continuous channels: invalid arg"
msgstr ""
"Kontinuierliche Kanäle konnten nicht erstellt werden: ungültiges Argument"
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "Failed to create continuous channels: invalid state"
msgstr ""
"Kontinuierliche Kanäle konnten nicht erstellt werden: ungültiger Status"
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "Failed to create continuous channels: no mem"
msgstr ""
msgstr "Kontinuierliche Kanäle konnten nicht erstellt werden: kein Speicher"
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "Failed to create continuous channels: not found"
msgstr ""
msgstr "Kontinuierliche Kanäle konnten nicht erstellt werden: nicht gefunden"
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "Failed to enable continuous"
msgstr ""
msgstr "Kontinuierliche Aktivierung fehlgeschlagen"
#: shared-module/audiomp3/MP3Decoder.c
msgid "Failed to parse MP3 file"
@ -1058,7 +1074,7 @@ msgstr "MP3-Datei konnte nicht analysiert werden"
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "Failed to register continuous events callback"
msgstr ""
msgstr "Rückruf für kontinuierliche Ereignisse konnte nicht registriert werden"
#: ports/nordic/sd_mutex.c
#, c-format
@ -1067,11 +1083,11 @@ msgstr "Mutex konnte nicht freigegeben werden. Status: 0x%04x"
#: ports/zephyr-cp/common-hal/wifi/Radio.c
msgid "Failed to set hostname"
msgstr ""
msgstr "Hostname konnte nicht gesetzt werden"
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "Failed to start async audio"
msgstr ""
msgstr "Start von asynchronem Audio fehlgeschlagen"
#: supervisor/shared/safe_mode.c
msgid "Failed to write internal flash."
@ -1224,7 +1240,7 @@ msgstr "Unzureichender Speicherpool für das Bild"
#: shared-module/jpegio/JpegDecoder.c
msgid "Insufficient stream input buffer"
msgstr ""
msgstr "Unzureichender Stream-Eingabepuffer"
#: ports/espressif/common-hal/wifi/Radio.c
#: ports/zephyr-cp/common-hal/wifi/Radio.c
@ -1318,6 +1334,10 @@ msgstr "Ungültige BSSID"
msgid "Invalid MAC address"
msgstr "Ungültige MAC-Adresse"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Ungültiges Argument"
@ -1397,6 +1417,8 @@ msgstr "Ebene muss eine Gruppe oder eine TileGrid Subklasse sein"
#: shared-bindings/audiocore/RawSample.c
msgid "Length of %q must be an even multiple of channel_count * type_size"
msgstr ""
"Die Länge von %q muss ein gerades Vielfaches von channel_count * type_size "
"sein"
#: ports/espressif/common-hal/espidf/__init__.c
msgid "MAC address was invalid"
@ -1410,7 +1432,7 @@ msgstr "MITM-Sicherheit wird nicht unterstützt"
#: ports/stm/common-hal/sdioio/SDCard.c
#, c-format
msgid "MMC/SDIO Clock Error %x"
msgstr ""
msgstr "MMC/SDIO-Taktfehler %x"
#: shared-bindings/is31fl3741/IS31FL3741.c
msgid "Mapping must be a tuple"
@ -1600,7 +1622,7 @@ msgstr "Kein Pulldown-Widerstand am Pin; 1 MOhm wird vorgeschlagen"
#: shared-module/touchio/TouchIn.c
msgid "No pullup on pin; 1Mohm recommended"
msgstr ""
msgstr "Kein Pullup-Widerstand am Pin; 1Mohm wird vorgeschlagen"
#: py/moderrno.c
msgid "No space left on device"
@ -1649,7 +1671,7 @@ msgstr "Nicht unterstützter JPEG-Standard"
#: ports/espressif/common-hal/sdioio/SDCard.c
#, c-format
msgid "Number of data_pins must be %d or %d, not %d"
msgstr ""
msgstr "Die Anzahl der data_pins muss %d oder %d sein, nicht %d"
#: shared-bindings/util.c
msgid ""
@ -1778,6 +1800,7 @@ msgstr "PWM-Stück-Kanal A wird bereits verwendet"
#: shared-bindings/spitarget/SPITarget.c
msgid "Packet buffers for an SPI transfer must have the same length."
msgstr ""
"Die Paketpuffer für eine SPI-Übertragung müssen die gleiche Länge haben."
#: shared-module/jpegio/JpegDecoder.c
msgid "Parameter error"
@ -1884,6 +1907,10 @@ msgstr "Programm-Größe ist ungültig"
msgid "Program too long"
msgstr "Programm zu lang"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "Pull wird nicht verwendet, wenn die Richtung output ist."
@ -1904,6 +1931,26 @@ msgstr "RNG DeInit-Fehler"
msgid "RNG Init Error"
msgstr "RNG-Init-Fehler"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"
@ -1986,7 +2033,7 @@ msgstr "SDIO GetCardInfo-Fehler %d"
#: ports/stm/common-hal/sdioio/SDCard.c
#, c-format
msgid "SDIO Init Error %x"
msgstr ""
msgstr "SDIO-Init-Fehler %x"
#: ports/espressif/common-hal/busio/SPI.c
msgid "SPI configuration failed"
@ -2086,7 +2133,7 @@ msgstr "Die Länge von rgb_pins muss 6, 12, 18, 24 oder 30 betragen"
#: shared-module/audiocore/__init__.c
msgid "The sample's %q does not match"
msgstr ""
msgstr "Der %q-Wert der Probe stimmt nicht überein"
#: supervisor/shared/safe_mode.c
msgid "Third-party firmware fatal error."
@ -2120,7 +2167,7 @@ msgstr "Die Kachelbreite muss die Bitmap-Breite genau teilen"
#: shared-module/tilepalettemapper/TilePaletteMapper.c
msgid "TilePaletteMapper may only be bound to a TileGrid once"
msgstr ""
msgstr "TilePaletteMapper darf nur einmal an ein TileGrid gebunden werden"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Time is in the past."
@ -2233,7 +2280,7 @@ msgstr "Konnte keine Buffer für Vorzeichenumwandlung allozieren"
#: supervisor/shared/safe_mode.c
msgid "Unable to allocate to the heap."
msgstr ""
msgstr "Die Zuweisung zum Heap ist nicht möglich."
#: ports/espressif/common-hal/busio/I2C.c
msgid "Unable to create lock"
@ -2256,6 +2303,8 @@ msgstr "Konnte Farbpalettendaten nicht lesen"
#: ports/mimxrt10xx/common-hal/canio/CAN.c
msgid "Unable to send CAN Message: all Tx message buffers are busy"
msgstr ""
"CAN-Nachricht kann nicht gesendet werden: alle Sende-Nachrichtenpuffer sind "
"belegt"
#: ports/espressif/common-hal/mdns/Server.c
#: ports/raspberrypi/common-hal/mdns/Server.c
@ -2360,7 +2409,7 @@ msgstr "Hash Algorithmus wird nicht unterstützt"
#: ports/espressif/common-hal/socketpool/Socket.c
#: ports/zephyr-cp/common-hal/socketpool/Socket.c
msgid "Unsupported socket type"
msgstr ""
msgstr "Nicht unterstützter Sockeltyp"
#: ports/espressif/common-hal/_bleio/Adapter.c
#: ports/espressif/common-hal/dualbank/__init__.c
@ -2421,7 +2470,7 @@ msgstr "Wi-Fi: "
#: ports/raspberrypi/common-hal/wifi/Radio.c
#: ports/zephyr-cp/common-hal/wifi/Radio.c
msgid "WiFi is not enabled"
msgstr ""
msgstr "WiFi ist nicht aktiviert"
#: main.c
msgid "Woken up by alarm.\n"
@ -2520,7 +2569,7 @@ msgstr "addresses ist leer"
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "already playing"
msgstr ""
msgstr "spielt bereits"
#: py/compile.c
msgid "annotation must be an identifier"
@ -2549,6 +2598,7 @@ msgstr "argsort ist für flattened Arrays nicht implementiert"
#: extmod/ulab/code/numpy/random/random.c
msgid "argument must be None, an integer or a tuple of integers"
msgstr ""
"Das Argument muss None, eine Ganzzahl oder ein Tupel von Ganzzahlen sein"
#: py/compile.c
msgid "argument name reused"
@ -2602,7 +2652,7 @@ msgstr "Attribute werden nicht unterstützt"
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "audio format not supported"
msgstr ""
msgstr "Audioformat wird nicht unterstützt"
#: extmod/ulab/code/ulab_tools.c
msgid "axis is out of bounds"
@ -2642,7 +2692,7 @@ msgstr "Der binäre Operator %q ist nicht implementiert"
#: ports/espressif/common-hal/audiobusio/PDMIn.c
msgid "bit_depth must be 8, 16, 24, or 32."
msgstr ""
msgstr "bit_depth muss 8, 16, 24 oder 32 sein."
#: shared-module/bitmapfilter/__init__.c
msgid "bitmap size and depth must match"
@ -2658,7 +2708,7 @@ msgstr "bits müssen 32 oder kleiner sein"
#: shared-bindings/audiofreeverb/Freeverb.c
msgid "bits_per_sample must be 16"
msgstr ""
msgstr "bits_per_sample muss 16 sein"
#: shared-bindings/audiodelays/Chorus.c shared-bindings/audiodelays/Echo.c
#: shared-bindings/audiodelays/MultiTapDelay.c
@ -2873,7 +2923,7 @@ msgstr ""
#: py/objcomplex.c
msgid "can't truncate-divide a complex number"
msgstr ""
msgstr "kann eine komplexe Zahl nicht kürzen und dividieren"
#: extmod/modasyncio.c
msgid "can't wait"
@ -3965,7 +4015,7 @@ msgstr "Ausgabe-Array ist zu klein"
#: extmod/ulab/code/numpy/random/random.c
msgid "out has wrong type"
msgstr ""
msgstr "Ausgabe hat den falschen Typ"
#: extmod/ulab/code/numpy/vector.c
msgid "out keyword is not supported for complex dtype"
@ -3993,11 +4043,11 @@ msgstr "Außerhalb des Bereichs des Ziels"
#: extmod/ulab/code/numpy/random/random.c
msgid "output array has wrong type"
msgstr ""
msgstr "Ausgabe-Array hat einen falschen Typ"
#: extmod/ulab/code/numpy/random/random.c
msgid "output array must be contiguous"
msgstr ""
msgstr "Ausgabe-Array muss zusammenhängend sein"
#: py/objint_mpz.c
msgid "overflow converting long int to machine word"
@ -4110,7 +4160,7 @@ msgstr "rsplit(None,n)"
#: shared-bindings/audiofreeverb/Freeverb.c
msgid "samples_signed must be true"
msgstr ""
msgstr "samples_signed muss wahr sein"
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
@ -4131,7 +4181,7 @@ msgstr "nicht unterstützt"
#: extmod/ulab/code/numpy/random/random.c
msgid "shape must be None, and integer or a tuple of integers"
msgstr ""
msgstr "Form muss Keine, eine Ganzzahl oder ein Tupel von Ganzenahlen sein"
#: extmod/ulab/code/ndarray.c
msgid "shape must be integer or tuple of integers"
@ -4155,7 +4205,7 @@ msgstr "Größe ist nur für ndarrays definiert"
#: extmod/ulab/code/numpy/random/random.c
msgid "size must match out.shape when used together"
msgstr ""
msgstr "size muss bei gemeinsamer Verwendung mit out.shape übereinstimmen"
#: py/nativeglue.c
msgid "slice unsupported"
@ -4203,7 +4253,7 @@ msgstr "source_bitmap muss value_count von 8 haben"
#: extmod/modre.c
msgid "splitting with sub-captures"
msgstr ""
msgstr "Aufteilung mit Untererfassungen"
#: py/objstr.c
msgid "start/end indices"
@ -4244,7 +4294,7 @@ msgstr "Syntaxfehler in JSON"
#: extmod/modtime.c
msgid "ticks interval overflow"
msgstr ""
msgstr "Ticks Intervallüberlauf"
#: ports/nordic/common-hal/watchdog/WatchDogTimer.c
msgid "timeout duration exceeded the maximum supported value"
@ -4256,12 +4306,12 @@ msgstr "timeout muss kleiner als 655.35 Sekunden sein"
#: ports/raspberrypi/common-hal/floppyio/__init__.c
msgid "timeout waiting for flux"
msgstr ""
msgstr "Zeitüberschreitung beim Warten auf Fluss"
#: ports/raspberrypi/common-hal/floppyio/__init__.c
#: shared-module/floppyio/__init__.c
msgid "timeout waiting for index pulse"
msgstr ""
msgstr "Zeitüberschreitung beim Warten auf Indeximpuls"
#: shared-module/sdcardio/SDCard.c
msgid "timeout waiting for v1 card"

View file

@ -871,6 +871,10 @@ msgstr ""
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Δεν μπόρεσε να ρυθμιστεί η διεύθυνση"
@ -883,6 +887,11 @@ msgstr "Δεν μπόρεσε να εκκινηθεί το interrupt, RX κατ
msgid "Couldn't allocate decoder"
msgstr "Δεν μπόρεσε να δεσμευτεί decoder"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "Σφάλμα εκκίνησης καναλιού DAC"
@ -1313,6 +1322,10 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr ""
@ -1869,6 +1882,10 @@ msgstr ""
msgid "Program too long"
msgstr ""
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr ""
@ -1889,6 +1906,26 @@ msgstr ""
msgid "RNG Init Error"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-04-25 15:04+0000\n"
"PO-Revision-Date: 2025-06-15 23:04+0000\n"
"Last-Translator: Andi Chandler <andi@gowling.com>\n"
"Language-Team: none\n"
"Language: en_GB\n"
@ -865,6 +865,10 @@ msgstr "Coordinate arrays have different lengths"
msgid "Coordinate arrays types have different sizes"
msgstr "Coordinate arrays types have different sizes"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr "Could not publish to ROS topic"
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Could not set address"
@ -877,6 +881,11 @@ msgstr "Could not start interrupt, RX busy"
msgid "Couldn't allocate decoder"
msgstr "Couldn't allocate decoder"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr "Critical ROS failure during soft reboot, reset required: %d"
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "DAC channel init error"
@ -1306,6 +1315,10 @@ msgstr "Invalid BSSID"
msgid "Invalid MAC address"
msgstr "Invalid MAC address"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr "Invalid ROS domain ID"
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Invalid argument"
@ -1865,6 +1878,10 @@ msgstr "Program size invalid"
msgid "Program too long"
msgstr "Program too long"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr "Publishers can only be created from a parent node"
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "Pull not used when direction is output."
@ -1885,6 +1902,26 @@ msgstr "RNG deinit Error"
msgid "RNG Init Error"
msgstr "RNG init Error"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr "ROS failed to initialise. Is agent connected?"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr "ROS internal setup failure"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr "ROS memory allocator failure"
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr "ROS node failed to initialise"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr "ROS topic failed to initialise"
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"
@ -2098,7 +2135,7 @@ msgstr "Tile width must exactly divide bitmap width"
#: shared-module/tilepalettemapper/TilePaletteMapper.c
msgid "TilePaletteMapper may only be bound to a TileGrid once"
msgstr ""
msgstr "TilePaletteMapper may only be bound to a TileGrid once"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Time is in the past."
@ -2393,7 +2430,7 @@ msgstr "Wi-Fi: "
#: ports/raspberrypi/common-hal/wifi/Radio.c
#: ports/zephyr-cp/common-hal/wifi/Radio.c
msgid "WiFi is not enabled"
msgstr ""
msgstr "WiFi is not enabled"
#: main.c
msgid "Woken up by alarm.\n"

View file

@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2025-02-09 17:02+0000\n"
"Last-Translator: karlos g liberal <karlosgliberal@gmail.com>\n"
"PO-Revision-Date: 2025-06-09 12:01+0000\n"
"Last-Translator: MAE <martin-aehle@hotmail.de>\n"
"Language-Team: \n"
"Language: es\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.10-dev\n"
"X-Generator: Weblate 5.12-dev\n"
#: main.c
msgid ""
@ -119,7 +119,7 @@ msgstr "%q fallo: %d"
#: shared-module/audiodelays/MultiTapDelay.c
msgid "%q in %q must be of type %q or %q, not %q"
msgstr ""
msgstr "%q en %q debe ser de tipo %q o %q, no %q"
#: py/argcheck.c shared-module/audiofilters/Filter.c
msgid "%q in %q must be of type %q, not %q"
@ -836,7 +836,7 @@ 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 ""
msgstr "No se puede utilizar GPIO0..15 junto con GPIO32..47"
#: ports/nordic/common-hal/alarm/pin/PinAlarm.c
msgid "Cannot wake on pin edge, only level"
@ -874,6 +874,10 @@ msgstr "Las matrices de coordenadas tienen diferentes longitudes"
msgid "Coordinate arrays types have different sizes"
msgstr "Las matrices de coordenadas tienen diferentes tamaños"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "No se puede definir la dirección"
@ -886,6 +890,11 @@ msgstr "No se pudo iniciar la interrupción, RX ocupado"
msgid "Couldn't allocate decoder"
msgstr "No se pudo encontrar el decodificador"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "Error de inicio del canal DAC"
@ -1071,7 +1080,7 @@ msgstr "No se puede liberar el mutex, err 0x%04x"
#: ports/zephyr-cp/common-hal/wifi/Radio.c
msgid "Failed to set hostname"
msgstr ""
msgstr "Fallo al establecer el nombre de host"
#: ports/espressif/common-hal/audioio/AudioOut.c
msgid "Failed to start async audio"
@ -1328,6 +1337,10 @@ msgstr "BSSID inválido"
msgid "Invalid MAC address"
msgstr "Dirección MAC inválida"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Argumento inválido"
@ -1611,7 +1624,7 @@ msgstr "No hay pulldown en el pin; 1Mohm recomendado"
#: shared-module/touchio/TouchIn.c
msgid "No pullup on pin; 1Mohm recommended"
msgstr ""
msgstr "Sin pullup en el pin; 1Mohm recomendado"
#: py/moderrno.c
msgid "No space left on device"
@ -1894,6 +1907,10 @@ msgstr "El tamaño del programa no es correcto"
msgid "Program too long"
msgstr "El programa es demasiado grande"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "Pull no se usa cuando la dirección es output."
@ -1914,6 +1931,26 @@ msgstr "Error de desinicialización de RNG"
msgid "RNG Init Error"
msgstr "Error de inicialización de RNG"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"
@ -2430,7 +2467,7 @@ msgstr "Wi-Fi: "
#: ports/raspberrypi/common-hal/wifi/Radio.c
#: ports/zephyr-cp/common-hal/wifi/Radio.c
msgid "WiFi is not enabled"
msgstr ""
msgstr "WiFi no está habilitado"
#: main.c
msgid "Woken up by alarm.\n"
@ -2667,7 +2704,7 @@ msgstr "los bits deben ser 32 o menos"
#: shared-bindings/audiofreeverb/Freeverb.c
msgid "bits_per_sample must be 16"
msgstr ""
msgstr "bits_per_sample debe ser 16"
#: shared-bindings/audiodelays/Chorus.c shared-bindings/audiodelays/Echo.c
#: shared-bindings/audiodelays/MultiTapDelay.c
@ -4105,7 +4142,7 @@ msgstr "rsplit(None,n)"
#: shared-bindings/audiofreeverb/Freeverb.c
msgid "samples_signed must be true"
msgstr ""
msgstr "samples_signed debe ser true"
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c

View file

@ -857,6 +857,10 @@ msgstr ""
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr ""
@ -869,6 +873,11 @@ msgstr ""
msgid "Couldn't allocate decoder"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr ""
@ -1299,6 +1308,10 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Maling argumento"
@ -1858,6 +1871,10 @@ msgstr ""
msgid "Program too long"
msgstr ""
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "Pull hindi ginagamit kapag ang direksyon ay output."
@ -1878,6 +1895,26 @@ msgstr "Error sa RNG DeInit"
msgid "RNG Init Error"
msgstr "Error sa RNG Init"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

View file

@ -8,15 +8,15 @@ 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: 2025-02-19 11:46+0000\n"
"Last-Translator: Noel Gaetan <gaetan.noel@viacesi.fr>\n"
"PO-Revision-Date: 2025-06-12 23:09+0000\n"
"Last-Translator: MAE <martin-aehle@hotmail.de>\n"
"Language-Team: \n"
"Language: fr\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.10.1-dev\n"
"X-Generator: Weblate 5.12-dev\n"
#: main.c
msgid ""
@ -118,7 +118,7 @@ msgstr "Échec de %q : %d"
#: shared-module/audiodelays/MultiTapDelay.c
msgid "%q in %q must be of type %q or %q, not %q"
msgstr ""
msgstr "%q dans %q doit être du type %q ou %q, pas %q"
#: py/argcheck.c shared-module/audiofilters/Filter.c
msgid "%q in %q must be of type %q, not %q"
@ -824,6 +824,7 @@ msgstr "Impossible d'enregistrer vers un fichier"
#: shared-module/storage/__init__.c
msgid "Cannot remount path when visible via USB."
msgstr ""
"Impossible de remonter le chemin d'accès lorsqu'il est visible via USB."
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Cannot set value when direction is input."
@ -880,6 +881,10 @@ msgstr "Les tableaux de coordonnées sont de longueur différentes"
msgid "Coordinate arrays types have different sizes"
msgstr "Les types des tableaux de coordonnées sont de longueur différentes"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Ne peux définir l'adresse"
@ -892,6 +897,11 @@ msgstr "Ne peux lancer l'interruption, RX occupé"
msgid "Couldn't allocate decoder"
msgstr "Ne peux allouer le décodeur"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "Erreur init du canal DAC"
@ -1332,6 +1342,10 @@ msgstr "BSSID invalide"
msgid "Invalid MAC address"
msgstr "Adresse MAC invalide"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Paramètre invalide"
@ -1424,7 +1438,7 @@ msgstr "Sécurité MITM n'est pas supportée"
#: ports/stm/common-hal/sdioio/SDCard.c
#, c-format
msgid "MMC/SDIO Clock Error %x"
msgstr ""
msgstr "Erreur d'horloge MMC/SDIO %x"
#: shared-bindings/is31fl3741/IS31FL3741.c
msgid "Mapping must be a tuple"
@ -1622,7 +1636,7 @@ msgstr "Pas de pulldown sur la broche ; 1Mohm requis"
#: shared-module/touchio/TouchIn.c
msgid "No pullup on pin; 1Mohm recommended"
msgstr ""
msgstr "Pas de pullup sur la broche ; 1Mohm recommandé"
#: py/moderrno.c
msgid "No space left on device"
@ -1904,6 +1918,10 @@ msgstr "Taille du programme invalide"
msgid "Program too long"
msgstr "Programme trop long"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "Le tirage 'pull' n'est pas utilisé quand la direction est 'output'."
@ -1924,6 +1942,26 @@ msgstr "Erreur de désinitialisation du RNG"
msgid "RNG Init Error"
msgstr "Erreur d'initialisation du RNG"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"
@ -2138,7 +2176,7 @@ msgstr "La largeur de la tuile doit diviser exactement la largeur de l'image"
#: shared-module/tilepalettemapper/TilePaletteMapper.c
msgid "TilePaletteMapper may only be bound to a TileGrid once"
msgstr ""
msgstr "TilePaletteMapper ne peut être lié à un TileGrid qu'une seule fois"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Time is in the past."
@ -2439,7 +2477,7 @@ msgstr "Wi-Fi : "
#: ports/raspberrypi/common-hal/wifi/Radio.c
#: ports/zephyr-cp/common-hal/wifi/Radio.c
msgid "WiFi is not enabled"
msgstr ""
msgstr "Le WiFi n'est pas activé"
#: main.c
msgid "Woken up by alarm.\n"
@ -2677,7 +2715,7 @@ msgstr "les bits doivent être 32 ou moins"
#: shared-bindings/audiofreeverb/Freeverb.c
msgid "bits_per_sample must be 16"
msgstr ""
msgstr "bits_per_sample doit être de 16"
#: shared-bindings/audiodelays/Chorus.c shared-bindings/audiodelays/Echo.c
#: shared-bindings/audiodelays/MultiTapDelay.c
@ -2686,7 +2724,7 @@ msgstr ""
#: shared-bindings/audiofilters/Filter.c shared-bindings/audiofilters/Phaser.c
#: shared-bindings/audiomixer/Mixer.c
msgid "bits_per_sample must be 8 or 16"
msgstr "'bits_per_sample' doivent être 8 ou 16"
msgstr "bits_per_sample doivent être 8 ou 16"
#: py/emitinlinethumb.c
msgid "branch not in range"
@ -4126,7 +4164,7 @@ msgstr "rsplit(None, n)"
#: shared-bindings/audiofreeverb/Freeverb.c
msgid "samples_signed must be true"
msgstr ""
msgstr "samples_signed doit être vrai"
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c

View file

@ -850,6 +850,10 @@ msgstr ""
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr ""
@ -862,6 +866,11 @@ msgstr ""
msgid "Couldn't allocate decoder"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr ""
@ -1289,6 +1298,10 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr ""
@ -1843,6 +1856,10 @@ msgstr ""
msgid "Program too long"
msgstr ""
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr ""
@ -1863,6 +1880,26 @@ msgstr ""
msgid "RNG Init Error"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

View file

@ -856,6 +856,10 @@ msgstr ""
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr ""
@ -868,6 +872,11 @@ msgstr ""
msgid "Couldn't allocate decoder"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr ""
@ -1297,6 +1306,10 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Argomento non valido"
@ -1856,6 +1869,10 @@ msgstr ""
msgid "Program too long"
msgstr ""
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr ""
@ -1876,6 +1893,26 @@ msgstr ""
msgid "RNG Init Error"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

View file

@ -867,6 +867,10 @@ msgstr ""
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "アドレスをセットできません"
@ -879,6 +883,11 @@ msgstr "割り込みをスタートできません。RXビジー"
msgid "Couldn't allocate decoder"
msgstr "デコーダを確保できません"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "DACチャネル初期化エラー"
@ -1306,6 +1315,10 @@ msgstr "不正なBSSID"
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "不正な引数"
@ -1865,6 +1878,10 @@ msgstr ""
msgid "Program too long"
msgstr ""
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "方向がoutputのときpullは使われません"
@ -1885,6 +1902,26 @@ msgstr "RNG解体エラー"
msgid "RNG Init Error"
msgstr "乱数生成器の初期化エラー"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

View file

@ -895,6 +895,10 @@ msgstr "좌표 배열의 길이가 다릅니다"
msgid "Coordinate arrays types have different sizes"
msgstr "좌표 배열 유형은 크기가 다릅니다"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "주소를 설정할 수 없습니다"
@ -907,6 +911,11 @@ msgstr "인터럽트를 시작할 수 없습니다, RX가 사용 중입니다"
msgid "Couldn't allocate decoder"
msgstr "디코더를 할당할 수 없습니다"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "DAC 채널 초기화 오류"
@ -1341,6 +1350,10 @@ msgstr "잘못된 BSSID"
msgid "Invalid MAC address"
msgstr "잘못된 MAC 주소"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "잘못된 인수"
@ -1917,6 +1930,10 @@ msgstr "프로그램 크기가 잘못되었습니다"
msgid "Program too long"
msgstr "프로그램이 너무 깁니다"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
#, fuzzy
msgid "Pull not used when direction is output."
@ -1938,6 +1955,26 @@ msgstr "RNG DeInit 오류"
msgid "RNG Init Error"
msgstr "RNG 초기화 오류"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

View file

@ -6,15 +6,15 @@ 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: 2023-11-16 15:03+0000\n"
"Last-Translator: Jeff Epler <jepler@gmail.com>\n"
"PO-Revision-Date: 2025-06-09 12:01+0000\n"
"Last-Translator: MAE <martin-aehle@hotmail.de>\n"
"Language-Team: none\n"
"Language: nl\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.2\n"
"X-Generator: Weblate 5.12-dev\n"
#: main.c
msgid ""
@ -61,7 +61,7 @@ msgstr ""
#: main.c
msgid " not found.\n"
msgstr ""
msgstr " niet gevonden.\n"
#: main.c
msgid " output:\n"
@ -558,7 +558,7 @@ msgstr "Heeft al een luisteraar voor 'all-matches'"
#: ports/espressif/common-hal/_bleio/__init__.c
msgid "Already in progress"
msgstr ""
msgstr "Al in uitvoering"
#: ports/espressif/bindings/espnow/ESPNow.c
#: ports/espressif/common-hal/espulp/ULP.c
@ -612,7 +612,7 @@ msgstr ""
#: ports/raspberrypi/common-hal/audiobusio/I2SOut.c
#: ports/raspberrypi/common-hal/audiopwmio/PWMAudioOut.c
msgid "Audio source error"
msgstr ""
msgstr "Audiobronfout"
#: shared-bindings/wifi/Radio.c
msgid "AuthMode.OPEN is not used with password"
@ -701,7 +701,7 @@ msgstr "Buffer is %d bytes te klein"
#: shared-bindings/framebufferio/FramebufferDisplay.c
#: shared-bindings/struct/__init__.c shared-module/struct/__init__.c
msgid "Buffer too small"
msgstr ""
msgstr "Buffer te klein"
#: ports/atmel-samd/common-hal/paralleldisplaybus/ParallelBus.c
#: ports/espressif/common-hal/paralleldisplaybus/ParallelBus.c
@ -853,6 +853,10 @@ msgstr ""
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Kan adres niet zetten"
@ -865,6 +869,11 @@ msgstr "Kan interrupt niet starten, RX is bezig"
msgid "Couldn't allocate decoder"
msgstr "Kan decoder niet alloceren"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "DAC kanaal Init Fout"
@ -925,7 +934,7 @@ msgstr "Beeldscherm rotatie moet in stappen van 90 graden"
#: main.c
msgid "Done"
msgstr ""
msgstr "Gedaan"
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Drive mode not used when direction is input."
@ -1064,7 +1073,7 @@ msgstr "Bestand bestaat"
#: shared-bindings/supervisor/__init__.c shared-module/lvfontio/OnDiskFont.c
#: shared-module/os/getenv.c
msgid "File not found"
msgstr ""
msgstr "Bestand niet gevonden"
#: ports/atmel-samd/common-hal/canio/Listener.c
#: ports/espressif/common-hal/canio/Listener.c
@ -1075,11 +1084,11 @@ msgstr "Filters zijn te complex"
#: ports/espressif/common-hal/dualbank/__init__.c
msgid "Firmware is duplicate"
msgstr ""
msgstr "Firmware is duplicaat"
#: ports/espressif/common-hal/dualbank/__init__.c
msgid "Firmware is invalid"
msgstr ""
msgstr "Firmware is ongeldig"
#: ports/espressif/common-hal/dualbank/__init__.c
msgid "Firmware is too big"
@ -1113,7 +1122,7 @@ msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Generic Failure"
msgstr ""
msgstr "Generieke mislukking"
#: shared-bindings/framebufferio/FramebufferDisplay.c
#: shared-module/busdisplay/BusDisplay.c
@ -1215,7 +1224,7 @@ msgstr "Interne define fout"
#: shared-bindings/pwmio/PWMOut.c shared-module/os/getenv.c
msgid "Internal error"
msgstr ""
msgstr "Interne fout"
#: shared-module/rgbmatrix/RGBMatrix.c
#, c-format
@ -1241,7 +1250,7 @@ msgstr ""
#: supervisor/shared/safe_mode.c
msgid "Interrupt error."
msgstr ""
msgstr "Interruptfout."
#: shared-module/jpegio/JpegDecoder.c
msgid "Interrupted by output function"
@ -1282,7 +1291,7 @@ msgstr "Ongeldige ADC Unit waarde"
#: ports/espressif/common-hal/_bleio/__init__.c
#: ports/nordic/common-hal/_bleio/__init__.c
msgid "Invalid BLE parameter"
msgstr ""
msgstr "Ongeldige BLE-parameter"
#: shared-bindings/wifi/Radio.c
msgid "Invalid BSSID"
@ -1290,6 +1299,10 @@ msgstr "Ongeldig BSSID"
#: shared-bindings/wifi/Radio.c
msgid "Invalid MAC address"
msgstr "Ongeldig MAC-adres"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
@ -1312,7 +1325,7 @@ msgstr ""
#: shared-module/msgpack/__init__.c
msgid "Invalid format"
msgstr ""
msgstr "Ongeldig formaat"
#: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size"
@ -1329,7 +1342,7 @@ msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c
msgid "Invalid size"
msgstr ""
msgstr "Ongeldige grootte"
#: shared-module/ssl/SSLSocket.c
msgid "Invalid socket for TLS"
@ -1338,11 +1351,11 @@ msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c
#: ports/nordic/common-hal/_bleio/__init__.c
msgid "Invalid state"
msgstr ""
msgstr "Ongeldige staat"
#: shared-module/os/getenv.c
msgid "Invalid unicode escape"
msgstr ""
msgstr "Ongeldige unicode escape"
#: shared-bindings/aesio/aes.c
msgid "Key must be 16, 24, or 32 bytes long"
@ -1350,7 +1363,7 @@ msgstr "Sleutel moet 16, 24, of 32 bytes lang zijn"
#: shared-module/os/getenv.c
msgid "Key not found"
msgstr ""
msgstr "Sleutel niet gevonden"
#: shared-module/is31fl3741/FrameBuffer.c
msgid "LED mappings must match display size"
@ -1855,6 +1868,10 @@ msgstr ""
msgid "Program too long"
msgstr ""
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "Pull niet gebruikt wanneer de richting output is."
@ -1875,10 +1892,30 @@ msgstr "RNG DeInit Fout"
msgid "RNG Init Error"
msgstr "RNG Init Fout"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"
msgstr ""
msgstr "RS485"
#: ports/espressif/common-hal/busio/UART.c
#: ports/mimxrt10xx/common-hal/busio/UART.c
@ -1910,7 +1947,7 @@ msgstr ""
#: supervisor/shared/bluetooth/bluetooth.c
msgid "Reconnecting"
msgstr ""
msgstr "Opnieuw aansluiten"
#: shared-bindings/epaperdisplay/EPaperDisplay.c
msgid "Refresh too soon"
@ -2378,7 +2415,7 @@ msgstr ""
#: ports/raspberrypi/common-hal/wifi/Radio.c
#: ports/zephyr-cp/common-hal/wifi/Radio.c
msgid "WiFi is not enabled"
msgstr ""
msgstr "WiFi is niet ingeschakeld"
#: main.c
msgid "Woken up by alarm.\n"
@ -4416,7 +4453,7 @@ msgstr "breedte moet groter dan nul zijn"
#: ports/raspberrypi/common-hal/wifi/Monitor.c
msgid "wifi.Monitor not available"
msgstr ""
msgstr "wifi.monitor niet beschikbaar"
#: shared-bindings/_bleio/Adapter.c
msgid "window must be <= interval"

View file

@ -7,16 +7,16 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2023-11-16 15:03+0000\n"
"Last-Translator: Szymon Jakubiak <sz.a.jakubiak@gmail.com>\n"
"PO-Revision-Date: 2025-06-09 12:01+0000\n"
"Last-Translator: MAE <martin-aehle@hotmail.de>\n"
"Language-Team: pl\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.2\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.12-dev\n"
#: main.c
msgid ""
@ -864,6 +864,10 @@ msgstr ""
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Nie można ustawić adresu"
@ -876,6 +880,11 @@ msgstr "Nie można rozpocząć przerwania, RX jest zajęty"
msgid "Couldn't allocate decoder"
msgstr "Nie udało się przydzielić dekodera"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "Błąd inicjalizacji kanału DAC"
@ -1311,6 +1320,10 @@ msgstr ""
msgid "Invalid MAC address"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Zły argument"
@ -1754,7 +1767,7 @@ msgstr ""
#: ports/stm/common-hal/pwmio/PWMOut.c
msgid "PWM restart"
msgstr ""
msgstr "Ponowne uruchomienie PWM"
#: ports/raspberrypi/common-hal/countio/Counter.c
msgid "PWM slice already in use"
@ -1770,7 +1783,7 @@ msgstr ""
#: shared-module/jpegio/JpegDecoder.c
msgid "Parameter error"
msgstr ""
msgstr "Błąd parametru"
#: ports/espressif/common-hal/audiobusio/__init__.c
msgid "Peripheral in use"
@ -1867,6 +1880,10 @@ msgstr ""
#: ports/espressif/common-hal/espulp/ULP.c
msgid "Program too long"
msgstr "Program zbyt długi"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
@ -1889,10 +1906,30 @@ msgstr "Błąd RNG DeInit"
msgid "RNG Init Error"
msgstr "Błąd inicjalizacji RNG"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"
msgstr ""
msgstr "RS485"
#: ports/espressif/common-hal/busio/UART.c
#: ports/mimxrt10xx/common-hal/busio/UART.c
@ -1924,7 +1961,7 @@ msgstr "Otrzymana odpowiedź była nieprawidłowa"
#: supervisor/shared/bluetooth/bluetooth.c
msgid "Reconnecting"
msgstr ""
msgstr "Ponowne połączenie"
#: shared-bindings/epaperdisplay/EPaperDisplay.c
msgid "Refresh too soon"
@ -2009,7 +2046,7 @@ msgstr ""
#: ports/cxd56/common-hal/camera/Camera.c
msgid "Size not supported"
msgstr ""
msgstr "Rozmiar nieobsługiwany"
#: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c
#: shared-bindings/nvm/ByteArray.c
@ -2140,7 +2177,7 @@ msgstr ""
#: ports/raspberrypi/common-hal/alarm/touch/TouchAlarm.c
#: ports/stm/common-hal/alarm/touch/TouchAlarm.c
msgid "Touch alarms not available"
msgstr ""
msgstr "Alarmy dotykowe niedostępne"
#: py/obj.c
msgid "Traceback (most recent call last):\n"
@ -2169,7 +2206,7 @@ msgstr ""
#: main.c
msgid "UID:"
msgstr ""
msgstr "UID:"
#: shared-module/usb_hid/Device.c
msgid "USB busy"
@ -2185,7 +2222,7 @@ msgstr ""
#: shared-module/usb_hid/Device.c
msgid "USB error"
msgstr ""
msgstr "Błąd USB"
#: shared-bindings/_bleio/UUID.c
msgid "UUID integer value must be 0-0xffff"
@ -2251,7 +2288,7 @@ msgstr ""
#: shared-bindings/alarm/SleepMemory.c
msgid "Unable to write to sleep_memory."
msgstr ""
msgstr "Nie można zapisać do sleep_memory."
#: ports/nordic/common-hal/_bleio/UUID.c
msgid "Unexpected nrfx uuid type"
@ -2342,7 +2379,7 @@ msgstr ""
#: ports/espressif/common-hal/_bleio/Adapter.c
#: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update failed"
msgstr ""
msgstr "Aktualizacja nie powiodła się"
#: ports/espressif/common-hal/_bleio/Characteristic.c
#: ports/nordic/common-hal/_bleio/Characteristic.c
@ -2381,16 +2418,21 @@ msgid ""
"\n"
"To list built-in modules type `help(\"modules\")`.\n"
msgstr ""
"Witamy w Adafruit CircuitPython %s!\n"
"\n"
"Odwiedź circuitpython.org po więcej informacji.\n"
"\n"
"Aby wyświetlić listę wbudowanych modułów wpisz `help(„modules”)`.\n"
#: supervisor/shared/web_workflow/web_workflow.c
msgid "Wi-Fi: "
msgstr ""
msgstr "Wi-Fi: "
#: ports/espressif/common-hal/wifi/Radio.c
#: ports/raspberrypi/common-hal/wifi/Radio.c
#: ports/zephyr-cp/common-hal/wifi/Radio.c
msgid "WiFi is not enabled"
msgstr ""
msgstr "WiFi nie jest włączone"
#: main.c
msgid "Woken up by alarm.\n"
@ -2611,7 +2653,7 @@ msgstr "brak dwu-argumentowego operatora %q"
#: ports/espressif/common-hal/audiobusio/PDMIn.c
msgid "bit_depth must be 8, 16, 24, or 32."
msgstr ""
msgstr "bit_depth musi wynosić 8, 16, 24 lub 32."
#: shared-module/bitmapfilter/__init__.c
msgid "bitmap size and depth must match"
@ -2623,11 +2665,11 @@ msgstr ""
#: extmod/modrandom.c
msgid "bits must be 32 or less"
msgstr ""
msgstr "bitów musi wynosić 32 lub mniej"
#: shared-bindings/audiofreeverb/Freeverb.c
msgid "bits_per_sample must be 16"
msgstr ""
msgstr "bits_per_sample musi wynosić 16"
#: shared-bindings/audiodelays/Chorus.c shared-bindings/audiodelays/Echo.c
#: shared-bindings/audiodelays/MultiTapDelay.c
@ -2838,7 +2880,7 @@ msgstr ""
#: extmod/modasyncio.c
msgid "can't wait"
msgstr ""
msgstr "nie mogę się doczekać"
#: extmod/ulab/code/ndarray.c
msgid "cannot assign new shape"
@ -3025,7 +3067,7 @@ msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "divide by zero"
msgstr ""
msgstr "dziel przez zero"
#: py/runtime.c
msgid "division by zero"
@ -3045,7 +3087,7 @@ msgstr "puste"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
msgstr "puste plik"
#: extmod/modasyncio.c extmod/modheapq.c
msgid "empty heap"
@ -3164,7 +3206,7 @@ msgstr "float zbyt wielki"
#: py/nativeglue.c
msgid "float unsupported"
msgstr ""
msgstr "float nieobsługiwany"
#: shared-bindings/_stage/Text.c
msgid "font must be 2048 bytes long"
@ -3172,7 +3214,7 @@ msgstr "font musi mieć 2048 bajtów długości"
#: extmod/moddeflate.c
msgid "format"
msgstr ""
msgstr "format"
#: py/objstr.c
msgid "format needs a dict"
@ -3273,7 +3315,7 @@ msgstr ""
#: py/persistentcode.c
msgid "incompatible .mpy file"
msgstr ""
msgstr "niekompatybilny plik .mpy"
#: py/objstr.c
msgid "incomplete format"
@ -3685,7 +3727,7 @@ msgstr ""
#: shared-module/sdcardio/SDCard.c
msgid "no SD card"
msgstr ""
msgstr "brak karty SD"
#: py/vm.c
msgid "no active exception to reraise"
@ -3766,7 +3808,7 @@ msgstr "liczba punktów musi wynosić co najmniej 2"
#: py/builtinhelp.c
msgid "object "
msgstr ""
msgstr "obiekt "
#: py/obj.c
#, c-format
@ -3820,7 +3862,7 @@ msgstr "łańcuch o nieparzystej długości"
#: supervisor/shared/web_workflow/web_workflow.c
msgid "off"
msgstr ""
msgstr "wył"
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"

View file

@ -6,15 +6,15 @@ 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: 2025-03-09 18:40+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"PO-Revision-Date: 2025-06-09 12:01+0000\n"
"Last-Translator: MAE <martin-aehle@hotmail.de>\n"
"Language-Team: \n"
"Language: pt_BR\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.10.3-dev\n"
"X-Generator: Weblate 5.12-dev\n"
#: main.c
msgid ""
@ -117,7 +117,7 @@ msgstr "%q falha: %d"
#: shared-module/audiodelays/MultiTapDelay.c
msgid "%q in %q must be of type %q or %q, not %q"
msgstr ""
msgstr "%q em %q deve ser do tipo %q ou %q, não %q"
#: py/argcheck.c shared-module/audiofilters/Filter.c
msgid "%q in %q must be of type %q, not %q"
@ -874,6 +874,10 @@ msgstr "As coordenadas das matrizes possuem comprimentos diferentes"
msgid "Coordinate arrays types have different sizes"
msgstr "Os tipos das coordenadas das matrizes possuem tamanhos diferentes"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Não foi possível definir o endereço"
@ -886,6 +890,11 @@ msgstr "Não foi possível iniciar a interrupção, RX ocupado"
msgid "Couldn't allocate decoder"
msgstr "Não foi possível alocar o decodificador"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "Erro de Inicialização do Canal DAC"
@ -1325,6 +1334,10 @@ msgstr "BSSID Inválido"
msgid "Invalid MAC address"
msgstr "Endereço MAC inválido"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Argumento inválido"
@ -1418,7 +1431,7 @@ msgstr "Não há suporte para segurança MITM"
#: ports/stm/common-hal/sdioio/SDCard.c
#, c-format
msgid "MMC/SDIO Clock Error %x"
msgstr ""
msgstr "Erro de relógio MMC/SDIO %x"
#: shared-bindings/is31fl3741/IS31FL3741.c
msgid "Mapping must be a tuple"
@ -1897,6 +1910,10 @@ msgstr "O tamanho do programa é inválido"
msgid "Program too long"
msgstr "Programa muito longo"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "O Pull não foi usado quando a direção for gerada."
@ -1917,6 +1934,26 @@ msgstr "Erro DeInit RNG"
msgid "RNG Init Error"
msgstr "Houve um erro na inicialização do RNG"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"
@ -2435,7 +2472,7 @@ msgstr "Wi-Fi: "
#: ports/raspberrypi/common-hal/wifi/Radio.c
#: ports/zephyr-cp/common-hal/wifi/Radio.c
msgid "WiFi is not enabled"
msgstr ""
msgstr "O WiFi não está habilitado"
#: main.c
msgid "Woken up by alarm.\n"
@ -2673,7 +2710,7 @@ msgstr "bits deve ser 32 ou menos"
#: shared-bindings/audiofreeverb/Freeverb.c
msgid "bits_per_sample must be 16"
msgstr ""
msgstr "bits_per_sample deve ser 16"
#: shared-bindings/audiodelays/Chorus.c shared-bindings/audiodelays/Echo.c
#: shared-bindings/audiodelays/MultiTapDelay.c
@ -4119,7 +4156,7 @@ msgstr "rsplit(Nenhum,n)"
#: shared-bindings/audiofreeverb/Freeverb.c
msgid "samples_signed must be true"
msgstr ""
msgstr "samples_signed deve ser verdadeiro"
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c

View file

@ -874,6 +874,10 @@ msgstr "Координатные массивы имеют разные длин
msgid "Coordinate arrays types have different sizes"
msgstr "Типы массивов координат имеют разные размеры"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Не удалось задать адрес"
@ -886,6 +890,11 @@ msgstr "Не удалось запустить прерывание, RX заня
msgid "Couldn't allocate decoder"
msgstr "Не удалось выделить место для декодера"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "Ошибка инициализации канала DAC"
@ -1328,6 +1337,10 @@ msgstr "Неверный BSSID"
msgid "Invalid MAC address"
msgstr "Неверный MAC-адрес"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Недопустимый аргумент"
@ -1894,6 +1907,10 @@ msgstr "Недопустимый размер программы"
msgid "Program too long"
msgstr "Слишком длинная программа"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "Тяга не используется, когда выводится направление."
@ -1914,6 +1931,26 @@ msgstr "Ошибка деинициализации генератора слу
msgid "RNG Init Error"
msgstr "Ошибка инициализации RNG"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

View file

@ -6,8 +6,8 @@ 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: 2025-05-15 08:01+0000\n"
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
"PO-Revision-Date: 2025-06-15 23:04+0000\n"
"Last-Translator: Jonny Bergdahl <github@bergdahl.org>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
@ -868,6 +868,10 @@ msgstr "Arrayer för koordinater har olika längd"
msgid "Coordinate arrays types have different sizes"
msgstr "Arrayer för koordinater har olika storlek"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr "Kan inte publicera till ROS topic"
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Kan inte ange adress"
@ -880,6 +884,11 @@ msgstr "Det gick inte att starta avbrott, RX upptagen"
msgid "Couldn't allocate decoder"
msgstr "Det gick inte att allokera avkodaren"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr "Kritiskt ROS-fel vid mjuk omstart, reset krävs: %d"
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "Initieringsfel för DAC-kanal"
@ -1314,6 +1323,10 @@ msgstr "Ogiltig BSSID"
msgid "Invalid MAC address"
msgstr "Ogiltig MAC-adress"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr "Ogiltigt ROS domän-id"
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Ogiltigt argument"
@ -1876,6 +1889,10 @@ msgstr "Programstorlek ogiltig"
msgid "Program too long"
msgstr "Programmet är för långt"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr "Publicerare kan bara skapas from föräldranod"
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "Pull används inte när riktningen är output."
@ -1896,6 +1913,26 @@ msgstr "RNG DeInit-fel"
msgid "RNG Init Error"
msgstr "RNG Init-fel"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr "Fel vid ROS initialisering, är agent ansluten?"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr "Fel vid ROS intern inställning"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr "Fel vid ROS minnesallokering"
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr "Fel vid ROS-nods initialisering"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr "Fel vid initialisering av ROS topic"
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

View file

@ -864,6 +864,10 @@ msgstr ""
msgid "Coordinate arrays types have different sizes"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "Adres ayarlanamadı"
@ -876,6 +880,11 @@ msgstr "Kesinti başlatılamadı, RX kullanımda"
msgid "Couldn't allocate decoder"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr ""
@ -1307,6 +1316,10 @@ msgstr "Geçersiz BSSID"
msgid "Invalid MAC address"
msgstr "Geçersiz MAC adresi"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Geçersiz argüman"
@ -1865,6 +1878,10 @@ msgstr ""
msgid "Program too long"
msgstr ""
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr ""
@ -1885,6 +1902,26 @@ msgstr ""
msgid "RNG Init Error"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"

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: 2025-04-25 15:04+0000\n"
"PO-Revision-Date: 2025-05-31 20:05+0000\n"
"Last-Translator: hexthat <hexthat@gmail.com>\n"
"Language-Team: Chinese Hanyu Pinyin\n"
"Language: zh_Latn_pinyin\n"
@ -868,6 +868,10 @@ msgstr "zuòbiāo shùzǔ jùyǒu bùtóng de chángdù"
msgid "Coordinate arrays types have different sizes"
msgstr "zuòbiāo shùzǔ lèixíng jùyǒu bùtóng de dàxiǎo"
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "Could not publish to ROS topic"
msgstr ""
#: shared-bindings/_bleio/Adapter.c
msgid "Could not set address"
msgstr "wúfǎ shèzhì dìzhǐ"
@ -880,6 +884,11 @@ msgstr "Wúfǎ qǐdòng zhōngduàn,RX máng"
msgid "Couldn't allocate decoder"
msgstr "wúfǎ fēnpèi jiěmǎ qì"
#: ports/espressif/common-hal/rclcpy/__init__.c
#, c-format
msgid "Critical ROS failure during soft reboot, reset required: %d"
msgstr ""
#: ports/stm/common-hal/analogio/AnalogOut.c
msgid "DAC Channel Init Error"
msgstr "DAC tōngdào chūshǐhuà cuòwù"
@ -1320,6 +1329,10 @@ msgstr "Wúxiào de BSSID"
msgid "Invalid MAC address"
msgstr "wú xiào de MAC dì zhǐ"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "Invalid ROS domain ID"
msgstr ""
#: ports/espressif/common-hal/espidf/__init__.c py/moderrno.c
msgid "Invalid argument"
msgstr "Wúxiào de cānshù"
@ -1883,6 +1896,10 @@ msgstr "chéng xù dà xiǎo wú xiào"
msgid "Program too long"
msgstr "chéng xù tài cháng"
#: shared-bindings/rclcpy/Publisher.c
msgid "Publishers can only be created from a parent node"
msgstr ""
#: shared-bindings/digitalio/DigitalInOut.c
msgid "Pull not used when direction is output."
msgstr "Fāngxiàng shūchū shí Pull méiyǒu shǐyòng."
@ -1903,6 +1920,26 @@ msgstr "RNG qǔxiāo chūshǐhuà cuòwù"
msgid "RNG Init Error"
msgstr "RNG chūshǐhuà cuòwù"
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS failed to initialize. Is agent connected?"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS internal setup failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/__init__.c
msgid "ROS memory allocator failure"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Node.c
msgid "ROS node failed to initialize"
msgstr ""
#: ports/espressif/common-hal/rclcpy/Publisher.c
msgid "ROS topic failed to initialize"
msgstr ""
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
#: ports/nordic/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c
msgid "RS485"
@ -2116,7 +2153,7 @@ msgstr "Píng pū kuāndù bìxū huàfēn wèi tú kuāndù"
#: shared-module/tilepalettemapper/TilePaletteMapper.c
msgid "TilePaletteMapper may only be bound to a TileGrid once"
msgstr ""
msgstr "TilePaletteMapper zhǐnéng bǎngdìng dào yígè TileGrid shàngyícì"
#: shared-bindings/alarm/time/TimeAlarm.c
msgid "Time is in the past."
@ -2411,7 +2448,7 @@ msgstr "Wi-Fi: "
#: ports/raspberrypi/common-hal/wifi/Radio.c
#: ports/zephyr-cp/common-hal/wifi/Radio.c
msgid "WiFi is not enabled"
msgstr ""
msgstr "WiFi wèi qǐyòng"
#: main.c
msgid "Woken up by alarm.\n"

View file

@ -440,6 +440,55 @@ CFLAGS += -isystem esp-camera/driver/include
CFLAGS += -isystem esp-camera/conversions/include
endif
ifneq ($(CIRCUITPY_RCLCPY),0)
CFLAGS += -isystem microros-lib/include
CFLAGS += -isystem microros-lib/include/rcl
CFLAGS += -isystem microros-lib/include/statistics_msgs
CFLAGS += -isystem microros-lib/include/composition_interfaces
CFLAGS += -isystem microros-lib/include/example_interfaces
CFLAGS += -isystem microros-lib/include/rmw_microxrcedds_c
CFLAGS += -isystem microros-lib/include/test_msgs
CFLAGS += -isystem microros-lib/include/std_msgs
CFLAGS += -isystem microros-lib/include/rcutils
CFLAGS += -isystem microros-lib/include/lifecycle_msgs
CFLAGS += -isystem microros-lib/include/rosidl_typesupport_interface
CFLAGS += -isystem microros-lib/include/service_msgs
CFLAGS += -isystem microros-lib/include/visualization_msgs
CFLAGS += -isystem microros-lib/include/rosidl_dynamic_typesupport
CFLAGS += -isystem microros-lib/include/stereo_msgs
CFLAGS += -isystem microros-lib/include/ucdr
CFLAGS += -isystem microros-lib/include/rosidl_typesupport_c
CFLAGS += -isystem microros-lib/include/std_srvs
CFLAGS += -isystem microros-lib/include/rcl_lifecycle
CFLAGS += -isystem microros-lib/include/action_msgs
CFLAGS += -isystem microros-lib/include/micro_ros_utilities
CFLAGS += -isystem microros-lib/include/rcl_action
CFLAGS += -isystem microros-lib/include/rcl_logging_interface
CFLAGS += -isystem microros-lib/include/type_description_interfaces
CFLAGS += -isystem microros-lib/include/nav_msgs
CFLAGS += -isystem microros-lib/include/actionlib_msgs
CFLAGS += -isystem microros-lib/include/rmw
CFLAGS += -isystem microros-lib/include/rclc_parameter
CFLAGS += -isystem microros-lib/include/geometry_msgs
CFLAGS += -isystem microros-lib/include/sensor_msgs
CFLAGS += -isystem microros-lib/include/trajectory_msgs
CFLAGS += -isystem microros-lib/include/shape_msgs
CFLAGS += -isystem microros-lib/include/rosidl_runtime_c
CFLAGS += -isystem microros-lib/include/rclc
CFLAGS += -isystem microros-lib/include/rosgraph_msgs
CFLAGS += -isystem microros-lib/include/rclc_lifecycle
CFLAGS += -isystem microros-lib/include/rcl_interfaces
CFLAGS += -isystem microros-lib/include/diagnostic_msgs
CFLAGS += -isystem microros-lib/include/micro_ros_msgs
CFLAGS += -isystem microros-lib/include/rosidl_typesupport_introspection_c
CFLAGS += -isystem microros-lib/include/uxr
CFLAGS += -isystem microros-lib/include/unique_identifier_msgs
CFLAGS += -isystem microros-lib/include/rosidl_typesupport_microxrcedds_c
CFLAGS += -isystem microros-lib/include/builtin_interfaces
CFLAGS += -isystem microros-lib/include/tracetools
CFLAGS += -isystem microros-lib/include/rmw_microros
endif
ifneq ($(CIRCUITPY_ESPIDF),0)
SRC_ESPIDF := \
$(wildcard common-hal/espidf/*.c) \
@ -523,11 +572,14 @@ ifeq ($(CIRCUITPY_ESP_FLASH_SIZE), 2MB)
else
UF2_BOOTLOADER ?= $(CIRCUITPY_USB_DEVICE)
ifeq ($(UF2_BOOTLOADER), 1)
# UF2-capable board
FLASH_SIZE_SDKCONFIG ?= esp-idf-config/sdkconfig-flash-$(CIRCUITPY_ESP_FLASH_SIZE).defaults
else
# non-UF2 partition layout
ifeq ($(CIRCUITPY_ESP_FLASH_SIZE), 4MB)
ifeq ($(CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT), 1)
FLASH_SIZE_SDKCONFIG ?= esp-idf-config/sdkconfig-flash-$(CIRCUITPY_ESP_FLASH_SIZE)-no-uf2.defaults
ifeq ($(CIRCUITPY_4MB_FLASH_LARGE_USER_FS_LAYOUT), 1)
# Some boards use a 2MB firmware and almost 2MB user filesystem, for historical reasons.
FLASH_SIZE_SDKCONFIG ?= esp-idf-config/sdkconfig-flash-$(CIRCUITPY_ESP_FLASH_SIZE)-no-ota-no-uf2-large-user_fs.defaults
else
FLASH_SIZE_SDKCONFIG ?= esp-idf-config/sdkconfig-flash-$(CIRCUITPY_ESP_FLASH_SIZE)-no-ota-no-uf2.defaults
endif
@ -685,6 +737,18 @@ ESP_IDF_COMPONENTS_EXPANDED += $(BUILD)/esp-idf/esp-idf/esp-camera/libesp-camera
#$(error $(ESP_IDF_COMPONENTS_EXPANDED))
endif
ifneq ($(CIRCUITPY_RCLCPY),0)
ifeq ($(IDF_TARGET),esp32)
BINARY_BLOBS += microros-lib/esp32/libmicroros.a
else ifeq ($(IDF_TARGET),esp32s2)
BINARY_BLOBS+= microros-lib/esp32s2/libmicroros.a
else ifeq ($(IDF_TARGET),esp32s3)
BINARY_BLOBS += microros-lib/esp32s3/libmicroros.a
else
$(error Unsupported Espressif target for Micro-ROS: $(IDF_TARGET).)
endif
endif
ifneq ($(VALID_BOARD),)
# From esp-idf/components/bootloader/Kconfig.projbuild
# BOOTLOADER_OFFSET is determined by chip type, based on the ROM bootloader, and is not changeable.

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1

View file

@ -6,3 +6,6 @@ IDF_TARGET = esp32c6
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
# Board was originally defined with a 2MB firmware, almost 2MB user filesystem. Leave it that way.
CIRCUITPY_4MB_FLASH_LARGE_USER_FS_LAYOUT = 1

View file

@ -18,5 +18,4 @@ OPTIMIZATION_FLAGS = -Os
#CIRCUITPY_PARALLELDISPLAYBUS = 0
CIRCUITPY_BLEIO_NATIVE = 1
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 0
FLASH_SIZE_SDKCONFIG = esp-idf-config/sdkconfig-flash-$(CIRCUITPY_ESP_FLASH_SIZE)-no-ota.defaults

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESPCAMERA = 0

View file

@ -7,13 +7,8 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
# Not enough flash space.
CIRCUITPY_CODEOP = 0
# Not enough pins.
CIRCUITPY_PARALLELDISPLAYBUS = 0
CIRCUITPY_RGBMATRIX = 0

View file

@ -7,7 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 0
CIRCUITPY_TILEPALETTEMAPPER = 0

View file

@ -8,7 +8,4 @@ CIRCUITPY_ESP_FLASH_MODE=qio
CIRCUITPY_ESP_FLASH_FREQ=80m
CIRCUITPY_ESP_FLASH_SIZE=4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
CIRCUITPY_TILEPALETTEMAPPER = 0

View file

@ -6,3 +6,6 @@ IDF_TARGET = esp32c6
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
# Board was originally defined with a 2MB firmware, almost 2MB user filesystem. Leave it that way.
CIRCUITPY_4MB_FLASH_LARGE_USER_FS_LAYOUT = 1

View file

@ -10,5 +10,3 @@ CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESP_PSRAM_SIZE = 8MB
CIRCUITPY_ESP_PSRAM_MODE = qio
CIRCUITPY_ESP_PSRAM_FREQ = 80m
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1

View file

@ -10,5 +10,3 @@ CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESP_PSRAM_SIZE = 8MB
CIRCUITPY_ESP_PSRAM_MODE = qio
CIRCUITPY_ESP_PSRAM_FREQ = 80m
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1

View file

@ -14,8 +14,6 @@ CIRCUITPY_ESP_PSRAM_SIZE = 8MB
CIRCUITPY_ESP_PSRAM_MODE = opi
CIRCUITPY_ESP_PSRAM_FREQ = 80m
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESPCAMERA = 0
CIRCUITPY_BITMAPFILTER = 0
CIRCUITPY_CODEOP = 0

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1

View file

@ -10,6 +10,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESPCAMERA = 0

View file

@ -13,5 +13,3 @@ CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_PSRAM_SIZE = 2MB
CIRCUITPY_ESP_PSRAM_MODE = qio
CIRCUITPY_ESP_PSRAM_FREQ = 80m
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1

View file

@ -6,6 +6,5 @@ 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_ESPCAMERA = 0

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESPCAMERA = 0

View file

@ -13,8 +13,6 @@ CIRCUITPY_ESP_PSRAM_SIZE = 8MB
CIRCUITPY_ESP_PSRAM_MODE = qio
CIRCUITPY_ESP_PSRAM_FREQ = 40m
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_CANIO = 0
CIRCUITPY_NEOPIXEL_WRITE = 0
CIRCUITPY_PIXELBUF = 0

View file

@ -11,6 +11,4 @@ CIRCUITPY_ESP_PSRAM_SIZE = 4MB
CIRCUITPY_ESP_PSRAM_MODE = qio
CIRCUITPY_ESP_PSRAM_FREQ = 40m
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESPCAMERA = 0

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 0

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_AUDIOMP3 = 0

View file

@ -6,3 +6,6 @@ IDF_TARGET = esp32h2
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 48m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
# Board was originally defined with a 2MB firmware, almost 2MB user filesystem. Leave it that way.
CIRCUITPY_4MB_FLASH_LARGE_USER_FS_LAYOUT = 1

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,16 @@
// 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 "ESP32-S3-DevKitC-1-N8R2 (ROS version)"
#define MICROPY_HW_MCU_NAME "ESP32S3"
#define MICROPY_HW_NEOPIXEL (&pin_GPIO48)
#define DEFAULT_UART_BUS_RX (&pin_GPIO44)
#define DEFAULT_UART_BUS_TX (&pin_GPIO43)

View file

@ -0,0 +1,16 @@
USB_VID = 0x303A
USB_PID = 0x7003
USB_PRODUCT = "ESP32-S3-DevKitC-1-N8R2 CPY/ROS"
USB_MANUFACTURER = "Espressif"
IDF_TARGET = esp32s3
CIRCUITPY_ESP_FLASH_SIZE = 8MB
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_PSRAM_SIZE = 2MB
CIRCUITPY_ESP_PSRAM_MODE = qio
CIRCUITPY_ESP_PSRAM_FREQ = 80m
CIRCUITPY_RCLCPY = 1

View file

@ -0,0 +1,55 @@
// 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) },
{ MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) },
{ 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) },
{ MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) },
{ MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) },
{ MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) },
{ 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) },
{ MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) },
{ 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_NEOPIXEL), MP_ROM_PTR(&pin_GPIO48) },
{ 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) },
};
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

@ -6,3 +6,6 @@ IDF_TARGET = esp32c2
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 60m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
# Board was originally defined with a 2MB firmware, almost 2MB user filesystem. Leave it that way.
CIRCUITPY_4MB_FLASH_LARGE_USER_FS_LAYOUT = 1

View file

@ -34,10 +34,10 @@ uint8_t display_init_sequence[] = { // SSD1306
digitalio_digitalinout_obj_t display_on;
static void display_init(void) {
// Need to bring GPIO21 high or the screen doesn't get power
// Need to bring GPIO36 high or the screen doesn't get power
// & the board can't see the i2c bus at all.
common_hal_digitalio_digitalinout_construct(&display_on, &pin_GPIO21);
common_hal_digitalio_digitalinout_switch_to_output(&display_on, true, DRIVE_MODE_PUSH_PULL);
common_hal_digitalio_digitalinout_construct(&display_on, &pin_GPIO36);
common_hal_digitalio_digitalinout_switch_to_output(&display_on, false, DRIVE_MODE_PUSH_PULL);
common_hal_digitalio_digitalinout_never_reset(&display_on);
busio_i2c_obj_t *i2c = common_hal_board_create_i2c(0);
@ -48,7 +48,7 @@ static void display_init(void) {
bus,
i2c,
0x3c,
NULL
&pin_GPIO21 // broken-out on V3
);
busdisplay_busdisplay_obj_t *display = &allocate_display()->display;

View file

@ -8,3 +8,6 @@ CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESP_USB_SERIAL_JTAG = 0
# Board was originally defined with a 2MB firmware, almost 2MB user filesystem. Leave it that way.
CIRCUITPY_4MB_FLASH_LARGE_USER_FS_LAYOUT = 1

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 0

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESPCAMERA = 0

View file

@ -7,10 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE=qio
CIRCUITPY_ESP_FLASH_FREQ=80m
CIRCUITPY_ESP_FLASH_SIZE=4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
# Not enough flash
CIRCUITPY_SOCKETPOOL_IPV6 = 0
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
CIRCUITPY_TILEPALETTEMAPPER = 0

View file

@ -7,12 +7,7 @@ CIRCUITPY_ESP_FLASH_MODE=qio
CIRCUITPY_ESP_FLASH_FREQ=80m
CIRCUITPY_ESP_FLASH_SIZE=4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
# Not enough flash
CIRCUITPY_SOCKETPOOL_IPV6 = 0
# Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel

View file

@ -7,7 +7,6 @@
#
# LWIP
#
# CONFIG_LWIP_IPV6 is not set
# end of LWIP
# end of Component config

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE=dio
CIRCUITPY_ESP_FLASH_FREQ=80m
CIRCUITPY_ESP_FLASH_SIZE=4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE=dio
CIRCUITPY_ESP_FLASH_FREQ=80m
CIRCUITPY_ESP_FLASH_SIZE=4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 0

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESPCAMERA = 0

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESPCAMERA = 0

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESPCAMERA = 0

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESPCAMERA = 0

View file

@ -0,0 +1,95 @@
// 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 "mpconfigboard.h"
#include "supervisor/board.h"
#include "supervisor/shared/serial.h"
#include "shared-bindings/busio/SPI.h"
#include "shared-bindings/fourwire/FourWire.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/displayio/mipi_constants.h"
#include "shared-bindings/board/__init__.h"
#include "py/runtime.h"
#include "py/ringbuf.h"
#include "shared/runtime/interrupt_char.h"
#define DELAY 0x80
uint8_t display_init_sequence[] = {
// SWRESET and Delay 140ms
0x01, 0 | DELAY, 140,
// SLPOUT and Delay 10ms
0x11, 0 | DELAY, 10,
// COLMOD 65k colors and 16 bit 5-6-5
0x3A, 1, 0x55,
// INVON Iiversion on
0x21, 0,
// NORON normal operation (full update)
0x13, 0,
// MADCTL columns RTL, page/column reverse order
0x36, 1, 0x60,
// RAMCTRL color word little endian
0xB0, 2, 0x00, 0xF8,
// DIPON display on
0x29, 0,
};
// Overrides the weakly linked function from supervisor/shared/board.c
void board_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;
// see here for inspiration: https://github.com/m5stack/M5GFX/blob/33d7d3135e816a86a008fae8ab3757938cee95d2/src/M5GFX.cpp#L1350
common_hal_fourwire_fourwire_construct(
bus,
spi,
&pin_GPIO34, // DC
&pin_GPIO37, // CS
&pin_GPIO33, // 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,
240, // width (after rotation)
135, // height (after rotation)
40, // column start
53, // 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
false, // 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_GPIO38, // 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
350 // backlight pwm frequency
);
}
// TODO: Should we turn off the display when asleep, in board_deinit() ?

View file

@ -0,0 +1,238 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2016 Scott Shawcroft
//
// SPDX-License-Identifier: MIT
#include "py/obj.h"
#include "py/objstr.h"
#include "py/runtime.h"
#include "supervisor/shared/serial.h"
#include "shared-bindings/keypad/EventQueue.h"
#include "shared-bindings/keypad_demux/DemuxKeyMatrix.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-module/keypad/EventQueue.h"
#include "shared-module/keypad_demux/DemuxKeyMatrix.h"
#include "supervisor/shared/reload.h"
#include "keymap.h"
//| """M5Stack Cardputer keyboard integration.
//| """
//|
//| """The KEYBOARD object is an instance of DemuxKeyMatrix, configured with correct pins.
//| The pins cannot be used for any other purposes (even though exposed in the board module).
//| By default all keyboard events are consumed and routed to the standard input - there is
//| not much use of the KEYBOARD object in this configuration - just read the input via sys.stdin.
//|
//| If you need to manually process individual key up / key down events via KEYBOARD.events,
//| call `detach_serial()`.
//| """"
//| KEYBOARD: keypad_demux.DemuxKeymatrix
//|
keypad_demux_demuxkeymatrix_obj_t cardputer_keyboard_obj;
bool cardputer_keyboard_serial_attached = false;
void cardputer_keyboard_init(void);
void keyboard_seq(const char *seq);
void update_keyboard(keypad_eventqueue_obj_t *queue);
//| def detach_serial() -> None:
//| """Stops consuming keyboard events and routing them to sys.stdin."""
//| ...
//|
static mp_obj_t detach_serial(void) {
cardputer_keyboard_serial_attached = false;
common_hal_keypad_eventqueue_set_event_handler(cardputer_keyboard_obj.events, NULL);
return mp_const_none;
}
static MP_DEFINE_CONST_FUN_OBJ_0(detach_serial_obj, detach_serial);
//| def attach_serial() -> None:
//| """Starts consuming keyboard events and routing them to sys.stdin."""
//| ...
//|
static mp_obj_t attach_serial(void) {
common_hal_keypad_eventqueue_set_event_handler(cardputer_keyboard_obj.events, update_keyboard);
cardputer_keyboard_serial_attached = true;
return mp_const_none;
}
static MP_DEFINE_CONST_FUN_OBJ_0(attach_serial_obj, attach_serial);
//| def key_to_char(key: int, shifted: bool) -> str | None:
//| """Converts a key index to the respective key (with or without shift modifier).
//| Returns None for functional & modifier keys or whenever not 0 <= key < 56.
//| """
//| ...
//|
static mp_obj_t key_to_char(mp_obj_t key_obj, mp_obj_t shifted_obj) {
mp_int_t key = mp_obj_get_int(key_obj);
if (key < 0 || key > (mp_int_t)(sizeof keymap / sizeof *keymap) || keymap[key] == 0) {
return mp_const_none;
} else if (shifted_obj == mp_const_true) {
return mp_obj_new_str(&keymap_shifted[key], 1);
} else {
return mp_obj_new_str(&keymap[key], 1);
}
}
static MP_DEFINE_CONST_FUN_OBJ_2(key_to_char_obj, key_to_char);
// Ring buffer of characters consumed from keyboard events (when serial attached)
ringbuf_t keyqueue;
char keybuf[32];
keypad_event_obj_t event;
char keystate[56];
// Keyboard pins
const mcu_pin_obj_t *row_addr_pins[] = {
&pin_GPIO8,
&pin_GPIO9,
&pin_GPIO11,
};
const mcu_pin_obj_t *column_pins[] = {
&pin_GPIO13,
&pin_GPIO15,
&pin_GPIO3,
&pin_GPIO4,
&pin_GPIO5,
&pin_GPIO6,
&pin_GPIO7
};
void cardputer_keyboard_init(void) {
cardputer_keyboard_obj.base.type = &keypad_demux_demuxkeymatrix_type;
common_hal_keypad_demux_demuxkeymatrix_construct(
&cardputer_keyboard_obj, // self
3, // num_row_addr_pins
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
);
demuxkeymatrix_never_reset(&cardputer_keyboard_obj);
ringbuf_init(&keyqueue, (uint8_t *)keybuf, sizeof(keybuf));
attach_serial();
}
// Overrides the weakly linked function from supervisor/shared/serial.c
void board_serial_init(void) {
cardputer_keyboard_init();
}
// Overrides the weakly linked function from supervisor/shared/serial.c
bool board_serial_connected(void) {
return cardputer_keyboard_serial_attached;
}
// Overrides the weakly linked function from supervisor/shared/serial.c
uint32_t board_serial_bytes_available(void) {
if (cardputer_keyboard_serial_attached) {
return ringbuf_num_filled(&keyqueue);
} else {
return 0;
}
}
// Overrides the weakly linked function from supervisor/shared/serial.c
char board_serial_read(void) {
if (cardputer_keyboard_serial_attached) {
return ringbuf_get(&keyqueue);
} else {
return 0;
}
}
void keyboard_seq(const char *seq) {
while (*seq) {
ringbuf_put(&keyqueue, *seq++);
}
}
void update_keyboard(keypad_eventqueue_obj_t *queue) {
uint8_t ascii = 0;
if (common_hal_keypad_eventqueue_get_length(queue) == 0) {
return;
}
while (common_hal_keypad_eventqueue_get_into(queue, &event)) {
if (event.pressed) {
keystate[event.key_number] = 1;
if (keystate[KEY_CTRL]) {
if (keystate[KEY_ALT] && keystate[KEY_BACKSPACE]) {
reload_initiate(RUN_REASON_REPL_RELOAD);
}
ascii = keymap[event.key_number];
if (ascii >= 'a' && ascii <= 'z') {
ascii -= 'a' - 1;
}
if (ascii == mp_interrupt_char) {
mp_sched_keyboard_interrupt();
}
} else if (keystate[KEY_SHIFT]) {
ascii = keymap_shifted[event.key_number];
} else if (keystate[KEY_FN] && event.key_number != KEY_FN) {
switch (event.key_number | FN_MOD)
{
case KEY_DOWN:
keyboard_seq("\e[B");
break;
case KEY_UP:
keyboard_seq("\e[A");
break;
case KEY_DELETE:
keyboard_seq("\e[3~");
break;
case KEY_LEFT:
keyboard_seq("\e[D");
break;
case KEY_RIGHT:
keyboard_seq("\e[C");
break;
case KEY_ESC:
ringbuf_put(&keyqueue, '\e');
break;
}
} else {
ascii = keymap[event.key_number];
}
if (ascii > 0) {
if (keystate[KEY_ALT]) {
ringbuf_put(&keyqueue, '\e');
} else if (keystate[KEY_OPT]) {
ringbuf_put(&keyqueue, '\x10');
}
ringbuf_put(&keyqueue, ascii);
}
} else {
keystate[event.key_number] = 0;
}
}
}
static const mp_rom_map_elem_t cardputer_keyboard_module_globals_table[] = {
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_cardputer_keyboard)},
{MP_ROM_QSTR(MP_QSTR_KEYBOARD), MP_ROM_PTR(&cardputer_keyboard_obj)},
{MP_ROM_QSTR(MP_QSTR_attach_serial), MP_ROM_PTR(&attach_serial_obj)},
{MP_ROM_QSTR(MP_QSTR_detach_serial), MP_ROM_PTR(&detach_serial_obj)},
{MP_ROM_QSTR(MP_QSTR_key_to_char), MP_ROM_PTR(&key_to_char_obj)},
};
MP_DEFINE_CONST_DICT(cardputer_keyboard_module_globals, cardputer_keyboard_module_globals_table);
const mp_obj_module_t cardputer_keyboard_module = {
.base = {&mp_type_module},
.globals = (mp_obj_dict_t *)&cardputer_keyboard_module_globals,
};
MP_REGISTER_MODULE(MP_QSTR_cardputer_keyboard, cardputer_keyboard_module);

View file

@ -0,0 +1,214 @@
// 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
#pragma once
#define SHIFT_MOD 0x40
#define FN_MOD 0x80
#define KEY_OPT 0
#define KEY_Z 1
#define KEY_C 2
#define KEY_B 3
#define KEY_M 4
#define KEY_DOT 5
#define KEY_SPACE 6
#define KEY_SHIFT 7
#define KEY_S 8
#define KEY_F 9
#define KEY_H 10
#define KEY_K 11
#define KEY_SEMICOLON 12
#define KEY_ENTER 13
#define KEY_Q 14
#define KEY_E 15
#define KEY_T 16
#define KEY_U 17
#define KEY_O 18
#define KEY_LEFT_BRACKET 19
#define KEY_BACKSLASH 20
#define KEY_1 21
#define KEY_3 22
#define KEY_5 23
#define KEY_7 24
#define KEY_9 25
#define KEY_UNDERSCORE 26
#define KEY_BACKSPACE 27
#define KEY_CTRL 28
#define KEY_ALT 29
#define KEY_X 30
#define KEY_V 31
#define KEY_N 32
#define KEY_COMMA 33
#define KEY_SLASH 34
#define KEY_FN 35
#define KEY_A 36
#define KEY_D 37
#define KEY_G 38
#define KEY_J 39
#define KEY_L 40
#define KEY_APOSTROPHE 41
#define KEY_TAB 42
#define KEY_W 43
#define KEY_R 44
#define KEY_Y 45
#define KEY_I 46
#define KEY_P 47
#define KEY_RIGHT_BRACKET 48
#define KEY_GRAVE 49
#define KEY_2 50
#define KEY_4 51
#define KEY_6 52
#define KEY_8 53
#define KEY_0 54
#define KEY_EQUALS 55
#define KEY_GREATER (5 | SHIFT_MOD)
#define KEY_COLON (12 | SHIFT_MOD)
#define KEY_LEFT_CURLY_BRACKET (19 | SHIFT_MOD)
#define KEY_PIPE (20 | SHIFT_MOD)
#define KEY_EXCLAMATION (21 | SHIFT_MOD)
#define KEY_HASH (22 | SHIFT_MOD)
#define KEY_PERCENT (23 | SHIFT_MOD)
#define KEY_AMPERSAND (24 | SHIFT_MOD)
#define KEY_OPEN_PARENTHESIS (25 | SHIFT_MOD)
#define KEY_MINUS (26 | SHIFT_MOD)
#define KEY_LESS (33 | SHIFT_MOD)
#define KEY_QUESTION (34 | SHIFT_MOD)
#define KEY_DOUBLE_QUOTE (41 | SHIFT_MOD)
#define KEY_RIGHT_CURLY_BRACKET (48 | SHIFT_MOD)
#define KEY_TILDE (49 | SHIFT_MOD)
#define KEY_AT (50 | SHIFT_MOD)
#define KEY_DOLLAR (51 | SHIFT_MOD)
#define KEY_CARET (52 | SHIFT_MOD)
#define KEY_ASTERISK (53 | SHIFT_MOD)
#define KEY_CLOSE_PARENTHESIS (54 | SHIFT_MOD)
#define KEY_PLUS (55 | SHIFT_MOD)
#define KEY_DOWN (5 | FN_MOD)
#define KEY_UP (12 | FN_MOD)
#define KEY_DELETE (27 | FN_MOD)
#define KEY_LEFT (33 | FN_MOD)
#define KEY_RIGHT (34 | FN_MOD)
#define KEY_ESC (49 | FN_MOD)
const char keymap[56] = {
0, // KEY_OPT
'z', // KEY_Z
'c', // KEY_C
'b', // KEY_B
'm', // KEY_M
'.', // KEY_DOT
' ', // KEY_SPACE
0, // KEY_SHIFT
's', // KEY_S
'f', // KEY_F
'h', // KEY_H
'k', // KEY_K
';', // KEY_SEMICOLON
'\r',// KEY_ENTER
'q', // KEY_Q
'e', // KEY_E
't', // KEY_T
'u', // KEY_U
'o', // KEY_O
'[', // KEY_LEFT_BRACKET
'\\',// KEY_BACKSLASH
'1', // KEY_1
'3', // KEY_3
'5', // KEY_5
'7', // KEY_7
'9', // KEY_9
'_', // KEY_UNDERSCORE
'\b',// KEY_BACKSPACE
0, // KEY_CTRL
0, // KEY_ALT
'x', // KEY_X
'v', // KEY_V
'n', // KEY_N
',', // KEY_COMMA
'/', // KEY_SLASH
0, // KEY_FN
'a', // KEY_A
'd', // KEY_D
'g', // KEY_G
'j', // KEY_J
'l', // KEY_L
'\'',// KEY_APOSTROPHE
'\t',// KEY_TAB
'w', // KEY_W
'r', // KEY_R
'y', // KEY_Y
'i', // KEY_I
'p', // KEY_P
']', // KEY_RIGHT_BRACKET
'`', // KEY_GRAVE
'2', // KEY_2
'4', // KEY_4
'6', // KEY_6
'8', // KEY_8
'0', // KEY_0
'=' // KEY_EQUALS
};
const char keymap_shifted[56] = {
0, // KEY_OPT
'Z', // KEY_Z
'C', // KEY_C
'B', // KEY_B
'M', // KEY_M
'>', // KEY_DOT -> '>'
' ', // KEY_SPACE
0, // KEY_SHIFT
'S', // KEY_S
'F', // KEY_F
'H', // KEY_H
'K', // KEY_K
':', // KEY_SEMICOLON -> ':'
'\r',// KEY_ENTER
'Q', // KEY_Q
'E', // KEY_E
'T', // KEY_T
'U', // KEY_U
'O', // KEY_O
'{', // KEY_LEFT_BRACKET -> '{'
'|', // KEY_BACKSLASH -> '|'
'!', // KEY_1 -> '!'
'#', // KEY_3 -> '#'
'%', // KEY_5 -> '%'
'&', // KEY_7 -> '&'
'(', // KEY_9 -> '('
'-', // KEY_UNDERSCORE -> '-'
'\b',// KEY_BACKSPACE
0, // KEY_CTRL
0, // KEY_ALT
'X', // KEY_X
'V', // KEY_V
'N', // KEY_N
'<', // KEY_COMMA -> '<'
'?', // KEY_SLASH -> '?'
0, // KEY_FN
'A', // KEY_A
'D', // KEY_D
'G', // KEY_G
'J', // KEY_J
'L', // KEY_L
'"', // KEY_APOSTROPHE -> '"'
'\t',// KEY_TAB
'W', // KEY_W
'R', // KEY_R
'Y', // KEY_Y
'I', // KEY_I
'P', // KEY_P
'}', // KEY_RIGHT_BRACKET -> '}'
'~', // KEY_GRAVE -> '~'
'@', // KEY_2 -> '@'
'$', // KEY_4 -> '$'
'^', // KEY_6 -> '^'
'*', // KEY_8 -> '*'
')', // KEY_0 -> ')'
'+' // KEY_EQUALS -> '+'
};

View file

@ -0,0 +1,19 @@
// 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 "M5Stack Cardputer (ROS version)"
#define MICROPY_HW_MCU_NAME "ESP32S3"
#define MICROPY_HW_NEOPIXEL (&pin_GPIO21)
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO1)
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO2)
#define CIRCUITPY_BOARD_SPI (2)
#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO36, .mosi = &pin_GPIO35}, \
{.clock = &pin_GPIO40, .mosi = &pin_GPIO14, .miso = &pin_GPIO39}}

View file

@ -0,0 +1,17 @@
USB_VID = 0x303A
USB_PID = 0x81DA
USB_PRODUCT = "M5Stack Cardputer - Circuitpython/ROS"
USB_MANUFACTURER = "M5STACK"
IDF_TARGET = esp32s3
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 8MB
CIRCUITPY_ESPCAMERA = 0
CIRCUITPY_RCLCPY = 1
CIRCUITPY_GIFIO = 1
CIRCUITPY_MAX3421E = 0
SRC_C += boards/$(BOARD)/cardputer_keyboard.c

View file

@ -0,0 +1,86 @@
// 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"
#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
// Port A
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_PORTA1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_G1), MP_ROM_PTR(&pin_GPIO1) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_PORTA2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_G2), MP_ROM_PTR(&pin_GPIO2) },
// Keyboard
{ MP_ROM_QSTR(MP_QSTR_KB_COL_0), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_KB_COL_1), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_KB_COL_2), MP_ROM_PTR(&pin_GPIO3) },
{ MP_ROM_QSTR(MP_QSTR_KB_COL_3), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_KB_COL_4), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_KB_COL_5), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_KB_COL_6), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_KB_A_0), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_KB_A_1), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_KB_A_2), MP_ROM_PTR(&pin_GPIO11) },
// Neopixel
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO21) },
// Speaker
{ MP_ROM_QSTR(MP_QSTR_I2S_BIT_CLOCK), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_I2S_DATA), MP_ROM_PTR(&pin_GPIO42) },
{ MP_ROM_QSTR(MP_QSTR_I2S_WORD_SELECT), MP_ROM_PTR(&pin_GPIO43) },
// Mic
{ MP_ROM_QSTR(MP_QSTR_MIC_DATA), MP_ROM_PTR(&pin_GPIO46) },
{ MP_ROM_QSTR(MP_QSTR_MIC_CLK), MP_ROM_PTR(&pin_GPIO43) },
// IR
{ MP_ROM_QSTR(MP_QSTR_IR_TX), MP_ROM_PTR(&pin_GPIO44) },
// SD
{ MP_ROM_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_GPIO14) },
{ MP_ROM_QSTR(MP_QSTR_SD_SCK), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO12) },
// 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_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) },
// Button
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO0) },
// Battery
{ MP_ROM_QSTR(MP_QSTR_BAT_ADC), MP_ROM_PTR(&pin_GPIO10) },
// Other
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_PORTA_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_TFT_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_SD_SPI), MP_ROM_PTR(&board_sd_spi_obj) },
// Display object
{ 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,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

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE=qio
CIRCUITPY_ESP_FLASH_FREQ=80m
CIRCUITPY_ESP_FLASH_SIZE=4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 0

View file

@ -6,8 +6,7 @@ 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
SRC_C += pmic/axp192/axp192.c

View file

@ -6,8 +6,7 @@ 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
SRC_C += pmic/axp192/axp192.c

View file

@ -10,5 +10,3 @@ CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESP_PSRAM_SIZE = 8MB
CIRCUITPY_ESP_PSRAM_MODE = opi
CIRCUITPY_ESP_PSRAM_FREQ = 80m
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1

View file

@ -7,13 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE=dio
CIRCUITPY_ESP_FLASH_FREQ=80m
CIRCUITPY_ESP_FLASH_SIZE=4MB
# Not enough flash space. (TEMP - may remove later)
CIRCUITPY_CODEOP = 0
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
# Not enough pins. (TEMP - may remove later)
CIRCUITPY_PARALLELDISPLAYBUS = 0
CIRCUITPY_RGBMATRIX = 0

View file

@ -6,3 +6,6 @@ IDF_TARGET = esp32c6
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
# Board was originally defined with a 2MB firmware, almost 2MB user filesystem. Leave it that way.
CIRCUITPY_4MB_FLASH_LARGE_USER_FS_LAYOUT = 1

View file

@ -7,7 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
CIRCUITPY_TILEPALETTEMAPPER = 0

View file

@ -6,3 +6,6 @@ IDF_TARGET = esp32c2
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 60m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
# Board was originally defined with a 2MB firmware, almost 2MB user filesystem. Leave it that way.
CIRCUITPY_4MB_FLASH_LARGE_USER_FS_LAYOUT = 1

View file

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1

View file

@ -6,3 +6,6 @@ IDF_TARGET = esp32c6
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
# Board was originally defined with a 2MB firmware, almost 2MB user filesystem. Leave it that way.
CIRCUITPY_4MB_FLASH_LARGE_USER_FS_LAYOUT = 1

View file

@ -8,4 +8,3 @@ CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1

View file

@ -1,13 +1,10 @@
CIRCUITPY_CREATOR_ID = 0x4496E3F4
CIRCUITPY_CREATION_ID = 0x00320024
CIRCUITPY_ESPCAMERA = 0
IDF_TARGET = esp32
CIRCUITPY_ESP_FLASH_MODE=dio
CIRCUITPY_ESP_FLASH_FREQ=40m
CIRCUITPY_ESP_FLASH_SIZE=4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
IDF_TARGET = esp32
CIRCUITPY_ESPCAMERA = 0

View file

@ -7,8 +7,6 @@ CIRCUITPY_ESP_FLASH_MODE=qio
CIRCUITPY_ESP_FLASH_FREQ=80m
CIRCUITPY_ESP_FLASH_SIZE=4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_ESP_USB_SERIAL_JTAG = 1
# Not enough flash space.

View file

@ -8,7 +8,3 @@ 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

@ -8,5 +8,3 @@ CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESPCAMERA = 0
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1

View file

@ -10,5 +10,3 @@ CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_PSRAM_SIZE = 8MB
CIRCUITPY_ESP_PSRAM_MODE = qio
CIRCUITPY_ESP_PSRAM_FREQ = 80m
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1

View file

@ -10,5 +10,3 @@ CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_PSRAM_SIZE = 8MB
CIRCUITPY_ESP_PSRAM_MODE = qio
CIRCUITPY_ESP_PSRAM_FREQ = 80m
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1

View file

@ -6,3 +6,6 @@ IDF_TARGET = esp32c6
CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
# Board was originally defined with a 2MB firmware, almost 2MB user filesystem. Leave it that way.
CIRCUITPY_4MB_FLASH_LARGE_USER_FS_LAYOUT = 1

View file

@ -152,8 +152,7 @@ static const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_D21), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO21) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
// UART - using TX RX on silkscreen
{ 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

@ -7,6 +7,4 @@ CIRCUITPY_ESP_FLASH_MODE = qio
CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1
CIRCUITPY_AUDIOMP3 = 0

View file

@ -8,5 +8,3 @@ CIRCUITPY_ESP_FLASH_FREQ = 80m
CIRCUITPY_ESP_FLASH_SIZE = 4MB
CIRCUITPY_ESPCAMERA = 0
CIRCUITPY_LEGACY_4MB_FLASH_LAYOUT = 1

View file

@ -80,8 +80,9 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t *self, const mcu
}
// We add one to the maxlen version to ensure that two symbols at lease are
// captured because we may skip the first portion of a symbol.
self->raw_symbols_size = MIN(64, maxlen / 2 + 1) * sizeof(rmt_symbol_word_t);
self->raw_symbols = (rmt_symbol_word_t *)m_malloc_without_collect(self->raw_symbols_size);
self->raw_symbols_size = (maxlen / 2 + 1) * sizeof(rmt_symbol_word_t);
// RMT DMA mode cannot access PSRAM -> ensure raw_symbols is in internal ram
self->raw_symbols = (rmt_symbol_word_t *)port_malloc(self->raw_symbols_size, true);
if (self->raw_symbols == NULL) {
m_free(self->buffer);
m_malloc_fail(self->raw_symbols_size);
@ -109,17 +110,26 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t *self, const mcu
.clk_src = RMT_CLK_SRC_DEFAULT,
// 2 us resolution so we can capture 65ms pulses. The RMT period is only 15 bits.
.resolution_hz = 1000000 / 2,
.mem_block_symbols = SOC_RMT_MEM_WORDS_PER_CHANNEL,
.mem_block_symbols = self->raw_symbols_size,
.flags.with_dma = 1
};
// If we fail here, the buffers allocated above will be garbage collected.
CHECK_ESP_RESULT(rmt_new_rx_channel(&config, &self->channel));
// If we fail here, the self->buffer will be garbage collected.
esp_err_t result = rmt_new_rx_channel(&config, &self->channel);
if (result != ESP_OK) {
port_free(self->raw_symbols);
raise_esp_error(result);
}
rmt_rx_event_callbacks_t rx_callback = {
.on_recv_done = _done_callback
};
rmt_rx_register_event_callbacks(self->channel, &rx_callback, self);
rmt_enable(self->channel);
rmt_receive(self->channel, self->raw_symbols, self->raw_symbols_size, &rx_config);
result = rmt_receive(self->channel, self->raw_symbols, self->raw_symbols_size, &rx_config);
if (result != ESP_OK) {
port_free(self->raw_symbols);
raise_esp_error(result);
}
}
bool common_hal_pulseio_pulsein_deinited(pulseio_pulsein_obj_t *self) {

View file

@ -0,0 +1,47 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2025 Lucian Copeland
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/rclcpy/Node.h"
#include "shared-bindings/rclcpy/__init__.h"
#include "esp_log.h"
void common_hal_rclcpy_node_construct(rclcpy_node_obj_t *self,
const char *node_name, const char *node_namespace) {
rclc_node_init_default(&self->rcl_node, node_name, node_namespace, &rclcpy_default_context.rcl_support);
if (!rcl_node_is_valid(&self->rcl_node)) {
mp_raise_RuntimeError(MP_ERROR_TEXT("ROS node failed to initialize"));
}
self->deinited = false;
}
bool common_hal_rclcpy_node_deinited(rclcpy_node_obj_t *self) {
return self->deinited;
}
void common_hal_rclcpy_node_deinit(rclcpy_node_obj_t *self) {
if (common_hal_rclcpy_node_deinited(self)) {
return;
}
// Clean up Micro-ROS object
rcl_ret_t ret = rcl_node_fini(&self->rcl_node);
if (ret != RCL_RET_OK) {
// TODO: node_fini returns a fail here, but doesn't impede microros
// from restarting. Debug left for future investigation.
ESP_LOGW("RCLCPY", "Node cleanup error: %d", ret);
// rclcpy_default_context.critical_fail=RCLCPY_NODE_FAIL;
}
self->deinited = true;
}
const char *common_hal_rclcpy_node_get_name(rclcpy_node_obj_t *self) {
return rcl_node_get_name(&self->rcl_node);
}
const char *common_hal_rclcpy_node_get_namespace(rclcpy_node_obj_t *self) {
return rcl_node_get_namespace(&self->rcl_node);
}

View file

@ -0,0 +1,23 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2025 Lucian Copeland
//
// SPDX-License-Identifier: MIT
#pragma once
#include "py/obj.h"
#include "py/runtime.h"
#include <rcl/error_handling.h>
#include <rcl/rcl.h>
#include <rclc/executor.h>
#include <rclc/rclc.h>
#include <stdio.h>
typedef struct {
mp_obj_base_t base;
bool deinited;
rcl_node_t rcl_node;
} rclcpy_node_obj_t;

View file

@ -0,0 +1,64 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2025 Lucian Copeland
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/rclcpy/Publisher.h"
#include "esp_log.h"
void common_hal_rclcpy_publisher_construct(rclcpy_publisher_obj_t *self, rclcpy_node_obj_t *node,
const char *topic_name) {
// Create Int32 type object
// TODO: support other message types through class imports
const rosidl_message_type_support_t *type_support = ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32);
// Creates a reliable Int32 publisher
rcl_ret_t rc = rclc_publisher_init_default(
&self->rcl_publisher, &node->rcl_node,
type_support, topic_name);
if (RCL_RET_OK != rc) {
mp_raise_RuntimeError(MP_ERROR_TEXT("ROS topic failed to initialize"));
}
self->node = node;
}
bool common_hal_rclcpy_publisher_deinited(rclcpy_publisher_obj_t *self) {
return self->node == NULL;
}
void common_hal_rclcpy_publisher_deinit(rclcpy_publisher_obj_t *self) {
if (common_hal_rclcpy_publisher_deinited(self)) {
return;
}
// Clean up Micro-ROS object
rcl_ret_t ret = rcl_publisher_fini(&self->rcl_publisher, &self->node->rcl_node);
if (ret != RCL_RET_OK) {
// TODO: publisher_fini returns a fail here, but doesn't impede microros
// from restarting. Debug left for future investigation.
ESP_LOGW("RCLCPY", "Publisher cleanup error: %d", ret);
// rclcpy_default_context.critical_fail=RCLCPY_PUB_FAIL;
}
self->node = NULL;
}
void common_hal_rclcpy_publisher_publish_int32(rclcpy_publisher_obj_t *self, int32_t data) {
// Int32 message object
std_msgs__msg__Int32 msg;
// Set message value
msg.data = data;
// Publish message
rcl_ret_t rc = rcl_publish(&self->rcl_publisher, &msg, NULL);
if (RCL_RET_OK != rc) {
mp_raise_RuntimeError(MP_ERROR_TEXT("Could not publish to ROS topic"));
}
}
const char *common_hal_rclcpy_publisher_get_topic_name(rclcpy_publisher_obj_t *self) {
return rcl_publisher_get_topic_name(&self->rcl_publisher);
}

View file

@ -0,0 +1,26 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2025 Lucian Copeland
//
// SPDX-License-Identifier: MIT
#pragma once
#include "py/obj.h"
#include "common-hal/rclcpy/Node.h"
#include "common-hal/rclcpy/__init__.h"
#include <rcl/error_handling.h>
#include <rcl/rcl.h>
#include <rclc/executor.h>
#include <rclc/rclc.h>
#include <stdio.h>
#include <std_msgs/msg/int32.h>
typedef struct {
mp_obj_base_t base;
rclcpy_node_obj_t *node;
rcl_publisher_t rcl_publisher;
} rclcpy_publisher_obj_t;

View file

@ -0,0 +1,122 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2025 Lucian Copeland
//
// SPDX-License-Identifier: MIT
#include "shared-bindings/rclcpy/__init__.h"
#include "esp_log.h"
#define RCLCPY_SUPPORT_FAIL 1
#define RCLCPY_OPTIONS_FAIL 2
rclcpy_context_t rclcpy_default_context = {
.initialized = false,
.critical_fail = 0,
};
static void *microros_allocate(size_t size, void *state) {
(void)state;
return m_malloc(size);
}
static void microros_deallocate(void *pointer, void *state) {
(void)state;
m_free(pointer);
}
static void *microros_reallocate(void *pointer, size_t size, void *state) {
(void)state;
return m_realloc(pointer, size);
}
static void *microros_zero_allocate(size_t number_of_elements, size_t size_of_element, void *state) {
(void)state;
size_t total_size = number_of_elements * size_of_element;
void *ptr = m_malloc(total_size);
if (ptr != NULL) {
memset(ptr, 0, total_size);
}
return ptr;
}
void rclcpy_reset(void) {
if (rclcpy_default_context.initialized) {
// Clean up micro-ROS objects
rcl_ret_t ret = rclc_support_fini(&rclcpy_default_context.rcl_support);
if (ret != RCL_RET_OK) {
// ESP_LOGW("RCLCPY", "Support cleanup error: %d", ret);
rclcpy_default_context.critical_fail = RCLCPY_SUPPORT_FAIL;
}
ret = rcl_init_options_fini(&rclcpy_default_context.init_options);
if (ret != RCL_RET_OK) {
// ESP_LOGW("RCLCPY", "Init options cleanup error: %d", ret);
rclcpy_default_context.critical_fail = RCLCPY_OPTIONS_FAIL;
}
// Reset context state
memset(&rclcpy_default_context, 0, sizeof(rclcpy_default_context));
rclcpy_default_context.initialized = false;
}
}
void common_hal_rclcpy_init(const char *agent_ip, const char *agent_port, int16_t domain_id) {
if (rclcpy_default_context.critical_fail != 0) {
mp_raise_RuntimeError_varg(MP_ERROR_TEXT("Critical ROS failure during soft reboot, reset required: %d"), rclcpy_default_context.critical_fail);
}
// Set up circuitpython-friendly allocator
rcl_allocator_t custom_allocator = rcutils_get_zero_initialized_allocator();
custom_allocator.allocate = microros_allocate;
custom_allocator.deallocate = microros_deallocate;
custom_allocator.reallocate = microros_reallocate;
custom_allocator.zero_allocate = microros_zero_allocate;
if (!rcutils_set_default_allocator(&custom_allocator)) {
mp_raise_RuntimeError(MP_ERROR_TEXT("ROS memory allocator failure"));
}
rclcpy_default_context.rcl_allocator = custom_allocator;
rcl_ret_t ret;
// Micro-ROS options initialization
rclcpy_default_context.init_options = rcl_get_zero_initialized_init_options();
ret = rcl_init_options_init(&rclcpy_default_context.init_options, rclcpy_default_context.rcl_allocator);
if (ret != RCL_RET_OK) {
mp_raise_RuntimeError(MP_ERROR_TEXT("ROS internal setup failure"));
}
if (domain_id < 0) {
mp_raise_RuntimeError(MP_ERROR_TEXT("Invalid ROS domain ID"));
}
ret = rcl_init_options_set_domain_id(&rclcpy_default_context.init_options, domain_id);
if (ret != RCL_RET_OK) {
mp_raise_RuntimeError(MP_ERROR_TEXT("ROS internal setup failure"));
}
// Set up Micro-ROS Agent
rclcpy_default_context.rmw_options = rcl_init_options_get_rmw_init_options(&rclcpy_default_context.init_options);
ret = rmw_uros_options_set_udp_address(agent_ip, agent_port, rclcpy_default_context.rmw_options);
if (ret != RCL_RET_OK) {
mp_raise_RuntimeError(MP_ERROR_TEXT("ROS internal setup failure"));
}
// Final support object init requires a connected agent
ret = rclc_support_init_with_options(&rclcpy_default_context.rcl_support,
0,
NULL,
&rclcpy_default_context.init_options,
&rclcpy_default_context.rcl_allocator);
if (ret != RCL_RET_OK) {
mp_raise_RuntimeError(MP_ERROR_TEXT("ROS failed to initialize. Is agent connected?"));
} else {
rclcpy_default_context.initialized = true;
}
}
rclcpy_context_t *common_hal_rclcpy_get_default_context(void) {
return &rclcpy_default_context;
}
bool common_hal_rclcpy_default_context_is_initialized(void) {
return rclcpy_default_context.initialized;
}

View file

@ -0,0 +1,30 @@
// This file is part of the CircuitPython project: https://circuitpython.org
//
// SPDX-FileCopyrightText: Copyright (c) 2025 Lucian Copeland
//
// SPDX-License-Identifier: MIT
#pragma once
#include "py/obj.h"
#include "py/runtime.h"
#include <stdio.h>
#include <rcl/rcl.h>
#include <rcl/error_handling.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <rmw_microros/rmw_microros.h>
typedef struct {
bool initialized;
uint8_t critical_fail;
rcl_allocator_t rcl_allocator;
rclc_support_t rcl_support;
rcl_init_options_t init_options;
rmw_init_options_t *rmw_options;
} rclcpy_context_t;
extern rclcpy_context_t rclcpy_default_context;
void rclcpy_reset(void);

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