Merge branch 'adafruit:main' into add-raspberry-breadstick
This commit is contained in:
commit
82ebe54f6f
1
.github/workflows/build-boards.yml
vendored
1
.github/workflows/build-boards.yml
vendored
@ -72,6 +72,7 @@ jobs:
|
|||||||
working-directory: tools
|
working-directory: tools
|
||||||
env:
|
env:
|
||||||
BOARDS: ${{ matrix.board }}
|
BOARDS: ${{ matrix.board }}
|
||||||
|
PULL: ${{ github.event.number }}
|
||||||
|
|
||||||
- name: Upload artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -354,3 +354,6 @@
|
|||||||
[submodule "lib/tlsf"]
|
[submodule "lib/tlsf"]
|
||||||
path = lib/tlsf
|
path = lib/tlsf
|
||||||
url = https://github.com/espressif/tlsf.git
|
url = https://github.com/espressif/tlsf.git
|
||||||
|
[submodule "frozen/CircuitPython_AXP313A"]
|
||||||
|
path = frozen/CircuitPython_AXP313A
|
||||||
|
url = https://github.com/bill88t/CircuitPython_AXP313A
|
||||||
|
1
frozen/CircuitPython_AXP313A
Submodule
1
frozen/CircuitPython_AXP313A
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 702d313bd2eaa6895924c7eeda7dea74c4e35c69
|
1271
locale/ID.po
1271
locale/ID.po
File diff suppressed because it is too large
Load Diff
@ -72,11 +72,6 @@ msgstr ""
|
|||||||
msgid "%%c requires int or char"
|
msgid "%%c requires int or char"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: main.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%02X"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
|
365
locale/cs.po
365
locale/cs.po
@ -83,42 +83,12 @@ msgstr " výstup:\n"
|
|||||||
msgid "%%c requires int or char"
|
msgid "%%c requires int or char"
|
||||||
msgstr "%%c vyžaduje int nebo char"
|
msgstr "%%c vyžaduje int nebo char"
|
||||||
|
|
||||||
#: main.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%02X"
|
|
||||||
msgstr "%02X"
|
|
||||||
|
|
||||||
#: shared-module/os/getenv.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%S"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%d address pins, %d rgb pins and %d tiles indicate a height of %d, not %d"
|
"%d address pins, %d rgb pins and %d tiles indicate a height of %d, not %d"
|
||||||
msgstr "%d adresní pin, %d rgb pin a %d dlaždice indikuje výšku %d, ne %d"
|
msgstr "%d adresní pin, %d rgb pin a %d dlaždice indikuje výšku %d, ne %d"
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/alarm/__init__.c
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/cxd56/common-hal/analogio/AnalogOut.c ports/cxd56/common-hal/rtc/RTC.c
|
|
||||||
#: ports/espressif/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/espressif/common-hal/rtc/RTC.c
|
|
||||||
#: ports/mimxrt10xx/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/mimxrt10xx/common-hal/rtc/RTC.c ports/nrf/common-hal/alarm/__init__.c
|
|
||||||
#: ports/nrf/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/nrf/common-hal/audiobusio/I2SOut.c ports/nrf/common-hal/rtc/RTC.c
|
|
||||||
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
|
||||||
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/raspberrypi/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
|
||||||
#: ports/stm/common-hal/canio/Listener.c ports/stm/common-hal/rtc/RTC.c
|
|
||||||
#: shared-bindings/audiobusio/I2SOut.c shared-bindings/audiobusio/PDMIn.c
|
|
||||||
#: shared-bindings/keypad/KeyMatrix.c shared-bindings/keypad/Keys.c
|
|
||||||
#: shared-bindings/keypad/ShiftRegisterKeys.c
|
|
||||||
msgid "%q"
|
|
||||||
msgstr "%q"
|
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
#: shared-bindings/microcontroller/Pin.c
|
||||||
msgid "%q and %q contain duplicate pins"
|
msgid "%q and %q contain duplicate pins"
|
||||||
msgstr "%q a %q obsahují duplicitní piny"
|
msgstr "%q a %q obsahují duplicitní piny"
|
||||||
@ -302,11 +272,6 @@ msgstr "%q[%u] používá extra pin"
|
|||||||
msgid "%q[%u] waits on input outside of count"
|
msgid "%q[%u] waits on input outside of count"
|
||||||
msgstr "%q[%u] čeká na vstup mimo rozsah"
|
msgstr "%q[%u] čeká na vstup mimo rozsah"
|
||||||
|
|
||||||
#: py/runtime.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c
|
#: ports/espressif/common-hal/espidf/__init__.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s error 0x%x"
|
msgid "%s error 0x%x"
|
||||||
@ -829,7 +794,8 @@ msgstr "Není možné znovu připojit '/', pokud je viditelné pomocí USB."
|
|||||||
#: ports/cxd56/common-hal/microcontroller/__init__.c
|
#: ports/cxd56/common-hal/microcontroller/__init__.c
|
||||||
#: ports/mimxrt10xx/common-hal/microcontroller/__init__.c
|
#: ports/mimxrt10xx/common-hal/microcontroller/__init__.c
|
||||||
msgid "Cannot reset into bootloader because no bootloader is present"
|
msgid "Cannot reset into bootloader because no bootloader is present"
|
||||||
msgstr "Reset do bootloaderu není možný, protože žádný bootloader není přítomen"
|
msgstr ""
|
||||||
|
"Reset do bootloaderu není možný, protože žádný bootloader není přítomen"
|
||||||
|
|
||||||
#: ports/espressif/common-hal/socketpool/Socket.c
|
#: ports/espressif/common-hal/socketpool/Socket.c
|
||||||
msgid "Cannot set socket options"
|
msgid "Cannot set socket options"
|
||||||
@ -1176,7 +1142,8 @@ msgstr "Alokace heapu při neběžícím VM."
|
|||||||
#: supervisor/shared/safe_mode.c
|
#: supervisor/shared/safe_mode.c
|
||||||
msgid ""
|
msgid ""
|
||||||
"Heap was corrupted because the stack was too small. Increase stack size."
|
"Heap was corrupted because the stack was too small. Increase stack size."
|
||||||
msgstr "Heap byl poškozen, protože je stack příliš malý. Navyš velikost stacku."
|
msgstr ""
|
||||||
|
"Heap byl poškozen, protože je stack příliš malý. Navyš velikost stacku."
|
||||||
|
|
||||||
#: extmod/vfs_posix_file.c py/objstringio.c
|
#: extmod/vfs_posix_file.c py/objstringio.c
|
||||||
msgid "I/O operation on closed file"
|
msgid "I/O operation on closed file"
|
||||||
@ -1626,7 +1593,8 @@ msgstr "Ok"
|
|||||||
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
|
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
|
||||||
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
|
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
|
||||||
msgid "Only 8 or 16 bit mono with "
|
#, c-format
|
||||||
|
msgid "Only 8 or 16 bit mono with %dx oversampling supported."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/wifi/__init__.c
|
#: ports/espressif/common-hal/wifi/__init__.c
|
||||||
@ -4433,18 +4401,102 @@ msgstr ""
|
|||||||
msgid "zi must be of shape (n_section, 2)"
|
msgid "zi must be of shape (n_section, 2)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "Invalid CIRCUITPY_PYSTACK_SIZE\n"
|
#~ msgid ""
|
||||||
#~ msgstr "Špatný CIRCUITPY_PYSTACK_SIZE\n"
|
#~ "\n"
|
||||||
|
#~ "Code done running. Waiting for reload.\n"
|
||||||
#~ msgid "Unable to allocate the heap."
|
#~ msgstr ""
|
||||||
#~ msgstr "Nelze alokovat heap."
|
#~ "\n"
|
||||||
|
#~ "Kód byl dokončen. Čekám na opětovné nahrání.\n"
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "espcamera.Camera requires reserved PSRAM to be configured. See the "
|
#~ "\n"
|
||||||
#~ "documentation for instructions."
|
#~ "Code stopped by auto-reload.\n"
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "espcamera.Camera vyžaduje reservovanou PSRAM. V dokumentaci nalezneš "
|
#~ "\n"
|
||||||
#~ "instrukce."
|
#~ "Program byl zastaven automatickým načtením.\n"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"
|
||||||
|
#~ "https://github.com/adafruit/circuitpython/issues\n"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Prosím vytvořte tiket s obsahem vaší jednotky CIRCUITPY na adrese\n"
|
||||||
|
#~ "https://github.com/adafruit/circuitpython/issues\n"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "\n"
|
||||||
|
#~ "To exit, please reset the board without "
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Pro ukončení, prosím resetujte desku bez "
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
#~ msgid "%02X"
|
||||||
|
#~ msgstr "%02X"
|
||||||
|
|
||||||
|
#~ msgid "%d address pins and %d rgb pins indicate a height of %d, not %d"
|
||||||
|
#~ msgstr "%d adresní piny a %d rgb piny označují výšku %d, nikoli %d"
|
||||||
|
|
||||||
|
#~ msgid "%q"
|
||||||
|
#~ msgstr "%q"
|
||||||
|
|
||||||
|
#~ msgid "%q indices must be integers, not %q"
|
||||||
|
#~ msgstr "Indexy %q musí být celá čísla, ne %q"
|
||||||
|
|
||||||
|
#~ msgid "%q length must be >= 1"
|
||||||
|
#~ msgstr "%q délka musí být >= 1"
|
||||||
|
|
||||||
|
#~ msgid "%q list must be a list"
|
||||||
|
#~ msgstr "Seznam %q musí být seznam"
|
||||||
|
|
||||||
|
#~ msgid "%q must be >= 0"
|
||||||
|
#~ msgstr "%q musí být >= 0"
|
||||||
|
|
||||||
|
#~ msgid "%q must be >= 1"
|
||||||
|
#~ msgstr "%q musí být > = 1"
|
||||||
|
|
||||||
|
#~ msgid "%q must be a string"
|
||||||
|
#~ msgstr "%q musí být string"
|
||||||
|
|
||||||
|
#~ msgid "%q must be a tuple of length 2"
|
||||||
|
#~ msgstr "%q musí být n-tice délky 2"
|
||||||
|
|
||||||
|
#~ msgid "%q must be an int"
|
||||||
|
#~ msgstr "%q musí být int"
|
||||||
|
|
||||||
|
#~ msgid "%q must be between %d and %d"
|
||||||
|
#~ msgstr "%q musí být mezi %d a %d"
|
||||||
|
|
||||||
|
#~ msgid "%q must be of type %q"
|
||||||
|
#~ msgstr "%q musí být typu %q"
|
||||||
|
|
||||||
|
#~ msgid "%q must be of type %q or None"
|
||||||
|
#~ msgstr "%q musí být typu %q nebo None"
|
||||||
|
|
||||||
|
#~ msgid "%q pin invalid"
|
||||||
|
#~ msgstr "pin %q není platný"
|
||||||
|
|
||||||
|
#~ msgid "%q should be an int"
|
||||||
|
#~ msgstr "%q by měl být int"
|
||||||
|
|
||||||
|
#~ msgid "%q with a report ID of 0 must be of length 1"
|
||||||
|
#~ msgstr "%q s ID 0 musím být délky 1"
|
||||||
|
|
||||||
|
#~ msgid "'%q' object cannot assign attribute '%q'"
|
||||||
|
#~ msgstr "'%q' nemůže přiřadit atribut '%q'"
|
||||||
|
|
||||||
|
#~ msgid "'%q' object does not support item assignment"
|
||||||
|
#~ msgstr "Objekt '%q' nepodporuje přiřazení položek"
|
||||||
|
|
||||||
|
#~ msgid "'%q' object does not support item deletion"
|
||||||
|
#~ msgstr "Objekt '%q' nepodporuje mazání položek"
|
||||||
|
|
||||||
|
#~ msgid "'%q' object has no attribute '%q'"
|
||||||
|
#~ msgstr "Objekt '%q' nemá žádný atribut"
|
||||||
|
|
||||||
|
#~ msgid "'%q' object is not subscriptable"
|
||||||
|
#~ msgstr "Objekt '%q' nelze zapsat"
|
||||||
|
|
||||||
#~ msgid "'await', 'async for' or 'async with' outside async function"
|
#~ msgid "'await', 'async for' or 'async with' outside async function"
|
||||||
#~ msgstr "'await', 'async for' nebo 'async' je volán mimo async"
|
#~ msgstr "'await', 'async for' nebo 'async' je volán mimo async"
|
||||||
@ -4455,30 +4507,65 @@ msgstr ""
|
|||||||
#~ msgid "'continue' outside loop"
|
#~ msgid "'continue' outside loop"
|
||||||
#~ msgstr "'continue' je volán mimo cyklus"
|
#~ msgstr "'continue' je volán mimo cyklus"
|
||||||
|
|
||||||
#~ msgid "invalid architecture"
|
#~ msgid "'coroutine' object is not an iterator"
|
||||||
#~ msgstr "špatná architektura"
|
#~ msgstr "Objekt 'coroutine' není iterátor"
|
||||||
|
|
||||||
#~ msgid "__init__() should return None, not '%q'"
|
#~ msgid "64 bit types"
|
||||||
#~ msgstr "__init__() by měl vracet hodnotu None, nikoli '%q'"
|
#~ msgstr "64 bit typy"
|
||||||
|
|
||||||
#~ msgid "cannot unambiguously get sizeof scalar"
|
|
||||||
#~ msgstr "velikost scalar nelze jednoznačně určit"
|
|
||||||
|
|
||||||
#~ msgid "Bit clock and word select must be sequential pins"
|
|
||||||
#~ msgstr "Bitové hodiny a výběr slov musí být sekvenční piny"
|
|
||||||
|
|
||||||
#~ msgid "ADC2 is being used by WiFi"
|
#~ msgid "ADC2 is being used by WiFi"
|
||||||
#~ msgstr "WiFi používá ADC2"
|
#~ msgstr "WiFi používá ADC2"
|
||||||
|
|
||||||
#~ msgid "'coroutine' object is not an iterator"
|
#~ msgid "At most %d %q may be specified (not %d)"
|
||||||
#~ msgstr "Objekt 'coroutine' není iterátor"
|
#~ msgstr "Lze zadat maximálně %d %q (nikoli %d)"
|
||||||
|
|
||||||
|
#~ msgid "Attempted heap allocation when VM not running."
|
||||||
|
#~ msgstr "Pokus o alokaci haldy, když neběží VM."
|
||||||
|
|
||||||
|
#~ msgid "Bit clock and word select must be sequential pins"
|
||||||
|
#~ msgstr "Bitové hodiny a výběr slov musí být sekvenční piny"
|
||||||
|
|
||||||
|
#~ msgid "Boot device must be first device (interface #0)."
|
||||||
|
#~ msgstr "Bootovací zařízení musí být první (rozhraní #0)."
|
||||||
|
|
||||||
|
#~ msgid "Brightness must be 0-1.0"
|
||||||
|
#~ msgstr "Jas musí být 0-1,0"
|
||||||
|
|
||||||
#~ msgid "Buffer is too small"
|
#~ msgid "Buffer is too small"
|
||||||
#~ msgstr "Vyrovnávací paměť je příliš malá"
|
#~ msgstr "Vyrovnávací paměť je příliš malá"
|
||||||
|
|
||||||
|
#~ msgid "CircuitPython was unable to allocate the heap."
|
||||||
|
#~ msgstr "CircuitPython nedokázal alokovat haldu."
|
||||||
|
|
||||||
#~ msgid "Corrupt .mpy file"
|
#~ msgid "Corrupt .mpy file"
|
||||||
#~ msgstr "Poškozený soubor .mpy"
|
#~ msgstr "Poškozený soubor .mpy"
|
||||||
|
|
||||||
|
#~ msgid "Crash into the HardFault_Handler."
|
||||||
|
#~ msgstr "Pád do HardFault_Handler."
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
#~ msgid "Error in MIDI stream at position %d"
|
||||||
|
#~ msgstr "Chyba v MIDI přenosu na pozici %d"
|
||||||
|
|
||||||
|
#~ msgid "Expected a %q"
|
||||||
|
#~ msgstr "Očekává se %q"
|
||||||
|
|
||||||
|
#~ msgid "Failed to init wifi"
|
||||||
|
#~ msgstr "Chyba inicializace WiFi"
|
||||||
|
|
||||||
|
#~ msgid "Fatal error."
|
||||||
|
#~ msgstr "Fatální chyba."
|
||||||
|
|
||||||
|
#~ msgid "Firmware image is invalid"
|
||||||
|
#~ msgstr "Obraz firmwaru je nevalidní"
|
||||||
|
|
||||||
|
#~ msgid "Hardware busy, try alternative pins"
|
||||||
|
#~ msgstr "Hardware je zaneprázdněn, zkuste alternativní piny"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
#~ msgid "IV must be %d bytes long"
|
||||||
|
#~ msgstr "IV musí být dlouhé %d bajtů"
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "Incompatible .mpy file. Please update all .mpy files. See http://adafru."
|
#~ "Incompatible .mpy file. Please update all .mpy files. See http://adafru."
|
||||||
#~ "it/mpy-update for more info."
|
#~ "it/mpy-update for more info."
|
||||||
@ -4486,8 +4573,18 @@ msgstr ""
|
|||||||
#~ "Nekompatibilní soubor .mpy. Aktualizujte prosím všechny soubory .mpy. "
|
#~ "Nekompatibilní soubor .mpy. Aktualizujte prosím všechny soubory .mpy. "
|
||||||
#~ "Další informace naleznete na adrese http://adafru.it/mpy-update."
|
#~ "Další informace naleznete na adrese http://adafru.it/mpy-update."
|
||||||
|
|
||||||
#~ msgid "Hardware busy, try alternative pins"
|
#~ msgid "Invalid CIRCUITPY_PYSTACK_SIZE\n"
|
||||||
#~ msgstr "Hardware je zaneprázdněn, zkuste alternativní piny"
|
#~ msgstr "Špatný CIRCUITPY_PYSTACK_SIZE\n"
|
||||||
|
|
||||||
|
#~ msgid "Invalid memory access."
|
||||||
|
#~ msgstr "Neplatný přístup k paměti."
|
||||||
|
|
||||||
|
#~ msgid "Invalid pins"
|
||||||
|
#~ msgstr "Neplatné piny"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
#~ msgid "Maximum x value when mirrored is %d"
|
||||||
|
#~ msgstr "Maximální hodnota x při zrcadlení je %d"
|
||||||
|
|
||||||
#~ msgid "Missing MISO or MOSI Pin"
|
#~ msgid "Missing MISO or MOSI Pin"
|
||||||
#~ msgstr "Chybí pin MISO nebo MOSI"
|
#~ msgstr "Chybí pin MISO nebo MOSI"
|
||||||
@ -4513,150 +4610,28 @@ msgstr ""
|
|||||||
#~ msgid "No TX pin"
|
#~ msgid "No TX pin"
|
||||||
#~ msgstr "Žádný TX pin"
|
#~ msgstr "Žádný TX pin"
|
||||||
|
|
||||||
#~ msgid "Brightness must be 0-1.0"
|
|
||||||
#~ msgstr "Jas musí být 0-1,0"
|
|
||||||
|
|
||||||
#, c-format
|
|
||||||
#~ msgid "Error in MIDI stream at position %d"
|
|
||||||
#~ msgstr "Chyba v MIDI přenosu na pozici %d"
|
|
||||||
|
|
||||||
#, c-format
|
|
||||||
#~ msgid "Maximum x value when mirrored is %d"
|
|
||||||
#~ msgstr "Maximální hodnota x při zrcadlení je %d"
|
|
||||||
|
|
||||||
#~ msgid "64 bit types"
|
|
||||||
#~ msgstr "64 bit typy"
|
|
||||||
|
|
||||||
#~ msgid "No key was specified"
|
#~ msgid "No key was specified"
|
||||||
#~ msgstr "Nebyl zadán klíč"
|
#~ msgstr "Nebyl zadán klíč"
|
||||||
|
|
||||||
#~ msgid "%q pin invalid"
|
|
||||||
#~ msgstr "pin %q není platný"
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"
|
|
||||||
#~ "https://github.com/adafruit/circuitpython/issues\n"
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Prosím vytvořte tiket s obsahem vaší jednotky CIRCUITPY na adrese\n"
|
|
||||||
#~ "https://github.com/adafruit/circuitpython/issues\n"
|
|
||||||
|
|
||||||
#~ msgid "Attempted heap allocation when VM not running."
|
|
||||||
#~ msgstr "Pokus o alokaci haldy, když neběží VM."
|
|
||||||
|
|
||||||
#~ msgid "Boot device must be first device (interface #0)."
|
|
||||||
#~ msgstr "Bootovací zařízení musí být první (rozhraní #0)."
|
|
||||||
|
|
||||||
#~ msgid "CircuitPython was unable to allocate the heap."
|
|
||||||
#~ msgstr "CircuitPython nedokázal alokovat haldu."
|
|
||||||
|
|
||||||
#~ msgid "Crash into the HardFault_Handler."
|
|
||||||
#~ msgstr "Pád do HardFault_Handler."
|
|
||||||
|
|
||||||
#~ msgid "Fatal error."
|
|
||||||
#~ msgstr "Fatální chyba."
|
|
||||||
|
|
||||||
#~ msgid "Invalid memory access."
|
|
||||||
#~ msgstr "Neplatný přístup k paměti."
|
|
||||||
|
|
||||||
#~ msgid "%q must be of type %q"
|
|
||||||
#~ msgstr "%q musí být typu %q"
|
|
||||||
|
|
||||||
#~ msgid "%q must be of type %q or None"
|
|
||||||
#~ msgstr "%q musí být typu %q nebo None"
|
|
||||||
|
|
||||||
#~ msgid "Expected a %q"
|
|
||||||
#~ msgstr "Očekává se %q"
|
|
||||||
|
|
||||||
#, c-format
|
|
||||||
#~ msgid "IV must be %d bytes long"
|
|
||||||
#~ msgstr "IV musí být dlouhé %d bajtů"
|
|
||||||
|
|
||||||
#~ msgid "%q length must be >= 1"
|
|
||||||
#~ msgstr "%q délka musí být >= 1"
|
|
||||||
|
|
||||||
#~ msgid "%q must be a string"
|
|
||||||
#~ msgstr "%q musí být string"
|
|
||||||
|
|
||||||
#~ msgid "%q must be an int"
|
|
||||||
#~ msgstr "%q musí být int"
|
|
||||||
|
|
||||||
#~ msgid "%q with a report ID of 0 must be of length 1"
|
|
||||||
#~ msgstr "%q s ID 0 musím být délky 1"
|
|
||||||
|
|
||||||
#~ msgid "At most %d %q may be specified (not %d)"
|
|
||||||
#~ msgstr "Lze zadat maximálně %d %q (nikoli %d)"
|
|
||||||
|
|
||||||
#~ msgid "Invalid pins"
|
|
||||||
#~ msgstr "Neplatné piny"
|
|
||||||
|
|
||||||
#, c-format
|
#, c-format
|
||||||
#~ msgid "No more than %d HID devices allowed"
|
#~ msgid "No more than %d HID devices allowed"
|
||||||
#~ msgstr "Ne více než %d HID zařízení je povoleno"
|
#~ msgstr "Ne více než %d HID zařízení je povoleno"
|
||||||
|
|
||||||
#~ msgid "Firmware image is invalid"
|
#~ msgid "Unable to allocate the heap."
|
||||||
#~ msgstr "Obraz firmwaru je nevalidní"
|
#~ msgstr "Nelze alokovat heap."
|
||||||
|
|
||||||
#~ msgid "%q must be >= 0"
|
#~ msgid "__init__() should return None, not '%q'"
|
||||||
#~ msgstr "%q musí být >= 0"
|
#~ msgstr "__init__() by měl vracet hodnotu None, nikoli '%q'"
|
||||||
|
|
||||||
#~ msgid "%q must be >= 1"
|
#~ msgid "cannot unambiguously get sizeof scalar"
|
||||||
#~ msgstr "%q musí být > = 1"
|
#~ msgstr "velikost scalar nelze jednoznačně určit"
|
||||||
|
|
||||||
#~ msgid "Failed to init wifi"
|
|
||||||
#~ msgstr "Chyba inicializace WiFi"
|
|
||||||
|
|
||||||
#~ msgid "%q must be a tuple of length 2"
|
|
||||||
#~ msgstr "%q musí být n-tice délky 2"
|
|
||||||
|
|
||||||
#~ msgid "%q must be between %d and %d"
|
|
||||||
#~ msgstr "%q musí být mezi %d a %d"
|
|
||||||
|
|
||||||
#~ msgid "%q should be an int"
|
|
||||||
#~ msgstr "%q by měl být int"
|
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "\n"
|
#~ "espcamera.Camera requires reserved PSRAM to be configured. See the "
|
||||||
#~ "Code stopped by auto-reload.\n"
|
#~ "documentation for instructions."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "\n"
|
#~ "espcamera.Camera vyžaduje reservovanou PSRAM. V dokumentaci nalezneš "
|
||||||
#~ "Program byl zastaven automatickým načtením.\n"
|
#~ "instrukce."
|
||||||
|
|
||||||
#~ msgid "%q list must be a list"
|
#~ msgid "invalid architecture"
|
||||||
#~ msgstr "Seznam %q musí být seznam"
|
#~ msgstr "špatná architektura"
|
||||||
|
|
||||||
#~ msgid "%q indices must be integers, not %q"
|
|
||||||
#~ msgstr "Indexy %q musí být celá čísla, ne %q"
|
|
||||||
|
|
||||||
#~ msgid "'%q' object cannot assign attribute '%q'"
|
|
||||||
#~ msgstr "'%q' nemůže přiřadit atribut '%q'"
|
|
||||||
|
|
||||||
#~ msgid "'%q' object does not support item assignment"
|
|
||||||
#~ msgstr "Objekt '%q' nepodporuje přiřazení položek"
|
|
||||||
|
|
||||||
#~ msgid "'%q' object does not support item deletion"
|
|
||||||
#~ msgstr "Objekt '%q' nepodporuje mazání položek"
|
|
||||||
|
|
||||||
#~ msgid "'%q' object has no attribute '%q'"
|
|
||||||
#~ msgstr "Objekt '%q' nemá žádný atribut"
|
|
||||||
|
|
||||||
#~ msgid "'%q' object is not subscriptable"
|
|
||||||
#~ msgstr "Objekt '%q' nelze zapsat"
|
|
||||||
|
|
||||||
#~ msgid "%d address pins and %d rgb pins indicate a height of %d, not %d"
|
|
||||||
#~ msgstr "%d adresní piny a %d rgb piny označují výšku %d, nikoli %d"
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Code done running. Waiting for reload.\n"
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Kód byl dokončen. Čekám na opětovné nahrání.\n"
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "To exit, please reset the board without "
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Pro ukončení, prosím resetujte desku bez "
|
|
||||||
|
2791
locale/de_DE.po
2791
locale/de_DE.po
File diff suppressed because it is too large
Load Diff
180
locale/el.po
180
locale/el.po
@ -83,16 +83,6 @@ msgstr " έξοδος:\n"
|
|||||||
msgid "%%c requires int or char"
|
msgid "%%c requires int or char"
|
||||||
msgstr "%%c απαιτεί ακέραιο ή χαρακτήρα"
|
msgstr "%%c απαιτεί ακέραιο ή χαρακτήρα"
|
||||||
|
|
||||||
#: main.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%02X"
|
|
||||||
msgstr "%02X"
|
|
||||||
|
|
||||||
#: shared-module/os/getenv.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%S"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -100,26 +90,6 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"%d pin διεύθυνσης, %d rgb ping και %d πλακίδια αναδεικνύουν ύψος %d, όχι %d"
|
"%d pin διεύθυνσης, %d rgb ping και %d πλακίδια αναδεικνύουν ύψος %d, όχι %d"
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/alarm/__init__.c
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/cxd56/common-hal/analogio/AnalogOut.c ports/cxd56/common-hal/rtc/RTC.c
|
|
||||||
#: ports/espressif/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/espressif/common-hal/rtc/RTC.c
|
|
||||||
#: ports/mimxrt10xx/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/mimxrt10xx/common-hal/rtc/RTC.c ports/nrf/common-hal/alarm/__init__.c
|
|
||||||
#: ports/nrf/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/nrf/common-hal/audiobusio/I2SOut.c ports/nrf/common-hal/rtc/RTC.c
|
|
||||||
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
|
||||||
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/raspberrypi/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
|
||||||
#: ports/stm/common-hal/canio/Listener.c ports/stm/common-hal/rtc/RTC.c
|
|
||||||
#: shared-bindings/audiobusio/I2SOut.c shared-bindings/audiobusio/PDMIn.c
|
|
||||||
#: shared-bindings/keypad/KeyMatrix.c shared-bindings/keypad/Keys.c
|
|
||||||
#: shared-bindings/keypad/ShiftRegisterKeys.c
|
|
||||||
msgid "%q"
|
|
||||||
msgstr "%q"
|
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
#: shared-bindings/microcontroller/Pin.c
|
||||||
msgid "%q and %q contain duplicate pins"
|
msgid "%q and %q contain duplicate pins"
|
||||||
msgstr "%q και %q περιέχουν διπλότυπα pins"
|
msgstr "%q και %q περιέχουν διπλότυπα pins"
|
||||||
@ -303,11 +273,6 @@ msgstr ""
|
|||||||
msgid "%q[%u] waits on input outside of count"
|
msgid "%q[%u] waits on input outside of count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/runtime.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c
|
#: ports/espressif/common-hal/espidf/__init__.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s error 0x%x"
|
msgid "%s error 0x%x"
|
||||||
@ -789,7 +754,8 @@ msgstr "Δεν μπορούν να αλλάξουν οι USB συσκευές τ
|
|||||||
|
|
||||||
#: shared-bindings/_bleio/Adapter.c
|
#: shared-bindings/_bleio/Adapter.c
|
||||||
msgid "Cannot create a new Adapter; use _bleio.adapter;"
|
msgid "Cannot create a new Adapter; use _bleio.adapter;"
|
||||||
msgstr "Δεν μπορεί να δημιουργηθεί νέο Adapter; χρησιμοποιείστε _bleio.adapter;"
|
msgstr ""
|
||||||
|
"Δεν μπορεί να δημιουργηθεί νέο Adapter; χρησιμοποιείστε _bleio.adapter;"
|
||||||
|
|
||||||
#: shared-bindings/displayio/Bitmap.c
|
#: shared-bindings/displayio/Bitmap.c
|
||||||
#: shared-bindings/memorymonitor/AllocationSize.c
|
#: shared-bindings/memorymonitor/AllocationSize.c
|
||||||
@ -1628,7 +1594,8 @@ msgstr ""
|
|||||||
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
|
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
|
||||||
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
|
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
|
||||||
msgid "Only 8 or 16 bit mono with "
|
#, c-format
|
||||||
|
msgid "Only 8 or 16 bit mono with %dx oversampling supported."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/wifi/__init__.c
|
#: ports/espressif/common-hal/wifi/__init__.c
|
||||||
@ -4427,53 +4394,6 @@ msgstr ""
|
|||||||
msgid "zi must be of shape (n_section, 2)"
|
msgid "zi must be of shape (n_section, 2)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "'await', 'async for' or 'async with' outside async function"
|
|
||||||
#~ msgstr "'await', 'async for' ή 'async with' εκτός ασύνχρονης συνάρτησης"
|
|
||||||
|
|
||||||
#~ msgid "'break' outside loop"
|
|
||||||
#~ msgstr "'break' εκτός επανάληψης"
|
|
||||||
|
|
||||||
#~ msgid "'continue' outside loop"
|
|
||||||
#~ msgstr "'continue' εκτός επανάληψης"
|
|
||||||
|
|
||||||
#~ msgid "Bit clock and word select must be sequential pins"
|
|
||||||
#~ msgstr "Ρολόι bit και word select πρέπει να είναι διαδοχικά pins"
|
|
||||||
|
|
||||||
#~ msgid "ADC2 is being used by WiFi"
|
|
||||||
#~ msgstr "Το ADC2 χρησιμοποιείται απο το WIFI"
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Please file an issue with your program at https://github.com/adafruit/"
|
|
||||||
#~ "circuitpython/issues."
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Παρακαλώ δημιουργήστε ένα πρόβλημα στο https://github.com/adafruit/"
|
|
||||||
#~ "circuitpython/issues με το πρόγραμμά σας."
|
|
||||||
|
|
||||||
#~ msgid "'coroutine' object is not an iterator"
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "'coroutine' αντικείμενο δεν μπορεί να χρησιμοποιηθεί σαν επαναλήπτης"
|
|
||||||
|
|
||||||
#~ msgid "Buffer is too small"
|
|
||||||
#~ msgstr "Πολύ μικρό buffer"
|
|
||||||
|
|
||||||
#~ msgid "Corrupt .mpy file"
|
|
||||||
#~ msgstr "Κατεστραμένο .mpy αρχείο"
|
|
||||||
|
|
||||||
#~ msgid "Cannot transfer without MOSI and MISO pins"
|
|
||||||
#~ msgstr "Δεν μπορεί να γίνει μεταφορά χωρίς MOSI και MISO pins"
|
|
||||||
|
|
||||||
#~ msgid "Brightness must be 0-1.0"
|
|
||||||
#~ msgstr "Η φωτινότητα πρέπει να είναι μεταξύ 0-1.0"
|
|
||||||
|
|
||||||
#, fuzzy
|
|
||||||
#~ msgid "64 bit types"
|
|
||||||
#~ msgstr "64 bit τύποι"
|
|
||||||
|
|
||||||
#~ msgid "%q pin invalid"
|
|
||||||
#~ msgstr "%q άκυρο pin"
|
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "\n"
|
#~ "\n"
|
||||||
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"
|
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"
|
||||||
@ -4484,41 +4404,95 @@ msgstr ""
|
|||||||
#~ "στο\n"
|
#~ "στο\n"
|
||||||
#~ "https://github.com/adafruit/circuitpython/issues\n"
|
#~ "https://github.com/adafruit/circuitpython/issues\n"
|
||||||
|
|
||||||
#~ msgid "Attempted heap allocation when VM not running."
|
#~ msgid ""
|
||||||
#~ msgstr "Προσπάθεια δέσμευσης heap όταν το VM δεν τρέχει."
|
#~ "\n"
|
||||||
|
#~ "Please file an issue with your program at https://github.com/adafruit/"
|
||||||
|
#~ "circuitpython/issues."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Παρακαλώ δημιουργήστε ένα πρόβλημα στο https://github.com/adafruit/"
|
||||||
|
#~ "circuitpython/issues με το πρόγραμμά σας."
|
||||||
|
|
||||||
#~ msgid "Boot device must be first device (interface #0)."
|
#, c-format
|
||||||
#~ msgstr "Η συσκευή boot πρέπει να είναι η πρώτη συσκευή (interface #0)."
|
#~ msgid "%02X"
|
||||||
|
#~ msgstr "%02X"
|
||||||
|
|
||||||
#~ msgid "CircuitPython was unable to allocate the heap."
|
#~ msgid "%q"
|
||||||
#~ msgstr "Η CircuitPython δεν μπορέσε να δεσμεύσει το heap."
|
#~ msgstr "%q"
|
||||||
|
|
||||||
#~ msgid "Crash into the HardFault_Handler."
|
|
||||||
#~ msgstr "Κατέρευσε μέσα στο HardFault_Handler."
|
|
||||||
|
|
||||||
#~ msgid "%q must be of type %q"
|
|
||||||
#~ msgstr "%q πρέπει να είναι τύπου %q"
|
|
||||||
|
|
||||||
#~ msgid "%q must be of type %q or None"
|
|
||||||
#~ msgstr "%q πρέπει να είναι τύπου %q ή None"
|
|
||||||
|
|
||||||
#~ msgid "%q length must be >= 1"
|
#~ msgid "%q length must be >= 1"
|
||||||
#~ msgstr "%q μήκος πρέπει να είναι >= 1"
|
#~ msgstr "%q μήκος πρέπει να είναι >= 1"
|
||||||
|
|
||||||
|
#~ msgid "%q must be >= 0"
|
||||||
|
#~ msgstr "%q πρέπει να είναι >= 0"
|
||||||
|
|
||||||
|
#~ msgid "%q must be >= 1"
|
||||||
|
#~ msgstr "%q πρέπει να είναι >= 1"
|
||||||
|
|
||||||
#~ msgid "%q must be a string"
|
#~ msgid "%q must be a string"
|
||||||
#~ msgstr "%q πρέπει να είναι string"
|
#~ msgstr "%q πρέπει να είναι string"
|
||||||
|
|
||||||
#~ msgid "%q must be an int"
|
#~ msgid "%q must be an int"
|
||||||
#~ msgstr "%q πρέπει να είναι int"
|
#~ msgstr "%q πρέπει να είναι int"
|
||||||
|
|
||||||
|
#~ msgid "%q must be of type %q"
|
||||||
|
#~ msgstr "%q πρέπει να είναι τύπου %q"
|
||||||
|
|
||||||
|
#~ msgid "%q must be of type %q or None"
|
||||||
|
#~ msgstr "%q πρέπει να είναι τύπου %q ή None"
|
||||||
|
|
||||||
|
#~ msgid "%q pin invalid"
|
||||||
|
#~ msgstr "%q άκυρο pin"
|
||||||
|
|
||||||
#~ msgid "%q with a report ID of 0 must be of length 1"
|
#~ msgid "%q with a report ID of 0 must be of length 1"
|
||||||
#~ msgstr "%q με ID αναφοράς 0 πρέπει να έχει μήκος 1"
|
#~ msgstr "%q με ID αναφοράς 0 πρέπει να έχει μήκος 1"
|
||||||
|
|
||||||
|
#~ msgid "'await', 'async for' or 'async with' outside async function"
|
||||||
|
#~ msgstr "'await', 'async for' ή 'async with' εκτός ασύνχρονης συνάρτησης"
|
||||||
|
|
||||||
|
#~ msgid "'break' outside loop"
|
||||||
|
#~ msgstr "'break' εκτός επανάληψης"
|
||||||
|
|
||||||
|
#~ msgid "'continue' outside loop"
|
||||||
|
#~ msgstr "'continue' εκτός επανάληψης"
|
||||||
|
|
||||||
|
#~ msgid "'coroutine' object is not an iterator"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "'coroutine' αντικείμενο δεν μπορεί να χρησιμοποιηθεί σαν επαναλήπτης"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "64 bit types"
|
||||||
|
#~ msgstr "64 bit τύποι"
|
||||||
|
|
||||||
|
#~ msgid "ADC2 is being used by WiFi"
|
||||||
|
#~ msgstr "Το ADC2 χρησιμοποιείται απο το WIFI"
|
||||||
|
|
||||||
#~ msgid "At most %d %q may be specified (not %d)"
|
#~ msgid "At most %d %q may be specified (not %d)"
|
||||||
#~ msgstr "Το πολύ %d %q μπορεί να είναι καθορισμένα (όχι %d)"
|
#~ msgstr "Το πολύ %d %q μπορεί να είναι καθορισμένα (όχι %d)"
|
||||||
|
|
||||||
#~ msgid "%q must be >= 0"
|
#~ msgid "Attempted heap allocation when VM not running."
|
||||||
#~ msgstr "%q πρέπει να είναι >= 0"
|
#~ msgstr "Προσπάθεια δέσμευσης heap όταν το VM δεν τρέχει."
|
||||||
|
|
||||||
#~ msgid "%q must be >= 1"
|
#~ msgid "Bit clock and word select must be sequential pins"
|
||||||
#~ msgstr "%q πρέπει να είναι >= 1"
|
#~ msgstr "Ρολόι bit και word select πρέπει να είναι διαδοχικά pins"
|
||||||
|
|
||||||
|
#~ msgid "Boot device must be first device (interface #0)."
|
||||||
|
#~ msgstr "Η συσκευή boot πρέπει να είναι η πρώτη συσκευή (interface #0)."
|
||||||
|
|
||||||
|
#~ msgid "Brightness must be 0-1.0"
|
||||||
|
#~ msgstr "Η φωτινότητα πρέπει να είναι μεταξύ 0-1.0"
|
||||||
|
|
||||||
|
#~ msgid "Buffer is too small"
|
||||||
|
#~ msgstr "Πολύ μικρό buffer"
|
||||||
|
|
||||||
|
#~ msgid "Cannot transfer without MOSI and MISO pins"
|
||||||
|
#~ msgstr "Δεν μπορεί να γίνει μεταφορά χωρίς MOSI και MISO pins"
|
||||||
|
|
||||||
|
#~ msgid "CircuitPython was unable to allocate the heap."
|
||||||
|
#~ msgstr "Η CircuitPython δεν μπορέσε να δεσμεύσει το heap."
|
||||||
|
|
||||||
|
#~ msgid "Corrupt .mpy file"
|
||||||
|
#~ msgstr "Κατεστραμένο .mpy αρχείο"
|
||||||
|
|
||||||
|
#~ msgid "Crash into the HardFault_Handler."
|
||||||
|
#~ msgstr "Κατέρευσε μέσα στο HardFault_Handler."
|
||||||
|
1670
locale/en_GB.po
1670
locale/en_GB.po
File diff suppressed because it is too large
Load Diff
2954
locale/en_US.po
2954
locale/en_US.po
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2920
locale/es.po
2920
locale/es.po
File diff suppressed because it is too large
Load Diff
980
locale/fil.po
980
locale/fil.po
File diff suppressed because it is too large
Load Diff
2986
locale/fr.po
2986
locale/fr.po
File diff suppressed because it is too large
Load Diff
38
locale/hi.po
38
locale/hi.po
@ -74,42 +74,12 @@ msgstr ""
|
|||||||
msgid "%%c requires int or char"
|
msgid "%%c requires int or char"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: main.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%02X"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-module/os/getenv.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%S"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%d address pins, %d rgb pins and %d tiles indicate a height of %d, not %d"
|
"%d address pins, %d rgb pins and %d tiles indicate a height of %d, not %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/alarm/__init__.c
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/cxd56/common-hal/analogio/AnalogOut.c ports/cxd56/common-hal/rtc/RTC.c
|
|
||||||
#: ports/espressif/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/espressif/common-hal/rtc/RTC.c
|
|
||||||
#: ports/mimxrt10xx/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/mimxrt10xx/common-hal/rtc/RTC.c ports/nrf/common-hal/alarm/__init__.c
|
|
||||||
#: ports/nrf/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/nrf/common-hal/audiobusio/I2SOut.c ports/nrf/common-hal/rtc/RTC.c
|
|
||||||
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
|
||||||
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/raspberrypi/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
|
||||||
#: ports/stm/common-hal/canio/Listener.c ports/stm/common-hal/rtc/RTC.c
|
|
||||||
#: shared-bindings/audiobusio/I2SOut.c shared-bindings/audiobusio/PDMIn.c
|
|
||||||
#: shared-bindings/keypad/KeyMatrix.c shared-bindings/keypad/Keys.c
|
|
||||||
#: shared-bindings/keypad/ShiftRegisterKeys.c
|
|
||||||
msgid "%q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
#: shared-bindings/microcontroller/Pin.c
|
||||||
msgid "%q and %q contain duplicate pins"
|
msgid "%q and %q contain duplicate pins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -293,11 +263,6 @@ msgstr ""
|
|||||||
msgid "%q[%u] waits on input outside of count"
|
msgid "%q[%u] waits on input outside of count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/runtime.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c
|
#: ports/espressif/common-hal/espidf/__init__.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s error 0x%x"
|
msgid "%s error 0x%x"
|
||||||
@ -1607,7 +1572,8 @@ msgstr ""
|
|||||||
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
|
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
|
||||||
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
|
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
|
||||||
msgid "Only 8 or 16 bit mono with "
|
#, c-format
|
||||||
|
msgid "Only 8 or 16 bit mono with %dx oversampling supported."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/wifi/__init__.c
|
#: ports/espressif/common-hal/wifi/__init__.c
|
||||||
|
992
locale/it_IT.po
992
locale/it_IT.po
File diff suppressed because it is too large
Load Diff
1045
locale/ja.po
1045
locale/ja.po
File diff suppressed because it is too large
Load Diff
200
locale/ko.po
200
locale/ko.po
@ -73,42 +73,12 @@ msgstr " 산출:\n"
|
|||||||
msgid "%%c requires int or char"
|
msgid "%%c requires int or char"
|
||||||
msgstr "%%c 전수(int)또는 캐릭터(char)필요합니다"
|
msgstr "%%c 전수(int)또는 캐릭터(char)필요합니다"
|
||||||
|
|
||||||
#: main.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%02X"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-module/os/getenv.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%S"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"%d address pins, %d rgb pins and %d tiles indicate a height of %d, not %d"
|
"%d address pins, %d rgb pins and %d tiles indicate a height of %d, not %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/alarm/__init__.c
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/cxd56/common-hal/analogio/AnalogOut.c ports/cxd56/common-hal/rtc/RTC.c
|
|
||||||
#: ports/espressif/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/espressif/common-hal/rtc/RTC.c
|
|
||||||
#: ports/mimxrt10xx/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/mimxrt10xx/common-hal/rtc/RTC.c ports/nrf/common-hal/alarm/__init__.c
|
|
||||||
#: ports/nrf/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/nrf/common-hal/audiobusio/I2SOut.c ports/nrf/common-hal/rtc/RTC.c
|
|
||||||
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
|
||||||
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/raspberrypi/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
|
||||||
#: ports/stm/common-hal/canio/Listener.c ports/stm/common-hal/rtc/RTC.c
|
|
||||||
#: shared-bindings/audiobusio/I2SOut.c shared-bindings/audiobusio/PDMIn.c
|
|
||||||
#: shared-bindings/keypad/KeyMatrix.c shared-bindings/keypad/Keys.c
|
|
||||||
#: shared-bindings/keypad/ShiftRegisterKeys.c
|
|
||||||
msgid "%q"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
#: shared-bindings/microcontroller/Pin.c
|
||||||
msgid "%q and %q contain duplicate pins"
|
msgid "%q and %q contain duplicate pins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -292,11 +262,6 @@ msgstr ""
|
|||||||
msgid "%q[%u] waits on input outside of count"
|
msgid "%q[%u] waits on input outside of count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/runtime.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c
|
#: ports/espressif/common-hal/espidf/__init__.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s error 0x%x"
|
msgid "%s error 0x%x"
|
||||||
@ -632,8 +597,9 @@ msgstr "자동 재 장전이 꺼져 있습니다\n"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Auto-reload is on. Simply save files over USB to run them or enter REPL to "
|
"Auto-reload is on. Simply save files over USB to run them or enter REPL to "
|
||||||
"disable.\n"
|
"disable.\n"
|
||||||
msgstr "자동 새로 고침이 켜져 있습니다. USB를 통해 파일을 저장하여 실행하십시오. "
|
msgstr ""
|
||||||
"비활성화하려면 REPL을 입력하십시오.\n"
|
"자동 새로 고침이 켜져 있습니다. USB를 통해 파일을 저장하여 실행하십시오. 비활"
|
||||||
|
"성화하려면 REPL을 입력하십시오.\n"
|
||||||
|
|
||||||
#: ports/espressif/common-hal/canio/CAN.c
|
#: ports/espressif/common-hal/canio/CAN.c
|
||||||
msgid "Baudrate not supported by peripheral"
|
msgid "Baudrate not supported by peripheral"
|
||||||
@ -1607,7 +1573,8 @@ msgstr ""
|
|||||||
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
|
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
|
||||||
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
|
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
|
||||||
msgid "Only 8 or 16 bit mono with "
|
#, c-format
|
||||||
|
msgid "Only 8 or 16 bit mono with %dx oversampling supported."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/wifi/__init__.c
|
#: ports/espressif/common-hal/wifi/__init__.c
|
||||||
@ -2148,7 +2115,8 @@ msgstr "UUID문자열이 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'형식이 아닙
|
|||||||
|
|
||||||
#: shared-bindings/_bleio/UUID.c
|
#: shared-bindings/_bleio/UUID.c
|
||||||
msgid "UUID value is not str, int or byte buffer"
|
msgid "UUID value is not str, int or byte buffer"
|
||||||
msgstr "UUID값이 문자열(str), 정수(int) 또는 바이트버퍼가(byte buffer) 아닙니다"
|
msgstr ""
|
||||||
|
"UUID값이 문자열(str), 정수(int) 또는 바이트버퍼가(byte buffer) 아닙니다"
|
||||||
|
|
||||||
#: ports/raspberrypi/common-hal/memorymap/AddressRange.c
|
#: ports/raspberrypi/common-hal/memorymap/AddressRange.c
|
||||||
msgid "Unable to access unaligned IO register"
|
msgid "Unable to access unaligned IO register"
|
||||||
@ -4404,20 +4372,12 @@ msgstr ""
|
|||||||
msgid "zi must be of shape (n_section, 2)"
|
msgid "zi must be of shape (n_section, 2)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "'break' outside loop"
|
#~ msgid ""
|
||||||
#~ msgstr "'break' 는 루프 외부에 있습니다"
|
#~ "\n"
|
||||||
|
#~ "Code done running. Waiting for reload.\n"
|
||||||
#~ msgid "'continue' outside loop"
|
#~ msgstr ""
|
||||||
#~ msgstr "'continue' 는 루프 외부에 있습니다"
|
#~ "\n"
|
||||||
|
#~ "실행 완료 코드. 재장전 을 기다리는 중입니다\n"
|
||||||
#~ msgid "invalid format"
|
|
||||||
#~ msgstr "형식가 유효하지 않습니다"
|
|
||||||
|
|
||||||
#~ msgid "Expected a %q"
|
|
||||||
#~ msgstr "%q 이 예상되었습니다."
|
|
||||||
|
|
||||||
#~ msgid "Invalid pins"
|
|
||||||
#~ msgstr "핀이 유효하지 않습니다"
|
|
||||||
|
|
||||||
#~ msgid "%q must be >= 1"
|
#~ msgid "%q must be >= 1"
|
||||||
#~ msgstr "%q 는 >=1이어야합니다"
|
#~ msgstr "%q 는 >=1이어야합니다"
|
||||||
@ -4425,6 +4385,30 @@ msgstr ""
|
|||||||
#~ msgid "%q should be an int"
|
#~ msgid "%q should be an int"
|
||||||
#~ msgstr "%q 는 정수(int) 여야합니다"
|
#~ msgstr "%q 는 정수(int) 여야합니다"
|
||||||
|
|
||||||
|
#~ msgid "'%s' object does not support item assignment"
|
||||||
|
#~ msgstr "'%s' 을 지정할 수 없습니다"
|
||||||
|
|
||||||
|
#~ msgid "'%s' object does not support item deletion"
|
||||||
|
#~ msgstr "'%s' 은 삭제할 수 없습니다"
|
||||||
|
|
||||||
|
#~ msgid "'%s' object is not an iterator"
|
||||||
|
#~ msgstr "'%s' 은 수정할 수 없습니다"
|
||||||
|
|
||||||
|
#~ msgid "'%s' object is not callable"
|
||||||
|
#~ msgstr "'%s' 을 검색 할 수 없습니다"
|
||||||
|
|
||||||
|
#~ msgid "'%s' object is not iterable"
|
||||||
|
#~ msgstr "'%s' 은 변경할 수 없습니다"
|
||||||
|
|
||||||
|
#~ msgid "'break' outside loop"
|
||||||
|
#~ msgstr "'break' 는 루프 외부에 있습니다"
|
||||||
|
|
||||||
|
#~ msgid "'continue' outside loop"
|
||||||
|
#~ msgstr "'continue' 는 루프 외부에 있습니다"
|
||||||
|
|
||||||
|
#~ msgid "Brightness must be between 0 and 255"
|
||||||
|
#~ msgstr "밝기는 0에서 255 사이 여야합니다"
|
||||||
|
|
||||||
#, c-format
|
#, c-format
|
||||||
#~ msgid "Buffer incorrect size. Should be %d bytes."
|
#~ msgid "Buffer incorrect size. Should be %d bytes."
|
||||||
#~ msgstr "잘못된 크기의 버퍼. %d 바이트 여야합니다."
|
#~ msgstr "잘못된 크기의 버퍼. %d 바이트 여야합니다."
|
||||||
@ -4435,12 +4419,48 @@ msgstr ""
|
|||||||
#~ msgid "Bytes must be between 0 and 255."
|
#~ msgid "Bytes must be between 0 and 255."
|
||||||
#~ msgstr "바이트는 0에서 255 사이 여야합니다."
|
#~ msgstr "바이트는 0에서 255 사이 여야합니다."
|
||||||
|
|
||||||
|
#~ msgid "Can't add services in Central mode"
|
||||||
|
#~ msgstr "센트랄(중앙) 모드에서는 서비스를 추가 할 수 없습니다"
|
||||||
|
|
||||||
|
#~ msgid "Can't advertise in Central mode"
|
||||||
|
#~ msgstr "센트랄(중앙) 모드로 광고 (브로드 캐스트) 할 수 없습니다"
|
||||||
|
|
||||||
|
#~ msgid "Can't change the name in Central mode"
|
||||||
|
#~ msgstr "센트랄(중앙) 모드에서는 이름을 변경할 수 없습니다"
|
||||||
|
|
||||||
#~ msgid "Cannot read without MISO pin."
|
#~ msgid "Cannot read without MISO pin."
|
||||||
#~ msgstr "MISO핀이 없으면 읽을 수 없습니다"
|
#~ msgstr "MISO핀이 없으면 읽을 수 없습니다"
|
||||||
|
|
||||||
#~ msgid "Command must be an int between 0 and 255"
|
#~ msgid "Command must be an int between 0 and 255"
|
||||||
#~ msgstr "명령은 0에서 255 사이의 정수(int) 여야합니다"
|
#~ msgstr "명령은 0에서 255 사이의 정수(int) 여야합니다"
|
||||||
|
|
||||||
|
#~ msgid "Data too large for the advertisement packet"
|
||||||
|
#~ msgstr "광고 (브로드 캐스트) 패킷에 대한 데이터가 너무 큽니다"
|
||||||
|
|
||||||
|
#~ msgid "Expected a %q"
|
||||||
|
#~ msgstr "%q 이 예상되었습니다."
|
||||||
|
|
||||||
|
#~ msgid "Expected a Characteristic"
|
||||||
|
#~ msgstr "특성(Characteristic)이 예상되었습니다."
|
||||||
|
|
||||||
|
#~ msgid "Expected a UUID"
|
||||||
|
#~ msgstr "UUID이 예상되었습니다."
|
||||||
|
|
||||||
|
#~ msgid "Failed to add service"
|
||||||
|
#~ msgstr "서비스를 추가하지 못했습니다"
|
||||||
|
|
||||||
|
#~ msgid "Failed to add service, err 0x%04x"
|
||||||
|
#~ msgstr "서비스를 추가하지 못했습니다., 오류 0x%04x"
|
||||||
|
|
||||||
|
#~ msgid "Failed to connect:"
|
||||||
|
#~ msgstr "연결할 수 없다"
|
||||||
|
|
||||||
|
#~ msgid "Failed to continue scanning"
|
||||||
|
#~ msgstr "스캔을 계속할 수 없습니다"
|
||||||
|
|
||||||
|
#~ msgid "Failed to continue scanning, err 0x%04x"
|
||||||
|
#~ msgstr "스캔을 계속할 수 없습니다, 오류 0x%04x"
|
||||||
|
|
||||||
#~ msgid "Invalid file"
|
#~ msgid "Invalid file"
|
||||||
#~ msgstr "파일이 유효하지 않습니다"
|
#~ msgstr "파일이 유효하지 않습니다"
|
||||||
|
|
||||||
@ -4459,81 +4479,29 @@ msgstr ""
|
|||||||
#~ msgid "Invalid pin for right channel"
|
#~ msgid "Invalid pin for right channel"
|
||||||
#~ msgstr "오른쪽 채널 핀이 잘못되었습니다"
|
#~ msgstr "오른쪽 채널 핀이 잘못되었습니다"
|
||||||
|
|
||||||
#~ msgid "Brightness must be between 0 and 255"
|
#~ msgid "Invalid pins"
|
||||||
#~ msgstr "밝기는 0에서 255 사이 여야합니다"
|
#~ msgstr "핀이 유효하지 않습니다"
|
||||||
|
|
||||||
#~ msgid "integer required"
|
|
||||||
#~ msgstr "정수가 필요합니다"
|
|
||||||
|
|
||||||
#~ msgid "Expected a Characteristic"
|
|
||||||
#~ msgstr "특성(Characteristic)이 예상되었습니다."
|
|
||||||
|
|
||||||
#~ msgid "Expected a UUID"
|
|
||||||
#~ msgstr "UUID이 예상되었습니다."
|
|
||||||
|
|
||||||
#~ msgid "Length must be an int"
|
#~ msgid "Length must be an int"
|
||||||
#~ msgstr "길이는 정수(int) 여야합니다"
|
#~ msgstr "길이는 정수(int) 여야합니다"
|
||||||
|
|
||||||
#~ msgid "invalid dupterm index"
|
|
||||||
#~ msgstr "Dupterm index가 유효하지 않습니다"
|
|
||||||
|
|
||||||
#~ msgid "bits must be 7, 8 or 9"
|
#~ msgid "bits must be 7, 8 or 9"
|
||||||
#~ msgstr "비트(bits)는 7, 8 또는 9 여야합니다"
|
#~ msgstr "비트(bits)는 7, 8 또는 9 여야합니다"
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Code done running. Waiting for reload.\n"
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "실행 완료 코드. 재장전 을 기다리는 중입니다\n"
|
|
||||||
|
|
||||||
#~ msgid "'%s' object does not support item assignment"
|
|
||||||
#~ msgstr "'%s' 을 지정할 수 없습니다"
|
|
||||||
|
|
||||||
#~ msgid "'%s' object does not support item deletion"
|
|
||||||
#~ msgstr "'%s' 은 삭제할 수 없습니다"
|
|
||||||
|
|
||||||
#~ msgid "'%s' object is not an iterator"
|
|
||||||
#~ msgstr "'%s' 은 수정할 수 없습니다"
|
|
||||||
|
|
||||||
#~ msgid "'%s' object is not callable"
|
|
||||||
#~ msgstr "'%s' 을 검색 할 수 없습니다"
|
|
||||||
|
|
||||||
#~ msgid "'%s' object is not iterable"
|
|
||||||
#~ msgstr "'%s' 은 변경할 수 없습니다"
|
|
||||||
|
|
||||||
#~ msgid "Can't add services in Central mode"
|
|
||||||
#~ msgstr "센트랄(중앙) 모드에서는 서비스를 추가 할 수 없습니다"
|
|
||||||
|
|
||||||
#~ msgid "Can't advertise in Central mode"
|
|
||||||
#~ msgstr "센트랄(중앙) 모드로 광고 (브로드 캐스트) 할 수 없습니다"
|
|
||||||
|
|
||||||
#~ msgid "Can't change the name in Central mode"
|
|
||||||
#~ msgstr "센트랄(중앙) 모드에서는 이름을 변경할 수 없습니다"
|
|
||||||
|
|
||||||
#~ msgid "Data too large for the advertisement packet"
|
|
||||||
#~ msgstr "광고 (브로드 캐스트) 패킷에 대한 데이터가 너무 큽니다"
|
|
||||||
|
|
||||||
#~ msgid "Failed to add service"
|
|
||||||
#~ msgstr "서비스를 추가하지 못했습니다"
|
|
||||||
|
|
||||||
#~ msgid "Failed to add service, err 0x%04x"
|
|
||||||
#~ msgstr "서비스를 추가하지 못했습니다., 오류 0x%04x"
|
|
||||||
|
|
||||||
#~ msgid "Failed to connect:"
|
|
||||||
#~ msgstr "연결할 수 없다"
|
|
||||||
|
|
||||||
#~ msgid "Failed to continue scanning"
|
|
||||||
#~ msgstr "스캔을 계속할 수 없습니다"
|
|
||||||
|
|
||||||
#~ msgid "Failed to continue scanning, err 0x%04x"
|
|
||||||
#~ msgstr "스캔을 계속할 수 없습니다, 오류 0x%04x"
|
|
||||||
|
|
||||||
#~ msgid "bits must be 8"
|
#~ msgid "bits must be 8"
|
||||||
#~ msgstr "비트(bits)는 8이어야합니다"
|
#~ msgstr "비트(bits)는 8이어야합니다"
|
||||||
|
|
||||||
|
#~ msgid "integer required"
|
||||||
|
#~ msgstr "정수가 필요합니다"
|
||||||
|
|
||||||
#~ msgid "invalid I2C peripheral"
|
#~ msgid "invalid I2C peripheral"
|
||||||
#~ msgstr "ICT주변 기기가 유효하지 않습니다"
|
#~ msgstr "ICT주변 기기가 유효하지 않습니다"
|
||||||
|
|
||||||
#~ msgid "invalid SPI peripheral"
|
#~ msgid "invalid SPI peripheral"
|
||||||
#~ msgstr "SPI주변 기기가 유효하지 않습니다"
|
#~ msgstr "SPI주변 기기가 유효하지 않습니다"
|
||||||
|
|
||||||
|
#~ msgid "invalid dupterm index"
|
||||||
|
#~ msgstr "Dupterm index가 유효하지 않습니다"
|
||||||
|
|
||||||
|
#~ msgid "invalid format"
|
||||||
|
#~ msgstr "형식가 유효하지 않습니다"
|
||||||
|
1671
locale/nl.po
1671
locale/nl.po
File diff suppressed because it is too large
Load Diff
1418
locale/pl.po
1418
locale/pl.po
File diff suppressed because it is too large
Load Diff
3136
locale/pt_BR.po
3136
locale/pt_BR.po
File diff suppressed because it is too large
Load Diff
844
locale/ru.po
844
locale/ru.po
File diff suppressed because it is too large
Load Diff
2749
locale/sv.po
2749
locale/sv.po
File diff suppressed because it is too large
Load Diff
@ -2,6 +2,10 @@
|
|||||||
msgid "en_US"
|
msgid "en_US"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
# This string should never be translated, but for technical reasons it has to appear as an MP_ERROR_TEXT
|
||||||
|
msgid "%02X"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
# This string should never be translated, but for technical reasons it has to appear as an MP_ERROR_TEXT
|
# This string should never be translated, but for technical reasons it has to appear as an MP_ERROR_TEXT
|
||||||
msgid "%S"
|
msgid "%S"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
337
locale/tr.po
337
locale/tr.po
@ -78,16 +78,6 @@ msgstr " çıktı:\n"
|
|||||||
msgid "%%c requires int or char"
|
msgid "%%c requires int or char"
|
||||||
msgstr "%%c int veya char tipine ihtiyaç duyar"
|
msgstr "%%c int veya char tipine ihtiyaç duyar"
|
||||||
|
|
||||||
#: main.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%02X"
|
|
||||||
msgstr "%02X"
|
|
||||||
|
|
||||||
#: shared-module/os/getenv.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%S"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
#: shared-bindings/rgbmatrix/RGBMatrix.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -96,26 +86,6 @@ msgstr ""
|
|||||||
"%d adres pinleri, %d RGB pinleri ve %d döşemeleri %d'nin yüksekliği "
|
"%d adres pinleri, %d RGB pinleri ve %d döşemeleri %d'nin yüksekliği "
|
||||||
"gösterir, %d'nin değil"
|
"gösterir, %d'nin değil"
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/alarm/__init__.c
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/cxd56/common-hal/analogio/AnalogOut.c ports/cxd56/common-hal/rtc/RTC.c
|
|
||||||
#: ports/espressif/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/espressif/common-hal/rtc/RTC.c
|
|
||||||
#: ports/mimxrt10xx/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/mimxrt10xx/common-hal/rtc/RTC.c ports/nrf/common-hal/alarm/__init__.c
|
|
||||||
#: ports/nrf/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/nrf/common-hal/audiobusio/I2SOut.c ports/nrf/common-hal/rtc/RTC.c
|
|
||||||
#: ports/raspberrypi/common-hal/alarm/__init__.c
|
|
||||||
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c
|
|
||||||
#: ports/raspberrypi/common-hal/audiobusio/I2SOut.c
|
|
||||||
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
|
|
||||||
#: ports/stm/common-hal/canio/Listener.c ports/stm/common-hal/rtc/RTC.c
|
|
||||||
#: shared-bindings/audiobusio/I2SOut.c shared-bindings/audiobusio/PDMIn.c
|
|
||||||
#: shared-bindings/keypad/KeyMatrix.c shared-bindings/keypad/Keys.c
|
|
||||||
#: shared-bindings/keypad/ShiftRegisterKeys.c
|
|
||||||
msgid "%q"
|
|
||||||
msgstr "%q"
|
|
||||||
|
|
||||||
#: shared-bindings/microcontroller/Pin.c
|
#: shared-bindings/microcontroller/Pin.c
|
||||||
msgid "%q and %q contain duplicate pins"
|
msgid "%q and %q contain duplicate pins"
|
||||||
msgstr "%q ve %q yinelenen pinler içeriyor"
|
msgstr "%q ve %q yinelenen pinler içeriyor"
|
||||||
@ -299,11 +269,6 @@ msgstr ""
|
|||||||
msgid "%q[%u] waits on input outside of count"
|
msgid "%q[%u] waits on input outside of count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: py/runtime.c
|
|
||||||
#, c-format
|
|
||||||
msgid "%s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/espressif/common-hal/espidf/__init__.c
|
#: ports/espressif/common-hal/espidf/__init__.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s error 0x%x"
|
msgid "%s error 0x%x"
|
||||||
@ -1621,7 +1586,8 @@ msgstr ""
|
|||||||
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
|
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
|
||||||
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
|
#: ports/raspberrypi/common-hal/audiobusio/PDMIn.c
|
||||||
msgid "Only 8 or 16 bit mono with "
|
#, c-format
|
||||||
|
msgid "Only 8 or 16 bit mono with %dx oversampling supported."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ports/espressif/common-hal/wifi/__init__.c
|
#: ports/espressif/common-hal/wifi/__init__.c
|
||||||
@ -4421,6 +4387,66 @@ msgstr ""
|
|||||||
msgid "zi must be of shape (n_section, 2)"
|
msgid "zi must be of shape (n_section, 2)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Code stopped by auto-reload.\n"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Program otomatik yeniden yükleme tarafından sonlandırıldı.\n"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"
|
||||||
|
#~ "https://github.com/adafruit/circuitpython/issues\n"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "\n"
|
||||||
|
#~ "Lütfen, şu adrese CIRCUITPY sürücünüzün içerikleri ile beraber bir hata/"
|
||||||
|
#~ "konu kaydı ekleyin\n"
|
||||||
|
#~ "https://github.com/adafruit/circuitpython/issues\n"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
#~ msgid "%02X"
|
||||||
|
#~ msgstr "%02X"
|
||||||
|
|
||||||
|
#~ msgid "%q"
|
||||||
|
#~ msgstr "%q"
|
||||||
|
|
||||||
|
#~ msgid "%q length must be >= 1"
|
||||||
|
#~ msgstr "%q boyutu >=1 olmalıdır"
|
||||||
|
|
||||||
|
#~ msgid "%q must be >= 0"
|
||||||
|
#~ msgstr "%q >= 0 olmalıdır"
|
||||||
|
|
||||||
|
#~ msgid "%q must be >= 1"
|
||||||
|
#~ msgstr "%q >= 1 olmalıdır"
|
||||||
|
|
||||||
|
#~ msgid "%q must be a string"
|
||||||
|
#~ msgstr "%q bir string olmalıdır"
|
||||||
|
|
||||||
|
#~ msgid "%q must be a tuple of length 2"
|
||||||
|
#~ msgstr "%q, boyutu 2 olan bir tuple olmalıdır"
|
||||||
|
|
||||||
|
#~ msgid "%q must be an int"
|
||||||
|
#~ msgstr "%q bir tam sayı olmalıdır"
|
||||||
|
|
||||||
|
#~ msgid "%q must be between %d and %d"
|
||||||
|
#~ msgstr "%q, %d ile %d arasında olmalıdır"
|
||||||
|
|
||||||
|
#~ msgid "%q must be of type %q"
|
||||||
|
#~ msgstr "%q, %q türünde olmalıdır"
|
||||||
|
|
||||||
|
#~ msgid "%q must be of type %q or None"
|
||||||
|
#~ msgstr "%q, %q ya da None türünde olmalıdır"
|
||||||
|
|
||||||
|
#~ msgid "%q pin invalid"
|
||||||
|
#~ msgstr "%q pini geçersiz"
|
||||||
|
|
||||||
|
#~ msgid "%q should be an int"
|
||||||
|
#~ msgstr "%q bir int olmalıdır"
|
||||||
|
|
||||||
|
#~ msgid "%q with a report ID of 0 must be of length 1"
|
||||||
|
#~ msgstr "Rapor kimliği 0 olan %q, 1 uzunluğunda olmalıdır"
|
||||||
|
|
||||||
#~ msgid "'await', 'async for' or 'async with' outside async function"
|
#~ msgid "'await', 'async for' or 'async with' outside async function"
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "asenkron fonksiyon dışında kullanılan 'await', 'async for' ya da 'async "
|
#~ "asenkron fonksiyon dışında kullanılan 'await', 'async for' ya da 'async "
|
||||||
@ -4432,24 +4458,103 @@ msgstr ""
|
|||||||
#~ msgid "'continue' outside loop"
|
#~ msgid "'continue' outside loop"
|
||||||
#~ msgstr "döngü dışında 'continue'"
|
#~ msgstr "döngü dışında 'continue'"
|
||||||
|
|
||||||
#~ msgid "Bit clock and word select must be sequential pins"
|
#~ msgid "'coroutine' object is not an iterator"
|
||||||
#~ msgstr "Bit saati ve kelime seçimi pinleri sıralı olmalıdır"
|
#~ msgstr "'coroutine' nesnesi bir iteratör değildir"
|
||||||
|
|
||||||
#~ msgid "Initialization failed due to lack of memory"
|
#~ msgid "(x,y) integers required"
|
||||||
#~ msgstr "Bellek yetersizliği nedeniyle başlatma başarısız oldu"
|
#~ msgstr "(x, y) integerları gereklidir"
|
||||||
|
|
||||||
|
#~ msgid "64 bit types"
|
||||||
|
#~ msgstr "64 bit tipler"
|
||||||
|
|
||||||
#~ msgid "ADC2 is being used by WiFi"
|
#~ msgid "ADC2 is being used by WiFi"
|
||||||
#~ msgstr "ADC2, WiFi tarafından kullanılmaktadır"
|
#~ msgstr "ADC2, WiFi tarafından kullanılmaktadır"
|
||||||
|
|
||||||
#~ msgid "'coroutine' object is not an iterator"
|
#~ msgid "Address type out of range"
|
||||||
#~ msgstr "'coroutine' nesnesi bir iteratör değildir"
|
#~ msgstr "Adres tipi beklenen aralığın dışında"
|
||||||
|
|
||||||
|
#~ msgid "All I2C targets are in use"
|
||||||
|
#~ msgstr "Tüm I2C hedefleri kullanımda"
|
||||||
|
|
||||||
|
#~ msgid "AnalogIn not supported on given pin"
|
||||||
|
#~ msgstr "Verilen pin için AnalogIn desteklenmemektedir"
|
||||||
|
|
||||||
|
#~ msgid "AnalogOut functionality not supported"
|
||||||
|
#~ msgstr "AnalogOut işlevi desteklenmemektedir"
|
||||||
|
|
||||||
|
#~ msgid "AnalogOut is only 16 bits. Value must be less than 65536."
|
||||||
|
#~ msgstr "AnalogOut yalnızca 16 bitlik. Değer 65536'dan küçük olmalıdır."
|
||||||
|
|
||||||
|
#~ msgid "AnalogOut not supported on given pin"
|
||||||
|
#~ msgstr "Verilen pin için AnalogOut desteklenmemektedir"
|
||||||
|
|
||||||
|
#~ msgid "At most %d %q may be specified (not %d)"
|
||||||
|
#~ msgstr "En az %d %q belirtilmeli (%d değil)"
|
||||||
|
|
||||||
|
#~ msgid "Attempted heap allocation when VM not running."
|
||||||
|
#~ msgstr "VM çalışmazken heap'ten alan tahsis edilmeye çalışıldı."
|
||||||
|
|
||||||
|
#~ msgid "Bit clock and word select must be sequential pins"
|
||||||
|
#~ msgstr "Bit saati ve kelime seçimi pinleri sıralı olmalıdır"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
#~ msgid "Bit depth must be from 1 to 6 inclusive, not %d"
|
||||||
|
#~ msgstr "Bit derinliği 1-6 aralığında olmalı, %d değil"
|
||||||
|
|
||||||
|
#~ msgid "Boot device must be first device (interface #0)."
|
||||||
|
#~ msgstr "Önyükleme cihazı ilk cihaz olmalı (arayüz #0)."
|
||||||
|
|
||||||
|
#~ msgid "Both buttons were pressed at start up.\n"
|
||||||
|
#~ msgstr "Başlatma sırasında her iki düğmeye de basıldı.\n"
|
||||||
|
|
||||||
|
#~ msgid "Brightness must be 0-1.0"
|
||||||
|
#~ msgstr "Parlaklık 0-1.0 aralığında olmalı"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
#~ msgid "Buffer incorrect size. Should be %d bytes."
|
||||||
|
#~ msgstr "Geçersiz arabellek boyutu. %d kadar olmalı"
|
||||||
|
|
||||||
#~ msgid "Buffer is too small"
|
#~ msgid "Buffer is too small"
|
||||||
#~ msgstr "Arabellek çok küçük"
|
#~ msgstr "Arabellek çok küçük"
|
||||||
|
|
||||||
|
#~ msgid "Buffer must be at least length 1"
|
||||||
|
#~ msgstr "Arabellek boyutu en az 1 olmalı"
|
||||||
|
|
||||||
|
#~ msgid "Button A was pressed at start up.\n"
|
||||||
|
#~ msgstr "Başlatma sırasında A düğmesine basıldı.\n"
|
||||||
|
|
||||||
|
#~ msgid "Bytes must be between 0 and 255."
|
||||||
|
#~ msgstr "Baytlar 0-255 aralığında olmalı"
|
||||||
|
|
||||||
|
#~ msgid "Cannot transfer without MOSI and MISO pins"
|
||||||
|
#~ msgstr "MOSI ve MISO pinleri olmadan transfer edilemiyor"
|
||||||
|
|
||||||
#~ msgid "Corrupt .mpy file"
|
#~ msgid "Corrupt .mpy file"
|
||||||
#~ msgstr "Bozuk .mpy dosyası"
|
#~ msgstr "Bozuk .mpy dosyası"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
#~ msgid "Error in MIDI stream at position %d"
|
||||||
|
#~ msgstr "%d konumundaki MIDI akışında hata"
|
||||||
|
|
||||||
|
#~ msgid "Expected a %q"
|
||||||
|
#~ msgstr "%q bekleniyor"
|
||||||
|
|
||||||
|
#~ msgid "Expected a %q or %q"
|
||||||
|
#~ msgstr "%q yada %q bekleniyor"
|
||||||
|
|
||||||
|
#~ msgid "Expected an %q"
|
||||||
|
#~ msgstr "%q bekleniyor"
|
||||||
|
|
||||||
|
#~ msgid "Hardware busy, try alternative pins"
|
||||||
|
#~ msgstr "Donanım meşgul, alternatif pinleri deneyin"
|
||||||
|
|
||||||
|
#~ msgid "I2SOut not available"
|
||||||
|
#~ msgstr "I2SOut uygundeğil"
|
||||||
|
|
||||||
|
#, c-format
|
||||||
|
#~ msgid "IV must be %d bytes long"
|
||||||
|
#~ msgstr "IV %d bayt uzunluğunda olmalı"
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "Incompatible .mpy file. Please update all .mpy files. See http://adafru."
|
#~ "Incompatible .mpy file. Please update all .mpy files. See http://adafru."
|
||||||
#~ "it/mpy-update for more info."
|
#~ "it/mpy-update for more info."
|
||||||
@ -4457,6 +4562,9 @@ msgstr ""
|
|||||||
#~ "Uyumsuz .mpy dosyası. Lütfen tüm .mpy dosyalarını güncelleyin. Daha fazla "
|
#~ "Uyumsuz .mpy dosyası. Lütfen tüm .mpy dosyalarını güncelleyin. Daha fazla "
|
||||||
#~ "bilgi için http://adafru.it/mpy-update ."
|
#~ "bilgi için http://adafru.it/mpy-update ."
|
||||||
|
|
||||||
|
#~ msgid "Initialization failed due to lack of memory"
|
||||||
|
#~ msgstr "Bellek yetersizliği nedeniyle başlatma başarısız oldu"
|
||||||
|
|
||||||
#, c-format
|
#, c-format
|
||||||
#~ msgid "Instruction %d shifts in more bits than pin count"
|
#~ msgid "Instruction %d shifts in more bits than pin count"
|
||||||
#~ msgstr "Komut %d pin sayısından daha fazla bit içe kaydırıyor"
|
#~ msgstr "Komut %d pin sayısından daha fazla bit içe kaydırıyor"
|
||||||
@ -4473,11 +4581,12 @@ msgstr ""
|
|||||||
#~ msgid "Instruction %d waits on input outside of count"
|
#~ msgid "Instruction %d waits on input outside of count"
|
||||||
#~ msgstr "Komut %d sayım dışında, girişte bekler"
|
#~ msgstr "Komut %d sayım dışında, girişte bekler"
|
||||||
|
|
||||||
#~ msgid "Cannot transfer without MOSI and MISO pins"
|
#~ msgid "Invalid memory access."
|
||||||
#~ msgstr "MOSI ve MISO pinleri olmadan transfer edilemiyor"
|
#~ msgstr "Geçersiz bellek erişimi."
|
||||||
|
|
||||||
#~ msgid "Hardware busy, try alternative pins"
|
#, c-format
|
||||||
#~ msgstr "Donanım meşgul, alternatif pinleri deneyin"
|
#~ msgid "Maximum x value when mirrored is %d"
|
||||||
|
#~ msgstr "İkizlendiğinde maksimum x değeri %d'dir"
|
||||||
|
|
||||||
#~ msgid "Missing MISO or MOSI Pin"
|
#~ msgid "Missing MISO or MOSI Pin"
|
||||||
#~ msgstr "Eksik MISO veya MOSI pini"
|
#~ msgstr "Eksik MISO veya MOSI pini"
|
||||||
@ -4502,139 +4611,3 @@ msgstr ""
|
|||||||
|
|
||||||
#~ msgid "No TX pin"
|
#~ msgid "No TX pin"
|
||||||
#~ msgstr "TX pini yok"
|
#~ msgstr "TX pini yok"
|
||||||
|
|
||||||
#~ msgid "Brightness must be 0-1.0"
|
|
||||||
#~ msgstr "Parlaklık 0-1.0 aralığında olmalı"
|
|
||||||
|
|
||||||
#, c-format
|
|
||||||
#~ msgid "Error in MIDI stream at position %d"
|
|
||||||
#~ msgstr "%d konumundaki MIDI akışında hata"
|
|
||||||
|
|
||||||
#, c-format
|
|
||||||
#~ msgid "Maximum x value when mirrored is %d"
|
|
||||||
#~ msgstr "İkizlendiğinde maksimum x değeri %d'dir"
|
|
||||||
|
|
||||||
#~ msgid "I2SOut not available"
|
|
||||||
#~ msgstr "I2SOut uygundeğil"
|
|
||||||
|
|
||||||
#~ msgid "64 bit types"
|
|
||||||
#~ msgstr "64 bit tipler"
|
|
||||||
|
|
||||||
#~ msgid "%q pin invalid"
|
|
||||||
#~ msgstr "%q pini geçersiz"
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Please file an issue with the contents of your CIRCUITPY drive at \n"
|
|
||||||
#~ "https://github.com/adafruit/circuitpython/issues\n"
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Lütfen, şu adrese CIRCUITPY sürücünüzün içerikleri ile beraber bir hata/"
|
|
||||||
#~ "konu kaydı ekleyin\n"
|
|
||||||
#~ "https://github.com/adafruit/circuitpython/issues\n"
|
|
||||||
|
|
||||||
#~ msgid "Attempted heap allocation when VM not running."
|
|
||||||
#~ msgstr "VM çalışmazken heap'ten alan tahsis edilmeye çalışıldı."
|
|
||||||
|
|
||||||
#~ msgid "Boot device must be first device (interface #0)."
|
|
||||||
#~ msgstr "Önyükleme cihazı ilk cihaz olmalı (arayüz #0)."
|
|
||||||
|
|
||||||
#~ msgid "Both buttons were pressed at start up.\n"
|
|
||||||
#~ msgstr "Başlatma sırasında her iki düğmeye de basıldı.\n"
|
|
||||||
|
|
||||||
#~ msgid "Button A was pressed at start up.\n"
|
|
||||||
#~ msgstr "Başlatma sırasında A düğmesine basıldı.\n"
|
|
||||||
|
|
||||||
#~ msgid "Invalid memory access."
|
|
||||||
#~ msgstr "Geçersiz bellek erişimi."
|
|
||||||
|
|
||||||
#~ msgid "%q must be of type %q"
|
|
||||||
#~ msgstr "%q, %q türünde olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "%q must be of type %q or None"
|
|
||||||
#~ msgstr "%q, %q ya da None türünde olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "Expected a %q"
|
|
||||||
#~ msgstr "%q bekleniyor"
|
|
||||||
|
|
||||||
#~ msgid "Expected a %q or %q"
|
|
||||||
#~ msgstr "%q yada %q bekleniyor"
|
|
||||||
|
|
||||||
#~ msgid "Expected an %q"
|
|
||||||
#~ msgstr "%q bekleniyor"
|
|
||||||
|
|
||||||
#, c-format
|
|
||||||
#~ msgid "IV must be %d bytes long"
|
|
||||||
#~ msgstr "IV %d bayt uzunluğunda olmalı"
|
|
||||||
|
|
||||||
#~ msgid "%q length must be >= 1"
|
|
||||||
#~ msgstr "%q boyutu >=1 olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "%q must be a string"
|
|
||||||
#~ msgstr "%q bir string olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "%q must be an int"
|
|
||||||
#~ msgstr "%q bir tam sayı olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "%q with a report ID of 0 must be of length 1"
|
|
||||||
#~ msgstr "Rapor kimliği 0 olan %q, 1 uzunluğunda olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "At most %d %q may be specified (not %d)"
|
|
||||||
#~ msgstr "En az %d %q belirtilmeli (%d değil)"
|
|
||||||
|
|
||||||
#~ msgid "%q must be >= 0"
|
|
||||||
#~ msgstr "%q >= 0 olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "%q must be >= 1"
|
|
||||||
#~ msgstr "%q >= 1 olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "All I2C targets are in use"
|
|
||||||
#~ msgstr "Tüm I2C hedefleri kullanımda"
|
|
||||||
|
|
||||||
#~ msgid "%q must be a tuple of length 2"
|
|
||||||
#~ msgstr "%q, boyutu 2 olan bir tuple olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "%q must be between %d and %d"
|
|
||||||
#~ msgstr "%q, %d ile %d arasında olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "%q should be an int"
|
|
||||||
#~ msgstr "%q bir int olmalıdır"
|
|
||||||
|
|
||||||
#~ msgid "(x,y) integers required"
|
|
||||||
#~ msgstr "(x, y) integerları gereklidir"
|
|
||||||
|
|
||||||
#~ msgid "Address type out of range"
|
|
||||||
#~ msgstr "Adres tipi beklenen aralığın dışında"
|
|
||||||
|
|
||||||
#~ msgid "AnalogIn not supported on given pin"
|
|
||||||
#~ msgstr "Verilen pin için AnalogIn desteklenmemektedir"
|
|
||||||
|
|
||||||
#~ msgid "AnalogOut functionality not supported"
|
|
||||||
#~ msgstr "AnalogOut işlevi desteklenmemektedir"
|
|
||||||
|
|
||||||
#~ msgid "AnalogOut is only 16 bits. Value must be less than 65536."
|
|
||||||
#~ msgstr "AnalogOut yalnızca 16 bitlik. Değer 65536'dan küçük olmalıdır."
|
|
||||||
|
|
||||||
#~ msgid "AnalogOut not supported on given pin"
|
|
||||||
#~ msgstr "Verilen pin için AnalogOut desteklenmemektedir"
|
|
||||||
|
|
||||||
#, c-format
|
|
||||||
#~ msgid "Bit depth must be from 1 to 6 inclusive, not %d"
|
|
||||||
#~ msgstr "Bit derinliği 1-6 aralığında olmalı, %d değil"
|
|
||||||
|
|
||||||
#, c-format
|
|
||||||
#~ msgid "Buffer incorrect size. Should be %d bytes."
|
|
||||||
#~ msgstr "Geçersiz arabellek boyutu. %d kadar olmalı"
|
|
||||||
|
|
||||||
#~ msgid "Buffer must be at least length 1"
|
|
||||||
#~ msgstr "Arabellek boyutu en az 1 olmalı"
|
|
||||||
|
|
||||||
#~ msgid "Bytes must be between 0 and 255."
|
|
||||||
#~ msgstr "Baytlar 0-255 aralığında olmalı"
|
|
||||||
|
|
||||||
#~ msgid ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Code stopped by auto-reload.\n"
|
|
||||||
#~ msgstr ""
|
|
||||||
#~ "\n"
|
|
||||||
#~ "Program otomatik yeniden yükleme tarafından sonlandırıldı.\n"
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
29
ports/espressif/boards/firebeetle2_esp32s3/board.c
Normal file
29
ports/espressif/boards/firebeetle2_esp32s3/board.c
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the MicroPython project, http://micropython.org/
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2023 Bill Sideris, independently providing these changes.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "supervisor/board.h"
|
||||||
|
|
||||||
|
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.
|
45
ports/espressif/boards/firebeetle2_esp32s3/mpconfigboard.h
Normal file
45
ports/espressif/boards/firebeetle2_esp32s3/mpconfigboard.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the MicroPython project, http://micropython.org/
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2023 Bill Sideris, independently providing these changes.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MICROPY_HW_BOARD_NAME "DFRobot FireBeetle 2 ESP32-S3"
|
||||||
|
#define MICROPY_HW_MCU_NAME "ESP32S3"
|
||||||
|
|
||||||
|
#define CIRCUITPY_BOARD_I2C (2)
|
||||||
|
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO2, .sda = &pin_GPIO3}, \
|
||||||
|
{.scl = &pin_GPIO2, .sda = &pin_GPIO1}}
|
||||||
|
|
||||||
|
#define DEFAULT_SPI_BUS_SCK (&pin_GPIO17)
|
||||||
|
#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO15)
|
||||||
|
#define DEFAULT_SPI_BUS_MISO (&pin_GPIO16)
|
||||||
|
|
||||||
|
#define MICROPY_HW_LED_STATUS (&pin_GPIO21)
|
||||||
|
|
||||||
|
#define DEFAULT_UART_BUS_RX (&pin_GPIO44)
|
||||||
|
#define DEFAULT_UART_BUS_TX (&pin_GPIO43)
|
||||||
|
|
||||||
|
#define DOUBLE_TAP_PIN (&pin_GPIO0)
|
||||||
|
|
||||||
|
#define CIRCUITPY_I2C_ALLOW_INTERNAL_PULL_UP (1)
|
16
ports/espressif/boards/firebeetle2_esp32s3/mpconfigboard.mk
Normal file
16
ports/espressif/boards/firebeetle2_esp32s3/mpconfigboard.mk
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
USB_VID = 0x3343
|
||||||
|
USB_PID = 0x83CF
|
||||||
|
USB_PRODUCT = "Firebeetle 2 ESP32-S3"
|
||||||
|
USB_MANUFACTURER = "DFRobot"
|
||||||
|
|
||||||
|
IDF_TARGET = esp32s3
|
||||||
|
|
||||||
|
CIRCUITPY_ESP_FLASH_MODE = qio
|
||||||
|
CIRCUITPY_ESP_FLASH_FREQ = 80m
|
||||||
|
CIRCUITPY_ESP_FLASH_SIZE = 16MB
|
||||||
|
|
||||||
|
CIRCUITPY_ESP_PSRAM_SIZE = 8MB
|
||||||
|
CIRCUITPY_ESP_PSRAM_MODE = opi
|
||||||
|
CIRCUITPY_ESP_PSRAM_FREQ = 120m
|
||||||
|
|
||||||
|
FROZEN_MPY_DIRS += $(TOP)/frozen/CircuitPython_AXP313A
|
121
ports/espressif/boards/firebeetle2_esp32s3/pins.c
Normal file
121
ports/espressif/boards/firebeetle2_esp32s3/pins.c
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
#include "py/objtuple.h"
|
||||||
|
#include "shared-bindings/board/__init__.h"
|
||||||
|
#include "shared-module/displayio/__init__.h"
|
||||||
|
|
||||||
|
CIRCUITPY_BOARD_BUS_SINGLETON(cam_i2c, i2c, 1) // Camera sensor
|
||||||
|
|
||||||
|
STATIC const mp_rom_obj_tuple_t camera_data_tuple = {
|
||||||
|
// The order matters.
|
||||||
|
// They must be ordered from low to high (Y2, Y3 .. Y9).
|
||||||
|
|
||||||
|
// Do not include any of the control pins in here.
|
||||||
|
{&mp_type_tuple},
|
||||||
|
8,
|
||||||
|
{
|
||||||
|
MP_ROM_PTR(&pin_GPIO39), // Y2
|
||||||
|
MP_ROM_PTR(&pin_GPIO40), // Y3
|
||||||
|
MP_ROM_PTR(&pin_GPIO41), // Y4
|
||||||
|
MP_ROM_PTR(&pin_GPIO4), // Y5
|
||||||
|
MP_ROM_PTR(&pin_GPIO7), // Y6
|
||||||
|
MP_ROM_PTR(&pin_GPIO8), // Y7
|
||||||
|
MP_ROM_PTR(&pin_GPIO46), // Y8
|
||||||
|
MP_ROM_PTR(&pin_GPIO48) // Y9
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
||||||
|
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
|
||||||
|
|
||||||
|
// Left header, module facing down.
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO17)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO15)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO16)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO2) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO3) },
|
||||||
|
|
||||||
|
// I2C cannot be used when CAM_I2C is in use.
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO0) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_BOOT), MP_ROM_PTR(&pin_GPIO0) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO9) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO18)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO7) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO38), MP_ROM_PTR(&pin_GPIO38)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO38)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO3) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TXD), MP_ROM_PTR(&pin_GPIO43)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_RXD), MP_ROM_PTR(&pin_GPIO44)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj)},
|
||||||
|
|
||||||
|
// Right header, module facing down.
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO47), MP_ROM_PTR(&pin_GPIO47)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_GPIO47)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_PWR), MP_ROM_PTR(&pin_GPIO47)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_GPIO11)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_GPIO10)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO8) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO6) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO5) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO21)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO21)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO12)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO13)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_GPIO14)},
|
||||||
|
|
||||||
|
// Camera data
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_CAM_DATA), MP_ROM_PTR(&camera_data_tuple)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_CAM_VSYNC), MP_ROM_PTR(&pin_GPIO6) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_CAM_HREF), MP_ROM_PTR(&pin_GPIO42)},
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_CAM_PCLK), MP_ROM_PTR(&pin_GPIO5) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_CAM_XCLK), MP_ROM_PTR(&pin_GPIO45)},
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_CAM_I2C), MP_ROM_PTR(&board_cam_i2c_obj)},
|
||||||
|
};
|
||||||
|
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
|
17
ports/espressif/boards/firebeetle2_esp32s3/sdkconfig
Normal file
17
ports/espressif/boards/firebeetle2_esp32s3/sdkconfig
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#
|
||||||
|
# Espressif IoT Development Framework Configuration
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Component config
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# LWIP
|
||||||
|
#
|
||||||
|
CONFIG_LWIP_LOCAL_HOSTNAME="espressif-esp32s3"
|
||||||
|
CONFIG_OV2640_SUPPORT=y
|
||||||
|
CONFIG_OV7725_SUPPORT=y
|
||||||
|
# end of LWIP
|
||||||
|
|
||||||
|
# end of Component config
|
||||||
|
|
||||||
|
# end of Espressif IoT Development Framework Configuration
|
@ -1,5 +1,5 @@
|
|||||||
USB_VID = 0x239A
|
USB_VID = 0x303A
|
||||||
USB_PID = 0x814A
|
USB_PID = 0x81BF
|
||||||
USB_PRODUCT = "MakerFabs-ESP32-S3-Parallel-TFT-With-Touch-7inch"
|
USB_PRODUCT = "MakerFabs-ESP32-S3-Parallel-TFT-With-Touch-7inch"
|
||||||
USB_MANUFACTURER = "MakerFabs"
|
USB_MANUFACTURER = "MakerFabs"
|
||||||
|
|
||||||
@ -14,3 +14,13 @@ CIRCUITPY_ESP_PSRAM_MODE = opi
|
|||||||
CIRCUITPY_ESP_PSRAM_FREQ = 80m
|
CIRCUITPY_ESP_PSRAM_FREQ = 80m
|
||||||
|
|
||||||
CIRCUITPY_DOTCLOCKFRAMEBUFFER = 1
|
CIRCUITPY_DOTCLOCKFRAMEBUFFER = 1
|
||||||
|
|
||||||
|
# To build with USB disabled allowing access to I2S pins
|
||||||
|
#CIRCUITPY_CREATOR_ID = 0x1A000000
|
||||||
|
#CIRCUITPY_CREATION_ID = 0x005381BF
|
||||||
|
#CIRCUITPY_USB=0
|
||||||
|
#CIRCUITPY_BUILD_EXTENSIONS = bin,uf2
|
||||||
|
#UF2_BOOTLOADER = 1
|
||||||
|
#CIRCUITPY_WIFI=1
|
||||||
|
#CIRCUITPY_WEB_WORKFLOW=1
|
||||||
|
#OPTIMIZATION_FLAGS = -Os
|
||||||
|
@ -67,20 +67,43 @@ STATIC const mp_rom_map_elem_t timings800_table[] = {
|
|||||||
};
|
};
|
||||||
MP_DEFINE_CONST_DICT(timings800_dict, timings800_table);
|
MP_DEFINE_CONST_DICT(timings800_dict, timings800_table);
|
||||||
|
|
||||||
|
STATIC const mp_rom_map_elem_t timings1024_table[] = {
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_INT(10000000) }, // nominal 16MHz, but display is unstable/tears at that frequency
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_width), MP_ROM_INT(1024) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_height), MP_ROM_INT(600) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_hsync_pulse_width), MP_ROM_INT(30) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_hsync_front_porch), MP_ROM_INT(210) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_hsync_back_porch), MP_ROM_INT(16) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_hsync_idle_low), MP_ROM_FALSE },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_vsync_pulse_width), MP_ROM_INT(13) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_vsync_front_porch), MP_ROM_INT(22) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_vsync_back_porch), MP_ROM_INT(10) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_vsync_idle_low), MP_ROM_FALSE },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_de_idle_high), MP_ROM_FALSE },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_pclk_active_high), MP_ROM_FALSE },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_pclk_idle_high), MP_ROM_FALSE },
|
||||||
|
};
|
||||||
|
MP_DEFINE_CONST_DICT(timings1024_dict, timings1024_table);
|
||||||
|
|
||||||
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
||||||
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
|
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
|
||||||
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_TFT_PINS), MP_ROM_PTR(&tft_pins_dict) },
|
{ MP_ROM_QSTR(MP_QSTR_TFT_PINS), MP_ROM_PTR(&tft_pins_dict) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_TFT_TIMINGS), MP_ROM_PTR(&timings800_dict) },
|
{ MP_ROM_QSTR(MP_QSTR_TFT_TIMINGS), MP_ROM_PTR(&timings800_dict) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TFT_TIMINGS800), MP_ROM_PTR(&timings800_dict) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TFT_TIMINGS1024), MP_ROM_PTR(&timings1024_dict) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_TFT_BACKLIGHT), MP_ROM_PTR(&pin_GPIO10) },
|
{ MP_ROM_QSTR(MP_QSTR_TFT_BACKLIGHT), MP_ROM_PTR(&pin_GPIO10) },
|
||||||
|
|
||||||
// GPIO pins available on Mabee connector port (also shared with I2S & USB D+/D-)
|
// GPIO pins available on Mabee connector port (also shared with I2S & USB D+/D-)
|
||||||
{ MP_ROM_QSTR(MP_QSTR_GPIO20), MP_ROM_PTR(&pin_GPIO20) },
|
{ MP_ROM_QSTR(MP_QSTR_GPIO20), MP_ROM_PTR(&pin_GPIO20) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_GPIO19), MP_ROM_PTR(&pin_GPIO19) },
|
{ MP_ROM_QSTR(MP_QSTR_GPIO19), MP_ROM_PTR(&pin_GPIO19) },
|
||||||
|
|
||||||
|
// I2S pins are shared with USB D+/D-, these are only useful if USB is disabled
|
||||||
|
#if CIRCUITPY_USB == 0
|
||||||
{ MP_ROM_QSTR(MP_QSTR_I2S_BIT_CLOCK), MP_ROM_PTR(&pin_GPIO20) },
|
{ MP_ROM_QSTR(MP_QSTR_I2S_BIT_CLOCK), MP_ROM_PTR(&pin_GPIO20) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_I2S_WORD_SELECT), MP_ROM_PTR(&pin_GPIO2) },
|
{ MP_ROM_QSTR(MP_QSTR_I2S_WORD_SELECT), MP_ROM_PTR(&pin_GPIO2) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_I2S_DATA), MP_ROM_PTR(&pin_GPIO19) },
|
{ MP_ROM_QSTR(MP_QSTR_I2S_DATA), MP_ROM_PTR(&pin_GPIO19) },
|
||||||
|
#endif
|
||||||
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) },
|
{ 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_RX), MP_ROM_PTR(&pin_GPIO44) },
|
||||||
@ -89,16 +112,16 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
|||||||
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO17) },
|
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO17) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_TOUCH_RESET), MP_ROM_PTR(&pin_GPIO38) },
|
{ MP_ROM_QSTR(MP_QSTR_TOUCH_RESET), MP_ROM_PTR(&pin_GPIO38) },
|
||||||
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_SDIO_CMD), MP_ROM_PTR(&pin_GPIO11) },
|
// IO10 <> SD_CS is cut at factory (non-placed resistor position R34) and pulled up.
|
||||||
{ MP_ROM_QSTR(MP_QSTR_SDIO_D0), MP_ROM_PTR(&pin_GPIO13) },
|
// Permanent SDIO 1-bit mode?
|
||||||
{ MP_ROM_QSTR(MP_QSTR_SDIO_CLK), MP_ROM_PTR(&pin_GPIO12) },
|
// Until SDIO 1-bit mode is support on Espressif ports these pins aren't useful
|
||||||
|
// { MP_ROM_QSTR(MP_QSTR_SDIO_CMD), MP_ROM_PTR(&pin_GPIO11) },
|
||||||
|
// { MP_ROM_QSTR(MP_QSTR_SDIO_D0), MP_ROM_PTR(&pin_GPIO13) },
|
||||||
|
// { MP_ROM_QSTR(MP_QSTR_SDIO_CLK), MP_ROM_PTR(&pin_GPIO12) },
|
||||||
|
|
||||||
// boot mode button can be used in SW as well
|
// boot mode button can be used in SW as well
|
||||||
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO1) },
|
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO1) },
|
||||||
|
|
||||||
// IO10 <> SD_CS is cut at factory (non-placed resistor position R34) and pulled up.
|
|
||||||
// Permanent SDIO 1-bit mode?
|
|
||||||
|
|
||||||
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
|
||||||
};
|
};
|
||||||
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
|
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
|
||||||
|
@ -284,15 +284,21 @@ STATIC void _new_connection(uint16_t conn_handle) {
|
|||||||
esp_ble_tx_power_set(conn_handle, ESP_PWR_LVL_N0);
|
esp_ble_tx_power_set(conn_handle, ESP_PWR_LVL_N0);
|
||||||
|
|
||||||
|
|
||||||
// Find an empty connection. One must always be available because the SD has the same
|
// Find an empty connection. One should always be available because the SD has the same
|
||||||
// total connection limit.
|
// total connection limit.
|
||||||
bleio_connection_internal_t *connection;
|
bleio_connection_internal_t *connection = NULL;
|
||||||
for (size_t i = 0; i < BLEIO_TOTAL_CONNECTION_COUNT; i++) {
|
for (size_t i = 0; i < BLEIO_TOTAL_CONNECTION_COUNT; i++) {
|
||||||
connection = &bleio_connections[i];
|
connection = &bleio_connections[i];
|
||||||
if (connection->conn_handle == BLEIO_HANDLE_INVALID) {
|
if (connection->conn_handle == BLEIO_HANDLE_INVALID) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Shouldn't happen, but just return if no connection available.
|
||||||
|
if (!connection) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
connection->conn_handle = conn_handle;
|
connection->conn_handle = conn_handle;
|
||||||
connection->connection_obj = mp_const_none;
|
connection->connection_obj = mp_const_none;
|
||||||
connection->pair_status = PAIR_NOT_PAIRED;
|
connection->pair_status = PAIR_NOT_PAIRED;
|
||||||
|
@ -50,7 +50,25 @@ void common_hal_bleio_characteristic_construct(bleio_characteristic_obj_t *self,
|
|||||||
self->props = props;
|
self->props = props;
|
||||||
self->read_perm = read_perm;
|
self->read_perm = read_perm;
|
||||||
self->write_perm = write_perm;
|
self->write_perm = write_perm;
|
||||||
common_hal_bleio_characteristic_set_value(self, initial_value_bufinfo);
|
|
||||||
|
if (initial_value_bufinfo != NULL) {
|
||||||
|
// Copy the initial value if it's on the heap. Otherwise it's internal and we may not be able
|
||||||
|
// to allocate.
|
||||||
|
self->current_value_len = initial_value_bufinfo->len;
|
||||||
|
if (gc_alloc_possible()) {
|
||||||
|
if (gc_nbytes(initial_value_bufinfo->buf) > 0) {
|
||||||
|
uint8_t *initial_value = m_malloc(self->current_value_len);
|
||||||
|
self->current_value_alloc = self->current_value_len;
|
||||||
|
memcpy(initial_value, initial_value_bufinfo->buf, self->current_value_len);
|
||||||
|
self->current_value = initial_value;
|
||||||
|
} else {
|
||||||
|
self->current_value_alloc = 0;
|
||||||
|
self->current_value = initial_value_bufinfo->buf;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
self->current_value = initial_value_bufinfo->buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (gc_alloc_possible()) {
|
if (gc_alloc_possible()) {
|
||||||
self->descriptor_list = mp_obj_new_list(0, NULL);
|
self->descriptor_list = mp_obj_new_list(0, NULL);
|
||||||
|
@ -63,7 +63,7 @@ int bleio_connection_event_cb(struct ble_gap_event *event, void *connection_in)
|
|||||||
connection->pair_status = PAIR_NOT_PAIRED;
|
connection->pair_status = PAIR_NOT_PAIRED;
|
||||||
|
|
||||||
#if CIRCUITPY_VERBOSE_BLE
|
#if CIRCUITPY_VERBOSE_BLE
|
||||||
mp_printf(&mp_plat_print, "disconnected %02x\n", event->disconnect.reason);
|
mp_printf(&mp_plat_print, "event->disconnect.reason: 0x%x\n", event->disconnect.reason);
|
||||||
#endif
|
#endif
|
||||||
if (connection->connection_obj != mp_const_none) {
|
if (connection->connection_obj != mp_const_none) {
|
||||||
bleio_connection_obj_t *obj = connection->connection_obj;
|
bleio_connection_obj_t *obj = connection->connection_obj;
|
||||||
@ -128,6 +128,7 @@ bool common_hal_bleio_connection_get_connected(bleio_connection_obj_t *self) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_bleio_connection_disconnect(bleio_connection_internal_t *self) {
|
void common_hal_bleio_connection_disconnect(bleio_connection_internal_t *self) {
|
||||||
|
// Second argument is an HCI reason, not an HS error code.
|
||||||
ble_gap_terminate(self->conn_handle, BLE_ERR_REM_USER_CONN_TERM);
|
ble_gap_terminate(self->conn_handle, BLE_ERR_REM_USER_CONN_TERM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,9 +163,9 @@ STATIC int _discovered_service_cb(uint16_t conn_handle,
|
|||||||
void *arg) {
|
void *arg) {
|
||||||
bleio_connection_internal_t *self = (bleio_connection_internal_t *)arg;
|
bleio_connection_internal_t *self = (bleio_connection_internal_t *)arg;
|
||||||
|
|
||||||
if (error->status != BLE_ERR_SUCCESS) {
|
if (error->status != 0) {
|
||||||
// Keep the first error in case it's due to memory.
|
// Keep the first error in case it's due to memory.
|
||||||
if (_last_discovery_status == BLE_ERR_SUCCESS) {
|
if (_last_discovery_status == 0) {
|
||||||
_last_discovery_status = error->status;
|
_last_discovery_status = error->status;
|
||||||
xTaskNotifyGive(discovery_task);
|
xTaskNotifyGive(discovery_task);
|
||||||
}
|
}
|
||||||
@ -173,7 +174,7 @@ STATIC int _discovered_service_cb(uint16_t conn_handle,
|
|||||||
|
|
||||||
// If any of these memory allocations fail, we set _last_discovery_status
|
// If any of these memory allocations fail, we set _last_discovery_status
|
||||||
// and let the process continue.
|
// and let the process continue.
|
||||||
if (_last_discovery_status != BLE_ERR_SUCCESS) {
|
if (_last_discovery_status != 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
bleio_service_obj_t *service = mp_obj_malloc(bleio_service_obj_t, &bleio_service_type);
|
bleio_service_obj_t *service = mp_obj_malloc(bleio_service_obj_t, &bleio_service_type);
|
||||||
@ -202,16 +203,17 @@ STATIC int _discovered_characteristic_cb(uint16_t conn_handle,
|
|||||||
void *arg) {
|
void *arg) {
|
||||||
bleio_service_obj_t *service = (bleio_service_obj_t *)arg;
|
bleio_service_obj_t *service = (bleio_service_obj_t *)arg;
|
||||||
|
|
||||||
if (error->status != BLE_ERR_SUCCESS) {
|
if (error->status != 0) {
|
||||||
// Keep the first error in case it's due to memory.
|
// Keep the first error in case it's due to memory.
|
||||||
if (_last_discovery_status == BLE_ERR_SUCCESS) {
|
if (_last_discovery_status == 0) {
|
||||||
_last_discovery_status = error->status;
|
_last_discovery_status = error->status;
|
||||||
xTaskNotifyGive(discovery_task);
|
xTaskNotifyGive(discovery_task);
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
// If any of these memory allocations fail, we set _last_discovery_status
|
// If any of these memory allocations fail, we set _last_discovery_status
|
||||||
// and let the process continue.
|
// and let the process continue.
|
||||||
if (_last_discovery_status != BLE_ERR_SUCCESS) {
|
if (_last_discovery_status != 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,11 +234,14 @@ STATIC int _discovered_characteristic_cb(uint16_t conn_handle,
|
|||||||
((chr->properties & BLE_GATT_CHR_PROP_WRITE_NO_RSP) != 0 ? CHAR_PROP_WRITE_NO_RESPONSE : 0);
|
((chr->properties & BLE_GATT_CHR_PROP_WRITE_NO_RSP) != 0 ? CHAR_PROP_WRITE_NO_RESPONSE : 0);
|
||||||
|
|
||||||
// Call common_hal_bleio_characteristic_construct() to initialize some fields and set up evt handler.
|
// Call common_hal_bleio_characteristic_construct() to initialize some fields and set up evt handler.
|
||||||
|
mp_buffer_info_t mp_const_empty_bytes_bufinfo;
|
||||||
|
mp_get_buffer_raise(mp_const_empty_bytes, &mp_const_empty_bytes_bufinfo, MP_BUFFER_READ);
|
||||||
|
|
||||||
common_hal_bleio_characteristic_construct(
|
common_hal_bleio_characteristic_construct(
|
||||||
characteristic, service, chr->val_handle, uuid,
|
characteristic, service, chr->val_handle, uuid,
|
||||||
props, SECURITY_MODE_OPEN, SECURITY_MODE_OPEN,
|
props, SECURITY_MODE_OPEN, SECURITY_MODE_OPEN,
|
||||||
0, false, // max_length, fixed_length: values don't matter for gattc
|
0, false, // max_length, fixed_length: values don't matter for gattc
|
||||||
mp_const_empty_bytes,
|
&mp_const_empty_bytes_bufinfo,
|
||||||
NULL);
|
NULL);
|
||||||
// Set def_handle directly since it is only used in discovery.
|
// Set def_handle directly since it is only used in discovery.
|
||||||
characteristic->def_handle = chr->def_handle;
|
characteristic->def_handle = chr->def_handle;
|
||||||
@ -253,16 +258,17 @@ STATIC int _discovered_descriptor_cb(uint16_t conn_handle,
|
|||||||
void *arg) {
|
void *arg) {
|
||||||
bleio_characteristic_obj_t *characteristic = (bleio_characteristic_obj_t *)arg;
|
bleio_characteristic_obj_t *characteristic = (bleio_characteristic_obj_t *)arg;
|
||||||
|
|
||||||
if (error->status != BLE_ERR_SUCCESS) {
|
if (error->status != 0) {
|
||||||
// Keep the first error in case it's due to memory.
|
// Keep the first error in case it's due to memory.
|
||||||
if (_last_discovery_status == BLE_ERR_SUCCESS) {
|
if (_last_discovery_status == 0) {
|
||||||
_last_discovery_status = error->status;
|
_last_discovery_status = error->status;
|
||||||
}
|
}
|
||||||
xTaskNotifyGive(discovery_task);
|
xTaskNotifyGive(discovery_task);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
// If any of these memory allocations fail, we set _last_discovery_status
|
// If any of these memory allocations fail, we set _last_discovery_status
|
||||||
// and let the process continue.
|
// and let the process continue.
|
||||||
if (_last_discovery_status != BLE_ERR_SUCCESS) {
|
if (_last_discovery_status != 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -306,7 +312,7 @@ STATIC void discover_remote_services(bleio_connection_internal_t *self, mp_obj_t
|
|||||||
|
|
||||||
discovery_task = xTaskGetCurrentTaskHandle();
|
discovery_task = xTaskGetCurrentTaskHandle();
|
||||||
if (service_uuids_whitelist == mp_const_none) {
|
if (service_uuids_whitelist == mp_const_none) {
|
||||||
_last_discovery_status = BLE_ERR_SUCCESS;
|
_last_discovery_status = 0;
|
||||||
CHECK_NIMBLE_ERROR(ble_gattc_disc_all_svcs(self->conn_handle, _discovered_service_cb, self));
|
CHECK_NIMBLE_ERROR(ble_gattc_disc_all_svcs(self->conn_handle, _discovered_service_cb, self));
|
||||||
|
|
||||||
// Wait for sync.
|
// Wait for sync.
|
||||||
@ -324,7 +330,7 @@ STATIC void discover_remote_services(bleio_connection_internal_t *self, mp_obj_t
|
|||||||
}
|
}
|
||||||
bleio_uuid_obj_t *uuid = MP_OBJ_TO_PTR(uuid_obj);
|
bleio_uuid_obj_t *uuid = MP_OBJ_TO_PTR(uuid_obj);
|
||||||
|
|
||||||
_last_discovery_status = BLE_ERR_SUCCESS;
|
_last_discovery_status = 0;
|
||||||
// Make sure we start with a clean notification state
|
// Make sure we start with a clean notification state
|
||||||
ulTaskNotifyValueClear(discovery_task, 0xffffffff);
|
ulTaskNotifyValueClear(discovery_task, 0xffffffff);
|
||||||
CHECK_NIMBLE_ERROR(ble_gattc_disc_svc_by_uuid(self->conn_handle, &uuid->nimble_ble_uuid.u,
|
CHECK_NIMBLE_ERROR(ble_gattc_disc_svc_by_uuid(self->conn_handle, &uuid->nimble_ble_uuid.u,
|
||||||
@ -340,7 +346,7 @@ STATIC void discover_remote_services(bleio_connection_internal_t *self, mp_obj_t
|
|||||||
for (size_t i = 0; i < self->remote_service_list->len; i++) {
|
for (size_t i = 0; i < self->remote_service_list->len; i++) {
|
||||||
bleio_service_obj_t *service = MP_OBJ_TO_PTR(self->remote_service_list->items[i]);
|
bleio_service_obj_t *service = MP_OBJ_TO_PTR(self->remote_service_list->items[i]);
|
||||||
|
|
||||||
_last_discovery_status = BLE_ERR_SUCCESS;
|
_last_discovery_status = 0;
|
||||||
CHECK_NIMBLE_ERROR(ble_gattc_disc_all_chrs(self->conn_handle,
|
CHECK_NIMBLE_ERROR(ble_gattc_disc_all_chrs(self->conn_handle,
|
||||||
service->start_handle,
|
service->start_handle,
|
||||||
service->end_handle,
|
service->end_handle,
|
||||||
@ -375,7 +381,7 @@ STATIC void discover_remote_services(bleio_connection_internal_t *self, mp_obj_t
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
_last_discovery_status = BLE_ERR_SUCCESS;
|
_last_discovery_status = 0;
|
||||||
CHECK_NIMBLE_ERROR(ble_gattc_disc_all_dscs(self->conn_handle, characteristic->handle,
|
CHECK_NIMBLE_ERROR(ble_gattc_disc_all_dscs(self->conn_handle, characteristic->handle,
|
||||||
end_handle,
|
end_handle,
|
||||||
_discovered_descriptor_cb, characteristic));
|
_discovered_descriptor_cb, characteristic));
|
||||||
|
@ -112,7 +112,8 @@ void check_nimble_error(int rc, const char *file, size_t line) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void check_ble_error(int error_code, const char *file, size_t line) {
|
void check_ble_error(int error_code, const char *file, size_t line) {
|
||||||
if (error_code == BLE_ERR_SUCCESS) {
|
// 0 means success. For BLE_HS_* codes, there is no defined "SUCCESS" value.
|
||||||
|
if (error_code == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (error_code) {
|
switch (error_code) {
|
||||||
|
@ -173,12 +173,15 @@ static const uint64_t pin_mask_reset_forbidden =
|
|||||||
GPIO_SEL_23 |
|
GPIO_SEL_23 |
|
||||||
GPIO_SEL_24 |
|
GPIO_SEL_24 |
|
||||||
#endif
|
#endif
|
||||||
#endif // ESP32C6
|
#endif // ESP32H2
|
||||||
|
|
||||||
#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
|
#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
|
||||||
// Never ever reset pins used to communicate with SPI flash and PSRAM.
|
#if CIRCUITPY_USB
|
||||||
|
// Never ever reset USB pins.
|
||||||
GPIO_SEL_19 | // USB D-
|
GPIO_SEL_19 | // USB D-
|
||||||
GPIO_SEL_20 | // USB D+
|
GPIO_SEL_20 | // USB D+
|
||||||
|
#endif
|
||||||
|
// Never ever reset pins used to communicate with SPI flash and PSRAM.
|
||||||
#if defined(CONFIG_ESP32_SPIRAM_SUPPORT) || defined(CONFIG_ESP32S2_SPIRAM_SUPPORT) || defined(CONFIG_ESP32S3_SPIRAM_SUPPORT)
|
#if defined(CONFIG_ESP32_SPIRAM_SUPPORT) || defined(CONFIG_ESP32S2_SPIRAM_SUPPORT) || defined(CONFIG_ESP32S3_SPIRAM_SUPPORT)
|
||||||
// Note ESP32-C3 does not have SPIRAM support.
|
// Note ESP32-C3 does not have SPIRAM support.
|
||||||
// Board uses PSRAM, and needs another chip select.
|
// Board uses PSRAM, and needs another chip select.
|
||||||
@ -198,11 +201,6 @@ static const uint64_t pin_mask_reset_forbidden =
|
|||||||
GPIO_SEL_36 | // SPIIO7
|
GPIO_SEL_36 | // SPIIO7
|
||||||
GPIO_SEL_37 | // SPIDQS
|
GPIO_SEL_37 | // SPIDQS
|
||||||
#endif
|
#endif
|
||||||
#if CIRCUITPY_USB
|
|
||||||
// Never ever reset USB pins.
|
|
||||||
GPIO_SEL_19 | // USB D-
|
|
||||||
GPIO_SEL_20 | // USB D+
|
|
||||||
#endif
|
|
||||||
#if defined(CONFIG_ESP_CONSOLE_UART_DEFAULT) && CONFIG_ESP_CONSOLE_UART_DEFAULT && CONFIG_ESP_CONSOLE_UART_NUM == 0
|
#if defined(CONFIG_ESP_CONSOLE_UART_DEFAULT) && CONFIG_ESP_CONSOLE_UART_DEFAULT && CONFIG_ESP_CONSOLE_UART_NUM == 0
|
||||||
// Don't reset/use the IDF UART console.
|
// Don't reset/use the IDF UART console.
|
||||||
GPIO_SEL_43 | // UART TX
|
GPIO_SEL_43 | // UART TX
|
||||||
|
@ -28,6 +28,9 @@
|
|||||||
#ifndef MICROPY_INCLUDED_ESPRESSIF_MPCONFIGPORT_H
|
#ifndef MICROPY_INCLUDED_ESPRESSIF_MPCONFIGPORT_H
|
||||||
#define MICROPY_INCLUDED_ESPRESSIF_MPCONFIGPORT_H
|
#define MICROPY_INCLUDED_ESPRESSIF_MPCONFIGPORT_H
|
||||||
|
|
||||||
|
// Enable for debugging.
|
||||||
|
// #define CIRCUITPY_VERBOSE_BLE (1)
|
||||||
|
|
||||||
#define MICROPY_NLR_THUMB (0)
|
#define MICROPY_NLR_THUMB (0)
|
||||||
|
|
||||||
#define MICROPY_USE_INTERNAL_PRINTF (0)
|
#define MICROPY_USE_INTERNAL_PRINTF (0)
|
||||||
|
@ -54,6 +54,34 @@
|
|||||||
#include "genhdr/mpversion.h"
|
#include "genhdr/mpversion.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
|
|
||||||
|
#if defined(MICROPY_UNIX_COVERAGE) // CIRCUITPY-CHANGE
|
||||||
|
#include "py/objstr.h"
|
||||||
|
typedef int os_getenv_err_t;
|
||||||
|
mp_obj_t common_hal_os_getenv(const char *key, mp_obj_t default_);
|
||||||
|
os_getenv_err_t common_hal_os_getenv_str(const char *key, char *value, size_t value_len);
|
||||||
|
os_getenv_err_t common_hal_os_getenv_int(const char *key, mp_int_t *value);
|
||||||
|
|
||||||
|
STATIC mp_obj_t mod_os_getenv_int(mp_obj_t var_in) {
|
||||||
|
mp_int_t value;
|
||||||
|
os_getenv_err_t result = common_hal_os_getenv_int(mp_obj_str_get_str(var_in), &value);
|
||||||
|
if (result == 0) {
|
||||||
|
return mp_obj_new_int(value);
|
||||||
|
}
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_1(mod_os_getenv_int_obj, mod_os_getenv_int);
|
||||||
|
|
||||||
|
STATIC mp_obj_t mod_os_getenv_str(mp_obj_t var_in) {
|
||||||
|
char buf[4096];
|
||||||
|
os_getenv_err_t result = common_hal_os_getenv_str(mp_obj_str_get_str(var_in), buf, sizeof(buf));
|
||||||
|
if (result == 0) {
|
||||||
|
return mp_obj_new_str_copy(&mp_type_str, (byte *)buf, strlen(buf));
|
||||||
|
}
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_1(mod_os_getenv_str_obj, mod_os_getenv_str);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Command line options, with their defaults
|
// Command line options, with their defaults
|
||||||
STATIC bool compile_only = false;
|
STATIC bool compile_only = false;
|
||||||
STATIC uint emit_opt = MP_EMIT_OPT_NONE;
|
STATIC uint emit_opt = MP_EMIT_OPT_NONE;
|
||||||
@ -596,6 +624,8 @@ MP_NOINLINE int main_(int argc, char **argv) {
|
|||||||
// CIRCUITPY-CHANGE: test native base classes work as needed by CircuitPython libraries.
|
// CIRCUITPY-CHANGE: test native base classes work as needed by CircuitPython libraries.
|
||||||
extern const mp_obj_type_t native_base_class_type;
|
extern const mp_obj_type_t native_base_class_type;
|
||||||
mp_store_global(MP_QSTR_NativeBaseClass, MP_OBJ_FROM_PTR(&native_base_class_type));
|
mp_store_global(MP_QSTR_NativeBaseClass, MP_OBJ_FROM_PTR(&native_base_class_type));
|
||||||
|
mp_store_global(MP_QSTR_getenv_int, MP_OBJ_FROM_PTR(&mod_os_getenv_int_obj));
|
||||||
|
mp_store_global(MP_QSTR_getenv_str, MP_OBJ_FROM_PTR(&mod_os_getenv_str_obj));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -470,7 +470,9 @@ void background_callback_run_all(void);
|
|||||||
#error "boot counter requires CIRCUITPY_NVM enabled"
|
#error "boot counter requires CIRCUITPY_NVM enabled"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CIRCUITPY_VERBOSE_BLE
|
||||||
#define CIRCUITPY_VERBOSE_BLE 0
|
#define CIRCUITPY_VERBOSE_BLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
// Display the Blinka logo in the REPL on displayio displays.
|
// Display the Blinka logo in the REPL on displayio displays.
|
||||||
#ifndef CIRCUITPY_REPL_LOGO
|
#ifndef CIRCUITPY_REPL_LOGO
|
||||||
|
@ -353,7 +353,8 @@ STATIC mp_obj_t bleio_adapter_start_scan(size_t n_args, const mp_obj_t *pos_args
|
|||||||
prefix_bufinfo.len = 0;
|
prefix_bufinfo.len = 0;
|
||||||
if (args[ARG_prefixes].u_obj != MP_OBJ_NULL) {
|
if (args[ARG_prefixes].u_obj != MP_OBJ_NULL) {
|
||||||
mp_get_buffer_raise(args[ARG_prefixes].u_obj, &prefix_bufinfo, MP_BUFFER_READ);
|
mp_get_buffer_raise(args[ARG_prefixes].u_obj, &prefix_bufinfo, MP_BUFFER_READ);
|
||||||
if (gc_nbytes(prefix_bufinfo.buf) == 0) {
|
// An empty buffer may not be on the heap, but that doesn't matter.
|
||||||
|
if (prefix_bufinfo.len > 0 && gc_nbytes(prefix_bufinfo.buf) == 0) {
|
||||||
mp_raise_ValueError(MP_ERROR_TEXT("Prefix buffer must be on the heap"));
|
mp_raise_ValueError(MP_ERROR_TEXT("Prefix buffer must be on the heap"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,11 +40,15 @@ static const mp_arg_t note_properties[] = {
|
|||||||
{ MP_QSTR_amplitude, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_INT(1) } },
|
{ MP_QSTR_amplitude, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_INT(1) } },
|
||||||
{ MP_QSTR_bend, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_INT(0) } },
|
{ MP_QSTR_bend, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_INT(0) } },
|
||||||
{ MP_QSTR_waveform, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } },
|
{ MP_QSTR_waveform, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } },
|
||||||
|
{ MP_QSTR_waveform_loop_start, MP_ARG_OBJ, {.u_obj = MP_ROM_INT(0) } },
|
||||||
|
{ MP_QSTR_waveform_loop_end, MP_ARG_OBJ, {.u_obj = MP_ROM_INT(SYNTHIO_WAVEFORM_SIZE) } },
|
||||||
{ MP_QSTR_envelope, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } },
|
{ MP_QSTR_envelope, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } },
|
||||||
{ MP_QSTR_filter, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } },
|
{ MP_QSTR_filter, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } },
|
||||||
{ MP_QSTR_ring_frequency, MP_ARG_OBJ, {.u_obj = MP_ROM_INT(0) } },
|
{ MP_QSTR_ring_frequency, MP_ARG_OBJ, {.u_obj = MP_ROM_INT(0) } },
|
||||||
{ MP_QSTR_ring_bend, MP_ARG_OBJ, {.u_obj = MP_ROM_INT(0) } },
|
{ MP_QSTR_ring_bend, MP_ARG_OBJ, {.u_obj = MP_ROM_INT(0) } },
|
||||||
{ MP_QSTR_ring_waveform, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } },
|
{ MP_QSTR_ring_waveform, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } },
|
||||||
|
{ MP_QSTR_ring_waveform_loop_start, MP_ARG_OBJ, {.u_obj = MP_ROM_INT(0) } },
|
||||||
|
{ MP_QSTR_ring_waveform_loop_end, MP_ARG_OBJ, {.u_obj = MP_ROM_INT(SYNTHIO_WAVEFORM_SIZE) } },
|
||||||
};
|
};
|
||||||
//| class Note:
|
//| class Note:
|
||||||
//| def __init__(
|
//| def __init__(
|
||||||
@ -53,6 +57,8 @@ static const mp_arg_t note_properties[] = {
|
|||||||
//| frequency: float,
|
//| frequency: float,
|
||||||
//| panning: BlockInput = 0.0,
|
//| panning: BlockInput = 0.0,
|
||||||
//| waveform: Optional[ReadableBuffer] = None,
|
//| waveform: Optional[ReadableBuffer] = None,
|
||||||
|
//| waveform_loop_start: int = 0,
|
||||||
|
//| waveform_loop_end: int = waveform_max_length,
|
||||||
//| envelope: Optional[Envelope] = None,
|
//| envelope: Optional[Envelope] = None,
|
||||||
//| amplitude: BlockInput = 0.0,
|
//| amplitude: BlockInput = 0.0,
|
||||||
//| bend: BlockInput = 0.0,
|
//| bend: BlockInput = 0.0,
|
||||||
@ -60,6 +66,8 @@ static const mp_arg_t note_properties[] = {
|
|||||||
//| ring_frequency: float = 0.0,
|
//| ring_frequency: float = 0.0,
|
||||||
//| ring_bend: float = 0.0,
|
//| ring_bend: float = 0.0,
|
||||||
//| ring_waveform: Optional[ReadableBuffer] = 0.0,
|
//| ring_waveform: Optional[ReadableBuffer] = 0.0,
|
||||||
|
//| ring_waveform_loop_start: int = 0,
|
||||||
|
//| ring_waveform_loop_end: int = waveform_max_length,
|
||||||
//| ) -> None:
|
//| ) -> None:
|
||||||
//| """Construct a Note object, with a frequency in Hz, and optional panning, waveform, envelope, tremolo (volume change) and bend (frequency change).
|
//| """Construct a Note object, with a frequency in Hz, and optional panning, waveform, envelope, tremolo (volume change) and bend (frequency change).
|
||||||
//|
|
//|
|
||||||
@ -210,6 +218,53 @@ MP_PROPERTY_GETSET(synthio_note_waveform_obj,
|
|||||||
(mp_obj_t)&synthio_note_get_waveform_obj,
|
(mp_obj_t)&synthio_note_get_waveform_obj,
|
||||||
(mp_obj_t)&synthio_note_set_waveform_obj);
|
(mp_obj_t)&synthio_note_set_waveform_obj);
|
||||||
|
|
||||||
|
//| waveform_loop_start: int
|
||||||
|
//| """The sample index of where to begin looping waveform data.
|
||||||
|
//|
|
||||||
|
//| Values outside the range ``0`` to ``waveform_max_length-1`` (inclusive) are rejected with a `ValueError`.
|
||||||
|
//|
|
||||||
|
//| Values greater than or equal to the actual waveform length are treated as 0."""
|
||||||
|
STATIC mp_obj_t synthio_note_get_waveform_loop_start(mp_obj_t self_in) {
|
||||||
|
synthio_note_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
return mp_obj_new_int(common_hal_synthio_note_get_waveform_loop_start(self));
|
||||||
|
}
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_1(synthio_note_get_waveform_loop_start_obj, synthio_note_get_waveform_loop_start);
|
||||||
|
|
||||||
|
STATIC mp_obj_t synthio_note_set_waveform_loop_start(mp_obj_t self_in, mp_obj_t arg) {
|
||||||
|
synthio_note_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
common_hal_synthio_note_set_waveform_loop_start(self, mp_obj_get_int(arg));
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_2(synthio_note_set_waveform_loop_start_obj, synthio_note_set_waveform_loop_start);
|
||||||
|
MP_PROPERTY_GETSET(synthio_note_waveform_loop_start_obj,
|
||||||
|
(mp_obj_t)&synthio_note_get_waveform_loop_start_obj,
|
||||||
|
(mp_obj_t)&synthio_note_set_waveform_loop_start_obj);
|
||||||
|
|
||||||
|
//| waveform_loop_end: int
|
||||||
|
//| """The sample index of where to end looping waveform data.
|
||||||
|
//|
|
||||||
|
//| Values outside the range ``1`` to ``waveform_max_length`` (inclusive) are rejected with a `ValueError`.
|
||||||
|
//|
|
||||||
|
//| If the value is greater than the actual waveform length, or less than or equal to the loop start, the loop will occur at the end of the waveform.
|
||||||
|
//|
|
||||||
|
//| Use the `synthio.waveform_max_length` constant to set the loop point at the end of the wave form, no matter its length."""
|
||||||
|
//|
|
||||||
|
STATIC mp_obj_t synthio_note_get_waveform_loop_end(mp_obj_t self_in) {
|
||||||
|
synthio_note_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
return mp_obj_new_int(common_hal_synthio_note_get_waveform_loop_end(self));
|
||||||
|
}
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_1(synthio_note_get_waveform_loop_end_obj, synthio_note_get_waveform_loop_end);
|
||||||
|
|
||||||
|
STATIC mp_obj_t synthio_note_set_waveform_loop_end(mp_obj_t self_in, mp_obj_t arg) {
|
||||||
|
synthio_note_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
common_hal_synthio_note_set_waveform_loop_end(self, mp_obj_get_int(arg));
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_2(synthio_note_set_waveform_loop_end_obj, synthio_note_set_waveform_loop_end);
|
||||||
|
MP_PROPERTY_GETSET(synthio_note_waveform_loop_end_obj,
|
||||||
|
(mp_obj_t)&synthio_note_get_waveform_loop_end_obj,
|
||||||
|
(mp_obj_t)&synthio_note_set_waveform_loop_end_obj);
|
||||||
|
|
||||||
|
|
||||||
//| envelope: Envelope
|
//| envelope: Envelope
|
||||||
//| """The envelope of this note"""
|
//| """The envelope of this note"""
|
||||||
@ -296,6 +351,53 @@ MP_PROPERTY_GETSET(synthio_note_ring_waveform_obj,
|
|||||||
(mp_obj_t)&synthio_note_get_ring_waveform_obj,
|
(mp_obj_t)&synthio_note_get_ring_waveform_obj,
|
||||||
(mp_obj_t)&synthio_note_set_ring_waveform_obj);
|
(mp_obj_t)&synthio_note_set_ring_waveform_obj);
|
||||||
|
|
||||||
|
//| ring_waveform_loop_start: int
|
||||||
|
//| """The sample index of where to begin looping waveform data.
|
||||||
|
//|
|
||||||
|
//| Values outside the range ``0`` to ``waveform_max_length-1`` (inclusive) are rejected with a `ValueError`.
|
||||||
|
//|
|
||||||
|
//| Values greater than or equal to the actual waveform length are treated as 0."""
|
||||||
|
STATIC mp_obj_t synthio_note_get_ring_waveform_loop_start(mp_obj_t self_in) {
|
||||||
|
synthio_note_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
return mp_obj_new_int(common_hal_synthio_note_get_ring_waveform_loop_start(self));
|
||||||
|
}
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_1(synthio_note_get_ring_waveform_loop_start_obj, synthio_note_get_ring_waveform_loop_start);
|
||||||
|
|
||||||
|
STATIC mp_obj_t synthio_note_set_ring_waveform_loop_start(mp_obj_t self_in, mp_obj_t arg) {
|
||||||
|
synthio_note_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
common_hal_synthio_note_set_ring_waveform_loop_start(self, mp_obj_get_int(arg));
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_2(synthio_note_set_ring_waveform_loop_start_obj, synthio_note_set_ring_waveform_loop_start);
|
||||||
|
MP_PROPERTY_GETSET(synthio_note_ring_waveform_loop_start_obj,
|
||||||
|
(mp_obj_t)&synthio_note_get_ring_waveform_loop_start_obj,
|
||||||
|
(mp_obj_t)&synthio_note_set_ring_waveform_loop_start_obj);
|
||||||
|
|
||||||
|
//| ring_waveform_loop_end: int
|
||||||
|
//| """The sample index of where to end looping waveform data.
|
||||||
|
//|
|
||||||
|
//| Values outside the range ``1`` to ``waveform_max_length`` (inclusive) are rejected with a `ValueError`.
|
||||||
|
//|
|
||||||
|
//| If the value is greater than the actual waveform length, or less than or equal to the loop start, the loop will occur at the end of the waveform.
|
||||||
|
//|
|
||||||
|
//| Use the `synthio.waveform_max_length` constant to set the loop point at the end of the wave form, no matter its length."""
|
||||||
|
//|
|
||||||
|
STATIC mp_obj_t synthio_note_get_ring_waveform_loop_end(mp_obj_t self_in) {
|
||||||
|
synthio_note_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
return mp_obj_new_int(common_hal_synthio_note_get_ring_waveform_loop_end(self));
|
||||||
|
}
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_1(synthio_note_get_ring_waveform_loop_end_obj, synthio_note_get_ring_waveform_loop_end);
|
||||||
|
|
||||||
|
STATIC mp_obj_t synthio_note_set_ring_waveform_loop_end(mp_obj_t self_in, mp_obj_t arg) {
|
||||||
|
synthio_note_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
|
common_hal_synthio_note_set_ring_waveform_loop_end(self, mp_obj_get_int(arg));
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
MP_DEFINE_CONST_FUN_OBJ_2(synthio_note_set_ring_waveform_loop_end_obj, synthio_note_set_ring_waveform_loop_end);
|
||||||
|
MP_PROPERTY_GETSET(synthio_note_ring_waveform_loop_end_obj,
|
||||||
|
(mp_obj_t)&synthio_note_get_ring_waveform_loop_end_obj,
|
||||||
|
(mp_obj_t)&synthio_note_set_ring_waveform_loop_end_obj);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void note_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
|
static void note_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
|
||||||
@ -308,12 +410,16 @@ STATIC const mp_rom_map_elem_t synthio_note_locals_dict_table[] = {
|
|||||||
{ MP_ROM_QSTR(MP_QSTR_filter), MP_ROM_PTR(&synthio_note_filter_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_filter), MP_ROM_PTR(&synthio_note_filter_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_panning), MP_ROM_PTR(&synthio_note_panning_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_panning), MP_ROM_PTR(&synthio_note_panning_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_waveform), MP_ROM_PTR(&synthio_note_waveform_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_waveform), MP_ROM_PTR(&synthio_note_waveform_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_waveform_loop_start), MP_ROM_PTR(&synthio_note_waveform_loop_start_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_waveform_loop_end), MP_ROM_PTR(&synthio_note_waveform_loop_end_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_envelope), MP_ROM_PTR(&synthio_note_envelope_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_envelope), MP_ROM_PTR(&synthio_note_envelope_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_amplitude), MP_ROM_PTR(&synthio_note_amplitude_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_amplitude), MP_ROM_PTR(&synthio_note_amplitude_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_bend), MP_ROM_PTR(&synthio_note_bend_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_bend), MP_ROM_PTR(&synthio_note_bend_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_ring_frequency), MP_ROM_PTR(&synthio_note_ring_frequency_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_ring_frequency), MP_ROM_PTR(&synthio_note_ring_frequency_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_ring_bend), MP_ROM_PTR(&synthio_note_ring_bend_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_ring_bend), MP_ROM_PTR(&synthio_note_ring_bend_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_ring_waveform), MP_ROM_PTR(&synthio_note_ring_waveform_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_ring_waveform), MP_ROM_PTR(&synthio_note_ring_waveform_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_ring_waveform_loop_start), MP_ROM_PTR(&synthio_note_ring_waveform_loop_start_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_ring_waveform_loop_end), MP_ROM_PTR(&synthio_note_ring_waveform_loop_end_obj) },
|
||||||
};
|
};
|
||||||
STATIC MP_DEFINE_CONST_DICT(synthio_note_locals_dict, synthio_note_locals_dict_table);
|
STATIC MP_DEFINE_CONST_DICT(synthio_note_locals_dict, synthio_note_locals_dict_table);
|
||||||
|
|
||||||
|
@ -24,6 +24,12 @@ void common_hal_synthio_note_set_bend(synthio_note_obj_t *self, mp_obj_t value);
|
|||||||
mp_obj_t common_hal_synthio_note_get_waveform_obj(synthio_note_obj_t *self);
|
mp_obj_t common_hal_synthio_note_get_waveform_obj(synthio_note_obj_t *self);
|
||||||
void common_hal_synthio_note_set_waveform(synthio_note_obj_t *self, mp_obj_t value);
|
void common_hal_synthio_note_set_waveform(synthio_note_obj_t *self, mp_obj_t value);
|
||||||
|
|
||||||
|
mp_int_t common_hal_synthio_note_get_waveform_loop_start(synthio_note_obj_t *self);
|
||||||
|
void common_hal_synthio_note_set_waveform_loop_start(synthio_note_obj_t *self, mp_int_t value_in);
|
||||||
|
|
||||||
|
mp_int_t common_hal_synthio_note_get_waveform_loop_end(synthio_note_obj_t *self);
|
||||||
|
void common_hal_synthio_note_set_waveform_loop_end(synthio_note_obj_t *self, mp_int_t value_in);
|
||||||
|
|
||||||
mp_float_t common_hal_synthio_note_get_ring_frequency(synthio_note_obj_t *self);
|
mp_float_t common_hal_synthio_note_get_ring_frequency(synthio_note_obj_t *self);
|
||||||
void common_hal_synthio_note_set_ring_frequency(synthio_note_obj_t *self, mp_float_t value);
|
void common_hal_synthio_note_set_ring_frequency(synthio_note_obj_t *self, mp_float_t value);
|
||||||
|
|
||||||
@ -33,5 +39,11 @@ void common_hal_synthio_note_set_ring_bend(synthio_note_obj_t *self, mp_obj_t va
|
|||||||
mp_obj_t common_hal_synthio_note_get_ring_waveform_obj(synthio_note_obj_t *self);
|
mp_obj_t common_hal_synthio_note_get_ring_waveform_obj(synthio_note_obj_t *self);
|
||||||
void common_hal_synthio_note_set_ring_waveform(synthio_note_obj_t *self, mp_obj_t value);
|
void common_hal_synthio_note_set_ring_waveform(synthio_note_obj_t *self, mp_obj_t value);
|
||||||
|
|
||||||
|
mp_int_t common_hal_synthio_note_get_ring_waveform_loop_start(synthio_note_obj_t *self);
|
||||||
|
void common_hal_synthio_note_set_ring_waveform_loop_start(synthio_note_obj_t *self, mp_int_t value_in);
|
||||||
|
|
||||||
|
mp_int_t common_hal_synthio_note_get_ring_waveform_loop_end(synthio_note_obj_t *self);
|
||||||
|
void common_hal_synthio_note_set_ring_waveform_loop_end(synthio_note_obj_t *self, mp_int_t value_in);
|
||||||
|
|
||||||
mp_obj_t common_hal_synthio_note_get_envelope_obj(synthio_note_obj_t *self);
|
mp_obj_t common_hal_synthio_note_get_envelope_obj(synthio_note_obj_t *self);
|
||||||
void common_hal_synthio_note_set_envelope(synthio_note_obj_t *self, mp_obj_t value);
|
void common_hal_synthio_note_set_envelope(synthio_note_obj_t *self, mp_obj_t value);
|
||||||
|
@ -304,6 +304,11 @@ STATIC mp_obj_t voct_to_hz(mp_obj_t arg) {
|
|||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_1(synthio_voct_to_hz_obj, voct_to_hz);
|
MP_DEFINE_CONST_FUN_OBJ_1(synthio_voct_to_hz_obj, voct_to_hz);
|
||||||
|
|
||||||
|
//|
|
||||||
|
//| waveform_max_length: int
|
||||||
|
//| """The maximum number of samples permitted in a waveform"""
|
||||||
|
//|
|
||||||
|
|
||||||
#if CIRCUITPY_AUDIOCORE_DEBUG
|
#if CIRCUITPY_AUDIOCORE_DEBUG
|
||||||
STATIC mp_obj_t synthio_lfo_tick(size_t n, const mp_obj_t *args) {
|
STATIC mp_obj_t synthio_lfo_tick(size_t n, const mp_obj_t *args) {
|
||||||
shared_bindings_synthio_lfo_tick(48000);
|
shared_bindings_synthio_lfo_tick(48000);
|
||||||
@ -333,6 +338,7 @@ STATIC const mp_rom_map_elem_t synthio_module_globals_table[] = {
|
|||||||
{ MP_ROM_QSTR(MP_QSTR_Envelope), MP_ROM_PTR(&synthio_envelope_type_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_Envelope), MP_ROM_PTR(&synthio_envelope_type_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_midi_to_hz), MP_ROM_PTR(&synthio_midi_to_hz_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_midi_to_hz), MP_ROM_PTR(&synthio_midi_to_hz_obj) },
|
||||||
{ MP_ROM_QSTR(MP_QSTR_voct_to_hz), MP_ROM_PTR(&synthio_voct_to_hz_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_voct_to_hz), MP_ROM_PTR(&synthio_voct_to_hz_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_waveform_max_length), MP_ROM_INT(SYNTHIO_WAVEFORM_SIZE) },
|
||||||
#if CIRCUITPY_AUDIOCORE_DEBUG
|
#if CIRCUITPY_AUDIOCORE_DEBUG
|
||||||
{ MP_ROM_QSTR(MP_QSTR_lfo_tick), MP_ROM_PTR(&synthio_lfo_tick_obj) },
|
{ MP_ROM_QSTR(MP_QSTR_lfo_tick), MP_ROM_PTR(&synthio_lfo_tick_obj) },
|
||||||
#endif
|
#endif
|
||||||
|
@ -29,6 +29,8 @@
|
|||||||
#include "py/objnamedtuple.h"
|
#include "py/objnamedtuple.h"
|
||||||
#include "py/enum.h"
|
#include "py/enum.h"
|
||||||
|
|
||||||
|
#define SYNTHIO_WAVEFORM_SIZE 16384
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SYNTHIO_ENVELOPE_STATE_ATTACK, SYNTHIO_ENVELOPE_STATE_DECAY,
|
SYNTHIO_ENVELOPE_STATE_ATTACK, SYNTHIO_ENVELOPE_STATE_DECAY,
|
||||||
SYNTHIO_ENVELOPE_STATE_SUSTAIN, SYNTHIO_ENVELOPE_STATE_RELEASE
|
SYNTHIO_ENVELOPE_STATE_SUSTAIN, SYNTHIO_ENVELOPE_STATE_RELEASE
|
||||||
|
@ -120,6 +120,24 @@ void common_hal_synthio_note_set_waveform(synthio_note_obj_t *self, mp_obj_t wav
|
|||||||
self->waveform_obj = waveform_in;
|
self->waveform_obj = waveform_in;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mp_int_t common_hal_synthio_note_get_waveform_loop_start(synthio_note_obj_t *self) {
|
||||||
|
return self->waveform_loop_start;
|
||||||
|
}
|
||||||
|
|
||||||
|
void common_hal_synthio_note_set_waveform_loop_start(synthio_note_obj_t *self, mp_int_t value_in) {
|
||||||
|
mp_int_t val = mp_arg_validate_int_range(value_in, 0, SYNTHIO_WAVEFORM_SIZE - 1, MP_QSTR_waveform_loop_start);
|
||||||
|
self->waveform_loop_start = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
mp_int_t common_hal_synthio_note_get_waveform_loop_end(synthio_note_obj_t *self) {
|
||||||
|
return self->waveform_loop_end;
|
||||||
|
}
|
||||||
|
|
||||||
|
void common_hal_synthio_note_set_waveform_loop_end(synthio_note_obj_t *self, mp_int_t value_in) {
|
||||||
|
mp_int_t val = mp_arg_validate_int_range(value_in, 1, SYNTHIO_WAVEFORM_SIZE, MP_QSTR_waveform_loop_end);
|
||||||
|
self->waveform_loop_end = val;
|
||||||
|
}
|
||||||
|
|
||||||
mp_obj_t common_hal_synthio_note_get_ring_waveform_obj(synthio_note_obj_t *self) {
|
mp_obj_t common_hal_synthio_note_get_ring_waveform_obj(synthio_note_obj_t *self) {
|
||||||
return self->ring_waveform_obj;
|
return self->ring_waveform_obj;
|
||||||
}
|
}
|
||||||
@ -135,6 +153,24 @@ void common_hal_synthio_note_set_ring_waveform(synthio_note_obj_t *self, mp_obj_
|
|||||||
self->ring_waveform_obj = ring_waveform_in;
|
self->ring_waveform_obj = ring_waveform_in;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mp_int_t common_hal_synthio_note_get_ring_waveform_loop_start(synthio_note_obj_t *self) {
|
||||||
|
return self->ring_waveform_loop_start;
|
||||||
|
}
|
||||||
|
|
||||||
|
void common_hal_synthio_note_set_ring_waveform_loop_start(synthio_note_obj_t *self, mp_int_t value_in) {
|
||||||
|
mp_int_t val = mp_arg_validate_int_range(value_in, 0, SYNTHIO_WAVEFORM_SIZE - 1, MP_QSTR_ring_waveform_loop_start);
|
||||||
|
self->ring_waveform_loop_start = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
mp_int_t common_hal_synthio_note_get_ring_waveform_loop_end(synthio_note_obj_t *self) {
|
||||||
|
return self->ring_waveform_loop_end;
|
||||||
|
}
|
||||||
|
|
||||||
|
void common_hal_synthio_note_set_ring_waveform_loop_end(synthio_note_obj_t *self, mp_int_t value_in) {
|
||||||
|
mp_int_t val = mp_arg_validate_int_range(value_in, 1, SYNTHIO_WAVEFORM_SIZE, MP_QSTR_ring_waveform_loop_end);
|
||||||
|
self->ring_waveform_loop_end = val;
|
||||||
|
}
|
||||||
|
|
||||||
void synthio_note_recalculate(synthio_note_obj_t *self, int32_t sample_rate) {
|
void synthio_note_recalculate(synthio_note_obj_t *self, int32_t sample_rate) {
|
||||||
if (sample_rate == self->sample_rate) {
|
if (sample_rate == self->sample_rate) {
|
||||||
return;
|
return;
|
||||||
@ -178,7 +214,7 @@ STATIC uint32_t pitch_bend(uint32_t frequency_scaled, int32_t bend_value) {
|
|||||||
#define ONE MICROPY_FLOAT_CONST(1.)
|
#define ONE MICROPY_FLOAT_CONST(1.)
|
||||||
#define ALMOST_ONE (MICROPY_FLOAT_CONST(32767.) / 32768)
|
#define ALMOST_ONE (MICROPY_FLOAT_CONST(32767.) / 32768)
|
||||||
|
|
||||||
uint32_t synthio_note_step(synthio_note_obj_t *self, int32_t sample_rate, int16_t dur, uint16_t loudness[2]) {
|
uint32_t synthio_note_step(synthio_note_obj_t *self, int32_t sample_rate, int16_t dur, int16_t loudness[2]) {
|
||||||
int panning = synthio_block_slot_get_scaled(&self->panning, -ALMOST_ONE, ALMOST_ONE);
|
int panning = synthio_block_slot_get_scaled(&self->panning, -ALMOST_ONE, ALMOST_ONE);
|
||||||
int left_panning_scaled, right_panning_scaled;
|
int left_panning_scaled, right_panning_scaled;
|
||||||
if (panning >= 0) {
|
if (panning >= 0) {
|
||||||
@ -189,7 +225,7 @@ uint32_t synthio_note_step(synthio_note_obj_t *self, int32_t sample_rate, int16_
|
|||||||
left_panning_scaled = 32767 + panning;
|
left_panning_scaled = 32767 + panning;
|
||||||
}
|
}
|
||||||
|
|
||||||
int amplitude = synthio_block_slot_get_scaled(&self->amplitude, ZERO, ALMOST_ONE);
|
int amplitude = synthio_block_slot_get_scaled(&self->amplitude, -ALMOST_ONE, ALMOST_ONE);
|
||||||
left_panning_scaled = (left_panning_scaled * amplitude) >> 15;
|
left_panning_scaled = (left_panning_scaled * amplitude) >> 15;
|
||||||
right_panning_scaled = (right_panning_scaled * amplitude) >> 15;
|
right_panning_scaled = (right_panning_scaled * amplitude) >> 15;
|
||||||
loudness[0] = (loudness[0] * left_panning_scaled) >> 15;
|
loudness[0] = (loudness[0] * left_panning_scaled) >> 15;
|
||||||
|
@ -48,11 +48,13 @@ typedef struct synthio_note_obj {
|
|||||||
int32_t ring_frequency_scaled, ring_frequency_bent;
|
int32_t ring_frequency_scaled, ring_frequency_bent;
|
||||||
|
|
||||||
mp_buffer_info_t waveform_buf;
|
mp_buffer_info_t waveform_buf;
|
||||||
|
uint32_t waveform_loop_start, waveform_loop_end;
|
||||||
mp_buffer_info_t ring_waveform_buf;
|
mp_buffer_info_t ring_waveform_buf;
|
||||||
|
uint32_t ring_waveform_loop_start, ring_waveform_loop_end;
|
||||||
synthio_envelope_definition_t envelope_def;
|
synthio_envelope_definition_t envelope_def;
|
||||||
} synthio_note_obj_t;
|
} synthio_note_obj_t;
|
||||||
|
|
||||||
void synthio_note_recalculate(synthio_note_obj_t *self, int32_t sample_rate);
|
void synthio_note_recalculate(synthio_note_obj_t *self, int32_t sample_rate);
|
||||||
uint32_t synthio_note_step(synthio_note_obj_t *self, int32_t sample_rate, int16_t dur, uint16_t loudness[2]);
|
uint32_t synthio_note_step(synthio_note_obj_t *self, int32_t sample_rate, int16_t dur, int16_t loudness[2]);
|
||||||
void synthio_note_start(synthio_note_obj_t *self, int32_t sample_rate);
|
void synthio_note_start(synthio_note_obj_t *self, int32_t sample_rate);
|
||||||
bool synthio_note_playing(synthio_note_obj_t *self);
|
bool synthio_note_playing(synthio_note_obj_t *self);
|
||||||
|
@ -172,7 +172,7 @@ int16_t mix_down_sample(int32_t sample) {
|
|||||||
return sample;
|
return sample;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *out_buffer32, int16_t dur, uint16_t loudness[2]) {
|
static bool synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *out_buffer32, int16_t dur, int16_t loudness[2]) {
|
||||||
mp_obj_t note_obj = synth->span.note_obj[chan];
|
mp_obj_t note_obj = synth->span.note_obj[chan];
|
||||||
|
|
||||||
int32_t sample_rate = synth->sample_rate;
|
int32_t sample_rate = synth->sample_rate;
|
||||||
@ -180,10 +180,12 @@ static bool synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *ou
|
|||||||
|
|
||||||
uint32_t dds_rate;
|
uint32_t dds_rate;
|
||||||
const int16_t *waveform = synth->waveform_bufinfo.buf;
|
const int16_t *waveform = synth->waveform_bufinfo.buf;
|
||||||
|
uint32_t waveform_start = 0;
|
||||||
uint32_t waveform_length = synth->waveform_bufinfo.len;
|
uint32_t waveform_length = synth->waveform_bufinfo.len;
|
||||||
|
|
||||||
uint32_t ring_dds_rate = 0;
|
uint32_t ring_dds_rate = 0;
|
||||||
const int16_t *ring_waveform = NULL;
|
const int16_t *ring_waveform = NULL;
|
||||||
|
uint32_t ring_waveform_start = 0;
|
||||||
uint32_t ring_waveform_length = 0;
|
uint32_t ring_waveform_length = 0;
|
||||||
|
|
||||||
if (mp_obj_is_small_int(note_obj)) {
|
if (mp_obj_is_small_int(note_obj)) {
|
||||||
@ -202,12 +204,24 @@ static bool synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *ou
|
|||||||
if (note->waveform_buf.buf) {
|
if (note->waveform_buf.buf) {
|
||||||
waveform = note->waveform_buf.buf;
|
waveform = note->waveform_buf.buf;
|
||||||
waveform_length = note->waveform_buf.len;
|
waveform_length = note->waveform_buf.len;
|
||||||
|
if (note->waveform_loop_start > 0 && note->waveform_loop_start < waveform_length) {
|
||||||
|
waveform_start = note->waveform_loop_start;
|
||||||
|
}
|
||||||
|
if (note->waveform_loop_end > waveform_start && note->waveform_loop_end < waveform_length) {
|
||||||
|
waveform_length = note->waveform_loop_end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
dds_rate = synthio_frequency_convert_scaled_to_dds((uint64_t)frequency_scaled * waveform_length, sample_rate);
|
dds_rate = synthio_frequency_convert_scaled_to_dds((uint64_t)frequency_scaled * (waveform_length - waveform_start), sample_rate);
|
||||||
if (note->ring_frequency_scaled != 0 && note->ring_waveform_buf.buf) {
|
if (note->ring_frequency_scaled != 0 && note->ring_waveform_buf.buf) {
|
||||||
ring_waveform = note->ring_waveform_buf.buf;
|
ring_waveform = note->ring_waveform_buf.buf;
|
||||||
ring_waveform_length = note->ring_waveform_buf.len;
|
ring_waveform_length = note->ring_waveform_buf.len;
|
||||||
ring_dds_rate = synthio_frequency_convert_scaled_to_dds((uint64_t)note->ring_frequency_bent * ring_waveform_length, sample_rate);
|
if (note->ring_waveform_loop_start > 0 && note->ring_waveform_loop_start < ring_waveform_length) {
|
||||||
|
ring_waveform_start = note->waveform_loop_start;
|
||||||
|
}
|
||||||
|
if (note->ring_waveform_loop_end > ring_waveform_start && note->ring_waveform_loop_end < ring_waveform_length) {
|
||||||
|
ring_waveform_length = note->ring_waveform_loop_end;
|
||||||
|
}
|
||||||
|
ring_dds_rate = synthio_frequency_convert_scaled_to_dds((uint64_t)note->ring_frequency_bent * (ring_waveform_length - ring_waveform_start), sample_rate);
|
||||||
uint32_t lim = ring_waveform_length << SYNTHIO_FREQUENCY_SHIFT;
|
uint32_t lim = ring_waveform_length << SYNTHIO_FREQUENCY_SHIFT;
|
||||||
if (ring_dds_rate > lim / sizeof(int16_t)) {
|
if (ring_dds_rate > lim / sizeof(int16_t)) {
|
||||||
ring_dds_rate = 0; // can't ring at that frequency
|
ring_dds_rate = 0; // can't ring at that frequency
|
||||||
@ -215,6 +229,7 @@ static bool synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *ou
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t offset = waveform_start << SYNTHIO_FREQUENCY_SHIFT;
|
||||||
uint32_t lim = waveform_length << SYNTHIO_FREQUENCY_SHIFT;
|
uint32_t lim = waveform_length << SYNTHIO_FREQUENCY_SHIFT;
|
||||||
uint32_t accum = synth->accum[chan];
|
uint32_t accum = synth->accum[chan];
|
||||||
|
|
||||||
@ -225,7 +240,7 @@ static bool synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *ou
|
|||||||
|
|
||||||
// can happen if note waveform gets set mid-note, but the expensive modulo is usually avoided
|
// can happen if note waveform gets set mid-note, but the expensive modulo is usually avoided
|
||||||
if (accum > lim) {
|
if (accum > lim) {
|
||||||
accum %= lim;
|
accum = accum % lim + offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
// first, fill with waveform
|
// first, fill with waveform
|
||||||
@ -233,7 +248,7 @@ static bool synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *ou
|
|||||||
accum += dds_rate;
|
accum += dds_rate;
|
||||||
// because dds_rate is low enough, the subtraction is guaranteed to go back into range, no expensive modulo needed
|
// because dds_rate is low enough, the subtraction is guaranteed to go back into range, no expensive modulo needed
|
||||||
if (accum > lim) {
|
if (accum > lim) {
|
||||||
accum -= lim;
|
accum = accum - lim + offset;
|
||||||
}
|
}
|
||||||
int16_t idx = accum >> SYNTHIO_FREQUENCY_SHIFT;
|
int16_t idx = accum >> SYNTHIO_FREQUENCY_SHIFT;
|
||||||
out_buffer32[i] = waveform[idx];
|
out_buffer32[i] = waveform[idx];
|
||||||
@ -249,18 +264,19 @@ static bool synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *ou
|
|||||||
|
|
||||||
// now modulate by ring and accumulate
|
// now modulate by ring and accumulate
|
||||||
accum = synth->ring_accum[chan];
|
accum = synth->ring_accum[chan];
|
||||||
|
offset = ring_waveform_start << SYNTHIO_FREQUENCY_SHIFT;
|
||||||
lim = ring_waveform_length << SYNTHIO_FREQUENCY_SHIFT;
|
lim = ring_waveform_length << SYNTHIO_FREQUENCY_SHIFT;
|
||||||
|
|
||||||
// can happen if note waveform gets set mid-note, but the expensive modulo is usually avoided
|
// can happen if note waveform gets set mid-note, but the expensive modulo is usually avoided
|
||||||
if (accum > lim) {
|
if (accum > lim) {
|
||||||
accum %= lim;
|
accum = accum % lim + offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (uint16_t i = 0; i < dur; i++) {
|
for (uint16_t i = 0; i < dur; i++) {
|
||||||
accum += ring_dds_rate;
|
accum += ring_dds_rate;
|
||||||
// because dds_rate is low enough, the subtraction is guaranteed to go back into range, no expensive modulo needed
|
// because dds_rate is low enough, the subtraction is guaranteed to go back into range, no expensive modulo needed
|
||||||
if (accum > lim) {
|
if (accum > lim) {
|
||||||
accum -= lim;
|
accum = accum - lim + offset;
|
||||||
}
|
}
|
||||||
int16_t idx = accum >> SYNTHIO_FREQUENCY_SHIFT;
|
int16_t idx = accum >> SYNTHIO_FREQUENCY_SHIFT;
|
||||||
int16_t wi = (ring_waveform[idx] * out_buffer32[i]) / 32768;
|
int16_t wi = (ring_waveform[idx] * out_buffer32[i]) / 32768;
|
||||||
@ -282,7 +298,7 @@ STATIC mp_obj_t synthio_synth_get_note_filter(mp_obj_t note_obj) {
|
|||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC void sum_with_loudness(int32_t *out_buffer32, int32_t *tmp_buffer32, uint16_t loudness[2], size_t dur, int synth_chan) {
|
STATIC void sum_with_loudness(int32_t *out_buffer32, int32_t *tmp_buffer32, int16_t loudness[2], size_t dur, int synth_chan) {
|
||||||
if (synth_chan == 1) {
|
if (synth_chan == 1) {
|
||||||
for (size_t i = 0; i < dur; i++) {
|
for (size_t i = 0; i < dur; i++) {
|
||||||
*out_buffer32++ += (*tmp_buffer32++ *loudness[0]) >> 16;
|
*out_buffer32++ += (*tmp_buffer32++ *loudness[0]) >> 16;
|
||||||
@ -328,7 +344,7 @@ void synthio_synth_synthesize(synthio_synth_t *synth, uint8_t **bufptr, uint32_t
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t loudness[2] = {synth->envelope_state[chan].level, synth->envelope_state[chan].level};
|
int16_t loudness[2] = {synth->envelope_state[chan].level, synth->envelope_state[chan].level};
|
||||||
|
|
||||||
if (!synth_note_into_buffer(synth, chan, tmp_buffer32, dur, loudness)) {
|
if (!synth_note_into_buffer(synth, chan, tmp_buffer32, dur, loudness)) {
|
||||||
// for some other reason, such as being above nyquist, note
|
// for some other reason, such as being above nyquist, note
|
||||||
@ -434,7 +450,7 @@ STATIC void parse_common(mp_buffer_info_t *bufinfo, mp_obj_t o, int16_t what, mp
|
|||||||
|
|
||||||
void synthio_synth_parse_waveform(mp_buffer_info_t *bufinfo_waveform, mp_obj_t waveform_obj) {
|
void synthio_synth_parse_waveform(mp_buffer_info_t *bufinfo_waveform, mp_obj_t waveform_obj) {
|
||||||
*bufinfo_waveform = ((mp_buffer_info_t) { .buf = (void *)square_wave, .len = 2 });
|
*bufinfo_waveform = ((mp_buffer_info_t) { .buf = (void *)square_wave, .len = 2 });
|
||||||
parse_common(bufinfo_waveform, waveform_obj, MP_QSTR_waveform, 16384);
|
parse_common(bufinfo_waveform, waveform_obj, MP_QSTR_waveform, SYNTHIO_WAVEFORM_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC int find_channel_with_note(synthio_synth_t *synth, mp_obj_t note) {
|
STATIC int find_channel_with_note(synthio_synth_t *synth, mp_obj_t note) {
|
||||||
|
@ -82,7 +82,7 @@ for i in range(13):
|
|||||||
run_test(f"key{i}", content_good)
|
run_test(f"key{i}", content_good)
|
||||||
|
|
||||||
run_test(f"K", b"K = 7\r\n")
|
run_test(f"K", b"K = 7\r\n")
|
||||||
print(os.getenv_int("K"))
|
print(getenv_int("K"))
|
||||||
|
|
||||||
# Test value without trailing newline
|
# Test value without trailing newline
|
||||||
run_test(f"noeol", b"noeol=3")
|
run_test(f"noeol", b"noeol=3")
|
||||||
|
@ -122,7 +122,7 @@
|
|||||||
0.6026482747395835 -1.794703450520833 0.1920551757812494 -5.397351725260417
|
0.6026482747395835 -1.794703450520833 0.1920551757812494 -5.397351725260417
|
||||||
0.6239809570312501 -1.7520380859375 0.1280571289062498 -5.37601904296875
|
0.6239809570312501 -1.7520380859375 0.1280571289062498 -5.37601904296875
|
||||||
0.6453136393229166 -1.709372721354167 0.0640590820312501 -5.354686360677084
|
0.6453136393229166 -1.709372721354167 0.0640590820312501 -5.354686360677084
|
||||||
0.6666463216145831 -1.666707356770834 6.103515625044409e-05 -5.333353678385417
|
0.6666463216145831 -1.666707356770834 6.103515625044408e-05 -5.333353678385417
|
||||||
0.6879790039062498 -1.6240419921875 -0.06393701171874921 -5.31202099609375
|
0.6879790039062498 -1.6240419921875 -0.06393701171874921 -5.31202099609375
|
||||||
0.7093116861979163 -1.581376627604167 -0.1279350585937489 -5.290688313802084
|
0.7093116861979163 -1.581376627604167 -0.1279350585937489 -5.290688313802084
|
||||||
0.7306443684895827 -1.538711263020835 -0.1919331054687481 -5.269355631510417
|
0.7306443684895827 -1.538711263020835 -0.1919331054687481 -5.269355631510417
|
||||||
|
@ -3,8 +3,8 @@ from synthnotehelper import *
|
|||||||
|
|
||||||
@synth_test
|
@synth_test
|
||||||
def gen(synth):
|
def gen(synth):
|
||||||
l = LFO(bend_out, offset=0.2, scale=0.8, rate=4, once=True)
|
l = LFO(sine, offset=0.2, scale=0.8, rate=2)
|
||||||
yield [l]
|
yield [l]
|
||||||
n = Note(128, amplitude=l)
|
n = Note(8, amplitude=l)
|
||||||
synth.press(n)
|
synth.press(n)
|
||||||
yield 1 / 4
|
yield 2
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,10 @@
|
|||||||
()
|
()
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||||
(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None),)
|
(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, waveform_loop_start=0, waveform_loop_end=16384, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None, ring_waveform_loop_start=0, ring_waveform_loop_end=16384),)
|
||||||
[-16383, -16383, -16383, -16383, 16382, 16382, 16382, 16382, 16382, -16383, -16383, -16383, -16383, -16383, 16382, 16382, 16382, 16382, 16382, -16383, -16383, -16383, -16383, -16383]
|
[-16383, -16383, -16383, -16383, 16382, 16382, 16382, 16382, 16382, -16383, -16383, -16383, -16383, -16383, 16382, 16382, 16382, 16382, 16382, -16383, -16383, -16383, -16383, -16383]
|
||||||
(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None), Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None))
|
(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, waveform_loop_start=0, waveform_loop_end=16384, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None, ring_waveform_loop_start=0, ring_waveform_loop_end=16384), Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, waveform_loop_start=0, waveform_loop_end=16384, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None, ring_waveform_loop_start=0, ring_waveform_loop_end=16384))
|
||||||
[-1, -1, -1, -1, -1, -1, -1, -1, 28045, -1, -1, -1, -1, -28046, -1, -1, -1, -1, 28045, -1, -1, -1, -1, -28046]
|
[-1, -1, -1, -1, -1, -1, -1, -1, 28045, -1, -1, -1, -1, -28046, -1, -1, -1, -1, 28045, -1, -1, -1, -1, -28046]
|
||||||
(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None),)
|
(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, waveform_loop_start=0, waveform_loop_end=16384, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None, ring_waveform_loop_start=0, ring_waveform_loop_end=16384),)
|
||||||
[-1, -1, -1, 28045, -1, -1, -1, -1, -1, -1, -1, -1, 28045, -1, -1, -1, -1, -28046, -1, -1, -1, -1, 28045, -1]
|
[-1, -1, -1, 28045, -1, -1, -1, -1, -1, -1, -1, -1, 28045, -1, -1, -1, -1, -28046, -1, -1, -1, -1, 28045, -1]
|
||||||
(-5242, 5241)
|
(-5242, 5241)
|
||||||
(-10485, 10484)
|
(-10485, 10484)
|
||||||
|
@ -72,29 +72,29 @@
|
|||||||
0.3786666666666667 0.9999389657750726 0.07999755859375251 1.423014179150163 0.0 0.8399743652343719 0.999969482421875 0.9599999999999987 0.3942279687500003 0.9199999999999985 0.9199999999999985
|
0.3786666666666667 0.9999389657750726 0.07999755859375251 1.423014179150163 0.0 0.8399743652343719 0.999969482421875 0.9599999999999987 0.3942279687500003 0.9199999999999985 0.9199999999999985
|
||||||
0.384 0.9999389657750726 0.05333170572916924 1.42187647081577 0.0 0.8933060709635384 0.999969482421875 0.973333333333332 0.3945124045138892 0.9466666666666651 0.9466666666666651
|
0.384 0.9999389657750726 0.05333170572916924 1.42187647081577 0.0 0.8933060709635384 0.999969482421875 0.973333333333332 0.3945124045138892 0.9466666666666651 0.9466666666666651
|
||||||
0.3893333333333333 0.9999389657750726 0.02666585286458595 1.421307616648573 0.0 0.9466377766927051 0.999969482421875 0.9866666666666653 0.3946546223958336 0.9733333333333317 0.9733333333333317
|
0.3893333333333333 0.9999389657750726 0.02666585286458595 1.421307616648573 0.0 0.9466377766927051 0.999969482421875 0.9866666666666653 0.3946546223958336 0.9733333333333317 0.9733333333333317
|
||||||
0.3946666666666667 0.9999389657750726 6.103329360485077e-05 1.421306314644712 0.0 0.9999694824218716 0.999969482421875 0.999969482421875 0.3946549479067329 0.999999999999998 0.999999999999998
|
0.3946666666666667 0.9999389657750726 6.103329360485076e-05 1.421306314644712 0.0 0.9999694824218716 0.999969482421875 0.999969482421875 0.3946549479067329 0.9999999999999984 0.9999999999999984
|
||||||
0.4 0.9999389657750726 6.103329360485077e-05 1.42130501264085 0.999969482421875 0.9466377766927115 0.999969482421875 0.999969482421875 0.3946552734176321 0.02666666666666506 0.02666666666666506
|
0.4 0.9999389657750726 6.103329360485076e-05 1.42130501264085 0.999969482421875 0.9466377766927115 0.999969482421875 0.999969482421875 0.3946552734176321 0.02666666666666506 0.02666666666666506
|
||||||
0.4053333333333333 0.9999389657750726 6.103329360485077e-05 1.421303710636988 0.999969482421875 0.8933060709635448 0.999969482421875 0.999969482421875 0.3946555989285314 0.05333333333333172 0.05333333333333172
|
0.4053333333333333 0.9999389657750726 6.103329360485076e-05 1.421303710636988 0.999969482421875 0.8933060709635448 0.999969482421875 0.999969482421875 0.3946555989285314 0.05333333333333172 0.05333333333333172
|
||||||
0.4106666666666666 0.9999389657750726 6.103329360485077e-05 1.421302408633126 0.999969482421875 0.8399743652343782 0.999969482421875 0.999969482421875 0.3946559244394306 0.07999999999999839 0.07999999999999839
|
0.4106666666666666 0.9999389657750726 6.103329360485076e-05 1.421302408633126 0.999969482421875 0.8399743652343782 0.999969482421875 0.999969482421875 0.3946559244394306 0.07999999999999839 0.07999999999999839
|
||||||
0.416 0.9999389657750726 6.103329360485077e-05 1.421301106629265 0.999969482421875 0.7866426595052117 0.999969482421875 0.999969482421875 0.3946562499503298 0.106666666666665 0.106666666666665
|
0.416 0.9999389657750726 6.103329360485076e-05 1.421301106629265 0.999969482421875 0.7866426595052117 0.999969482421875 0.999969482421875 0.3946562499503298 0.106666666666665 0.106666666666665
|
||||||
0.4213333333333333 0.9999389657750726 6.103329360485077e-05 1.421299804625403 0.999969482421875 0.7333109537760448 0.999969482421875 0.999969482421875 0.3946565754612291 0.1333333333333317 0.1333333333333317
|
0.4213333333333333 0.9999389657750726 6.103329360485076e-05 1.421299804625403 0.999969482421875 0.7333109537760448 0.999969482421875 0.999969482421875 0.3946565754612291 0.1333333333333317 0.1333333333333317
|
||||||
0.4266666666666667 0.9999389657750726 6.103329360485077e-05 1.421298502621541 0.999969482421875 0.6799792480468783 0.999969482421875 0.999969482421875 0.3946569009721283 0.1599999999999984 0.1599999999999984
|
0.4266666666666667 0.9999389657750726 6.103329360485076e-05 1.421298502621541 0.999969482421875 0.6799792480468783 0.999969482421875 0.999969482421875 0.3946569009721283 0.1599999999999984 0.1599999999999984
|
||||||
0.432 0.9999389657750726 6.103329360485077e-05 1.42129720061768 0.999969482421875 0.6266475423177114 0.999969482421875 0.999969482421875 0.3946572264830275 0.1866666666666651 0.1866666666666651
|
0.432 0.9999389657750726 6.103329360485076e-05 1.42129720061768 0.999969482421875 0.6266475423177114 0.999969482421875 0.999969482421875 0.3946572264830275 0.1866666666666651 0.1866666666666651
|
||||||
0.4373333333333333 0.9999389657750726 6.103329360485077e-05 1.421295898613818 0.999969482421875 0.5733158365885449 0.999969482421875 0.999969482421875 0.3946575519939268 0.2133333333333317 0.2133333333333317
|
0.4373333333333333 0.9999389657750726 6.103329360485076e-05 1.421295898613818 0.999969482421875 0.5733158365885449 0.999969482421875 0.999969482421875 0.3946575519939268 0.2133333333333317 0.2133333333333317
|
||||||
0.4426666666666667 0.9999389657750726 6.103329360485077e-05 1.421294596609956 0.999969482421875 0.5199841308593781 0.999969482421875 0.999969482421875 0.394657877504826 0.2399999999999984 0.2399999999999984
|
0.4426666666666667 0.9999389657750726 6.103329360485076e-05 1.421294596609956 0.999969482421875 0.5199841308593781 0.999969482421875 0.999969482421875 0.394657877504826 0.2399999999999984 0.2399999999999984
|
||||||
0.448 0.9999389657750726 6.103329360485077e-05 1.421293294606095 0.999969482421875 0.4666524251302116 0.999969482421875 0.999969482421875 0.3946582030157252 0.2666666666666651 0.2666666666666651
|
0.448 0.9999389657750726 6.103329360485076e-05 1.421293294606095 0.999969482421875 0.4666524251302116 0.999969482421875 0.999969482421875 0.3946582030157252 0.2666666666666651 0.2666666666666651
|
||||||
0.4533333333333333 0.9999389657750726 6.103329360485077e-05 1.421291992602233 0.999969482421875 0.4133207194010449 0.999969482421875 0.999969482421875 0.3946585285266245 0.2933333333333317 0.2933333333333317
|
0.4533333333333333 0.9999389657750726 6.103329360485076e-05 1.421291992602233 0.999969482421875 0.4133207194010449 0.999969482421875 0.999969482421875 0.3946585285266245 0.2933333333333317 0.2933333333333317
|
||||||
0.4586666666666667 0.9999389657750726 6.103329360485077e-05 1.421290690598371 0.999969482421875 0.3599890136718782 0.999969482421875 0.999969482421875 0.3946588540375237 0.3199999999999984 0.3199999999999984
|
0.4586666666666667 0.9999389657750726 6.103329360485076e-05 1.421290690598371 0.999969482421875 0.3599890136718782 0.999969482421875 0.999969482421875 0.3946588540375237 0.3199999999999984 0.3199999999999984
|
||||||
0.4640000000000001 0.9999389657750726 6.103329360485077e-05 1.421289388594509 0.999969482421875 0.3066573079427115 0.999969482421875 0.999969482421875 0.3946591795484229 0.3466666666666651 0.3466666666666651
|
0.4640000000000001 0.9999389657750726 6.103329360485076e-05 1.421289388594509 0.999969482421875 0.3066573079427115 0.999969482421875 0.999969482421875 0.3946591795484229 0.3466666666666651 0.3466666666666651
|
||||||
0.4693333333333333 0.9999389657750726 6.103329360485077e-05 1.421288086590648 0.999969482421875 0.2533256022135448 0.999969482421875 0.999969482421875 0.3946595050593222 0.3733333333333317 0.3733333333333317
|
0.4693333333333333 0.9999389657750726 6.103329360485076e-05 1.421288086590648 0.999969482421875 0.2533256022135448 0.999969482421875 0.999969482421875 0.3946595050593222 0.3733333333333317 0.3733333333333317
|
||||||
0.4746666666666667 0.9999389657750726 6.103329360485077e-05 1.421286784586786 0.999969482421875 0.1999938964843782 0.999969482421875 0.999969482421875 0.3946598305702214 0.3999999999999984 0.3999999999999984
|
0.4746666666666667 0.9999389657750726 6.103329360485076e-05 1.421286784586786 0.999969482421875 0.1999938964843782 0.999969482421875 0.999969482421875 0.3946598305702214 0.3999999999999984 0.3999999999999984
|
||||||
0.48 0.9999389657750726 6.103329360485077e-05 1.421285482582924 0.999969482421875 0.1466621907552115 0.999969482421875 0.999969482421875 0.3946601560811207 0.4266666666666651 0.4266666666666651
|
0.48 0.9999389657750726 6.103329360485076e-05 1.421285482582924 0.999969482421875 0.1466621907552115 0.999969482421875 0.999969482421875 0.3946601560811207 0.4266666666666651 0.4266666666666651
|
||||||
0.4853333333333333 0.9999389657750726 6.103329360485077e-05 1.421284180579062 0.999969482421875 0.09333048502604482 0.999969482421875 0.999969482421875 0.3946604815920199 0.4533333333333317 0.4533333333333317
|
0.4853333333333333 0.9999389657750726 6.103329360485076e-05 1.421284180579062 0.999969482421875 0.09333048502604482 0.999969482421875 0.999969482421875 0.3946604815920199 0.4533333333333317 0.4533333333333317
|
||||||
0.4906666666666666 0.9999389657750726 6.103329360485077e-05 1.421282878575201 0.999969482421875 0.03999877929687814 0.999969482421875 0.999969482421875 0.3946608071029191 0.4799999999999985 0.4799999999999985
|
0.4906666666666666 0.9999389657750726 6.103329360485076e-05 1.421282878575201 0.999969482421875 0.03999877929687814 0.999969482421875 0.999969482421875 0.3946608071029191 0.4799999999999985 0.4799999999999985
|
||||||
0.496 0.9999389657750726 6.103329360485077e-05 1.421281576571339 0.0 0.01333292643228842 0.999969482421875 0.999969482421875 0.3946611326138184 0.506666666666665 0.506666666666665
|
0.496 0.9999389657750726 6.103329360485076e-05 1.421281576571339 0.0 0.01333292643228842 0.999969482421875 0.999969482421875 0.3946611326138184 0.506666666666665 0.506666666666665
|
||||||
0.5013333333333333 0.9999389657750726 6.103329360485077e-05 1.421280274567477 0.0 0.066664632161455 0.999969482421875 0.999969482421875 0.3946614581247176 0.5333333333333316 0.5333333333333316
|
0.5013333333333333 0.9999389657750726 6.103329360485076e-05 1.421280274567477 0.0 0.066664632161455 0.999969482421875 0.999969482421875 0.3946614581247176 0.5333333333333316 0.5333333333333316
|
||||||
0.5066666666666667 0.9999389657750726 6.103329360485077e-05 1.421278972563615 0.0 0.1199963378906216 0.999969482421875 0.999969482421875 0.3946617836356168 0.5599999999999983 0.5599999999999983
|
0.5066666666666667 0.9999389657750726 6.103329360485076e-05 1.421278972563615 0.0 0.1199963378906216 0.999969482421875 0.999969482421875 0.3946617836356168 0.5599999999999983 0.5599999999999983
|
||||||
0.512 0.9999389657750726 6.103329360485077e-05 1.421277670559754 0.0 0.1733280436197881 0.999969482421875 0.999969482421875 0.3946621091465161 0.5866666666666649 0.5866666666666649
|
0.512 0.9999389657750726 6.103329360485076e-05 1.421277670559754 0.0 0.1733280436197881 0.999969482421875 0.999969482421875 0.3946621091465161 0.5866666666666649 0.5866666666666649
|
||||||
0.5173333333333333 0.9999389657750726 6.103329360485077e-05 1.421276368555892 0.0 0.2266597493489547 0.999969482421875 0.999969482421875 0.3946624346574153 0.6133333333333315 0.6133333333333315
|
0.5173333333333333 0.9999389657750726 6.103329360485076e-05 1.421276368555892 0.0 0.2266597493489547 0.999969482421875 0.999969482421875 0.3946624346574153 0.6133333333333315 0.6133333333333315
|
||||||
0.5226666666666667 0.9999389657750726 6.103329360485077e-05 1.42127506655203 0.0 0.2799914550781212 0.999969482421875 0.999969482421875 0.3946627601683145 0.6399999999999981 0.6399999999999981
|
0.5226666666666667 0.9999389657750726 6.103329360485076e-05 1.42127506655203 0.0 0.2799914550781212 0.999969482421875 0.999969482421875 0.3946627601683145 0.6399999999999981 0.6399999999999981
|
||||||
0.528 0.9999389657750726 6.103329360485077e-05 1.421273764548169 0.0 0.3333231608072878 0.999969482421875 0.999969482421875 0.3946630856792138 0.6666666666666647 0.6666666666666647
|
0.528 0.9999389657750726 6.103329360485076e-05 1.421273764548169 0.0 0.3333231608072878 0.999969482421875 0.999969482421875 0.3946630856792138 0.6666666666666647 0.6666666666666647
|
||||||
|
@ -180,6 +180,8 @@ def run_micropython(pyb, args, test_file, is_special=False):
|
|||||||
"basics/builtin_help.py",
|
"basics/builtin_help.py",
|
||||||
"thread/thread_exc2.py",
|
"thread/thread_exc2.py",
|
||||||
"esp32/partition_ota.py",
|
"esp32/partition_ota.py",
|
||||||
|
"circuitpython/traceback_test.py", # CIRCUITPY-CHANGE
|
||||||
|
"circuitpython/traceback_test_chained.py", # CIRCUITPY-CHANGE
|
||||||
)
|
)
|
||||||
had_crash = False
|
had_crash = False
|
||||||
if pyb is None:
|
if pyb is None:
|
||||||
@ -977,6 +979,7 @@ the last matching regex is used:
|
|||||||
if args.test_dirs is None:
|
if args.test_dirs is None:
|
||||||
test_dirs = (
|
test_dirs = (
|
||||||
"basics",
|
"basics",
|
||||||
|
"circuitpython", # CIRCUITPY-CHANGE
|
||||||
"micropython",
|
"micropython",
|
||||||
"misc",
|
"misc",
|
||||||
"extmod",
|
"extmod",
|
||||||
|
@ -75,7 +75,20 @@ def get_version_info():
|
|||||||
sha = os.environ["GITHUB_SHA"]
|
sha = os.environ["GITHUB_SHA"]
|
||||||
|
|
||||||
if not version:
|
if not version:
|
||||||
version = "{}-{}".format(date.today().strftime("%Y%m%d"), sha[:7])
|
# Get branch we are PR'ing into, if any.
|
||||||
|
branch = os.environ.get("GITHUB_BASE_REF", "").strip().replace("/", "_")
|
||||||
|
if not branch:
|
||||||
|
branch = "no-branch"
|
||||||
|
|
||||||
|
# Get PR number, if any
|
||||||
|
pull_request_maybe = os.environ.get("PULL", "")
|
||||||
|
if pull_request_maybe:
|
||||||
|
pull_request_maybe = f"-PR{pull_request_maybe}"
|
||||||
|
|
||||||
|
date_stamp = date.today().strftime("%Y%m%d")
|
||||||
|
short_sha = sha[:7]
|
||||||
|
# Example: 20231121-8.2.x-PR9876-123abcd
|
||||||
|
version = f"{date_stamp}-{branch}{pull_request_maybe}-{short_sha}"
|
||||||
|
|
||||||
return sha, version
|
return sha, version
|
||||||
|
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -eo pipefail
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors)
|
# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors)
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
git fetch --tags
|
git fetch --tags
|
||||||
git checkout $(git describe --tags `git rev-list --tags --max-count=1`)
|
latest_tag="$(git describe --tags `git rev-list --tags --max-count=1`)"
|
||||||
|
git checkout $latest_tag
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 1421ca7fe72a2b173b08be05f9042b79409e783a
|
Subproject commit 27e322fcdcc6eee0642242638d4f2557efb32559
|
Loading…
Reference in New Issue
Block a user