diff options
| author | Nick Moore <nick@zoic.org> | 2018-10-25 12:20:50 +1100 |
|---|---|---|
| committer | Nick Moore <nick@zoic.org> | 2018-10-25 12:20:50 +1100 |
| commit | f6482699a01887f503fad80193e11b59a20f5aab (patch) | |
| tree | 88f9cddfe9bcbe7f3489aa1b20754eba26318982 | |
| parent | 9c904358a9f80922880596d88942cf1aadac57da (diff) | |
| parent | dc9d338612284ab42d6adb0da95ad64dcd6b4cd9 (diff) | |
Merge remote-tracking branch 'origin/master' into circuitpython/nickzoic/703-wiznet-5500-native
72 files changed, 1538 insertions, 517 deletions
diff --git a/.travis.yml b/.travis.yml index 78fc863aa..654a3d9cb 100755 --- a/.travis.yml +++ b/.travis.yml @@ -4,18 +4,26 @@ language: c compiler: - gcc git: - depth: 1 - -# Put a representative board from each port or sub-port near the top -# to determine more quickly whether that port is going to build or not. + depth: 6 + +# Each item under 'env' is a separate Travis job to execute. +# They run in separate environments, so each one must take the time +# to clone the repository and submodules; to download and install SDKs, +# pip packages, and so forth. By gathering activities together in optimal +# ways, the "run time" and "total time" of the travis jobs can be minimized. +# +# Since at the time of writing Travis generally starts 5 or 6 jobs, the +# builds have been organized into 5 groups of *approximately* equal durations. +# Additionally, the jobs that need extra SDKs are also organized together. +# +# When adding new boards, take a look on the travis CI page +# https://travis-ci.org/adafruit/circuitpython to which build that installs +# that SDK is shortest and add it there. In the case of major re-organizations, +# just try to make the builds "about equal in run time" env: - - TRAVIS_TESTS="unix docs translations" - - TRAVIS_BOARDS="feather_huzzah circuitplayground_express pca10056" TRAVIS_SDK=arm:nrf:esp8266 - # Group nrf builds together.. - - TRAVIS_BOARDS="pca10056 pca10059 feather_nrf52832 feather_nrf52840_express" TRAVIS_SDK=arm:nrf - # The rest of the M0/M4 boards, in arbitrary order. + - TRAVIS_TESTS="unix docs translations" TRAVIS_BOARDS="feather_huzzah circuitplayground_express pca10056 pca10059 feather_nrf52832 feather_nrf52840_express makerdiary_nrf52840_mdk" TRAVIS_SDK=arm:nrf:esp8266 - TRAVIS_BOARDS="metro_m0_express metro_m4_express pirkey_m0 trellis_m4_express trinket_m0" TRAVIS_SDK=arm - - TRAVIS_BOARDS="feather_radiofruit_zigbee gemma_m0 hallowing_m0_express itsybitsy_m0_express itsybitsy_m4_express" TRAVIS_SDK=arm + - TRAVIS_BOARDS="feather_radiofruit_zigbee gemma_m0 hallowing_m0_express itsybitsy_m0_express itsybitsy_m4_express meowmeow" TRAVIS_SDK=arm - TRAVIS_BOARDS="feather_m0_express_crickit feather_m0_rfm69 feather_m0_rfm9x feather_m4_express arduino_zero" TRAVIS_SDK=arm - TRAVIS_BOARDS="circuitplayground_express_crickit feather_m0_adalogger feather_m0_basic feather_m0_express" TRAVIS_SDK=arm @@ -45,8 +53,8 @@ before_script: - (! var_search "${TRAVIS_SDK-}" nrf || sudo ports/nrf/drivers/bluetooth/download_ble_stack.sh) # For huzzah builds - - (! var_search "${TRAVIS_SDK-}" esp8266 || (wget https://github.com/jepler/esp-open-sdk/releases/download/2018-06-10/xtensa-lx106-elf-standalone.tar.gz && tar xavf xtensa-lx106-elf-standalone.tar.gz)) - - if var_search "${TRAVIS_SDK-}" esp8266 ; then PATH=$(readlink -f xtensa-lx106-elf/bin):$PATH; fi + - (! var_search "${TRAVIS_SDK-}" esp8266 || (wget https://github.com/jepler/esp-open-sdk/releases/download/2018-06-10/xtensa-lx106-elf-standalone.tar.gz && tar -C .. -xavf xtensa-lx106-elf-standalone.tar.gz)) + - if var_search "${TRAVIS_SDK-}" esp8266 ; then PATH=$(readlink -f ../xtensa-lx106-elf/bin):$PATH; fi # For coverage testing (upgrade is used to get latest urllib3 version) - ([[ -z "$TRAVIS_TESTS" ]] || sudo apt-get install -y python3-pip) @@ -54,7 +62,7 @@ before_script: - (! var_search "${TRAVIS_TESTS-}" docs || sudo pip install 'Sphinx<1.8.0' sphinx-rtd-theme recommonmark) - (! var_search "${TRAVIS_TESTS-}" translations || sudo pip3 install polib) - # report some good version numbers to the buil + # report some good version numbers to the build - gcc --version - (! var_search "${TRAVIS_SDK-}" elf || arm-none-eabi-gcc --version) - (! var_search "${TRAVIS_SDK-}" esp8266 || xtensa-lx106-elf-gcc --version) diff --git a/README.rst b/README.rst index ac74f10d6..e89543fe5 100644 --- a/README.rst +++ b/README.rst @@ -30,13 +30,21 @@ Supported Boards Designed for CircuitPython ~~~~~~~~~~~~~~~~~~~~~~~~~~ +**M0 Boards** + - `Adafruit CircuitPlayground Express <https://www.adafruit.com/product/3333>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-circuit-playground-express/circuitpython-quickstart>`__) - `Adafruit Feather M0 Express <https://www.adafruit.com/product/3403>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-feather-m0-express-designed-for-circuit-python-circuitpython/kattni-circuitpython>`__) -- `Adafruit Metro M0 Express <https://www.adafruit.com/product/3505>`_ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-metro-m0-express-designed-for-circuitpython/circuitpython>`__) - `Adafruit Gemma M0 <https://www.adafruit.com/product/3501>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-gemma-m0/circuitpython>`__) +- `Adafruit Hallowing M0 Express <https://www.adafruit.com/product/3900>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-hallowing/circuitpython>`__) - `Adafruit ItsyBitsy M0 Express <https://www.adafruit.com/product/3727>`_ (`CircuitPython Guide <https://learn.adafruit.com/introducing-itsy-bitsy-m0/circuitpython>`__) +- `Adafruit Metro M0 Express <https://www.adafruit.com/product/3505>`_ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-metro-m0-express-designed-for-circuitpython/circuitpython>`__) - `Adafruit Trinket M0 <https://www.adafruit.com/product/3500>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-trinket-m0-circuitpython-arduino/circuitpython>`__) -- `Adafruit Metro M4 <https://www.adafruit.com/product/3382>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-metro-m4-express-featuring-atsamd51/overview>`__) + +**M4 Boards** + +- `Adafruit Feather M4 Express <https://www.adafruit.com/product/3857>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51/circuitpython>`__) +- `Adafruit ItsyBitsy M4 Express <https://www.adafruit.com/product/3800>`__ (`CircuitPython Guide <https://learn.adafruit.com/introducing-adafruit-itsybitsy-m4/circuitpython>`__) +- `Adafruit Metro M4 Express <https://www.adafruit.com/product/3382>`__ (`CircuitPython Guide <https://learn.adafruit.com/adafruit-metro-m4-express-featuring-atsamd51/circuitpython>`__) Other ~~~~~ diff --git a/frozen/Adafruit_CircuitPython_BusDevice b/frozen/Adafruit_CircuitPython_BusDevice -Subproject 07919641470edb602585c6a91f7b8eacf17e664 +Subproject 97d4129b8117d177df2675839ec4081b3570838 diff --git a/frozen/Adafruit_CircuitPython_CircuitPlayground b/frozen/Adafruit_CircuitPython_CircuitPlayground -Subproject d0aa6dc56d66decfae92daced7384c1e3518a66 +Subproject 36ec7b371f1751961de6d2c910533618d931f10 diff --git a/frozen/Adafruit_CircuitPython_Crickit b/frozen/Adafruit_CircuitPython_Crickit -Subproject 44f52c5dacd9fc605565e5794e95c9a785aaf69 +Subproject bbf2d897ae116531bfa15af3bcb32b0123acc43 diff --git a/frozen/Adafruit_CircuitPython_DotStar b/frozen/Adafruit_CircuitPython_DotStar -Subproject af25424ee7dbebea3e5d77390c017018ffa52d3 +Subproject 03c24157d46672c723021686f7a838cfeb2db2b diff --git a/frozen/Adafruit_CircuitPython_HID b/frozen/Adafruit_CircuitPython_HID -Subproject 5c2f6ef1ed80f24b6a3878067d40350d3725e19 +Subproject 99c71a6c1ea00bc14f0a4507116ff216beafafb diff --git a/frozen/Adafruit_CircuitPython_IRRemote b/frozen/Adafruit_CircuitPython_IRRemote -Subproject c29e10b590efbdf06163897b49cd0c2bea82ad6 +Subproject ec11164ec6682094a48d0f9848d2c4c89c08f3b diff --git a/frozen/Adafruit_CircuitPython_LIS3DH b/frozen/Adafruit_CircuitPython_LIS3DH -Subproject c4152a0d87a04903ae0e612eb381af440c9e28b +Subproject 377910d5a9bfbf833dfd3064f80c5b2ae0c78c9 diff --git a/frozen/Adafruit_CircuitPython_Motor b/frozen/Adafruit_CircuitPython_Motor -Subproject e0b709f1710555da67705360870ba0d14ced7e0 +Subproject 00326214fc2ece8b31c07a654b192797e6a0804 diff --git a/frozen/Adafruit_CircuitPython_NeoPixel b/frozen/Adafruit_CircuitPython_NeoPixel -Subproject e9f50cb6678a1684591ee021b95a3c4b51786fe +Subproject 4b9563d6a74c6089d0ef5466975d11ef52851bc diff --git a/frozen/Adafruit_CircuitPython_Thermistor b/frozen/Adafruit_CircuitPython_Thermistor -Subproject 00f4ebca6c740b76c1c464f83d514ac20b0600e +Subproject 1570b23f7a6d62e169d2fd15969e507a1da0537 diff --git a/frozen/Adafruit_CircuitPython_seesaw b/frozen/Adafruit_CircuitPython_seesaw -Subproject 340cd17fad0c29d3a70d6e298a30ecc753df054 +Subproject e3e3021d8578fde450511b47a085d9d56ab4674 diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 8fc817849..a75f2169b 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-11 22:08+1100\n" +"POT-Creation-Date: 2018-10-25 12:20+1100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -147,7 +147,7 @@ msgstr "" msgid "invalid arguments" msgstr "" -#: lib/utils/pyexec.c:97 py/builtinimport.c:253 +#: lib/utils/pyexec.c:97 py/builtinimport.c:251 msgid "script compilation not supported" msgstr "" @@ -291,12 +291,12 @@ msgid "Too many channels in sample." msgstr "" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417 msgid "No DMA channel found" msgstr "" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419 msgid "Unable to allocate buffers for signed conversion" msgstr "" @@ -312,43 +312,44 @@ msgstr "" msgid "sampling rate out of range" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132 msgid "DAC already in use" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136 msgid "Right channel unsupported" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116 #: ports/atmel-samd/common-hal/touchio/TouchIn.c:65 msgid "Invalid pin" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147 msgid "Invalid pin for left channel" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151 msgid "Invalid pin for right channel" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154 msgid "Cannot output both channels on the same pin" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189 #: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110 +#: ports/nrf/common-hal/pulseio/PulseOut.c:107 msgid "All timers in use" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285 msgid "All event channels in use" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375 #, c-format msgid "Sample rate too high. It must be less than %d" msgstr "" @@ -361,7 +362,7 @@ msgstr "" #: ports/atmel-samd/common-hal/busio/SPI.c:132 #: ports/atmel-samd/common-hal/busio/UART.c:119 #: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45 -#: ports/nrf/common-hal/busio/I2C.c:81 +#: ports/nrf/common-hal/busio/I2C.c:82 msgid "Invalid pins" msgstr "" @@ -413,7 +414,7 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369 -#: ports/nrf/common-hal/pulseio/PWMOut.c:120 +#: ports/nrf/common-hal/pulseio/PWMOut.c:119 #: ports/nrf/common-hal/pulseio/PWMOut.c:233 msgid "Invalid PWM frequency" msgstr "" @@ -695,7 +696,7 @@ msgstr "" msgid "AnalogOut functionality not supported" msgstr "" -#: ports/nrf/common-hal/busio/I2C.c:95 +#: ports/nrf/common-hal/busio/I2C.c:96 msgid "All I2C peripherals are in use" msgstr "" @@ -729,7 +730,7 @@ msgstr "" msgid "Can not get temperature. status: 0x%02x" msgstr "" -#: ports/nrf/common-hal/pulseio/PWMOut.c:162 +#: ports/nrf/common-hal/pulseio/PWMOut.c:161 msgid "All PWM peripherals are in use" msgstr "" @@ -935,19 +936,19 @@ msgstr "" msgid "bad compile mode" msgstr "" -#: py/builtinimport.c:338 +#: py/builtinimport.c:336 msgid "cannot perform relative import" msgstr "" -#: py/builtinimport.c:422 py/builtinimport.c:534 +#: py/builtinimport.c:420 py/builtinimport.c:532 msgid "module not found" msgstr "" -#: py/builtinimport.c:425 py/builtinimport.c:537 +#: py/builtinimport.c:423 py/builtinimport.c:535 msgid "no module named '%q'" msgstr "" -#: py/builtinimport.c:512 +#: py/builtinimport.c:510 msgid "relative import" msgstr "" @@ -1994,7 +1995,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536." msgstr "" #: shared-bindings/audiobusio/I2SOut.c:225 -#: shared-bindings/audioio/AudioOut.c:223 +#: shared-bindings/audioio/AudioOut.c:226 msgid "Not playing" msgstr "" @@ -2201,7 +2202,7 @@ msgstr "" #: shared-bindings/microcontroller/Pin.c:89 #: shared-bindings/neopixel_write/__init__.c:67 -#: shared-bindings/pulseio/PulseOut.c:75 +#: shared-bindings/pulseio/PulseOut.c:76 msgid "Expected a %q" msgstr "" @@ -2263,7 +2264,7 @@ msgstr "" msgid "Read-only" msgstr "" -#: shared-bindings/pulseio/PulseOut.c:134 +#: shared-bindings/pulseio/PulseOut.c:135 msgid "Array must contain halfwords (type 'H')" msgstr "" @@ -2292,7 +2293,7 @@ msgstr "" msgid "RTC calibration is not supported on this board" msgstr "" -#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64 +#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81 msgid "no available NIC" msgstr "" @@ -2320,15 +2321,15 @@ msgstr "" msgid "time.struct_time() takes a 9-sequence" msgstr "" -#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250 +#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264 msgid "Tuple or struct_time argument required" msgstr "" -#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255 +#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269 msgid "function takes exactly 9 arguments" msgstr "" -#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259 +#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273 msgid "timestamp out of range for platform time_t" msgstr "" diff --git a/locale/de_DE.po b/locale/de_DE.po index 3f7b22702..11cac7110 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-11 22:08+1100\n" +"POT-Creation-Date: 2018-10-25 12:20+1100\n" "PO-Revision-Date: 2018-07-27 11:55-0700\n" "Last-Translator: Sebastian Plamauer\n" "Language-Team: \n" @@ -93,7 +93,7 @@ msgstr "struct: index außerhalb gültigen Bereichs" #: extmod/moduheapq.c:38 msgid "heap must be a list" -msgstr "heap muss eine list sein" +msgstr "heap muss eine Liste sein" #: extmod/moduheapq.c:86 extmod/modutimeq.c:147 extmod/modutimeq.c:172 msgid "empty heap" @@ -147,7 +147,7 @@ msgstr "abort() wurde aufgerufen" msgid "invalid arguments" msgstr "ungültige argumente" -#: lib/utils/pyexec.c:97 py/builtinimport.c:253 +#: lib/utils/pyexec.c:97 py/builtinimport.c:251 msgid "script compilation not supported" msgstr "kompilieren von Skripten ist nicht unterstützt" @@ -185,12 +185,12 @@ msgstr "Du hast das Starten im Sicherheitsmodus ausgelöst durch " #: main.c:252 msgid "To exit, please reset the board without " -msgstr "Zum beenden bitte resete das board ohne " +msgstr "Zum beenden bitte resette das board ohne " #: main.c:259 msgid "" "You are running in safe mode which means something really bad happened.\n" -msgstr "Sicherheitsmodus aktive, etwas wirklich schlechtes ist passiert.\n" +msgstr "Sicherheitsmodus aktiv, etwas wirklich schlechtes ist passiert.\n" #: main.c:261 msgid "Looks like our core CircuitPython code crashed hard. Whoops!\n" @@ -214,8 +214,8 @@ msgid "" "enough power for the whole circuit and press reset (after ejecting " "CIRCUITPY).\n" msgstr "" -"genug Strom für den ganzen Schaltkreis liefert und drücke reset (nach " -"demsicheren Auswerfen von CIRCUITPY.)\n" +"genug Strom für den ganzen Schaltkreis liefert und drücke reset (nach dem " +"sicheren Auswerfen von CIRCUITPY.)\n" #: main.c:270 msgid "Press any key to enter the REPL. Use CTRL-D to reload." @@ -225,7 +225,7 @@ msgstr "" #: main.c:426 msgid "soft reboot\n" -msgstr "weicher reboot\n" +msgstr "soft reboot\n" #: ports/atmel-samd/audio_dma.c:209 #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:361 @@ -268,7 +268,7 @@ msgstr "AnalogOut ist an diesem Pin nicht unterstützt" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:147 #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:150 msgid "Invalid bit clock pin" -msgstr "Ungülgites bit clock pin" +msgstr "Ungültiges bit clock pin" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:153 msgid "Bit clock and word select must share a clock unit" @@ -284,7 +284,7 @@ msgstr "Ungültiger data pin" #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:145 #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:150 msgid "Serializer in use" -msgstr "Serilaizer wird benutzt" +msgstr "Serializer wird benutzt" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:230 msgid "Clock unit in use" @@ -300,12 +300,12 @@ msgid "Too many channels in sample." msgstr "Zu viele Kanäle im sample" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417 msgid "No DMA channel found" msgstr "Kein DMA Kanal gefunden" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419 msgid "Unable to allocate buffers for signed conversion" msgstr "Konnte keine Buffer für Vorzeichenumwandlung allozieren" @@ -321,43 +321,44 @@ msgstr "Nur 8 oder 16 bit mono mit " msgid "sampling rate out of range" msgstr "Abtastrate außerhalb der Reichweite" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132 msgid "DAC already in use" msgstr "DAC wird schon benutzt" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136 msgid "Right channel unsupported" msgstr "Rechter Kanal wird nicht unterstützt" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116 #: ports/atmel-samd/common-hal/touchio/TouchIn.c:65 msgid "Invalid pin" msgstr "Ungültiger Pin" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147 msgid "Invalid pin for left channel" msgstr "Ungültiger Pin für linken Kanal" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151 msgid "Invalid pin for right channel" msgstr "Ungültiger Pin für rechten Kanal" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154 msgid "Cannot output both channels on the same pin" msgstr "Kann nicht beite Kanäle auf dem gleichen Pin ausgeben" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189 #: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110 +#: ports/nrf/common-hal/pulseio/PulseOut.c:107 msgid "All timers in use" msgstr "Alle timer werden benutzt" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285 msgid "All event channels in use" -msgstr "Alle event Kanälre werden benutzt" +msgstr "Alle event Kanäle werden benutzt" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375 #, c-format msgid "Sample rate too high. It must be less than %d" msgstr "" @@ -370,7 +371,7 @@ msgstr "Nicht genug Pins vorhanden" #: ports/atmel-samd/common-hal/busio/SPI.c:132 #: ports/atmel-samd/common-hal/busio/UART.c:119 #: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45 -#: ports/nrf/common-hal/busio/I2C.c:81 +#: ports/nrf/common-hal/busio/I2C.c:82 msgid "Invalid pins" msgstr "Ungültige Pins" @@ -380,7 +381,7 @@ msgstr "SDA oder SCL brauchen pull up" #: ports/atmel-samd/common-hal/busio/I2C.c:121 msgid "Unsupported baudrate" -msgstr "Baudrate wird nicht unterstütz" +msgstr "Baudrate wird nicht unterstützt" #: ports/atmel-samd/common-hal/busio/UART.c:66 msgid "bytes > 8 bits not supported" @@ -422,7 +423,7 @@ msgstr "Reset zum bootloader nicht möglich da bootloader nicht vorhanden" #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369 -#: ports/nrf/common-hal/pulseio/PWMOut.c:120 +#: ports/nrf/common-hal/pulseio/PWMOut.c:119 #: ports/nrf/common-hal/pulseio/PWMOut.c:233 msgid "Invalid PWM frequency" msgstr "Ungültige PWM Frequenz" @@ -546,23 +547,25 @@ msgstr "Minimale PWM Frequenz ist %dHz" #, c-format msgid "Multiple PWM frequencies not supported. PWM already set to %dhz." msgstr "" +"Mehrere PWM Frequenzen nicht unterstützt. PWM bereits auf %dHz gesetzt." #: ports/esp8266/common-hal/pulseio/PWMOut.c:77 ports/esp8266/machine_pwm.c:70 #, c-format msgid "PWM not supported on pin %d" -msgstr "" +msgstr "PWM nicht unterstützt an Pin %d" #: ports/esp8266/common-hal/pulseio/PulseIn.c:78 msgid "No PulseIn support for %q" -msgstr "" +msgstr "Keine PulseIn Unterstützung für %q" #: ports/esp8266/common-hal/storage/__init__.c:34 msgid "Unable to remount filesystem" -msgstr "" +msgstr "Dateisystem kann nicht wieder gemounted werden." #: ports/esp8266/common-hal/storage/__init__.c:38 msgid "Use esptool to erase flash and re-upload Python instead" msgstr "" +"Benutze esptool um den flash zu löschen und stattdessen Python hochzuladen" #: ports/esp8266/esp_mphal.c:154 msgid "C-level assert" @@ -571,102 +574,103 @@ msgstr "" #: ports/esp8266/machine_adc.c:57 #, c-format msgid "not a valid ADC Channel: %d" -msgstr "" +msgstr "Kein gültiger ADC Kanal: %d" #: ports/esp8266/machine_hspi.c:131 ports/esp8266/machine_hspi.c:137 msgid "impossible baudrate" -msgstr "" +msgstr "Unmögliche Baudrate" #: ports/esp8266/machine_pin.c:129 msgid "expecting a pin" -msgstr "" +msgstr "Ein Pin wird erwartet" #: ports/esp8266/machine_pin.c:284 msgid "Pin(16) doesn't support pull" -msgstr "" +msgstr "Pin(16) unterstützt kein pull" #: ports/esp8266/machine_pin.c:323 msgid "invalid pin" -msgstr "" +msgstr "Ungültiger Pin" #: ports/esp8266/machine_pin.c:389 msgid "pin does not have IRQ capabilities" -msgstr "" +msgstr "Pin hat keine IRQ Fähigkeiten" #: ports/esp8266/machine_rtc.c:185 msgid "buffer too long" -msgstr "" +msgstr "Buffer zu lang" #: ports/esp8266/machine_rtc.c:209 ports/esp8266/machine_rtc.c:223 #: ports/esp8266/machine_rtc.c:246 msgid "invalid alarm" -msgstr "" +msgstr "Ungültiger Alarm" #: ports/esp8266/machine_uart.c:169 #, c-format msgid "UART(%d) does not exist" -msgstr "" +msgstr "UART(%d) existiert nicht" #: ports/esp8266/machine_uart.c:219 msgid "UART(1) can't read" -msgstr "" +msgstr "UART(1) kann nicht lesen" #: ports/esp8266/modesp.c:119 msgid "len must be multiple of 4" -msgstr "" +msgstr "len muss ein vielfaches von 4 sein" #: ports/esp8266/modesp.c:274 #, c-format msgid "memory allocation failed, allocating %u bytes for native code" msgstr "" +"Speicherallozierung fehlgeschlagen, alloziere %u Bytes für nativen Code" #: ports/esp8266/modesp.c:317 msgid "flash location must be below 1MByte" -msgstr "" +msgstr "flash location muss unter 1MByte sein" #: ports/esp8266/modmachine.c:63 msgid "frequency can only be either 80Mhz or 160MHz" -msgstr "" +msgstr "Die Frequenz kann nur 80Mhz oder 160Mhz sein" #: ports/esp8266/modnetwork.c:61 msgid "AP required" -msgstr "" +msgstr "AP erforderlich" #: ports/esp8266/modnetwork.c:61 msgid "STA required" -msgstr "" +msgstr "STA erforderlich" #: ports/esp8266/modnetwork.c:87 msgid "Cannot update i/f status" -msgstr "" +msgstr "Kann i/f Status nicht updaten" #: ports/esp8266/modnetwork.c:142 msgid "Cannot set STA config" -msgstr "" +msgstr "Kann STA Konfiguration nicht setzen" #: ports/esp8266/modnetwork.c:144 msgid "Cannot connect to AP" -msgstr "" +msgstr "Kann nicht zu AP verbinden" #: ports/esp8266/modnetwork.c:152 msgid "Cannot disconnect from AP" -msgstr "" +msgstr "Kann nicht trennen von AP" #: ports/esp8266/modnetwork.c:173 msgid "unknown status param" -msgstr "" +msgstr "Unbekannter Statusparameter" #: ports/esp8266/modnetwork.c:222 msgid "STA must be active" -msgstr "" +msgstr "STA muss aktiv sein" #: ports/esp8266/modnetwork.c:239 msgid "scan failed" -msgstr "" +msgstr "Scan fehlgeschlagen" #: ports/esp8266/modnetwork.c:306 msgid "wifi_set_ip_info() failed" -msgstr "" +msgstr "wifi_set_ip_info() fehlgeschlagen" #: ports/esp8266/modnetwork.c:319 msgid "either pos or kw args are allowed" @@ -704,7 +708,7 @@ msgstr "" msgid "AnalogOut functionality not supported" msgstr "" -#: ports/nrf/common-hal/busio/I2C.c:95 +#: ports/nrf/common-hal/busio/I2C.c:96 #, fuzzy msgid "All I2C peripherals are in use" msgstr "Alle timer werden benutzt" @@ -742,7 +746,7 @@ msgstr "" msgid "Can not get temperature. status: 0x%02x" msgstr "" -#: ports/nrf/common-hal/pulseio/PWMOut.c:162 +#: ports/nrf/common-hal/pulseio/PWMOut.c:161 #, fuzzy msgid "All PWM peripherals are in use" msgstr "Alle timer werden benutzt" @@ -949,19 +953,19 @@ msgstr "" msgid "bad compile mode" msgstr "" -#: py/builtinimport.c:338 +#: py/builtinimport.c:336 msgid "cannot perform relative import" msgstr "" -#: py/builtinimport.c:422 py/builtinimport.c:534 +#: py/builtinimport.c:420 py/builtinimport.c:532 msgid "module not found" msgstr "" -#: py/builtinimport.c:425 py/builtinimport.c:537 +#: py/builtinimport.c:423 py/builtinimport.c:535 msgid "no module named '%q'" msgstr "" -#: py/builtinimport.c:512 +#: py/builtinimport.c:510 msgid "relative import" msgstr "" @@ -2009,7 +2013,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536." msgstr "" #: shared-bindings/audiobusio/I2SOut.c:225 -#: shared-bindings/audioio/AudioOut.c:223 +#: shared-bindings/audioio/AudioOut.c:226 msgid "Not playing" msgstr "" @@ -2220,7 +2224,7 @@ msgstr "" #: shared-bindings/microcontroller/Pin.c:89 #: shared-bindings/neopixel_write/__init__.c:67 -#: shared-bindings/pulseio/PulseOut.c:75 +#: shared-bindings/pulseio/PulseOut.c:76 msgid "Expected a %q" msgstr "" @@ -2282,7 +2286,7 @@ msgstr "" msgid "Read-only" msgstr "" -#: shared-bindings/pulseio/PulseOut.c:134 +#: shared-bindings/pulseio/PulseOut.c:135 msgid "Array must contain halfwords (type 'H')" msgstr "" @@ -2311,7 +2315,7 @@ msgstr "" msgid "RTC calibration is not supported on this board" msgstr "" -#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64 +#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81 msgid "no available NIC" msgstr "" @@ -2339,15 +2343,15 @@ msgstr "" msgid "time.struct_time() takes a 9-sequence" msgstr "" -#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250 +#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264 msgid "Tuple or struct_time argument required" msgstr "" -#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255 +#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269 msgid "function takes exactly 9 arguments" msgstr "" -#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259 +#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273 msgid "timestamp out of range for platform time_t" msgstr "" diff --git a/locale/en_US.po b/locale/en_US.po index 8bc73ad5c..db06a23ff 100644 --- a/locale/en_US.po +++ b/locale/en_US.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-11 22:08+1100\n" +"POT-Creation-Date: 2018-10-25 12:20+1100\n" "PO-Revision-Date: 2018-07-27 11:55-0700\n" "Last-Translator: \n" "Language-Team: \n" @@ -147,7 +147,7 @@ msgstr "" msgid "invalid arguments" msgstr "" -#: lib/utils/pyexec.c:97 py/builtinimport.c:253 +#: lib/utils/pyexec.c:97 py/builtinimport.c:251 msgid "script compilation not supported" msgstr "" @@ -291,12 +291,12 @@ msgid "Too many channels in sample." msgstr "" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417 msgid "No DMA channel found" msgstr "" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419 msgid "Unable to allocate buffers for signed conversion" msgstr "" @@ -312,43 +312,44 @@ msgstr "" msgid "sampling rate out of range" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132 msgid "DAC already in use" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136 msgid "Right channel unsupported" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116 #: ports/atmel-samd/common-hal/touchio/TouchIn.c:65 msgid "Invalid pin" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147 msgid "Invalid pin for left channel" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151 msgid "Invalid pin for right channel" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154 msgid "Cannot output both channels on the same pin" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189 #: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110 +#: ports/nrf/common-hal/pulseio/PulseOut.c:107 msgid "All timers in use" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285 msgid "All event channels in use" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375 #, c-format msgid "Sample rate too high. It must be less than %d" msgstr "" @@ -361,7 +362,7 @@ msgstr "" #: ports/atmel-samd/common-hal/busio/SPI.c:132 #: ports/atmel-samd/common-hal/busio/UART.c:119 #: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45 -#: ports/nrf/common-hal/busio/I2C.c:81 +#: ports/nrf/common-hal/busio/I2C.c:82 msgid "Invalid pins" msgstr "" @@ -413,7 +414,7 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369 -#: ports/nrf/common-hal/pulseio/PWMOut.c:120 +#: ports/nrf/common-hal/pulseio/PWMOut.c:119 #: ports/nrf/common-hal/pulseio/PWMOut.c:233 msgid "Invalid PWM frequency" msgstr "" @@ -695,7 +696,7 @@ msgstr "" msgid "AnalogOut functionality not supported" msgstr "" -#: ports/nrf/common-hal/busio/I2C.c:95 +#: ports/nrf/common-hal/busio/I2C.c:96 msgid "All I2C peripherals are in use" msgstr "" @@ -729,7 +730,7 @@ msgstr "" msgid "Can not get temperature. status: 0x%02x" msgstr "" -#: ports/nrf/common-hal/pulseio/PWMOut.c:162 +#: ports/nrf/common-hal/pulseio/PWMOut.c:161 msgid "All PWM peripherals are in use" msgstr "" @@ -935,19 +936,19 @@ msgstr "" msgid "bad compile mode" msgstr "" -#: py/builtinimport.c:338 +#: py/builtinimport.c:336 msgid "cannot perform relative import" msgstr "" -#: py/builtinimport.c:422 py/builtinimport.c:534 +#: py/builtinimport.c:420 py/builtinimport.c:532 msgid "module not found" msgstr "" -#: py/builtinimport.c:425 py/builtinimport.c:537 +#: py/builtinimport.c:423 py/builtinimport.c:535 msgid "no module named '%q'" msgstr "" -#: py/builtinimport.c:512 +#: py/builtinimport.c:510 msgid "relative import" msgstr "" @@ -1994,7 +1995,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536." msgstr "" #: shared-bindings/audiobusio/I2SOut.c:225 -#: shared-bindings/audioio/AudioOut.c:223 +#: shared-bindings/audioio/AudioOut.c:226 msgid "Not playing" msgstr "" @@ -2201,7 +2202,7 @@ msgstr "" #: shared-bindings/microcontroller/Pin.c:89 #: shared-bindings/neopixel_write/__init__.c:67 -#: shared-bindings/pulseio/PulseOut.c:75 +#: shared-bindings/pulseio/PulseOut.c:76 msgid "Expected a %q" msgstr "" @@ -2263,7 +2264,7 @@ msgstr "" msgid "Read-only" msgstr "" -#: shared-bindings/pulseio/PulseOut.c:134 +#: shared-bindings/pulseio/PulseOut.c:135 msgid "Array must contain halfwords (type 'H')" msgstr "" @@ -2292,7 +2293,7 @@ msgstr "" msgid "RTC calibration is not supported on this board" msgstr "" -#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64 +#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81 msgid "no available NIC" msgstr "" @@ -2320,15 +2321,15 @@ msgstr "" msgid "time.struct_time() takes a 9-sequence" msgstr "" -#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250 +#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264 msgid "Tuple or struct_time argument required" msgstr "" -#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255 +#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269 msgid "function takes exactly 9 arguments" msgstr "" -#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259 +#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273 msgid "timestamp out of range for platform time_t" msgstr "" diff --git a/locale/es.po b/locale/es.po index ee97a192c..fd92071c0 100644 --- a/locale/es.po +++ b/locale/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-11 22:08+1100\n" +"POT-Creation-Date: 2018-10-25 12:20+1100\n" "PO-Revision-Date: 2018-08-24 22:56-0500\n" "Last-Translator: \n" "Language-Team: \n" @@ -65,7 +65,7 @@ msgstr "string de longitud impar" #: extmod/modubinascii.c:101 msgid "non-hex digit found" -msgstr "se encontró un digito no hexadecimal" +msgstr "se encontró un digito non-hex" #: extmod/modubinascii.c:169 msgid "incorrect padding" @@ -81,7 +81,7 @@ msgstr "No se puede obtener inequívocamente sizeof escalar" #: extmod/moductypes.c:397 msgid "struct: no fields" -msgstr "struct: no fields" +msgstr "struct: sin campos" #: extmod/moductypes.c:530 msgid "struct: cannot index" @@ -121,7 +121,7 @@ msgstr "certificado inválido" #: extmod/modutimeq.c:131 msgid "queue overflow" -msgstr "desborde de queue" +msgstr "desbordamiento de queue" #: extmod/moduzlib.c:98 msgid "compression header" @@ -132,16 +132,14 @@ msgid "invalid dupterm index" msgstr "index dupterm inválido" #: extmod/vfs_fat.c:426 py/moduerrno.c:150 -#, fuzzy msgid "Read-only filesystem" -msgstr "sistema de archivos de Solo-Lectura" +msgstr "Sistema de archivos de solo-Lectura" #: extmod/vfs_posix_file.c:48 ports/unix/file.c:50 py/objstringio.c:43 msgid "I/O operation on closed file" msgstr "Operación I/O en archivo cerrado" #: lib/embed/abort_.c:8 -#, fuzzy msgid "abort() called" msgstr "se llamó abort()" @@ -149,7 +147,7 @@ msgstr "se llamó abort()" msgid "invalid arguments" msgstr "argumentos inválidos" -#: lib/utils/pyexec.c:97 py/builtinimport.c:253 +#: lib/utils/pyexec.c:97 py/builtinimport.c:251 msgid "script compilation not supported" msgstr "script de compilación no soportado" @@ -158,21 +156,20 @@ msgid " output:\n" msgstr " salida:\n" #: main.c:167 main.c:240 -#, fuzzy msgid "" "Auto-reload is on. Simply save files over USB to run them or enter REPL to " "disable.\n" msgstr "" "Auto-reload habilitado. Simplemente guarda los archivos via USB para " -"ejecutarlos o entra REPL para desabilitarlos.\n" +"ejecutarlos o entra al REPL para desabilitarlos.\n" #: main.c:169 msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Ejecutando en modo seguro! Auto-recarga esta deshabilitado.\n" +msgstr "Ejecutando en modo seguro! La auto-recarga esta deshabilitada.\n" #: main.c:171 main.c:242 msgid "Auto-reload is off.\n" -msgstr "Auto-reload deshabilitado.\n" +msgstr "Auto-recarga deshabilitada.\n" #: main.c:185 msgid "Running in safe mode! Not running saved code.\n" @@ -184,7 +181,7 @@ msgstr "ADVERTENCIA: El nombre de archivo de tu código tiene dos extensiones\n" #: main.c:249 msgid "You requested starting safe mode by " -msgstr "Solicitaste iniciar en modo seguro con " +msgstr "Solicitaste iniciar en modo seguro por " #: main.c:252 msgid "To exit, please reset the board without " @@ -199,29 +196,29 @@ msgstr "" #: main.c:261 msgid "Looks like our core CircuitPython code crashed hard. Whoops!\n" -msgstr "" -"Parece que nuestro código del núcleo CircuitPython dejó de funcionar. " -"Whoops!\n" +msgstr "Parece que nuestro código CircuitPython dejó de funcionar. Whoops!\n" #: main.c:262 #, fuzzy msgid "Please file an issue here with the contents of your CIRCUITPY drive:\n" msgstr "" -"Por favor registra un problema aquí con los contenidos de tu unidad de " -"almacenamiento CIRCUITPY:\n" +"Por favor registra un issue en el siguiente URL con los contenidos de tu " +"unidad de almacenamiento CIRCUITPY:\n" #: main.c:265 msgid "" "The microcontroller's power dipped. Please make sure your power supply " "provides\n" msgstr "" +"La alimentación del microcontrolador cayó. Por favor asegurate de que tu " +"fuente de alimentación provee\n" #: main.c:266 msgid "" "enough power for the whole circuit and press reset (after ejecting " "CIRCUITPY).\n" msgstr "" -"suficiente poder para todo el circuito y pulsa reset (después de expulsar " +"suficiente poder para todo el circuito y presiona reset (después de expulsar " "CIRCUITPY).\n" #: main.c:270 @@ -261,7 +258,7 @@ msgstr "Sin bus UART por default" #: ports/atmel-samd/common-hal/analogio/AnalogIn.c:63 #: ports/nrf/common-hal/analogio/AnalogIn.c:39 msgid "Pin does not have ADC capabilities" -msgstr "pin no tiene capacidades ADC" +msgstr "Pin no tiene capacidad ADC" #: ports/atmel-samd/common-hal/analogio/AnalogOut.c:49 msgid "No DAC on chip" @@ -278,7 +275,7 @@ msgstr "Pin bit clock inválido" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:153 msgid "Bit clock and word select must share a clock unit" -msgstr "Bit clock y Word select deben compartir la unidad de reloj" +msgstr "Bit clock y word select deben compartir una unidad de reloj" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:156 #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:130 @@ -299,19 +296,19 @@ msgstr "Clock unit está siendo utilizado" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:240 #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:172 msgid "Unable to find free GCLK" -msgstr "No se pudo encontrar un GCLK disponible" +msgstr "No se pudo encontrar un GCLK libre" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:254 msgid "Too many channels in sample." -msgstr "Demasiados canales en sample" +msgstr "Demasiados canales en sample." #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417 msgid "No DMA channel found" msgstr "No se encontró el canal DMA" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419 msgid "Unable to allocate buffers for signed conversion" msgstr "No se pudieron asignar buffers para la conversión con signo" @@ -321,52 +318,53 @@ msgstr "Pin clock inválido" #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:134 msgid "Only 8 or 16 bit mono with " -msgstr "Solo mono de 8 o 16 bit con" +msgstr "Solo mono de 8 o 16 bit con " #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c:167 msgid "sampling rate out of range" -msgstr "velocidad de muestreo fuera de rango" +msgstr "frecuencia de muestreo fuera de rango" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132 msgid "DAC already in use" msgstr "DAC ya está siendo utilizado" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136 msgid "Right channel unsupported" -msgstr "El canal derecho no tiene soporte" +msgstr "Canal derecho no soportado" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116 #: ports/atmel-samd/common-hal/touchio/TouchIn.c:65 msgid "Invalid pin" -msgstr "pin inválido" +msgstr "Pin inválido" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147 msgid "Invalid pin for left channel" msgstr "Pin inválido para canal izquierdo" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151 msgid "Invalid pin for right channel" msgstr "Pin inválido para canal derecho" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154 msgid "Cannot output both channels on the same pin" -msgstr "No es posible utilizar el mismo pin para ambos canales" +msgstr "No se puede tener ambos canales en el mismo pin" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189 #: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110 +#: ports/nrf/common-hal/pulseio/PulseOut.c:107 msgid "All timers in use" -msgstr "Todos los timers están siendo utilizados" +msgstr "Todos los timers en uso" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285 msgid "All event channels in use" -msgstr "Todos los canales de eventos están siendo utilizados" +msgstr "Todos los event channels en uso" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375 #, c-format msgid "Sample rate too high. It must be less than %d" -msgstr "Frecuencia de muestreo demasiado alta. Debe ser menor que %d" +msgstr "Frecuencia de muestreo demasiado alta. Debe ser menor a %d" #: ports/atmel-samd/common-hal/busio/I2C.c:71 msgid "Not enough pins available" @@ -376,7 +374,7 @@ msgstr "No hay suficientes pines disponibles" #: ports/atmel-samd/common-hal/busio/SPI.c:132 #: ports/atmel-samd/common-hal/busio/UART.c:119 #: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45 -#: ports/nrf/common-hal/busio/I2C.c:81 +#: ports/nrf/common-hal/busio/I2C.c:82 msgid "Invalid pins" msgstr "pines inválidos" @@ -386,25 +384,25 @@ msgstr "SDA o SCL necesitan una pull up" #: ports/atmel-samd/common-hal/busio/I2C.c:121 msgid "Unsupported baudrate" -msgstr "Baudrate sin soporte" +msgstr "Baudrate no soportado" #: ports/atmel-samd/common-hal/busio/UART.c:66 msgid "bytes > 8 bits not supported" -msgstr "bytes > 8 bits no son soportados" +msgstr "bytes > 8 bits no soportados" #: ports/atmel-samd/common-hal/busio/UART.c:72 #: ports/nrf/common-hal/busio/UART.c:82 msgid "tx and rx cannot both be None" -msgstr "tx y rx no pueden ser ambos None" +msgstr "Ambos tx y rx no pueden ser None" #: ports/atmel-samd/common-hal/busio/UART.c:145 #: ports/nrf/common-hal/busio/UART.c:115 msgid "Failed to allocate RX buffer" -msgstr "Fallo la asignación del buffer RX" +msgstr "Ha fallado la asignación del buffer RX" #: ports/atmel-samd/common-hal/busio/UART.c:153 msgid "Could not initialize UART" -msgstr "No se pudo inicializar la UART" +msgstr "No se puede inicializar la UART" #: ports/atmel-samd/common-hal/busio/UART.c:240 #: ports/nrf/common-hal/busio/UART.c:149 @@ -419,16 +417,16 @@ msgstr "Sin pin TX" #: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c:170 #: ports/nrf/common-hal/digitalio/DigitalInOut.c:142 msgid "Cannot get pull while in output mode" -msgstr "No se puede obtener pull mientras en modo de salida" +msgstr "No puede ser pull mientras este en modo de salida" #: ports/atmel-samd/common-hal/microcontroller/__init__.c:74 #: ports/esp8266/common-hal/microcontroller/__init__.c:64 msgid "Cannot reset into bootloader because no bootloader is present." -msgstr "No se puede reiniciar en bootloader porque no hay bootloader presente." +msgstr "No se puede reiniciar a bootloader porque no hay bootloader presente." #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369 -#: ports/nrf/common-hal/pulseio/PWMOut.c:120 +#: ports/nrf/common-hal/pulseio/PWMOut.c:119 #: ports/nrf/common-hal/pulseio/PWMOut.c:233 msgid "Invalid PWM frequency" msgstr "Frecuencia PWM inválida" @@ -439,7 +437,7 @@ msgstr "Todos los timers para este pin están siendo utilizados" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:110 msgid "No hardware support on pin" -msgstr "pin no tiene soporte en hardware" +msgstr "Sin soporte de hardware en pin" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:113 msgid "EXTINT channel already in use" @@ -449,12 +447,12 @@ msgstr "El canal EXTINT ya está siendo utilizado" #: ports/esp8266/common-hal/pulseio/PulseIn.c:86 #, c-format msgid "Failed to allocate RX buffer of %d bytes" -msgstr "Fallo la asignación del buffer RX de %d bytes" +msgstr "Falló la asignación del buffer RX de %d bytes" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:205 #: ports/esp8266/common-hal/pulseio/PulseIn.c:151 msgid "pop from an empty PulseIn" -msgstr "pop en un PulseIn vacío" +msgstr "pop de un PulseIn vacío" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c:237 #: ports/esp8266/common-hal/pulseio/PulseIn.c:182 py/obj.c:420 @@ -475,7 +473,7 @@ msgstr "El canal EXTINT ya está siendo utilizado" #: ports/atmel-samd/common-hal/rtc/RTC.c:101 msgid "calibration value out of range +/-127" -msgstr "Valor de calibración fuera de rango +/-127" +msgstr "Valor de calibración fuera del rango +/-127" #: ports/atmel-samd/common-hal/storage/__init__.c:48 msgid "Cannot remount '/' when USB is active." @@ -503,11 +501,11 @@ msgstr "Error USB" #: ports/esp8266/common-hal/analogio/AnalogIn.c:43 msgid "Pin %q does not have ADC capabilities" -msgstr "Pin %q no tiene capacidades ADC" +msgstr "Pin %q no tiene capacidades de ADC" #: ports/esp8266/common-hal/analogio/AnalogOut.c:39 msgid "No hardware support for analog out." -msgstr "Sin soporte de hardware para salida análoga" +msgstr "Sin soporte de hardware para analog out" #: ports/esp8266/common-hal/busio/SPI.c:72 msgid "Pins not valid for SPI" @@ -527,21 +525,21 @@ msgstr "stop bits inválidos" #: ports/esp8266/common-hal/digitalio/DigitalInOut.c:200 msgid "ESP8266 does not support pull down." -msgstr "ESP8266 no tiene soporte para pull down" +msgstr "ESP8266 no soporta pull down." #: ports/esp8266/common-hal/digitalio/DigitalInOut.c:210 msgid "GPIO16 does not support pull up." -msgstr "GPIO16 no tiene soporte para pull up." +msgstr "GPIO16 no soporta pull up." #: ports/esp8266/common-hal/microcontroller/__init__.c:66 msgid "ESP8226 does not support safe mode." -msgstr "ESP8226 no tiene soporte para modo seguro" +msgstr "ESP8226 no soporta modo seguro." #: ports/esp8266/common-hal/pulseio/PWMOut.c:54 #: ports/esp8266/common-hal/pulseio/PWMOut.c:113 #, c-format msgid "Maximum PWM frequency is %dhz." -msgstr "La frecuencia máxima del PWM es %dhz" +msgstr "La frecuencia máxima del PWM es %dhz." #: ports/esp8266/common-hal/pulseio/PWMOut.c:57 #: ports/esp8266/common-hal/pulseio/PWMOut.c:116 @@ -552,7 +550,7 @@ msgstr "La frecuencia mínima del PWM es 1hz" #, c-format msgid "Multiple PWM frequencies not supported. PWM already set to %dhz." msgstr "" -"PWM de múltiples frecuencias no tiene soporte. El PWM ya se estableció a %dhz" +"PWM de múltiples frecuencias no soportado. El PWM ya se estableció a %dhz" #: ports/esp8266/common-hal/pulseio/PWMOut.c:77 ports/esp8266/machine_pwm.c:70 #, c-format @@ -561,11 +559,11 @@ msgstr "El pin %d no soporta PWM" #: ports/esp8266/common-hal/pulseio/PulseIn.c:78 msgid "No PulseIn support for %q" -msgstr "%q no tiene soporte para PulseIn" +msgstr "Sin soporte PulseIn para %q" #: ports/esp8266/common-hal/storage/__init__.c:34 msgid "Unable to remount filesystem" -msgstr "No se pudo montar de nuevo el sistema de archivos" +msgstr "Incapaz de montar de nuevo el sistema de archivos" #: ports/esp8266/common-hal/storage/__init__.c:38 msgid "Use esptool to erase flash and re-upload Python instead" @@ -590,7 +588,7 @@ msgstr "esperando un pin" #: ports/esp8266/machine_pin.c:284 msgid "Pin(16) doesn't support pull" -msgstr "Pin(16) no tiene soporte para pull" +msgstr "Pin(16) no soporta para pull" #: ports/esp8266/machine_pin.c:323 msgid "invalid pin" @@ -598,7 +596,7 @@ msgstr "pin inválido" #: ports/esp8266/machine_pin.c:389 msgid "pin does not have IRQ capabilities" -msgstr "pin no tiene capacidades IRQ" +msgstr "pin sin capacidades IRQ" #: ports/esp8266/machine_rtc.c:185 msgid "buffer too long" @@ -625,8 +623,7 @@ msgstr "len debe de ser múltiple de 4" #: ports/esp8266/modesp.c:274 #, c-format msgid "memory allocation failed, allocating %u bytes for native code" -msgstr "" -"la asignación de memoria ha fallado, asignando %u bytes para código nativo" +msgstr "falló la asignación de memoria, asignando %u bytes para código nativo" #: ports/esp8266/modesp.c:317 msgid "flash location must be below 1MByte" @@ -638,11 +635,11 @@ msgstr "la frecuencia solo puede ser 80MHz o 160MHz" #: ports/esp8266/modnetwork.c:61 msgid "AP required" -msgstr "AP necesario" +msgstr "AP requerido" #: ports/esp8266/modnetwork.c:61 msgid "STA required" -msgstr "STA necesario" +msgstr "STA requerido" #: ports/esp8266/modnetwork.c:87 msgid "Cannot update i/f status" @@ -712,13 +709,13 @@ msgstr "parámetro config desconocido" msgid "AnalogOut functionality not supported" msgstr "Funcionalidad AnalogOut no soportada" -#: ports/nrf/common-hal/busio/I2C.c:95 +#: ports/nrf/common-hal/busio/I2C.c:96 msgid "All I2C peripherals are in use" -msgstr "Todos los timers están siendo utilizados" +msgstr "Todos los timers están siendo usados" #: ports/nrf/common-hal/busio/SPI.c:115 msgid "All SPI peripherals are in use" -msgstr "Todos los timers están siendo utilizados" +msgstr "Todos los timers están siendo usados" #: ports/nrf/common-hal/busio/UART.c:48 #, c-format @@ -746,10 +743,9 @@ msgstr "busio.UART no disponible" msgid "Can not get temperature. status: 0x%02x" msgstr "No se puede obtener la temperatura. status: 0x%02x" -#: ports/nrf/common-hal/pulseio/PWMOut.c:162 -#, fuzzy +#: ports/nrf/common-hal/pulseio/PWMOut.c:161 msgid "All PWM peripherals are in use" -msgstr "Todos los timers están siendo utilizados" +msgstr "Todos los periféricos PWM en uso" #: ports/nrf/drivers/bluetooth/ble_drv.c:199 msgid "Cannot apply GAP parameters." @@ -765,16 +761,16 @@ msgstr "No se puede consultar la dirección del dispositivo." #: ports/nrf/drivers/bluetooth/ble_drv.c:264 msgid "Can not add Vendor Specific 128-bit UUID." -msgstr "No se puede agregar el UUID de 128-bits Especifico del Vendedor." +msgstr "No se puede agregar el Vendor Specific 128-bit UUID." #: ports/nrf/drivers/bluetooth/ble_drv.c:284 #: ports/nrf/drivers/bluetooth/ble_drv.c:298 msgid "Can not add Service." -msgstr "No se puede agregar el Servicio" +msgstr "No se puede agregar el Servicio." #: ports/nrf/drivers/bluetooth/ble_drv.c:373 msgid "Can not add Characteristic." -msgstr "No se puede agregar la Característica" +msgstr "No se puede agregar la Característica." #: ports/nrf/drivers/bluetooth/ble_drv.c:400 msgid "Can not apply device name in the stack." @@ -854,15 +850,15 @@ msgstr "Longitud de string UUID inválida" #: ports/unix/modffi.c:138 msgid "Unknown type" -msgstr "" +msgstr "Tipo desconocido" #: ports/unix/modffi.c:207 ports/unix/modffi.c:265 msgid "Error in ffi_prep_cif" -msgstr "" +msgstr "Error en ffi_prep_cif" #: ports/unix/modffi.c:270 msgid "ffi_prep_closure_loc" -msgstr "" +msgstr "ffi_prep_closure_loc" #: ports/unix/modffi.c:413 msgid "Don't know how to pass object to native function" @@ -871,30 +867,30 @@ msgstr "" #: ports/unix/modusocket.c:474 #, c-format msgid "[addrinfo error %d]" -msgstr "" +msgstr "[addrinfo error %d]" #: py/argcheck.c:44 msgid "function does not take keyword arguments" -msgstr "" +msgstr "la función no tiene argumentos por palabra clave" #: py/argcheck.c:54 py/bc.c:85 py/objnamedtuple.c:104 #, c-format msgid "function takes %d positional arguments but %d were given" -msgstr "" +msgstr "la función toma %d argumentos posicionales pero le fueron dados %d" #: py/argcheck.c:64 #, c-format msgid "function missing %d required positional arguments" -msgstr "" +msgstr "a la función le hacen falta %d argumentos posicionales requeridos" #: py/argcheck.c:72 #, c-format msgid "function expected at most %d arguments, got %d" -msgstr "" +msgstr "la función esperaba a lo sumo %d argumentos, tiene %d" #: py/argcheck.c:97 msgid "'%q' argument required" -msgstr "" +msgstr "argumento '%q' requerido" #: py/argcheck.c:122 msgid "extra positional arguments given" @@ -918,11 +914,11 @@ msgstr "" #: py/bc.c:197 py/bc.c:215 msgid "unexpected keyword argument" -msgstr "" +msgstr "argumento por palabra clave inesperado" #: py/bc.c:199 msgid "keywords must be strings" -msgstr "" +msgstr "palabras clave deben ser strings" #: py/bc.c:206 py/objnamedtuple.c:138 msgid "function got multiple values for argument '%q'" @@ -953,19 +949,19 @@ msgstr "" msgid "bad compile mode" msgstr "" -#: py/builtinimport.c:338 +#: py/builtinimport.c:336 msgid "cannot perform relative import" msgstr "" -#: py/builtinimport.c:422 py/builtinimport.c:534 +#: py/builtinimport.c:420 py/builtinimport.c:532 msgid "module not found" msgstr "módulo no encontrado" -#: py/builtinimport.c:425 py/builtinimport.c:537 +#: py/builtinimport.c:423 py/builtinimport.c:535 msgid "no module named '%q'" msgstr "ningún módulo se llama '%q'" -#: py/builtinimport.c:512 +#: py/builtinimport.c:510 msgid "relative import" msgstr "import relativo" @@ -1134,7 +1130,7 @@ msgid "'%s' expects a register" msgstr "" #: py/emitinlinethumb.c:211 -#, fuzzy, c-format +#, c-format msgid "'%s' expects a special register" msgstr "ord espera un carácter" @@ -1178,7 +1174,6 @@ msgid "unsupported Thumb instruction '%s' with %d arguments" msgstr "" #: py/emitinlinethumb.c:810 -#, fuzzy msgid "branch not in range" msgstr "El argumento de chr() no esta en el rango(256)" @@ -1345,14 +1340,12 @@ msgid "File exists" msgstr "" #: py/moduerrno.c:148 -#, fuzzy msgid "Unsupported operation" -msgstr "El pin %d no soporta PWM" +msgstr "Operacion no soportada" #: py/moduerrno.c:149 -#, fuzzy msgid "Invalid argument" -msgstr "argumentos inválidos" +msgstr "Argumento inválido" #: py/obj.c:90 msgid "Traceback (most recent call last):\n" @@ -1424,9 +1417,8 @@ msgid "%q indices must be integers, not %s" msgstr "" #: py/obj.c:423 -#, fuzzy msgid "%q index out of range" -msgstr "struct: index fuera de rango" +msgstr "%w index fuera de rango" #: py/obj.c:455 msgid "object has no len" @@ -1438,9 +1430,8 @@ msgid "object of type '%s' has no len()" msgstr "" #: py/obj.c:496 -#, fuzzy msgid "object does not support item deletion" -msgstr "ESP8226 no soporta modo seguro" +msgstr "object no soporta supresión de item" #: py/obj.c:499 #, c-format @@ -1499,9 +1490,8 @@ msgid "full" msgstr "" #: py/objdeque.c:127 -#, fuzzy msgid "empty" -msgstr "heap vacío" +msgstr "vacío" #: py/objdict.c:314 msgid "popitem(): dictionary is empty" @@ -1512,9 +1502,8 @@ msgid "dict update sequence has wrong length" msgstr "" #: py/objfloat.c:308 py/parsenum.c:331 -#, fuzzy msgid "complex values not supported" -msgstr "script de compilación no soportado" +msgstr "valores complejos no soportados" #: py/objgenerator.c:108 msgid "can't send non-None value to a just-started generator" @@ -1545,9 +1534,8 @@ msgid "float too big" msgstr "" #: py/objint.c:328 -#, fuzzy msgid "long int not supported in this build" -msgstr "AnalogOut no es soportado por el pin dado" +msgstr "long int no soportado en esta compilación" #: py/objint.c:334 py/objint.c:340 py/objint.c:350 py/objint.c:358 msgid "small int overflow" @@ -1586,9 +1574,8 @@ msgid "can't set attribute" msgstr "" #: py/objobject.c:55 -#, fuzzy msgid "__new__ arg must be a user-type" -msgstr "heap debe ser una lista" +msgstr "__new__ arg debe ser un user-type" #: py/objrange.c:110 msgid "zero step" @@ -1599,9 +1586,8 @@ msgid "pop from an empty set" msgstr "" #: py/objslice.c:66 -#, fuzzy msgid "Length must be an int" -msgstr "heap debe ser una lista" +msgstr "Length debe ser un int" #: py/objslice.c:71 msgid "Length must be non-negative" @@ -1616,9 +1602,8 @@ msgid "Cannot subclass slice" msgstr "" #: py/objstr.c:261 -#, fuzzy msgid "bytes value out of range" -msgstr "Valor de calibración fuera de rango +/-127" +msgstr "valor de bytes fuera de rango" #: py/objstr.c:270 msgid "wrong number of arguments" @@ -1629,18 +1614,16 @@ msgid "join expects a list of str/bytes objects consistent with self object" msgstr "" #: py/objstr.c:542 py/objstr.c:647 py/objstr.c:1744 -#, fuzzy msgid "empty separator" -msgstr "heap vacío" +msgstr "separator vacío" #: py/objstr.c:641 msgid "rsplit(None,n)" msgstr "" #: py/objstr.c:713 -#, fuzzy msgid "substring not found" -msgstr "módulo no encontrado" +msgstr "substring no encontrado" #: py/objstr.c:770 msgid "start/end indices" @@ -1681,14 +1664,12 @@ msgid "" msgstr "" #: py/objstr.c:1055 py/objstr.c:1083 -#, fuzzy msgid "tuple index out of range" -msgstr "struct: index fuera de rango" +msgstr "tuple index fuera de rango" #: py/objstr.c:1071 -#, fuzzy msgid "attributes not supported yet" -msgstr "bytes > 8 bits no soportados" +msgstr "atributos aún no soportados" #: py/objstr.c:1079 msgid "" @@ -1696,9 +1677,8 @@ msgid "" msgstr "" #: py/objstr.c:1171 -#, fuzzy msgid "invalid format specifier" -msgstr "formato inválido" +msgstr "especificador de formato inválido" #: py/objstr.c:1192 msgid "sign not allowed in string format specifier" @@ -1736,9 +1716,8 @@ msgid "incomplete format key" msgstr "" #: py/objstr.c:1482 -#, fuzzy msgid "incomplete format" -msgstr "formato inválido" +msgstr "formato incompleto" #: py/objstr.c:1490 msgid "not enough arguments for format string" @@ -1776,9 +1755,8 @@ msgid "string indices must be integers, not %s" msgstr "" #: py/objstrunicode.c:145 py/objstrunicode.c:164 -#, fuzzy msgid "string index out of range" -msgstr "struct: index fuera de rango" +msgstr "string index fuera de rango" #: py/objtype.c:358 msgid "__init__() should return None" @@ -1827,9 +1805,8 @@ msgid "type '%q' is not an acceptable base type" msgstr "" #: py/objtype.c:1137 -#, fuzzy msgid "multiple inheritance not supported" -msgstr "operación I2C no soportada" +msgstr "herencia multiple no soportada" #: py/objtype.c:1164 msgid "multiple bases have instance lay-out conflict" @@ -1848,14 +1825,12 @@ msgid "issubclass() arg 1 must be a class" msgstr "" #: py/parse.c:726 -#, fuzzy msgid "constant must be an integer" -msgstr "heap debe ser una lista" +msgstr "constant debe ser un entero" #: py/parse.c:868 -#, fuzzy msgid "Unable to init parser" -msgstr "No se pudo encontrar un GCLK disponible" +msgstr "Incapaz de inicializar el parser" #: py/parse.c:1170 msgid "unexpected indent" @@ -1871,7 +1846,7 @@ msgstr "" #: py/parsenum.c:151 msgid "invalid syntax for integer" -msgstr "formato inválido" +msgstr "sintaxis inválido para entero" #: py/parsenum.c:155 #, c-format @@ -1880,11 +1855,11 @@ msgstr "" #: py/parsenum.c:339 msgid "invalid syntax for number" -msgstr "argumentos inválidos" +msgstr "sintaxis inválido para número" #: py/parsenum.c:342 msgid "decimal numbers not supported" -msgstr "bytes > 8 bits no son soportados" +msgstr "números decimales no soportados" #: py/persistentcode.c:223 msgid "" @@ -1898,7 +1873,7 @@ msgstr "" #: py/runtime.c:206 msgid "name not defined" -msgstr "módulo no encontrado" +msgstr "name no definido" #: py/runtime.c:209 msgid "name '%q' is not defined" @@ -1973,9 +1948,8 @@ msgid "exceptions must derive from BaseException" msgstr "" #: py/runtime.c:1430 -#, fuzzy msgid "cannot import name %q" -msgstr "ningún módulo se llama '%q'" +msgstr "no se puede importar name '%q'" #: py/runtime.c:1535 msgid "memory allocation failed, heap is locked" @@ -1995,9 +1969,8 @@ msgid "object not in sequence" msgstr "" #: py/stream.c:96 -#, fuzzy msgid "stream operation not supported" -msgstr "operación I2C no soportada" +msgstr "operación stream no soportada" #: py/vm.c:255 msgid "local variable referenced before assignment" @@ -2036,7 +2009,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536." msgstr "" #: shared-bindings/audiobusio/I2SOut.c:225 -#: shared-bindings/audioio/AudioOut.c:223 +#: shared-bindings/audioio/AudioOut.c:226 msgid "Not playing" msgstr "" @@ -2074,34 +2047,32 @@ msgid "" msgstr "" #: shared-bindings/audioio/Mixer.c:94 -#, fuzzy msgid "Invalid voice count" -msgstr "Dirección inválida." +msgstr "Cuenta de voces inválida" #: shared-bindings/audioio/Mixer.c:99 -#, fuzzy msgid "Invalid channel count" -msgstr "argumentos inválidos" +msgstr "Cuenta de canales inválida" #: shared-bindings/audioio/Mixer.c:103 -#, fuzzy msgid "Sample rate must be positive" -msgstr "STA debe estar activo" +msgstr "Sample rate debe ser positivo" #: shared-bindings/audioio/Mixer.c:107 -#, fuzzy msgid "bits_per_sample must be 8 or 16" -msgstr "bits debe ser 8" +msgstr "bits_per_sample debe ser 8 o 16" #: shared-bindings/audioio/RawSample.c:98 msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" msgstr "" +"sample_source buffer debe ser un bytearray o un array de tipo 'h', 'H', 'b' " +"o'B'" #: shared-bindings/audioio/RawSample.c:104 msgid "buffer must be a bytes-like object" -msgstr "" +msgstr "buffer debe de ser un objeto bytes-like" #: shared-bindings/audioio/WaveFile.c:78 #: shared-bindings/displayio/OnDiskBitmap.c:85 @@ -2146,7 +2117,6 @@ msgid "stop must be 1 or 2" msgstr "" #: shared-bindings/digitalio/DigitalInOut.c:211 -#, fuzzy msgid "Invalid direction." msgstr "Dirección inválida." @@ -2248,7 +2218,7 @@ msgstr "" #: shared-bindings/microcontroller/Pin.c:89 #: shared-bindings/neopixel_write/__init__.c:67 -#: shared-bindings/pulseio/PulseOut.c:75 +#: shared-bindings/pulseio/PulseOut.c:76 msgid "Expected a %q" msgstr "" @@ -2307,11 +2277,10 @@ msgid "index must be int" msgstr "" #: shared-bindings/pulseio/PulseIn.c:293 -#, fuzzy msgid "Read-only" -msgstr "Solo lectura" +msgstr "Solo-lectura" -#: shared-bindings/pulseio/PulseOut.c:134 +#: shared-bindings/pulseio/PulseOut.c:135 msgid "Array must contain halfwords (type 'H')" msgstr "" @@ -2340,7 +2309,7 @@ msgstr "" msgid "RTC calibration is not supported on this board" msgstr "" -#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64 +#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81 msgid "no available NIC" msgstr "" @@ -2368,15 +2337,15 @@ msgstr "" msgid "time.struct_time() takes a 9-sequence" msgstr "" -#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250 +#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264 msgid "Tuple or struct_time argument required" msgstr "" -#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255 +#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269 msgid "function takes exactly 9 arguments" msgstr "" -#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259 +#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273 msgid "timestamp out of range for platform time_t" msgstr "" @@ -2391,31 +2360,31 @@ msgstr "" #: shared-module/audioio/Mixer.c:47 shared-module/audioio/WaveFile.c:117 msgid "Couldn't allocate first buffer" -msgstr "" +msgstr "No se pudo asignar el primer buffer" #: shared-module/audioio/Mixer.c:53 shared-module/audioio/WaveFile.c:123 msgid "Couldn't allocate second buffer" -msgstr "" +msgstr "No se pudo asignar el segundo buffer" #: shared-module/audioio/Mixer.c:82 msgid "Voice index too high" -msgstr "" +msgstr "Index de voz demasiado alto" #: shared-module/audioio/Mixer.c:85 msgid "The sample's sample rate does not match the mixer's" -msgstr "" +msgstr "El sample rate del sample no iguala al del mixer" #: shared-module/audioio/Mixer.c:88 msgid "The sample's channel count does not match the mixer's" -msgstr "" +msgstr "La cuenta de canales del sample no iguala a las del mixer" #: shared-module/audioio/Mixer.c:91 msgid "The sample's bits_per_sample does not match the mixer's" -msgstr "" +msgstr "Los bits_per_sample del sample no igualan a los del mixer" #: shared-module/audioio/Mixer.c:100 msgid "The sample's signedness does not match the mixer's" -msgstr "" +msgstr "El signo del sample no iguala al del mixer" #: shared-module/audioio/WaveFile.c:61 msgid "Invalid wave file" @@ -2478,14 +2447,12 @@ msgid "Group full" msgstr "" #: shared-module/displayio/Group.c:48 -#, fuzzy msgid "Group empty" -msgstr "heap vacío" +msgstr "Group vacío" #: shared-module/displayio/OnDiskBitmap.c:49 -#, fuzzy msgid "Invalid BMP file" -msgstr "pin inválido" +msgstr "Archivo BMP inválido" #: shared-module/displayio/OnDiskBitmap.c:59 #, c-format diff --git a/locale/fil.po b/locale/fil.po index e432da717..d0ba55cdb 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-11 22:08+1100\n" +"POT-Creation-Date: 2018-10-25 12:20+1100\n" "PO-Revision-Date: 2018-08-30 23:04-0700\n" "Last-Translator: Timothy <me@timothygarcia.ca>\n" "Language-Team: fil\n" @@ -147,7 +147,7 @@ msgstr "abort() tinawag" msgid "invalid arguments" msgstr "mali ang mga argumento" -#: lib/utils/pyexec.c:97 py/builtinimport.c:253 +#: lib/utils/pyexec.c:97 py/builtinimport.c:251 msgid "script compilation not supported" msgstr "script kompilasyon hindi supportado" @@ -303,12 +303,12 @@ msgid "Too many channels in sample." msgstr "Sobra ang channels sa sample." #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417 msgid "No DMA channel found" msgstr "Walang DMA channel na mahanap" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419 msgid "Unable to allocate buffers for signed conversion" msgstr "Hindi ma-allocate ang buffers para sa naka-sign na conversion" @@ -324,43 +324,44 @@ msgstr "Tanging 8 o 16 na bit mono na may " msgid "sampling rate out of range" msgstr "pagpili ng rate wala sa sakop" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132 msgid "DAC already in use" msgstr "Ginagamit na ang DAC" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136 msgid "Right channel unsupported" msgstr "Hindi supportado ang kanang channel" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116 #: ports/atmel-samd/common-hal/touchio/TouchIn.c:65 msgid "Invalid pin" msgstr "Mali ang pin" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147 msgid "Invalid pin for left channel" msgstr "Mali ang pin para sa kaliwang channel" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151 msgid "Invalid pin for right channel" msgstr "Mali ang pin para sa kanang channel" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154 msgid "Cannot output both channels on the same pin" msgstr "Hindi maaaring output ang mga parehong channel sa parehong pin" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189 #: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110 +#: ports/nrf/common-hal/pulseio/PulseOut.c:107 msgid "All timers in use" msgstr "Lahat ng timer ginagamit" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285 msgid "All event channels in use" msgstr "Lahat ng event channels ginagamit" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375 #, c-format msgid "Sample rate too high. It must be less than %d" msgstr "" @@ -373,7 +374,7 @@ msgstr "Hindi sapat ang magagamit na pins" #: ports/atmel-samd/common-hal/busio/SPI.c:132 #: ports/atmel-samd/common-hal/busio/UART.c:119 #: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45 -#: ports/nrf/common-hal/busio/I2C.c:81 +#: ports/nrf/common-hal/busio/I2C.c:82 msgid "Invalid pins" msgstr "Mali ang pins" @@ -425,7 +426,7 @@ msgstr "Hindi ma-reset sa bootloader dahil walang bootloader." #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369 -#: ports/nrf/common-hal/pulseio/PWMOut.c:120 +#: ports/nrf/common-hal/pulseio/PWMOut.c:119 #: ports/nrf/common-hal/pulseio/PWMOut.c:233 msgid "Invalid PWM frequency" msgstr "Mali ang PWM frequency" @@ -710,7 +711,7 @@ msgstr "hindi alam na config param" msgid "AnalogOut functionality not supported" msgstr "Hindi supportado ang AnalogOut" -#: ports/nrf/common-hal/busio/I2C.c:95 +#: ports/nrf/common-hal/busio/I2C.c:96 #, fuzzy msgid "All I2C peripherals are in use" msgstr "Lahat ng timer ginagamit" @@ -748,7 +749,7 @@ msgstr "" msgid "Can not get temperature. status: 0x%02x" msgstr "Hindi makuha ang temperatura. status 0x%02x" -#: ports/nrf/common-hal/pulseio/PWMOut.c:162 +#: ports/nrf/common-hal/pulseio/PWMOut.c:161 #, fuzzy msgid "All PWM peripherals are in use" msgstr "Lahat ng timer ginagamit" @@ -959,19 +960,19 @@ msgstr "masamang typecode" msgid "bad compile mode" msgstr "masamang mode ng compile" -#: py/builtinimport.c:338 +#: py/builtinimport.c:336 msgid "cannot perform relative import" msgstr "hindi maaring isagawa ang relative import" -#: py/builtinimport.c:422 py/builtinimport.c:534 +#: py/builtinimport.c:420 py/builtinimport.c:532 msgid "module not found" msgstr "module hindi nakita" -#: py/builtinimport.c:425 py/builtinimport.c:537 +#: py/builtinimport.c:423 py/builtinimport.c:535 msgid "no module named '%q'" msgstr "walang module na '%q'" -#: py/builtinimport.c:512 +#: py/builtinimport.c:510 msgid "relative import" msgstr "relative import" @@ -2033,7 +2034,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536." msgstr "AnalogOut ay 16 bits. Value ay dapat hindi hihigit pa sa 65536." #: shared-bindings/audiobusio/I2SOut.c:225 -#: shared-bindings/audioio/AudioOut.c:223 +#: shared-bindings/audioio/AudioOut.c:226 msgid "Not playing" msgstr "Hindi playing" @@ -2265,7 +2266,7 @@ msgstr "walang laman ang address" #: shared-bindings/microcontroller/Pin.c:89 #: shared-bindings/neopixel_write/__init__.c:67 -#: shared-bindings/pulseio/PulseOut.c:75 +#: shared-bindings/pulseio/PulseOut.c:76 msgid "Expected a %q" msgstr "Umasa ng %q" @@ -2329,7 +2330,7 @@ msgstr "index ay dapat int" msgid "Read-only" msgstr "Basahin-lamang" -#: shared-bindings/pulseio/PulseOut.c:134 +#: shared-bindings/pulseio/PulseOut.c:135 msgid "Array must contain halfwords (type 'H')" msgstr "May halfwords (type 'H') dapat ang array" @@ -2358,7 +2359,7 @@ msgstr "Hindi supportado ang RTC sa board na ito" msgid "RTC calibration is not supported on this board" msgstr "RTC calibration ay hindi supportado ng board na ito" -#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64 +#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81 msgid "no available NIC" msgstr "" @@ -2386,15 +2387,15 @@ msgstr "time.struct_time() kumukuha ng 1 argument" msgid "time.struct_time() takes a 9-sequence" msgstr "time.struct_time() kumukuha ng 9-sequence" -#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250 +#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264 msgid "Tuple or struct_time argument required" msgstr "Tuple o struct_time argument kailangan" -#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255 +#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269 msgid "function takes exactly 9 arguments" msgstr "function kumukuha ng 9 arguments" -#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259 +#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273 msgid "timestamp out of range for platform time_t" msgstr "wala sa sakop ng timestamp ang platform time_t" diff --git a/locale/fr.po b/locale/fr.po index 51d999a2c..95aeef5e2 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-11 22:08+1100\n" +"POT-Creation-Date: 2018-10-25 12:20+1100\n" "PO-Revision-Date: 2018-08-14 11:01+0200\n" "Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n" "Language-Team: fr\n" @@ -146,7 +146,7 @@ msgstr "abort() appelé" msgid "invalid arguments" msgstr "arguments invalides" -#: lib/utils/pyexec.c:97 py/builtinimport.c:253 +#: lib/utils/pyexec.c:97 py/builtinimport.c:251 msgid "script compilation not supported" msgstr "compilation du script non supporté" @@ -298,12 +298,12 @@ msgid "Too many channels in sample." msgstr "Trop de canaux dans l'échantillon." #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417 msgid "No DMA channel found" msgstr "Aucun canal DMA trouvé" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419 msgid "Unable to allocate buffers for signed conversion" msgstr "Impossible d'allouer des tampons pour une conversion signée" @@ -319,43 +319,44 @@ msgstr "Uniquement 8 ou 16 bit mono avec " msgid "sampling rate out of range" msgstr "taux d'échantillonage hors gamme" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132 msgid "DAC already in use" msgstr "DAC déjà utilisé" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136 msgid "Right channel unsupported" msgstr "Canal droit non supporté" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116 #: ports/atmel-samd/common-hal/touchio/TouchIn.c:65 msgid "Invalid pin" msgstr "Broche invalide" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147 msgid "Invalid pin for left channel" msgstr "Broche invalide pour le canal gauche" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151 msgid "Invalid pin for right channel" msgstr "Broche invalide pour le canal droit" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154 msgid "Cannot output both channels on the same pin" msgstr "On ne peut mettre les deux canaux sur la même broche" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189 #: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110 +#: ports/nrf/common-hal/pulseio/PulseOut.c:107 msgid "All timers in use" msgstr "Tous les timers sont utilisés" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285 msgid "All event channels in use" msgstr "Tous les canaux d'événements sont utilisés" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375 #, c-format msgid "Sample rate too high. It must be less than %d" msgstr "" @@ -368,7 +369,7 @@ msgstr "Pas assez de broches disponibles" #: ports/atmel-samd/common-hal/busio/SPI.c:132 #: ports/atmel-samd/common-hal/busio/UART.c:119 #: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45 -#: ports/nrf/common-hal/busio/I2C.c:81 +#: ports/nrf/common-hal/busio/I2C.c:82 msgid "Invalid pins" msgstr "Broche invalide" @@ -421,7 +422,7 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369 -#: ports/nrf/common-hal/pulseio/PWMOut.c:120 +#: ports/nrf/common-hal/pulseio/PWMOut.c:119 #: ports/nrf/common-hal/pulseio/PWMOut.c:233 msgid "Invalid PWM frequency" msgstr "Fréquence de PWM invalide" @@ -706,7 +707,7 @@ msgstr "paramètre de config. inconnu" msgid "AnalogOut functionality not supported" msgstr "AnalogOut non supporté" -#: ports/nrf/common-hal/busio/I2C.c:95 +#: ports/nrf/common-hal/busio/I2C.c:96 #, fuzzy msgid "All I2C peripherals are in use" msgstr "Tous les timers sont utilisés" @@ -745,7 +746,7 @@ msgstr "busio.UART n'est pas disponible" msgid "Can not get temperature. status: 0x%02x" msgstr "Impossible de lire la température. status: 0x%02x" -#: ports/nrf/common-hal/pulseio/PWMOut.c:162 +#: ports/nrf/common-hal/pulseio/PWMOut.c:161 #, fuzzy msgid "All PWM peripherals are in use" msgstr "Tous les timers sont utilisés" @@ -953,19 +954,19 @@ msgstr "mauvais code type" msgid "bad compile mode" msgstr "mauvais mode de compilation" -#: py/builtinimport.c:338 +#: py/builtinimport.c:336 msgid "cannot perform relative import" msgstr "ne peut pas réaliser un import relatif" -#: py/builtinimport.c:422 py/builtinimport.c:534 +#: py/builtinimport.c:420 py/builtinimport.c:532 msgid "module not found" msgstr "module introuvable" -#: py/builtinimport.c:425 py/builtinimport.c:537 +#: py/builtinimport.c:423 py/builtinimport.c:535 msgid "no module named '%q'" msgstr "pas de module '%q'" -#: py/builtinimport.c:512 +#: py/builtinimport.c:510 msgid "relative import" msgstr "import relatif" @@ -2027,7 +2028,7 @@ msgstr "" "65536." #: shared-bindings/audiobusio/I2SOut.c:225 -#: shared-bindings/audioio/AudioOut.c:223 +#: shared-bindings/audioio/AudioOut.c:226 msgid "Not playing" msgstr "En pause" @@ -2258,7 +2259,7 @@ msgstr "" #: shared-bindings/microcontroller/Pin.c:89 #: shared-bindings/neopixel_write/__init__.c:67 -#: shared-bindings/pulseio/PulseOut.c:75 +#: shared-bindings/pulseio/PulseOut.c:76 msgid "Expected a %q" msgstr "Attendu : %q" @@ -2325,7 +2326,7 @@ msgstr "l'index doit être un entier" msgid "Read-only" msgstr "Lecture seule" -#: shared-bindings/pulseio/PulseOut.c:134 +#: shared-bindings/pulseio/PulseOut.c:135 msgid "Array must contain halfwords (type 'H')" msgstr "Le tableau doit contenir des halfwords (type 'H')" @@ -2354,7 +2355,7 @@ msgstr "RTC non supportée sur cette carte" msgid "RTC calibration is not supported on this board" msgstr "calibration de la RTC non supportée sur cette carte" -#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64 +#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81 #, fuzzy msgid "no available NIC" msgstr "busio.UART n'est pas disponible" @@ -2383,15 +2384,15 @@ msgstr "time.struct_time() prend exactement 1 argument" msgid "time.struct_time() takes a 9-sequence" msgstr "time.struct_time() prend une séquence de longueur 9" -#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250 +#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264 msgid "Tuple or struct_time argument required" msgstr "Argument de type tuple ou struct_time nécessaire" -#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255 +#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269 msgid "function takes exactly 9 arguments" msgstr "la fonction prend exactement 9 arguments" -#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259 +#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273 msgid "timestamp out of range for platform time_t" msgstr "timestamp hors gamme pour la plateforme time_t" @@ -2523,9 +2524,9 @@ msgid "too many arguments provided with the given format" msgstr "trop d'arguments fournis avec ce format" #, fuzzy -#~ msgid "value_size must be power of two" -#~ msgstr "'len' doit être un multiple de 4" - -#, fuzzy #~ msgid "palette must be displayio.Palette" #~ msgstr "la palette doit être longue de 32 octets" + +#, fuzzy +#~ msgid "value_size must be power of two" +#~ msgstr "'len' doit être un multiple de 4" diff --git a/locale/it_IT.po b/locale/it_IT.po index b093a949a..637dbe0f3 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-11 22:08+1100\n" +"POT-Creation-Date: 2018-10-25 12:20+1100\n" "PO-Revision-Date: 2018-10-02 16:27+0200\n" "Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n" "Language-Team: \n" @@ -147,7 +147,7 @@ msgstr "abort() chiamato" msgid "invalid arguments" msgstr "argomenti non validi" -#: lib/utils/pyexec.c:97 py/builtinimport.c:253 +#: lib/utils/pyexec.c:97 py/builtinimport.c:251 msgid "script compilation not supported" msgstr "compilazione dello scrip non suportata" @@ -305,12 +305,12 @@ msgid "Too many channels in sample." msgstr "" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417 msgid "No DMA channel found" msgstr "Nessun canale DMA trovato" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419 msgid "Unable to allocate buffers for signed conversion" msgstr "Ipossibilitato ad allocare buffer per la conversione con segno" @@ -326,43 +326,44 @@ msgstr "" msgid "sampling rate out of range" msgstr "frequenza di campionamento fuori intervallo" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132 msgid "DAC already in use" msgstr "DAC già in uso" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136 msgid "Right channel unsupported" msgstr "Canale destro non supportato" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116 #: ports/atmel-samd/common-hal/touchio/TouchIn.c:65 msgid "Invalid pin" msgstr "Pin non valido" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147 msgid "Invalid pin for left channel" msgstr "Pin non valido per il canale sinistro" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151 msgid "Invalid pin for right channel" msgstr "Pin non valido per il canale destro" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154 msgid "Cannot output both channels on the same pin" msgstr "Impossibile dare in output entrambi i canal sullo stesso pin" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189 #: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110 +#: ports/nrf/common-hal/pulseio/PulseOut.c:107 msgid "All timers in use" msgstr "Tutti i timer utilizzati" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285 msgid "All event channels in use" msgstr "Tutti i canali eventi utilizati" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375 #, c-format msgid "Sample rate too high. It must be less than %d" msgstr "" @@ -376,7 +377,7 @@ msgstr "Non sono presenti abbastanza pin" #: ports/atmel-samd/common-hal/busio/SPI.c:132 #: ports/atmel-samd/common-hal/busio/UART.c:119 #: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45 -#: ports/nrf/common-hal/busio/I2C.c:81 +#: ports/nrf/common-hal/busio/I2C.c:82 msgid "Invalid pins" msgstr "Pin non validi" @@ -429,7 +430,7 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369 -#: ports/nrf/common-hal/pulseio/PWMOut.c:120 +#: ports/nrf/common-hal/pulseio/PWMOut.c:119 #: ports/nrf/common-hal/pulseio/PWMOut.c:233 msgid "Invalid PWM frequency" msgstr "Frequenza PWM non valida" @@ -712,7 +713,7 @@ msgstr "parametro di configurazione sconosciuto" msgid "AnalogOut functionality not supported" msgstr "funzionalità AnalogOut non supportata" -#: ports/nrf/common-hal/busio/I2C.c:95 +#: ports/nrf/common-hal/busio/I2C.c:96 msgid "All I2C peripherals are in use" msgstr "Tutte le periferiche I2C sono in uso" @@ -749,7 +750,7 @@ msgstr "busio.UART non ancora implementato" msgid "Can not get temperature. status: 0x%02x" msgstr "Impossibile leggere la temperatura. status: 0x%02x" -#: ports/nrf/common-hal/pulseio/PWMOut.c:162 +#: ports/nrf/common-hal/pulseio/PWMOut.c:161 #, fuzzy msgid "All PWM peripherals are in use" msgstr "Tutte le periferiche SPI sono in uso" @@ -959,19 +960,19 @@ msgstr "" msgid "bad compile mode" msgstr "" -#: py/builtinimport.c:338 +#: py/builtinimport.c:336 msgid "cannot perform relative import" msgstr "impossibile effettuare l'importazione relativa" -#: py/builtinimport.c:422 py/builtinimport.c:534 +#: py/builtinimport.c:420 py/builtinimport.c:532 msgid "module not found" msgstr "modulo non trovato" -#: py/builtinimport.c:425 py/builtinimport.c:537 +#: py/builtinimport.c:423 py/builtinimport.c:535 msgid "no module named '%q'" msgstr "nessun modulo chiamato '%q'" -#: py/builtinimport.c:512 +#: py/builtinimport.c:510 msgid "relative import" msgstr "importazione relativa" @@ -2029,7 +2030,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536." msgstr "AnalogOut ha solo 16 bit. Il valore deve essere meno di 65536." #: shared-bindings/audiobusio/I2SOut.c:225 -#: shared-bindings/audioio/AudioOut.c:223 +#: shared-bindings/audioio/AudioOut.c:226 msgid "Not playing" msgstr "In pausa" @@ -2248,7 +2249,7 @@ msgstr "gli indirizzi sono vuoti" #: shared-bindings/microcontroller/Pin.c:89 #: shared-bindings/neopixel_write/__init__.c:67 -#: shared-bindings/pulseio/PulseOut.c:75 +#: shared-bindings/pulseio/PulseOut.c:76 msgid "Expected a %q" msgstr "Atteso un %q" @@ -2315,7 +2316,7 @@ msgstr "l'indice deve essere int" msgid "Read-only" msgstr "Sola lettura" -#: shared-bindings/pulseio/PulseOut.c:134 +#: shared-bindings/pulseio/PulseOut.c:135 msgid "Array must contain halfwords (type 'H')" msgstr "" @@ -2344,7 +2345,7 @@ msgstr "RTC non supportato su questa scheda" msgid "RTC calibration is not supported on this board" msgstr "calibrazione RTC non supportata su questa scheda" -#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64 +#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81 #, fuzzy msgid "no available NIC" msgstr "busio.UART non ancora implementato" @@ -2373,15 +2374,15 @@ msgstr "time.struct_time() prende esattamente un argomento" msgid "time.struct_time() takes a 9-sequence" msgstr "" -#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250 +#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264 msgid "Tuple or struct_time argument required" msgstr "Tupla o struct_time richiesto come argomento" -#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255 +#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269 msgid "function takes exactly 9 arguments" msgstr "la funzione prende esattamente 9 argomenti" -#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259 +#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273 msgid "timestamp out of range for platform time_t" msgstr "timestamp è fuori intervallo per il time_t della piattaforma" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index c54983951..a8eb2dd51 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-10-11 22:08+1100\n" +"POT-Creation-Date: 2018-10-25 12:20+1100\n" "PO-Revision-Date: 2018-10-02 21:14-0000\n" "Last-Translator: \n" "Language-Team: \n" @@ -147,7 +147,7 @@ msgstr "abort() chamado" msgid "invalid arguments" msgstr "argumentos inválidos" -#: lib/utils/pyexec.c:97 py/builtinimport.c:253 +#: lib/utils/pyexec.c:97 py/builtinimport.c:251 msgid "script compilation not supported" msgstr "compilação de script não suportada" @@ -291,12 +291,12 @@ msgid "Too many channels in sample." msgstr "Muitos canais na amostra." #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:305 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:339 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:417 msgid "No DMA channel found" msgstr "Nenhum canal DMA encontrado" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c:308 -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:341 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:419 msgid "Unable to allocate buffers for signed conversion" msgstr "Não é possível alocar buffers para conversão assinada" @@ -312,43 +312,44 @@ msgstr "" msgid "sampling rate out of range" msgstr "Taxa de amostragem fora do intervalo" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:69 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:132 msgid "DAC already in use" msgstr "DAC em uso" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:73 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:136 msgid "Right channel unsupported" msgstr "Canal direito não suportado" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:76 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:139 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:116 #: ports/atmel-samd/common-hal/touchio/TouchIn.c:65 msgid "Invalid pin" msgstr "Pino inválido" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:84 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:147 msgid "Invalid pin for left channel" msgstr "Pino inválido para canal esquerdo" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:88 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:151 msgid "Invalid pin for right channel" msgstr "Pino inválido para canal direito" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:91 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:154 msgid "Cannot output both channels on the same pin" msgstr "" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:176 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:243 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:189 #: ports/atmel-samd/common-hal/pulseio/PulseOut.c:110 +#: ports/nrf/common-hal/pulseio/PulseOut.c:107 msgid "All timers in use" msgstr "Todos os temporizadores em uso" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:218 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:285 msgid "All event channels in use" msgstr "Todos os canais de eventos em uso" -#: ports/atmel-samd/common-hal/audioio/AudioOut.c:297 +#: ports/atmel-samd/common-hal/audioio/AudioOut.c:375 #, c-format msgid "Sample rate too high. It must be less than %d" msgstr "Taxa de amostragem muito alta. Deve ser menor que %d" @@ -361,7 +362,7 @@ msgstr "Não há pinos suficientes disponíveis" #: ports/atmel-samd/common-hal/busio/SPI.c:132 #: ports/atmel-samd/common-hal/busio/UART.c:119 #: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c:45 -#: ports/nrf/common-hal/busio/I2C.c:81 +#: ports/nrf/common-hal/busio/I2C.c:82 msgid "Invalid pins" msgstr "Pinos inválidos" @@ -413,7 +414,7 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:120 #: ports/atmel-samd/common-hal/pulseio/PWMOut.c:369 -#: ports/nrf/common-hal/pulseio/PWMOut.c:120 +#: ports/nrf/common-hal/pulseio/PWMOut.c:119 #: ports/nrf/common-hal/pulseio/PWMOut.c:233 msgid "Invalid PWM frequency" msgstr "Frequência PWM inválida" @@ -695,7 +696,7 @@ msgstr "parâmetro configuração desconhecido" msgid "AnalogOut functionality not supported" msgstr "Funcionalidade AnalogOut não suportada" -#: ports/nrf/common-hal/busio/I2C.c:95 +#: ports/nrf/common-hal/busio/I2C.c:96 msgid "All I2C peripherals are in use" msgstr "Todos os periféricos I2C estão em uso" @@ -731,7 +732,7 @@ msgstr "busio.UART não disponível" msgid "Can not get temperature. status: 0x%02x" msgstr "Não pode obter a temperatura. status: 0x%02x" -#: ports/nrf/common-hal/pulseio/PWMOut.c:162 +#: ports/nrf/common-hal/pulseio/PWMOut.c:161 #, fuzzy msgid "All PWM peripherals are in use" msgstr "Todos os temporizadores em uso" @@ -938,19 +939,19 @@ msgstr "" msgid "bad compile mode" msgstr "" -#: py/builtinimport.c:338 +#: py/builtinimport.c:336 msgid "cannot perform relative import" msgstr "" -#: py/builtinimport.c:422 py/builtinimport.c:534 +#: py/builtinimport.c:420 py/builtinimport.c:532 msgid "module not found" msgstr "" -#: py/builtinimport.c:425 py/builtinimport.c:537 +#: py/builtinimport.c:423 py/builtinimport.c:535 msgid "no module named '%q'" msgstr "" -#: py/builtinimport.c:512 +#: py/builtinimport.c:510 msgid "relative import" msgstr "" @@ -1998,7 +1999,7 @@ msgid "AnalogOut is only 16 bits. Value must be less than 65536." msgstr "" #: shared-bindings/audiobusio/I2SOut.c:225 -#: shared-bindings/audioio/AudioOut.c:223 +#: shared-bindings/audioio/AudioOut.c:226 msgid "Not playing" msgstr "" @@ -2208,7 +2209,7 @@ msgstr "" #: shared-bindings/microcontroller/Pin.c:89 #: shared-bindings/neopixel_write/__init__.c:67 -#: shared-bindings/pulseio/PulseOut.c:75 +#: shared-bindings/pulseio/PulseOut.c:76 msgid "Expected a %q" msgstr "Esperado um" @@ -2270,7 +2271,7 @@ msgstr "index deve ser int" msgid "Read-only" msgstr "Somente leitura" -#: shared-bindings/pulseio/PulseOut.c:134 +#: shared-bindings/pulseio/PulseOut.c:135 msgid "Array must contain halfwords (type 'H')" msgstr "Array deve conter meias palavras (tipo 'H')" @@ -2299,7 +2300,7 @@ msgstr "O RTC não é suportado nesta placa" msgid "RTC calibration is not supported on this board" msgstr "A calibração RTC não é suportada nesta placa" -#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:64 +#: shared-bindings/socket/__init__.c:516 shared-module/network/__init__.c:81 msgid "no available NIC" msgstr "" @@ -2327,15 +2328,15 @@ msgstr "" msgid "time.struct_time() takes a 9-sequence" msgstr "" -#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:250 +#: shared-bindings/time/__init__.c:169 shared-bindings/time/__init__.c:264 msgid "Tuple or struct_time argument required" msgstr "Tuple or struct_time argument required" -#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:255 +#: shared-bindings/time/__init__.c:174 shared-bindings/time/__init__.c:269 msgid "function takes exactly 9 arguments" msgstr "função leva exatamente 9 argumentos" -#: shared-bindings/time/__init__.c:226 shared-bindings/time/__init__.c:259 +#: shared-bindings/time/__init__.c:240 shared-bindings/time/__init__.c:273 msgid "timestamp out of range for platform time_t" msgstr "timestamp fora do intervalo para a plataforma time_t" diff --git a/ports/atmel-samd/boards/feather_m0_adalogger/pins.c b/ports/atmel-samd/boards/feather_m0_adalogger/pins.c index da97bd253..0029bba1a 100644 --- a/ports/atmel-samd/boards/feather_m0_adalogger/pins.c +++ b/ports/atmel-samd/boards/feather_m0_adalogger/pins.c @@ -28,6 +28,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_GREEN_LED), MP_ROM_PTR(&pin_PA06) }, { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) }, { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) }, { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) }, diff --git a/ports/atmel-samd/boards/feather_m0_basic/pins.c b/ports/atmel-samd/boards/feather_m0_basic/pins.c index b5bd45a2f..4400a253d 100644 --- a/ports/atmel-samd/boards/feather_m0_basic/pins.c +++ b/ports/atmel-samd/boards/feather_m0_basic/pins.c @@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) }, { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) }, { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) }, { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) }, diff --git a/ports/atmel-samd/boards/feather_m0_express/pins.c b/ports/atmel-samd/boards/feather_m0_express/pins.c index 1a6aad45b..cd6c351d4 100644 --- a/ports/atmel-samd/boards/feather_m0_express/pins.c +++ b/ports/atmel-samd/boards/feather_m0_express/pins.c @@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) }, { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) }, { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) }, { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) }, diff --git a/ports/atmel-samd/boards/feather_m0_express_crickit/pins.c b/ports/atmel-samd/boards/feather_m0_express_crickit/pins.c index 1a6aad45b..cd6c351d4 100644 --- a/ports/atmel-samd/boards/feather_m0_express_crickit/pins.c +++ b/ports/atmel-samd/boards/feather_m0_express_crickit/pins.c @@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) }, { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) }, { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) }, { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) }, diff --git a/ports/atmel-samd/boards/feather_m0_rfm69/pins.c b/ports/atmel-samd/boards/feather_m0_rfm69/pins.c index 072eb4f88..7e14b3f25 100644 --- a/ports/atmel-samd/boards/feather_m0_rfm69/pins.c +++ b/ports/atmel-samd/boards/feather_m0_rfm69/pins.c @@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) }, { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) }, { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) }, { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) }, diff --git a/ports/atmel-samd/boards/feather_m0_rfm9x/pins.c b/ports/atmel-samd/boards/feather_m0_rfm9x/pins.c index 696d2239d..4e77b7fb9 100644 --- a/ports/atmel-samd/boards/feather_m0_rfm9x/pins.c +++ b/ports/atmel-samd/boards/feather_m0_rfm9x/pins.c @@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) }, { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) }, { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) }, { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) }, diff --git a/ports/atmel-samd/boards/feather_m0_supersized/pins.c b/ports/atmel-samd/boards/feather_m0_supersized/pins.c index 1a6aad45b..cd6c351d4 100644 --- a/ports/atmel-samd/boards/feather_m0_supersized/pins.c +++ b/ports/atmel-samd/boards/feather_m0_supersized/pins.c @@ -22,6 +22,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA20) }, { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) }, { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) }, { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) }, diff --git a/ports/atmel-samd/boards/feather_m4_express/pins.c b/ports/atmel-samd/boards/feather_m4_express/pins.c index b9b04e0ac..5004254c5 100644 --- a/ports/atmel-samd/boards/feather_m4_express/pins.c +++ b/ports/atmel-samd/boards/feather_m4_express/pins.c @@ -28,6 +28,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA23) }, { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PB03) }, { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PB01) }, + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PB01) }, { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, diff --git a/ports/atmel-samd/boards/meowmeow/board.c b/ports/atmel-samd/boards/meowmeow/board.c new file mode 100644 index 000000000..881e15e0c --- /dev/null +++ b/ports/atmel-samd/boards/meowmeow/board.c @@ -0,0 +1,38 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Andrés Sabas for Electronic Cats + * + * 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 "boards/board.h" + +void board_init(void) +{ +} + +bool board_requests_safe_mode(void) { + return false; +} + +void reset_board(void) { +} diff --git a/ports/atmel-samd/boards/meowmeow/mpconfigboard.h b/ports/atmel-samd/boards/meowmeow/mpconfigboard.h new file mode 100644 index 000000000..3ce00b04f --- /dev/null +++ b/ports/atmel-samd/boards/meowmeow/mpconfigboard.h @@ -0,0 +1,36 @@ +#define MICROPY_HW_BOARD_NAME "Meow Meow" +#define MICROPY_HW_MCU_NAME "samd21g18" + + +// These are pins not to reset. +// PA24 and PA25 are USB. +#define MICROPY_PORT_A (PORT_PA24 | PORT_PA25) +#define MICROPY_PORT_B (0) +#define MICROPY_PORT_C (0) + +#include "internal_flash.h" + +// If you change this, then make sure to update the linker scripts as well to +// make sure you don't overwrite code. +#define CIRCUITPY_INTERNAL_NVM_SIZE 0 + +#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - 0x010000) + +#define CALIBRATE_CRYSTALLESS 1 + +// Explanation of how a user got into safe mode. +#define BOARD_USER_SAFE_MODE_ACTION "pressing both buttons at start up" + +#define DEFAULT_I2C_BUS_SCL (&pin_PA01) +#define DEFAULT_I2C_BUS_SDA (&pin_PA00) + +#define DEFAULT_SPI_BUS_SCK (&pin_PA15) +#define DEFAULT_SPI_BUS_MOSI (&pin_PA14) +#define DEFAULT_SPI_BUS_MISO (&pin_PA12) + +#define DEFAULT_UART_BUS_RX (&pin_PA11) +#define DEFAULT_UART_BUS_TX (&pin_PA10) + +// USB is always used internally so skip the pin objects for it. +#define IGNORE_PIN_PA24 1 +#define IGNORE_PIN_PA25 1 diff --git a/ports/atmel-samd/boards/meowmeow/mpconfigboard.mk b/ports/atmel-samd/boards/meowmeow/mpconfigboard.mk new file mode 100644 index 000000000..31015ad17 --- /dev/null +++ b/ports/atmel-samd/boards/meowmeow/mpconfigboard.mk @@ -0,0 +1,11 @@ +LD_FILE = boards/samd21x18-bootloader.ld +USB_VID = 0xBAB1 +USB_PID = 0x1209 +USB_PRODUCT = "Meow Meow" +USB_MANUFACTURER = "Electronic Cats" + +INTERNAL_FLASH_FILESYSTEM = 1 +LONGINT_IMPL = NONE + +CHIP_VARIANT = SAMD21G18A +CHIP_FAMILY = samd21
\ No newline at end of file diff --git a/ports/atmel-samd/boards/meowmeow/pins.c b/ports/atmel-samd/boards/meowmeow/pins.c new file mode 100644 index 000000000..59c51f4eb --- /dev/null +++ b/ports/atmel-samd/boards/meowmeow/pins.c @@ -0,0 +1,43 @@ +#include "shared-bindings/board/__init__.h" + +#include "board_busses.h" + +STATIC const mp_rom_map_elem_t board_global_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA02) }, + { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PA03) }, + { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PA04) }, + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PA05) }, + { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PA06) }, + { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_PB02) }, + { MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_PB03) }, + { MP_ROM_QSTR(MP_QSTR_A8), MP_ROM_PTR(&pin_PB08) }, + { MP_ROM_QSTR(MP_QSTR_A9), MP_ROM_PTR(&pin_PB09) }, + { MP_ROM_QSTR(MP_QSTR_A10), MP_ROM_PTR(&pin_PA11) }, + { MP_ROM_QSTR(MP_QSTR_A11), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_PA11) }, + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PA11) }, + { MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_PA10) }, + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PA10) }, + { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_PB02) }, + { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PB03) }, + { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PA14) }, + { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PA05) }, + { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA15) }, + { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_PB22) }, + { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_PA06) }, + { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA30) }, + { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA31) }, + { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA02) }, + { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PB23) }, + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PA00) }, + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA01) }, + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PA15) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PA14) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PA12) }, + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table); diff --git a/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.h b/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.h index fbc5300e2..05f2be0bc 100644 --- a/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.h +++ b/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.h @@ -3,7 +3,7 @@ #define CIRCUITPY_MCU_FAMILY samd51 -// This is for a purple prototype which is Rev C +// This is for Rev D #define MICROPY_HW_APA102_MOSI (&pin_PA01) #define MICROPY_HW_APA102_SCK (&pin_PA00) @@ -28,7 +28,7 @@ #include "external_flash/devices.h" #define EXTERNAL_FLASH_DEVICE_COUNT 1 -#define EXTERNAL_FLASH_DEVICES W25Q128JV_SQ +#define EXTERNAL_FLASH_DEVICES GD25Q64C #include "external_flash/external_flash.h" diff --git a/ports/atmel-samd/boards/trellis_m4_express/pins.c b/ports/atmel-samd/boards/trellis_m4_express/pins.c index 57abfeba4..44ffc6eaf 100644 --- a/ports/atmel-samd/boards/trellis_m4_express/pins.c +++ b/ports/atmel-samd/boards/trellis_m4_express/pins.c @@ -15,6 +15,9 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PB08) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PB09) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_ACCELEROMETER_SDA), MP_ROM_PTR(&pin_PA12) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_ACCELEROMETER_SCL), MP_ROM_PTR(&pin_PA13) }, + // Key Grid columns { MP_OBJ_NEW_QSTR(MP_QSTR_COL0), MP_ROM_PTR(&pin_PA14) }, { MP_OBJ_NEW_QSTR(MP_QSTR_COL1), MP_ROM_PTR(&pin_PA15) }, diff --git a/ports/atmel-samd/common-hal/analogio/AnalogOut.c b/ports/atmel-samd/common-hal/analogio/AnalogOut.c index 2e42abdd4..19475e00b 100644 --- a/ports/atmel-samd/common-hal/analogio/AnalogOut.c +++ b/ports/atmel-samd/common-hal/analogio/AnalogOut.c @@ -138,16 +138,5 @@ void common_hal_analogio_analogout_set_value(analogio_analogout_obj_t *self, } void analogout_reset(void) { - #if defined(SAMD21) && !defined(PIN_PA02) - return; - #endif - #ifdef SAMD21 - while (DAC->STATUS.reg & DAC_STATUS_SYNCBUSY) {} - #endif - #ifdef SAMD51 - while (DAC->SYNCBUSY.reg & DAC_SYNCBUSY_SWRST) {} - #endif - DAC->CTRLA.reg |= DAC_CTRLA_SWRST; - - // TODO(tannewt): Turn off the DAC clocks to save power. + // AudioOut resets the DAC in case its been used for audio which requires special handling. } diff --git a/ports/atmel-samd/common-hal/audioio/AudioOut.c b/ports/atmel-samd/common-hal/audioio/AudioOut.c index 0592775a5..596f3214a 100644 --- a/ports/atmel-samd/common-hal/audioio/AudioOut.c +++ b/ports/atmel-samd/common-hal/audioio/AudioOut.c @@ -33,6 +33,7 @@ #include "py/runtime.h" #include "common-hal/audioio/AudioOut.h" #include "shared-bindings/audioio/AudioOut.h" +#include "shared-bindings/microcontroller/__init__.h" #include "shared-bindings/microcontroller/Pin.h" #include "supervisor/shared/translate.h" @@ -52,11 +53,73 @@ #include "samd/pins.h" #include "samd/timers.h" +#ifdef SAMD21 +static void ramp_value(uint16_t start, uint16_t end) { + start = DAC->DATA.reg; + int32_t diff = (int32_t) end - start; + int32_t step = 49; + int32_t steps = diff / step; + if (diff < 0) { + steps = -steps; + step = -step; + } + for (int32_t i = 0; i < steps; i++) { + uint32_t value = start + step * i; + DAC->DATA.reg = value; + DAC->DATABUF.reg = value; + common_hal_mcu_delay_us(50); + #ifdef MICROPY_VM_HOOK_LOOP + MICROPY_VM_HOOK_LOOP + #endif + } +} +#endif + +#ifdef SAMD51 +static void ramp_value(uint16_t start, uint16_t end) { + int32_t diff = (int32_t) end - start; + int32_t step = 49; + int32_t steps = diff / step; + if (diff < 0) { + steps = -steps; + step = -step; + } + + for (int32_t i = 0; i < steps; i++) { + uint16_t value = start + step * i; + DAC->DATA[0].reg = value; + DAC->DATABUF[0].reg = value; + DAC->DATA[1].reg = value; + DAC->DATABUF[1].reg = value; + + common_hal_mcu_delay_us(50); + #ifdef MICROPY_VM_HOOK_LOOP + MICROPY_VM_HOOK_LOOP + #endif + } +} +#endif + void audioout_reset(void) { + #if defined(SAMD21) && !defined(PIN_PA02) + return; + #endif + #ifdef SAMD21 + while (DAC->STATUS.reg & DAC_STATUS_SYNCBUSY) {} + #endif + #ifdef SAMD51 + while (DAC->SYNCBUSY.reg & DAC_SYNCBUSY_SWRST) {} + #endif + if (DAC->CTRLA.bit.ENABLE) { + ramp_value(0x8000, 0); + } + DAC->CTRLA.reg |= DAC_CTRLA_SWRST; + + // TODO(tannewt): Turn off the DAC clocks to save power. } void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self, - const mcu_pin_obj_t* left_channel, const mcu_pin_obj_t* right_channel) { + const mcu_pin_obj_t* left_channel, const mcu_pin_obj_t* right_channel, uint16_t quiescent_value) { #ifdef SAMD51 bool dac_clock_enabled = hri_mclk_get_APBDMASK_DAC_bit(MCLK); #endif @@ -94,12 +157,10 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self, if (right_channel != NULL) { claim_pin(right_channel); self->right_channel = right_channel; - gpio_set_pin_function(self->right_channel->number, GPIO_PIN_FUNCTION_B); audio_dma_init(&self->right_dma); } #endif self->left_channel = left_channel; - gpio_set_pin_function(self->left_channel->number, GPIO_PIN_FUNCTION_B); audio_dma_init(&self->left_dma); #ifdef SAMD51 @@ -118,6 +179,10 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self, DAC->CTRLA.bit.SWRST = 1; while (DAC->CTRLA.bit.SWRST == 1) {} + // Make sure there are no outstanding access errors. (Reading DATA can cause this.) + #ifdef SAMD51 + PAC->INTFLAGD.reg = PAC_INTFLAGD_DAC; + #endif bool channel0_enabled = true; #ifdef SAMD51 @@ -159,6 +224,8 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self, #endif #ifdef SAMD51 while (DAC->SYNCBUSY.bit.ENABLE == 1) {} + while (channel0_enabled && DAC->STATUS.bit.READY0 == 0) {} + while (channel1_enabled && DAC->STATUS.bit.READY1 == 0) {} #endif // Use a timer to coordinate when DAC conversions occur. @@ -220,13 +287,21 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self, #ifdef SAMD51 connect_event_user_to_channel(EVSYS_ID_USER_DAC_START_1, channel); + if (right_channel != NULL) { + gpio_set_pin_function(self->right_channel->number, GPIO_PIN_FUNCTION_B); + } #define EVSYS_ID_USER_DAC_START EVSYS_ID_USER_DAC_START_0 #endif connect_event_user_to_channel(EVSYS_ID_USER_DAC_START, channel); + gpio_set_pin_function(self->left_channel->number, GPIO_PIN_FUNCTION_B); init_async_event_channel(channel, tc_gen_id); self->tc_to_dac_event_channel = channel; + // Ramp the DAC up. + self->quiescent_value = quiescent_value; + ramp_value(0, quiescent_value); + // Leave the DMA setup to playback. } @@ -239,6 +314,9 @@ void common_hal_audioio_audioout_deinit(audioio_audioout_obj_t* self) { return; } + // Ramp the DAC down. + ramp_value(self->quiescent_value, 0); + DAC->CTRLA.bit.ENABLE = 0; #ifdef SAMD21 while (DAC->STATUS.bit.SYNCBUSY == 1) {} @@ -381,6 +459,9 @@ void common_hal_audioio_audioout_stop(audioio_audioout_obj_t* self) { #ifdef SAMD51 audio_dma_stop(&self->right_dma); #endif + // Ramp the DAC to default. The start is ignored when the current value can be readback. + // Otherwise, we just set it immediately. + ramp_value(self->quiescent_value, self->quiescent_value); } bool common_hal_audioio_audioout_get_playing(audioio_audioout_obj_t* self) { diff --git a/ports/atmel-samd/common-hal/audioio/AudioOut.h b/ports/atmel-samd/common-hal/audioio/AudioOut.h index efbfe2a1d..56b6b75c8 100644 --- a/ports/atmel-samd/common-hal/audioio/AudioOut.h +++ b/ports/atmel-samd/common-hal/audioio/AudioOut.h @@ -44,6 +44,7 @@ typedef struct { uint8_t tc_to_dac_event_channel; bool playing; + uint16_t quiescent_value; } audioio_audioout_obj_t; void audioout_reset(void); diff --git a/ports/atmel-samd/mpconfigport.h b/ports/atmel-samd/mpconfigport.h index a6351cef6..a4c763d05 100644 --- a/ports/atmel-samd/mpconfigport.h +++ b/ports/atmel-samd/mpconfigport.h @@ -20,8 +20,6 @@ #define MICROPY_COMP_CONST (1) #define MICROPY_COMP_DOUBLE_TUPLE_ASSIGN (1) #define MICROPY_COMP_TRIPLE_TUPLE_ASSIGN (1) -// Turn off for consistency -#define MICROPY_CPYTHON_COMPAT (0) #define MICROPY_MEM_STATS (0) #define MICROPY_DEBUG_PRINTERS (0) #define MICROPY_ENABLE_GC (1) @@ -57,7 +55,6 @@ #define MICROPY_PY_DESCRIPTORS (1) #define MICROPY_PY_MATH (0) #define MICROPY_PY_CMATH (0) -#define MICROPY_PY_IO (0) #define MICROPY_PY_URANDOM (0) #define MICROPY_PY_URANDOM_EXTRA_FUNCS (0) #define MICROPY_PY_STRUCT (0) @@ -96,7 +93,6 @@ #define MICROPY_VFS (1) #define MICROPY_VFS_FAT (1) #define MICROPY_PY_MACHINE (1) -#define MICROPY_MODULE_WEAK_LINKS (0) #define MICROPY_REPL_AUTO_INDENT (1) #define MICROPY_HW_ENABLE_DAC (1) #define MICROPY_ENABLE_FINALISER (1) @@ -155,15 +151,33 @@ typedef long mp_off_t; #include "include/sam.h" #ifdef SAMD21 -#define CIRCUITPY_MCU_FAMILY samd21 +#define CIRCUITPY_MCU_FAMILY samd21 #define MICROPY_PY_SYS_PLATFORM "Atmel SAMD21" -#define PORT_HEAP_SIZE (16384 + 4096) +#define PORT_HEAP_SIZE (16384 + 4096) +#define CIRCUITPY_DEFAULT_STACK_SIZE 4096 +#define MICROPY_CPYTHON_COMPAT (0) +#define MICROPY_MODULE_WEAK_LINKS (0) +#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (0) +#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (0) +#define MICROPY_PY_FUNCTION_ATTRS (0) +#define MICROPY_PY_IO (0) +#define MICROPY_PY_REVERSE_SPECIAL_METHODS (0) +#define MICROPY_PY_SYS_EXC_INFO (0) #endif #ifdef SAMD51 -#define CIRCUITPY_MCU_FAMILY samd51 +#define CIRCUITPY_MCU_FAMILY samd51 #define MICROPY_PY_SYS_PLATFORM "MicroChip SAMD51" -#define PORT_HEAP_SIZE (0x20000) // 128KiB +#define PORT_HEAP_SIZE (0x20000) // 128KiB +#define CIRCUITPY_DEFAULT_STACK_SIZE 8192 +#define MICROPY_CPYTHON_COMPAT (1) +#define MICROPY_MODULE_WEAK_LINKS (1) +#define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (1) +#define MICROPY_PY_COLLECTIONS_ORDEREDDICT (1) +#define MICROPY_PY_FUNCTION_ATTRS (1) +#define MICROPY_PY_IO (1) +#define MICROPY_PY_REVERSE_SPECIAL_METHODS (1) +#define MICROPY_PY_SYS_EXC_INFO (1) #endif #ifdef LONGINT_IMPL_NONE @@ -326,6 +340,34 @@ extern const struct _mp_obj_module_t wiznet_module; { MP_OBJ_NEW_QSTR(MP_QSTR_supervisor), (mp_obj_t)&supervisor_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_time), (mp_obj_t)&time_module }, \ { MP_OBJ_NEW_QSTR(MP_QSTR_usb_hid),(mp_obj_t)&usb_hid_module }, +#elif MICROPY_MODULE_WEAK_LINKS +#define MICROPY_PORT_BUILTIN_MODULES \ + { MP_OBJ_NEW_QSTR(MP_QSTR_analogio), (mp_obj_t)&analogio_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_board), (mp_obj_t)&board_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_busio), (mp_obj_t)&busio_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_digitalio), (mp_obj_t)&digitalio_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_microcontroller), (mp_obj_t)µcontroller_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_neopixel_write),(mp_obj_t)&neopixel_write_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR__os), (mp_obj_t)&os_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_pulseio), (mp_obj_t)&pulseio_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_random), (mp_obj_t)&random_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_rtc), (mp_obj_t)&rtc_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_samd),(mp_obj_t)&samd_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_storage), (mp_obj_t)&storage_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_struct), (mp_obj_t)&struct_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_supervisor), (mp_obj_t)&supervisor_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_math), (mp_obj_t)&math_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR__time), (mp_obj_t)&time_module }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_usb_hid),(mp_obj_t)&usb_hid_module }, \ + TOUCHIO_MODULE \ + EXTRA_BUILTIN_MODULES + +#define MICROPY_PORT_BUILTIN_MODULE_WEAK_LINKS \ + { MP_ROM_QSTR(MP_QSTR_errno), MP_ROM_PTR(&mp_module_uerrno) }, \ + { MP_ROM_QSTR(MP_QSTR_io), MP_ROM_PTR(&mp_module_io) }, \ + { MP_ROM_QSTR(MP_QSTR_os), MP_ROM_PTR(&os_module) }, \ + { MP_OBJ_NEW_QSTR(MP_QSTR_time), (mp_obj_t)&time_module }, \ + #else #define MICROPY_PORT_BUILTIN_MODULES \ { MP_OBJ_NEW_QSTR(MP_QSTR_analogio), (mp_obj_t)&analogio_module }, \ @@ -403,8 +445,4 @@ void run_background_tasks(void); #define CIRCUITPY_AUTORELOAD_DELAY_MS 500 #define CIRCUITPY_BOOT_OUTPUT_FILE "/boot_out.txt" -// TODO(tannewt): Make this 6k+ for any non-express M4 boards because they cache sectors on the -// stack. -#define CIRCUITPY_DEFAULT_STACK_SIZE 4096 - #endif // __INCLUDED_MPCONFIGPORT_H diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index 2349a7418..45b8ed1a4 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -249,11 +249,11 @@ void reset_port(void) { } #if defined(EXPRESS_BOARD) && !defined(__SAMR21G18A__) + audio_dma_reset(); audioout_reset(); #if !defined(__SAMD51G19A__) && !defined(__SAMD51G18A__) i2sout_reset(); #endif - audio_dma_reset(); //pdmin_reset(); #endif #ifdef SAMD21 diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile index 93ca78376..a1a6a4d35 100755 --- a/ports/nrf/Makefile +++ b/ports/nrf/Makefile @@ -90,6 +90,7 @@ LIBS += -L $(dir $(LIBGCC_FILE_NAME)) -lgcc SRC_NRFX = $(addprefix nrfx/,\ drivers/src/nrfx_power.c \ drivers/src/nrfx_spim.c \ + drivers/src/nrfx_timer.c \ drivers/src/nrfx_twim.c \ drivers/src/nrfx_uarte.c \ ) @@ -123,6 +124,7 @@ SRC_C += \ peripherals/nrf/clocks.c \ peripherals/nrf/$(MCU_CHIP)/pins.c \ peripherals/nrf/$(MCU_CHIP)/power.c \ + peripherals/nrf/timers.c \ supervisor/shared/memory.c DRIVERS_SRC_C += $(addprefix modules/,\ @@ -298,16 +300,16 @@ sd: $(BUILD)/$(OUTPUT_FILENAME).hex else ifeq ($(FLASHER), pyocd) flash: $(BUILD)/$(OUTPUT_FILENAME).hex - pyocd-flashtool -t $(MCU_SUB_VARIANT) $< --sector_erase - pyocd-tool -t $(MCU_SUB_VARIANT) erase $(BOOT_SETTING_ADDR) - pyocd-tool -t $(MCU_SUB_VARIANT) write32 $(BOOT_SETTING_ADDR) 0x00000001 - pyocd-tool -t $(MCU_SUB_VARIANT) reset + pyocd-flashtool -t $(MCU_VARIANT) $< --sector_erase + #pyocd-tool -t $(MCU_VARIANT) erase $(BOOT_SETTING_ADDR) + pyocd-tool -t $(MCU_VARIANT) write32 $(BOOT_SETTING_ADDR) 0x00000001 + pyocd-tool -t $(MCU_VARIANT) reset sd: $(BUILD)/$(OUTPUT_FILENAME).hex - pyocd-flashtool -t $(MCU_SUB_VARIANT) --chip_erase - pyocd-flashtool -t $(MCU_SUB_VARIANT) $(SOFTDEV_HEX) - pyocd-flashtool -t $(MCU_SUB_VARIANT) $< --sector_erase - pyocd-tool -t $(MCU_SUB_VARIANT) reset $(BOOT_SETTING_ADDR) + pyocd-flashtool -t $(MCU_VARIANT) --chip_erase + pyocd-flashtool -t $(MCU_VARIANT) $(SOFTDEV_HEX) + pyocd-flashtool -t $(MCU_VARIANT) $< --sector_erase + pyocd-tool -t $(MCU_VARIANT) reset $(BOOT_SETTING_ADDR) endif diff --git a/ports/nrf/README.md b/ports/nrf/README.md index c21bd5d63..4bd865400 100644 --- a/ports/nrf/README.md +++ b/ports/nrf/README.md @@ -39,6 +39,7 @@ the following links: * Adafruit [Feather nRF52](boards/feather_nrf52832/README.md): 512KB Flash, 64KB SRAM * Adafruit [Feather nRF52840](boards/feather_nrf52840_express/README.md): 1MB Flash, 256KB SRAM * Nordic PCA10056 see [Feather nRF52840](boards/pca10056/README.md) +* MakerDiary NRF52840 MDK see [its README](boards/makerdiary_nrf52840_mdk/README.md) For all other board targets, see the generic notes below. @@ -80,6 +81,7 @@ pca10040 | s132 | Peripheral and Scanner | [S pca10056 | s140 | Peripheral and Scanner | [Segger](#segger-targets) feather_nrf52832 | s132 | Peripheral and Scanner | [UART DFU](#dfu-targets) feather_nrf52840_express | s140 | Peripheral and Scanner | UF2 bootloader +makerdiary_nrf52840_mdk | s140 | Peripheral and Scanner | pyocd or ARM mbed DAPLink ## Segger Targets diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk/README.md b/ports/nrf/boards/makerdiary_nrf52840_mdk/README.md new file mode 100644 index 000000000..f1ba8151a --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_mdk/README.md @@ -0,0 +1,102 @@ +# MakerDiary NRF52840 MDK + +Refer to https://github.com/makerdiary/nrf52840-mdk or +https://wiki.makerdiary.com/nrf52840-mdk/ for more details about the device. + +Notably, CircuitPython does not currently support QSPI external flash on NRF +devices, so neither does this port - the 64Mb flash device is not used for +anything. Also, don't confuse this with the 64MiB drive that shows up on your +computer - it's actually part of the MSC driver provided by the DAPLink +debugger, and is inaccessible at all from Python land (this drive is where you +can copy `firmware.hex` if you'd prefer to flash that way as opposed to with +`pyocd`. You'll still have access to 256KB of the onboard flash, however, for +storing your Python files, cat pictures, or whatever. + +It's also interesting to note that all three LEDs and the "user button" on this +device are wired through sinks, not sources, so flip your boolean expectations +when dealing with `digitalio.DigitalInOut` on this device - `my_led.value = +True` turns the LED off! Likewise, the user button will read `False` when +pressed. + +## Installing CircuitPython submodules + +Before you can build, you will need to run the following commands once, which +will install the submodules that are part of the CircuitPython ecosystem, and +build the `mpy-cross` tool: + +``` +$ cd circuitpython +$ git submodule update --init +$ make -C mpy-cross +``` + +You then need to download the SD and Nordic SDK files via: + +> This script relies on `wget`, which must be available from the command line. + +``` +$ cd ports/nrf +$ ./drivers/bluetooth/download_ble_stack.sh +``` + +## Note about bootloaders + +While most Adafruit devices come with (or can easily be flashed with) an +Adafruit-provided bootloader (supporting niceties like UF2 flashing), this +board comes with DAPLink which (apparently?) handles everything from debugging +to programming the device, as well as the boot sequence. What's particularly +awesome about this board is that there is no physical interaction with the board +required to flash new code (read: CircuitPython builds) - the device is _always_ +listening for new firmware uploads (via `pyocd-flashtool`), even if userspace +code is running. + +## Building and Flashing CircuitPython + +You'll need to have [pyocd](https://github.com/mbedmicro/pyOCD) installed as +appropriate for your system. + +```sh +make BOARD=makerdiary_nrf52840_mdk FLASHER=pyocd SD=s140 flash +``` + +This should give you the following (or very similar) output, and you will see +a DFU blinky pattern on one of the board LEDs: + +``` +$ make BOARD=makerdiary_nrf52840_mdk FLASHER=pyocd SD=s140 flash +Use make V=1, make V=2 or set BUILD_VERBOSE similarly in your environment to increase build verbosity. +pyocd-flashtool -t nrf52 build-makerdiary_nrf52840_mdk-s140/firmware.hex --sector_erase +INFO:root:DAP SWD MODE initialised +INFO:root:ROM table #0 @ 0xe00ff000 cidr=b105100d pidr=2002c4008 +INFO:root:[0]<e000e000:SCS-M4 cidr=b105e00d, pidr=4000bb00c, class=14> +WARNING:root:Invalid coresight component, cidr=0x0 +INFO:root:[1]<e0001000: cidr=0, pidr=0, component invalid> +INFO:root:[2]<e0002000:FPB cidr=b105e00d, pidr=4002bb003, class=14> +WARNING:root:Invalid coresight component, cidr=0x1010101 +INFO:root:[3]<e0000000: cidr=1010101, pidr=101010101010101, component invalid> +WARNING:root:Invalid coresight component, cidr=0x0 +INFO:root:[4]<e0040000: cidr=0, pidr=0, component invalid> +INFO:root:[5]<e0041000:ETM-M4 cidr=b105900d, pidr=4000bb925, class=9, devtype=13, devid=0> +INFO:root:CPU core is Cortex-M4 +INFO:root:FPU present +INFO:root:6 hardware breakpoints, 4 literal comparators +INFO:root:4 hardware watchpoints +[====================] 100% +INFO:root:Programmed 237568 bytes (58 pages) at 14.28 kB/s +#pyocd-tool -t nrf52 erase 0xFF000 +pyocd-tool -t nrf52 write32 0xFF000 0x00000001 +WARNING:root:Invalid coresight component, cidr=0x0 +WARNING:root:Invalid coresight component, cidr=0x1010101 +WARNING:root:Invalid coresight component, cidr=0x0 +pyocd-tool -t nrf52 reset +WARNING:root:Invalid coresight component, cidr=0x0 +WARNING:root:Invalid coresight component, cidr=0x1010101 +WARNING:root:Invalid coresight component, cidr=0x0 +Resetting target +``` + +Alternatively (and untested by me), it's apparently possible to copy +`firmware.hex` to the MSC device provided by DAPLink and flash that way. Refer +to [the upstream +documentation](https://wiki.makerdiary.com/nrf52840-mdk/getting-started/#drag-n-drop-programming) +for details. diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk/board.c b/ports/nrf/boards/makerdiary_nrf52840_mdk/board.c new file mode 100644 index 000000000..a6d050fce --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_mdk/board.c @@ -0,0 +1,40 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries + * + * 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 "boards/board.h" +#include "usb.h" + +void board_init(void) { + usb_init(); +} + +bool board_requests_safe_mode(void) { + return false; +} + +void reset_board(void) { + +} diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.h b/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.h new file mode 100644 index 000000000..b33fb2dd6 --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.h @@ -0,0 +1,64 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Glenn Ruben Bakke + * Copyright (c) 2018 Dan Halbert for Adafruit Industries + * + * 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 MAKERDIARYNRF52840MDK + +#define MICROPY_HW_BOARD_NAME "MakerDiary nRF52840 MDK" +#define MICROPY_HW_MCU_NAME "nRF52840" +#define MICROPY_PY_SYS_PLATFORM "MakerDiary52840MDK" + +#define MICROPY_QSPI_DATA0 (&pin_P1_05) +#define MICROPY_QSPI_DATA1 (&pin_P1_04) +#define MICROPY_QSPI_DATA2 (&pin_P1_02) +#define MICROPY_QSPI_DATA3 (&pin_P1_01) +#define MICROPY_QSPI_SCK (&pin_P1_03) +#define MICROPY_QSPI_CS (&pin_P1_06) + +#define CIRCUITPY_AUTORELOAD_DELAY_MS 500 + +// If you change this, then make sure to update the linker scripts as well to +// make sure you don't overwrite code +#define PORT_HEAP_SIZE (128 * 1024) +// TODO #define CIRCUITPY_INTERNAL_NVM_SIZE 8192 + +#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE) + +// TODO #include "external_flash/devices.h" + +#define EXTERNAL_FLASH_DEVICE_COUNT 1 +// Datasheet for when this is implemented: +// http://www.mxic.com.tw/Lists/Datasheet/Attachments/7428/MX25R6435F,%20Wide%20Range,%2064Mb,%20v1.4.pdf +#define EXTERNAL_FLASH_DEVICES MX25R6435F + +#define EXTERNAL_FLASH_QSPI_DUAL + +// TODO include "external_flash/external_flash.h" + +#define BOARD_HAS_CRYSTAL 0 + +#define DEFAULT_UART_BUS_RX (&pin_P0_19) +#define DEFAULT_UART_BUS_TX (&pin_P0_20) diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk b/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk new file mode 100644 index 000000000..caf580ec4 --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_mdk/mpconfigboard.mk @@ -0,0 +1,16 @@ +MCU_SERIES = m4 +MCU_VARIANT = nrf52 +MCU_SUB_VARIANT = nrf52840 +MCU_CHIP = nrf52840 +SD ?= s140 +SOFTDEV_VERSION ?= 6.1.0 + +BOOT_SETTING_ADDR = 0xFF000 + +ifeq ($(SD),) + LD_FILE = boards/nrf52840_1M_256k.ld +else + LD_FILE = boards/adafruit_$(MCU_SUB_VARIANT)_$(SD_LOWER)_v$(firstword $(subst ., ,$(SOFTDEV_VERSION))).ld +endif + +NRF_DEFINES += -DNRF52840_XXAA -DNRF52840 diff --git a/ports/nrf/boards/makerdiary_nrf52840_mdk/pins.c b/ports/nrf/boards/makerdiary_nrf52840_mdk/pins.c new file mode 100644 index 000000000..27f0c6797 --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_mdk/pins.c @@ -0,0 +1,63 @@ +#include "shared-bindings/board/__init__.h" + +#include "board_busses.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR_AIN0), MP_ROM_PTR(&pin_P0_02) }, + { MP_ROM_QSTR(MP_QSTR_AIN1), MP_ROM_PTR(&pin_P0_03) }, + { MP_ROM_QSTR(MP_QSTR_AIN2), MP_ROM_PTR(&pin_P0_04) }, + { MP_ROM_QSTR(MP_QSTR_AIN3), MP_ROM_PTR(&pin_P0_05) }, + { MP_ROM_QSTR(MP_QSTR_AIN4), MP_ROM_PTR(&pin_P0_28) }, + { MP_ROM_QSTR(MP_QSTR_AIN5), MP_ROM_PTR(&pin_P0_29) }, + { MP_ROM_QSTR(MP_QSTR_AIN6), MP_ROM_PTR(&pin_P0_30) }, + { MP_ROM_QSTR(MP_QSTR_AIN7), MP_ROM_PTR(&pin_P0_31) }, + + { MP_ROM_QSTR(MP_QSTR_AREF), MP_ROM_PTR(&pin_P0_04) }, + { MP_ROM_QSTR(MP_QSTR_VDIV), MP_ROM_PTR(&pin_P0_05) }, + + { MP_ROM_QSTR(MP_QSTR_NFC1), MP_ROM_PTR(&pin_P0_09) }, + { MP_ROM_QSTR(MP_QSTR_NFC2), MP_ROM_PTR(&pin_P0_10) }, + + { MP_ROM_QSTR(MP_QSTR_P2), MP_ROM_PTR(&pin_P0_02) }, + { MP_ROM_QSTR(MP_QSTR_P3), MP_ROM_PTR(&pin_P0_03) }, + { MP_ROM_QSTR(MP_QSTR_P4), MP_ROM_PTR(&pin_P0_04) }, + { MP_ROM_QSTR(MP_QSTR_P5), MP_ROM_PTR(&pin_P0_05) }, + { MP_ROM_QSTR(MP_QSTR_P6), MP_ROM_PTR(&pin_P0_06) }, + { MP_ROM_QSTR(MP_QSTR_P7), MP_ROM_PTR(&pin_P0_07) }, + { MP_ROM_QSTR(MP_QSTR_P8), MP_ROM_PTR(&pin_P0_08) }, + { MP_ROM_QSTR(MP_QSTR_P9), MP_ROM_PTR(&pin_P0_09) }, + { MP_ROM_QSTR(MP_QSTR_P10), MP_ROM_PTR(&pin_P0_10) }, + { MP_ROM_QSTR(MP_QSTR_P11), MP_ROM_PTR(&pin_P0_11) }, + { MP_ROM_QSTR(MP_QSTR_P12), MP_ROM_PTR(&pin_P0_12) }, + { MP_ROM_QSTR(MP_QSTR_P13), MP_ROM_PTR(&pin_P0_13) }, + { MP_ROM_QSTR(MP_QSTR_P14), MP_ROM_PTR(&pin_P0_14) }, + { MP_ROM_QSTR(MP_QSTR_P15), MP_ROM_PTR(&pin_P0_15) }, + { MP_ROM_QSTR(MP_QSTR_P16), MP_ROM_PTR(&pin_P0_16) }, + { MP_ROM_QSTR(MP_QSTR_P17), MP_ROM_PTR(&pin_P0_17) }, + { MP_ROM_QSTR(MP_QSTR_P21), MP_ROM_PTR(&pin_P0_21) }, + { MP_ROM_QSTR(MP_QSTR_P25), MP_ROM_PTR(&pin_P0_25) }, + { MP_ROM_QSTR(MP_QSTR_P26), MP_ROM_PTR(&pin_P0_26) }, + { MP_ROM_QSTR(MP_QSTR_P27), MP_ROM_PTR(&pin_P0_27) }, + { MP_ROM_QSTR(MP_QSTR_P28), MP_ROM_PTR(&pin_P0_28) }, + { MP_ROM_QSTR(MP_QSTR_P29), MP_ROM_PTR(&pin_P0_29) }, + { MP_ROM_QSTR(MP_QSTR_P30), MP_ROM_PTR(&pin_P0_30) }, + { MP_ROM_QSTR(MP_QSTR_P31), MP_ROM_PTR(&pin_P0_31) }, + + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P1_03) }, + { MP_ROM_QSTR(MP_QSTR_CSN), MP_ROM_PTR(&pin_P1_06) }, + { MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_P1_05) }, + { MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_P1_04) }, + { MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_P1_02) }, + { MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_P1_01) }, + + { MP_ROM_QSTR(MP_QSTR_TXD), MP_ROM_PTR(&pin_P0_20) }, + { MP_ROM_QSTR(MP_QSTR_RXD), MP_ROM_PTR(&pin_P0_19) }, + + { MP_ROM_QSTR(MP_QSTR_LED_RED), MP_ROM_PTR(&pin_P0_23) }, + { MP_ROM_QSTR(MP_QSTR_LED_GREEN), MP_ROM_PTR(&pin_P0_22) }, + { MP_ROM_QSTR(MP_QSTR_LED_BLUE), MP_ROM_PTR(&pin_P0_24) }, + + { MP_ROM_QSTR(MP_QSTR_USR_BTN), MP_ROM_PTR(&pin_P1_00) }, +}; + +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/nrf/common-hal/analogio/AnalogOut.c b/ports/nrf/common-hal/analogio/AnalogOut.c index dc0f53740..adafa15d5 100644 --- a/ports/nrf/common-hal/analogio/AnalogOut.c +++ b/ports/nrf/common-hal/analogio/AnalogOut.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * Copyright (c) 2018 Dan Halbert for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/nrf/common-hal/board/__init__.c b/ports/nrf/common-hal/board/__init__.c index 287f546d5..350f2eea5 100644 --- a/ports/nrf/common-hal/board/__init__.c +++ b/ports/nrf/common-hal/board/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * Copyright (c) 2018 Dan Halbert for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/nrf/common-hal/busio/I2C.c b/ports/nrf/common-hal/busio/I2C.c index c2a6cab70..4c42e58cd 100644 --- a/ports/nrf/common-hal/busio/I2C.c +++ b/ports/nrf/common-hal/busio/I2C.c @@ -56,6 +56,7 @@ STATIC twim_peripheral_t twim_peripherals[] = { void i2c_reset(void) { for (size_t i = 0 ; i < MP_ARRAY_SIZE(twim_peripherals); i++) { + nrf_twim_disable(twim_peripherals[i].twim.p_twim); twim_peripherals[i].in_use = false; } } diff --git a/ports/nrf/common-hal/busio/UART.c b/ports/nrf/common-hal/busio/UART.c index b2dbb56a1..b9e79381a 100644 --- a/ports/nrf/common-hal/busio/UART.c +++ b/ports/nrf/common-hal/busio/UART.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * Copyright (c) 2018 Ha Thach for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -179,7 +179,7 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t self->rx_count = -1; _VERIFY_ERR(nrfx_uarte_rx(&self->uarte, self->buffer, cnt)); } - + // queue 1-byte transfer for rx_characters_available() if ( self->rx_count == 0 ) { self->rx_count = -1; diff --git a/ports/nrf/common-hal/pulseio/PWMOut.c b/ports/nrf/common-hal/pulseio/PWMOut.c index 5d94bab79..f321f848d 100644 --- a/ports/nrf/common-hal/pulseio/PWMOut.c +++ b/ports/nrf/common-hal/pulseio/PWMOut.c @@ -3,8 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries - * Copyright (c) 2016 Damien P. George + * Copyright (c) 2018 Dan Halbert for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -168,6 +167,7 @@ void common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t* self, self->frequency = frequency; self->variable_frequency = variable_frequency; + // Note this is standard, not strong drive. nrf_gpio_cfg_output(self->pin_number); // disable before mapping pin channel diff --git a/ports/nrf/common-hal/pulseio/PulseOut.c b/ports/nrf/common-hal/pulseio/PulseOut.c index 3495f38f7..044c4d3a8 100644 --- a/ports/nrf/common-hal/pulseio/PulseOut.c +++ b/ports/nrf/common-hal/pulseio/PulseOut.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * Copyright (c) 2018 Dan Halbert for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -29,31 +29,136 @@ #include <stdint.h> #include "mpconfigport.h" +#include "nrf/pins.h" +#include "nrf/timers.h" #include "py/gc.h" #include "py/runtime.h" - #include "shared-bindings/pulseio/PulseOut.h" +#include "shared-bindings/pulseio/PWMOut.h" +#include "supervisor/shared/translate.h" -//void pulse_finish(struct tc_module *const module) { -// -//} +// A single timer is shared amongst all PulseOut objects under the assumption that +// the code is single threaded. +static uint8_t refcount = 0; -void pulseout_reset() { +static nrfx_timer_t *timer = NULL; + +static uint16_t *pulse_array = NULL; +static volatile uint16_t pulse_array_index = 0; +static uint16_t pulse_array_length; + +static void turn_on(pulseio_pulseout_obj_t *pulseout) { + pulseout->pwmout->pwm->PSEL.OUT[0] = pulseout->pwmout->pin_number; +} + +static void turn_off(pulseio_pulseout_obj_t *pulseout) { + // Disconnect pin from PWM. + pulseout->pwmout->pwm->PSEL.OUT[0] = 0xffffffff; + // Make sure pin is low. + nrf_gpio_pin_clear(pulseout->pwmout->pin_number); +} + +static void start_timer(void) { + nrfx_timer_clear(timer); + // true enables interrupt. + nrfx_timer_compare(timer, NRF_TIMER_CC_CHANNEL0, pulse_array[pulse_array_index], true); + nrfx_timer_resume(timer); +} + +static void pulseout_event_handler(nrf_timer_event_t event_type, void *p_context) { + pulseio_pulseout_obj_t *pulseout = (pulseio_pulseout_obj_t*) p_context; + if (event_type != NRF_TIMER_EVENT_COMPARE0) { + // Spurious event. + return; + } + nrfx_timer_pause(timer); + + pulse_array_index++; + // No more pulses. Turn off output and don't restart. + if (pulse_array_index >= pulse_array_length) { + turn_off(pulseout); + return; + } + + // Alternate on and off, starting with on. + if (pulse_array_index % 2 == 0) { + turn_on(pulseout); + } else { + turn_off(pulseout); + } + + // Count up to the next given value. + start_timer(); } -void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, const pulseio_pwmout_obj_t* carrier) { - mp_raise_NotImplementedError(NULL); +void pulseout_reset() { + if (timer != NULL) { + nrf_peripherals_free_timer(timer); + } + refcount = 0; +} + +void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, + const pulseio_pwmout_obj_t* carrier) { + if (refcount == 0) { + timer = nrf_peripherals_allocate_timer(); + if (timer == NULL) { + mp_raise_RuntimeError(translate("All timers in use")); + } + } + refcount++; + + nrfx_timer_config_t timer_config = { + // PulseOut durations are in microseconds, so this is convenient. + .frequency = NRF_TIMER_FREQ_1MHz, + .mode = NRF_TIMER_MODE_TIMER, + .bit_width = NRF_TIMER_BIT_WIDTH_32, + .interrupt_priority = NRFX_TIMER_DEFAULT_CONFIG_IRQ_PRIORITY, + .p_context = self, + }; + + self->pwmout = carrier; + + nrfx_timer_init(timer, &timer_config, &pulseout_event_handler); + turn_off(self); } bool common_hal_pulseio_pulseout_deinited(pulseio_pulseout_obj_t* self) { - return 1; + return self->pwmout == NULL; } void common_hal_pulseio_pulseout_deinit(pulseio_pulseout_obj_t* self) { + if (common_hal_pulseio_pulseout_deinited(self)) { + return; + } + turn_on(self); + self->pwmout = NULL; + refcount--; + if (refcount == 0) { + nrf_peripherals_free_timer(timer); + } } void common_hal_pulseio_pulseout_send(pulseio_pulseout_obj_t* self, uint16_t* pulses, uint16_t length) { + pulse_array = pulses; + pulse_array_index = 0; + pulse_array_length = length; + + nrfx_timer_enable(timer); + + turn_on(self); + // Count up to the next given value. + start_timer(); + + while(pulse_array_index < length) { + // Do other things while we wait. The interrupts will handle sending the + // signal. + #ifdef MICROPY_VM_HOOK_LOOP + MICROPY_VM_HOOK_LOOP + #endif + } + nrfx_timer_disable(timer); } diff --git a/ports/nrf/common-hal/pulseio/PulseOut.h b/ports/nrf/common-hal/pulseio/PulseOut.h index 9a764e302..42ec52e30 100644 --- a/ports/nrf/common-hal/pulseio/PulseOut.h +++ b/ports/nrf/common-hal/pulseio/PulseOut.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries + * Copyright (c) 2018 Dan Halbert for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -28,13 +28,13 @@ #define MICROPY_INCLUDED_NRF_COMMON_HAL_PULSEIO_PULSEOUT_H #include "common-hal/microcontroller/Pin.h" +#include "common-hal/pulseio/PWMOut.h" #include "py/obj.h" typedef struct { mp_obj_base_t base; -// __IO PORT_PINCFG_Type *pincfg; - uint8_t pin; + const pulseio_pwmout_obj_t *pwmout; } pulseio_pulseout_obj_t; void pulseout_reset(void); diff --git a/ports/nrf/nrfx_config.h b/ports/nrf/nrfx_config.h index f217cb053..69b8e6a0c 100644 --- a/ports/nrf/nrfx_config.h +++ b/ports/nrf/nrfx_config.h @@ -27,8 +27,10 @@ // Enable SPIM2 and SPIM3 (if available) #define NRFX_SPIM2_ENABLED 1 -#ifdef NRF52840_XXAA +#ifdef NRF_SPIM3 #define NRFX_SPIM3_ENABLED 1 +#else + #define NRFX_SPIM3_ENABLED 0 #endif @@ -59,4 +61,24 @@ #define NRFX_PWM3_ENABLED 0 #endif +// TIMERS +#define NRFX_TIMER_ENABLED 1 +// Don't enable TIMER0: it's used by the SoftDevice. +#define NRFX_TIMER1_ENABLED 1 +#define NRFX_TIMER2_ENABLED 1 + +#ifdef NRFX_TIMER3 +#define NRFX_TIMER3_ENABLED 1 +#else +#define NRFX_TIMER3_ENABLED 0 +#endif + +#ifdef NRFX_TIMER4 +#define NRFX_TIMER4_ENABLED 1 +#else +#define NRFX_TIMER4_ENABLED 0 +#endif + +#define NRFX_TIMER_DEFAULT_CONFIG_IRQ_PRIORITY 7 + #endif // NRFX_CONFIG_H__ diff --git a/ports/nrf/peripherals/nrf/pins.h b/ports/nrf/peripherals/nrf/pins.h index 01aa9e956..33462d711 100644 --- a/ports/nrf/peripherals/nrf/pins.h +++ b/ports/nrf/peripherals/nrf/pins.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * Copyright (c) 2018 Dan Halbert for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/nrf/peripherals/nrf/timers.c b/ports/nrf/peripherals/nrf/timers.c new file mode 100644 index 000000000..0027d526f --- /dev/null +++ b/ports/nrf/peripherals/nrf/timers.c @@ -0,0 +1,88 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2018 Dan Halbert for Adafruit Industries + * + * 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 "common-hal/pulseio/PulseOut.h" + +#include <stdint.h> + +#include "nrfx.h" +#include "nrfx_timer.h" + +#include "mpconfigport.h" +#include "py/runtime.h" + +STATIC nrfx_timer_t nrfx_timers[] = { +#if NRFX_CHECK(NRFX_TIMER0_ENABLED) + // Note that TIMER0 is reserved for use by the SoftDevice, so it should not usually be enabled. + NRFX_TIMER_INSTANCE(0), +#endif +#if NRFX_CHECK(NRFX_TIMER1_ENABLED) + NRFX_TIMER_INSTANCE(1), +#endif +#if NRFX_CHECK(NRFX_TIMER2_ENABLED) + NRFX_TIMER_INSTANCE(2), +#endif +#if NRFX_CHECK(NRFX_TIMER3_ENABLED) + NRFX_TIMER_INSTANCE(3), +#endif +#if NRFX_CHECK(NRFX_TIMER4_ENABLED) + NRFX_TIMER_INSTANCE(4), +#endif +}; + +static bool nrfx_timer_allocated[ARRAY_SIZE(nrfx_timers)]; + +void timers_reset(void) { + for (size_t i = 0; i < ARRAY_SIZE(nrfx_timers); i ++) { + nrfx_timer_uninit(&nrfx_timers[i]); + nrfx_timer_allocated[i] = false; + } +} + +// Returns a free nrfx_timer instance, and marks it as allocated. +// The caller should init as with the desired config. +// Returns NULL if no timer is available. +nrfx_timer_t* nrf_peripherals_allocate_timer(void) { + for (size_t i = 0; i < ARRAY_SIZE(nrfx_timers); i ++) { + if (!nrfx_timer_allocated[i]) { + nrfx_timer_allocated[i] = true; + return &nrfx_timers[i]; + } + } + return NULL; +} + +// Free a timer, which may or may not have been initialized. +void nrf_peripherals_free_timer(nrfx_timer_t* timer) { + for (size_t i = 0; i < ARRAY_SIZE(nrfx_timers); i ++) { + if (timer == &nrfx_timers[i]) { + nrfx_timer_allocated[i] = false; + // Safe to call even if not initialized. + nrfx_timer_uninit(timer); + return; + } + } +} diff --git a/ports/nrf/peripherals/nrf/timers.h b/ports/nrf/peripherals/nrf/timers.h new file mode 100644 index 000000000..7d3815579 --- /dev/null +++ b/ports/nrf/peripherals/nrf/timers.h @@ -0,0 +1,32 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2018 Dan Halbert for Adafruit Industries + * + * 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 "nrfx.h" +#include "nrfx_timer.h" + +void timers_reset(void); +nrfx_timer_t* nrf_peripherals_allocate_timer(void); +void nrf_peripherals_free_timer(nrfx_timer_t* timer); diff --git a/ports/nrf/supervisor/port.c b/ports/nrf/supervisor/port.c index c858a3648..f98b05f5a 100644 --- a/ports/nrf/supervisor/port.c +++ b/ports/nrf/supervisor/port.c @@ -31,12 +31,14 @@ #include "nrf/cache.h" #include "nrf/clocks.h" #include "nrf/power.h" +#include "nrf/timers.h" #include "shared-module/gamepad/__init__.h" #include "common-hal/microcontroller/Pin.h" #include "common-hal/busio/I2C.h" #include "common-hal/busio/SPI.h" #include "common-hal/pulseio/PWMOut.h" +#include "common-hal/pulseio/PulseOut.h" #include "tick.h" safe_mode_t port_init(void) { @@ -81,6 +83,8 @@ void reset_port(void) { i2c_reset(); spi_reset(); pwmout_reset(); + pulseout_reset(); + timers_reset(); reset_all_pins(); } @@ -88,16 +92,7 @@ void reset_port(void) { void HardFault_Handler(void) { -// static volatile uint32_t reg; -// static volatile uint32_t reg2; -// static volatile uint32_t bfar; -// reg = SCB->HFSR; -// reg2 = SCB->CFSR; -// bfar = SCB->BFAR; -// for (int i = 0; i < 0; i++) -// { -// (void)reg; -// (void)reg2; -// (void)bfar; -// } + while (true) { + asm(""); + } } diff --git a/py/builtinimport.c b/py/builtinimport.c index fee875b60..6ed0a7594 100755..100644 --- a/py/builtinimport.c +++ b/py/builtinimport.c @@ -155,11 +155,9 @@ STATIC void do_load_from_lexer(mp_obj_t module_obj, mp_lexer_t *lex) { #endif #if MICROPY_PERSISTENT_CODE_LOAD || MICROPY_MODULE_FROZEN_MPY -STATIC void do_execute_raw_code(mp_obj_t module_obj, mp_raw_code_t *raw_code) { +STATIC void do_execute_raw_code(mp_obj_t module_obj, mp_raw_code_t *raw_code, const char *filename) { #if MICROPY_PY___FILE__ - // TODO - //qstr source_name = lex->source_name; - //mp_store_attr(module_obj, MP_QSTR___file__, MP_OBJ_NEW_QSTR(source_name)); + mp_store_attr(module_obj, MP_QSTR___file__, MP_OBJ_NEW_QSTR(qstr_from_str(filename))); #endif // execute the module in its context @@ -222,7 +220,7 @@ STATIC void do_load(mp_obj_t module_obj, vstr_t *file) { // its data) in the list of frozen files, execute it. #if MICROPY_MODULE_FROZEN_MPY if (frozen_type == MP_FROZEN_MPY) { - do_execute_raw_code(module_obj, modref); + do_execute_raw_code(module_obj, modref, file_str); return; } #endif @@ -235,7 +233,7 @@ STATIC void do_load(mp_obj_t module_obj, vstr_t *file) { #if MICROPY_PERSISTENT_CODE_LOAD if (file_str[file->len - 3] == 'm') { mp_raw_code_t *raw_code = mp_raw_code_load_file(file_str); - do_execute_raw_code(module_obj, raw_code); + do_execute_raw_code(module_obj, raw_code, file_str); return; } #endif diff --git a/py/mkenv.mk b/py/mkenv.mk index facb8a3c2..b76dd60f8 100644 --- a/py/mkenv.mk +++ b/py/mkenv.mk @@ -72,7 +72,7 @@ endif MAKE_FROZEN = $(PYTHON) $(TOP)/tools/make-frozen.py MPY_CROSS = $(TOP)/mpy-cross/mpy-cross -MPY_TOOL = $(PYTHON) $(TOP)/tools/mpy-tool.py +MPY_TOOL = $(PYTHON3) $(TOP)/tools/mpy-tool.py PREPROCESS_FROZEN_MODULES = PYTHONPATH=$(TOP)/tools/python-semver $(TOP)/tools/preprocess_frozen_modules.py all: diff --git a/py/mkrules.mk b/py/mkrules.mk index e619f2bdd..aa94ba412 100644 --- a/py/mkrules.mk +++ b/py/mkrules.mk @@ -130,7 +130,7 @@ xargs -n1 "$(abspath $(MPY_CROSS))" $(MPY_CROSS_FLAGS) # to build frozen_mpy.c from all .mpy files # You need to define MPY_TOOL_LONGINT_IMPL in mpconfigport.mk # if the default will not work (mpz is the default). -$(BUILD)/frozen_mpy.c: $(BUILD)/frozen_mpy $(BUILD)/genhdr/qstrdefs.generated.h +$(BUILD)/frozen_mpy.c: $(BUILD)/frozen_mpy $(BUILD)/genhdr/qstrdefs.generated.h $(TOP)/tools/mpy-tool.py $(STEPECHO) "Creating $@" $(Q)$(MPY_TOOL) $(MPY_TOOL_LONGINT_IMPL) -f -q $(BUILD)/genhdr/qstrdefs.preprocessed.h $(shell $(FIND) -L $(BUILD)/frozen_mpy -type f -name '*.mpy') > $@ endif diff --git a/py/modsys.c b/py/modsys.c index e32841923..68e048d91 100644 --- a/py/modsys.c +++ b/py/modsys.c @@ -135,7 +135,7 @@ STATIC mp_obj_t mp_sys_exc_info(void) { t->items[0] = MP_OBJ_FROM_PTR(mp_obj_get_type(cur_exc)); t->items[1] = cur_exc; - t->items[2] = mp_const_none; + t->items[2] = mp_obj_exception_get_traceback_obj(cur_exc); return MP_OBJ_FROM_PTR(t); } MP_DEFINE_CONST_FUN_OBJ_0(mp_sys_exc_info_obj, mp_sys_exc_info); @@ -717,6 +717,7 @@ bool mp_obj_exception_match(mp_obj_t exc, mp_const_obj_t exc_type); void mp_obj_exception_clear_traceback(mp_obj_t self_in); void mp_obj_exception_add_traceback(mp_obj_t self_in, qstr file, size_t line, qstr block); void mp_obj_exception_get_traceback(mp_obj_t self_in, size_t *n, size_t **values); +mp_obj_t mp_obj_exception_get_traceback_obj(mp_obj_t self_in); mp_obj_t mp_obj_exception_get_value(mp_obj_t self_in); mp_obj_t mp_obj_exception_make_new(const mp_obj_type_t *type_in, size_t n_args, size_t n_kw, const mp_obj_t *args); mp_obj_t mp_alloc_emergency_exception_buf(mp_obj_t size_in); diff --git a/py/objboundmeth.c b/py/objboundmeth.c index b0df6a68a..a05680d41 100644 --- a/py/objboundmeth.c +++ b/py/objboundmeth.c @@ -92,6 +92,9 @@ STATIC void bound_meth_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) { if (attr == MP_QSTR___name__) { mp_obj_bound_meth_t *o = MP_OBJ_TO_PTR(self_in); dest[0] = MP_OBJ_NEW_QSTR(mp_obj_fun_get_name(o->meth)); + } else if (attr == MP_QSTR___func__) { + mp_obj_bound_meth_t *o = MP_OBJ_TO_PTR(self_in); + dest[0] = o->meth; } } #endif diff --git a/py/objexcept.c b/py/objexcept.c index 8bd6245a4..1ddc2174e 100644 --- a/py/objexcept.c +++ b/py/objexcept.c @@ -30,6 +30,7 @@ #include <stdio.h> #include "py/objlist.h" +#include "py/objnamedtuple.h" #include "py/objstr.h" #include "py/objtuple.h" #include "py/objtype.h" @@ -531,3 +532,164 @@ void mp_obj_exception_get_traceback(mp_obj_t self_in, size_t *n, size_t **values *values = self->traceback_data; } } + +#if MICROPY_PY_SYS_EXC_INFO +STATIC const mp_obj_namedtuple_type_t code_type_obj = { + .base = { + .base = { + .type = &mp_type_type + }, + .name = MP_QSTR_code, + .print = namedtuple_print, + .make_new = namedtuple_make_new, + .unary_op = mp_obj_tuple_unary_op, + .binary_op = mp_obj_tuple_binary_op, + .attr = namedtuple_attr, + .subscr = mp_obj_tuple_subscr, + .getiter = mp_obj_tuple_getiter, + .parent = &mp_type_tuple, + }, + .n_fields = 15, + .fields = { + MP_QSTR_co_argcount, + MP_QSTR_co_kwonlyargcount, + MP_QSTR_co_nlocals, + MP_QSTR_co_stacksize, + MP_QSTR_co_flags, + MP_QSTR_co_code, + MP_QSTR_co_consts, + MP_QSTR_co_names, + MP_QSTR_co_varnames, + MP_QSTR_co_freevars, + MP_QSTR_co_cellvars, + MP_QSTR_co_filename, + MP_QSTR_co_name, + MP_QSTR_co_firstlineno, + MP_QSTR_co_lnotab, + }, +}; + +STATIC mp_obj_t code_make_new(qstr file, qstr block) { + mp_obj_t elems[15] = { + mp_obj_new_int(0), // co_argcount + mp_obj_new_int(0), // co_kwonlyargcount + mp_obj_new_int(0), // co_nlocals + mp_obj_new_int(0), // co_stacksize + mp_obj_new_int(0), // co_flags + mp_obj_new_bytearray(0, NULL), // co_code + mp_obj_new_tuple(0, NULL), // co_consts + mp_obj_new_tuple(0, NULL), // co_names + mp_obj_new_tuple(0, NULL), // co_varnames + mp_obj_new_tuple(0, NULL), // co_freevars + mp_obj_new_tuple(0, NULL), // co_cellvars + MP_OBJ_NEW_QSTR(file), // co_filename + MP_OBJ_NEW_QSTR(block), // co_name + mp_obj_new_int(1), // co_firstlineno + mp_obj_new_bytearray(0, NULL), // co_lnotab + }; + + return namedtuple_make_new((const mp_obj_type_t*)&code_type_obj, 15, 0, elems); +} + +STATIC const mp_obj_namedtuple_type_t frame_type_obj = { + .base = { + .base = { + .type = &mp_type_type + }, + .name = MP_QSTR_frame, + .print = namedtuple_print, + .make_new = namedtuple_make_new, + .unary_op = mp_obj_tuple_unary_op, + .binary_op = mp_obj_tuple_binary_op, + .attr = namedtuple_attr, + .subscr = mp_obj_tuple_subscr, + .getiter = mp_obj_tuple_getiter, + .parent = &mp_type_tuple, + }, + .n_fields = 8, + .fields = { + MP_QSTR_f_back, + MP_QSTR_f_builtins, + MP_QSTR_f_code, + MP_QSTR_f_globals, + MP_QSTR_f_lasti, + MP_QSTR_f_lineno, + MP_QSTR_f_locals, + MP_QSTR_f_trace, + }, +}; + +STATIC mp_obj_t frame_make_new(mp_obj_t f_code, int f_lineno) { + mp_obj_t elems[8] = { + mp_const_none, // f_back + mp_obj_new_dict(0), // f_builtins + f_code, // f_code + mp_obj_new_dict(0), // f_globals + mp_obj_new_int(0), // f_lasti + mp_obj_new_int(f_lineno), // f_lineno + mp_obj_new_dict(0), // f_locals + mp_const_none, // f_trace + }; + + return namedtuple_make_new((const mp_obj_type_t*)&frame_type_obj, 8, 0, elems); +} + +STATIC const mp_obj_namedtuple_type_t traceback_type_obj = { + .base = { + .base = { + .type = &mp_type_type + }, + .name = MP_QSTR_traceback, + .print = namedtuple_print, + .make_new = namedtuple_make_new, + .unary_op = mp_obj_tuple_unary_op, + .binary_op = mp_obj_tuple_binary_op, + .attr = namedtuple_attr, + .subscr = mp_obj_tuple_subscr, + .getiter = mp_obj_tuple_getiter, + .parent = &mp_type_tuple, + }, + .n_fields = 4, + .fields = { + MP_QSTR_tb_frame, + MP_QSTR_tb_lasti, + MP_QSTR_tb_lineno, + MP_QSTR_tb_next, + }, +}; + +STATIC mp_obj_t traceback_from_values(size_t *values, mp_obj_t tb_next) { + int lineno = values[1]; + + mp_obj_t elems[4] = { + frame_make_new(code_make_new(values[0], values[2]), lineno), + mp_obj_new_int(0), + mp_obj_new_int(lineno), + tb_next, + }; + + return namedtuple_make_new((const mp_obj_type_t*)&traceback_type_obj, 4, 0, elems); +}; + +mp_obj_t mp_obj_exception_get_traceback_obj(mp_obj_t self_in) { + mp_obj_exception_t *self = MP_OBJ_TO_PTR(self_in); + + if (!mp_obj_is_exception_instance(self)) { + return mp_const_none; + } + + size_t n, *values; + mp_obj_exception_get_traceback(self, &n, &values); + if (n == 0) { + return mp_const_none; + } + + mp_obj_t tb_next = mp_const_none; + + for (size_t i = 0; i < n; i += 3) { + tb_next = traceback_from_values(&values[i], tb_next); + } + + return tb_next; +} +#endif diff --git a/shared-bindings/audioio/AudioOut.c b/shared-bindings/audioio/AudioOut.c index db5b371e2..18d908eef 100644 --- a/shared-bindings/audioio/AudioOut.c +++ b/shared-bindings/audioio/AudioOut.c @@ -43,13 +43,15 @@ //| //| AudioOut can be used to output an analog audio signal on a given pin. //| -//| .. class:: AudioOut(left_channel, right_channel=None) +//| .. class:: AudioOut(left_channel, *, right_channel=None, quiescent_value=0x8000) //| //| Create a AudioOut object associated with the given pin(s). This allows you to //| play audio signals out on the given pin(s). //| //| :param ~microcontroller.Pin left_channel: The pin to output the left channel to //| :param ~microcontroller.Pin right_channel: The pin to output the right channel to +//| :param int quiescent_value: The output value when no signal is present. Samples should start +//| and end with this value to prevent audible popping. //| //| Simple 8ksps 440 Hz sin wave:: //| @@ -95,10 +97,11 @@ STATIC mp_obj_t audioio_audioout_make_new(const mp_obj_type_t *type, size_t n_ar mp_arg_check_num(n_args, n_kw, 1, 2, true); mp_map_t kw_args; mp_map_init_fixed_table(&kw_args, n_kw, pos_args + n_args); - enum { ARG_left_channel, ARG_right_channel }; + enum { ARG_left_channel, ARG_right_channel, ARG_quiescent_value }; static const mp_arg_t allowed_args[] = { { MP_QSTR_left_channel, MP_ARG_OBJ | MP_ARG_REQUIRED }, { MP_QSTR_right_channel, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_rom_obj = mp_const_none} }, + { MP_QSTR_quiescent_value, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_int = 0x8000} }, }; mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args, pos_args, &kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); @@ -117,7 +120,7 @@ STATIC mp_obj_t audioio_audioout_make_new(const mp_obj_type_t *type, size_t n_ar // create AudioOut object from the given pin audioio_audioout_obj_t *self = m_new_obj(audioio_audioout_obj_t); self->base.type = &audioio_audioout_type; - common_hal_audioio_audioout_construct(self, left_channel_pin, right_channel_pin); + common_hal_audioio_audioout_construct(self, left_channel_pin, right_channel_pin, args[ARG_quiescent_value].u_int); return MP_OBJ_FROM_PTR(self); } diff --git a/shared-bindings/audioio/AudioOut.h b/shared-bindings/audioio/AudioOut.h index 751473605..d09a5c9ca 100644 --- a/shared-bindings/audioio/AudioOut.h +++ b/shared-bindings/audioio/AudioOut.h @@ -35,7 +35,7 @@ extern const mp_obj_type_t audioio_audioout_type; // left_channel will always be non-NULL but right_channel may be for mono output. void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self, - const mcu_pin_obj_t* left_channel, const mcu_pin_obj_t* right_channel); + const mcu_pin_obj_t* left_channel, const mcu_pin_obj_t* right_channel, uint16_t default_value); void common_hal_audioio_audioout_deinit(audioio_audioout_obj_t* self); bool common_hal_audioio_audioout_deinited(audioio_audioout_obj_t* self); diff --git a/shared-bindings/pulseio/PulseOut.c b/shared-bindings/pulseio/PulseOut.c index 1c97c37c3..e9834c12a 100644 --- a/shared-bindings/pulseio/PulseOut.c +++ b/shared-bindings/pulseio/PulseOut.c @@ -47,7 +47,7 @@ //| //| .. class:: PulseOut(carrier) //| -//| Create a PulseOut object associated with the given PWM out experience. +//| Create a PulseOut object associated with the given PWMout object. //| //| :param ~pulseio.PWMOut carrier: PWMOut that is set to output on the desired pin. //| @@ -57,9 +57,10 @@ //| import pulseio //| import board //| -//| pwm = pulseio.PWMOut(board.D13, duty_cycle=2 ** 15) +//| # 50% duty cycle at 38kHz. +//| pwm = pulseio.PWMOut(board.D13, frequency=38000, duty_cycle=32768) //| pulse = pulseio.PulseOut(pwm) -//| # on off on off on +//| # on off on off on //| pulses = array.array('H', [65000, 1000, 65000, 65000, 1000]) //| pulse.send(pulses) //| diff --git a/shared-bindings/time/__init__.c b/shared-bindings/time/__init__.c index 4d9554569..8a5e16c5e 100644 --- a/shared-bindings/time/__init__.c +++ b/shared-bindings/time/__init__.c @@ -206,6 +206,20 @@ STATIC mp_obj_t time_time(void) { } MP_DEFINE_CONST_FUN_OBJ_0(time_time_obj, time_time); +//| .. method:: monotonic_ns(clk_id) +//| +//| Return the time of the specified clock clk_id in nanoseconds. Refer to +//| Clock ID Constants for a list of accepted values for clk_id. +//| +//| :return: the current time +//| :rtype: int +//| +STATIC mp_obj_t time_monotonic_ns(void) { + uint64_t time64 = common_hal_time_monotonic() * 1000000llu; + return mp_obj_new_int_from_ll((long long) time64); +} +MP_DEFINE_CONST_FUN_OBJ_0(time_monotonic_ns_obj, time_monotonic_ns); + //| .. method:: localtime([secs]) //| //| Convert a time expressed in seconds since Jan 1, 1970 to a struct_time in @@ -280,6 +294,7 @@ STATIC const mp_rom_map_elem_t time_module_globals_table[] = { #endif // MICROPY_PY_COLLECTIONS #if MICROPY_LONGINT_IMPL != MICROPY_LONGINT_IMPL_NONE { MP_ROM_QSTR(MP_QSTR_time), MP_ROM_PTR(&time_time_obj) }, + { MP_ROM_QSTR(MP_QSTR_monotonic_ns), MP_ROM_PTR(&time_monotonic_ns_obj) }, #endif }; diff --git a/tools/build_adafruit_bins.sh b/tools/build_adafruit_bins.sh index 595d5ba5d..51a8778cc 100755 --- a/tools/build_adafruit_bins.sh +++ b/tools/build_adafruit_bins.sh @@ -25,8 +25,10 @@ grandcentral_m4_express \ hallowing_m0_express \ itsybitsy_m0_express \ itsybitsy_m4_express \ +makerdiary_nrf52840_mdk \ metro_m0_express \ metro_m4_express \ +meowmeow \ pca10056 \ pca10059 \ pirkey_m0 \ @@ -81,6 +83,11 @@ for board in $boards; do (( exit_status = exit_status || $? )) temp_filename=ports/nrf/build-$board-s140/firmware.uf2 extension=uf2 + elif [[ $board == "makerdiary_nrf52840_mdk" ]]; then + make $PARALLEL -C ports/nrf TRANSLATION=$language BOARD=$board SD=s140 + (( exit_status = exit_status || $? )) + temp_filename=ports/nrf/build-$board-s140/firmware.hex + extension=hex else time make $PARALLEL -C ports/atmel-samd TRANSLATION=$language BOARD=$board (( exit_status = exit_status || $? )) diff --git a/tools/mpy-tool.py b/tools/mpy-tool.py index 7deb76a8d..5ce24061b 100755 --- a/tools/mpy-tool.py +++ b/tools/mpy-tool.py @@ -78,6 +78,18 @@ MP_BC_LOAD_GLOBAL = 0x1d MP_BC_LOAD_ATTR = 0x1e MP_BC_STORE_ATTR = 0x26 +# load opcode names +opcode_names = {} +with open("../../py/bc0.h") as f: + for line in f.readlines(): + if line.startswith("#define"): + s = line.split(maxsplit=3) + if len(s) < 3: + continue + _, name, value = s[:3] + opcode = int(value.strip("()"), 0) + opcode_names[opcode] = name + def make_opcode_format(): def OC4(a, b, c, d): return a | (b << 2) | (c << 4) | (d << 6) @@ -252,35 +264,50 @@ class RawCode: i += 1 RawCode.escaped_names.add(self.escaped_name) + sizes = {"bytecode": 0, "strings": 0, "raw_code_overhead": 0, "const_table_overhead": 0, "string_overhead": 0, "number_overhead": 0} # emit children first for rc in self.raw_codes: - rc.freeze(self.escaped_name + '_') + subsize = rc.freeze(self.escaped_name + '_') + for k in sizes: + sizes[k] += subsize[k] + # generate bytecode data print() print('// frozen bytecode for file %s, scope %s%s' % (self.source_file.str, parent_name, self.simple_name.str)) + print("// bytecode size", len(self.bytecode)) print('STATIC ', end='') if not config.MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE: print('const ', end='') print('byte bytecode_data_%s[%u] = {' % (self.escaped_name, len(self.bytecode))) + sizes["bytecode"] += len(self.bytecode) print(' ', end='') for i in range(self.ip2): print(' 0x%02x,' % self.bytecode[i], end='') print() + print(" // simple name") print(' ', self.simple_name.qstr_id, '& 0xff,', self.simple_name.qstr_id, '>> 8,') + print(" // source file") print(' ', self.source_file.qstr_id, '& 0xff,', self.source_file.qstr_id, '>> 8,') + print(" // code info") print(' ', end='') for i in range(self.ip2 + 4, self.ip): print(' 0x%02x,' % self.bytecode[i], end='') print() + print(" // bytecode") ip = self.ip while ip < len(self.bytecode): f, sz = mp_opcode_format(self.bytecode, ip) + opcode = self.bytecode[ip] + if opcode in opcode_names: + opcode = opcode_names[opcode] + else: + opcode = '0x%02x' % opcode if f == 1: qst = self._unpack_qstr(ip + 1).qstr_id - print(' ', '0x%02x,' % self.bytecode[ip], qst, '& 0xff,', qst, '>> 8,') + print(' {}, {} & 0xff, {} >> 8,'.format(opcode, qst, qst)) else: - print(' ', ''.join('0x%02x, ' % self.bytecode[ip + i] for i in range(sz))) + print(' {},{}'.format(opcode, ''.join(' 0x%02x,' % self.bytecode[ip + i] for i in range(1, sz)))) ip += sz print('};') @@ -295,9 +322,12 @@ class RawCode: obj_type = 'mp_type_str' else: obj_type = 'mp_type_bytes' - print('STATIC const mp_obj_str_t %s = {{&%s}, %u, %u, (const byte*)"%s"};' + print('STATIC const mp_obj_str_t %s = {{&%s}, %u, %u, (const byte*)"%s"}; // %s' % (obj_name, obj_type, qstrutil.compute_hash(obj, config.MICROPY_QSTR_BYTES_IN_HASH), - len(obj), ''.join(('\\x%02x' % b) for b in obj))) + len(obj), ''.join(('\\x%02x' % b) for b in obj), obj)) + sizes["strings"] += len(obj) + sizes["string_overhead"] += 16 + elif is_int_type(obj): if config.MICROPY_LONGINT_IMPL == config.MICROPY_LONGINT_IMPL_NONE: # TODO check if we can actually fit this long-int into a small-int @@ -321,14 +351,17 @@ class RawCode: print('STATIC const mp_obj_int_t %s = {{&mp_type_int}, ' '{.neg=%u, .fixed_dig=1, .alloc=%u, .len=%u, .dig=(uint%u_t[]){%s}}};' % (obj_name, neg, ndigs, ndigs, bits_per_dig, digs)) + sizes["number_overhead"] += 16 elif type(obj) is float: print('#if MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_A || MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_B') print('STATIC const mp_obj_float_t %s = {{&mp_type_float}, %.16g};' % (obj_name, obj)) print('#endif') + sizes["number_overhead"] += 8 elif type(obj) is complex: print('STATIC const mp_obj_complex_t %s = {{&mp_type_complex}, %.16g, %.16g};' % (obj_name, obj.real, obj.imag)) + sizes["number_overhead"] += 12 else: raise FreezeError(self, 'freezing of object %r is not implemented' % (obj,)) @@ -338,8 +371,10 @@ class RawCode: print('STATIC const mp_rom_obj_t const_table_data_%s[%u] = {' % (self.escaped_name, const_table_len)) for qst in self.qstrs: + sizes["const_table_overhead"] += 4 print(' MP_ROM_QSTR(%s),' % global_qstrs[qst].qstr_id) for i in range(len(self.objs)): + sizes["const_table_overhead"] += 4 if type(self.objs[i]) is float: print('#if MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_A || MICROPY_OBJ_REPR == MICROPY_OBJ_REPR_B') print(' MP_ROM_PTR(&const_obj_%s_%u),' % (self.escaped_name, i)) @@ -353,6 +388,7 @@ class RawCode: else: print(' MP_ROM_PTR(&const_obj_%s_%u),' % (self.escaped_name, i)) for rc in self.raw_codes: + sizes["const_table_overhead"] += 4 print(' MP_ROM_PTR(&raw_code_%s),' % rc.escaped_name) print('};') @@ -376,6 +412,9 @@ class RawCode: print(' #endif') print(' },') print('};') + sizes["raw_code_overhead"] += 16 + + return sizes def read_uint(f): i = 0 @@ -467,6 +506,7 @@ def freeze_mpy(base_qstrs, raw_codes): new[q.qstr_esc] = (len(new), q.qstr_esc, q.str) new = sorted(new.values(), key=lambda x: x[0]) + print('#include "py/bc0.h"') print('#include "py/mpconfig.h"') print('#include "py/objint.h"') print('#include "py/objstr.h"') @@ -523,27 +563,45 @@ def freeze_mpy(base_qstrs, raw_codes): print(' %u, // allocated entries' % len(new)) print(' %u, // used entries' % len(new)) print(' {') + qstr_size = {"metadata": 0, "data": 0} for _, _, qstr in new: + qstr_size["metadata"] += config.MICROPY_QSTR_BYTES_IN_LEN + config.MICROPY_QSTR_BYTES_IN_HASH + qstr_size["data"] += len(qstr) print(' %s,' % qstrutil.make_bytes(config.MICROPY_QSTR_BYTES_IN_LEN, config.MICROPY_QSTR_BYTES_IN_HASH, qstr)) print(' },') print('};') + sizes = {} for rc in raw_codes: - rc.freeze(rc.source_file.str.replace('/', '_')[:-3] + '_') + sizes[rc.source_file.str] = rc.freeze(rc.source_file.str.replace('/', '_')[:-3] + '_') print() print('const char mp_frozen_mpy_names[] = {') + qstr_size["filenames"] = 1 for rc in raw_codes: module_name = rc.source_file.str print('"%s\\0"' % module_name) + qstr_size["filenames"] += len(module_name) + 1 print('"\\0"};') print('const mp_raw_code_t *const mp_frozen_mpy_content[] = {') for rc in raw_codes: print(' &raw_code_%s,' % rc.escaped_name) + size = sizes[rc.source_file.str] + print(' // Total size:', sum(size.values())) + for k in size: + print(" // {} {}".format(k, size[k])) print('};') + print() + print('// Total size:', sum([sum(x.values()) for x in sizes.values()]) + sum(qstr_size.values())) + for k in size: + total = sum([x[k] for x in sizes.values()]) + print("// {} {}".format(k, total)) + for k in qstr_size: + print("// qstr {} {}".format(k, qstr_size[k])) + def main(): import argparse cmd_parser = argparse.ArgumentParser(description='A tool to work with MicroPython .mpy files.') |
