diff options
| author | Kevin Matocha <kmatocha@icloud.com> | 2020-08-21 14:37:32 -0500 |
|---|---|---|
| committer | Kevin Matocha <kmatocha@icloud.com> | 2020-08-21 14:37:32 -0500 |
| commit | a9f6d147c4930310f948fa76e6856362fdc451dc (patch) | |
| tree | c57fc30e4388f22f2e7d2a3877d957e79f92e45c | |
| parent | 7e529ed4c50c7697c649e09b999a2e9f8988b673 (diff) | |
| parent | 3753ea3cd8cc8725ae39e4fd0e7660f62fa430cc (diff) | |
Merge adafruit/main latest
115 files changed, 7515 insertions, 2863 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bf9c1623f..ceb691a15 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,7 +36,7 @@ jobs: - name: Install deps run: | sudo apt-get install -y eatmydata - sudo eatmydata apt-get install -y gettext librsvg2-bin mingw-w64 + sudo eatmydata apt-get install -y gettext librsvg2-bin mingw-w64 latexmk texlive-fonts-recommended texlive-latex-recommended texlive-latex-extra pip install requests sh click setuptools cpp-coveralls "Sphinx<4" sphinx-rtd-theme recommonmark sphinx-autoapi sphinxcontrib-svg2pdfconverter polib pyyaml astroid isort black awscli - name: Versions run: | @@ -73,12 +73,19 @@ jobs: with: name: stubs path: circuitpython-stubs* - - name: Docs + - name: Test Documentation Build (HTML) run: sphinx-build -E -W -b html -D version=${{ env.CP_VERSION }} -D release=${{ env.CP_VERSION }} . _build/html - uses: actions/upload-artifact@v2 with: name: docs path: _build/html + - name: Test Documentation Build (LaTeX/PDF) + run: | + make latexpdf + - uses: actions/upload-artifact@v2 + with: + name: docs + path: _build/latex - name: Translations run: make check-translate - name: New boards check diff --git a/.gitmodules b/.gitmodules index f09a1e4c6..f922aae1d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -147,3 +147,6 @@ [submodule "ports/esp32s2/esp-idf"] path = ports/esp32s2/esp-idf url = https://github.com/tannewt/esp-idf.git +[submodule "frozen/Adafruit_CircuitPython_RFM9x"] + path = frozen/Adafruit_CircuitPython_RFM9x + url = https://github.com/adafruit/Adafruit_CircuitPython_RFM9x.git diff --git a/.readthedocs.yml b/.readthedocs.yml index 2a0640782..3f66351ce 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -12,6 +12,9 @@ submodules: include: - extmod/ulab +formats: + - pdf + python: version: 3 install: diff --git a/docs/rstjinja.py b/docs/rstjinja.py index 3a08b2599..7ab92a979 100644 --- a/docs/rstjinja.py +++ b/docs/rstjinja.py @@ -6,18 +6,28 @@ def rstjinja(app, docname, source): Render our pages as a jinja template for fancy templating goodness. """ # Make sure we're outputting HTML - if app.builder.format != 'html': + if app.builder.format not in ("html", "latex"): return # we only want our one jinja template to run through this func if "shared-bindings/support_matrix" not in docname: return - src = source[0] + src = rendered = source[0] print(docname) - rendered = app.builder.templates.render_string( - src, app.config.html_context - ) + + if app.builder.format == "html": + rendered = app.builder.templates.render_string( + src, app.config.html_context + ) + else: + from sphinx.util.template import BaseRenderer + renderer = BaseRenderer() + rendered = renderer.render_string( + src, + app.config.html_context + ) + source[0] = rendered def setup(app): diff --git a/frozen/Adafruit_CircuitPython_RFM9x b/frozen/Adafruit_CircuitPython_RFM9x new file mode 160000 +Subproject cfffc233784961929d722ea4e9acfe578679060 diff --git a/lib/mp-readline/readline.c b/lib/mp-readline/readline.c index 464916ca4..6da71c40f 100644 --- a/lib/mp-readline/readline.c +++ b/lib/mp-readline/readline.c @@ -144,7 +144,7 @@ int readline_process_char(int c) { goto right_arrow_key; } else if (c == CHAR_CTRL_K) { // CTRL-K is kill from cursor to end-of-line, inclusive - vstr_cut_tail_bytes(rl.line, last_line_len - rl.cursor_pos); + vstr_cut_tail_bytes(rl.line, rl.line->len - rl.cursor_pos); // set redraw parameters redraw_from_cursor = true; } else if (c == CHAR_CTRL_N) { @@ -155,6 +155,7 @@ int readline_process_char(int c) { goto up_arrow_key; } else if (c == CHAR_CTRL_U) { // CTRL-U is kill from beginning-of-line up to cursor + cont_chars = count_cont_bytes(rl.line->buf+rl.orig_line_len, rl.line->buf+rl.cursor_pos); vstr_cut_out_bytes(rl.line, rl.orig_line_len, rl.cursor_pos - rl.orig_line_len); // set redraw parameters redraw_step_back = rl.cursor_pos - rl.orig_line_len; @@ -342,6 +343,7 @@ left_arrow_key: if (c == '~') { if (rl.escape_seq_buf[0] == '1' || rl.escape_seq_buf[0] == '7') { home_key: + cont_chars = count_cont_bytes(rl.line->buf+rl.orig_line_len, rl.line->buf+rl.cursor_pos); redraw_step_back = rl.cursor_pos - rl.orig_line_len; } else if (rl.escape_seq_buf[0] == '4' || rl.escape_seq_buf[0] == '8') { end_key: @@ -352,7 +354,12 @@ end_key: delete_key: #endif if (rl.cursor_pos < rl.line->len) { - vstr_cut_out_bytes(rl.line, rl.cursor_pos, 1); + size_t len = 1; + while (UTF8_IS_CONT(rl.line->buf[rl.cursor_pos+len]) && + rl.cursor_pos+len < rl.line->len) { + len++; + } + vstr_cut_out_bytes(rl.line, rl.cursor_pos, len); redraw_from_cursor = true; } } else { diff --git a/locale/ID.po b/locale/ID.po index 9a1d86d26..ec5b6f6e8 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: 2020-07-06 18:10+0000\n" "Last-Translator: oon arfiandwi <oon.arfiandwi@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -72,13 +72,17 @@ msgstr "" msgid "%q in use" msgstr "%q sedang digunakan" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "%q indeks di luar batas" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "indeks %q harus bilangan bulat, bukan %s" +msgid "%q indices must be integers, not %q" +msgstr "" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -116,6 +120,42 @@ msgstr "%q() mengambil posisi argumen %d tapi %d yang diberikan" msgid "'%q' argument required" msgstr "'%q' argumen dibutuhkan" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -166,48 +206,6 @@ msgstr "'%s' integer %d tidak dalam kisaran %d..%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "'%s' integer 0x%x tidak cukup didalam mask 0x%x" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "Objek '%s' tidak dapat menetapkan atribut '%q'" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "Objek '%s' tidak mendukung '%q'" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "Objek '%s' tidak mendukung penetapan item" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "Objek '%s' tidak mendukung penghapusan item" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "Objek '%s' tidak memiliki atribut '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "Objek '%s' bukan iterator" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "Objek '%s' tidak dapat dipanggil" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "'%s' objek tidak dapat diulang" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "Objek '%s' tidak dapat disubkripsikan" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "'=' perataan tidak diizinkan dalam penentu format string" @@ -457,6 +455,10 @@ msgstr "Panjang buffer %d terlalu besar. Itu harus kurang dari %d" msgid "Buffer length must be a multiple of 512" msgstr "Panjang buffer harus kelipatan 512" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "Penyangga harus memiliki panjang setidaknya 1" @@ -658,6 +660,10 @@ msgstr "Tidak dapat menginisialisasi ulang timer" msgid "Could not restart PWM" msgstr "Tidak dapat memulai ulang PWM" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "Tidak dapat memulai PWM" @@ -758,7 +764,7 @@ msgstr "Error pada regex" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Diharapkan %q" @@ -841,6 +847,11 @@ msgstr "Gagal menulis flash internal." msgid "File exists" msgstr "File sudah ada" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "" @@ -866,7 +877,7 @@ msgid "Group full" msgstr "Grup penuh" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "Perangkat keras sibuk, coba pin alternatif" @@ -882,6 +893,10 @@ msgstr "operasi I/O pada file tertutup" msgid "I2C Init Error" msgstr "Gagal Inisialisasi I2C" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -929,6 +944,11 @@ msgstr "" msgid "Invalid %q pin" msgstr "%q pada tidak valid" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "Nilai Unit ADC tidak valid" @@ -941,24 +961,12 @@ msgstr "File BMP tidak valid" msgid "Invalid DAC pin supplied" msgstr "Pin DAC yang diberikan tidak valid" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "Pilihan pin I2C tidak valid" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "Frekuensi PWM tidak valid" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "Pilihan pin SPI tidak valid" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "Pilihan pin UART tidak valid" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "Argumen tidak valid" @@ -1255,6 +1263,10 @@ msgstr "Tidak dapat menyambungkan ke AP" msgid "Not playing" msgstr "" +#: main.c +msgid "Not running saved code.\n" +msgstr "" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1340,8 +1352,13 @@ msgstr "Tambahkan module apapun pada filesystem\n" msgid "Polygon needs at least 3 points" msgstr "" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" msgstr "" #: shared-bindings/_bleio/Adapter.c @@ -1358,6 +1375,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "" +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "" @@ -1419,13 +1440,8 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Berjalan di mode aman(safe mode)! Auto-reload tidak aktif.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" +msgid "Running in safe mode! " msgstr "" -"Berjalan di mode aman(safe mode)! tidak menjalankan kode yang tersimpan.\n" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" @@ -1436,6 +1452,16 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "SDA atau SCL membutuhkan pull up" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "" @@ -1792,8 +1818,7 @@ msgid "__init__() should return None" msgstr "" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" +msgid "__init__() should return None, not '%q'" msgstr "" #: py/objobject.c @@ -1948,7 +1973,7 @@ msgstr "byte > 8 bit tidak didukung" msgid "bytes value out of range" msgstr "" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "kalibrasi keluar dari jangkauan" @@ -1980,47 +2005,17 @@ msgstr "" msgid "can't assign to expression" msgstr "tidak dapat menetapkan ke ekspresi" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" msgstr "" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "" - #: py/obj.c -msgid "can't convert to float" -msgstr "" - -#: py/obj.c -msgid "can't convert to int" +msgid "can't convert to %q" msgstr "" #: py/objstr.c @@ -2428,7 +2423,7 @@ msgstr "fungsi kehilangan argumen keyword '%q' yang dibutuhkan" msgid "function missing required positional argument #%d" msgstr "fungsi kehilangan argumen posisi #%d yang dibutuhkan" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "fungsi mengambil posisi argumen %d tapi %d yang diberikan" @@ -2477,10 +2472,7 @@ msgstr "lapisan (padding) tidak benar" msgid "index is out of bounds" msgstr "" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "index keluar dari jangkauan" @@ -2836,8 +2828,7 @@ msgid "number of points must be at least 2" msgstr "" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" +msgid "object '%q' is not a tuple or list" msgstr "" #: py/obj.c @@ -2873,8 +2864,7 @@ msgid "object not iterable" msgstr "" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" +msgid "object of type '%q' has no len()" msgstr "" #: py/obj.c @@ -2968,20 +2958,9 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "Muncul dari PulseIn yang kosong" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" msgstr "" #: py/objint_mpz.c @@ -3138,12 +3117,7 @@ msgid "stream operation not supported" msgstr "" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" +msgid "string indices must be integers, not %q" msgstr "" #: py/stream.c @@ -3155,10 +3129,6 @@ msgid "struct: cannot index" msgstr "struct: tidak bisa melakukan index" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "struct: index keluar dari jangkauan" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "struct: tidak ada fields" @@ -3228,7 +3198,7 @@ msgstr "" msgid "trapz is defined for 1D arrays of equal length" msgstr "" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "" @@ -3236,10 +3206,6 @@ msgstr "" msgid "tuple/list has wrong length" msgstr "" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3295,8 +3261,7 @@ msgid "unknown conversion specifier %c" msgstr "" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" +msgid "unknown format code '%c' for object of type '%q'" msgstr "" #: py/compile.c @@ -3336,7 +3301,7 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "" #: py/runtime.c -msgid "unsupported type for %q: '%s'" +msgid "unsupported type for %q: '%q'" msgstr "" #: py/runtime.c @@ -3344,7 +3309,7 @@ msgid "unsupported type for operator" msgstr "" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" msgstr "" #: py/objint.c @@ -3424,6 +3389,58 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "indeks %q harus bilangan bulat, bukan %s" + +#~ msgid "'%s' object cannot assign attribute '%q'" +#~ msgstr "Objek '%s' tidak dapat menetapkan atribut '%q'" + +#~ msgid "'%s' object does not support '%q'" +#~ msgstr "Objek '%s' tidak mendukung '%q'" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "Objek '%s' tidak mendukung penetapan item" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "Objek '%s' tidak mendukung penghapusan item" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "Objek '%s' tidak memiliki atribut '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "Objek '%s' bukan iterator" + +#~ msgid "'%s' object is not callable" +#~ msgstr "Objek '%s' tidak dapat dipanggil" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "'%s' objek tidak dapat diulang" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "Objek '%s' tidak dapat disubkripsikan" + +#~ msgid "Invalid I2C pin selection" +#~ msgstr "Pilihan pin I2C tidak valid" + +#~ msgid "Invalid SPI pin selection" +#~ msgstr "Pilihan pin SPI tidak valid" + +#~ msgid "Invalid UART pin selection" +#~ msgstr "Pilihan pin UART tidak valid" + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Berjalan di mode aman(safe mode)! Auto-reload tidak aktif.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "" +#~ "Berjalan di mode aman(safe mode)! tidak menjalankan kode yang tersimpan.\n" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "Muncul dari PulseIn yang kosong" + +#~ msgid "struct: index out of range" +#~ msgstr "struct: index keluar dari jangkauan" + #~ msgid "'async for' or 'async with' outside async function" #~ msgstr "'async for' atau 'async with' di luar fungsi async" diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index d697f15c8..c8a24ef67 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: 2020-08-14 14:20-0500\n" +"POT-Creation-Date: 2020-08-21 14:36-0500\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" @@ -82,6 +82,7 @@ msgstr "" msgid "%q list must be a list" msgstr "" +#: shared-bindings/memorymonitor/AllocationAlarm 2.c #: shared-bindings/memorymonitor/AllocationAlarm.c msgid "%q must be >= 0" msgstr "" @@ -89,6 +90,7 @@ msgstr "" #: shared-bindings/_bleio/CharacteristicBuffer.c #: shared-bindings/_bleio/PacketBuffer.c shared-bindings/displayio/Group.c #: shared-bindings/displayio/Shape.c +#: shared-bindings/memorymonitor/AllocationAlarm 2.c #: shared-bindings/memorymonitor/AllocationAlarm.c #: shared-bindings/vectorio/Circle.c shared-bindings/vectorio/Rectangle.c msgid "%q must be >= 1" @@ -330,7 +332,9 @@ msgstr "" msgid "Already advertising." msgstr "" +#: shared-module/memorymonitor/AllocationAlarm 2.c #: shared-module/memorymonitor/AllocationAlarm.c +#: shared-module/memorymonitor/AllocationSize 2.c #: shared-module/memorymonitor/AllocationSize.c msgid "Already running" msgstr "" @@ -370,6 +374,7 @@ msgstr "" msgid "At most %d %q may be specified (not %d)" msgstr "" +#: shared-module/memorymonitor/AllocationAlarm 2.c #: shared-module/memorymonitor/AllocationAlarm.c #, c-format msgid "Attempt to allocate %d blocks" @@ -451,7 +456,8 @@ msgid "Buffer length %d too big. It must be less than %d" msgstr "" #: ports/atmel-samd/common-hal/sdioio/SDCard.c -#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard 2.c +#: shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -503,6 +509,7 @@ msgid "Cannot blit: source palette too large." msgstr "" #: shared-bindings/displayio/Bitmap.c +#: shared-bindings/memorymonitor/AllocationSize 2.c #: shared-bindings/memorymonitor/AllocationSize.c #: shared-bindings/pulseio/PulseIn.c msgid "Cannot delete values" @@ -756,7 +763,7 @@ msgstr "" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "" @@ -924,7 +931,7 @@ msgstr "" msgid "Internal error #%d" msgstr "" -#: shared-bindings/sdioio/SDCard.c +#: shared-bindings/sdioio/SDCard 2.c shared-bindings/sdioio/SDCard.c msgid "Invalid %q" msgstr "" @@ -1340,6 +1347,15 @@ msgstr "" msgid "Polygon needs at least 3 points" msgstr "" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" +msgstr "" + #: shared-bindings/_bleio/Adapter.c msgid "Prefix buffer must be on the heap" msgstr "" @@ -1382,6 +1398,7 @@ msgstr "" msgid "Random number generation error" msgstr "" +#: shared-bindings/memorymonitor/AllocationSize 2.c #: shared-bindings/memorymonitor/AllocationSize.c #: shared-bindings/pulseio/PulseIn.c msgid "Read-only" @@ -1415,7 +1432,7 @@ msgstr "" msgid "Running in safe mode! " msgstr "" -#: shared-module/sdcardio/SDCard.c +#: shared-module/sdcardio/SDCard 2.c shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" msgstr "" @@ -1474,6 +1491,7 @@ msgstr "" #: shared-bindings/displayio/Bitmap.c shared-bindings/displayio/Group.c #: shared-bindings/displayio/TileGrid.c +#: shared-bindings/memorymonitor/AllocationSize 2.c #: shared-bindings/memorymonitor/AllocationSize.c #: shared-bindings/pulseio/PulseIn.c msgid "Slices not supported" @@ -1499,7 +1517,7 @@ msgstr "" msgid "Supply at least one UART pin" msgstr "" -#: shared-bindings/gnss/GNSS.c +#: shared-bindings/gnss/GNSS 2.c shared-bindings/gnss/GNSS.c msgid "System entry must be gnss.SatelliteSystem" msgstr "" @@ -1803,10 +1821,12 @@ msgstr "" msgid "address %08x is not aligned to %d bytes" msgstr "" +#: shared-bindings/i2cperipheral/I2CPeripheral 2.c #: shared-bindings/i2cperipheral/I2CPeripheral.c msgid "address out of bounds" msgstr "" +#: shared-bindings/i2cperipheral/I2CPeripheral 2.c #: shared-bindings/i2cperipheral/I2CPeripheral.c msgid "addresses is empty" msgstr "" @@ -1969,7 +1989,9 @@ msgstr "" msgid "can't assign to expression" msgstr "" -#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral 2.c +#: shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c msgid "can't convert %q to %q" msgstr "" @@ -2029,7 +2051,7 @@ msgstr "" msgid "can't send non-None value to a just-started generator" msgstr "" -#: shared-module/sdcardio/SDCard.c +#: shared-module/sdcardio/SDCard 2.c shared-module/sdcardio/SDCard.c msgid "can't set 512 block size" msgstr "" @@ -2159,7 +2181,7 @@ msgstr "" msgid "could not invert Vandermonde matrix" msgstr "" -#: shared-module/sdcardio/SDCard.c +#: shared-module/sdcardio/SDCard 2.c shared-module/sdcardio/SDCard.c msgid "couldn't determine SD card version" msgstr "" @@ -2717,7 +2739,7 @@ msgstr "" msgid "negative shift count" msgstr "" -#: shared-module/sdcardio/SDCard.c +#: shared-module/sdcardio/SDCard 2.c shared-module/sdcardio/SDCard.c msgid "no SD card" msgstr "" @@ -2742,7 +2764,7 @@ msgstr "" msgid "no reset pin available" msgstr "" -#: shared-module/sdcardio/SDCard.c +#: shared-module/sdcardio/SDCard 2.c shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" @@ -3130,11 +3152,11 @@ msgstr "" msgid "timeout must be >= 0.0" msgstr "" -#: shared-module/sdcardio/SDCard.c +#: shared-module/sdcardio/SDCard 2.c shared-module/sdcardio/SDCard.c msgid "timeout waiting for v1 card" msgstr "" -#: shared-module/sdcardio/SDCard.c +#: shared-module/sdcardio/SDCard 2.c shared-module/sdcardio/SDCard.c msgid "timeout waiting for v2 card" msgstr "" @@ -3167,10 +3189,6 @@ msgstr "" msgid "tuple/list has wrong length" msgstr "" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" diff --git a/locale/cs.po b/locale/cs.po index 195968e20..b353f4630 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: 2020-05-24 03:22+0000\n" "Last-Translator: dronecz <mzuzelka@gmail.com>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -44,11 +44,11 @@ msgstr "" #: py/obj.c msgid " File \"%q\"" -msgstr "  Soubor \"% q\"" +msgstr "  Soubor \"%q\"" #: py/obj.c msgid " File \"%q\", line %d" -msgstr "  Soubor \"% q\", řádek% d" +msgstr "  Soubor \"%q\", řádek %d" #: main.c msgid " output:\n" @@ -57,7 +57,7 @@ msgstr " výstup:\n" #: py/objstr.c #, c-format msgid "%%c requires int or char" -msgstr "%% c vyžaduje int nebo char" +msgstr "%%c vyžaduje int nebo char" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format @@ -72,17 +72,21 @@ msgstr "" msgid "%q in use" msgstr "%q se nynà použÃvá" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "%q index je mimo rozsah" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "Indexy% q musà být celá ÄÃsla, nikoli% s" +msgid "%q indices must be integers, not %q" +msgstr "" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" -msgstr "Seznam% q musà být seznam" +msgstr "Seznam %q musà být seznam" #: shared-bindings/memorymonitor/AllocationAlarm.c msgid "%q must be >= 0" @@ -94,11 +98,11 @@ msgstr "" #: shared-bindings/memorymonitor/AllocationAlarm.c #: shared-bindings/vectorio/Circle.c shared-bindings/vectorio/Rectangle.c msgid "%q must be >= 1" -msgstr "% q musà být > = 1" +msgstr " %q musà být > = 1" #: shared-module/vectorio/Polygon.c msgid "%q must be a tuple of length 2" -msgstr "% q musà být n-tice délky 2" +msgstr " %q musà být n-tice délky 2" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q pin invalid" @@ -106,7 +110,7 @@ msgstr "" #: shared-bindings/fontio/BuiltinFont.c msgid "%q should be an int" -msgstr "% q by mÄ›l být int" +msgstr " %q by mÄ›l být int" #: py/bc.c py/objnamedtuple.c msgid "%q() takes %d positional arguments but %d were given" @@ -116,6 +120,42 @@ msgstr "" msgid "'%q' argument required" msgstr "" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -166,48 +206,6 @@ msgstr "" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "" @@ -455,6 +453,10 @@ msgstr "" msgid "Buffer length must be a multiple of 512" msgstr "" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "" @@ -645,6 +647,10 @@ msgstr "" msgid "Could not restart PWM" msgstr "" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "" @@ -744,7 +750,7 @@ msgstr "" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "" @@ -827,6 +833,11 @@ msgstr "" msgid "File exists" msgstr "" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "" @@ -851,7 +862,7 @@ msgid "Group full" msgstr "" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "" @@ -867,6 +878,10 @@ msgstr "" msgid "I2C Init Error" msgstr "" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -912,6 +927,11 @@ msgstr "" msgid "Invalid %q pin" msgstr "" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "" @@ -924,24 +944,12 @@ msgstr "" msgid "Invalid DAC pin supplied" msgstr "" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "" @@ -1237,6 +1245,10 @@ msgstr "" msgid "Not playing" msgstr "" +#: main.c +msgid "Not running saved code.\n" +msgstr "" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1322,8 +1334,13 @@ msgstr "" msgid "Polygon needs at least 3 points" msgstr "" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" msgstr "" #: shared-bindings/_bleio/Adapter.c @@ -1338,6 +1355,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "" +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "" @@ -1398,11 +1419,7 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" +msgid "Running in safe mode! " msgstr "" #: shared-module/sdcardio/SDCard.c @@ -1414,6 +1431,16 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "" @@ -1763,8 +1790,7 @@ msgid "__init__() should return None" msgstr "" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" +msgid "__init__() should return None, not '%q'" msgstr "" #: py/objobject.c @@ -1918,7 +1944,7 @@ msgstr "" msgid "bytes value out of range" msgstr "" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "" @@ -1950,47 +1976,17 @@ msgstr "" msgid "can't assign to expression" msgstr "" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" msgstr "" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "" - -#: py/obj.c -msgid "can't convert to float" -msgstr "" - #: py/obj.c -msgid "can't convert to int" +msgid "can't convert to %q" msgstr "" #: py/objstr.c @@ -2398,7 +2394,7 @@ msgstr "" msgid "function missing required positional argument #%d" msgstr "" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "" @@ -2447,10 +2443,7 @@ msgstr "" msgid "index is out of bounds" msgstr "" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "" @@ -2806,8 +2799,7 @@ msgid "number of points must be at least 2" msgstr "" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" +msgid "object '%q' is not a tuple or list" msgstr "" #: py/obj.c @@ -2843,8 +2835,7 @@ msgid "object not iterable" msgstr "" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" +msgid "object of type '%q' has no len()" msgstr "" #: py/obj.c @@ -2937,20 +2928,9 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" msgstr "" #: py/objint_mpz.c @@ -3107,12 +3087,7 @@ msgid "stream operation not supported" msgstr "" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" +msgid "string indices must be integers, not %q" msgstr "" #: py/stream.c @@ -3124,10 +3099,6 @@ msgid "struct: cannot index" msgstr "" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "" @@ -3196,7 +3167,7 @@ msgstr "" msgid "trapz is defined for 1D arrays of equal length" msgstr "" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "" @@ -3204,10 +3175,6 @@ msgstr "" msgid "tuple/list has wrong length" msgstr "" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3263,8 +3230,7 @@ msgid "unknown conversion specifier %c" msgstr "" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" +msgid "unknown format code '%c' for object of type '%q'" msgstr "" #: py/compile.c @@ -3304,7 +3270,7 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "" #: py/runtime.c -msgid "unsupported type for %q: '%s'" +msgid "unsupported type for %q: '%q'" msgstr "" #: py/runtime.c @@ -3312,7 +3278,7 @@ msgid "unsupported type for operator" msgstr "" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" msgstr "" #: py/objint.c @@ -3391,3 +3357,6 @@ msgstr "" #: extmod/ulab/code/filter/filter.c msgid "zi must be of shape (n_section, 2)" msgstr "" + +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "Indexy %q musà být celá ÄÃsla, nikoli %s" diff --git a/locale/de_DE.po b/locale/de_DE.po index 8ba5e4bd3..87cca4a77 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: 2020-06-16 18:24+0000\n" "Last-Translator: Andreas Buchen <andreas.buchen@gmail.com>\n" "Language: de_DE\n" @@ -71,13 +71,17 @@ msgstr "" msgid "%q in use" msgstr "%q in Benutzung" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "Der Index %q befindet sich außerhalb des Bereiches" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "%q Indizes müssen Integer sein, nicht %s" +msgid "%q indices must be integers, not %q" +msgstr "" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -115,6 +119,42 @@ msgstr "%q() nimmt %d Argumente ohne Keyword an, aber es wurden %d angegeben" msgid "'%q' argument required" msgstr "'%q' Argument erforderlich" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -165,48 +205,6 @@ msgstr "'%s' integer %d ist nicht im Bereich %d..%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "'%s' Integer 0x%x passt nicht in Maske 0x%x" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "Das Objekt '%s' kann das Attribut '%q' nicht zuweisen" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "Das Objekt '%s' unterstützt '%q' nicht" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "'%s' Objekt unterstützt keine Zuweisung von Elementen" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "'%s' Objekt unterstützt das Löschen von Elementen nicht" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "'%s' Objekt hat kein Attribut '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "'%s' Objekt ist kein Iterator" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "'%s' object ist nicht aufrufbar" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "'%s' Objekt nicht iterierbar" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "'%s' Objekt hat keine '__getitem__'-Methode (not subscriptable)" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "'='-Ausrichtung ist im String-Formatbezeichner nicht zulässig" @@ -458,6 +456,10 @@ msgstr "Die Pufferlänge %d ist zu groß. Sie muss kleiner als %d sein" msgid "Buffer length must be a multiple of 512" msgstr "" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "Der Puffer muss eine Mindestenslänge von 1 haben" @@ -655,6 +657,10 @@ msgstr "Timer konnte nicht neu gestartet werden" msgid "Could not restart PWM" msgstr "PWM konnte nicht neu gestartet werden" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "PWM konnte nicht gestartet werden" @@ -754,7 +760,7 @@ msgstr "Fehler in regex" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Erwartet ein(e) %q" @@ -838,6 +844,11 @@ msgstr "Interner Flash konnte nicht geschrieben werden." msgid "File exists" msgstr "Datei existiert" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "" @@ -866,7 +877,7 @@ msgid "Group full" msgstr "Gruppe voll" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "Hardware beschäftigt, versuchen Sie alternative Pins" @@ -882,6 +893,10 @@ msgstr "Lese/Schreibe-operation an geschlossener Datei" msgid "I2C Init Error" msgstr "I2C-Init-Fehler" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -929,6 +944,11 @@ msgstr "" msgid "Invalid %q pin" msgstr "Ungültiger %q pin" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "Ungültiger ADC-Einheitenwert" @@ -941,24 +961,12 @@ msgstr "Ungültige BMP-Datei" msgid "Invalid DAC pin supplied" msgstr "Ungültiger DAC-Pin angegeben" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "Ungültige I2C-Pinauswahl" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "Ungültige PWM Frequenz" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "Ungültige SPI-Pin-Auswahl" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "Ungültige UART-Pinauswahl" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "Ungültiges Argument" @@ -1256,6 +1264,10 @@ msgstr "Nicht verbunden" msgid "Not playing" msgstr "Spielt nicht ab" +#: main.c +msgid "Not running saved code.\n" +msgstr "" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1350,9 +1362,14 @@ msgstr "und alle Module im Dateisystem \n" msgid "Polygon needs at least 3 points" msgstr "Polygone brauchen mindestens 3 Punkte" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" -msgstr "Pop aus einem leeren Ps2-Puffer" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" +msgstr "" #: shared-bindings/_bleio/Adapter.c msgid "Prefix buffer must be on the heap" @@ -1368,6 +1385,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "Pull wird nicht verwendet, wenn die Richtung output ist." +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "PulseOut wird auf diesem Chip nicht unterstützt" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "RNG DeInit-Fehler" @@ -1428,12 +1449,8 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "Zeileneintrag muss ein digitalio.DigitalInOut sein" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Sicherheitsmodus aktiv! Automatisches Neuladen ist deaktiviert.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" -msgstr "Sicherheitsmodus aktiv! Gespeicherter Code wird nicht ausgeführt\n" +msgid "Running in safe mode! " +msgstr "" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" @@ -1444,6 +1461,16 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "SDA oder SCL brauchen pull up" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "SPI-Init-Fehler" @@ -1820,9 +1847,8 @@ msgid "__init__() should return None" msgstr "__init__() sollte None zurückgeben" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" -msgstr "__init__() sollte None zurückgeben, nicht '%s'" +msgid "__init__() should return None, not '%q'" +msgstr "" #: py/objobject.c msgid "__new__ arg must be a user-type" @@ -1975,7 +2001,7 @@ msgstr "bytes mit mehr als 8 bits werden nicht unterstützt" msgid "bytes value out of range" msgstr "Byte-Wert außerhalb des Bereichs" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "Kalibrierung ist außerhalb der Reichweite" @@ -2009,48 +2035,18 @@ msgstr "" msgid "can't assign to expression" msgstr "kann keinem Ausdruck zuweisen" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "kann %s nicht nach complex konvertieren" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "kann %s nicht nach float konvertieren" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" -msgstr "kann %s nicht nach int konvertieren" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" +msgstr "" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "Kann '%q' Objekt nicht implizit nach %q konvertieren" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "kann NaN nicht nach int konvertieren" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "kann Adresse nicht in int konvertieren" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "kann inf nicht nach int konvertieren" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "kann nicht nach complex konvertieren" - -#: py/obj.c -msgid "can't convert to float" -msgstr "kann nicht nach float konvertieren" - #: py/obj.c -msgid "can't convert to int" -msgstr "kann nicht nach int konvertieren" +msgid "can't convert to %q" +msgstr "" #: py/objstr.c msgid "can't convert to str implicitly" @@ -2468,7 +2464,7 @@ msgstr "Funktion vermisst benötigtes Keyword-Argumente '%q'" msgid "function missing required positional argument #%d" msgstr "Funktion vermisst benötigtes Argumente ohne Keyword #%d" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "" @@ -2518,10 +2514,7 @@ msgstr "padding ist inkorrekt" msgid "index is out of bounds" msgstr "Index ist außerhalb der Grenzen" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "index außerhalb der Reichweite" @@ -2884,9 +2877,8 @@ msgid "number of points must be at least 2" msgstr "Die Anzahl der Punkte muss mindestens 2 betragen" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" -msgstr "Objekt '%s' ist weder tupel noch list" +msgid "object '%q' is not a tuple or list" +msgstr "" #: py/obj.c msgid "object does not support item assignment" @@ -2921,9 +2913,8 @@ msgid "object not iterable" msgstr "Objekt nicht iterierbar" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" -msgstr "Objekt vom Typ '%s' hat keine len()" +msgid "object of type '%q' has no len()" +msgstr "" #: py/obj.c msgid "object with buffer protocol required" @@ -3018,21 +3009,10 @@ msgstr "Polygon kann nur in einem übergeordneten Element registriert werden" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "pop von einem leeren PulseIn" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "pop von einer leeren Menge (set)" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "pop von einer leeren Liste" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" -msgstr "popitem(): dictionary ist leer" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" +msgstr "" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" @@ -3190,13 +3170,8 @@ msgid "stream operation not supported" msgstr "stream operation ist nicht unterstützt" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "String index außerhalb des Bereiches" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" -msgstr "String indizes müssen Integer sein, nicht %s" +msgid "string indices must be integers, not %q" +msgstr "" #: py/stream.c msgid "string not supported; use bytes or bytearray" @@ -3208,10 +3183,6 @@ msgid "struct: cannot index" msgstr "struct: kann nicht indexieren" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "struct: index außerhalb gültigen Bereichs" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "struct: keine Felder" @@ -3280,7 +3251,7 @@ msgstr "zu viele Werte zum Auspacken (erwartet %d)" msgid "trapz is defined for 1D arrays of equal length" msgstr "" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "Tupelindex außerhalb des Bereichs" @@ -3288,10 +3259,6 @@ msgstr "Tupelindex außerhalb des Bereichs" msgid "tuple/list has wrong length" msgstr "tupel/list hat falsche Länge" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "Tupel / Liste auf RHS erforderlich" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3351,9 +3318,8 @@ msgid "unknown conversion specifier %c" msgstr "unbekannter Konvertierungs specifier %c" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" -msgstr "unbekannter Formatcode '%c' für Objekt vom Typ '%s'" +msgid "unknown format code '%c' for object of type '%q'" +msgstr "" #: py/compile.c msgid "unknown type" @@ -3392,16 +3358,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "nicht unterstütztes Formatzeichen '%c' (0x%x) bei Index %d" #: py/runtime.c -msgid "unsupported type for %q: '%s'" -msgstr "nicht unterstützter Type für %q: '%s'" +msgid "unsupported type for %q: '%q'" +msgstr "" #: py/runtime.c msgid "unsupported type for operator" msgstr "nicht unterstützter Typ für Operator" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" -msgstr "nicht unterstützte Typen für %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" +msgstr "" #: py/objint.c #, c-format @@ -3480,12 +3446,126 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "tuple/list required on RHS" +#~ msgstr "Tupel / Liste auf RHS erforderlich" + +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "%q Indizes müssen Integer sein, nicht %s" + +#~ msgid "'%s' object cannot assign attribute '%q'" +#~ msgstr "Das Objekt '%s' kann das Attribut '%q' nicht zuweisen" + +#~ msgid "'%s' object does not support '%q'" +#~ msgstr "Das Objekt '%s' unterstützt '%q' nicht" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "'%s' Objekt unterstützt keine Zuweisung von Elementen" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "'%s' Objekt unterstützt das Löschen von Elementen nicht" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "'%s' Objekt hat kein Attribut '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "'%s' Objekt ist kein Iterator" + +#~ msgid "'%s' object is not callable" +#~ msgstr "'%s' object ist nicht aufrufbar" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "'%s' Objekt nicht iterierbar" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "'%s' Objekt hat keine '__getitem__'-Methode (not subscriptable)" + +#~ msgid "Invalid I2C pin selection" +#~ msgstr "Ungültige I2C-Pinauswahl" + +#~ msgid "Invalid SPI pin selection" +#~ msgstr "Ungültige SPI-Pin-Auswahl" + +#~ msgid "Invalid UART pin selection" +#~ msgstr "Ungültige UART-Pinauswahl" + +#~ msgid "Pop from an empty Ps2 buffer" +#~ msgstr "Pop aus einem leeren Ps2-Puffer" + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Sicherheitsmodus aktiv! Automatisches Neuladen ist deaktiviert.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "Sicherheitsmodus aktiv! Gespeicherter Code wird nicht ausgeführt\n" + +#~ msgid "__init__() should return None, not '%s'" +#~ msgstr "__init__() sollte None zurückgeben, nicht '%s'" + +#~ msgid "can't convert %s to complex" +#~ msgstr "kann %s nicht nach complex konvertieren" + +#~ msgid "can't convert %s to float" +#~ msgstr "kann %s nicht nach float konvertieren" + +#~ msgid "can't convert %s to int" +#~ msgstr "kann %s nicht nach int konvertieren" + +#~ msgid "can't convert NaN to int" +#~ msgstr "kann NaN nicht nach int konvertieren" + +#~ msgid "can't convert address to int" +#~ msgstr "kann Adresse nicht in int konvertieren" + +#~ msgid "can't convert inf to int" +#~ msgstr "kann inf nicht nach int konvertieren" + +#~ msgid "can't convert to complex" +#~ msgstr "kann nicht nach complex konvertieren" + +#~ msgid "can't convert to float" +#~ msgstr "kann nicht nach float konvertieren" + +#~ msgid "can't convert to int" +#~ msgstr "kann nicht nach int konvertieren" + +#~ msgid "object '%s' is not a tuple or list" +#~ msgstr "Objekt '%s' ist weder tupel noch list" + +#~ msgid "object of type '%s' has no len()" +#~ msgstr "Objekt vom Typ '%s' hat keine len()" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "pop von einem leeren PulseIn" + +#~ msgid "pop from an empty set" +#~ msgstr "pop von einer leeren Menge (set)" + +#~ msgid "pop from empty list" +#~ msgstr "pop von einer leeren Liste" + +#~ msgid "popitem(): dictionary is empty" +#~ msgstr "popitem(): dictionary ist leer" + +#~ msgid "string index out of range" +#~ msgstr "String index außerhalb des Bereiches" + +#~ msgid "string indices must be integers, not %s" +#~ msgstr "String indizes müssen Integer sein, nicht %s" + +#~ msgid "struct: index out of range" +#~ msgstr "struct: index außerhalb gültigen Bereichs" + +#~ msgid "unknown format code '%c' for object of type '%s'" +#~ msgstr "unbekannter Formatcode '%c' für Objekt vom Typ '%s'" + +#~ msgid "unsupported type for %q: '%s'" +#~ msgstr "nicht unterstützter Type für %q: '%s'" + +#~ msgid "unsupported types for %q: '%s', '%s'" +#~ msgstr "nicht unterstützte Typen für %q: '%s', '%s'" + #~ msgid "'async for' or 'async with' outside async function" #~ msgstr "'async for' oder 'async with' außerhalb der asynchronen Funktion" -#~ msgid "PulseOut not supported on this chip" -#~ msgstr "PulseOut wird auf diesem Chip nicht unterstützt" - #~ msgid "PulseIn not supported on this chip" #~ msgstr "PulseIn wird auf diesem Chip nicht unterstützt" diff --git a/locale/es.po b/locale/es.po index 1294473af..882904f64 100644 --- a/locale/es.po +++ b/locale/es.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" -"PO-Revision-Date: 2020-07-24 21:12+0000\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" +"PO-Revision-Date: 2020-08-17 21:11+0000\n" "Last-Translator: Alvaro Figueroa <alvaro@greencore.co.cr>\n" "Language-Team: \n" "Language: es\n" @@ -75,13 +75,17 @@ msgstr "%q fallo: %d" msgid "%q in use" msgstr "%q está siendo utilizado" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "%q indice fuera de rango" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "%q indices deben ser enteros, no %s" +msgid "%q indices must be integers, not %q" +msgstr "Ãndices %q deben ser enteros, no %q" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -119,6 +123,42 @@ msgstr "%q() toma %d argumentos posicionales pero %d fueron dados" msgid "'%q' argument required" msgstr "argumento '%q' requerido" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "el objeto '%q' no puede asignar el atributo '%q'" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "objeto '%q' no tiene capacidad '%q'" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "objeto '%q' no tiene capacidad de asignado de artÃculo" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "objeto '%q' no tiene capacidad de borrado de artÃculo" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "objeto '%q' no tiene atributo '%q'" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "objeto '%q' no es un iterador" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "objeto '%q' no es llamable" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "objeto '%q' no es iterable" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "objeto '%q' no es subscribible" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -169,48 +209,6 @@ msgstr "'%s' entero %d no esta dentro del rango %d..%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "'%s' entero 0x%x no cabe en la máscara 0x%x" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "El objeto '%s' no puede asignar al atributo '%q'" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "El objeto '%s' no admite '%q'" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "el objeto '%s' no soporta la asignación de elementos" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "objeto '%s' no soporta la eliminación de elementos" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "objeto '%s' no tiene atributo '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "objeto '%s' no es un iterator" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "objeto '%s' no puede ser llamado" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "objeto '%s' no es iterable" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "el objeto '%s' no es suscriptable" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "'=' alineación no permitida en el especificador string format" @@ -229,7 +227,7 @@ msgstr "'await' fuera de la función" #: py/compile.c msgid "'await', 'async for' or 'async with' outside async function" -msgstr "" +msgstr "'await', 'async for' o 'async with' fuera de la función async" #: py/compile.c msgid "'break' outside loop" @@ -464,6 +462,10 @@ msgstr "La longitud del buffer %d es muy grande. Debe ser menor a %d" msgid "Buffer length must be a multiple of 512" msgstr "El tamaño del búfer debe ser múltiplo de 512" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "Búfer deber ser un múltiplo de 512 bytes" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "Buffer debe ser de longitud 1 como minimo" @@ -660,6 +662,10 @@ msgstr "No se pudo reiniciar el temporizador" msgid "Could not restart PWM" msgstr "No se pudo reiniciar el PWM" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "No se puede definir la dirección" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "No se pudo iniciar el PWM" @@ -759,7 +765,7 @@ msgstr "Error en regex" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Se espera un %q" @@ -842,6 +848,11 @@ msgstr "Error al escribir al flash interno." msgid "File exists" msgstr "El archivo ya existe" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "Framebuffer requiere %d bytes" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "Frecuencia capturada por encima de la capacidad. Captura en pausa." @@ -867,7 +878,7 @@ msgid "Group full" msgstr "Group lleno" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "Hardware ocupado, pruebe pines alternativos" @@ -883,6 +894,10 @@ msgstr "Operación I/O en archivo cerrado" msgid "I2C Init Error" msgstr "Error de inicio de I2C" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "I2SOut no disponible" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -930,6 +945,11 @@ msgstr "%q inválido" msgid "Invalid %q pin" msgstr "Pin %q inválido" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "selección inválida de pin %q" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "Valor de unidad de ADC no válido" @@ -942,24 +962,12 @@ msgstr "Archivo BMP inválido" msgid "Invalid DAC pin supplied" msgstr "Pin suministrado inválido para DAC" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "Selección de pin I2C no válida" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "Frecuencia PWM inválida" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "Selección de pin SPI no válida" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "Selección de pin UART no válida" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "Argumento inválido" @@ -1255,6 +1263,10 @@ msgstr "No conectado" msgid "Not playing" msgstr "No reproduciendo" +#: main.c +msgid "Not running saved code.\n" +msgstr "No ejecutando el código almacenado.\n" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1350,9 +1362,14 @@ msgstr "Además de cualquier módulo en el sistema de archivos\n" msgid "Polygon needs at least 3 points" msgstr "El polÃgono necesita al menos 3 puntos" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" -msgstr "Pop de un buffer Ps2 vacio" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" +msgstr "" #: shared-bindings/_bleio/Adapter.c msgid "Prefix buffer must be on the heap" @@ -1367,6 +1384,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "Pull no se usa cuando la dirección es output." +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "PulseOut no es compatible con este chip" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "Error de desinicializado del RNG" @@ -1427,12 +1448,8 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "La entrada de la fila debe ser digitalio.DigitalInOut" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Ejecutando en modo seguro! La auto-recarga esta deshabilitada.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" -msgstr "Ejecutando en modo seguro! No se esta ejecutando el código guardado.\n" +msgid "Running in safe mode! " +msgstr "¡Corriendo en modo seguro! " #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" @@ -1443,6 +1460,16 @@ msgstr "Sin capacidad para formato CSD para tarjeta SD" msgid "SDA or SCL needs a pull up" msgstr "SDA o SCL necesitan una pull up" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "Error SDIO GetCardInfo %d" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "Error de iniciado de SDIO %d" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "Error de inicio de SPI" @@ -1817,9 +1844,8 @@ msgid "__init__() should return None" msgstr "__init__() deberia devolver None" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" -msgstr "__init__() deberia devolver None, no '%s'" +msgid "__init__() should return None, not '%q'" +msgstr "__init__() debe retornar None, no '%q'" #: py/objobject.c msgid "__new__ arg must be a user-type" @@ -1864,7 +1890,7 @@ msgstr "el argumento tiene un tipo erroneo" #: extmod/ulab/code/linalg/linalg.c msgid "argument must be ndarray" -msgstr "" +msgstr "argumento debe ser ndarray" #: py/argcheck.c shared-bindings/_stage/__init__.c #: shared-bindings/digitalio/DigitalInOut.c shared-bindings/gamepad/GamePad.c @@ -1972,7 +1998,7 @@ msgstr "bytes > 8 bits no soportados" msgid "bytes value out of range" msgstr "valor de bytes fuera de rango" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "calibration esta fuera de rango" @@ -2004,48 +2030,18 @@ msgstr "no se puede agregar un método a una clase ya subclasificada" msgid "can't assign to expression" msgstr "no se puede asignar a la expresión" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "no se puede convertir %s a complejo" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "no se puede convertir %s a float" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" -msgstr "no se puede convertir %s a int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" +msgstr "no puede convertir %q a %q" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "no se puede convertir el objeto '%q' a %q implÃcitamente" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "no se puede convertir Nan a int" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "no se puede convertir address a int" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "no se puede convertir inf en int" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "no se puede convertir a complejo" - -#: py/obj.c -msgid "can't convert to float" -msgstr "no se puede convertir a float" - #: py/obj.c -msgid "can't convert to int" -msgstr "no se puede convertir a int" +msgid "can't convert to %q" +msgstr "no puede convertir a %q" #: py/objstr.c msgid "can't convert to str implicitly" @@ -2459,7 +2455,7 @@ msgstr "la función requiere del argumento por palabra clave '%q'" msgid "function missing required positional argument #%d" msgstr "la función requiere del argumento posicional #%d" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "la función toma %d argumentos posicionales pero le fueron dados %d" @@ -2508,10 +2504,7 @@ msgstr "relleno (padding) incorrecto" msgid "index is out of bounds" msgstr "el Ãndice está fuera de lÃmites" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "index fuera de rango" @@ -2873,9 +2866,8 @@ msgid "number of points must be at least 2" msgstr "el número de puntos debe ser al menos 2" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" -msgstr "el objeto '%s' no es una tupla o lista" +msgid "object '%q' is not a tuple or list" +msgstr "objeto '%q' no es tupla o lista" #: py/obj.c msgid "object does not support item assignment" @@ -2910,9 +2902,8 @@ msgid "object not iterable" msgstr "objeto no iterable" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" -msgstr "el objeto de tipo '%s' no tiene len()" +msgid "object of type '%q' has no len()" +msgstr "objeto de tipo '%q' no tiene len()" #: py/obj.c msgid "object with buffer protocol required" @@ -3004,21 +2995,10 @@ msgstr "el polÃgono solo se puede registrar en uno de los padres" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "pop de un PulseIn vacÃo" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "pop desde un set vacÃo" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "pop desde una lista vacÃa" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" -msgstr "popitem(): diccionario vacÃo" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" +msgstr "pop desde %q vacÃa" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" @@ -3176,13 +3156,8 @@ msgid "stream operation not supported" msgstr "operación stream no soportada" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "string index fuera de rango" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" -msgstr "Ãndices de string deben ser enteros, no %s" +msgid "string indices must be integers, not %q" +msgstr "Ãndices de cadena deben ser enteros, no %q" #: py/stream.c msgid "string not supported; use bytes or bytearray" @@ -3193,10 +3168,6 @@ msgid "struct: cannot index" msgstr "struct: no se puede indexar" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "struct: index fuera de rango" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "struct: sin campos" @@ -3264,9 +3235,9 @@ msgstr "demasiados valores para descomprimir (%d esperado)" #: extmod/ulab/code/approx/approx.c msgid "trapz is defined for 1D arrays of equal length" -msgstr "" +msgstr "trapz está definido para arreglos 1D de igual tamaño" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "tuple index fuera de rango" @@ -3274,10 +3245,6 @@ msgstr "tuple index fuera de rango" msgid "tuple/list has wrong length" msgstr "tupla/lista tiene una longitud incorrecta" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "tuple/lista se require en RHS" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3333,9 +3300,8 @@ msgid "unknown conversion specifier %c" msgstr "especificador de conversión %c desconocido" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" -msgstr "codigo format desconocido '%c' para el typo de objeto '%s'" +msgid "unknown format code '%c' for object of type '%q'" +msgstr "formato de código desconocicdo '%c' para objeto de tipo '%q'" #: py/compile.c msgid "unknown type" @@ -3374,16 +3340,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "carácter no soportado '%c' (0x%x) en Ãndice %d" #: py/runtime.c -msgid "unsupported type for %q: '%s'" -msgstr "tipo no soportado para %q: '%s'" +msgid "unsupported type for %q: '%q'" +msgstr "tipo no soportado para %q: '%q'" #: py/runtime.c msgid "unsupported type for operator" msgstr "tipo de operador no soportado" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" -msgstr "tipos no soportados para %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" +msgstr "tipos no soportados para %q: '%q', '%q'" #: py/objint.c #, c-format @@ -3396,7 +3362,7 @@ msgstr "value_count debe ser > 0" #: extmod/ulab/code/linalg/linalg.c msgid "vectors must have same lengths" -msgstr "" +msgstr "los vectores deben tener el mismo tamaño" #: shared-bindings/watchdog/WatchDogTimer.c msgid "watchdog timeout must be greater than 0" @@ -3462,15 +3428,130 @@ msgstr "zi debe ser de tipo flotante" msgid "zi must be of shape (n_section, 2)" msgstr "zi debe ser una forma (n_section,2)" +#~ msgid "tuple/list required on RHS" +#~ msgstr "tuple/lista se require en RHS" + +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "%q indices deben ser enteros, no %s" + +#~ msgid "'%s' object cannot assign attribute '%q'" +#~ msgstr "El objeto '%s' no puede asignar al atributo '%q'" + +#~ msgid "'%s' object does not support '%q'" +#~ msgstr "El objeto '%s' no admite '%q'" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "el objeto '%s' no soporta la asignación de elementos" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "objeto '%s' no soporta la eliminación de elementos" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "objeto '%s' no tiene atributo '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "objeto '%s' no es un iterator" + +#~ msgid "'%s' object is not callable" +#~ msgstr "objeto '%s' no puede ser llamado" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "objeto '%s' no es iterable" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "el objeto '%s' no es suscriptable" + +#~ msgid "Invalid I2C pin selection" +#~ msgstr "Selección de pin I2C no válida" + +#~ msgid "Invalid SPI pin selection" +#~ msgstr "Selección de pin SPI no válida" + +#~ msgid "Invalid UART pin selection" +#~ msgstr "Selección de pin UART no válida" + +#~ msgid "Pop from an empty Ps2 buffer" +#~ msgstr "Pop de un buffer Ps2 vacio" + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Ejecutando en modo seguro! La auto-recarga esta deshabilitada.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "" +#~ "Ejecutando en modo seguro! No se esta ejecutando el código guardado.\n" + +#~ msgid "__init__() should return None, not '%s'" +#~ msgstr "__init__() deberia devolver None, no '%s'" + +#~ msgid "can't convert %s to complex" +#~ msgstr "no se puede convertir %s a complejo" + +#~ msgid "can't convert %s to float" +#~ msgstr "no se puede convertir %s a float" + +#~ msgid "can't convert %s to int" +#~ msgstr "no se puede convertir %s a int" + +#~ msgid "can't convert NaN to int" +#~ msgstr "no se puede convertir Nan a int" + +#~ msgid "can't convert address to int" +#~ msgstr "no se puede convertir address a int" + +#~ msgid "can't convert inf to int" +#~ msgstr "no se puede convertir inf en int" + +#~ msgid "can't convert to complex" +#~ msgstr "no se puede convertir a complejo" + +#~ msgid "can't convert to float" +#~ msgstr "no se puede convertir a float" + +#~ msgid "can't convert to int" +#~ msgstr "no se puede convertir a int" + +#~ msgid "object '%s' is not a tuple or list" +#~ msgstr "el objeto '%s' no es una tupla o lista" + +#~ msgid "object of type '%s' has no len()" +#~ msgstr "el objeto de tipo '%s' no tiene len()" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "pop de un PulseIn vacÃo" + +#~ msgid "pop from an empty set" +#~ msgstr "pop desde un set vacÃo" + +#~ msgid "pop from empty list" +#~ msgstr "pop desde una lista vacÃa" + +#~ msgid "popitem(): dictionary is empty" +#~ msgstr "popitem(): diccionario vacÃo" + +#~ msgid "string index out of range" +#~ msgstr "string index fuera de rango" + +#~ msgid "string indices must be integers, not %s" +#~ msgstr "Ãndices de string deben ser enteros, no %s" + +#~ msgid "struct: index out of range" +#~ msgstr "struct: index fuera de rango" + +#~ msgid "unknown format code '%c' for object of type '%s'" +#~ msgstr "codigo format desconocido '%c' para el typo de objeto '%s'" + +#~ msgid "unsupported type for %q: '%s'" +#~ msgstr "tipo no soportado para %q: '%s'" + +#~ msgid "unsupported types for %q: '%s', '%s'" +#~ msgstr "tipos no soportados para %q: '%s', '%s'" + #~ msgid "'%q' object is not bytes-like" #~ msgstr "el objeto '%q' no es similar a bytes" #~ msgid "'async for' or 'async with' outside async function" #~ msgstr "'async for' o 'async with' fuera de la función async" -#~ msgid "PulseOut not supported on this chip" -#~ msgstr "PulseOut no es compatible con este chip" - #~ msgid "PulseIn not supported on this chip" #~ msgstr "PulseIn no es compatible con este chip" @@ -3717,8 +3798,8 @@ msgstr "zi debe ser una forma (n_section,2)" #~ "Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d " #~ "bpp given" #~ msgstr "" -#~ "Solo se admiten BMP monocromos, indexados de 8bpp y 16bpp o superiores:% " -#~ "d bppdado" +#~ "Solo se admiten BMP monocromos, indexados de 8bpp y 16bpp o superiores:%d " +#~ "bppdado" #, fuzzy #~ msgid "Only slices with step=1 (aka None) are supported" diff --git a/locale/fil.po b/locale/fil.po index 07c8d270e..ec4f9f685 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: 2018-12-20 22:15-0800\n" "Last-Translator: Timothy <me@timothygarcia.ca>\n" "Language-Team: fil\n" @@ -64,13 +64,17 @@ msgstr "" msgid "%q in use" msgstr "%q ay ginagamit" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "%q indeks wala sa sakop" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "%q indeks ay dapat integers, hindi %s" +msgid "%q indices must be integers, not %q" +msgstr "" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -111,6 +115,42 @@ msgstr "" msgid "'%q' argument required" msgstr "'%q' argument kailangan" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -161,48 +201,6 @@ msgstr "'%s' integer %d ay wala sa sakop ng %d..%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "'%s' integer 0x%x ay wala sa mask na sakop ng 0x%x" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "'%s' object hindi sumusuporta ng item assignment" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "'%s' object ay hindi sumusuporta sa pagtanggal ng item" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "'%s' object ay walang attribute '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "'%s' object ay hindi iterator" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "'%s' object hindi matatawag" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "'%s' object ay hindi ma i-iterable" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "'%s' object ay hindi maaaring i-subscript" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "'=' Gindi pinapayagan ang alignment sa pag specify ng string format" @@ -453,6 +451,10 @@ msgstr "" msgid "Buffer length must be a multiple of 512" msgstr "" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "Buffer dapat ay hindi baba sa 1 na haba" @@ -646,6 +648,10 @@ msgstr "" msgid "Could not restart PWM" msgstr "" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "" @@ -748,7 +754,7 @@ msgstr "May pagkakamali sa REGEX" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Umasa ng %q" @@ -833,6 +839,11 @@ msgstr "" msgid "File exists" msgstr "Mayroong file" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "" @@ -857,7 +868,7 @@ msgid "Group full" msgstr "Puno ang group" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "" @@ -873,6 +884,10 @@ msgstr "I/O operasyon sa saradong file" msgid "I2C Init Error" msgstr "" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -920,6 +935,11 @@ msgstr "" msgid "Invalid %q pin" msgstr "Mali ang %q pin" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "" @@ -932,24 +952,12 @@ msgstr "Mali ang BMP file" msgid "Invalid DAC pin supplied" msgstr "" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "Mali ang PWM frequency" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "Maling argumento" @@ -1246,6 +1254,10 @@ msgstr "Hindi maka connect sa AP" msgid "Not playing" msgstr "Hindi playing" +#: main.c +msgid "Not running saved code.\n" +msgstr "" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1334,8 +1346,13 @@ msgstr "Kasama ang kung ano pang modules na sa filesystem\n" msgid "Polygon needs at least 3 points" msgstr "" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" msgstr "" #: shared-bindings/_bleio/Adapter.c @@ -1352,6 +1369,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "Pull hindi ginagamit kapag ang direksyon ay output." +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "" @@ -1413,12 +1434,8 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Tumatakbo sa safe mode! Awtomatikong pag re-reload ay OFF.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" -msgstr "Tumatakbo sa safe mode! Hindi tumatakbo ang nai-save na code.\n" +msgid "Running in safe mode! " +msgstr "" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" @@ -1429,6 +1446,16 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "Kailangan ng pull up resistors ang SDA o SCL" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "" @@ -1788,9 +1815,8 @@ msgid "__init__() should return None" msgstr "__init __ () dapat magbalik na None" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" -msgstr "__init__() dapat magbalink na None, hindi '%s'" +msgid "__init__() should return None, not '%q'" +msgstr "" #: py/objobject.c msgid "__new__ arg must be a user-type" @@ -1944,7 +1970,7 @@ msgstr "hindi sinusuportahan ang bytes > 8 bits" msgid "bytes value out of range" msgstr "bytes value wala sa sakop" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "kalibrasion ay wala sa sakop" @@ -1977,48 +2003,18 @@ msgstr "" msgid "can't assign to expression" msgstr "hindi ma i-assign sa expression" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "hindi ma-convert %s sa complex" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "hindi ma-convert %s sa int" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" -msgstr "hindi ma-convert %s sa int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" +msgstr "" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "hindi maaaring i-convert ang '%q' na bagay sa %q nang walang pahiwatig" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "hindi ma i-convert NaN sa int" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "hindi ma i-convert ang address sa INT" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "hindi ma i-convert inf sa int" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "hindi ma-convert sa complex" - -#: py/obj.c -msgid "can't convert to float" -msgstr "hindi ma-convert sa float" - #: py/obj.c -msgid "can't convert to int" -msgstr "hindi ma-convert sa int" +msgid "can't convert to %q" +msgstr "" #: py/objstr.c msgid "can't convert to str implicitly" @@ -2051,7 +2047,7 @@ msgstr "hindi puede ang maraming *x" #: py/emitnative.c msgid "can't implicitly convert '%q' to 'bool'" -msgstr "hindi maaaring ma-convert ang '% qt' sa 'bool'" +msgstr "hindi maaaring ma-convert ang ' %q' sa 'bool'" #: py/emitnative.c msgid "can't load from '%q'" @@ -2435,7 +2431,7 @@ msgstr "function nangangailangan ng keyword argument '%q'" msgid "function missing required positional argument #%d" msgstr "function nangangailangan ng positional argument #%d" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "" @@ -2485,10 +2481,7 @@ msgstr "mali ang padding" msgid "index is out of bounds" msgstr "" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "index wala sa sakop" @@ -2848,9 +2841,8 @@ msgid "number of points must be at least 2" msgstr "" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" -msgstr "object '%s' ay hindi tuple o list" +msgid "object '%q' is not a tuple or list" +msgstr "" #: py/obj.c msgid "object does not support item assignment" @@ -2885,9 +2877,8 @@ msgid "object not iterable" msgstr "object hindi ma i-iterable" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" -msgstr "object na type '%s' walang len()" +msgid "object of type '%q' has no len()" +msgstr "" #: py/obj.c msgid "object with buffer protocol required" @@ -2981,21 +2972,10 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "pop mula sa walang laman na PulseIn" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "pop sa walang laman na set" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "pop galing sa walang laman na list" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" -msgstr "popitem(): dictionary ay walang laman" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" +msgstr "" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" @@ -3154,13 +3134,8 @@ msgid "stream operation not supported" msgstr "stream operation hindi sinusuportahan" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "indeks ng string wala sa sakop" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" -msgstr "ang indeks ng string ay dapat na integer, hindi %s" +msgid "string indices must be integers, not %q" +msgstr "" #: py/stream.c msgid "string not supported; use bytes or bytearray" @@ -3171,10 +3146,6 @@ msgid "struct: cannot index" msgstr "struct: hindi ma-index" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "struct: index hindi maabot" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "struct: walang fields" @@ -3244,7 +3215,7 @@ msgstr "masyadong maraming values para i-unpact (umaasa ng %d)" msgid "trapz is defined for 1D arrays of equal length" msgstr "" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "indeks ng tuple wala sa sakop" @@ -3252,10 +3223,6 @@ msgstr "indeks ng tuple wala sa sakop" msgid "tuple/list has wrong length" msgstr "mali ang haba ng tuple/list" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3311,9 +3278,8 @@ msgid "unknown conversion specifier %c" msgstr "hindi alam ang conversion specifier na %c" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" -msgstr "hindi alam ang format code '%c' para sa object na ang type ay '%s'" +msgid "unknown format code '%c' for object of type '%q'" +msgstr "" #: py/compile.c msgid "unknown type" @@ -3352,16 +3318,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "hindi sinusuportahan ang format character na '%c' (0x%x) sa index %d" #: py/runtime.c -msgid "unsupported type for %q: '%s'" -msgstr "hindi sinusuportahang type para sa %q: '%s'" +msgid "unsupported type for %q: '%q'" +msgstr "" #: py/runtime.c msgid "unsupported type for operator" msgstr "hindi sinusuportahang type para sa operator" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" -msgstr "hindi sinusuportahang type para sa %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" +msgstr "" #: py/objint.c #, c-format @@ -3442,6 +3408,102 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "%q indeks ay dapat integers, hindi %s" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "'%s' object hindi sumusuporta ng item assignment" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "'%s' object ay hindi sumusuporta sa pagtanggal ng item" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "'%s' object ay walang attribute '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "'%s' object ay hindi iterator" + +#~ msgid "'%s' object is not callable" +#~ msgstr "'%s' object hindi matatawag" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "'%s' object ay hindi ma i-iterable" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "'%s' object ay hindi maaaring i-subscript" + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Tumatakbo sa safe mode! Awtomatikong pag re-reload ay OFF.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "Tumatakbo sa safe mode! Hindi tumatakbo ang nai-save na code.\n" + +#~ msgid "__init__() should return None, not '%s'" +#~ msgstr "__init__() dapat magbalink na None, hindi '%s'" + +#~ msgid "can't convert %s to complex" +#~ msgstr "hindi ma-convert %s sa complex" + +#~ msgid "can't convert %s to float" +#~ msgstr "hindi ma-convert %s sa int" + +#~ msgid "can't convert %s to int" +#~ msgstr "hindi ma-convert %s sa int" + +#~ msgid "can't convert NaN to int" +#~ msgstr "hindi ma i-convert NaN sa int" + +#~ msgid "can't convert address to int" +#~ msgstr "hindi ma i-convert ang address sa INT" + +#~ msgid "can't convert inf to int" +#~ msgstr "hindi ma i-convert inf sa int" + +#~ msgid "can't convert to complex" +#~ msgstr "hindi ma-convert sa complex" + +#~ msgid "can't convert to float" +#~ msgstr "hindi ma-convert sa float" + +#~ msgid "can't convert to int" +#~ msgstr "hindi ma-convert sa int" + +#~ msgid "object '%s' is not a tuple or list" +#~ msgstr "object '%s' ay hindi tuple o list" + +#~ msgid "object of type '%s' has no len()" +#~ msgstr "object na type '%s' walang len()" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "pop mula sa walang laman na PulseIn" + +#~ msgid "pop from an empty set" +#~ msgstr "pop sa walang laman na set" + +#~ msgid "pop from empty list" +#~ msgstr "pop galing sa walang laman na list" + +#~ msgid "popitem(): dictionary is empty" +#~ msgstr "popitem(): dictionary ay walang laman" + +#~ msgid "string index out of range" +#~ msgstr "indeks ng string wala sa sakop" + +#~ msgid "string indices must be integers, not %s" +#~ msgstr "ang indeks ng string ay dapat na integer, hindi %s" + +#~ msgid "struct: index out of range" +#~ msgstr "struct: index hindi maabot" + +#~ msgid "unknown format code '%c' for object of type '%s'" +#~ msgstr "hindi alam ang format code '%c' para sa object na ang type ay '%s'" + +#~ msgid "unsupported type for %q: '%s'" +#~ msgstr "hindi sinusuportahang type para sa %q: '%s'" + +#~ msgid "unsupported types for %q: '%s', '%s'" +#~ msgstr "hindi sinusuportahang type para sa %q: '%s', '%s'" + #~ msgid "AP required" #~ msgstr "AP kailangan" diff --git a/locale/fr.po b/locale/fr.po index f16450105..0562053f1 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: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: 2020-07-27 21:27+0000\n" "Last-Translator: Nathan <bonnemainsnathan@gmail.com>\n" "Language: fr\n" @@ -76,13 +76,17 @@ msgstr "Échec de %q : %d" msgid "%q in use" msgstr "%q utilisé" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "index %q hors gamme" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "les indices %q doivent être des entiers, pas %s" +msgid "%q indices must be integers, not %q" +msgstr "" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -120,6 +124,42 @@ msgstr "%q() prend %d arguments positionnels mais %d ont été donnés" msgid "'%q' argument required" msgstr "'%q' argument requis" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -170,48 +210,6 @@ msgstr "'%s' l'entier %d n'est pas dans la gamme %d..%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "'%s' l'entier 0x%x ne correspond pas au masque 0x%x" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "L'objet '%s' ne peut pas attribuer '%q'" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "L'objet '%s' ne prend pas en charge '%q'" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "l'objet '%s' ne supporte pas l'assignation d'éléments" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "l'objet '%s' ne supporte pas la suppression d'éléments" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "l'objet '%s' n'a pas d'attribut '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "l'objet '%s' n'est pas un itérateur" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "l'objet '%s' n'est pas appelable" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "l'objet '%s' n'est pas itérable" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "l'objet '%s' n'est pas sous-scriptable" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "'=' alignement non autorisé dans la spéc. de format de chaîne" @@ -464,6 +462,10 @@ msgstr "La longueur du tampon %d est trop grande. Il doit être inférieur à %d msgid "Buffer length must be a multiple of 512" msgstr "La longueur de la mémoire tampon doit être un multiple de 512" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "Le tampon doit être de longueur au moins 1" @@ -663,6 +665,10 @@ msgstr "Impossible de réinitialiser le minuteur" msgid "Could not restart PWM" msgstr "Impossible de redémarrer PWM" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "Impossible de démarrer PWM" @@ -762,7 +768,7 @@ msgstr "Erreur dans l'expression régulière" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Attendu un %q" @@ -846,6 +852,11 @@ msgstr "Échec de l'écriture du flash interne." msgid "File exists" msgstr "Le fichier existe" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "La fréquence capturée est au delà des capacités. Capture en pause." @@ -871,7 +882,7 @@ msgid "Group full" msgstr "Groupe plein" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "Matériel occupé, essayez d'autres broches" @@ -887,6 +898,10 @@ msgstr "opération d'E/S sur un fichier fermé" msgid "I2C Init Error" msgstr "Erreur d'initialisation I2C" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -934,6 +949,11 @@ msgstr "%q invalide" msgid "Invalid %q pin" msgstr "Broche invalide pour '%q'" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "Valeur d'unité ADC non valide" @@ -946,24 +966,12 @@ msgstr "Fichier BMP invalide" msgid "Invalid DAC pin supplied" msgstr "Broche DAC non valide fournie" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "Sélection de broches I2C non valide" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "Fréquence de PWM invalide" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "Sélection de broches SPI non valide" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "Sélection de broches UART non valide" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "Argument invalide" @@ -1259,6 +1267,10 @@ msgstr "Non connecté" msgid "Not playing" msgstr "Ne joue pas" +#: main.c +msgid "Not running saved code.\n" +msgstr "" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1357,9 +1369,14 @@ msgstr "Ainsi que tout autre module présent sur le système de fichiers\n" msgid "Polygon needs at least 3 points" msgstr "Polygone a besoin d’au moins 3 points" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" -msgstr "Pop à partir d'un tampon Ps2 vide" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" +msgstr "" #: shared-bindings/_bleio/Adapter.c msgid "Prefix buffer must be on the heap" @@ -1373,6 +1390,10 @@ msgstr "Appuyez sur une touche pour entrer sur REPL ou CTRL-D pour recharger." msgid "Pull not used when direction is output." msgstr "Le tirage 'pull' n'est pas utilisé quand la direction est 'output'." +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "PulseOut non pris en charge sur cette puce" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "Erreur RNG DeInit" @@ -1433,12 +1454,8 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "L'entrée de ligne 'Row' doit être un digitalio.DigitalInOut" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Mode sans-échec ! Auto-chargement désactivé.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" -msgstr "Mode sans-échec ! Le code sauvegardé n'est pas éxecuté.\n" +msgid "Running in safe mode! " +msgstr "" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" @@ -1449,6 +1466,16 @@ msgstr "Le format de carte SD CSD n'est pas pris en charge" msgid "SDA or SCL needs a pull up" msgstr "SDA ou SCL a besoin d'une résistance de tirage ('pull up')" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "Erreur d'initialisation SPI" @@ -1824,9 +1851,8 @@ msgid "__init__() should return None" msgstr "__init__() doit retourner None" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" -msgstr "__init__() doit retourner None, pas '%s'" +msgid "__init__() should return None, not '%q'" +msgstr "" #: py/objobject.c msgid "__new__ arg must be a user-type" @@ -1979,7 +2005,7 @@ msgstr "octets > 8 bits non supporté" msgid "bytes value out of range" msgstr "valeur des octets hors bornes" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "étalonnage hors bornes" @@ -2012,48 +2038,18 @@ msgstr "" msgid "can't assign to expression" msgstr "ne peut pas assigner à une expression" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "ne peut convertir %s en nombre complexe" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "ne peut convertir %s en nombre à virgule flottante 'float'" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" -msgstr "ne peut convertir %s en entier 'int'" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" +msgstr "" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "impossible de convertir l'objet '%q' en '%q' implicitement" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "on ne peut convertir NaN en entier 'int'" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "ne peut convertir l'adresse en entier 'int'" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "on ne peut convertir l'infini 'inf' en entier 'int'" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "ne peut convertir en nombre complexe" - #: py/obj.c -msgid "can't convert to float" -msgstr "ne peut convertir en nombre à virgule flottante 'float'" - -#: py/obj.c -msgid "can't convert to int" -msgstr "ne peut convertir en entier 'int'" +msgid "can't convert to %q" +msgstr "" #: py/objstr.c msgid "can't convert to str implicitly" @@ -2476,7 +2472,7 @@ msgstr "il manque l'argument nommé obligatoire '%q'" msgid "function missing required positional argument #%d" msgstr "il manque l'argument positionnel obligatoire #%d" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "la fonction prend %d argument(s) positionnels mais %d ont été donné(s)" @@ -2525,10 +2521,7 @@ msgstr "espacement incorrect" msgid "index is out of bounds" msgstr "l'index est hors limites" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "index hors gamme" @@ -2891,9 +2884,8 @@ msgid "number of points must be at least 2" msgstr "le nombre de points doit être d'au moins 2" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" -msgstr "l'objet '%s' n'est pas un tuple ou une liste" +msgid "object '%q' is not a tuple or list" +msgstr "" #: py/obj.c msgid "object does not support item assignment" @@ -2928,9 +2920,8 @@ msgid "object not iterable" msgstr "objet non itérable" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" -msgstr "l'objet de type '%s' n'a pas de len()" +msgid "object of type '%q' has no len()" +msgstr "" #: py/obj.c msgid "object with buffer protocol required" @@ -3025,21 +3016,10 @@ msgstr "le polygone ne peut être enregistré que dans un parent" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "'pop' d'une entrée PulseIn vide" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "'pop' d'un ensemble set vide" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "'pop' d'une liste vide" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" -msgstr "popitem() : dictionnaire vide" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" +msgstr "" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" @@ -3197,13 +3177,8 @@ msgid "stream operation not supported" msgstr "opération de flux non supportée" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "index de chaîne hors gamme" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" -msgstr "les indices de chaîne de caractères doivent être des entiers, pas %s" +msgid "string indices must be integers, not %q" +msgstr "" #: py/stream.c msgid "string not supported; use bytes or bytearray" @@ -3215,10 +3190,6 @@ msgid "struct: cannot index" msgstr "struct : indexage impossible" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "struct : index hors limites" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "struct : aucun champs" @@ -3287,7 +3258,7 @@ msgstr "trop de valeur à dégrouper (%d attendues)" msgid "trapz is defined for 1D arrays of equal length" msgstr "" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "index du tuple hors gamme" @@ -3295,10 +3266,6 @@ msgstr "index du tuple hors gamme" msgid "tuple/list has wrong length" msgstr "tuple/liste a une mauvaise longueur" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "tuple ou liste requis en partie droite" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3354,9 +3321,8 @@ msgid "unknown conversion specifier %c" msgstr "spécification %c de conversion inconnue" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" -msgstr "code de format '%c' inconnu pour un objet de type '%s'" +msgid "unknown format code '%c' for object of type '%q'" +msgstr "" #: py/compile.c msgid "unknown type" @@ -3395,16 +3361,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "caractère de format '%c' (0x%x) non supporté à l'index %d" #: py/runtime.c -msgid "unsupported type for %q: '%s'" -msgstr "type non supporté pour %q : '%s'" +msgid "unsupported type for %q: '%q'" +msgstr "" #: py/runtime.c msgid "unsupported type for operator" msgstr "type non supporté pour l'opérateur" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" -msgstr "type non supporté pour %q : '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" +msgstr "" #: py/objint.c #, c-format @@ -3483,12 +3449,127 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "tuple/list required on RHS" +#~ msgstr "tuple ou liste requis en partie droite" + +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "les indices %q doivent être des entiers, pas %s" + +#~ msgid "'%s' object cannot assign attribute '%q'" +#~ msgstr "L'objet '%s' ne peut pas attribuer '%q'" + +#~ msgid "'%s' object does not support '%q'" +#~ msgstr "L'objet '%s' ne prend pas en charge '%q'" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "l'objet '%s' ne supporte pas l'assignation d'éléments" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "l'objet '%s' ne supporte pas la suppression d'éléments" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "l'objet '%s' n'a pas d'attribut '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "l'objet '%s' n'est pas un itérateur" + +#~ msgid "'%s' object is not callable" +#~ msgstr "l'objet '%s' n'est pas appelable" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "l'objet '%s' n'est pas itérable" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "l'objet '%s' n'est pas sous-scriptable" + +#~ msgid "Invalid I2C pin selection" +#~ msgstr "Sélection de broches I2C non valide" + +#~ msgid "Invalid SPI pin selection" +#~ msgstr "Sélection de broches SPI non valide" + +#~ msgid "Invalid UART pin selection" +#~ msgstr "Sélection de broches UART non valide" + +#~ msgid "Pop from an empty Ps2 buffer" +#~ msgstr "Pop à partir d'un tampon Ps2 vide" + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Mode sans-échec ! Auto-chargement désactivé.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "Mode sans-échec ! Le code sauvegardé n'est pas éxecuté.\n" + +#~ msgid "__init__() should return None, not '%s'" +#~ msgstr "__init__() doit retourner None, pas '%s'" + +#~ msgid "can't convert %s to complex" +#~ msgstr "ne peut convertir %s en nombre complexe" + +#~ msgid "can't convert %s to float" +#~ msgstr "ne peut convertir %s en nombre à virgule flottante 'float'" + +#~ msgid "can't convert %s to int" +#~ msgstr "ne peut convertir %s en entier 'int'" + +#~ msgid "can't convert NaN to int" +#~ msgstr "on ne peut convertir NaN en entier 'int'" + +#~ msgid "can't convert address to int" +#~ msgstr "ne peut convertir l'adresse en entier 'int'" + +#~ msgid "can't convert inf to int" +#~ msgstr "on ne peut convertir l'infini 'inf' en entier 'int'" + +#~ msgid "can't convert to complex" +#~ msgstr "ne peut convertir en nombre complexe" + +#~ msgid "can't convert to float" +#~ msgstr "ne peut convertir en nombre à virgule flottante 'float'" + +#~ msgid "can't convert to int" +#~ msgstr "ne peut convertir en entier 'int'" + +#~ msgid "object '%s' is not a tuple or list" +#~ msgstr "l'objet '%s' n'est pas un tuple ou une liste" + +#~ msgid "object of type '%s' has no len()" +#~ msgstr "l'objet de type '%s' n'a pas de len()" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "'pop' d'une entrée PulseIn vide" + +#~ msgid "pop from an empty set" +#~ msgstr "'pop' d'un ensemble set vide" + +#~ msgid "pop from empty list" +#~ msgstr "'pop' d'une liste vide" + +#~ msgid "popitem(): dictionary is empty" +#~ msgstr "popitem() : dictionnaire vide" + +#~ msgid "string index out of range" +#~ msgstr "index de chaîne hors gamme" + +#~ msgid "string indices must be integers, not %s" +#~ msgstr "" +#~ "les indices de chaîne de caractères doivent être des entiers, pas %s" + +#~ msgid "struct: index out of range" +#~ msgstr "struct : index hors limites" + +#~ msgid "unknown format code '%c' for object of type '%s'" +#~ msgstr "code de format '%c' inconnu pour un objet de type '%s'" + +#~ msgid "unsupported type for %q: '%s'" +#~ msgstr "type non supporté pour %q : '%s'" + +#~ msgid "unsupported types for %q: '%s', '%s'" +#~ msgstr "type non supporté pour %q : '%s', '%s'" + #~ msgid "'async for' or 'async with' outside async function" #~ msgstr "'async for' ou 'async with' sans fonction asynchrone extérieure" -#~ msgid "PulseOut not supported on this chip" -#~ msgstr "PulseOut non pris en charge sur cette puce" - #~ msgid "PulseIn not supported on this chip" #~ msgstr "PulseIn non pris en charge sur cette puce" diff --git a/locale/hi.po b/locale/hi.po index 79b974803..50a1887f6 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -65,12 +65,16 @@ msgstr "" msgid "%q in use" msgstr "" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "" #: py/obj.c -msgid "%q indices must be integers, not %s" +msgid "%q indices must be integers, not %q" msgstr "" #: shared-bindings/vectorio/Polygon.c @@ -109,6 +113,42 @@ msgstr "" msgid "'%q' argument required" msgstr "" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -159,48 +199,6 @@ msgstr "" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "" @@ -448,6 +446,10 @@ msgstr "" msgid "Buffer length must be a multiple of 512" msgstr "" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "" @@ -638,6 +640,10 @@ msgstr "" msgid "Could not restart PWM" msgstr "" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "" @@ -737,7 +743,7 @@ msgstr "" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "" @@ -820,6 +826,11 @@ msgstr "" msgid "File exists" msgstr "" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "" @@ -844,7 +855,7 @@ msgid "Group full" msgstr "" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "" @@ -860,6 +871,10 @@ msgstr "" msgid "I2C Init Error" msgstr "" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -905,6 +920,11 @@ msgstr "" msgid "Invalid %q pin" msgstr "" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "" @@ -917,24 +937,12 @@ msgstr "" msgid "Invalid DAC pin supplied" msgstr "" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "" @@ -1230,6 +1238,10 @@ msgstr "" msgid "Not playing" msgstr "" +#: main.c +msgid "Not running saved code.\n" +msgstr "" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1315,8 +1327,13 @@ msgstr "" msgid "Polygon needs at least 3 points" msgstr "" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" msgstr "" #: shared-bindings/_bleio/Adapter.c @@ -1331,6 +1348,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "" +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "" @@ -1391,11 +1412,7 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" +msgid "Running in safe mode! " msgstr "" #: shared-module/sdcardio/SDCard.c @@ -1407,6 +1424,16 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "" @@ -1756,8 +1783,7 @@ msgid "__init__() should return None" msgstr "" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" +msgid "__init__() should return None, not '%q'" msgstr "" #: py/objobject.c @@ -1911,7 +1937,7 @@ msgstr "" msgid "bytes value out of range" msgstr "" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "" @@ -1943,47 +1969,17 @@ msgstr "" msgid "can't assign to expression" msgstr "" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" msgstr "" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "" - #: py/obj.c -msgid "can't convert to float" -msgstr "" - -#: py/obj.c -msgid "can't convert to int" +msgid "can't convert to %q" msgstr "" #: py/objstr.c @@ -2391,7 +2387,7 @@ msgstr "" msgid "function missing required positional argument #%d" msgstr "" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "" @@ -2440,10 +2436,7 @@ msgstr "" msgid "index is out of bounds" msgstr "" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "" @@ -2799,8 +2792,7 @@ msgid "number of points must be at least 2" msgstr "" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" +msgid "object '%q' is not a tuple or list" msgstr "" #: py/obj.c @@ -2836,8 +2828,7 @@ msgid "object not iterable" msgstr "" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" +msgid "object of type '%q' has no len()" msgstr "" #: py/obj.c @@ -2930,20 +2921,9 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" msgstr "" #: py/objint_mpz.c @@ -3100,12 +3080,7 @@ msgid "stream operation not supported" msgstr "" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" +msgid "string indices must be integers, not %q" msgstr "" #: py/stream.c @@ -3117,10 +3092,6 @@ msgid "struct: cannot index" msgstr "" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "" @@ -3189,7 +3160,7 @@ msgstr "" msgid "trapz is defined for 1D arrays of equal length" msgstr "" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "" @@ -3197,10 +3168,6 @@ msgstr "" msgid "tuple/list has wrong length" msgstr "" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3256,8 +3223,7 @@ msgid "unknown conversion specifier %c" msgstr "" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" +msgid "unknown format code '%c' for object of type '%q'" msgstr "" #: py/compile.c @@ -3297,7 +3263,7 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "" #: py/runtime.c -msgid "unsupported type for %q: '%s'" +msgid "unsupported type for %q: '%q'" msgstr "" #: py/runtime.c @@ -3305,7 +3271,7 @@ msgid "unsupported type for operator" msgstr "" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" msgstr "" #: py/objint.c diff --git a/locale/it_IT.po b/locale/it_IT.po index 3862d382f..9635220af 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: 2018-10-02 16:27+0200\n" "Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n" "Language-Team: \n" @@ -64,13 +64,17 @@ msgstr "" msgid "%q in use" msgstr "%q in uso" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "indice %q fuori intervallo" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "gli indici %q devono essere interi, non %s" +msgid "%q indices must be integers, not %q" +msgstr "" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -110,6 +114,42 @@ msgstr "%q() prende %d argomenti posizionali ma ne sono stati forniti %d" msgid "'%q' argument required" msgstr "'%q' argomento richiesto" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -160,48 +200,6 @@ msgstr "intero '%s' non è nell'intervallo %d..%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "intero '%s' non è nell'intervallo %d..%d" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "oggeto '%s' non supporta assengnamento di item" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "oggeto '%s' non supporta eliminamento di item" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "l'oggetto '%s' non ha l'attributo '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "l'oggetto '%s' non è un iteratore" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "oggeto '%s' non è chiamabile" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "l'oggetto '%s' non è iterabile" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "oggeto '%s' non è " - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "aligniamento '=' non è permesso per il specificatore formato string" @@ -453,6 +451,10 @@ msgstr "" msgid "Buffer length must be a multiple of 512" msgstr "" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "Il buffer deve essere lungo almeno 1" @@ -647,6 +649,10 @@ msgstr "" msgid "Could not restart PWM" msgstr "" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "" @@ -748,7 +754,7 @@ msgstr "Errore nella regex" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Atteso un %q" @@ -833,6 +839,11 @@ msgstr "" msgid "File exists" msgstr "File esistente" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "" @@ -857,7 +868,7 @@ msgid "Group full" msgstr "Gruppo pieno" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "" @@ -873,6 +884,10 @@ msgstr "operazione I/O su file chiuso" msgid "I2C Init Error" msgstr "" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -920,6 +935,11 @@ msgstr "" msgid "Invalid %q pin" msgstr "Pin %q non valido" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "" @@ -932,24 +952,12 @@ msgstr "File BMP non valido" msgid "Invalid DAC pin supplied" msgstr "" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "Frequenza PWM non valida" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "Argomento non valido" @@ -1250,6 +1258,10 @@ msgstr "Impossible connettersi all'AP" msgid "Not playing" msgstr "In pausa" +#: main.c +msgid "Not running saved code.\n" +msgstr "" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1344,8 +1356,13 @@ msgstr "Imposssibile rimontare il filesystem" msgid "Polygon needs at least 3 points" msgstr "" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" msgstr "" #: shared-bindings/_bleio/Adapter.c @@ -1361,6 +1378,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "" +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "" @@ -1422,12 +1443,8 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Modalità sicura in esecuzione! Auto-reload disattivato.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" -msgstr "Modalità sicura in esecuzione! Codice salvato non in esecuzione.\n" +msgid "Running in safe mode! " +msgstr "" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" @@ -1438,6 +1455,16 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "SDA o SCL necessitano un pull-up" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "" @@ -1791,9 +1818,8 @@ msgid "__init__() should return None" msgstr "__init__() deve ritornare None" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" -msgstr "__init__() deve ritornare None, non '%s'" +msgid "__init__() should return None, not '%q'" +msgstr "" #: py/objobject.c msgid "__new__ arg must be a user-type" @@ -1949,7 +1975,7 @@ msgstr "byte > 8 bit non supportati" msgid "bytes value out of range" msgstr "valore byte fuori intervallo" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "la calibrazione è fuori intervallo" @@ -1982,48 +2008,18 @@ msgstr "" msgid "can't assign to expression" msgstr "impossibile assegnare all'espressione" -#: py/obj.c -#, fuzzy, c-format -msgid "can't convert %s to complex" -msgstr "non è possibile convertire a complex" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "non è possibile convertire %s a float" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" -msgstr "non è possibile convertire %s a int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" +msgstr "" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "impossibile convertire l'oggetto '%q' implicitamente in %q" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "impossibile convertire NaN in int" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "impossible convertire indirizzo in int" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "impossibile convertire inf in int" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "non è possibile convertire a complex" - -#: py/obj.c -msgid "can't convert to float" -msgstr "non è possibile convertire a float" - #: py/obj.c -msgid "can't convert to int" -msgstr "non è possibile convertire a int" +msgid "can't convert to %q" +msgstr "" #: py/objstr.c msgid "can't convert to str implicitly" @@ -2436,7 +2432,7 @@ msgstr "argomento nominato '%q' mancante alla funzione" msgid "function missing required positional argument #%d" msgstr "mancante il #%d argomento posizonale obbligatorio della funzione" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "" @@ -2486,10 +2482,7 @@ msgstr "padding incorretto" msgid "index is out of bounds" msgstr "" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "indice fuori intervallo" @@ -2853,9 +2846,8 @@ msgid "number of points must be at least 2" msgstr "" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" -msgstr "oggetto '%s' non è una tupla o una lista" +msgid "object '%q' is not a tuple or list" +msgstr "" #: py/obj.c msgid "object does not support item assignment" @@ -2890,9 +2882,8 @@ msgid "object not iterable" msgstr "oggetto non iterabile" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" -msgstr "l'oggetto di tipo '%s' non implementa len()" +msgid "object of type '%q' has no len()" +msgstr "" #: py/obj.c msgid "object with buffer protocol required" @@ -2988,21 +2979,10 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "pop sun un PulseIn vuoto" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "pop da un set vuoto" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "pop da una lista vuota" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" -msgstr "popitem(): il dizionario è vuoto" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" +msgstr "" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" @@ -3161,13 +3141,8 @@ msgid "stream operation not supported" msgstr "operazione di stream non supportata" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "indice della stringa fuori intervallo" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" -msgstr "indici della stringa devono essere interi, non %s" +msgid "string indices must be integers, not %q" +msgstr "" #: py/stream.c msgid "string not supported; use bytes or bytearray" @@ -3178,10 +3153,6 @@ msgid "struct: cannot index" msgstr "struct: impossibile indicizzare" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "struct: indice fuori intervallo" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "struct: nessun campo" @@ -3251,7 +3222,7 @@ msgstr "troppi valori da scompattare (%d attesi)" msgid "trapz is defined for 1D arrays of equal length" msgstr "" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "indice della tupla fuori intervallo" @@ -3259,10 +3230,6 @@ msgstr "indice della tupla fuori intervallo" msgid "tuple/list has wrong length" msgstr "tupla/lista ha la lunghezza sbagliata" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3318,9 +3285,8 @@ msgid "unknown conversion specifier %c" msgstr "specificatore di conversione %s sconosciuto" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" -msgstr "codice di formattaione '%c' sconosciuto per oggetto di tipo '%s'" +msgid "unknown format code '%c' for object of type '%q'" +msgstr "" #: py/compile.c msgid "unknown type" @@ -3359,16 +3325,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "carattere di formattazione '%c' (0x%x) non supportato all indice %d" #: py/runtime.c -msgid "unsupported type for %q: '%s'" -msgstr "tipo non supportato per %q: '%s'" +msgid "unsupported type for %q: '%q'" +msgstr "" #: py/runtime.c msgid "unsupported type for operator" msgstr "tipo non supportato per l'operando" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" -msgstr "tipi non supportati per %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" +msgstr "" #: py/objint.c #, c-format @@ -3449,6 +3415,103 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "gli indici %q devono essere interi, non %s" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "oggeto '%s' non supporta assengnamento di item" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "oggeto '%s' non supporta eliminamento di item" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "l'oggetto '%s' non ha l'attributo '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "l'oggetto '%s' non è un iteratore" + +#~ msgid "'%s' object is not callable" +#~ msgstr "oggeto '%s' non è chiamabile" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "l'oggetto '%s' non è iterabile" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "oggeto '%s' non è " + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Modalità sicura in esecuzione! Auto-reload disattivato.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "Modalità sicura in esecuzione! Codice salvato non in esecuzione.\n" + +#~ msgid "__init__() should return None, not '%s'" +#~ msgstr "__init__() deve ritornare None, non '%s'" + +#, fuzzy +#~ msgid "can't convert %s to complex" +#~ msgstr "non è possibile convertire a complex" + +#~ msgid "can't convert %s to float" +#~ msgstr "non è possibile convertire %s a float" + +#~ msgid "can't convert %s to int" +#~ msgstr "non è possibile convertire %s a int" + +#~ msgid "can't convert NaN to int" +#~ msgstr "impossibile convertire NaN in int" + +#~ msgid "can't convert address to int" +#~ msgstr "impossible convertire indirizzo in int" + +#~ msgid "can't convert inf to int" +#~ msgstr "impossibile convertire inf in int" + +#~ msgid "can't convert to complex" +#~ msgstr "non è possibile convertire a complex" + +#~ msgid "can't convert to float" +#~ msgstr "non è possibile convertire a float" + +#~ msgid "can't convert to int" +#~ msgstr "non è possibile convertire a int" + +#~ msgid "object '%s' is not a tuple or list" +#~ msgstr "oggetto '%s' non è una tupla o una lista" + +#~ msgid "object of type '%s' has no len()" +#~ msgstr "l'oggetto di tipo '%s' non implementa len()" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "pop sun un PulseIn vuoto" + +#~ msgid "pop from an empty set" +#~ msgstr "pop da un set vuoto" + +#~ msgid "pop from empty list" +#~ msgstr "pop da una lista vuota" + +#~ msgid "popitem(): dictionary is empty" +#~ msgstr "popitem(): il dizionario è vuoto" + +#~ msgid "string index out of range" +#~ msgstr "indice della stringa fuori intervallo" + +#~ msgid "string indices must be integers, not %s" +#~ msgstr "indici della stringa devono essere interi, non %s" + +#~ msgid "struct: index out of range" +#~ msgstr "struct: indice fuori intervallo" + +#~ msgid "unknown format code '%c' for object of type '%s'" +#~ msgstr "codice di formattaione '%c' sconosciuto per oggetto di tipo '%s'" + +#~ msgid "unsupported type for %q: '%s'" +#~ msgstr "tipo non supportato per %q: '%s'" + +#~ msgid "unsupported types for %q: '%s', '%s'" +#~ msgstr "tipi non supportati per %q: '%s', '%s'" + #~ msgid "AP required" #~ msgstr "AP richiesto" diff --git a/locale/ja.po b/locale/ja.po index 9c027fc5a..7c3b42580 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-08-04 18:42-0500\n" -"PO-Revision-Date: 2020-08-10 16:59+0000\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" +"PO-Revision-Date: 2020-08-16 13:25+0000\n" "Last-Translator: Taku Fukada <naninunenor@gmail.com>\n" "Language-Team: none\n" "Language: ja\n" @@ -59,7 +59,7 @@ msgstr " 出力:\n" #: py/objstr.c #, c-format msgid "%%c requires int or char" -msgstr "%%c ã«ã¯intã¾ãŸã¯charãŒå¿…è¦ã§ã™" +msgstr "%%c ã«ã¯intã¾ãŸã¯charãŒå¿…è¦" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format @@ -72,7 +72,7 @@ msgstr "" #: shared-bindings/microcontroller/Pin.c msgid "%q in use" -msgstr "%q ã¯ä½¿ç”¨ä¸ã§ã™" +msgstr "%qã¯ä½¿ç”¨ä¸" #: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c @@ -80,11 +80,11 @@ msgstr "%q ã¯ä½¿ç”¨ä¸ã§ã™" #: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c #: py/objstrunicode.c msgid "%q index out of range" -msgstr "%q インデックスã¯ç¯„囲外ã§ã™" +msgstr "%q インデックスã¯ç¯„囲外" #: py/obj.c msgid "%q indices must be integers, not %q" -msgstr "%q インデクスã¯ã€%qã§ãªãæ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "%qインデクスã¯ã€%qã§ãªãæ•´æ•°ãŒå¿…è¦ã§ã™" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -108,56 +108,56 @@ msgstr "%qã¯é•·ã•2ã®ã‚¿ãƒ—ルã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q pin invalid" -msgstr "%q ピンã¯ç„¡åйã§ã™" +msgstr "%q ピンã¯ç„¡åй" #: shared-bindings/fontio/BuiltinFont.c msgid "%q should be an int" -msgstr "%qã¯intåž‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "%qã¯intåž‹ãŒå¿…è¦" #: py/bc.c py/objnamedtuple.c #, fuzzy msgid "%q() takes %d positional arguments but %d were given" -msgstr "%q() 㯠%d個ã®ä½ç½®å¼•æ•° (positional arguments) ã‚’å—ã‘å–りã¾ã™ãŒã€%d 個ã—ã‹ä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“" +msgstr "%q()ã¯%d個ã®ä½ç½®å¼•æ•°ã‚’å—ã‘å–りã¾ã™ãŒã€%d個ã—ã‹ä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“" #: py/argcheck.c msgid "'%q' argument required" -msgstr "引数 '%q' ãŒå¿…è¦ã§ã™" +msgstr "引数'%q'ãŒå¿…è¦" #: py/runtime.c msgid "'%q' object cannot assign attribute '%q'" -msgstr "オブジェクト '%q' ã«ã¯å±žæ€§ '%q' を割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“" +msgstr "オブジェクト'%q'ã«å±žæ€§'%q'を割り当ã¦ã‚‰ã‚Œã¾ã›ã‚“" #: py/proto.c msgid "'%q' object does not support '%q'" -msgstr "オブジェクト '%q' 㯠'%q' をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" +msgstr "オブジェクト'%q'ã¯'%q'をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" #: py/obj.c msgid "'%q' object does not support item assignment" -msgstr "オブジェクト '%q' ã¯è¦ç´ ã®ä»£å…¥ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" +msgstr "オブジェクト'%q'ã¯è¦ç´ ã®ä»£å…¥ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" #: py/obj.c msgid "'%q' object does not support item deletion" -msgstr "オブジェクト '%q' ã¯è¦ç´ ã®å‰Šé™¤ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" +msgstr "オブジェクト'%q'ã¯è¦ç´ ã®å‰Šé™¤ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" #: py/runtime.c msgid "'%q' object has no attribute '%q'" -msgstr "オブジェクト '%q' ã¯å±žæ€§ '%q' ã‚’æŒã¡ã¾ã›ã‚“" +msgstr "オブジェクト'%q'ã«å±žæ€§'%q'ã¯ã‚りã¾ã›ã‚“" #: py/runtime.c msgid "'%q' object is not an iterator" -msgstr "オブジェクト '%q' ã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã§ã¯ã‚りã¾ã›ã‚“" +msgstr "オブジェクト'%q'ã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã§ã¯ã‚りã¾ã›ã‚“" #: py/objtype.c py/runtime.c msgid "'%q' object is not callable" -msgstr "オブジェクト '%q' ã¯å‘¼ã³å‡ºã—å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“" +msgstr "オブジェクト'%q'ã¯å‘¼ã³å‡ºã—å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“" #: py/runtime.c msgid "'%q' object is not iterable" -msgstr "オブジェクト '%q' ã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ãƒˆå¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“" +msgstr "オブジェクト'%q'ã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ãƒˆå¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“" #: py/obj.c msgid "'%q' object is not subscriptable" -msgstr "オブジェクト '%q' ã¯è¦ç´ ã®å–å¾—ãŒã§ãã¾ã›ã‚“" +msgstr "オブジェクト'%q'ã¯è¦ç´ ã®å–å¾—ãŒã§ãã¾ã›ã‚“" #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format @@ -223,11 +223,11 @@ msgstr "" #: py/compile.c msgid "'await' outside function" -msgstr "関数外ã§ã® 'await'" +msgstr "関数外ã§ã®await" #: py/compile.c msgid "'await', 'async for' or 'async with' outside async function" -msgstr "async関数外ã§ã® 'await', 'async for', 'async with'" +msgstr "async関数外ã§ã®await, async for, async with" #: py/compile.c msgid "'break' outside loop" @@ -275,12 +275,12 @@ msgstr "" #: py/modbuiltins.c msgid "3-arg pow() not supported" -msgstr "引数3ã¤ã® pow() ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "引数3ã¤ã®pow()ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" #: ports/atmel-samd/common-hal/countio/Counter.c #: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c msgid "A hardware interrupt channel is already in use" -msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢å‰²ã‚Šè¾¼ã¿ãƒãƒ£ãƒãƒ«ã¯ä½¿ç”¨ä¸ã§ã™" +msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢å‰²ã‚Šè¾¼ã¿ãƒãƒ£ãƒãƒ«ã¯ä½¿ç”¨ä¸" #: shared-bindings/_bleio/Address.c #, c-format @@ -293,27 +293,27 @@ msgstr "" #: ports/nrf/common-hal/busio/I2C.c msgid "All I2C peripherals are in use" -msgstr "ã™ã¹ã¦ã®I2C周辺機器ãŒä½¿ç”¨ä¸ã§ã™" +msgstr "å…¨ã¦ã®I2C周辺機器ãŒä½¿ç”¨ä¸" #: ports/nrf/common-hal/busio/SPI.c msgid "All SPI peripherals are in use" -msgstr "ã™ã¹ã¦ã®SPI周辺機器ãŒä½¿ç”¨ä¸ã§ã™" +msgstr "å…¨ã¦ã®SPI周辺機器ãŒä½¿ç”¨ä¸" #: ports/nrf/common-hal/busio/UART.c msgid "All UART peripherals are in use" -msgstr "ã™ã¹ã¦ã®UART周辺機器ãŒä½¿ç”¨ä¸ã§ã™" +msgstr "å…¨ã¦ã®UART周辺機器ãŒä½¿ç”¨ä¸" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" -msgstr "ã™ã¹ã¦ã®ã‚¤ãƒ™ãƒ³ãƒˆãƒãƒ£ãƒãƒ«ãŒä½¿ç”¨ä¸ã§ã™" +msgstr "å…¨ã¦ã®ã‚¤ãƒ™ãƒ³ãƒˆãƒãƒ£ãƒãƒ«ãŒä½¿ç”¨ä¸" #: ports/atmel-samd/audio_dma.c ports/atmel-samd/common-hal/audiobusio/PDMIn.c msgid "All sync event channels in use" -msgstr "ã™ã¹ã¦ã®åŒæœŸã‚¤ãƒ™ãƒ³ãƒˆãƒãƒ£ãƒãƒ«ãŒä½¿ç”¨ä¸ã§ã™" +msgstr "å…¨ã¦ã®åŒæœŸã‚¤ãƒ™ãƒ³ãƒˆãƒãƒ£ãƒãƒ«ãŒä½¿ç”¨ä¸" #: shared-bindings/pulseio/PWMOut.c msgid "All timers for this pin are in use" -msgstr "ã“ã®ãƒ”ン用ã®ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒžãŒä½¿ç”¨ä¸ã§ã™" +msgstr "ã“ã®ãƒ”ン用ã®å…¨ã¦ã®ã‚¿ã‚¤ãƒžãŒä½¿ç”¨ä¸" #: ports/atmel-samd/common-hal/_pew/PewPew.c #: ports/atmel-samd/common-hal/audioio/AudioOut.c @@ -325,16 +325,16 @@ msgstr "ã“ã®ãƒ”ン用ã®ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒžãŒä½¿ç”¨ä¸ã§ã™" #: ports/nrf/common-hal/pulseio/PulseIn.c ports/nrf/peripherals/nrf/timers.c #: ports/stm/peripherals/timers.c shared-bindings/pulseio/PWMOut.c msgid "All timers in use" -msgstr "ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒžãƒ¼ãŒä½¿ç”¨ä¸ã§ã™" +msgstr "å…¨ã¦ã®ã‚¿ã‚¤ãƒžãƒ¼ãŒä½¿ç”¨ä¸" #: ports/nrf/common-hal/_bleio/Adapter.c msgid "Already advertising." -msgstr "ã™ã§ã«ã‚¢ãƒ‰ãƒãƒ¼ã‚¿ã‚¤ã‚ºä¸ã§ã™ã€‚" +msgstr "ã™ã§ã«ã‚¢ãƒ‰ãƒãƒ¼ã‚¿ã‚¤ã‚ºä¸" #: shared-module/memorymonitor/AllocationAlarm.c #: shared-module/memorymonitor/AllocationSize.c msgid "Already running" -msgstr "ã™ã§ã«å®Ÿè¡Œä¸ã§ã™" +msgstr "ã™ã§ã«å®Ÿè¡Œä¸" #: ports/cxd56/common-hal/analogio/AnalogIn.c msgid "AnalogIn not supported on given pin" @@ -348,7 +348,7 @@ msgstr "AnalogOut機能ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" #: shared-bindings/analogio/AnalogOut.c msgid "AnalogOut is only 16 bits. Value must be less than 65536." -msgstr "AnalogOutã¯16ビットã§ã™ã€‚値㯠65536 以下ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +msgstr "AnalogOutã¯16ビットã§ã™ã€‚値ã¯65536以下ã«ã—ã¦ãã ã•ã„" #: ports/atmel-samd/common-hal/analogio/AnalogOut.c msgid "AnalogOut not supported on given pin" @@ -357,7 +357,7 @@ msgstr "指定ã®ãƒ”ンã¯AnalogOutをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" #: ports/atmel-samd/common-hal/pulseio/PulseOut.c #: ports/cxd56/common-hal/pulseio/PulseOut.c msgid "Another send is already active" -msgstr "ä»–ã®sendãŒã™ã§ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã™" +msgstr "ä»–ã®sendãŒã™ã§ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–" #: shared-bindings/pulseio/PulseOut.c msgid "Array must contain halfwords (type 'H')" @@ -365,7 +365,7 @@ msgstr "array ã®ã‚¿ã‚¤ãƒ—ã¯16ビット ('H') ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: shared-bindings/nvm/ByteArray.c msgid "Array values should be single bytes." -msgstr "Arrayã®å„値ã¯1ãƒã‚¤ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +msgstr "Arrayã®å„値ã¯1ãƒã‚¤ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: shared-bindings/microcontroller/Pin.c msgid "At most %d %q may be specified (not %d)" @@ -378,7 +378,7 @@ msgstr "%d 個ã®ãƒ–ãƒãƒƒã‚¯ã®ç¢ºä¿ã‚’試ã¿ã¾ã—ãŸ" #: supervisor/shared/safe_mode.c msgid "Attempted heap allocation when MicroPython VM not running." -msgstr "MicroPython VMã®éžå®Ÿè¡Œæ™‚ã«ãƒ’ープã®ç¢ºä¿ã‚’試ã¿ã¾ã—ãŸã€‚" +msgstr "MicroPython VMã®éžå®Ÿè¡Œæ™‚ã«ãƒ’ープã®ç¢ºä¿ã‚’試ã¿ã¾ã—ãŸ" #: main.c msgid "Auto-reload is off.\n" @@ -388,12 +388,14 @@ msgstr "オートリãƒãƒ¼ãƒ‰ã¯ã‚ªãƒ•ã§ã™ã€‚\n" msgid "" "Auto-reload is on. Simply save files over USB to run them or enter REPL to " "disable.\n" -msgstr "オートリãƒãƒ¼ãƒ‰ãŒæœ‰åйã§ã™ã€‚ファイルをUSB経由ã§ä¿å˜ã™ã‚‹ã ã‘ã§å®Ÿè¡Œã§ãã¾ã™ã€‚REPLã«å…¥ã‚‹ã¨ç„¡åŠ¹åŒ–ã—ã¾ã™ã€‚\n" +msgstr "" +"オートリãƒãƒ¼ãƒ‰ãŒã‚ªãƒ³ã§ã™ã€‚ファイルをUSB経由ã§ä¿å˜ã™ã‚‹ã ã‘ã§å®Ÿè¡Œã§ãã¾ã™ã€‚REPL" +"ã«å…¥ã‚‹ã¨ç„¡åŠ¹åŒ–ã—ã¾ã™ã€‚\n" #: shared-module/displayio/Display.c #: shared-module/framebufferio/FramebufferDisplay.c msgid "Below minimum frame rate" -msgstr "最低ã®ãƒ•レームレート未満ã§ã™" +msgstr "最低ã®ãƒ•レームレート未満" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c msgid "Bit clock and word select must share a clock unit" @@ -401,15 +403,15 @@ msgstr "" #: shared-bindings/audiobusio/PDMIn.c msgid "Bit depth must be multiple of 8." -msgstr "ビット深度ã¯8ã®å€æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +msgstr "ビット深度ã¯8ã®å€æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "Both RX and TX required for flow control" -msgstr "RXã¨TXã®ä¸¡æ–¹ãŒãƒ•ãƒãƒ¼åˆ¶å¾¡ã®ãŸã‚ã«å¿…è¦ã§ã™" +msgstr "フãƒãƒ¼åˆ¶å¾¡ã®ãŸã‚ã«RXã¨TXã®ä¸¡æ–¹ãŒå¿…è¦" #: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c msgid "Both pins must support hardware interrupts" -msgstr "両方ã®ãƒ”ンãŒãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢å‰²ã‚Šè¾¼ã¿ã‚’サãƒãƒ¼ãƒˆã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "両方ã®ãƒ”ンã«ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢å‰²ã‚Šè¾¼ã¿å¯¾å¿œãŒå¿…è¦" #: shared-bindings/displayio/Display.c #: shared-bindings/framebufferio/FramebufferDisplay.c @@ -434,12 +436,12 @@ msgstr "" #: shared-module/usb_hid/Device.c #, c-format msgid "Buffer incorrect size. Should be %d bytes." -msgstr "ãƒãƒƒãƒ•ã‚¡ã‚µã‚¤ã‚ºãŒæ£ã—ãã‚りã¾ã›ã‚“。%dãƒã‚¤ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +msgstr "ãƒãƒƒãƒ•ã‚¡ã‚µã‚¤ã‚ºãŒæ£ã—ãã‚りã¾ã›ã‚“。%dãƒã‚¤ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: shared-bindings/displayio/Display.c #: shared-bindings/framebufferio/FramebufferDisplay.c msgid "Buffer is not a bytearray." -msgstr "ãƒãƒƒãƒ•ァ㌠bytearray ã§ã¯ã‚りã¾ã›ã‚“。" +msgstr "ãƒãƒƒãƒ•ァ㌠bytearray ã§ã¯ã‚りã¾ã›ã‚“" #: shared-bindings/displayio/Display.c #: shared-bindings/framebufferio/FramebufferDisplay.c @@ -449,13 +451,17 @@ msgstr "ãƒãƒƒãƒ•ã‚¡ãŒå°ã•ã™ãŽã¾ã™" #: ports/nrf/common-hal/audiopwmio/PWMAudioOut.c #, c-format msgid "Buffer length %d too big. It must be less than %d" -msgstr "ãƒãƒƒãƒ•ã‚¡é•· %d ã¯å¤§ãã™ãŽã¾ã™ã€‚%d 以下ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "ãƒãƒƒãƒ•ã‚¡é•·%dã¯å¤§ãã™ãŽã¾ã™ã€‚%d以下ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: ports/atmel-samd/common-hal/sdioio/SDCard.c #: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "ãƒãƒƒãƒ•ã‚¡é•·ã¯512ã®å€æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "ãƒãƒƒãƒ•ã‚¡é•·ã¯å°‘ãªãã¨ã‚‚1以上ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" @@ -473,15 +479,15 @@ msgstr "" #: ports/nrf/common-hal/displayio/ParallelBus.c #, c-format msgid "Bus pin %d is already in use" -msgstr "Busピン %d ã¯ã™ã§ã«ä½¿ç”¨ä¸ã§ã™" +msgstr "Busピン%dã¯ã™ã§ã«ä½¿ç”¨ä¸" #: shared-bindings/_bleio/UUID.c msgid "Byte buffer must be 16 bytes." -msgstr "ãƒã‚¤ãƒˆãƒãƒƒãƒ•ã‚¡ã¯16ãƒã‚¤ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +msgstr "ãƒãƒƒãƒ•ã‚¡ã¯16ãƒã‚¤ãƒˆã«ã—ã¦ãã ã•ã„" #: shared-bindings/nvm/ByteArray.c msgid "Bytes must be between 0 and 255." -msgstr "ãƒã‚¤ãƒˆå€¤ã¯0ã‹ã‚‰255ã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +msgstr "ãƒã‚¤ãƒˆå€¤ã¯0ã‹ã‚‰255ã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: shared-bindings/aesio/aes.c msgid "CBC blocks must be multiples of 16 bytes" @@ -489,7 +495,9 @@ msgstr "CBCブãƒãƒƒã‚¯ã¯16ãƒã‚¤ãƒˆã®æ•´æ•°å€ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: py/objtype.c msgid "Call super().__init__() before accessing native object." -msgstr "ãƒã‚¤ãƒ†ã‚£ãƒ–オブジェクトã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å‰ã« super().__init__() を呼ã³å‡ºã—ã¦ãã ã•ã„。" +msgstr "" +"ãƒã‚¤ãƒ†ã‚£ãƒ–オブジェクトã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹å‰ã«super().__init__()を呼ã³å‡ºã—ã¦ãã ã•" +"ã„" #: ports/nrf/common-hal/_bleio/Characteristic.c msgid "Can't set CCCD on local Characteristic" @@ -517,11 +525,11 @@ msgstr "" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "Cannot output both channels on the same pin" -msgstr "åŒã˜ãƒ”ン上ã®ä¸¡æ–¹ã®ãƒãƒ£ãƒãƒ«ã«å‡ºåŠ›ã§ãã¾ã›ã‚“" +msgstr "åŒã˜ãƒ”ン上ã®ä¸¡ãƒãƒ£ãƒãƒ«ã«å‡ºåŠ›ã§ãã¾ã›ã‚“" #: shared-module/bitbangio/SPI.c msgid "Cannot read without MISO pin." -msgstr "MISOピンãªã—ã§èªã¿è¾¼ã¿ã¯ã§ãã¾ã›ã‚“。" +msgstr "MISOピンãªã—ã§èªã¿è¾¼ã¿ã¯ã§ãã¾ã›ã‚“" #: shared-bindings/audiobusio/PDMIn.c msgid "Cannot record to a file" @@ -529,17 +537,17 @@ msgstr "ファイルã¸è¨˜éŒ²ã§ãã¾ã›ã‚“" #: shared-module/storage/__init__.c msgid "Cannot remount '/' when USB is active." -msgstr "USBãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæ™‚ã« '/' ã‚’å†ãƒžã‚¦ãƒ³ãƒˆã§ãã¾ã›ã‚“。" +msgstr "USBãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæ™‚ã« '/' ã‚’å†ãƒžã‚¦ãƒ³ãƒˆã§ãã¾ã›ã‚“" #: ports/atmel-samd/common-hal/microcontroller/__init__.c #: ports/cxd56/common-hal/microcontroller/__init__.c #: ports/mimxrt10xx/common-hal/microcontroller/__init__.c msgid "Cannot reset into bootloader because no bootloader is present." -msgstr "ブートãƒãƒ¼ãƒ€ãŒå˜åœ¨ã—ãªã„ãŸã‚ブートãƒãƒ¼ãƒ€ã¸ã¨ãƒªã‚»ãƒƒãƒˆã§ãã¾ã›ã‚“。" +msgstr "ブートãƒãƒ¼ãƒ€ãŒå˜åœ¨ã—ãªã„ãŸã‚ブートãƒãƒ¼ãƒ€ã¸ã¨ãƒªã‚»ãƒƒãƒˆã§ãã¾ã›ã‚“" #: shared-bindings/digitalio/DigitalInOut.c msgid "Cannot set value when direction is input." -msgstr "æ–¹å‘ãŒINPUTã®ã¨ãã¯å€¤ã‚’è¨å®šã§ãã¾ã›ã‚“。" +msgstr "æ–¹å‘ãŒINPUTã®ã¨ãã¯å€¤ã‚’è¨å®šã§ãã¾ã›ã‚“" #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "Cannot specify RTS or CTS in RS485 mode" @@ -551,7 +559,7 @@ msgstr "sliceをサブクラス化ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" #: shared-module/bitbangio/SPI.c msgid "Cannot transfer without MOSI and MISO pins." -msgstr "MOSIピンã¨MISOピンãŒãªã‘れã°è»¢é€ã§ãã¾ã›ã‚“。" +msgstr "MOSIピンã¨MISOピンãªã—ã«è»¢é€ã§ãã¾ã›ã‚“" #: extmod/moductypes.c msgid "Cannot unambiguously get sizeof scalar" @@ -563,7 +571,7 @@ msgstr "使用ä¸ã®ã‚¿ã‚¤ãƒžãƒ¼ä¸Šã§å‘¨æ³¢æ•°ã‚’変ãˆã‚‰ã‚Œã¾ã›ã‚“" #: shared-module/bitbangio/SPI.c msgid "Cannot write without MOSI pin." -msgstr "MOSIピンãªã—ã«æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“。" +msgstr "MOSIピンãªã—ã«æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“" #: shared-bindings/_bleio/CharacteristicBuffer.c msgid "CharacteristicBuffer writing not provided" @@ -577,11 +585,13 @@ msgstr "CircuitPythonã®ã‚³ã‚¢ã‚³ãƒ¼ãƒ‰ãŒæ¿€ã—ãクラッシュã—ã¾ã—ãŸã€ msgid "" "CircuitPython is in safe mode because you pressed the reset button during " "boot. Press again to exit safe mode.\n" -msgstr "èµ·å‹•ä¸ã«ãƒªã‚»ãƒƒãƒˆãƒœã‚¿ãƒ³ã‚’押ã—ãŸãŸã‚CircuitPythonã¯ã‚»ãƒ¼ãƒ•モードã«ã„ã¾ã™ã€‚ã‚‚ã†ä¸€åº¦æŠ¼ã™ã¨ã‚»ãƒ¼ãƒ•モードを終了ã—ã¾ã™ã€‚\n" +msgstr "" +"èµ·å‹•ä¸ã«ãƒªã‚»ãƒƒãƒˆãƒœã‚¿ãƒ³ã‚’押ã—ãŸãŸã‚CircuitPythonã¯ã‚»ãƒ¼ãƒ•モードã«ã„ã¾ã™ã€‚ã‚‚ã†ä¸€" +"度押ã™ã¨ã‚»ãƒ¼ãƒ•モードを終了ã—ã¾ã™ã€‚\n" #: shared-module/bitbangio/SPI.c msgid "Clock pin init failed." -msgstr "クãƒãƒƒã‚¯ãƒ”ンã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" +msgstr "クãƒãƒƒã‚¯ãƒ”ンã®åˆæœŸåŒ–ã«å¤±æ•—" #: shared-module/bitbangio/I2C.c msgid "Clock stretch too long" @@ -589,7 +599,7 @@ msgstr "" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c msgid "Clock unit in use" -msgstr "クãƒãƒƒã‚¯ãƒ¦ãƒ‹ãƒƒãƒˆãŒä½¿ç”¨ä¸ã§ã™" +msgstr "クãƒãƒƒã‚¯ãƒ¦ãƒ‹ãƒƒãƒˆã¯ä½¿ç”¨ä¸" #: shared-bindings/_pew/PewPew.c msgid "Column entry must be digitalio.DigitalInOut" @@ -604,7 +614,7 @@ msgstr "commandã¯0ã‹ã‚‰255ã®é–“ã®æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" msgid "" "Connection has been disconnected and can no longer be used. Create a new " "connection." -msgstr "接続ã¯åˆ‡æ–済ã¿ã®ãŸã‚ã‚‚ã†ä½¿ãˆã¾ã›ã‚“。新ãŸãªæŽ¥ç¶šã‚’作æˆã—ã¦ãã ã•ã„。" +msgstr "接続ã¯åˆ‡æ–済ã¿ã®ãŸã‚ã‚‚ã†ä½¿ãˆã¾ã›ã‚“。新ãŸãªæŽ¥ç¶šã‚’作æˆã—ã¦ãã ã•ã„" #: py/persistentcode.c msgid "Corrupt .mpy file" @@ -616,65 +626,69 @@ msgstr "ç ´æã—㟠raw code" #: ports/cxd56/common-hal/gnss/GNSS.c msgid "Could not initialize GNSS" -msgstr "GNSSã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "GNSSã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“" #: ports/cxd56/common-hal/sdioio/SDCard.c msgid "Could not initialize SDCard" -msgstr "SDã‚«ãƒ¼ãƒ‰ã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "SDã‚«ãƒ¼ãƒ‰ã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“" #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" -msgstr "UARTã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "UARTã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not initialize channel" -msgstr "ãƒãƒ£ãƒãƒ«ã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "ãƒãƒ£ãƒãƒ«ã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not initialize timer" -msgstr "ã‚¿ã‚¤ãƒžãƒ¼ã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "ã‚¿ã‚¤ãƒžãƒ¼ã‚’åˆæœŸåŒ–ã§ãã¾ã›ã‚“" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not re-init channel" -msgstr "ãƒãƒ£ãƒãƒ«ã‚’å†åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "ãƒãƒ£ãƒãƒ«ã‚’å†åˆæœŸåŒ–ã§ãã¾ã›ã‚“" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not re-init timer" -msgstr "タイマーをå†åˆæœŸåŒ–ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "タイマーをå†åˆæœŸåŒ–ã§ãã¾ã›ã‚“" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not restart PWM" -msgstr "PWMã‚’å†ã‚¹ã‚¿ãƒ¼ãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "PWMã‚’å†ã‚¹ã‚¿ãƒ¼ãƒˆã§ãã¾ã›ã‚“" + +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" -msgstr "PWMをスタートã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "PWMをスタートã§ãã¾ã›ã‚“" #: ports/stm/common-hal/busio/UART.c msgid "Could not start interrupt, RX busy" -msgstr "割り込ã¿ã‚’スタートã§ãã¾ã›ã‚“ã§ã—ãŸã€‚RXビジー" +msgstr "割り込ã¿ã‚’スタートã§ãã¾ã›ã‚“。RXビジー" #: shared-module/audiomp3/MP3Decoder.c msgid "Couldn't allocate decoder" -msgstr "デコーダを確ä¿ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "デコーダを確ä¿ã§ãã¾ã›ã‚“" #: shared-module/audiocore/WaveFile.c shared-module/audiomixer/Mixer.c #: shared-module/audiomp3/MP3Decoder.c msgid "Couldn't allocate first buffer" -msgstr "1ã¤ç›®ã®ãƒãƒƒãƒ•ァを確ä¿ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "1ã¤ç›®ã®ãƒãƒƒãƒ•ァを確ä¿ã§ãã¾ã›ã‚“" #: shared-module/audiomp3/MP3Decoder.c msgid "Couldn't allocate input buffer" -msgstr "入力ãƒãƒƒãƒ•ァを確ä¿ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "入力ãƒãƒƒãƒ•ァを確ä¿ã§ãã¾ã›ã‚“" #: shared-module/audiocore/WaveFile.c shared-module/audiomixer/Mixer.c #: shared-module/audiomp3/MP3Decoder.c msgid "Couldn't allocate second buffer" -msgstr "2ã¤ç›®ã®ãƒãƒƒãƒ•ァを確ä¿ã§ãã¾ã›ã‚“ã§ã—ãŸ" +msgstr "2ã¤ç›®ã®ãƒãƒƒãƒ•ァを確ä¿ã§ãã¾ã›ã‚“" #: supervisor/shared/safe_mode.c msgid "Crash into the HardFault_Handler." -msgstr "クラッシュã—㦠HardFault_Handler ã«å…¥ã‚Šã¾ã—ãŸã€‚" +msgstr "クラッシュã—ã¦HardFault_Handlerã«å…¥ã‚Šã¾ã—ãŸ" #: ports/stm/common-hal/analogio/AnalogOut.c msgid "DAC Channel Init Error" @@ -686,7 +700,7 @@ msgstr "DACデãƒã‚¤ã‚¹åˆæœŸåŒ–エラー" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "DAC already in use" -msgstr "DACã¯ã™ã§ã«ä½¿ç”¨ä¸ã§ã™" +msgstr "DACã¯ã™ã§ã«ä½¿ç”¨ä¸" #: ports/atmel-samd/common-hal/displayio/ParallelBus.c #: ports/nrf/common-hal/displayio/ParallelBus.c @@ -716,17 +730,17 @@ msgstr "指定ã•れãŸãƒ”ンã¯DigitalInOutをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" #: shared-bindings/displayio/Display.c #: shared-bindings/framebufferio/FramebufferDisplay.c msgid "Display must have a 16 bit colorspace." -msgstr "ディスプレイã¯16ビット色空間をæŒãŸãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +msgstr "ディスプレイã«ã¯16ビット色空間ãŒå¿…è¦" #: shared-bindings/displayio/Display.c #: shared-bindings/displayio/EPaperDisplay.c #: shared-bindings/framebufferio/FramebufferDisplay.c msgid "Display rotation must be in 90 degree increments" -msgstr "ディスプレイã®å›žè»¢ã¯90åº¦ã®æ•´æ•°å€ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "ディスプレイã®å›žè»¢ã¯90度ã®å€æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: shared-bindings/digitalio/DigitalInOut.c msgid "Drive mode not used when direction is input." -msgstr "æ–¹å‘ãŒINPUTã®ã¨ãドライブモードã¯ä½¿ã‚れã¾ã›ã‚“。" +msgstr "æ–¹å‘ãŒINPUTã®ã¨ãドライブモードã¯ä½¿ã‚れã¾ã›ã‚“" #: shared-bindings/aesio/aes.c msgid "ECB only operates on 16 bytes at a time" @@ -745,7 +759,7 @@ msgstr "æ£è¦è¡¨ç¾ã«ã‚¨ãƒ©ãƒ¼ãŒã‚りã¾ã™" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "" @@ -783,16 +797,16 @@ msgstr "FFT㯠ndarray ã«å¯¾ã—ã¦ã®ã¿å®šç¾©ã•れã¦ã„ã¾ã™" #: shared-bindings/ps2io/Ps2.c msgid "Failed sending command." -msgstr "コマンドã®é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" +msgstr "コマンドã®é€ä¿¡ã«å¤±æ•—" #: ports/nrf/sd_mutex.c #, c-format msgid "Failed to acquire mutex, err 0x%04x" -msgstr "ミューテックスã®å–å¾—ã«å¤±æ•—ã—ã¾ã—ãŸã€‚エラー 0x%04x" +msgstr "ミューテックスã®å–å¾—ã«å¤±æ•—。エラー 0x%04x" #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c msgid "Failed to allocate RX buffer" -msgstr "RXãƒãƒƒãƒ•ã‚¡ã®ç¢ºä¿ã«å¤±æ•—ã—ã¾ã—ãŸ" +msgstr "RXãƒãƒƒãƒ•ã‚¡ã®ç¢ºä¿ã«å¤±æ•—" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/pulseio/PulseIn.c @@ -801,7 +815,7 @@ msgstr "RXãƒãƒƒãƒ•ã‚¡ã®ç¢ºä¿ã«å¤±æ•—ã—ã¾ã—ãŸ" #: ports/stm/common-hal/pulseio/PulseIn.c #, c-format msgid "Failed to allocate RX buffer of %d bytes" -msgstr "%d ãƒã‚¤ãƒˆã®RXãƒãƒƒãƒ•ã‚¡ã®ç¢ºä¿ã«å¤±æ•—ã—ã¾ã—ãŸ" +msgstr "%d ãƒã‚¤ãƒˆã®RXãƒãƒƒãƒ•ã‚¡ã®ç¢ºä¿ã«å¤±æ•—" #: ports/nrf/common-hal/_bleio/Adapter.c msgid "Failed to connect: internal error" @@ -813,20 +827,25 @@ msgstr "接続失敗: タイムアウト" #: shared-module/audiomp3/MP3Decoder.c msgid "Failed to parse MP3 file" -msgstr "MP3ファイルã®ãƒ‘ーズã«å¤±æ•—ã—ã¾ã—ãŸ" +msgstr "MP3ファイルã®ãƒ‘ーズã«å¤±æ•—" #: ports/nrf/sd_mutex.c #, c-format msgid "Failed to release mutex, err 0x%04x" -msgstr "ミューテックスã®é–‹æ”¾ã«å¤±æ•—ã—ã¾ã—ãŸã€‚エラー 0x%04x" +msgstr "ミューテックスã®é–‹æ”¾ã«å¤±æ•—。エラー 0x%04x" #: supervisor/shared/safe_mode.c msgid "Failed to write internal flash." -msgstr "å†…éƒ¨ãƒ•ãƒ©ãƒƒã‚·ãƒ¥ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" +msgstr "å†…éƒ¨ãƒ•ãƒ©ãƒƒã‚·ãƒ¥ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—" #: py/moduerrno.c msgid "File exists" -msgstr "ファイルãŒå˜åœ¨ã—ã¾ã™ã€‚" +msgstr "ファイルãŒå˜åœ¨ã—ã¾ã™" + +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." @@ -834,7 +853,7 @@ msgstr "" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Frequency must match existing PWMOut using this timer" -msgstr "周波数ã¯ã€ã“ã®ã‚¿ã‚¤ãƒžãƒ¼ã‚’使ã£ã¦ã„ã‚‹æ—¢å˜ã®PWMOutã¨ä¸€è‡´ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "ã“ã®ã‚¿ã‚¤ãƒžãƒ¼ã‚’ä½¿ã†æ—¢å˜ã®PWMOutã¨å‘¨æ³¢æ•°ã‚’一致ã•ã›ã¦ãã ã•ã„" #: shared-bindings/bitbangio/I2C.c shared-bindings/bitbangio/SPI.c #: shared-bindings/busio/I2C.c shared-bindings/busio/SPI.c @@ -845,14 +864,14 @@ msgstr "" #: shared-bindings/displayio/EPaperDisplay.c #: shared-bindings/framebufferio/FramebufferDisplay.c msgid "Group already used" -msgstr "ã‚°ãƒ«ãƒ¼ãƒ—ã¯æ—¢ã«ä½¿ã‚れã¦ã„ã¾ã™" +msgstr "グループã¯ã™ã§ã«ä½¿ã‚れã¦ã„ã¾ã™" #: shared-module/displayio/Group.c msgid "Group full" -msgstr "グループãŒä¸€æ¯ã§ã™" +msgstr "グループãŒä¸€æ¯" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ“ジー。代替ã®ãƒ”ンを試ã—ã¦ãã ã•ã„" @@ -882,8 +901,8 @@ msgid "" "Incompatible .mpy file. Please update all .mpy files. See http://adafru.it/" "mpy-update for more info." msgstr "" -"éžäº’æ›ã® .mpy ファイルã§ã™ã€‚ã™ã¹ã¦ã® .mpy ファイルをアップデートã—ã¦ãã ã•ã„。詳細㯠http://adafru.it/mpy-update " -"ã‚’å‚照。" +"éžäº’æ›ã®.mpyファイルã§ã™ã€‚å…¨ã¦ã®.mpyファイルをアップデートã—ã¦ãã ã•ã„。詳細" +"㯠http://adafru.it/mpy-update ã‚’å‚ç…§" #: shared-bindings/_pew/PewPew.c msgid "Incorrect buffer size" @@ -895,11 +914,11 @@ msgstr "入力/出力エラー" #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" -msgstr "èªè¨¼ãŒä¸å分ã§ã™" +msgstr "èªè¨¼ãŒä¸å分" #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient encryption" -msgstr "æš—å·åŒ–ãŒä¸å分ã§ã™" +msgstr "æš—å·åŒ–ãŒä¸å分" #: ports/stm/common-hal/busio/UART.c msgid "Internal define error" @@ -917,7 +936,12 @@ msgstr "䏿£ãª %q" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c msgid "Invalid %q pin" -msgstr "䏿£ãª %q ピン" +msgstr "䏿£ãª%qピン" + +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" @@ -931,23 +955,11 @@ msgstr "䏿£ãªBMPファイル" msgid "Invalid DAC pin supplied" msgstr "無効ãªDACピンãŒä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "I2Cピンã®é¸æŠžãŒä¸æ£ã§ã™" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" -msgstr "無効ãªPWM周波数ã§ã™" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "SPIピンã®é¸æŠžãŒä¸æ£ã§ã™" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "UARTピンã®é¸æŠžãŒä¸æ£ã§ã™" +msgstr "無効ãªPWM周波数" #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" @@ -955,7 +967,7 @@ msgstr "䏿£ãªå¼•æ•°" #: shared-module/displayio/Bitmap.c msgid "Invalid bits per value" -msgstr "値ã”ã¨ã®ãƒ“ット数ãŒä¸æ£ã§ã™" +msgstr "値ã”ã¨ã®ãƒ“ット数ãŒä¸æ£" #: ports/nrf/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c msgid "Invalid buffer size" @@ -967,7 +979,7 @@ msgstr "䏿£ãªãƒã‚¤ãƒˆã‚ªãƒ¼ãƒ€ãƒ¼æ–‡å—列" #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Invalid capture period. Valid range: 1 - 500" -msgstr "䏿£ãªã‚ャプãƒãƒ£å‘¨æœŸã€‚有効ãªå‘¨æœŸ: 1 - 500" +msgstr "䏿£ãªã‚ャプãƒãƒ£å‘¨æœŸã€‚有効ãªå‘¨æœŸã¯1 - 500" #: shared-bindings/audiomixer/Mixer.c msgid "Invalid channel count" @@ -975,7 +987,7 @@ msgstr "䏿£ãªãƒãƒ£ãƒ³ãƒãƒ«æ•°" #: shared-bindings/digitalio/DigitalInOut.c msgid "Invalid direction." -msgstr "䏿£ãªæ–¹å‘。" +msgstr "䏿£ãªæ–¹å‘" #: shared-module/audiocore/WaveFile.c msgid "Invalid file" @@ -983,7 +995,7 @@ msgstr "䏿£ãªãƒ•ァイル" #: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" -msgstr "フォーマットãƒãƒ£ãƒ³ã‚¯ã®ã‚µã‚¤ã‚ºãŒä¸æ£ã§ã™" +msgstr "フォーマットãƒãƒ£ãƒ³ã‚¯ã®ã‚µã‚¤ã‚ºãŒä¸æ£" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Invalid frequency supplied" @@ -991,7 +1003,7 @@ msgstr "䏿£ãªå‘¨æ³¢æ•°ãŒä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" #: supervisor/shared/safe_mode.c msgid "Invalid memory access." -msgstr "䏿£ãªãƒ¡ãƒ¢ãƒªã‚¢ã‚¯ã‚»ã‚¹ã§ã™ã€‚" +msgstr "䏿£ãªãƒ¡ãƒ¢ãƒªã‚¢ã‚¯ã‚»ã‚¹" #: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c msgid "Invalid number of bits" @@ -1010,11 +1022,11 @@ msgstr "䏿£ãªãƒ”ン" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "Invalid pin for left channel" -msgstr "å·¦ãƒãƒ£ãƒãƒ«ã®ãƒ”ンãŒä¸æ£ã§ã™" +msgstr "å·¦ãƒãƒ£ãƒãƒ«ã®ãƒ”ンãŒä¸æ£" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "Invalid pin for right channel" -msgstr "å³ãƒãƒ£ãƒãƒ«ã®ãƒ”ンãŒä¸æ£ã§ã™" +msgstr "å³ãƒãƒ£ãƒãƒ«ã®ãƒ”ンãŒä¸æ£" #: ports/atmel-samd/common-hal/busio/I2C.c #: ports/atmel-samd/common-hal/busio/SPI.c @@ -1026,11 +1038,11 @@ msgstr "å³ãƒãƒ£ãƒãƒ«ã®ãƒ”ンãŒä¸æ£ã§ã™" #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" -msgstr "ピンãŒä¸æ£ã§ã™" +msgstr "ピンãŒä¸æ£" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Invalid pins for PWMOut" -msgstr "PWMOutã®ãƒ”ンãŒä¸æ£ã§ã™" +msgstr "PWMOutã®ãƒ”ンãŒä¸æ£" #: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c #: shared-bindings/displayio/FourWire.c @@ -1059,7 +1071,7 @@ msgstr "䏿£ãªãƒœã‚¤ã‚¹æ•°" #: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" -msgstr "䏿£ãªWaveファイルã§ã™" +msgstr "䏿£ãªWaveファイル" #: ports/stm/common-hal/busio/UART.c msgid "Invalid word/bit length" @@ -1071,19 +1083,19 @@ msgstr "Keyã®é•·ã•ã¯ã€16, 24, 32ãƒã‚¤ãƒˆã®ã„ãšã‚Œã‹ã§ãªã‘れã°ãªã‚ #: py/compile.c msgid "LHS of keyword arg must be an id" -msgstr "ã‚ーワード引数ã®å·¦è¾ºã¯idã§ã™" +msgstr "ã‚ーワード引数ã®å·¦è¾ºã«ã¯è˜åˆ¥åãŒå¿…è¦" #: shared-module/displayio/Group.c msgid "Layer already in a group." -msgstr "レイヤーã¯ã™ã§ã«ã‚°ãƒ«ãƒ¼ãƒ—ã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" +msgstr "レイヤーã¯ã™ã§ã«ã‚°ãƒ«ãƒ¼ãƒ—ã«å«ã¾ã‚Œã¦ã„ã¾ã™" #: shared-module/displayio/Group.c msgid "Layer must be a Group or TileGrid subclass." -msgstr "レイヤーã¯Groupã‹TileGridã®ã‚µãƒ–クラスã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +msgstr "レイヤーã¯Groupã‹TileGridã®ã‚µãƒ–クラスã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: py/objslice.c msgid "Length must be an int" -msgstr "Lengthã¯intåž‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "é•·ã•ã«ã¯æ•´æ•°ãŒå¿…è¦" #: py/objslice.c msgid "Length must be non-negative" @@ -1091,11 +1103,11 @@ msgstr "Lengthã¯éžè² æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: shared-module/bitbangio/SPI.c msgid "MISO pin init failed." -msgstr "MISOピンã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" +msgstr "MISOピンã®åˆæœŸåŒ–ã«å¤±æ•—" #: shared-module/bitbangio/SPI.c msgid "MOSI pin init failed." -msgstr "MOSIピンã®åˆæœŸåŒ–ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" +msgstr "MOSIピンã®åˆæœŸåŒ–ã«å¤±æ•—" #: shared-module/displayio/Shape.c #, c-format @@ -1104,11 +1116,11 @@ msgstr "" #: supervisor/shared/safe_mode.c msgid "MicroPython NLR jump failed. Likely memory corruption." -msgstr "MicroPythonã®NLRジャンプã«å¤±æ•—ã—ã¾ã—ãŸã€‚ãƒ¡ãƒ¢ãƒªç ´å£Šã‹ã‚‚ã—れã¾ã›ã‚“。" +msgstr "MicroPythonã®NLRジャンプã«å¤±æ•—ã€‚ãƒ¡ãƒ¢ãƒªç ´å£Šã®å¯èƒ½æ€§ã‚り" #: supervisor/shared/safe_mode.c msgid "MicroPython fatal error." -msgstr "MicroPythonã®è‡´å‘½çš„エラーã§ã™ã€‚" +msgstr "MicroPythonã®è‡´å‘½çš„エラー" #: shared-bindings/audiobusio/PDMIn.c msgid "Microphone startup delay must be in range 0.0 to 1.0" @@ -1120,20 +1132,20 @@ msgstr "MISOã¾ãŸã¯MOSIピンãŒã‚りã¾ã›ã‚“" #: shared-bindings/displayio/Group.c msgid "Must be a %q subclass." -msgstr "%q ã®ã‚µãƒ–クラスã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +msgstr "%q ã®ã‚µãƒ–クラスã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/SPI.c msgid "Must provide MISO or MOSI pin" -msgstr "MISOピンã¾ãŸã¯MOSIピンãŒå¿…è¦ã§ã™" +msgstr "MISOピンã¾ãŸã¯MOSIピンãŒå¿…è¦" #: ports/stm/common-hal/busio/SPI.c msgid "Must provide SCK pin" -msgstr "SCKピンãŒå¿…è¦ã§ã™" +msgstr "SCKピンãŒå¿…è¦" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" -msgstr "%d個ã§ãªãã€6ã®å€æ•°å€‹ã®rgbピンを使ã‚ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "%d個ã§ãªã6ã®å€æ•°å€‹ã®rgbピンを使ã£ã¦ãã ã•ã„" #: py/parse.c msgid "Name too long" @@ -1195,7 +1207,7 @@ msgstr "ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ä¹±æ•°ãŒåˆ©ç”¨ã§ãã¾ã›ã‚“" #: ports/atmel-samd/common-hal/ps2io/Ps2.c msgid "No hardware support on clk pin" -msgstr "clkピン上ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚µãƒãƒ¼ãƒˆãŒã‚りã¾ã›ã‚“" +msgstr "clkピン上ã«ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã‚µãƒãƒ¼ãƒˆãŒã‚りã¾ã›ã‚“" #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c #: ports/atmel-samd/common-hal/pulseio/PulseIn.c @@ -1208,11 +1220,11 @@ msgstr "ã‚ãƒ¼ãŒæŒ‡å®šã•れã¦ã„ã¾ã›ã‚“" #: shared-bindings/time/__init__.c msgid "No long integer support" -msgstr "long integer ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "long integerサãƒãƒ¼ãƒˆãŒã‚りã¾ã›ã‚“" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "No more timers available on this pin." -msgstr "ã“ã®ãƒ”ンã«ã¯åˆ©ç”¨å¯èƒ½ãªã‚¿ã‚¤ãƒžãƒ¼ãŒã‚‚ã†ã‚りã¾ã›ã‚“。" +msgstr "ã“ã®ãƒ”ンã«åˆ©ç”¨å¯èƒ½ãªã‚¿ã‚¤ãƒžãƒ¼ãŒã‚‚ã†ã‚りã¾ã›ã‚“" #: shared-module/touchio/TouchIn.c msgid "No pulldown on pin; 1Mohm recommended" @@ -1228,7 +1240,7 @@ msgstr "指定ã•れãŸãƒ•ァイル/ディレクトリã¯ã‚りã¾ã›ã‚“" #: shared-module/rgbmatrix/RGBMatrix.c msgid "No timer available" -msgstr "タイマーãŒåˆ©ç”¨ã§ãã¾ã›ã‚“" +msgstr "利用ã§ãるタイマーãªã—" #: supervisor/shared/safe_mode.c msgid "Nordic Soft Device failure assertion." @@ -1242,7 +1254,7 @@ msgstr "接続ã•れã¦ã„ã¾ã›ã‚“" #: shared-bindings/audiobusio/I2SOut.c shared-bindings/audioio/AudioOut.c #: shared-bindings/audiopwmio/PWMAudioOut.c msgid "Not playing" -msgstr "å†ç”Ÿä¸ã§ã¯ã‚りã¾ã›ã‚“" +msgstr "å†ç”Ÿä¸ã—ã¦ã„ã¾ã›ã‚“" #: main.c msgid "Not running saved code.\n" @@ -1251,7 +1263,9 @@ msgstr "ä¿å˜ã•れãŸã‚³ãƒ¼ãƒ‰ã¯å®Ÿè¡Œã—ã¦ã„ã¾ã›ã‚“。\n" #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." -msgstr "オブジェクトã¯è§£ä½“済ã¿ã§ã‚‚ã†ä½¿ã‚れã¦ã„ã¾ã›ã‚“。新ãŸãªã‚ªãƒ–ジェクトを作æˆã—ã¦ãã ã•ã„。" +msgstr "" +"オブジェクトã¯è§£ä½“済ã¿ã§ã‚‚ã†ä½¿ã‚れã¦ã„ã¾ã›ã‚“。新ãŸãªã‚ªãƒ–ジェクトを作æˆã—ã¦ã" +"ã ã•ã„" #: ports/nrf/common-hal/busio/UART.c msgid "Odd parity is not supported" @@ -1259,7 +1273,7 @@ msgstr "奇数パリティã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c msgid "Only 8 or 16 bit mono with " -msgstr "8ã¾ãŸã¯16ビット㮠" +msgstr "8ã¾ãŸã¯16ビットã®" #: shared-module/displayio/OnDiskBitmap.c #, c-format @@ -1276,17 +1290,18 @@ msgstr "" #: shared-bindings/audiobusio/PDMIn.c msgid "Oversample must be multiple of 8." -msgstr "オーãƒãƒ¼ã‚µãƒ³ãƒ—ルã¯8ã®å€æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。" +msgstr "オーãƒãƒ¼ã‚µãƒ³ãƒ—ルã¯8ã®å€æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: shared-bindings/pulseio/PWMOut.c msgid "" "PWM duty_cycle must be between 0 and 65535 inclusive (16 bit resolution)" -msgstr "PWMã® duty_cycle 値㯠0 ã‹ã‚‰ 65535 ã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“(16ビット解åƒåº¦ï¼‰" +msgstr "" +"PWMã® duty_cycle 値㯠0 ã‹ã‚‰ 65535 ã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“(16ビット解åƒåº¦ï¼‰" #: shared-bindings/pulseio/PWMOut.c msgid "" "PWM frequency not writable when variable_frequency is False on construction." -msgstr "PWM周波数ã¯ã€ç”Ÿæˆæ™‚ã® variable_frequency ㌠False ã®å ´åˆã€æ›¸ãæ›ãˆã‚‰ã‚Œã¾ã›ã‚“。" +msgstr "PWM周波数ã¯ã€ç”Ÿæˆæ™‚ã®variable_frequencyãŒFalseã®ã¨ãæ›¸ãæ›ãˆä¸å¯" #: ports/mimxrt10xx/common-hal/displayio/ParallelBus.c #: ports/stm/common-hal/displayio/ParallelBus.c @@ -1307,7 +1322,7 @@ msgstr "ピンã«ADCã®èƒ½åŠ›ãŒã‚りã¾ã›ã‚“" #: shared-bindings/digitalio/DigitalInOut.c msgid "Pin is input only" -msgstr "ピンã¯å…¥åŠ›å°‚ç”¨ã§ã™" +msgstr "ピンã¯å…¥åŠ›å°‚ç”¨" #: ports/atmel-samd/common-hal/countio/Counter.c msgid "Pin must support hardware interrupts" @@ -1331,7 +1346,16 @@ msgstr "" #: shared-module/vectorio/Polygon.c msgid "Polygon needs at least 3 points" -msgstr "ãƒãƒªã‚´ãƒ³ã«ã¯å°‘ãªãã¨ã‚‚3ã¤ã®ç‚¹ãŒå¿…è¦ã§ã™" +msgstr "ãƒãƒªã‚´ãƒ³ã«ã¯å°‘ãªãã¨ã‚‚3ã¤ã®ç‚¹ãŒå¿…è¦" + +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" +msgstr "" #: shared-bindings/_bleio/Adapter.c msgid "Prefix buffer must be on the heap" @@ -1340,11 +1364,15 @@ msgstr "Prefixãƒãƒƒãƒ•ã‚¡ã¯ãƒ’ープ上ã«ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: main.c #, fuzzy msgid "Press any key to enter the REPL. Use CTRL-D to reload." -msgstr "何らã‹ã®ã‚ーを押ã™ã¨REPLã«å…¥ã‚Šã¾ã™ã€‚CTRL-Dã§ãƒªãƒãƒ¼ãƒ‰ã—ã¾ã™ã€‚" +msgstr "何らã‹ã®ã‚ーを押ã™ã¨REPLã«å…¥ã‚Šã¾ã™ã€‚CTRL-Dã§ãƒªãƒãƒ¼ãƒ‰ã—ã¾ã™" #: shared-bindings/digitalio/DigitalInOut.c msgid "Pull not used when direction is output." -msgstr "出力方å‘ãŒOutputã®ã¨ãPullã¯ä½¿ã‚れã¾ã›ã‚“。" +msgstr "æ–¹å‘ãŒoutputã®ã¨ãpullã¯ä½¿ã‚れã¾ã›ã‚“" + +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "" #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" @@ -1361,7 +1389,7 @@ msgstr "" #: ports/cxd56/common-hal/rtc/RTC.c ports/mimxrt10xx/common-hal/rtc/RTC.c #: ports/nrf/common-hal/rtc/RTC.c msgid "RTC calibration is not supported on this board" -msgstr "RTCã®ã‚ャリブレーションã¯ã“ã®ãƒœãƒ¼ãƒ‰ã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "ã“ã®ãƒœãƒ¼ãƒ‰ã¯RTCã®ã‚ャリブレーションã«éžå¯¾å¿œ" #: shared-bindings/time/__init__.c msgid "RTC is not supported on this board" @@ -1370,7 +1398,7 @@ msgstr "ã“ã®ãƒœãƒ¼ãƒ‰ã§ã¯RTCãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c #: ports/nrf/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c msgid "RTS/CTS/RS485 Not yet supported on this device" -msgstr "RTS/CTS/RS485 ã¯ã¾ã ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã§ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "RTS/CTS/RS485ã¯ã“ã®ãƒ‡ãƒã‚¤ã‚¹ã§ã¯æœªã‚µãƒãƒ¼ãƒˆ" #: ports/stm/common-hal/os/__init__.c msgid "Random number generation error" @@ -1391,15 +1419,15 @@ msgstr "èªã¿è¾¼ã¿å°‚用ã®ã‚ªãƒ–ジェクト" #: shared-bindings/displayio/EPaperDisplay.c msgid "Refresh too soon" -msgstr "ãƒªãƒ•ãƒ¬ãƒƒã‚·ãƒ¥ãŒæ—©ã™ãŽã§ã™" +msgstr "ãƒªãƒ•ãƒ¬ãƒƒã‚·ãƒ¥ãŒæ—©ã™ãŽã¾ã™" #: shared-bindings/aesio/aes.c msgid "Requested AES mode is unsupported" -msgstr "è¦æ±‚ã•れãŸAESモードã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "è¦æ±‚ã®AESモードã¯éžã‚µãƒãƒ¼ãƒˆ" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "Right channel unsupported" -msgstr "å³ãƒãƒ£ãƒãƒ«ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "å³ãƒãƒ£ãƒãƒ«ã¯éžã‚µãƒãƒ¼ãƒˆ" #: shared-bindings/_pew/PewPew.c msgid "Row entry must be digitalio.DigitalInOut" @@ -1407,16 +1435,26 @@ msgstr "Rowã®å„è¦ç´ 㯠digitalio.DigitalInOut ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“ #: main.c msgid "Running in safe mode! " -msgstr "セーフモードã§å®Ÿè¡Œä¸ã§ã™ï¼ " +msgstr "セーフモードã§å®Ÿè¡Œä¸ï¼ " #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" -msgstr "SDカードã®CSDフォーマットã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "SDカードã®CSDフォーマットã¯éžã‚µãƒãƒ¼ãƒˆ" #: ports/atmel-samd/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/I2C.c ports/nrf/common-hal/busio/I2C.c msgid "SDA or SCL needs a pull up" -msgstr "SDAã¨SCLã¯ãƒ—ルアップãŒå¿…è¦ã§ã™" +msgstr "SDAã¨SCLã«ãƒ—ルアップãŒå¿…è¦" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" @@ -1433,15 +1471,15 @@ msgstr "ã‚µãƒ³ãƒ—ãƒ«ãƒ¬ãƒ¼ãƒˆã¯æ£æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: ports/atmel-samd/common-hal/audioio/AudioOut.c #, c-format msgid "Sample rate too high. It must be less than %d" -msgstr "サンプルレートãŒé«˜ã™ãŽã§ã™ã€‚%d 以下ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "サンプルレートã¯%d以下ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: ports/nrf/common-hal/_bleio/Adapter.c msgid "Scan already in progess. Stop with stop_scan." -msgstr "スã‚ャンãŒã™ã§ã«é€²è¡Œä¸ã§ã™ã€‚stop_scanã§åœæ¢ã—ã¦ãã ã•ã„。" +msgstr "スã‚ャンã¯ã™ã§ã«é€²è¡Œä¸ã€‚stop_scanã§åœæ¢ã—ã¦ãã ã•ã„" #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "Selected CTS pin not valid" -msgstr "é¸æŠžã•れãŸCTSãƒ”ãƒ³ãŒæ£ã—ãã‚りã¾ã›ã‚“" +msgstr "é¸æŠžã•れãŸCTSピンãŒä¸æ£ã§ã™" #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "Selected RTS pin not valid" @@ -1450,11 +1488,11 @@ msgstr "é¸æŠžã•れãŸRTSãƒ”ãƒ³ãŒæ£ã—ãã‚りã¾ã›ã‚“" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c msgid "Serializer in use" -msgstr "シリアライザã¯ä½¿ç”¨ä¸ã§ã™" +msgstr "シリアライザã¯ä½¿ç”¨ä¸" #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." -msgstr "スライスã¨å€¤ã®é•·ã•ãŒä¸€è‡´ã—ã¾ã›ã‚“。" +msgstr "スライスã¨å€¤ã®é•·ã•ãŒä¸€è‡´ã—ã¾ã›ã‚“" #: shared-bindings/displayio/Bitmap.c shared-bindings/displayio/Group.c #: shared-bindings/displayio/TileGrid.c @@ -1473,7 +1511,7 @@ msgstr "" #: shared-bindings/supervisor/__init__.c msgid "Stack size must be at least 256" -msgstr "スタックサイズã¯å°‘ãªãã¨ã‚‚256以上ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "スタックサイズã¯å°‘ãªãã¨ã‚‚256以上ãŒå¿…è¦" #: shared-bindings/multiterminal/__init__.c msgid "Stream missing readinto() or write() method." @@ -1481,7 +1519,7 @@ msgstr "" #: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c msgid "Supply at least one UART pin" -msgstr "å°‘ãªãã¨ã‚‚1ã¤ã®UARTピンãŒå¿…è¦ã§ã™" +msgstr "å°‘ãªãã¨ã‚‚1ã¤ã®UARTピンãŒå¿…è¦" #: shared-bindings/gnss/GNSS.c msgid "System entry must be gnss.SatelliteSystem" @@ -1503,7 +1541,9 @@ msgstr "" msgid "" "The `microcontroller` module was used to boot into safe mode. Press reset to " "exit safe mode.\n" -msgstr "`microcontroller` モジュールãŒä½¿ã‚れã¦ã‚»ãƒ¼ãƒ•モードã§èµ·å‹•ã—ã¾ã—ãŸã€‚セーフモードを抜ã‘ã‚‹ã«ã¯ãƒªã‚»ãƒƒãƒˆã‚’押ã—ã¾ã™ã€‚\n" +msgstr "" +"`microcontroller` モジュールãŒä½¿ã‚れã¦ã‚»ãƒ¼ãƒ•モードã§èµ·å‹•ã—ã¾ã—ãŸã€‚セーフモー" +"ドを抜ã‘ã‚‹ã«ã¯ãƒªã‚»ãƒƒãƒˆã‚’押ã—ã¾ã™ã€‚\n" #: supervisor/shared/safe_mode.c #, fuzzy @@ -1512,12 +1552,13 @@ msgid "" "enough power for the whole circuit and press reset (after ejecting " "CIRCUITPY).\n" msgstr "" -"マイクãƒã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©ã®é›»åŠ›ãŒé™ä¸‹ã—ã¾ã—ãŸã€‚é›»æºãŒå›žè·¯å…¨ä½“ãŒæ±‚ã‚ã‚‹å分ãªé›»åŠ›ã‚’ä¾›çµ¦ã§ãã‚‹ã“ã¨ã‚’確èªã—ã¦ãƒªã‚»ãƒƒãƒˆã‚’押ã—ã¦ãã ã•ã„(CIRCUITPYã‚’å–り出ã—" -"ãŸå¾Œï¼‰ã€‚\n" +"マイクãƒã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©ã®é›»åŠ›ãŒé™ä¸‹ã—ã¾ã—ãŸã€‚é›»æºãŒå›žè·¯å…¨ä½“ãŒæ±‚ã‚ã‚‹å分ãªé›»åŠ›ã‚’" +"供給ã§ãã‚‹ã“ã¨ã‚’確èªã—ã¦ãƒªã‚»ãƒƒãƒˆã‚’押ã—ã¦ãã ã•ã„(CIRCUITPYã‚’å–り出ã—ãŸ" +"後)。\n" #: shared-module/audiomixer/MixerVoice.c msgid "The sample's bits_per_sample does not match the mixer's" -msgstr "サンプルã®ãƒ“ット数/サンプルãŒãƒŸã‚サーã®ãれã¨ä¸€è‡´ã—ã¾ã›ã‚“" +msgstr "サンプルã®bits_per_sampleãŒãƒŸã‚サーã®ãれã¨ä¸€è‡´ã—ã¾ã›ã‚“" #: shared-module/audiomixer/MixerVoice.c msgid "The sample's channel count does not match the mixer's" @@ -1529,7 +1570,7 @@ msgstr "" #: shared-module/audiomixer/MixerVoice.c msgid "The sample's signedness does not match the mixer's" -msgstr "サンプルã®ç¬¦å·ã®æœ‰ç„¡ãŒãƒŸã‚サーã®ãれã¨ä¸€è‡´ã—ã¾ã›ã‚“" +msgstr "サンプルã®ç¬¦å·æœ‰ç„¡ãŒãƒŸã‚サーã¨ä¸€è‡´ã—ã¾ã›ã‚“" #: shared-bindings/displayio/TileGrid.c msgid "Tile height must exactly divide bitmap height" @@ -1537,11 +1578,11 @@ msgstr "タイルã®é«˜ã•ã¯ãƒ“ットマップã®é«˜ã•を割り切れる値㧠#: shared-bindings/displayio/TileGrid.c shared-module/displayio/TileGrid.c msgid "Tile index out of bounds" -msgstr "タイルã®ã‚¤ãƒ³ãƒ‡ã‚¯ã‚¹ãŒç¯„囲外ã§ã™" +msgstr "タイルã®ã‚¤ãƒ³ãƒ‡ã‚¯ã‚¹ãŒç¯„囲外" #: shared-bindings/displayio/TileGrid.c msgid "Tile value out of bounds" -msgstr "タイルã®å€¤ãŒç¯„囲外ã§ã™" +msgstr "タイルã®å€¤ãŒç¯„囲外" #: shared-bindings/displayio/TileGrid.c msgid "Tile width must exactly divide bitmap width" @@ -1550,7 +1591,7 @@ msgstr "タイルã®å¹…ã¯ãƒ“ットマップã®å¹…を割り切れる値ã§ãªã‘ #: ports/nrf/common-hal/_bleio/Adapter.c #, c-format msgid "Timeout is too long: Maximum timeout length is %d seconds" -msgstr "タイムアウトãŒé•·ã™ãŽã¾ã™ã€‚最大ã®ã‚¿ã‚¤ãƒ アウト長㯠%d ç§’ã§ã™" +msgstr "タイムアウトãŒé•·ã™ãŽã€‚最大ã®ã‚¿ã‚¤ãƒ アウト長ã¯%dç§’" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "" @@ -1559,7 +1600,7 @@ msgstr "" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c msgid "Too many channels in sample." -msgstr "サンプルä¸ã®ãƒãƒ£ãƒ³ãƒãƒ«æ•°ãŒå¤šã™ãŽã¾ã™ã€‚" +msgstr "サンプルã®ãƒãƒ£ãƒ³ãƒãƒ«æ•°ãŒå¤šã™ãŽã¾ã™" #: shared-module/displayio/__init__.c msgid "Too many display busses" @@ -1616,11 +1657,12 @@ msgstr "UUIDã®æ•´æ•°å€¤ã¯0ã‹ã‚‰0xffffã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: shared-bindings/_bleio/UUID.c msgid "UUID string not 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'" -msgstr "UUIDæ–‡å—列㌠'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' ã®å½¢å¼ã«ãªã£ã¦ã„ã¾ã›ã‚“" +msgstr "" +"UUIDæ–‡å—列㌠'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' ã®å½¢å¼ã«ãªã£ã¦ã„ã¾ã›ã‚“" #: shared-bindings/_bleio/UUID.c msgid "UUID value is not str, int or byte buffer" -msgstr "UUIDã®å€¤ãŒ str, int, buffer ã®ã„ãšã‚Œã§ã‚‚ã‚りã¾ã›ã‚“" +msgstr "UUIDã®å€¤ãŒstr, int, bufferã®ã„ãšã‚Œã§ã‚‚ã‚りã¾ã›ã‚“" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c #: ports/atmel-samd/common-hal/audioio/AudioOut.c @@ -1647,11 +1689,11 @@ msgstr "カラーパレットã®ãƒ‡ãƒ¼ã‚¿ã‚’èªã¿è¾¼ã‚ã¾ã›ã‚“" #: shared-bindings/nvm/ByteArray.c msgid "Unable to write to nvm." -msgstr "nvm ã«æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“。" +msgstr "nvm ã«æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“" #: ports/nrf/common-hal/_bleio/UUID.c msgid "Unexpected nrfx uuid type" -msgstr "想定ã•れã¦ã„ãªã„ nrfx UUID åž‹" +msgstr "想定ã•れã¦ã„ãªã„nrfx UUIDåž‹" #: ports/nrf/common-hal/_bleio/__init__.c #, c-format @@ -1660,7 +1702,7 @@ msgstr "䏿˜ŽãªGATTエラー: 0x%04x" #: supervisor/shared/safe_mode.c msgid "Unknown reason." -msgstr "ç†ç”±ä¸æ˜Žã€‚" +msgstr "ç†ç”±ä¸æ˜Ž" #: ports/nrf/common-hal/_bleio/__init__.c #, c-format @@ -1702,7 +1744,7 @@ msgstr "" #: shared-bindings/digitalio/DigitalInOut.c msgid "Unsupported pull value." -msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„ pull 値ã§ã™ã€‚" +msgstr "サãƒãƒ¼ãƒˆã•れã¦ã„ãªã„pull値" #: ports/nrf/common-hal/_bleio/Characteristic.c #: ports/nrf/common-hal/_bleio/Descriptor.c @@ -1736,7 +1778,7 @@ msgstr "WatchDogTimerã¯ç¾åœ¨å‹•作ã—ã¦ã„ã¾ã›ã‚“" #: shared-bindings/watchdog/WatchDogTimer.c msgid "WatchDogTimer.mode cannot be changed once set to WatchDogMode.RESET" -msgstr "WatchDogTimer.mode ã¯ä¸€åº¦ WatchDogMode.RESET ã«è¨å®šã•れるã¨å¤‰æ›´ã§ãã¾ã›ã‚“" +msgstr "WatchDogTimer.modeã¯ã„ã£ãŸã‚“WatchDogMode.RESETã«è¨å®šã™ã‚‹ã¨å¤‰æ›´ä¸å¯" #: shared-bindings/watchdog/WatchDogTimer.c msgid "WatchDogTimer.timeout must be greater than 0" @@ -1856,7 +1898,7 @@ msgstr "axis㯠-1, 0, 1 ã®ã„ãšã‚Œã‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: extmod/ulab/code/numerical/numerical.c msgid "axis must be None, 0, or 1" -msgstr "axis㯠None, 0, 1 ã®ã„ãšã‚Œã‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "axis㯠None, 0, 1 ã®ã„ãšã‚Œã‹ãŒå¿…è¦ã§ã™" #: py/builtinevex.c msgid "bad compile mode" @@ -1872,7 +1914,7 @@ msgstr "" #: py/binary.c msgid "bad typecode" -msgstr "typecodeãŒæ£ã—ãã‚りã¾ã›ã‚“" +msgstr "typecodeãŒä¸æ£" #: py/emitnative.c msgid "binary op %q not implemented" @@ -1960,6 +2002,7 @@ msgid "can't assign to expression" msgstr "" #: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c msgid "can't convert %q to %q" msgstr "" @@ -2055,7 +2098,7 @@ msgstr "" #: py/objtype.c msgid "cannot create instance" -msgstr "" +msgstr "インスタンスを作れã¾ã›ã‚“" #: py/runtime.c msgid "cannot import name %q" @@ -2221,7 +2264,7 @@ msgstr "" #: shared-bindings/displayio/Shape.c msgid "end_x should be an int" -msgstr "end_x 㯠int ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "end_xã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: ports/nrf/common-hal/busio/UART.c #, c-format @@ -2234,11 +2277,11 @@ msgstr "例外ã¯BaseExceptionã‹ã‚‰æ´¾ç”Ÿã—ã¦ã„ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: py/objstr.c msgid "expected ':' after format specifier" -msgstr "書å¼åŒ–指定åã®å¾Œã« ':' ãŒå¿…è¦ã§ã™" +msgstr "書å¼åŒ–指定åã®å¾Œã«':'ãŒå¿…è¦" #: py/obj.c msgid "expected tuple/list" -msgstr "タプルã¾ãŸã¯ãƒªã‚¹ãƒˆãŒå¿…è¦ã§ã™" +msgstr "タプルã¾ãŸã¯ãƒªã‚¹ãƒˆãŒå¿…è¦" #: py/modthread.c msgid "expecting a dict for keyword args" @@ -2246,23 +2289,23 @@ msgstr "" #: py/compile.c msgid "expecting an assembler instruction" -msgstr "アセンブラ命令ãŒå¿…è¦ã§ã™" +msgstr "アセンブラ命令ãŒå¿…è¦" #: py/compile.c msgid "expecting just a value for set" -msgstr "" +msgstr "setã«ã¯å€¤ã®ã¿ãŒå¿…è¦" #: py/compile.c msgid "expecting key:value for dict" -msgstr "dictã«ã¯ key:value ãŒå¿…è¦ã§ã™" +msgstr "dictã«ã¯ key:value ãŒå¿…è¦" #: py/argcheck.c msgid "extra keyword arguments given" -msgstr "余計ãªã‚ーワード引数ãŒä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" +msgstr "余分ãªã‚ーワード引数ãŒã‚りã¾ã™" #: py/argcheck.c msgid "extra positional arguments given" -msgstr "余分ãªä½ç½®å¼•æ•° (positional arguments) ãŒä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" +msgstr "余分ãªä½ç½®å¼•æ•°ãŒä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" #: py/parse.c msgid "f-string expression part cannot include a '#'" @@ -2278,7 +2321,7 @@ msgstr "" #: py/parse.c msgid "f-string: expecting '}'" -msgstr "f-string: '}' ãŒå¿…è¦ã§ã™" +msgstr "f-string: '}'ãŒå¿…è¦" #: py/parse.c msgid "f-string: single '}' is not allowed" @@ -2287,7 +2330,7 @@ msgstr "f-string: 1ã¤ã ã‘ã® '}' ã¯è¨±ã•れã¾ã›ã‚“" #: shared-bindings/audiocore/WaveFile.c shared-bindings/audiomp3/MP3Decoder.c #: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" -msgstr "fileã¯ãƒã‚¤ãƒˆãƒ¢ãƒ¼ãƒ‰ã§é–‹ã‹ã‚ŒãŸãƒ•ァイルã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "fileã«ã¯ãƒã‚¤ãƒˆãƒ¢ãƒ¼ãƒ‰ã§é–‹ã‹ã‚ŒãŸãƒ•ァイルãŒå¿…è¦" #: shared-bindings/storage/__init__.c msgid "filesystem must provide mount method" @@ -2307,7 +2350,7 @@ msgstr "1ã¤ç›®ã®å¼•æ•°ã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ãƒˆå¯èƒ½ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: extmod/ulab/code/vector/vectorise.c msgid "first argument must be an ndarray" -msgstr "1ã¤ç›®ã®å¼•数㯠ndarray ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "1ã¤ç›®ã®å¼•æ•°ã«ã¯ndarrayãŒå¿…è¦" #: py/objtype.c msgid "first argument to super() must be type" @@ -2366,11 +2409,11 @@ msgstr "" #: py/bc.c #, fuzzy msgid "function missing keyword-only argument" -msgstr "ã‚ーワード専用引数ãŒä¸è¶³ã—ã¦ã„ã¾ã™" +msgstr "ã‚ーワード専用引数ãŒè¶³ã‚Šã¾ã›ã‚“" #: py/bc.c msgid "function missing required keyword argument '%q'" -msgstr "å¿…é ˆã®ã‚ーワード引数 '%q' ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“" +msgstr "å¿…é ˆã®ã‚ーワード引数'%q'ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã›ã‚“" #: py/bc.c #, c-format @@ -2428,7 +2471,7 @@ msgstr "" #: py/obj.c msgid "index out of range" -msgstr "インデクスãŒç¯„囲外ã§ã™" +msgstr "インデクスãŒç¯„囲外" #: py/obj.c msgid "indices must be integers" @@ -2436,7 +2479,8 @@ msgstr "ã‚¤ãƒ³ãƒ‡ã‚¯ã‚¹ã¯æ•´æ•°ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: extmod/ulab/code/ndarray.c msgid "indices must be integers, slices, or Boolean lists" -msgstr "インデクスã¯ã€æ•´æ•°ã€ã‚¹ãƒ©ã‚¤ã‚¹ã€boolã®ãƒªã‚¹ãƒˆã®ã„ãšã‚Œã‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "" +"インデクスã¯ã€æ•´æ•°ã€ã‚¹ãƒ©ã‚¤ã‚¹ã€boolã®ãƒªã‚¹ãƒˆã®ã„ãšã‚Œã‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: extmod/ulab/code/approx/approx.c msgid "initial values must be iterable" @@ -2460,7 +2504,7 @@ msgstr "" #: extmod/ulab/code/linalg/linalg.c msgid "input matrix is asymmetric" -msgstr "入力行列ã¯éžå¯¾ç§°ã§ã™" +msgstr "入力行列ãŒéžå¯¾ç§°" #: extmod/ulab/code/linalg/linalg.c msgid "input matrix is singular" @@ -2484,7 +2528,7 @@ msgstr "int() ã®2番目ã®å¼•数㯠2 以上 36 以下ã§ãªã‘れã°ãªã‚Šã¾ã #: py/objstr.c msgid "integer required" -msgstr "æ•´æ•°ãŒå¿…è¦ã§ã™" +msgstr "æ•´æ•°ãŒå¿…è¦" #: extmod/ulab/code/approx/approx.c msgid "interp is defined for 1D arrays of equal length" @@ -2533,7 +2577,7 @@ msgstr "䏿£ãªæ§‹æ–‡" #: py/parsenum.c msgid "invalid syntax for integer" -msgstr "æ•´æ•°ã®æ§‹æ–‡ãŒä¸æ£ã§ã™" +msgstr "æ•´æ•°ã®æ§‹æ–‡ãŒä¸æ£" #: py/parsenum.c #, c-format @@ -2542,11 +2586,11 @@ msgstr "" #: py/parsenum.c msgid "invalid syntax for number" -msgstr "æ•°å—ã¨ã—ã¦ä¸æ£ãªæ§‹æ–‡ã§ã™" +msgstr "æ•°å—ã¨ã—ã¦ä¸æ£ãªæ§‹æ–‡" #: py/objtype.c msgid "issubclass() arg 1 must be a class" -msgstr "issubclass() ã®1ã¤ç›®ã®å¼•æ•°ã¯ã‚¯ãƒ©ã‚¹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "issubclass()ã®1ã¤ç›®ã®å¼•æ•°ã¯ã‚¯ãƒ©ã‚¹ã§ã™" #: py/objtype.c msgid "issubclass() arg 2 must be a class or a tuple of classes" @@ -2578,7 +2622,7 @@ msgstr "" #: py/compile.c msgid "label redefined" -msgstr "ラベルãŒå†å®šç¾©ã•れã¾ã—ãŸ" +msgstr "ラベルã®å†å®šç¾©" #: py/stream.c msgid "length argument not allowed for this type" @@ -2606,11 +2650,11 @@ msgstr "" #: py/objint.c msgid "long int not supported in this build" -msgstr "long int ã¯ã“ã®ãƒ“ルドã§ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "ã“ã®ãƒ“ルドã¯long intをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" #: py/parse.c msgid "malformed f-string" -msgstr "䏿£ãªå½¢å¼ã®f-stringã§ã™" +msgstr "䏿£ãªå½¢å¼ã®f-string" #: shared-bindings/_stage/Layer.c msgid "map buffer too small" @@ -2626,7 +2670,7 @@ msgstr "è¡Œåˆ—ã®æ¬¡å…ƒãŒä¸€è‡´ã—ã¾ã›ã‚“" #: extmod/ulab/code/linalg/linalg.c msgid "matrix is not positive definite" -msgstr "è¡Œåˆ—ãŒæ£å®šå€¤è¡Œåˆ—ã§ã¯ã‚りã¾ã›ã‚“" +msgstr "æ£å®šå€¤è¡Œåˆ—ã§ã¯ã‚りã¾ã›ã‚“" #: ports/nrf/common-hal/_bleio/Characteristic.c #: ports/nrf/common-hal/_bleio/Descriptor.c @@ -2665,7 +2709,7 @@ msgstr "" #: py/objtype.c msgid "multiple inheritance not supported" -msgstr "複数継承ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "複数継承ã¯éžã‚µãƒãƒ¼ãƒˆ" #: py/emitnative.c msgid "must raise an object" @@ -2677,11 +2721,11 @@ msgstr "" #: extmod/ulab/code/numerical/numerical.c msgid "n must be between 0, and 9" -msgstr "nã¯0ã‹ã‚‰9ã®é–“ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "nã¯0ã‹ã‚‰9ã¾ã§ã§ã™" #: py/runtime.c msgid "name '%q' is not defined" -msgstr "åå‰ '%q' ã¯å®šç¾©ã•れã¦ã„ã¾ã›ã‚“" +msgstr "åå‰'%q'ã¯å®šç¾©ã•れã¦ã„ã¾ã›ã‚“" #: py/runtime.c msgid "name not defined" @@ -2706,7 +2750,7 @@ msgstr "" #: py/objint_mpz.c py/runtime.c msgid "negative shift count" -msgstr "シフトカウントãŒè² æ•°ã§ã™" +msgstr "シフトカウントãŒè² æ•°" #: shared-module/sdcardio/SDCard.c msgid "no SD card" @@ -2783,7 +2827,7 @@ msgstr "" #: py/obj.c msgid "object '%q' is not a tuple or list" -msgstr "オブジェクト '%q' ãŒã‚¿ãƒ—ルã§ã‚‚リストã§ã‚‚ã‚りã¾ã›ã‚“" +msgstr "オブジェクト'%q'ãŒã‚¿ãƒ—ルやリストã§ã‚りã¾ã›ã‚“" #: py/obj.c msgid "object does not support item assignment" @@ -2807,7 +2851,7 @@ msgstr "オブジェクトã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿ã§ã¯ã‚りã¾ã›ã‚“" #: py/objtype.c py/runtime.c msgid "object not callable" -msgstr "オブジェクトã¯å‘¼ã³å‡ºã—å¯èƒ½ã§ã¯ã‚りã¾ã›ã‚“" +msgstr "オブジェクトã¯å‘¼ã³å‡ºã—å¯èƒ½ã§ã‚りã¾ã›ã‚“" #: py/sequence.c shared-bindings/displayio/Group.c msgid "object not in sequence" @@ -2815,7 +2859,7 @@ msgstr "" #: py/runtime.c msgid "object not iterable" -msgstr "" +msgstr "オブジェクトã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ãƒˆã§ãã¾ã›ã‚“" #: py/obj.c msgid "object of type '%q' has no len()" @@ -2827,7 +2871,7 @@ msgstr "" #: extmod/modubinascii.c msgid "odd-length string" -msgstr "å¥‡æ•°é•·ã®æ–‡å—列ã§ã™" +msgstr "å¥‡æ•°é•·ã®æ–‡å—列" #: py/objstr.c py/objstrunicode.c msgid "offset out of bounds" @@ -2861,12 +2905,12 @@ msgstr "ã“ã®æ¼”ç®—ã¯ä¸Žãˆã‚‰ã‚ŒãŸåž‹ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“" #: py/modbuiltins.c msgid "ord expects a character" -msgstr "ord() ã¯1æ–‡å—ã‚’å—ã‘å–りã¾ã™" +msgstr "ord()ã¯1æ–‡å—ã‚’å—ã‘å–りã¾ã™" #: py/modbuiltins.c #, c-format msgid "ord() expected a character, but string of length %d found" -msgstr "ord() ã¯1æ–‡å—ã‚’è¦æ±‚ã—ã¾ã™ãŒã€é•·ã• %d ã®æ–‡å—列ãŒä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" +msgstr "ord()ã¯1æ–‡å—ã‚’è¦æ±‚ã—ã¾ã™ãŒã€é•·ã• %d ã®æ–‡å—列ãŒä¸Žãˆã‚‰ã‚Œã¾ã—ãŸ" #: py/objint_mpz.c msgid "overflow converting long int to machine word" @@ -2878,7 +2922,7 @@ msgstr "パレットã®é•·ã•ã¯32ãƒã‚¤ãƒˆã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: shared-bindings/displayio/Palette.c msgid "palette_index should be an int" -msgstr "palette_index 㯠int ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "palette_indexã¯æ•´æ•°ã§ã™" #: py/compile.c msgid "parameter annotation must be an identifier" @@ -2918,11 +2962,11 @@ msgstr "" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" -msgstr "pow() ã®3番目ã®å¼•æ•°ã¯0ã«ã¯ã§ãã¾ã›ã‚“" +msgstr "pow()ã®3ã¤ç›®ã®å¼•æ•°ã¯0ã«ã§ãã¾ã›ã‚“" #: py/objint_mpz.c msgid "pow() with 3 arguments requires integers" -msgstr "pow() ã®3番目ã®å¼•æ•°ã«ã¯æ•´æ•°ãŒå¿…è¦ã§ã™" +msgstr "pow()ã®3番目ã®å¼•æ•°ã«ã¯æ•´æ•°ãŒå¿…è¦" #: extmod/modutimeq.c msgid "queue overflow" @@ -2943,7 +2987,7 @@ msgstr "相対インãƒãƒ¼ãƒˆ" #: py/obj.c #, c-format msgid "requested length %d but object has length %d" -msgstr "é•·ã• %d ãŒè¦æ±‚ã•れã¦ã„ã¾ã™ãŒã‚ªãƒ–ジェクトã®é•·ã•㯠%d ã§ã™" +msgstr "é•·ã•%dãŒå¿…è¦ã€‚オブジェクトã®é•·ã•ã¯%d" #: py/compile.c msgid "return annotation must be an identifier" @@ -2961,7 +3005,7 @@ msgstr "" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "rgb_pins[%d] is not on the same port as clock" -msgstr "rgb_pins[%d] ã¯ã‚¯ãƒãƒƒã‚¯ã¨åŒã˜ãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“" +msgstr "rgb_pins[%d]ã¯ã‚¯ãƒãƒƒã‚¯ã¨åŒã˜ãƒãƒ¼ãƒˆã§ã¯ã‚りã¾ã›ã‚“" #: extmod/ulab/code/ndarray.c msgid "right hand side must be an ndarray, or a scalar" @@ -2975,19 +3019,21 @@ msgstr "rsplit(None,n)" msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" -msgstr "sample_source ãƒãƒƒãƒ•ã‚¡ã¯ã€bytearray ã¾ãŸã¯ 'h', 'H', 'b', 'B'åž‹ã®arrayã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "" +"sample_source ãƒãƒƒãƒ•ã‚¡ã¯ã€bytearray ã¾ãŸã¯ 'h', 'H', 'b', 'B'åž‹ã®arrayã§ãªã‘" +"れã°ãªã‚Šã¾ã›ã‚“" #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c msgid "sampling rate out of range" -msgstr "サンプリングレートãŒç¯„囲外ã§ã™" +msgstr "サンプリングレートãŒç¯„囲外" #: py/modmicropython.c msgid "schedule stack full" -msgstr "スケジュールスタックãŒä¸€æ¯ã§ã™" +msgstr "スケジュールスタックãŒä¸€æ¯" #: lib/utils/pyexec.c py/builtinimport.c msgid "script compilation not supported" -msgstr "スクリプトã®ã‚³ãƒ³ãƒ‘イルã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "スクリプトã®ã‚³ãƒ³ãƒ‘イルã¯éžã‚µãƒãƒ¼ãƒˆ" #: extmod/ulab/code/ndarray.c msgid "shape must be a 2-tuple" @@ -2999,7 +3045,7 @@ msgstr "æ–‡å—列フォーマット指定åã§ç¬¦å·ã¯ä½¿ãˆã¾ã›ã‚“" #: py/objstr.c msgid "sign not allowed with integer format specifier 'c'" -msgstr "整数フォーマット指定å 'c' ã¨å…±ã«ç¬¦å·ã¯ä½¿ãˆã¾ã›ã‚“" +msgstr "整数フォーマット指定å'c'ã§ç¬¦å·ã¯ä½¿ãˆã¾ã›ã‚“" #: py/objstr.c msgid "single '}' encountered in format string" @@ -3059,7 +3105,7 @@ msgstr "" #: shared-bindings/busio/UART.c msgid "stop must be 1 or 2" -msgstr "stop ã¯1ã¾ãŸã¯2ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "stopã¯1ã¾ãŸã¯2ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: shared-bindings/random/__init__.c msgid "stop not reachable from start" @@ -3067,7 +3113,7 @@ msgstr "" #: py/stream.c msgid "stream operation not supported" -msgstr "ストリームæ“作ãŒã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" +msgstr "ストリームæ“作ã¯ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã›ã‚“" #: py/objstrunicode.c msgid "string indices must be integers, not %q" @@ -3103,11 +3149,11 @@ msgstr "uctypedãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ã‚¿ã®æ§‹æ–‡ã‚¨ãƒ©ãƒ¼" #: shared-bindings/touchio/TouchIn.c msgid "threshold must be in the range 0-65536" -msgstr "threshould 㯠0 ã‹ã‚‰ 65536 ã®ç¯„囲ã«ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "threshouldã¯0ã‹ã‚‰65536ã¾ã§ã§ã™" #: shared-bindings/time/__init__.c msgid "time.struct_time() takes a 9-sequence" -msgstr "time.struct_time() 㯠è¦ç´ 9個ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã‚’å—ã‘å–りã¾ã™" +msgstr "time.struct_time()ã¯9è¦ç´ ã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ã‚’å—ã‘å–りã¾ã™" #: ports/nrf/common-hal/watchdog/WatchDogTimer.c msgid "timeout duration exceeded the maximum supported value" @@ -3119,11 +3165,11 @@ msgstr "" #: shared-bindings/_bleio/CharacteristicBuffer.c msgid "timeout must be >= 0.0" -msgstr "timeout 㯠0.0 以上ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "timeoutã¯0.0以上ãŒå¿…è¦" #: shared-module/sdcardio/SDCard.c msgid "timeout waiting for v1 card" -msgstr "v1カードã®å¾…機ãŒã‚¿ã‚¤ãƒ アウトã—ã¾ã—ãŸ" +msgstr "v1カードã®å¾…機ãŒã‚¿ã‚¤ãƒ アウト" #: shared-module/sdcardio/SDCard.c msgid "timeout waiting for v2 card" @@ -3139,7 +3185,7 @@ msgstr "" #: extmod/ulab/code/ndarray.c msgid "too many indices" -msgstr "インデクスãŒå¤šã™ãŽã§ã™" +msgstr "インデクスãŒå¤šã™ãŽã¾ã™" #: py/runtime.c #, c-format @@ -3158,22 +3204,18 @@ msgstr "" msgid "tuple/list has wrong length" msgstr "タプル/リストã®é•·ã•ãŒæ£ã—ãã‚りã¾ã›ã‚“" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" -msgstr "tx 㨠rx ã®ä¸¡æ–¹ã‚’ None ã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" +msgstr "txã¨rxã®ä¸¡æ–¹ã‚’Noneã«ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“" #: py/objtype.c msgid "type '%q' is not an acceptable base type" -msgstr "åž‹ '%q' ã¯ãƒ™ãƒ¼ã‚¹åž‹ã¨ã—ã¦èªã‚られã¾ã›ã‚“" +msgstr "åž‹'%q'ã¯ãƒ™ãƒ¼ã‚¹åž‹ã¨ã—ã¦ä½¿ãˆã¾ã›ã‚“" #: py/objtype.c msgid "type is not an acceptable base type" -msgstr "" +msgstr "ã“ã®åž‹ã¯ãƒ™ãƒ¼ã‚¹åž‹ã«ã§ãã¾ã›ã‚“" #: py/runtime.c msgid "type object '%q' has no attribute '%q'" @@ -3189,7 +3231,7 @@ msgstr "" #: py/emitnative.c msgid "unary op %q not implemented" -msgstr "å˜é …演算å %q ã¯å®Ÿè£…ã•れã¦ã„ã¾ã›ã‚“" +msgstr "å˜é …演算å %q ã¯æœªå®Ÿè£…" #: py/parse.c msgid "unexpected indent" @@ -3201,7 +3243,7 @@ msgstr "" #: py/bc.c py/objnamedtuple.c msgid "unexpected keyword argument '%q'" -msgstr "ã‚ーワード引数 '%q' ã¯ä½¿ãˆã¾ã›ã‚“" +msgstr "ã‚ーワード引数'%q'ã¯ä½¿ãˆã¾ã›ã‚“" #: py/lexer.c msgid "unicode name escapes" @@ -3209,7 +3251,7 @@ msgstr "" #: py/parse.c msgid "unindent does not match any outer indentation level" -msgstr "インデントã®è§£é™¤ãŒã€å¤–å´ã®ã©ã®ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆãƒ¬ãƒ™ãƒ«ã«ã‚‚一致ã—ã¾ã›ã‚“" +msgstr "インデントã®è§£é™¤ãŒã€å¤–å´ã®ã©ã®ã‚¤ãƒ³ãƒ‡ãƒ³ãƒˆã«ã‚‚一致ã—ã¦ã„ã¾ã›ã‚“" #: py/objstr.c #, c-format @@ -3258,7 +3300,7 @@ msgstr "" #: py/runtime.c msgid "unsupported type for %q: '%q'" -msgstr "%q ãŒã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„åž‹: '%q'" +msgstr "%qãŒã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãªã„åž‹: '%q'" #: py/runtime.c msgid "unsupported type for operator" @@ -3295,7 +3337,7 @@ msgstr "引数ã®åž‹ãŒæ£ã—ãã‚りã¾ã›ã‚“" #: extmod/ulab/code/ndarray.c msgid "wrong index type" -msgstr "インデクスã®åž‹ãŒæ£ã—ãã‚りã¾ã›ã‚“" +msgstr "インデクスã®åž‹ãŒä¸æ£ã§ã™" #: extmod/ulab/code/vector/vectorise.c msgid "wrong input type" @@ -3335,12 +3377,21 @@ msgstr "" #: extmod/ulab/code/filter/filter.c msgid "zi must be an ndarray" -msgstr "zi ã¯ndarrayã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "ziã¯ndarrayã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" #: extmod/ulab/code/filter/filter.c msgid "zi must be of float type" -msgstr "zi ã¯floatåž‹ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“" +msgstr "ziã¯float値ãŒå¿…è¦ã§ã™" #: extmod/ulab/code/filter/filter.c msgid "zi must be of shape (n_section, 2)" msgstr "" + +#~ msgid "Invalid I2C pin selection" +#~ msgstr "I2Cピンã®é¸æŠžãŒä¸æ£ã§ã™" + +#~ msgid "Invalid SPI pin selection" +#~ msgstr "SPIピンã®é¸æŠžãŒä¸æ£ã§ã™" + +#~ msgid "Invalid UART pin selection" +#~ msgstr "UARTピンã®é¸æŠžãŒä¸æ£ã§ã™" diff --git a/locale/ko.po b/locale/ko.po index 51a523786..ecf539946 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: 2019-05-06 14:22-0700\n" "Last-Translator: \n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -66,13 +66,17 @@ msgstr "" msgid "%q in use" msgstr "%q 사용 중입니다" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "%q ì¸ë±ìФ 범위를 벗어났습니다" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "%q ì¸ë±ìŠ¤ëŠ” %s ê°€ 아닌 ì •ìˆ˜ 여야합니다" +msgid "%q indices must be integers, not %q" +msgstr "" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -110,6 +114,42 @@ msgstr "" msgid "'%q' argument required" msgstr "" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -160,48 +200,6 @@ msgstr "" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "'%s' ì„ ì§€ì •í• ìˆ˜ 없습니다" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "'%s' ì€ ì‚ì œí• ìˆ˜ 없습니다" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "'%s' ì€ ìˆ˜ì •í• ìˆ˜ 없습니다" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "'%s' ì„ ê²€ìƒ‰ í• ìˆ˜ 없습니다" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "'%s' ì€ ë³€ê²½í• ìˆ˜ 없습니다" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "" @@ -451,6 +449,10 @@ msgstr "" msgid "Buffer length must be a multiple of 512" msgstr "" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "ìž˜ëª»ëœ í¬ê¸°ì˜ 버í¼. >1 여야합니다" @@ -641,6 +643,10 @@ msgstr "" msgid "Could not restart PWM" msgstr "" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "" @@ -740,7 +746,7 @@ msgstr "Regexì— ì˜¤ë¥˜ê°€ 있습니다." #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "%q ì´ ì˜ˆìƒë˜ì—ˆìŠµë‹ˆë‹¤." @@ -823,6 +829,11 @@ msgstr "" msgid "File exists" msgstr "" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "" @@ -847,7 +858,7 @@ msgid "Group full" msgstr "" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "" @@ -863,6 +874,10 @@ msgstr "" msgid "I2C Init Error" msgstr "" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -908,6 +923,11 @@ msgstr "" msgid "Invalid %q pin" msgstr "" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "" @@ -920,24 +940,12 @@ msgstr "" msgid "Invalid DAC pin supplied" msgstr "" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "" @@ -1233,6 +1241,10 @@ msgstr "" msgid "Not playing" msgstr "" +#: main.c +msgid "Not running saved code.\n" +msgstr "" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1318,8 +1330,13 @@ msgstr "" msgid "Polygon needs at least 3 points" msgstr "" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" msgstr "" #: shared-bindings/_bleio/Adapter.c @@ -1334,6 +1351,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "" +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "" @@ -1394,11 +1415,7 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" +msgid "Running in safe mode! " msgstr "" #: shared-module/sdcardio/SDCard.c @@ -1410,6 +1427,16 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "" @@ -1760,8 +1787,7 @@ msgid "__init__() should return None" msgstr "" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" +msgid "__init__() should return None, not '%q'" msgstr "" #: py/objobject.c @@ -1915,7 +1941,7 @@ msgstr "" msgid "bytes value out of range" msgstr "" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "" @@ -1947,47 +1973,17 @@ msgstr "" msgid "can't assign to expression" msgstr "" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" msgstr "" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "" - -#: py/obj.c -msgid "can't convert to float" -msgstr "" - #: py/obj.c -msgid "can't convert to int" +msgid "can't convert to %q" msgstr "" #: py/objstr.c @@ -2395,7 +2391,7 @@ msgstr "" msgid "function missing required positional argument #%d" msgstr "" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "" @@ -2444,10 +2440,7 @@ msgstr "" msgid "index is out of bounds" msgstr "" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "" @@ -2803,8 +2796,7 @@ msgid "number of points must be at least 2" msgstr "" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" +msgid "object '%q' is not a tuple or list" msgstr "" #: py/obj.c @@ -2840,8 +2832,7 @@ msgid "object not iterable" msgstr "" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" +msgid "object of type '%q' has no len()" msgstr "" #: py/obj.c @@ -2934,20 +2925,9 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" msgstr "" #: py/objint_mpz.c @@ -3104,12 +3084,7 @@ msgid "stream operation not supported" msgstr "" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" +msgid "string indices must be integers, not %q" msgstr "" #: py/stream.c @@ -3121,10 +3096,6 @@ msgid "struct: cannot index" msgstr "" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "" @@ -3193,7 +3164,7 @@ msgstr "" msgid "trapz is defined for 1D arrays of equal length" msgstr "" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "" @@ -3201,10 +3172,6 @@ msgstr "" msgid "tuple/list has wrong length" msgstr "" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3260,8 +3227,7 @@ msgid "unknown conversion specifier %c" msgstr "" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" +msgid "unknown format code '%c' for object of type '%q'" msgstr "" #: py/compile.c @@ -3301,7 +3267,7 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "" #: py/runtime.c -msgid "unsupported type for %q: '%s'" +msgid "unsupported type for %q: '%q'" msgstr "" #: py/runtime.c @@ -3309,7 +3275,7 @@ msgid "unsupported type for operator" msgstr "" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" msgstr "" #: py/objint.c @@ -3389,6 +3355,24 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "%q ì¸ë±ìŠ¤ëŠ” %s ê°€ 아닌 ì •ìˆ˜ 여야합니다" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "'%s' ì„ ì§€ì •í• ìˆ˜ 없습니다" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "'%s' ì€ ì‚ì œí• ìˆ˜ 없습니다" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "'%s' ì€ ìˆ˜ì •í• ìˆ˜ 없습니다" + +#~ msgid "'%s' object is not callable" +#~ msgstr "'%s' ì„ ê²€ìƒ‰ í• ìˆ˜ 없습니다" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "'%s' ì€ ë³€ê²½í• ìˆ˜ 없습니다" + #~ msgid "Can't add services in Central mode" #~ msgstr "센트랄(중앙) 모드ì—서는 서비스를 추가 í• ìˆ˜ 없습니다" diff --git a/locale/nl.po b/locale/nl.po index 6240fce1b..313359668 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" -"PO-Revision-Date: 2020-07-27 21:27+0000\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" +"PO-Revision-Date: 2020-08-10 19:59+0000\n" "Last-Translator: _fonzlate <vooralfred@gmail.com>\n" "Language-Team: none\n" "Language: nl\n" @@ -72,13 +72,17 @@ msgstr "%q fout: %d" msgid "%q in use" msgstr "%q in gebruik" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "%q index buiten bereik" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "%q indexen moeten integers zijn, niet %s" +msgid "%q indices must be integers, not %q" +msgstr "%q indices moeten integers zijn, geen %q" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -116,6 +120,42 @@ msgstr "%q() verwacht %d positionele argumenten maar kreeg %d" msgid "'%q' argument required" msgstr "'%q' argument vereist" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "'%q' object kan attribuut ' %q' niet toewijzen" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "'%q' object ondersteunt geen '%q'" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "'%q' object ondersteunt toewijzing van items niet" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "'%q' object ondersteunt verwijderen van items niet" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "'%q' object heeft geen attribuut '%q'" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "'%q' object is geen iterator" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "'%q' object is niet aanroepbaar" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "'%q' object is niet itereerbaar" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "kan niet abonneren op '%q' object" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -166,48 +206,6 @@ msgstr "'%s' integer %d is niet in bereik %d..%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "'%s' integer 0x%x past niet in mask 0x%x" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "'%s' object kan niet aan attribuut '%q' toewijzen" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "'%s' object ondersteunt '%q' niet" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "'%s' object ondersteunt item toewijzing niet" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "'%s' object ondersteunt item verwijdering niet" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "'%s' object heeft geen attribuut '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "'%s' object is geen iterator" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "'%s' object is niet aanroepbaar" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "'%s' object is niet itereerbaar" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "'%s' object is niet onderschrijfbaar" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "'=' uitlijning niet toegestaan in string format specifier" @@ -226,7 +224,7 @@ msgstr "'await' buiten de functie" #: py/compile.c msgid "'await', 'async for' or 'async with' outside async function" -msgstr "" +msgstr "'await', 'async for' of 'async with' buiten async functie" #: py/compile.c msgid "'break' outside loop" @@ -457,6 +455,12 @@ msgstr "Buffer lengte %d te groot. Het moet kleiner zijn dan %d" msgid "Buffer length must be a multiple of 512" msgstr "Buffer lengte moet een veelvoud van 512 zijn" +#: ports/stm/common-hal/sdioio/SDCard.c +#, fuzzy +#| msgid "Buffer length must be a multiple of 512" +msgid "Buffer must be a multiple of 512 bytes" +msgstr "Buffer lengte moet een veelvoud van 512 zijn" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "Buffer moet op zijn minst lengte 1 zijn" @@ -653,6 +657,12 @@ msgstr "Kan timer niet her-initialiseren" msgid "Could not restart PWM" msgstr "Kan PWM niet herstarten" +#: shared-bindings/_bleio/Adapter.c +#, fuzzy +#| msgid "Could not start PWM" +msgid "Could not set address" +msgstr "Kan PWM niet starten" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "Kan PWM niet starten" @@ -752,7 +762,7 @@ msgstr "Fout in regex" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Verwacht een %q" @@ -835,6 +845,11 @@ msgstr "Schrijven naar interne flash mislukt." msgid "File exists" msgstr "Bestand bestaat" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "" @@ -861,7 +876,7 @@ msgid "Group full" msgstr "Groep is vol" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "Hardware bezig, probeer alternatieve pinnen" @@ -877,6 +892,10 @@ msgstr "I/O actie op gesloten bestand" msgid "I2C Init Error" msgstr "I2C Init Fout" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "I2SOut is niet beschikbaar" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -924,6 +943,13 @@ msgstr "Ongeldige %q" msgid "Invalid %q pin" msgstr "Ongeldige %q pin" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +#, fuzzy +#| msgid "Invalid I2C pin selection" +msgid "Invalid %q pin selection" +msgstr "Ongeldige I2C pin selectie" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "Ongeldige ADC Unit waarde" @@ -936,24 +962,12 @@ msgstr "Ongeldig BMP bestand" msgid "Invalid DAC pin supplied" msgstr "Ongeldige DAC pin opgegeven" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "Ongeldige I2C pin selectie" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "Ongeldige PWM frequentie" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "Ongeldige SPI pin selectie" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "Ongeldige UART pin selectie" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "Ongeldig argument" @@ -1249,6 +1263,10 @@ msgstr "Niet verbonden" msgid "Not playing" msgstr "Wordt niet afgespeeld" +#: main.c +msgid "Not running saved code.\n" +msgstr "Opgeslagen code wordt niet uitgevoerd.\n" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1346,9 +1364,14 @@ msgstr "En iedere module in het bestandssysteem\n" msgid "Polygon needs at least 3 points" msgstr "Polygon heeft op zijn minst 3 punten nodig" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" -msgstr "Pop van een lege Ps2 buffer" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" +msgstr "" #: shared-bindings/_bleio/Adapter.c msgid "Prefix buffer must be on the heap" @@ -1364,6 +1387,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "Pull niet gebruikt wanneer de richting output is." +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "PulseOut niet ondersteund door deze chip" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "RNG DeInit Fout" @@ -1424,12 +1451,8 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "Rij invoeging moet digitalio.DigitalInOut zijn" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Draaiende in veilige modus! Auto-herlaad is uit.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" -msgstr "Draaiende in veilige modus! Opgeslagen code wordt niet uitgevoerd.\n" +msgid "Running in safe mode! " +msgstr "Veilige modus wordt uitgevoerd! " #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" @@ -1440,6 +1463,17 @@ msgstr "SD kaart CSD formaat niet ondersteund" msgid "SDA or SCL needs a pull up" msgstr "SDA of SCL hebben een pullup nodig" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, fuzzy, c-format +#| msgid "SPI Init Error" +msgid "SDIO Init Error %d" +msgstr "SPI Init Fout" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "SPI Init Fout" @@ -1810,9 +1844,8 @@ msgid "__init__() should return None" msgstr "__init __ () zou None moeten retourneren" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" -msgstr "__init __ () zou None moeten retouneren, niet '%s'" +msgid "__init__() should return None, not '%q'" +msgstr "__init__() moet None teruggeven, niet '%q'" #: py/objobject.c msgid "__new__ arg must be a user-type" @@ -1857,7 +1890,7 @@ msgstr "argument heeft onjuist type" #: extmod/ulab/code/linalg/linalg.c msgid "argument must be ndarray" -msgstr "" +msgstr "argument moet ndarray zijn" #: py/argcheck.c shared-bindings/_stage/__init__.c #: shared-bindings/digitalio/DigitalInOut.c shared-bindings/gamepad/GamePad.c @@ -1965,7 +1998,7 @@ msgstr "butes > 8 niet ondersteund" msgid "bytes value out of range" msgstr "bytes waarde buiten bereik" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "calibration is buiten bereik" @@ -1998,48 +2031,18 @@ msgstr "" msgid "can't assign to expression" msgstr "kan niet toewijzen aan expressie" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "kan %s niet converteren naar een complex" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "kan %s niet omzetten naar een float" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" -msgstr "kan %s niet omzetten naar een int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" +msgstr "kan %q niet naar %q converteren" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "kan '%q' object niet omzetten naar %q impliciet" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "kan NaN niet omzetten naar int" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "kan adres niet omzetten naar int" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "kan inf niet omzetten naar int" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "kan niet omzetten naar complex" - #: py/obj.c -msgid "can't convert to float" -msgstr "kan niet omzetten naar float" - -#: py/obj.c -msgid "can't convert to int" -msgstr "kan niet omzetten naar int" +msgid "can't convert to %q" +msgstr "kan niet naar %q converteren" #: py/objstr.c msgid "can't convert to str implicitly" @@ -2449,7 +2452,7 @@ msgstr "functie mist vereist sleutelwoord argument \"%q" msgid "function missing required positional argument #%d" msgstr "functie mist vereist positie-argument #%d" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "" @@ -2499,10 +2502,7 @@ msgstr "vulling (padding) is onjuist" msgid "index is out of bounds" msgstr "index is buiten bereik" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "index is buiten bereik" @@ -2564,7 +2564,7 @@ msgstr "integer vereist" #: extmod/ulab/code/approx/approx.c msgid "interp is defined for 1D arrays of equal length" -msgstr "interp is gedefinieerd for eendimensionale arrays van gelijke lengte" +msgstr "interp is gedefinieerd voor eendimensionale arrays van gelijke lengte" #: shared-bindings/_bleio/Adapter.c #, c-format @@ -2861,9 +2861,8 @@ msgid "number of points must be at least 2" msgstr "aantal punten moet minimaal 2 zijn" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" -msgstr "object '%s' is geen tuple of lijst" +msgid "object '%q' is not a tuple or list" +msgstr "object '%q' is geen tuple of lijst" #: py/obj.c msgid "object does not support item assignment" @@ -2898,9 +2897,8 @@ msgid "object not iterable" msgstr "object niet itereerbaar" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" -msgstr "object van type '%s' heeft geen len()" +msgid "object of type '%q' has no len()" +msgstr "object van type '%q' heeft geen len()" #: py/obj.c msgid "object with buffer protocol required" @@ -2993,21 +2991,10 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "pop van een lege PulseIn" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "pop van een lege set" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "pop van een lege lijst" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" -msgstr "popitem(): dictionary is leeg" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" +msgstr "pop van een lege %q" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" @@ -3165,13 +3152,8 @@ msgid "stream operation not supported" msgstr "stream operatie niet ondersteund" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "string index buiten bereik" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" -msgstr "string indices moeten integer zijn, niet %s" +msgid "string indices must be integers, not %q" +msgstr "string indices moeten integers zijn, geen %q" #: py/stream.c msgid "string not supported; use bytes or bytearray" @@ -3182,10 +3164,6 @@ msgid "struct: cannot index" msgstr "struct: kan niet indexeren" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "struct: index buiten bereik" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "struct: geen velden" @@ -3252,9 +3230,9 @@ msgstr "te veel waarden om uit te pakken (%d verwacht)" #: extmod/ulab/code/approx/approx.c msgid "trapz is defined for 1D arrays of equal length" -msgstr "" +msgstr "trapz is gedefinieerd voor eendimensionale arrays van gelijke lengte" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "tuple index buiten bereik" @@ -3262,10 +3240,6 @@ msgstr "tuple index buiten bereik" msgid "tuple/list has wrong length" msgstr "tuple of lijst heeft onjuiste lengte" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "tuple of lijst vereist op RHS" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3321,9 +3295,8 @@ msgid "unknown conversion specifier %c" msgstr "onbekende conversiespecificatie %c" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" -msgstr "onbekende formaatcode '%c' voor object van type '%s'" +msgid "unknown format code '%c' for object of type '%q'" +msgstr "onbekende formaatcode '%c' voor object van type '%q'" #: py/compile.c msgid "unknown type" @@ -3362,16 +3335,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "niet ondersteund formaatkarakter '%c' (0x%x) op index %d" #: py/runtime.c -msgid "unsupported type for %q: '%s'" -msgstr "niet ondersteund type voor %q: '%s'" +msgid "unsupported type for %q: '%q'" +msgstr "niet ondersteund type voor %q: '%q'" #: py/runtime.c msgid "unsupported type for operator" msgstr "niet ondersteund type voor operator" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" -msgstr "niet ondersteunde types voor %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" +msgstr "niet ondersteunde types voor %q: '%q', '%q'" #: py/objint.c #, c-format @@ -3384,7 +3357,7 @@ msgstr "value_count moet groter dan 0 zijn" #: extmod/ulab/code/linalg/linalg.c msgid "vectors must have same lengths" -msgstr "" +msgstr "vectoren moeten van gelijke lengte zijn" #: shared-bindings/watchdog/WatchDogTimer.c msgid "watchdog timeout must be greater than 0" @@ -3450,15 +3423,124 @@ msgstr "zi moet van type float zijn" msgid "zi must be of shape (n_section, 2)" msgstr "zi moet vorm (n_section, 2) hebben" -#~ msgid "'%q' object is not bytes-like" -#~ msgstr "'%q' object is niet bytes-achtig" +#~ msgid "tuple/list required on RHS" +#~ msgstr "tuple of lijst vereist op RHS" + +#~ msgid "Invalid SPI pin selection" +#~ msgstr "Ongeldige SPI pin selectie" + +#~ msgid "Invalid UART pin selection" +#~ msgstr "Ongeldige UART pin selectie" + +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "%q indexen moeten integers zijn, niet %s" + +#~ msgid "'%s' object cannot assign attribute '%q'" +#~ msgstr "'%s' object kan niet aan attribuut '%q' toewijzen" + +#~ msgid "'%s' object does not support '%q'" +#~ msgstr "'%s' object ondersteunt '%q' niet" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "'%s' object ondersteunt item toewijzing niet" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "'%s' object ondersteunt item verwijdering niet" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "'%s' object heeft geen attribuut '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "'%s' object is geen iterator" + +#~ msgid "'%s' object is not callable" +#~ msgstr "'%s' object is niet aanroepbaar" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "'%s' object is niet itereerbaar" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "'%s' object is niet onderschrijfbaar" + +#~ msgid "Pop from an empty Ps2 buffer" +#~ msgstr "Pop van een lege Ps2 buffer" + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Draaiende in veilige modus! Auto-herlaad is uit.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "" +#~ "Draaiende in veilige modus! Opgeslagen code wordt niet uitgevoerd.\n" + +#~ msgid "__init__() should return None, not '%s'" +#~ msgstr "__init __ () zou None moeten retouneren, niet '%s'" + +#~ msgid "can't convert %s to complex" +#~ msgstr "kan %s niet converteren naar een complex" + +#~ msgid "can't convert %s to float" +#~ msgstr "kan %s niet omzetten naar een float" + +#~ msgid "can't convert %s to int" +#~ msgstr "kan %s niet omzetten naar een int" + +#~ msgid "can't convert NaN to int" +#~ msgstr "kan NaN niet omzetten naar int" + +#~ msgid "can't convert address to int" +#~ msgstr "kan adres niet omzetten naar int" + +#~ msgid "can't convert inf to int" +#~ msgstr "kan inf niet omzetten naar int" + +#~ msgid "can't convert to complex" +#~ msgstr "kan niet omzetten naar complex" + +#~ msgid "can't convert to float" +#~ msgstr "kan niet omzetten naar float" + +#~ msgid "can't convert to int" +#~ msgstr "kan niet omzetten naar int" + +#~ msgid "object '%s' is not a tuple or list" +#~ msgstr "object '%s' is geen tuple of lijst" + +#~ msgid "object of type '%s' has no len()" +#~ msgstr "object van type '%s' heeft geen len()" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "pop van een lege PulseIn" + +#~ msgid "pop from an empty set" +#~ msgstr "pop van een lege set" + +#~ msgid "pop from empty list" +#~ msgstr "pop van een lege lijst" + +#~ msgid "popitem(): dictionary is empty" +#~ msgstr "popitem(): dictionary is leeg" + +#~ msgid "string index out of range" +#~ msgstr "string index buiten bereik" + +#~ msgid "string indices must be integers, not %s" +#~ msgstr "string indices moeten integer zijn, niet %s" + +#~ msgid "struct: index out of range" +#~ msgstr "struct: index buiten bereik" + +#~ msgid "unknown format code '%c' for object of type '%s'" +#~ msgstr "onbekende formaatcode '%c' voor object van type '%s'" + +#~ msgid "unsupported type for %q: '%s'" +#~ msgstr "niet ondersteund type voor %q: '%s'" + +#~ msgid "unsupported types for %q: '%s', '%s'" +#~ msgstr "niet ondersteunde types voor %q: '%s', '%s'" #~ msgid "'async for' or 'async with' outside async function" #~ msgstr "'async for' of 'async with' buiten async functie" -#~ msgid "PulseOut not supported on this chip" -#~ msgstr "PulseOut niet ondersteund door deze chip" - #~ msgid "PulseIn not supported on this chip" #~ msgstr "PusleIn niet ondersteund door deze chip" @@ -3485,3 +3567,6 @@ msgstr "zi moet vorm (n_section, 2) hebben" #~ msgid "must specify all of sck/mosi/miso" #~ msgstr "sck/mosi/miso moeten alle gespecificeerd worden" + +#~ msgid "'%q' object is not bytes-like" +#~ msgstr "'%q' object is niet bytes-achtig" diff --git a/locale/pl.po b/locale/pl.po index fdb374918..6c52062d9 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: 2019-03-19 18:37-0700\n" "Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n" "Language-Team: pl\n" @@ -66,13 +66,17 @@ msgstr "" msgid "%q in use" msgstr "%q w użyciu" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "%q poza zakresem" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "%q indeks musi być liczbÄ… caÅ‚kowitÄ…, a nie %s" +msgid "%q indices must be integers, not %q" +msgstr "" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -110,6 +114,42 @@ msgstr "%q() bierze %d argumentów pozycyjnych, lecz podano %d" msgid "'%q' argument required" msgstr "'%q' wymaga argumentu" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -160,48 +200,6 @@ msgstr "'%s' liczba %d poza zakresem %d..%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "'%s' liczba 0x%x nie pasuje do maski 0x%x" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "'%s' obiekt nie wspiera przypisania do elementów" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "'%s' obiekt nie wspiera usuwania elementów" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "'%s' obiekt nie ma atrybutu '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "'%s' obiekt nie jest iteratorem" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "'%s' nie można wywoÅ‚ywać obiektu" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "'%s' nie można iterować po obiekcie" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "'%s' nie można indeksować obiektu" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "wyrównanie '=' niedozwolone w specyfikacji formatu" @@ -451,6 +449,10 @@ msgstr "" msgid "Buffer length must be a multiple of 512" msgstr "" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "Bufor musi mieć dÅ‚ugość 1 lub wiÄ™cej" @@ -641,6 +643,10 @@ msgstr "" msgid "Could not restart PWM" msgstr "" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "" @@ -740,7 +746,7 @@ msgstr "Błąd w regex" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Oczekiwano %q" @@ -823,6 +829,11 @@ msgstr "" msgid "File exists" msgstr "Plik istnieje" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "Uzyskana czÄ™stotliwość jest niemożliwa. Spauzowano." @@ -847,7 +858,7 @@ msgid "Group full" msgstr "Grupa peÅ‚na" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "" @@ -863,6 +874,10 @@ msgstr "Operacja I/O na zamkniÄ™tym pliku" msgid "I2C Init Error" msgstr "" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -910,6 +925,11 @@ msgstr "" msgid "Invalid %q pin" msgstr "ZÅ‚a nóżka %q" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "" @@ -922,24 +942,12 @@ msgstr "ZÅ‚y BMP" msgid "Invalid DAC pin supplied" msgstr "" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "ZÅ‚a czÄ™stotliwość PWM" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "ZÅ‚y argument" @@ -1235,6 +1243,10 @@ msgstr "Nie podłączono" msgid "Not playing" msgstr "Nic nie jest odtwarzane" +#: main.c +msgid "Not running saved code.\n" +msgstr "" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1320,8 +1332,13 @@ msgstr "Oraz moduÅ‚y w systemie plików\n" msgid "Polygon needs at least 3 points" msgstr "" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" msgstr "" #: shared-bindings/_bleio/Adapter.c @@ -1336,6 +1353,10 @@ msgstr "Dowolny klawisz aby uruchomić konsolÄ™. CTRL-D aby przeÅ‚adować." msgid "Pull not used when direction is output." msgstr "PodciÄ…gniÄ™cie nieużywane w trybie wyjÅ›cia." +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "" @@ -1396,12 +1417,8 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "RzÄ™dy muszÄ… być digitalio.DigitalInOut" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Uruchomiony tryb bezpieczeÅ„stwa! Samo-przeÅ‚adowanie wyłączone.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" -msgstr "Uruchomiony tryb bezpieczeÅ„stwa! Zapisany kod nie jest uruchamiany.\n" +msgid "Running in safe mode! " +msgstr "" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" @@ -1412,6 +1429,16 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "SDA lub SCL wymagajÄ… podciÄ…gniÄ™cia" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "" @@ -1764,9 +1791,8 @@ msgid "__init__() should return None" msgstr "__init__() powinien zwracać None" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" -msgstr "__init__() powinien zwracać None, nie '%s'" +msgid "__init__() should return None, not '%q'" +msgstr "" #: py/objobject.c msgid "__new__ arg must be a user-type" @@ -1919,7 +1945,7 @@ msgstr "bajty wiÄ™ksze od 8 bitów sÄ… niewspierane" msgid "bytes value out of range" msgstr "wartość bytes poza zakresem" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "kalibracja poza zakresem" @@ -1951,48 +1977,18 @@ msgstr "nie można dodać specjalnej metody do podklasy" msgid "can't assign to expression" msgstr "przypisanie do wyrażenia" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "nie można skonwertować %s do complex" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "nie można skonwertować %s do float" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" -msgstr "nie można skonwertować %s do int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" +msgstr "" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "nie można automatycznie skonwertować '%q' do '%q'" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "nie można skonwertować NaN do int" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "nie można skonwertować adresu do int" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "nie można skonwertować inf do int" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "nie można skonwertować do complex" - -#: py/obj.c -msgid "can't convert to float" -msgstr "nie można skonwertować do float" - #: py/obj.c -msgid "can't convert to int" -msgstr "nie można skonwertować do int" +msgid "can't convert to %q" +msgstr "" #: py/objstr.c msgid "can't convert to str implicitly" @@ -2400,7 +2396,7 @@ msgstr "brak wymaganego argumentu nazwanego '%q' funkcji" msgid "function missing required positional argument #%d" msgstr "brak wymaganego argumentu pozycyjnego #%d funkcji" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "funkcja wymaga %d argumentów pozycyjnych, ale jest %d" @@ -2449,10 +2445,7 @@ msgstr "zÅ‚e wypeÅ‚nienie" msgid "index is out of bounds" msgstr "" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "indeks poza zakresem" @@ -2808,9 +2801,8 @@ msgid "number of points must be at least 2" msgstr "" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" -msgstr "obiekt '%s' nie jest krotkÄ… ani listÄ…" +msgid "object '%q' is not a tuple or list" +msgstr "" #: py/obj.c msgid "object does not support item assignment" @@ -2845,9 +2837,8 @@ msgid "object not iterable" msgstr "obiekt nie jest iterowalny" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" -msgstr "obiekt typu '%s' nie ma len()" +msgid "object of type '%q' has no len()" +msgstr "" #: py/obj.c msgid "object with buffer protocol required" @@ -2940,21 +2931,10 @@ msgstr "" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "pop z pustego PulseIn" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "pop z pustego zbioru" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "pop z pustej listy" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" -msgstr "popitem(): sÅ‚ownik jest pusty" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" +msgstr "" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" @@ -3111,13 +3091,8 @@ msgid "stream operation not supported" msgstr "operacja na strumieniu nieobsÅ‚ugiwana" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "indeks Å‚aÅ„cucha poza zakresem" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" -msgstr "indeksy Å‚aÅ„cucha muszÄ… być caÅ‚kowite, nie %s" +msgid "string indices must be integers, not %q" +msgstr "" #: py/stream.c msgid "string not supported; use bytes or bytearray" @@ -3128,10 +3103,6 @@ msgid "struct: cannot index" msgstr "struct: nie można indeksować" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "struct: indeks poza zakresem" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "struct: brak pól" @@ -3200,7 +3171,7 @@ msgstr "zbyt wiele wartoÅ›ci do rozpakowania (oczekiwano %d)" msgid "trapz is defined for 1D arrays of equal length" msgstr "" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "indeks krotki poza zakresem" @@ -3208,10 +3179,6 @@ msgstr "indeks krotki poza zakresem" msgid "tuple/list has wrong length" msgstr "krotka/lista ma złą dÅ‚ugość" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "wymagana krotka/lista po prawej stronie" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3267,9 +3234,8 @@ msgid "unknown conversion specifier %c" msgstr "zÅ‚a specyfikacja konwersji %c" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" -msgstr "zÅ‚y kod formatowania '%c' dla obiektu typu '%s'" +msgid "unknown format code '%c' for object of type '%q'" +msgstr "" #: py/compile.c msgid "unknown type" @@ -3308,16 +3274,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "zÅ‚y znak formatowania '%c' (0x%x) na pozycji %d" #: py/runtime.c -msgid "unsupported type for %q: '%s'" -msgstr "zÅ‚y typ dla %q: '%s'" +msgid "unsupported type for %q: '%q'" +msgstr "" #: py/runtime.c msgid "unsupported type for operator" msgstr "zÅ‚y typ dla operatora" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" -msgstr "zÅ‚e typy dla %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" +msgstr "" #: py/objint.c #, c-format @@ -3396,6 +3362,106 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "tuple/list required on RHS" +#~ msgstr "wymagana krotka/lista po prawej stronie" + +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "%q indeks musi być liczbÄ… caÅ‚kowitÄ…, a nie %s" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "'%s' obiekt nie wspiera przypisania do elementów" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "'%s' obiekt nie wspiera usuwania elementów" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "'%s' obiekt nie ma atrybutu '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "'%s' obiekt nie jest iteratorem" + +#~ msgid "'%s' object is not callable" +#~ msgstr "'%s' nie można wywoÅ‚ywać obiektu" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "'%s' nie można iterować po obiekcie" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "'%s' nie można indeksować obiektu" + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Uruchomiony tryb bezpieczeÅ„stwa! Samo-przeÅ‚adowanie wyłączone.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "" +#~ "Uruchomiony tryb bezpieczeÅ„stwa! Zapisany kod nie jest uruchamiany.\n" + +#~ msgid "__init__() should return None, not '%s'" +#~ msgstr "__init__() powinien zwracać None, nie '%s'" + +#~ msgid "can't convert %s to complex" +#~ msgstr "nie można skonwertować %s do complex" + +#~ msgid "can't convert %s to float" +#~ msgstr "nie można skonwertować %s do float" + +#~ msgid "can't convert %s to int" +#~ msgstr "nie można skonwertować %s do int" + +#~ msgid "can't convert NaN to int" +#~ msgstr "nie można skonwertować NaN do int" + +#~ msgid "can't convert address to int" +#~ msgstr "nie można skonwertować adresu do int" + +#~ msgid "can't convert inf to int" +#~ msgstr "nie można skonwertować inf do int" + +#~ msgid "can't convert to complex" +#~ msgstr "nie można skonwertować do complex" + +#~ msgid "can't convert to float" +#~ msgstr "nie można skonwertować do float" + +#~ msgid "can't convert to int" +#~ msgstr "nie można skonwertować do int" + +#~ msgid "object '%s' is not a tuple or list" +#~ msgstr "obiekt '%s' nie jest krotkÄ… ani listÄ…" + +#~ msgid "object of type '%s' has no len()" +#~ msgstr "obiekt typu '%s' nie ma len()" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "pop z pustego PulseIn" + +#~ msgid "pop from an empty set" +#~ msgstr "pop z pustego zbioru" + +#~ msgid "pop from empty list" +#~ msgstr "pop z pustej listy" + +#~ msgid "popitem(): dictionary is empty" +#~ msgstr "popitem(): sÅ‚ownik jest pusty" + +#~ msgid "string index out of range" +#~ msgstr "indeks Å‚aÅ„cucha poza zakresem" + +#~ msgid "string indices must be integers, not %s" +#~ msgstr "indeksy Å‚aÅ„cucha muszÄ… być caÅ‚kowite, nie %s" + +#~ msgid "struct: index out of range" +#~ msgstr "struct: indeks poza zakresem" + +#~ msgid "unknown format code '%c' for object of type '%s'" +#~ msgstr "zÅ‚y kod formatowania '%c' dla obiektu typu '%s'" + +#~ msgid "unsupported type for %q: '%s'" +#~ msgstr "zÅ‚y typ dla %q: '%s'" + +#~ msgid "unsupported types for %q: '%s', '%s'" +#~ msgstr "zÅ‚e typy dla %q: '%s', '%s'" + #~ msgid "Address is not %d bytes long or is in wrong format" #~ msgstr "Adres nie ma dÅ‚ugoÅ›ci %d bajtów lub zÅ‚y format" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 3ecca12df..b2967cf99 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" -"PO-Revision-Date: 2020-07-28 15:41+0000\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" +"PO-Revision-Date: 2020-08-16 02:25+0000\n" "Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n" "Language-Team: \n" "Language: pt_BR\n" @@ -72,13 +72,17 @@ msgstr "%q falha: %d" msgid "%q in use" msgstr "%q em uso" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "O Ãndice %q está fora do intervalo" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "Os Ãndices %q devem ser inteiros, e não %s" +msgid "%q indices must be integers, not %q" +msgstr "Os indicadores %q devem ser inteiros, não %q" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -116,6 +120,42 @@ msgstr "%q() recebe %d argumentos posicionais, porém %d foram informados" msgid "'%q' argument required" msgstr "'%q' argumento(s) requerido(s)" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "O objeto '%q' não pode definir o atributo '%q'" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "O objeto '%q' não suporta '%q'" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "O objeto '%q' não suporta a atribuição do item" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "O objeto '%q' não suporta a exclusão dos itens" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "O objeto '%q' não possui qualquer atributo '%q'" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "O objeto '%q' não é um iterador" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "O objeto '%s' não é invocável" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "O objeto '%q' não é iterável" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "O objeto '%q' não é subscritÃvel" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -166,48 +206,6 @@ msgstr "O número inteiro '%s' %d não está dentro do intervalo %d..%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "O número inteiro '%s' 0x%x não cabe na máscara 0x%x" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "O objeto '%s' não pode definir o atributo '%q'" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "O objeto '%s' não é compatÃvel com '%q'" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "O objeto '%s' não compatÃvel com a atribuição dos itens" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "O objeto '%s' não é compatÃvel com exclusão do item" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "O objeto '%s' não possui o atributo '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "O objeto '%s' não é um iterador" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "O objeto '%s' não é invocável" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "O objeto '%s' não é iterável" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "O objeto '%s' não é subroteirizável" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "" @@ -465,6 +463,10 @@ msgstr "O tamanho do buffer %d é muito grande. Deve ser menor que %d" msgid "Buffer length must be a multiple of 512" msgstr "O comprimento do Buffer deve ser um múltiplo de 512" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "O buffer deve ser um múltiplo de 512 bytes" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "O comprimento do buffer deve ter pelo menos 1" @@ -662,6 +664,10 @@ msgstr "Não foi possÃvel reiniciar o temporizador" msgid "Could not restart PWM" msgstr "Não foi possÃvel reiniciar o PWM" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "Não foi possÃvel definir o endereço" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "Não foi possÃvel iniciar o PWM" @@ -761,7 +767,7 @@ msgstr "Erro no regex" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Esperado um" @@ -844,6 +850,11 @@ msgstr "Falha ao gravar o flash interno." msgid "File exists" msgstr "Arquivo já existe" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "O Framebuffer requer %d bytes" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "" @@ -870,7 +881,7 @@ msgid "Group full" msgstr "Grupo cheio" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "O hardware está ocupado, tente os pinos alternativos" @@ -886,6 +897,10 @@ msgstr "Operação I/O no arquivo fechado" msgid "I2C Init Error" msgstr "Erro de inicialização do I2C" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "O I2SOut não está disponÃvel" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -933,6 +948,11 @@ msgstr "%q Inválido" msgid "Invalid %q pin" msgstr "Pino do %q inválido" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "Seleção inválida dos pinos %q" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "Valor inválido da unidade ADC" @@ -945,24 +965,12 @@ msgstr "Arquivo BMP inválido" msgid "Invalid DAC pin supplied" msgstr "O pino DAC informado é inválido" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "A seleção dos pinos I2C é inválido" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "Frequência PWM inválida" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "A seleção do pino SPI é inválido" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "A seleção dos pinos UART é inválido" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "Argumento inválido" @@ -1258,6 +1266,10 @@ msgstr "Não Conectado" msgid "Not playing" msgstr "Não está jogando" +#: main.c +msgid "Not running saved code.\n" +msgstr "O código salvo não está em execução.\n" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1355,9 +1367,14 @@ msgstr "Além de quaisquer módulos no sistema de arquivos\n" msgid "Polygon needs at least 3 points" msgstr "O PolÃgono precisa de pelo menos 3 pontos" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" -msgstr "Buffer Ps2 vazio" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" +msgstr "" #: shared-bindings/_bleio/Adapter.c msgid "Prefix buffer must be on the heap" @@ -1374,6 +1391,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "O Pull não foi usado quando a direção for gerada." +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "O PulseOut não é compatÃvel neste CI" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "Erro DeInit RNG" @@ -1434,12 +1455,8 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "A entrada da linha deve ser digitalio.DigitalInOut" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Rodando em modo seguro! Atualização automática está desligada.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" -msgstr "Rodando em modo seguro! Não está executando o código salvo.\n" +msgid "Running in safe mode! " +msgstr "Executando no modo de segurança! " #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" @@ -1450,6 +1467,16 @@ msgstr "O formato CSD do Cartão SD não é compatÃvel" msgid "SDA or SCL needs a pull up" msgstr "SDA ou SCL precisa de um pull up" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "Erro SDIO GetCardInfo %d" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "Erro SDIO Init %d" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "Houve um erro na inicialização SPI" @@ -1825,9 +1852,8 @@ msgid "__init__() should return None" msgstr "O __init__() deve retornar Nenhum" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" -msgstr "O __init__() deve retornar Nenhum, não '%s'" +msgid "__init__() should return None, not '%q'" +msgstr "O __init__() deve retornar Nenhum, não '%q'" #: py/objobject.c msgid "__new__ arg must be a user-type" @@ -1872,7 +1898,7 @@ msgstr "argumento tem tipo errado" #: extmod/ulab/code/linalg/linalg.c msgid "argument must be ndarray" -msgstr "" +msgstr "o argumento deve ser ndarray" #: py/argcheck.c shared-bindings/_stage/__init__.c #: shared-bindings/digitalio/DigitalInOut.c shared-bindings/gamepad/GamePad.c @@ -1980,7 +2006,7 @@ msgstr "bytes > 8 bits não suportado" msgid "bytes value out of range" msgstr "o valor dos bytes estão fora do alcance" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "Calibração está fora do intervalo" @@ -2012,48 +2038,18 @@ msgstr "não é possÃvel adicionar o método especial à classe já subclassifi msgid "can't assign to expression" msgstr "a expressão não pode ser atribuÃda" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "Não é possÃvel converter %s para complex" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "Não é possÃvel converter %s para float" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" -msgstr "Não é possÃvel converter %s para int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" +msgstr "não é possÃvel converter %q para %q" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "não é possÃvel converter implicitamente o objeto '%q' para %q" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "Não é possÃvel converter NaN para int" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "não é possÃvel converter o endereço para int" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "não é possÃvel converter inf para int" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "não é possÃvel converter para complex" - #: py/obj.c -msgid "can't convert to float" -msgstr "não é possÃvel converter para float" - -#: py/obj.c -msgid "can't convert to int" -msgstr "não é possÃvel converter para int" +msgid "can't convert to %q" +msgstr "não é possÃvel converter para %q" #: py/objstr.c msgid "can't convert to str implicitly" @@ -2470,7 +2466,7 @@ msgstr "falta apenas a palavra chave do argumento '%q' da função" msgid "function missing required positional argument #%d" msgstr "falta o argumento #%d da posição necessária da função" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "função leva %d argumentos posicionais, mas apenas %d foram passadas" @@ -2519,10 +2515,7 @@ msgstr "preenchimento incorreto" msgid "index is out of bounds" msgstr "o Ãndice está fora dos limites" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "Ãndice fora do intervalo" @@ -2883,9 +2876,8 @@ msgid "number of points must be at least 2" msgstr "a quantidade dos pontos deve ser pelo menos 2" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" -msgstr "o objeto '%s' não é uma tupla ou uma lista" +msgid "object '%q' is not a tuple or list" +msgstr "o objeto '%q' não é uma tupla ou uma lista" #: py/obj.c msgid "object does not support item assignment" @@ -2920,9 +2912,8 @@ msgid "object not iterable" msgstr "objeto não iterável" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" -msgstr "O objeto do tipo '%s' não possui len()" +msgid "object of type '%q' has no len()" +msgstr "o objeto do tipo '%q' não tem len()" #: py/obj.c msgid "object with buffer protocol required" @@ -3019,21 +3010,10 @@ msgstr "o polÃgono só pode ser registrado em um pai" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "pop a partir de um PulseIn vazio" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "pop a partir de um conjunto vazio" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "pop a partir da lista vazia" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" -msgstr "popitem(): o dicionário está vazio" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" +msgstr "pop a partir do %q vazio" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" @@ -3070,7 +3050,7 @@ msgstr "a anotação do retorno deve ser um identificador" #: py/emitnative.c msgid "return expected '%q' but got '%q'" -msgstr "o retorno esperado era '%q', porém obteve '% q'" +msgstr "o retorno esperado era '%q', porém obteve '%q'" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format @@ -3191,13 +3171,8 @@ msgid "stream operation not supported" msgstr "a operação do fluxo não é compatÃvel" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "o Ãndice da string está fora do intervalo" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" -msgstr "o Ãndices das string devem ser números inteiros, não %s" +msgid "string indices must be integers, not %q" +msgstr "a sequência dos Ãndices devem ser inteiros, não %q" #: py/stream.c msgid "string not supported; use bytes or bytearray" @@ -3208,10 +3183,6 @@ msgid "struct: cannot index" msgstr "struct: não pode indexar" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "struct: Ãndice fora do intervalo" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "struct: sem campos" @@ -3278,9 +3249,9 @@ msgstr "valores demais para descompactar (esperado %d)" #: extmod/ulab/code/approx/approx.c msgid "trapz is defined for 1D arrays of equal length" -msgstr "" +msgstr "o trapz está definido para 1D arrays de igual tamanho" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "o Ãndice da tupla está fora do intervalo" @@ -3288,10 +3259,6 @@ msgstr "o Ãndice da tupla está fora do intervalo" msgid "tuple/list has wrong length" msgstr "a tupla/lista está com tamanho incorreto" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "a tupla/lista necessária no RHS" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3347,9 +3314,8 @@ msgid "unknown conversion specifier %c" msgstr "especificador de conversão desconhecido %c" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" -msgstr "código de formato desconhecido '%c' para o objeto do tipo '%s'" +msgid "unknown format code '%c' for object of type '%q'" +msgstr "o formato do código '%c' é desconhecido para o objeto do tipo '%q'" #: py/compile.c msgid "unknown type" @@ -3388,16 +3354,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "o caractere do formato não é compatÃvel '%c' (0x%x) no Ãndice %d" #: py/runtime.c -msgid "unsupported type for %q: '%s'" -msgstr "tipo não compatÃvel para %q: '%s'" +msgid "unsupported type for %q: '%q'" +msgstr "tipo sem suporte para %q: '%q'" #: py/runtime.c msgid "unsupported type for operator" msgstr "tipo não compatÃvel para o operador" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" -msgstr "tipos não compatÃveis para %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" +msgstr "tipo sem suporte para %q: '%q', '%q'" #: py/objint.c #, c-format @@ -3410,7 +3376,7 @@ msgstr "o value_count deve ser > 0" #: extmod/ulab/code/linalg/linalg.c msgid "vectors must have same lengths" -msgstr "" +msgstr "os vetores devem ter os mesmos comprimentos" #: shared-bindings/watchdog/WatchDogTimer.c msgid "watchdog timeout must be greater than 0" @@ -3476,15 +3442,129 @@ msgstr "zi deve ser de um tipo float" msgid "zi must be of shape (n_section, 2)" msgstr "zi deve estar na forma (n_section, 2)" +#~ msgid "tuple/list required on RHS" +#~ msgstr "a tupla/lista necessária no RHS" + +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "Os Ãndices %q devem ser inteiros, e não %s" + +#~ msgid "'%s' object cannot assign attribute '%q'" +#~ msgstr "O objeto '%s' não pode definir o atributo '%q'" + +#~ msgid "'%s' object does not support '%q'" +#~ msgstr "O objeto '%s' não é compatÃvel com '%q'" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "O objeto '%s' não compatÃvel com a atribuição dos itens" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "O objeto '%s' não é compatÃvel com exclusão do item" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "O objeto '%s' não possui o atributo '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "O objeto '%s' não é um iterador" + +#~ msgid "'%s' object is not callable" +#~ msgstr "O objeto '%s' não é invocável" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "O objeto '%s' não é iterável" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "O objeto '%s' não é subroteirizável" + +#~ msgid "Invalid I2C pin selection" +#~ msgstr "A seleção dos pinos I2C é inválido" + +#~ msgid "Invalid SPI pin selection" +#~ msgstr "A seleção do pino SPI é inválido" + +#~ msgid "Invalid UART pin selection" +#~ msgstr "A seleção dos pinos UART é inválido" + +#~ msgid "Pop from an empty Ps2 buffer" +#~ msgstr "Buffer Ps2 vazio" + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Rodando em modo seguro! Atualização automática está desligada.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "Rodando em modo seguro! Não está executando o código salvo.\n" + +#~ msgid "__init__() should return None, not '%s'" +#~ msgstr "O __init__() deve retornar Nenhum, não '%s'" + +#~ msgid "can't convert %s to complex" +#~ msgstr "Não é possÃvel converter %s para complex" + +#~ msgid "can't convert %s to float" +#~ msgstr "Não é possÃvel converter %s para float" + +#~ msgid "can't convert %s to int" +#~ msgstr "Não é possÃvel converter %s para int" + +#~ msgid "can't convert NaN to int" +#~ msgstr "Não é possÃvel converter NaN para int" + +#~ msgid "can't convert address to int" +#~ msgstr "não é possÃvel converter o endereço para int" + +#~ msgid "can't convert inf to int" +#~ msgstr "não é possÃvel converter inf para int" + +#~ msgid "can't convert to complex" +#~ msgstr "não é possÃvel converter para complex" + +#~ msgid "can't convert to float" +#~ msgstr "não é possÃvel converter para float" + +#~ msgid "can't convert to int" +#~ msgstr "não é possÃvel converter para int" + +#~ msgid "object '%s' is not a tuple or list" +#~ msgstr "o objeto '%s' não é uma tupla ou uma lista" + +#~ msgid "object of type '%s' has no len()" +#~ msgstr "O objeto do tipo '%s' não possui len()" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "pop a partir de um PulseIn vazio" + +#~ msgid "pop from an empty set" +#~ msgstr "pop a partir de um conjunto vazio" + +#~ msgid "pop from empty list" +#~ msgstr "pop a partir da lista vazia" + +#~ msgid "popitem(): dictionary is empty" +#~ msgstr "popitem(): o dicionário está vazio" + +#~ msgid "string index out of range" +#~ msgstr "o Ãndice da string está fora do intervalo" + +#~ msgid "string indices must be integers, not %s" +#~ msgstr "o Ãndices das string devem ser números inteiros, não %s" + +#~ msgid "struct: index out of range" +#~ msgstr "struct: Ãndice fora do intervalo" + +#~ msgid "unknown format code '%c' for object of type '%s'" +#~ msgstr "código de formato desconhecido '%c' para o objeto do tipo '%s'" + +#~ msgid "unsupported type for %q: '%s'" +#~ msgstr "tipo não compatÃvel para %q: '%s'" + +#~ msgid "unsupported types for %q: '%s', '%s'" +#~ msgstr "tipos não compatÃveis para %q: '%s', '%s'" + #~ msgid "'%q' object is not bytes-like" #~ msgstr "objetos '%q' não são bytes-like" #~ msgid "'async for' or 'async with' outside async function" #~ msgstr "'assÃncrono para' ou 'assÃncrono com' função assÃncrona externa" -#~ msgid "PulseOut not supported on this chip" -#~ msgstr "O PulseOut não é compatÃvel neste CI" - #~ msgid "PulseIn not supported on this chip" #~ msgstr "O PulseIn não é compatÃvel neste CI" diff --git a/locale/sv.po b/locale/sv.po index 0210094a9..df205b109 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: 2020-07-25 20:58+0000\n" "Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -72,13 +72,17 @@ msgstr "%q-fel: %d" msgid "%q in use" msgstr "%q används redan" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "Index %q ligger utanför intervallet" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "Indexet %q mÃ¥ste vara ett heltal, inte %s" +msgid "%q indices must be integers, not %q" +msgstr "" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" @@ -116,6 +120,42 @@ msgstr "%q() kräver %d positionsargument men %d gavs" msgid "'%q' argument required" msgstr "'%q' argument krävs" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -166,48 +206,6 @@ msgstr "'%s' heltal %d ligger inte inom intervallet %d..%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "'%s' heltal 0x%x ryms inte i mask 0x%x" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "Objektet '%s' kan inte tilldela attributet '%q'" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "Objektet '%s' har inte stöd för '%q'" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "Objektet '%s' stöder inte tilldelningen" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "Objektet '%s' stöder inte borttagning av objekt" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "Objektet '%s' har inget attribut '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "Objektet '%s' är inte en iterator" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "Objektet '%s' kan inte anropas" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "Objektet '%s' är inte itererable" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "Objektet '%s' är inte indexbar" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "'='-justering tillÃ¥ts inte i strängformatspecifikation" @@ -457,6 +455,10 @@ msgstr "Buffertlängd %d för stor. Den mÃ¥ste vara mindre än %d" msgid "Buffer length must be a multiple of 512" msgstr "Buffertlängd mÃ¥ste vara en multipel av 512" +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "" + #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" msgstr "Bufferten mÃ¥ste ha minst längd 1" @@ -653,6 +655,10 @@ msgstr "Det gick inte att Ã¥terinitiera timern" msgid "Could not restart PWM" msgstr "Det gick inte att starta om PWM" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "Det gick inte att starta PWM" @@ -752,7 +758,7 @@ msgstr "Fel i regex" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Förväntade %q" @@ -835,6 +841,11 @@ msgstr "Det gick inte att skriva till intern flash." msgid "File exists" msgstr "Filen finns redan" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "InfÃ¥ngningsfrekvens är för hög. InfÃ¥ngning pausad." @@ -859,7 +870,7 @@ msgid "Group full" msgstr "Gruppen är full" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "HÃ¥rdvaran är upptagen, prova alternativa pinnar" @@ -875,6 +886,10 @@ msgstr "I/O-operation pÃ¥ stängd fil" msgid "I2C Init Error" msgstr "I2C init-fel" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" @@ -922,6 +937,11 @@ msgstr "Ogiltig %q" msgid "Invalid %q pin" msgstr "Ogiltig %q-pinne" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "Ogiltigt ADC-enhetsvärde" @@ -934,24 +954,12 @@ msgstr "Ogiltig BMP-fil" msgid "Invalid DAC pin supplied" msgstr "Ogiltig DAC-pinne angiven" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "Ogiltigt val av I2C-pinne" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "Ogiltig PWM-frekvens" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "Ogiltigt val av SPI-pinne" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "Ogiltigt val av UART-pinne" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "Ogiltigt argument" @@ -1248,6 +1256,10 @@ msgstr "Inte ansluten" msgid "Not playing" msgstr "Ingen uppspelning" +#: main.c +msgid "Not running saved code.\n" +msgstr "" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1343,9 +1355,14 @@ msgstr "Plus eventuella moduler i filsystemet\n" msgid "Polygon needs at least 3 points" msgstr "Polygonen behöver minst 3 punkter" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" -msgstr "Pop frÃ¥n en tom Ps2-buffert" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" +msgstr "" #: shared-bindings/_bleio/Adapter.c msgid "Prefix buffer must be on the heap" @@ -1360,6 +1377,10 @@ msgstr "" msgid "Pull not used when direction is output." msgstr "Pull används inte när riktningen är output." +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "PulseIn stöds inte av detta chip" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "RNG DeInit-fel" @@ -1420,12 +1441,8 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "Radvärdet mÃ¥ste vara digitalio.DigitalInOut" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Kör i säkert läge! Autoladdning är avstängd.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" -msgstr "Kör i säkert läge! Sparad kod körs inte.\n" +msgid "Running in safe mode! " +msgstr "" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" @@ -1436,6 +1453,16 @@ msgstr "SD-kort CSD-format stöds inte" msgid "SDA or SCL needs a pull up" msgstr "SDA eller SCL behöver en pullup" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "SPI Init-fel" @@ -1803,9 +1830,8 @@ msgid "__init__() should return None" msgstr "__init __ () ska returnera None" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" -msgstr "__init __ () ska returnera None, inte '%s'" +msgid "__init__() should return None, not '%q'" +msgstr "" #: py/objobject.c msgid "__new__ arg must be a user-type" @@ -1958,7 +1984,7 @@ msgstr "bytes> 8 bitar stöds inte" msgid "bytes value out of range" msgstr "bytevärde utanför intervallet" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "kalibrering är utanför intervallet" @@ -1990,48 +2016,18 @@ msgstr "kan inte lägga till särskild metod för redan subklassad klass" msgid "can't assign to expression" msgstr "kan inte tilldela uttryck" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "kan inte konvertera %s till komplex" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "kan inte konvertera %s till float" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" -msgstr "kan inte konvertera %s till int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" +msgstr "" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "kan inte konvertera '%q' objekt implicit till %q" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "kan inte konvertera NaN till int" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "kan inte konvertera address till int" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "kan inte konvertera inf till int" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "kan inte konvertera till komplex" - #: py/obj.c -msgid "can't convert to float" -msgstr "kan inte konvertera till float" - -#: py/obj.c -msgid "can't convert to int" -msgstr "kan inte konvertera till int" +msgid "can't convert to %q" +msgstr "" #: py/objstr.c msgid "can't convert to str implicitly" @@ -2115,7 +2111,7 @@ msgstr "" #: py/objtype.c msgid "cannot create '%q' instances" -msgstr "kan inte skapa instanser av '% q'" +msgstr "kan inte skapa instanser av '%q'" #: py/objtype.c msgid "cannot create instance" @@ -2443,7 +2439,7 @@ msgstr "funktionen saknar det obligatoriska nyckelordsargumentet '%q'" msgid "function missing required positional argument #%d" msgstr "funktionen saknar det obligatoriska positionsargumentet #%d" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "funktionen kräver %d positionsargument men %d angavs" @@ -2492,10 +2488,7 @@ msgstr "felaktig utfyllnad" msgid "index is out of bounds" msgstr "index är utanför gränserna" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "index utanför intervallet" @@ -2854,9 +2847,8 @@ msgid "number of points must be at least 2" msgstr "antal punkter mÃ¥ste vara minst 2" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" -msgstr "objektet '%s' är inte en tupel eller lista" +msgid "object '%q' is not a tuple or list" +msgstr "" #: py/obj.c msgid "object does not support item assignment" @@ -2891,9 +2883,8 @@ msgid "object not iterable" msgstr "objektet är inte iterable" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" -msgstr "objekt av typen '%s' har ingen len()" +msgid "object of type '%q' has no len()" +msgstr "" #: py/obj.c msgid "object with buffer protocol required" @@ -2986,21 +2977,10 @@ msgstr "polygon kan endast registreras i en förälder" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "pop frÃ¥n en tom PulseIn" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "pop frÃ¥n en tom uppsättning" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "pop frÃ¥n tom lista" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" -msgstr "popitem(): ordlistan är tom" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" +msgstr "" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" @@ -3158,13 +3138,8 @@ msgid "stream operation not supported" msgstr "stream-Ã¥tgärd stöds inte" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "strängindex utanför intervallet" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" -msgstr "strängindex mÃ¥ste vara heltal, inte %s" +msgid "string indices must be integers, not %q" +msgstr "" #: py/stream.c msgid "string not supported; use bytes or bytearray" @@ -3175,10 +3150,6 @@ msgid "struct: cannot index" msgstr "struct: kan inte indexera" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "struct: index utanför intervallet" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "struct: inga fält" @@ -3247,7 +3218,7 @@ msgstr "för mÃ¥nga värden att packa upp (förväntat %d)" msgid "trapz is defined for 1D arrays of equal length" msgstr "" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "tupelindex utanför intervallet" @@ -3255,10 +3226,6 @@ msgstr "tupelindex utanför intervallet" msgid "tuple/list has wrong length" msgstr "tupel/lista har fel längd" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "tupel/lista krävs för RHS" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3314,9 +3281,8 @@ msgid "unknown conversion specifier %c" msgstr "okänd konverteringsspecificerare %c" #: py/objstr.c -#, c-format -msgid "unknown format code '%c' for object of type '%s'" -msgstr "okänt format '%c' för objekt av typ '%s'" +msgid "unknown format code '%c' for object of type '%q'" +msgstr "" #: py/compile.c msgid "unknown type" @@ -3355,16 +3321,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "Formattecknet '%c' (0x%x) stöds inte vid index %d" #: py/runtime.c -msgid "unsupported type for %q: '%s'" -msgstr "typ som inte stöds för %q: '%s'" +msgid "unsupported type for %q: '%q'" +msgstr "" #: py/runtime.c msgid "unsupported type for operator" msgstr "typ stöds inte för operatören" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" -msgstr "typ som inte stöds för %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" +msgstr "" #: py/objint.c #, c-format @@ -3443,15 +3409,129 @@ msgstr "zi mÃ¥ste vara av typ float" msgid "zi must be of shape (n_section, 2)" msgstr "zi mÃ¥ste vara i formen (n_section, 2)" +#~ msgid "tuple/list required on RHS" +#~ msgstr "tupel/lista krävs för RHS" + +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "Indexet %q mÃ¥ste vara ett heltal, inte %s" + +#~ msgid "'%s' object cannot assign attribute '%q'" +#~ msgstr "Objektet '%s' kan inte tilldela attributet '%q'" + +#~ msgid "'%s' object does not support '%q'" +#~ msgstr "Objektet '%s' har inte stöd för '%q'" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "Objektet '%s' stöder inte tilldelningen" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "Objektet '%s' stöder inte borttagning av objekt" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "Objektet '%s' har inget attribut '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "Objektet '%s' är inte en iterator" + +#~ msgid "'%s' object is not callable" +#~ msgstr "Objektet '%s' kan inte anropas" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "Objektet '%s' är inte itererable" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "Objektet '%s' är inte indexbar" + +#~ msgid "Invalid I2C pin selection" +#~ msgstr "Ogiltigt val av I2C-pinne" + +#~ msgid "Invalid SPI pin selection" +#~ msgstr "Ogiltigt val av SPI-pinne" + +#~ msgid "Invalid UART pin selection" +#~ msgstr "Ogiltigt val av UART-pinne" + +#~ msgid "Pop from an empty Ps2 buffer" +#~ msgstr "Pop frÃ¥n en tom Ps2-buffert" + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Kör i säkert läge! Autoladdning är avstängd.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "Kör i säkert läge! Sparad kod körs inte.\n" + +#~ msgid "__init__() should return None, not '%s'" +#~ msgstr "__init __ () ska returnera None, inte '%s'" + +#~ msgid "can't convert %s to complex" +#~ msgstr "kan inte konvertera %s till komplex" + +#~ msgid "can't convert %s to float" +#~ msgstr "kan inte konvertera %s till float" + +#~ msgid "can't convert %s to int" +#~ msgstr "kan inte konvertera %s till int" + +#~ msgid "can't convert NaN to int" +#~ msgstr "kan inte konvertera NaN till int" + +#~ msgid "can't convert address to int" +#~ msgstr "kan inte konvertera address till int" + +#~ msgid "can't convert inf to int" +#~ msgstr "kan inte konvertera inf till int" + +#~ msgid "can't convert to complex" +#~ msgstr "kan inte konvertera till komplex" + +#~ msgid "can't convert to float" +#~ msgstr "kan inte konvertera till float" + +#~ msgid "can't convert to int" +#~ msgstr "kan inte konvertera till int" + +#~ msgid "object '%s' is not a tuple or list" +#~ msgstr "objektet '%s' är inte en tupel eller lista" + +#~ msgid "object of type '%s' has no len()" +#~ msgstr "objekt av typen '%s' har ingen len()" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "pop frÃ¥n en tom PulseIn" + +#~ msgid "pop from an empty set" +#~ msgstr "pop frÃ¥n en tom uppsättning" + +#~ msgid "pop from empty list" +#~ msgstr "pop frÃ¥n tom lista" + +#~ msgid "popitem(): dictionary is empty" +#~ msgstr "popitem(): ordlistan är tom" + +#~ msgid "string index out of range" +#~ msgstr "strängindex utanför intervallet" + +#~ msgid "string indices must be integers, not %s" +#~ msgstr "strängindex mÃ¥ste vara heltal, inte %s" + +#~ msgid "struct: index out of range" +#~ msgstr "struct: index utanför intervallet" + +#~ msgid "unknown format code '%c' for object of type '%s'" +#~ msgstr "okänt format '%c' för objekt av typ '%s'" + +#~ msgid "unsupported type for %q: '%s'" +#~ msgstr "typ som inte stöds för %q: '%s'" + +#~ msgid "unsupported types for %q: '%s', '%s'" +#~ msgstr "typ som inte stöds för %q: '%s', '%s'" + #~ msgid "'%q' object is not bytes-like" #~ msgstr "%q-objektet är inte byte-lik" #~ msgid "'async for' or 'async with' outside async function" #~ msgstr "'async for' eller 'async with' utanför async-funktion" -#~ msgid "PulseOut not supported on this chip" -#~ msgstr "PulseIn stöds inte av detta chip" - #~ msgid "PulseIn not supported on this chip" #~ msgstr "PulseIn stöds inte av detta chip" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 32928976d..725491f5b 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: circuitpython-cn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-28 16:57-0500\n" +"POT-Creation-Date: 2020-08-18 11:19-0400\n" "PO-Revision-Date: 2019-04-13 10:10-0700\n" "Last-Translator: hexthat\n" "Language-Team: Chinese Hanyu Pinyin\n" @@ -63,30 +63,35 @@ msgstr "%%c xÅ«yà o zhÄ›ngshù huò char" #, c-format msgid "%d address pins and %d rgb pins indicate a height of %d, not %d" msgstr "" +"%d dìzhÇ yÇn jiÇŽo hé %d rgb yÇn jiÇŽo jiÄng gÄodù biÇŽoshì wèi %d, ér bùshì %d" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q failure: %d" -msgstr "" +msgstr "%q ShÄ«bà i: %d" #: shared-bindings/microcontroller/Pin.c msgid "%q in use" msgstr "%q zhèngzà i shÇyòng" -#: py/obj.c +#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c +#: ports/cxd56/common-hal/pulseio/PulseIn.c +#: ports/nrf/common-hal/pulseio/PulseIn.c +#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c +#: py/objstrunicode.c msgid "%q index out of range" msgstr "%q suÇ’yÇn chÄochÅ« fà nwéi" #: py/obj.c -msgid "%q indices must be integers, not %s" -msgstr "%q suÇ’yÇn bìxÅ« shì zhÄ›ngshù, ér bùshì %s" +msgid "%q indices must be integers, not %q" +msgstr "%q suÇ’yÇn bìxÅ« shì zhÄ›ngshù, ér bùshì %q" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" -msgstr "" +msgstr "%q lièbiÇŽo bìxÅ« shì lièbiÇŽo" #: shared-bindings/memorymonitor/AllocationAlarm.c msgid "%q must be >= 0" -msgstr "" +msgstr "%q BìxÅ« > = 0" #: shared-bindings/_bleio/CharacteristicBuffer.c #: shared-bindings/_bleio/PacketBuffer.c shared-bindings/displayio/Group.c @@ -98,11 +103,11 @@ msgstr "%q bìxÅ« dà yú huò dÄ›ngyú 1" #: shared-module/vectorio/Polygon.c msgid "%q must be a tuple of length 2" -msgstr "" +msgstr "%q bìxÅ« shì chángdù wèi 2 de yuán zÇ”" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q pin invalid" -msgstr "" +msgstr "%q yÇn jiÇŽo wúxià o" #: shared-bindings/fontio/BuiltinFont.c msgid "%q should be an int" @@ -116,6 +121,42 @@ msgstr "%q() cÇŽiyòng %d wèizhì cÄnshù, dà n gÄ›i chÅ« %d" msgid "'%q' argument required" msgstr "xÅ«yà o '%q' cÄnshù" +#: py/runtime.c +msgid "'%q' object cannot assign attribute '%q'" +msgstr "'%q' duì xià ng wú fÇŽ fÄ“n pèi shÇ” xìng '%q'" + +#: py/proto.c +msgid "'%q' object does not support '%q'" +msgstr "'%q' duì xià ng bù zhÄ« chà '%q'" + +#: py/obj.c +msgid "'%q' object does not support item assignment" +msgstr "'%q' duì xià ng bù zhÄ« chà xià ng mù fÄ“n pèi" + +#: py/obj.c +msgid "'%q' object does not support item deletion" +msgstr "'%q' duì xià ng bù zhÄ« chà xià ng mù shÄn chú" + +#: py/runtime.c +msgid "'%q' object has no attribute '%q'" +msgstr "%q' duì xià ng méi yÇ’u shÇ” xìng %q'" + +#: py/runtime.c +msgid "'%q' object is not an iterator" +msgstr "%q' duì xià ng bù shì yà gè liú lÇŽn qì" + +#: py/objtype.c py/runtime.c +msgid "'%q' object is not callable" +msgstr "%q' duì xià ng bù kÄ› dià o yòng" + +#: py/runtime.c +msgid "'%q' object is not iterable" +msgstr "%q' duì xià ng bù kÄ› yà dòng" + +#: py/obj.c +msgid "'%q' object is not subscriptable" +msgstr "%q' duì xià ng bù kÄ› xià biÄo" + #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" @@ -166,48 +207,6 @@ msgstr "'%s' zhÄ›ngshù %d bùzà i fà nwéi nèi %d.%d" msgid "'%s' integer 0x%x does not fit in mask 0x%x" msgstr "'%s' zhÄ›ngshù 0x%x bù shìyòng yú yÇŽn mÇŽ 0x%x" -#: py/runtime.c -msgid "'%s' object cannot assign attribute '%q'" -msgstr "" - -#: py/proto.c -msgid "'%s' object does not support '%q'" -msgstr "'%s' duì xià ng bù zhÄ«chà '%q'" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item assignment" -msgstr "'%s' duìxià ng bù zhÄ«chà xià ngmù fÄ“npèi" - -#: py/obj.c -#, c-format -msgid "'%s' object does not support item deletion" -msgstr "'%s' duìxià ng bù zhÄ«chà shÄnchú xià ngmù" - -#: py/runtime.c -msgid "'%s' object has no attribute '%q'" -msgstr "'%s' duìxià ng méiyÇ’u shÇ”xìng '%q'" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not an iterator" -msgstr "'%s' duìxià ng bùshì yÄ«gè diédà i qì" - -#: py/objtype.c py/runtime.c -#, c-format -msgid "'%s' object is not callable" -msgstr "'%s' duìxià ng wúfÇŽ dià oyòng" - -#: py/runtime.c -#, c-format -msgid "'%s' object is not iterable" -msgstr "'%s' duìxià ng bùnéng diédà i" - -#: py/obj.c -#, c-format -msgid "'%s' object is not subscriptable" -msgstr "'%s' duìxià ng bùnéng fÄ“nshù" - #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" msgstr "zìfú chuà n géshì shuÅmÃng fú zhÅng bù yÇ”nxÇ” '=' duìqÃ" @@ -226,7 +225,7 @@ msgstr "'await' wà ibù gÅngnéng" #: py/compile.c msgid "'await', 'async for' or 'async with' outside async function" -msgstr "" +msgstr "'await', 'async for' huò 'async with' wà i bù yì bù hán shù" #: py/compile.c msgid "'break' outside loop" @@ -238,7 +237,7 @@ msgstr "'continue' wà ibù xúnhuán" #: py/objgenerator.c msgid "'coroutine' object is not an iterator" -msgstr "" +msgstr "'coroutine' duì xià ng bù shì yà gè liú lÇŽn qì" #: py/compile.c msgid "'data' requires at least 2 arguments" @@ -333,7 +332,7 @@ msgstr "Mùqián zhèngzà i guÇŽngbò" #: shared-module/memorymonitor/AllocationAlarm.c #: shared-module/memorymonitor/AllocationSize.c msgid "Already running" -msgstr "" +msgstr "yÇ zà i yùn xÃng" #: ports/cxd56/common-hal/analogio/AnalogIn.c msgid "AnalogIn not supported on given pin" @@ -368,12 +367,12 @@ msgstr "ShùzÇ” zhà yÄ«nggÄi shì dÄngè zì jié." #: shared-bindings/microcontroller/Pin.c msgid "At most %d %q may be specified (not %d)" -msgstr "" +msgstr "zuì duÅ kÄ› yÇ zhÇ dìng %d %q (bù shì %d)" #: shared-module/memorymonitor/AllocationAlarm.c #, c-format msgid "Attempt to allocate %d blocks" -msgstr "" +msgstr "cháng shì fÄ“n pèi %d kuà i" #: supervisor/shared/safe_mode.c msgid "Attempted heap allocation when MicroPython VM not running." @@ -406,7 +405,7 @@ msgstr "BÇtè shÄ“ndù bìxÅ« shì 8 bèi yÇshà ng." #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "Both RX and TX required for flow control" -msgstr "" +msgstr "liú lià ng kòng zhì suÇ’ xÅ« de RX hé TX" #: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c msgid "Both pins must support hardware interrupts" @@ -455,7 +454,11 @@ msgstr "HuÇŽnchÅng qÅ« chángdù%d tà i dà . TÄ bìxÅ« xiÇŽoyú%d" #: ports/atmel-samd/common-hal/sdioio/SDCard.c #: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" -msgstr "" +msgstr "HuÇŽn chÅng qÅ« cháng dù bì xÅ« wéi 512 de bèi shù" + +#: ports/stm/common-hal/sdioio/SDCard.c +msgid "Buffer must be a multiple of 512 bytes" +msgstr "HuÇŽn chÅng qÅ« bì xÅ« shì 512 zì jié de bèi shù" #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" @@ -463,12 +466,12 @@ msgstr "HuÇŽnchÅng qÅ« bìxÅ« zhìshÇŽo chángdù 1" #: ports/nrf/common-hal/_bleio/PacketBuffer.c msgid "Buffer too large and unable to allocate" -msgstr "huÇŽn chÅng qÅ« tà i dà , wú fÇŽ fÄ“n pèi" +msgstr "HuÇŽn chÅng qÅ« tà i dà , wú fÇŽ fÄ“n pèi" #: shared-bindings/_bleio/PacketBuffer.c #, c-format msgid "Buffer too short by %d bytes" -msgstr "" +msgstr "HuÇŽn chÅng qÅ« tà i duÇŽn , à n %d zì jié" #: ports/atmel-samd/common-hal/displayio/ParallelBus.c #: ports/nrf/common-hal/displayio/ParallelBus.c @@ -486,7 +489,7 @@ msgstr "Zì jié bìxÅ« jiè yú 0 dà o 255 zhÄ« jiÄn." #: shared-bindings/aesio/aes.c msgid "CBC blocks must be multiples of 16 bytes" -msgstr "" +msgstr "CBC kuà i bì xÅ« shì 16 zì jié de bèi shù" #: py/objtype.c msgid "Call super().__init__() before accessing native object." @@ -544,7 +547,7 @@ msgstr "DÄng fÄngxià ng xià ng nèi shÃ, bùnéng shèzhì gÄi zhÃ." #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "Cannot specify RTS or CTS in RS485 mode" -msgstr "" +msgstr "wú fÇŽ zà i RS485 mó shì xià zhÇ dìng RTS huò CTS" #: py/objslice.c msgid "Cannot subclass slice" @@ -619,11 +622,11 @@ msgstr "SÇ”nhuà i de yuánshÇ dà imÇŽ" #: ports/cxd56/common-hal/gnss/GNSS.c msgid "Could not initialize GNSS" -msgstr "" +msgstr "wú fÇŽ chÅ« shÇ huà GNSS" #: ports/cxd56/common-hal/sdioio/SDCard.c msgid "Could not initialize SDCard" -msgstr "" +msgstr "wú fÇŽ chÅ« shÇ huà SDCard" #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" @@ -649,6 +652,10 @@ msgstr "WúfÇŽ chóngxÄ«n qÇdòng jìshà qì" msgid "Could not restart PWM" msgstr "WúfÇŽ chóngqÇ PWM" +#: shared-bindings/_bleio/Adapter.c +msgid "Could not set address" +msgstr "wú fÇŽ shè zhì dì zhÇ" + #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" msgstr "WúfÇŽ qÇdòng PWM" @@ -733,7 +740,7 @@ msgstr "FÄngxià ng shÅ«rù shà qÅ«dòng móshì méiyÇ’u shÇyòng." #: shared-bindings/aesio/aes.c msgid "ECB only operates on 16 bytes at a time" -msgstr "" +msgstr "ECB yà cì zhÇ shÇ yòng 16 gè zì jié" #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c #: ports/atmel-samd/common-hal/ps2io/Ps2.c @@ -748,7 +755,7 @@ msgstr "Zhèngzé biÇŽodá shì cuòwù" #: shared-bindings/aesio/aes.c shared-bindings/busio/SPI.c #: shared-bindings/microcontroller/Pin.c -#: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c +#: shared-bindings/neopixel_write/__init__.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" msgstr "Yùqà %q" @@ -782,7 +789,7 @@ msgstr "Bù zhÄ«chà dà i yÇ’u sÇŽomiáo xiÇŽngyìng de kuòzhÇŽn guÇŽngbò." #: extmod/ulab/code/fft/fft.c msgid "FFT is defined for ndarrays only" -msgstr "" +msgstr "FFT jÇn wéi ndarrays dìng yì" #: shared-bindings/ps2io/Ps2.c msgid "Failed sending command." @@ -831,6 +838,11 @@ msgstr "WúfÇŽ xiÄ› rù nèibù shÇŽncún." msgid "File exists" msgstr "Wénjià n cúnzà i" +#: shared-module/framebufferio/FramebufferDisplay.c +#, c-format +msgid "Framebuffer requires %d bytes" +msgstr "zhÄ“n huÇŽn chÅng qÅ« xÅ« yà o %d zì jié" + #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." msgstr "PÃnlÇœ bÇ”huò gÄo yú nénglì. BÇ”huò zà ntÃng." @@ -855,7 +867,7 @@ msgid "Group full" msgstr "FÄ“nzÇ” yÇ mÇŽn" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware busy, try alternative pins" msgstr "Yìngjià n máng, qÇng chángshì qÃtÄ zhÄ“njiÇŽo" @@ -871,10 +883,14 @@ msgstr "Wénjià n shà ng de I/ O cÄozuò" msgid "I2C Init Error" msgstr "I2C chÅ«shÇhuà cuòwù" +#: shared-bindings/audiobusio/I2SOut.c +msgid "I2SOut not available" +msgstr "I2SOut bù kÄ› yòng" + #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" -msgstr "" +msgstr "IV bì xÅ« wéi %d zì jié cháng" #: py/persistentcode.c msgid "" @@ -907,17 +923,22 @@ msgstr "Nèibù dìngyì cuòwù" #: shared-module/rgbmatrix/RGBMatrix.c #, c-format msgid "Internal error #%d" -msgstr "" +msgstr "nèi bù cuò wù #%d" #: shared-bindings/sdioio/SDCard.c msgid "Invalid %q" -msgstr "" +msgstr "wú xià o %q" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c msgid "Invalid %q pin" msgstr "Wúxià o de %q yÇn jiÇŽo" +#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c +msgid "Invalid %q pin selection" +msgstr "wú xià o %q yÇn jiÇŽo xuÇŽn zé" + #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" msgstr "Wúxià o de ADC dÄnwèi zhÃ" @@ -930,24 +951,12 @@ msgstr "Wúxià o de BMP wénjià n" msgid "Invalid DAC pin supplied" msgstr "Tà gÅng liÇŽo wúxià o de DAC yÇn jiÇŽo" -#: ports/stm/common-hal/busio/I2C.c -msgid "Invalid I2C pin selection" -msgstr "Wúxià o de I2C yÇn jiÇŽo xuÇŽnzé" - #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c #: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c msgid "Invalid PWM frequency" msgstr "Wúxià o de PWM pÃnlÇœ" -#: ports/stm/common-hal/busio/SPI.c -msgid "Invalid SPI pin selection" -msgstr "Wúxià o de SPI yÇn jiÇŽo xuÇŽnzé" - -#: ports/stm/common-hal/busio/UART.c -msgid "Invalid UART pin selection" -msgstr "Wúxià o de UART yÇn jiÇŽo xuÇŽnzé" - #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" msgstr "Wúxià o de cÄnshù" @@ -1029,7 +1038,7 @@ msgstr "Wúxià o de yÇn jiÇŽo" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Invalid pins for PWMOut" -msgstr "" +msgstr "PWMOut de yÇn jiÇŽo wú xià o" #: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c #: shared-bindings/displayio/FourWire.c @@ -1066,7 +1075,7 @@ msgstr "Wúxià o de zì/wèi chángdù" #: shared-bindings/aesio/aes.c msgid "Key must be 16, 24, or 32 bytes long" -msgstr "" +msgstr "mì yà o bì xÅ« wéi 16, 24 huò 32 zì jié cháng" #: py/compile.c msgid "LHS of keyword arg must be an id" @@ -1127,16 +1136,16 @@ msgstr "BìxÅ« tÃgÅng MISO huò MOSI yÇn jiÇŽo" #: ports/stm/common-hal/busio/SPI.c msgid "Must provide SCK pin" -msgstr "" +msgstr "bì xÅ« tà gòng SCK yÇn jiÇŽo" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" -msgstr "" +msgstr "bì xÅ« shÇ yòng 6 RGB yÇn jiÇŽo de bèi shù, ér bù shì %d" #: py/parse.c msgid "Name too long" -msgstr "" +msgstr "MÃngchÄ“ng tà i zhÇŽng" #: ports/nrf/common-hal/_bleio/Characteristic.c msgid "No CCCD for this Characteristic" @@ -1178,7 +1187,7 @@ msgstr "MéiyÇ’u kÄ›yòng de shÃzhÅng" #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" -msgstr "" +msgstr "Wú liánjiÄ“: WúfÇŽ quèdìng chángdù" #: shared-bindings/board/__init__.c msgid "No default %q bus" @@ -1203,11 +1212,11 @@ msgstr "MéiyÇ’u zà i yÇn jiÇŽo shà ng de yìngjià n zhÄ«chÃ" #: shared-bindings/aesio/aes.c msgid "No key was specified" -msgstr "" +msgstr "Wèi zhÇdìng mì yà o" #: shared-bindings/time/__init__.c msgid "No long integer support" -msgstr "" +msgstr "MéiyÇ’u zhÇŽng zhÄ›ngshù zhÄ«chÃ" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "No more timers available on this pin." @@ -1227,7 +1236,7 @@ msgstr "MéiyÇ’u cÇ lèi wénjià n/mùlù" #: shared-module/rgbmatrix/RGBMatrix.c msgid "No timer available" -msgstr "" +msgstr "MéiyÇ’u jìshà qì" #: supervisor/shared/safe_mode.c msgid "Nordic Soft Device failure assertion." @@ -1243,6 +1252,10 @@ msgstr "Wèi liánjiÄ“" msgid "Not playing" msgstr "Wèi bòfà ng" +#: main.c +msgid "Not running saved code.\n" +msgstr "MéiyÇ’u yùnxÃng yÇ bÇŽocún de dà imÇŽ.\n" + #: shared-bindings/util.c msgid "" "Object has been deinitialized and can no longer be used. Create a new object." @@ -1308,15 +1321,15 @@ msgstr "Pin méiyÇ’u ADC nénglì" #: shared-bindings/digitalio/DigitalInOut.c msgid "Pin is input only" -msgstr "" +msgstr "YÇn jiÇŽo jÇn shÅ«rù" #: ports/atmel-samd/common-hal/countio/Counter.c msgid "Pin must support hardware interrupts" -msgstr "" +msgstr "YÇn jiÇŽo bìxÅ« zhÄ«chà yìngjià n zhÅngduà n" #: ports/stm/common-hal/pulseio/PulseIn.c msgid "Pin number already reserved by EXTI" -msgstr "" +msgstr "ZhÄ“n hà o yÇ bèi EXTI bÇŽoliú" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format @@ -1325,6 +1338,9 @@ msgid "" "bytes. If this cannot be avoided, pass allow_inefficient=True to the " "constructor" msgstr "" +"ChÄjiÇŽo mÄ›i gè yuánsù shÇyòng%d gè zì jié, zhè bÇ lÇxiÇŽng de%d xiÄohà o gèng " +"duÅzì jié. RúguÇ’ wúfÇŽ bìmiÇŽn, qÇng jiÄng allow_inefficient = True chuándì " +"gÄ›igòuzà o hánshù" #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" @@ -1332,11 +1348,16 @@ msgstr "Zà i wénjià n xìtÇ’ng shà ng tiÄnjiÄ rènhé mókuà i\n" #: shared-module/vectorio/Polygon.c msgid "Polygon needs at least 3 points" -msgstr "" +msgstr "DuÅbiÄnxÃng zhìshÇŽo xÅ«yà o 3 diÇŽn" -#: shared-bindings/ps2io/Ps2.c -msgid "Pop from an empty Ps2 buffer" -msgstr "Cóng kÅng de Ps2 huÇŽnchÅng qÅ« dà nchÅ«" +#: ports/atmel-samd/common-hal/pulseio/PulseOut.c +#: ports/cxd56/common-hal/pulseio/PulseOut.c +#: ports/nrf/common-hal/pulseio/PulseOut.c +#: ports/stm/common-hal/pulseio/PulseOut.c +msgid "" +"Port does not accept pins or frequency. " +"Construct and pass a PWMOut Carrier instead" +msgstr "" #: shared-bindings/_bleio/Adapter.c msgid "Prefix buffer must be on the heap" @@ -1350,6 +1371,10 @@ msgstr "Àn xià rènhé jià n jìnrù REPL. ShÇyòng CTRL-D chóngxÄ«n jiÄzà msgid "Pull not used when direction is output." msgstr "FÄngxià ng shÅ«chÅ« shà Pull méiyÇ’u shÇyòng." +#: ports/stm/ref/pulseout-pre-timeralloc.c +msgid "PulseOut not supported on this chip" +msgstr "" + #: ports/stm/common-hal/os/__init__.c msgid "RNG DeInit Error" msgstr "RNG qÇ”xiÄo chÅ«shÇhuà cuòwù" @@ -1360,7 +1385,7 @@ msgstr "RNG chÅ«shÇhuà cuòwù" #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "RS485 inversion specified when not in RS485 mode" -msgstr "" +msgstr "Wèi chÇ”yú RS485 móshì shà zhÇdìngle RS485 fÇŽn zhuÇŽn" #: ports/cxd56/common-hal/rtc/RTC.c ports/mimxrt10xx/common-hal/rtc/RTC.c #: ports/nrf/common-hal/rtc/RTC.c @@ -1374,7 +1399,7 @@ msgstr "CÇ bÇŽn bù zhÄ«chà RTC" #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c #: ports/nrf/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c msgid "RTS/CTS/RS485 Not yet supported on this device" -msgstr "" +msgstr "RTS/CTS/RS485 gÄi shèbèi shà ng bù zhÄ«chÃ" #: ports/stm/common-hal/os/__init__.c msgid "Random number generation error" @@ -1399,7 +1424,7 @@ msgstr "ShuÄxÄ«n tà i kuà ile" #: shared-bindings/aesio/aes.c msgid "Requested AES mode is unsupported" -msgstr "" +msgstr "QÇngqiú de AES móshì bù shòu zhÄ«chÃ" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "Right channel unsupported" @@ -1410,22 +1435,28 @@ msgid "Row entry must be digitalio.DigitalInOut" msgstr "XÃng xià ng bìxÅ« shì digitalio.DigitalInOut" #: main.c -msgid "Running in safe mode! Auto-reload is off.\n" -msgstr "Zà i Änquán móshì xià yùnxÃng! Zìdòng chóngxÄ«n jiÄzà i yÇ guÄnbì.\n" - -#: main.c -msgid "Running in safe mode! Not running saved code.\n" -msgstr "Zà i Änquán móshì xià yùnxÃng! Bù yùnxÃng yÇ bÇŽocún de dà imÇŽ.\n" +msgid "Running in safe mode! " +msgstr "Zà i Änquán móshì xià yùnxÃng!" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" -msgstr "" +msgstr "Bù zhÄ«chà SD kÇŽ CSD géshì" #: ports/atmel-samd/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/I2C.c ports/nrf/common-hal/busio/I2C.c msgid "SDA or SCL needs a pull up" msgstr "SDA huò SCL xÅ«yà o lÄdòng" +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO GetCardInfo Error %d" +msgstr "SDIO GetCardInfo Cuòwù %d" + +#: ports/stm/common-hal/sdioio/SDCard.c +#, c-format +msgid "SDIO Init Error %d" +msgstr "SDIO Init Cuòwù %d" + #: ports/stm/common-hal/busio/SPI.c msgid "SPI Init Error" msgstr "SPI chÅ«shÇhuà cuòwù" @@ -1449,11 +1480,11 @@ msgstr "Zhèngzà i jìn háng sÇŽomiáo. ShÇyòng stop_scan tÃngzhÇ." #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "Selected CTS pin not valid" -msgstr "" +msgstr "SuÇ’ xuÇŽn de CTS yÇn jiÇŽo wúxià o" #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "Selected RTS pin not valid" -msgstr "" +msgstr "SuÇ’ xuÇŽn de RTS yÇn jiÇŽo wúxià o" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c @@ -1473,7 +1504,7 @@ msgstr "QiÄ“pià n bù shòu zhÄ«chÃ" #: shared-bindings/aesio/aes.c msgid "Source and destination buffers must be the same length" -msgstr "" +msgstr "Yuán huÇŽnchÅng qÅ« hé mùbiÄo huÇŽnchÅng qÅ« de chángdù bìxÅ« xiÄngtóng" #: extmod/modure.c msgid "Splitting with sub-captures" @@ -1493,11 +1524,11 @@ msgstr "Dìngyì zhìshÇŽo yÄ«gè UART yÇn jiÇŽo" #: shared-bindings/gnss/GNSS.c msgid "System entry must be gnss.SatelliteSystem" -msgstr "" +msgstr "XìtÇ’ng tiáomù bìxÅ« shì gnss.SatelliteSystem" #: ports/stm/common-hal/microcontroller/Processor.c msgid "Temperature read timed out" -msgstr "" +msgstr "WÄ“ndù dòu qÇ” chÄoshÃ" #: supervisor/shared/safe_mode.c msgid "" @@ -1560,12 +1591,14 @@ msgstr "PÃng pÅ« kuÄndù bìxÅ« huà fÄ“n wèi tú kuÄndù" #: ports/nrf/common-hal/_bleio/Adapter.c #, c-format msgid "Timeout is too long: Maximum timeout length is %d seconds" -msgstr "" +msgstr "ChÄoshà shÃjiÄn tà i zhÇŽng: Zuìdà chÄoshà shÃjiÄn wèi%d miÇŽo" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "" "Timer was reserved for internal use - declare PWM pins earlier in the program" msgstr "" +"Dìngshà qì bÇŽoliú gÅng nèibù shÇyòng-zà i chéngxù de qiánmià n shÄ“ngmÃng PWM " +"yÇn jiÇŽo" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c msgid "Too many channels in sample." @@ -1581,7 +1614,7 @@ msgstr "XiÇŽnshì tà i duÅ" #: ports/nrf/common-hal/_bleio/PacketBuffer.c msgid "Total data to write is larger than outgoing_packet_length" -msgstr "" +msgstr "Yà o xiÄ› rù de zÇ’ng shùjù dà yú outgoing_packet_length" #: py/obj.c msgid "Traceback (most recent call last):\n" @@ -1731,7 +1764,7 @@ msgstr "Viper hánshù mùqián bù zhÄ«chà chÄoguò 4 gè cÄnshù" #: ports/stm/common-hal/microcontroller/Processor.c msgid "Voltage read timed out" -msgstr "" +msgstr "Dià nyÄ dòu qÇ” chÄoshÃ" #: main.c msgid "WARNING: Your code filename has two extensions\n" @@ -1739,23 +1772,24 @@ msgstr "JÇnggà o: NÇ de dà imÇŽ wénjià n mÃng yÇ’u liÇŽng gè kuòzhÇŽn mÃn #: shared-bindings/watchdog/WatchDogTimer.c msgid "WatchDogTimer cannot be deinitialized once mode is set to RESET" -msgstr "" +msgstr "YÄ«dà n jiÄng móshì shèzhì wèi RESET, jiù wúfÇŽ chÅ«shÇhuà WatchDog Timer" #: shared-bindings/watchdog/WatchDogTimer.c msgid "WatchDogTimer is not currently running" -msgstr "" +msgstr "WatchDogTimer dÄngqián wèi yùnxÃng" #: shared-bindings/watchdog/WatchDogTimer.c msgid "WatchDogTimer.mode cannot be changed once set to WatchDogMode.RESET" msgstr "" +"YÄ«dà n shèzhì wèi WatchDogMode.RESET, zé bùnéng gÄ“nggÇŽi WatchDogTimer.Mode." #: shared-bindings/watchdog/WatchDogTimer.c msgid "WatchDogTimer.timeout must be greater than 0" -msgstr "" +msgstr "WatchDogTimer.Timeout bìxÅ« dà yú 0" #: supervisor/shared/safe_mode.c msgid "Watchdog timer expired." -msgstr "" +msgstr "KÄn mén gÇ’u dìngshà qì yÇ guòqÃ." #: py/builtinhelp.c #, c-format @@ -1789,9 +1823,8 @@ msgid "__init__() should return None" msgstr "__init__() fÇŽnhuà not" #: py/objtype.c -#, c-format -msgid "__init__() should return None, not '%s'" -msgstr "__Init__() yÄ«nggÄi fÇŽnhuà not, ér bùshì '%s'" +msgid "__init__() should return None, not '%q'" +msgstr "__Init __() yÄ«nggÄi fÇŽnhuà None, ér bùshì '%q'" #: py/objobject.c msgid "__new__ arg must be a user-type" @@ -1820,7 +1853,7 @@ msgstr "dìzhÇ wèi kÅng" #: extmod/ulab/code/vector/vectorise.c msgid "arctan2 is implemented for scalars and ndarrays only" -msgstr "" +msgstr "arctan2 jÇn zhÄ“nduì biÄolià ng hé ndarray shÃxià n" #: py/modbuiltins.c msgid "arg is an empty sequence" @@ -1828,7 +1861,7 @@ msgstr "cÄnshù shì yÄ«gè kÅng de xùliè" #: extmod/ulab/code/numerical/numerical.c msgid "argsort argument must be an ndarray" -msgstr "" +msgstr "argsort cÄnshù bìxÅ« shì ndarray" #: py/runtime.c msgid "argument has wrong type" @@ -1836,7 +1869,7 @@ msgstr "cÄnshù lèixÃng cuòwù" #: extmod/ulab/code/linalg/linalg.c msgid "argument must be ndarray" -msgstr "" +msgstr "CÄnshù bìxÅ« shì ndarray" #: py/argcheck.c shared-bindings/_stage/__init__.c #: shared-bindings/digitalio/DigitalInOut.c shared-bindings/gamepad/GamePad.c @@ -1849,7 +1882,7 @@ msgstr "cÄnshù yÄ«nggÄi shì '%q', 'bùshì '%q'" #: extmod/ulab/code/linalg/linalg.c msgid "arguments must be ndarrays" -msgstr "" +msgstr "cÄnshù bìxÅ« shì ndarrays" #: py/objarray.c shared-bindings/nvm/ByteArray.c msgid "array/bytes required on right side" @@ -1857,7 +1890,7 @@ msgstr "yòu cè xÅ«yà o shùzÇ”/zì jié" #: extmod/ulab/code/numerical/numerical.c msgid "attempt to get argmin/argmax of an empty sequence" -msgstr "" +msgstr "chángshì huòqÇ” kÅng xùliè de argmin/ argmax" #: py/objstr.c msgid "attributes not supported yet" @@ -1865,15 +1898,15 @@ msgstr "shÇ”xìng shà ngwèi zhÄ«chÃ" #: extmod/ulab/code/numerical/numerical.c msgid "axis must be -1, 0, None, or 1" -msgstr "" +msgstr "zhóu bìxÅ« wèi-1,0, wú huò 1" #: extmod/ulab/code/numerical/numerical.c msgid "axis must be -1, 0, or 1" -msgstr "" +msgstr "zhóu bìxÅ« wèi-1,0 huò 1" #: extmod/ulab/code/numerical/numerical.c msgid "axis must be None, 0, or 1" -msgstr "" +msgstr "zhóu bìxÅ« wèi None,0 huò 1" #: py/builtinevex.c msgid "bad compile mode" @@ -1944,7 +1977,7 @@ msgstr "zì jié > 8 wèi" msgid "bytes value out of range" msgstr "zì jié zhà chÄochÅ« fà nwéi" -#: ports/atmel-samd/bindings/samd/Clock.c +#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c msgid "calibration is out of range" msgstr "jià ozhÇ”n fà nwéi chÄochÅ« fà nwéi" @@ -1976,48 +2009,18 @@ msgstr "wúfÇŽ tiÄnjiÄ tèshÅ« fÄngfÇŽ dà o zi fÄ“nlèi lèi" msgid "can't assign to expression" msgstr "bùnéng fÄ“npèi dà o biÇŽodá shì" -#: py/obj.c -#, c-format -msgid "can't convert %s to complex" -msgstr "wúfÇŽ zhuÇŽnhuà n%s dà o fùzá" - -#: py/obj.c -#, c-format -msgid "can't convert %s to float" -msgstr "wúfÇŽ zhuÇŽnhuà n %s dà o fú diÇŽn xÃng bià nlià ng" - -#: py/obj.c -#, c-format -msgid "can't convert %s to int" -msgstr "wúfÇŽ zhuÇŽnhuà n%s dà o int" +#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c +#: shared-module/_pixelbuf/PixelBuf.c +msgid "can't convert %q to %q" +msgstr "WúfÇŽ jiÄng %q zhuÇŽnhuà n wèi %q" #: py/objstr.c msgid "can't convert '%q' object to %q implicitly" msgstr "wúfÇŽ jiÄng '%q' duìxià ng zhuÇŽnhuà n wèi %q yÇn hán" -#: py/objint.c -msgid "can't convert NaN to int" -msgstr "wúfÇŽ jiÄng dÇŽoháng zhuÇŽnhuà n wèi int" - -#: shared-bindings/i2cperipheral/I2CPeripheral.c -msgid "can't convert address to int" -msgstr "wúfÇŽ jiÄng dìzhÇ zhuÇŽnhuà n wèi int" - -#: py/objint.c -msgid "can't convert inf to int" -msgstr "bùnéng jiÄng inf zhuÇŽnhuà n wèi int" - -#: py/obj.c -msgid "can't convert to complex" -msgstr "bùnéng zhuÇŽnhuà n wèi fùzá" - -#: py/obj.c -msgid "can't convert to float" -msgstr "bùnéng zhuÇŽnhuà n wèi fú diÇŽn" - #: py/obj.c -msgid "can't convert to int" -msgstr "bùnéng zhuÇŽnhuà n wèi int" +msgid "can't convert to %q" +msgstr "wúfÇŽ zhuÇŽnhuà n wèi %q" #: py/objstr.c msgid "can't convert to str implicitly" @@ -2069,7 +2072,7 @@ msgstr "wúfÇŽ xià ng gÄnggÄng qÇdòng de shÄ“ngchéng qì fÄsòng fÄ“i zhà #: shared-module/sdcardio/SDCard.c msgid "can't set 512 block size" -msgstr "" +msgstr "wúfÇŽ shèzhì 512 kuà i dà xiÇŽo" #: py/objnamedtuple.c msgid "can't set attribute" @@ -2115,7 +2118,7 @@ msgstr "wúfÇŽ zhÃxÃng xiÄngguÄn dÇŽorù" #: extmod/ulab/code/ndarray.c msgid "cannot reshape array (incompatible input/output shape)" -msgstr "" +msgstr "wúfÇŽ zhÄ›ngxÃng shùzÇ” (bù jiÄnróng de shÅ«rù/shÅ«chÅ« xÃngzhuà ng)" #: py/emitnative.c msgid "casting" @@ -2135,7 +2138,7 @@ msgstr "chr() cÄn shÇ” bùzà i fà nwéi (256)" #: shared-module/vectorio/Circle.c msgid "circle can only be registered in one parent" -msgstr "" +msgstr "quÄnzi zhÇ néng zà i yÄ« wèi jiÄzhÇŽng zhÅng zhùcè" #: shared-bindings/displayio/Palette.c msgid "color buffer must be 3 bytes (RGB) or 4 bytes (RGB + pad byte)" @@ -2182,39 +2185,39 @@ msgstr "zhuÇŽnhuà n wèi duìxià ng" #: extmod/ulab/code/filter/filter.c msgid "convolve arguments must be linear arrays" -msgstr "" +msgstr "juà n jÄ« cÄnshù bìxÅ« shì xià nxìng shùzÇ”" #: extmod/ulab/code/filter/filter.c msgid "convolve arguments must be ndarrays" -msgstr "" +msgstr "juà n jÄ« cÄnshù bìxÅ« shì ndarrays" #: extmod/ulab/code/filter/filter.c msgid "convolve arguments must not be empty" -msgstr "" +msgstr "juà n jÄ« cÄn shÇ” bùnéng wéi kÅng" #: extmod/ulab/code/ndarray.c msgid "could not broadast input array from shape" -msgstr "" +msgstr "wúfÇŽ guÇŽngbò xÃngzhuà ng de shÅ«rù shùzÇ”" #: extmod/ulab/code/poly/poly.c msgid "could not invert Vandermonde matrix" -msgstr "" +msgstr "wúfÇŽ fÇŽn zhuÇŽn fà ndéméng dé jÇ”zhèn" #: shared-module/sdcardio/SDCard.c msgid "couldn't determine SD card version" -msgstr "" +msgstr "wúfÇŽ quèdìng SD kÇŽ bÇŽnbÄ›n" #: extmod/ulab/code/approx/approx.c msgid "data must be iterable" -msgstr "" +msgstr "shùjù bìxÅ« shì kÄ› diédà i de" #: extmod/ulab/code/approx/approx.c msgid "data must be of equal length" -msgstr "" +msgstr "shùjù chángdù bìxÅ« xiÄngdÄ›ng" #: extmod/ulab/code/numerical/numerical.c msgid "ddof must be smaller than length of data set" -msgstr "" +msgstr "ddof bìxÅ« xiÇŽoyú shùjù jà de chángdù" #: py/parsenum.c msgid "decimal numbers not supported" @@ -2244,7 +2247,7 @@ msgstr "yÇ”fÇŽ gÄ“ngxÄ«n xùliè de chángdù cuòwù" #: extmod/ulab/code/numerical/numerical.c msgid "diff argument must be an ndarray" -msgstr "" +msgstr "bùtóng de cÄnshù bìxÅ« shì ndarray" #: py/modmath.c py/objfloat.c py/objint_longlong.c py/objint_mpz.c py/runtime.c #: shared-bindings/math/__init__.c @@ -2318,23 +2321,23 @@ msgstr "gÄ›i chÅ«le éwà i de wèizhì cÄnshù" #: py/parse.c msgid "f-string expression part cannot include a '#'" -msgstr "" +msgstr "f-string biÇŽodá shì bùfèn bùnéng bÄohán '#'" #: py/parse.c msgid "f-string expression part cannot include a backslash" -msgstr "" +msgstr "f-string biÇŽodá shì bùfèn bùnéng bÄohán fÇŽn xié gÄng" #: py/parse.c msgid "f-string: empty expression not allowed" -msgstr "" +msgstr "f-string: bù yÇ”nxÇ” shÇyòng kÅng biÇŽodá shì" #: py/parse.c msgid "f-string: expecting '}'" -msgstr "" +msgstr "f-string: qÃdà i '}'" #: py/parse.c msgid "f-string: single '}' is not allowed" -msgstr "" +msgstr "f-string: bù yÇ”nxÇ” shÇyòng dÄngè '}'" #: shared-bindings/audiocore/WaveFile.c shared-bindings/audiomp3/MP3Decoder.c #: shared-bindings/displayio/OnDiskBitmap.c @@ -2347,19 +2350,19 @@ msgstr "wénjià n xìtÇ’ng bìxÅ« tÃgÅng guà zà i fÄngfÇŽ" #: extmod/ulab/code/vector/vectorise.c msgid "first argument must be a callable" -msgstr "" +msgstr "dì yÄ« gè cÄnshù bìxÅ« shì kÄ› tiáo yòng de" #: extmod/ulab/code/approx/approx.c msgid "first argument must be a function" -msgstr "" +msgstr "dì yÄ«gè cÄnshù bìxÅ« shì yÄ« gè hánshù" #: extmod/ulab/code/ndarray.c msgid "first argument must be an iterable" -msgstr "" +msgstr "dì yÄ« gè cÄnshù bìxÅ« shì kÄ› diédà i de" #: extmod/ulab/code/vector/vectorise.c msgid "first argument must be an ndarray" -msgstr "" +msgstr "dì yÄ« gè cÄnshù bìxÅ« shì ndarray" #: py/objtype.c msgid "first argument to super() must be type" @@ -2367,11 +2370,11 @@ msgstr "chÄojà () de dì yÄ« gè cÄnshù bìxÅ« shì lèixÃng" #: extmod/ulab/code/ndarray.c msgid "flattening order must be either 'C', or 'F'" -msgstr "" +msgstr "Ä«nhé shùnxù bìxÅ« wèi 'C' huò 'F'" #: extmod/ulab/code/numerical/numerical.c msgid "flip argument must be an ndarray" -msgstr "" +msgstr "fÄnzhuÇŽn shÄ“n shù bìxÅ« shì ndarray" #: py/objint.c msgid "float too big" @@ -2404,11 +2407,11 @@ msgstr "hánshù huòdé cÄnshù '%q' de duÅchóng zhÃ" #: extmod/ulab/code/approx/approx.c msgid "function has the same sign at the ends of interval" -msgstr "" +msgstr "hánshù zà i jià ngé mòwÄ›i jùyÇ’u xiÄngtóng de fúhà o" #: extmod/ulab/code/compare/compare.c msgid "function is implemented for scalars and ndarrays only" -msgstr "" +msgstr "gÄi hánshù jÇn zhÄ“nduì biÄolià ng hé ndarray shÃxià n" #: py/argcheck.c #, c-format @@ -2428,7 +2431,7 @@ msgstr "hánshù quÄ“shÇŽo suÇ’ xÅ« guÄnjià n zì cÄnshù '%q'" msgid "function missing required positional argument #%d" msgstr "hánshù quÄ“shÇŽo suÇ’ xÅ« de wèizhì cÄnshù #%d" -#: py/argcheck.c py/bc.c py/objnamedtuple.c +#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c #, c-format msgid "function takes %d positional arguments but %d were given" msgstr "hánshù xÅ«yà o %d gè wèizhì cÄnshù, dà n %d bèi gÄ›i chÅ«" @@ -2475,12 +2478,9 @@ msgstr "bù zhèngquè de tiánchÅng" #: extmod/ulab/code/ndarray.c msgid "index is out of bounds" -msgstr "" +msgstr "suÇ’yÇn chÄochÅ« fà nwéi" -#: ports/atmel-samd/common-hal/pulseio/PulseIn.c -#: ports/cxd56/common-hal/pulseio/PulseIn.c -#: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c +#: py/obj.c msgid "index out of range" msgstr "suÇ’yÇn chÄochÅ« fà nwéi" @@ -2490,11 +2490,11 @@ msgstr "suÇ’yÇn bìxÅ« shì zhÄ›ngshù" #: extmod/ulab/code/ndarray.c msgid "indices must be integers, slices, or Boolean lists" -msgstr "" +msgstr "suÇ’yÇn bìxÅ« shì zhÄ›ngshù, qiÄ“pià n huò bù'Ä›r zhà lièbiÇŽo" #: extmod/ulab/code/approx/approx.c msgid "initial values must be iterable" -msgstr "" +msgstr "chÅ«shÇ zhà bìxÅ« shì kÄ› diédà i de" #: py/compile.c msgid "inline assembler must be a function" @@ -2502,35 +2502,35 @@ msgstr "nèi lián jÃhé bìxÅ« shì yÄ«gè hánshù" #: extmod/ulab/code/ulab_create.c msgid "input argument must be an integer or a 2-tuple" -msgstr "" +msgstr "shÅ«rù cÄnshù bìxÅ« shì zhÄ›ngshù huò 2 yuán zÇ”" #: extmod/ulab/code/fft/fft.c msgid "input array length must be power of 2" -msgstr "" +msgstr "shÅ«rù shùzÇ” de chángdù bìxÅ« shì 2 de mì" #: extmod/ulab/code/poly/poly.c msgid "input data must be an iterable" -msgstr "" +msgstr "shÅ«rù shùjù bìxÅ« shì kÄ› diédà i de" #: extmod/ulab/code/linalg/linalg.c msgid "input matrix is asymmetric" -msgstr "" +msgstr "shÅ«rù jÇ”zhèn bù duìchèn" #: extmod/ulab/code/linalg/linalg.c msgid "input matrix is singular" -msgstr "" +msgstr "shÅ«rù jÇ”zhèn shì qÃyì de" #: extmod/ulab/code/linalg/linalg.c msgid "input must be square matrix" -msgstr "" +msgstr "shÅ«rù bìxÅ« wèi fÄng jÇ”zhèn" #: extmod/ulab/code/numerical/numerical.c msgid "input must be tuple, list, range, or ndarray" -msgstr "" +msgstr "shÅ«rù bìxÅ« shì yuán zÇ”, lièbiÇŽo, fà nwéi huò ndarray" #: extmod/ulab/code/poly/poly.c msgid "input vectors must be of equal length" -msgstr "" +msgstr "shÅ«rù xià nglià ng de chángdù bìxÅ« xiÄngdÄ›ng" #: py/parsenum.c msgid "int() arg 2 must be >= 2 and <= 36" @@ -2542,7 +2542,7 @@ msgstr "xÅ«yà o zhÄ›ngshù" #: extmod/ulab/code/approx/approx.c msgid "interp is defined for 1D arrays of equal length" -msgstr "" +msgstr "interp shì wèi dÄ›ng zhÇŽng de 1D shùzÇ” dìngyì de" #: shared-bindings/_bleio/Adapter.c #, c-format @@ -2608,11 +2608,11 @@ msgstr "issubclass() cÄnshù 2 bìxÅ« shì lèi de lèi huò yuán zÇ”" #: extmod/ulab/code/ndarray.c msgid "iterables are not of the same length" -msgstr "" +msgstr "kÄ› diédà i xià ng de chángdù bùtóng" #: extmod/ulab/code/linalg/linalg.c msgid "iterations did not converge" -msgstr "" +msgstr "diédà i méiyÇ’u shÅuliÇŽn" #: py/objstr.c msgid "join expects a list of str/bytes objects consistent with self object" @@ -2665,7 +2665,7 @@ msgstr "cÇ bÇŽnbÄ›n bù zhÄ«chà zhÇŽng zhÄ›ngshù" #: py/parse.c msgid "malformed f-string" -msgstr "" +msgstr "jÄ«xÃng de f-string" #: shared-bindings/_stage/Layer.c msgid "map buffer too small" @@ -2677,11 +2677,11 @@ msgstr "shùxué yù cuòwù" #: extmod/ulab/code/linalg/linalg.c msgid "matrix dimensions do not match" -msgstr "" +msgstr "jÇ”zhèn chÇcùn bù pÇpèi" #: extmod/ulab/code/linalg/linalg.c msgid "matrix is not positive definite" -msgstr "" +msgstr "jÇ”zhèn bùshì zhèngdìng de" #: ports/nrf/common-hal/_bleio/Characteristic.c #: ports/nrf/common-hal/_bleio/Descriptor.c @@ -2708,7 +2708,7 @@ msgstr "zhÇŽo bù dà o mókuà i" #: extmod/ulab/code/poly/poly.c msgid "more degrees of freedom than data points" -msgstr "" +msgstr "bÇ shùjù diÇŽn gèng duÅ de zìyóu dù" #: py/compile.c msgid "multiple *x in assignment" @@ -2732,7 +2732,7 @@ msgstr "bìxÅ« shÇyòng guÄnjià n cà cÄnshù" #: extmod/ulab/code/numerical/numerical.c msgid "n must be between 0, and 9" -msgstr "" +msgstr "n bìxÅ« jiè yú 0 dà o 9 zhÄ« jiÄn" #: py/runtime.c msgid "name '%q' is not defined" @@ -2766,7 +2766,7 @@ msgstr "fù zhuÇŽnyà jìshù" #: shared-module/sdcardio/SDCard.c msgid "no SD card" -msgstr "" +msgstr "méiyÇ’u SD kÇŽ" #: py/vm.c msgid "no active exception to reraise" @@ -2791,7 +2791,7 @@ msgstr "MéiyÇ’u kÄ›yòng de fùwèi yÇn jiÇŽo" #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" -msgstr "" +msgstr "SD kÇŽ wú huÃyÄ«ng" #: py/runtime.c msgid "no such attribute" @@ -2831,16 +2831,15 @@ msgstr "géshì zìfú chuà n cÄn shÇ” bùzú" #: extmod/ulab/code/poly/poly.c msgid "number of arguments must be 2, or 3" -msgstr "" +msgstr "cÄnshù shùlià ng bìxÅ« wèi 2 huò 3" #: extmod/ulab/code/ulab_create.c msgid "number of points must be at least 2" -msgstr "" +msgstr "diÇŽnshù bìxÅ« zhìshÇŽo wèi 2" #: py/obj.c -#, c-format -msgid "object '%s' is not a tuple or list" -msgstr "duìxià ng '%s' bùshì yuán zÇ” huò lièbiÇŽo" +msgid "object '%q' is not a tuple or list" +msgstr "duìxià ng '%q' bùshì yuán zÇ” huò lièbiÇŽo" #: py/obj.c msgid "object does not support item assignment" @@ -2875,9 +2874,8 @@ msgid "object not iterable" msgstr "duìxià ng bùnéng diédà i" #: py/obj.c -#, c-format -msgid "object of type '%s' has no len()" -msgstr "lèixÃng '%s' de duìxià ng méiyÇ’u chángdù" +msgid "object of type '%q' has no len()" +msgstr "lèixÃng '%q' de duìxià ng méiyÇ’u len()" #: py/obj.c msgid "object with buffer protocol required" @@ -2907,15 +2905,15 @@ msgstr "jÇn zhÄ«chà bù zhÇŽng = 1(jà wú) de qiÄ“pià n" #: extmod/ulab/code/compare/compare.c extmod/ulab/code/ndarray.c #: extmod/ulab/code/vector/vectorise.c msgid "operands could not be broadcast together" -msgstr "" +msgstr "cÄozuò shÇ” bùnéng yÄ«qÇ guÇŽngbò" #: extmod/ulab/code/numerical/numerical.c msgid "operation is not implemented on ndarrays" -msgstr "" +msgstr "cÄozuò wèi zà i ndarrays shà ng shÃxià n" #: extmod/ulab/code/ndarray.c msgid "operation is not supported for given type" -msgstr "" +msgstr "gÄ›i dìng lèixÃng bù zhÄ«chà gÄi cÄozuò" #: py/modbuiltins.c msgid "ord expects a character" @@ -2964,26 +2962,15 @@ msgstr "pixel_shader bìxÅ« shì displayio.Palette huò displayio.ColorConverter #: shared-module/vectorio/Polygon.c msgid "polygon can only be registered in one parent" -msgstr "" +msgstr "duÅbiÄnxÃng zhÄ« néng zà i yÄ«gè fù jà zhÅng zhùcè" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c -#: ports/stm/common-hal/pulseio/PulseIn.c -msgid "pop from an empty PulseIn" -msgstr "cóng kÅng de PulseIn dà nchÅ« dà nchÅ«" - -#: py/objset.c -msgid "pop from an empty set" -msgstr "cóng kÅng jà dà nchÅ«" - -#: py/objlist.c -msgid "pop from empty list" -msgstr "cóng kÅng lièbiÇŽo zhòng dà nchÅ«" - -#: py/objdict.c -msgid "popitem(): dictionary is empty" -msgstr "dà nchÅ« xià ngmù (): ZìdiÇŽn wèi kÅng" +#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c +#: shared-bindings/ps2io/Ps2.c +msgid "pop from empty %q" +msgstr "cóng kÅng %q dà nchÅ«" #: py/objint_mpz.c msgid "pow() 3rd argument cannot be 0" @@ -2999,11 +2986,11 @@ msgstr "duìliè yìchÅ«" #: py/parse.c msgid "raw f-strings are not implemented" -msgstr "" +msgstr "wèi zhÃxÃng yuánshÇ f-strings" #: extmod/ulab/code/fft/fft.c msgid "real and imaginary parts must be of equal length" -msgstr "" +msgstr "shà bù hé xÅ« bù bìxÅ« dÄ›ng zhÇŽng" #: py/builtinimport.c msgid "relative import" @@ -3025,16 +3012,16 @@ msgstr "fÇŽnhuà yùqà de '%q' dà n huòdéle '%q'" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "rgb_pins[%d] duplicates another pin assignment" -msgstr "" +msgstr "rgb_pins[%d] fùzhì lìng yÄ«gè yÇn jiÇŽo fÄ“npèi" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "rgb_pins[%d] is not on the same port as clock" -msgstr "" +msgstr "rgb_pins[%d] yÇ” shÃzhÅng bùzà i tóng yÄ«gè duÄnkÇ’u shà ng" #: extmod/ulab/code/ndarray.c msgid "right hand side must be an ndarray, or a scalar" -msgstr "" +msgstr "yòubiÄn bìxÅ« shì ndarray huò biÄolià ng" #: py/objstr.c msgid "rsplit(None,n)" @@ -3062,7 +3049,7 @@ msgstr "bù zhÄ«chà jiÇŽobÄ›n biÄnyì" #: extmod/ulab/code/ndarray.c msgid "shape must be a 2-tuple" -msgstr "" +msgstr "xÃngzhuà ng bìxÅ« shì 2 yuán zÇ”" #: py/objstr.c msgid "sign not allowed in string format specifier" @@ -3078,7 +3065,7 @@ msgstr "zà i géshì zìfú chuà n zhÅng yù dà o de dÄngè '}'" #: extmod/ulab/code/linalg/linalg.c msgid "size is defined for ndarrays only" -msgstr "" +msgstr "dà xiÇŽo jÇn wèi ndarrays dìngyì" #: shared-bindings/time/__init__.c msgid "sleep length must be non-negative" @@ -3086,7 +3073,7 @@ msgstr "shuìmián chángdù bìxÅ« shìfÄ“i fùshù" #: extmod/ulab/code/ndarray.c msgid "slice step can't be zero" -msgstr "" +msgstr "qiÄ“pià n bù cháng bùnéng wéi lÃng" #: py/objslice.c py/sequence.c msgid "slice step cannot be zero" @@ -3102,19 +3089,19 @@ msgstr "ruÇŽn chóngqÇ\n" #: extmod/ulab/code/numerical/numerical.c msgid "sort argument must be an ndarray" -msgstr "" +msgstr "páixù cÄnshù bìxÅ« shì ndarray" #: extmod/ulab/code/filter/filter.c msgid "sos array must be of shape (n_section, 6)" -msgstr "" +msgstr "sos shùzÇ” de xÃngzhuà ng bìxÅ« wèi (n_section, 6)" #: extmod/ulab/code/filter/filter.c msgid "sos[:, 3] should be all ones" -msgstr "" +msgstr "sos [:, 3] yÄ«nggÄi quán shì" #: extmod/ulab/code/filter/filter.c msgid "sosfilt requires iterable arguments" -msgstr "" +msgstr "sosfilt xÅ«yà o diédà i cÄnshù" #: py/objstr.c msgid "start/end indices" @@ -3141,13 +3128,8 @@ msgid "stream operation not supported" msgstr "bù zhÄ«chà liú cÄozuò" #: py/objstrunicode.c -msgid "string index out of range" -msgstr "zìfú chuà n suÇ’yÇn chÄochÅ« fà nwéi" - -#: py/objstrunicode.c -#, c-format -msgid "string indices must be integers, not %s" -msgstr "zìfú chuà n zhÇshù bìxÅ« shì zhÄ›ngshù, ér bùshì %s" +msgid "string indices must be integers, not %q" +msgstr "zìfú chuà n suÇ’yÇn bìxÅ« shì zhÄ›ngshù, ér bùshì %q" #: py/stream.c msgid "string not supported; use bytes or bytearray" @@ -3158,10 +3140,6 @@ msgid "struct: cannot index" msgstr "jiégòu: bùnéng suÇ’yÇn" #: extmod/moductypes.c -msgid "struct: index out of range" -msgstr "jiégòu: suÇ’yÇn chÄochÅ« fà nwéi" - -#: extmod/moductypes.c msgid "struct: no fields" msgstr "jiégòu: méiyÇ’u zìduà n" @@ -3191,7 +3169,7 @@ msgstr "time.struct_time() xÅ«yà o 9 xùliè" #: ports/nrf/common-hal/watchdog/WatchDogTimer.c msgid "timeout duration exceeded the maximum supported value" -msgstr "" +msgstr "chÄoshà shÃjiÄn chÄoguò zuìdà zhÄ«chà zhÃ" #: shared-bindings/busio/UART.c msgid "timeout must be 0.0-100.0 seconds" @@ -3203,11 +3181,11 @@ msgstr "chÄoshà bìxÅ« shì >= 0.0" #: shared-module/sdcardio/SDCard.c msgid "timeout waiting for v1 card" -msgstr "" +msgstr "dÄ›ngdà i v1 kÇŽ chÄoshÃ" #: shared-module/sdcardio/SDCard.c msgid "timeout waiting for v2 card" -msgstr "" +msgstr "dÄ›ngdà i v2 kÇŽ chÄoshÃ" #: shared-bindings/time/__init__.c msgid "timestamp out of range for platform time_t" @@ -3219,7 +3197,7 @@ msgstr "tÃgÅng jÇ dìng géshì de cÄnshù tà i duÅ" #: extmod/ulab/code/ndarray.c msgid "too many indices" -msgstr "" +msgstr "suÇ’yÇn tà i duÅ" #: py/runtime.c #, c-format @@ -3228,9 +3206,9 @@ msgstr "dÇŽkÄi tà i duÅ zhà (yùqà %d)" #: extmod/ulab/code/approx/approx.c msgid "trapz is defined for 1D arrays of equal length" -msgstr "" +msgstr "Trapz shì wèi dÄ›ng zhÇŽng de 1D shùzÇ” dìngyì de" -#: extmod/ulab/code/linalg/linalg.c py/objstr.c +#: extmod/ulab/code/linalg/linalg.c msgid "tuple index out of range" msgstr "yuán zÇ” suÇ’yÇn chÄochÅ« fà nwéi" @@ -3238,10 +3216,6 @@ msgstr "yuán zÇ” suÇ’yÇn chÄochÅ« fà nwéi" msgid "tuple/list has wrong length" msgstr "yuán zÇ”/lièbiÇŽo chángdù cuòwù" -#: shared-bindings/_pixelbuf/PixelBuf.c -msgid "tuple/list required on RHS" -msgstr "RHS yÄoqiú de yuán zÇ”/lièbiÇŽo" - #: ports/atmel-samd/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: shared-bindings/busio/UART.c msgid "tx and rx cannot both be None" @@ -3297,9 +3271,8 @@ msgid "unknown conversion specifier %c" msgstr "wèizhÄ« de zhuÇŽnhuà n biÄozhù %c" #: py/objstr.c -#, fuzzy, c-format -msgid "unknown format code '%c' for object of type '%s'" -msgstr "lèixÃng '%s' duìxià ng wèizhÄ« de géshì dà imÇŽ '%c'" +msgid "unknown format code '%c' for object of type '%q'" +msgstr "lèixÃng '%q' de duìxià ng de wèizhÄ« géshì dà imÇŽ '%c'" #: py/compile.c msgid "unknown type" @@ -3338,16 +3311,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d" msgstr "bù zhÄ«chà de géshì zìfú '%c' (0x%x) suÇ’yÇn %d" #: py/runtime.c -msgid "unsupported type for %q: '%s'" -msgstr "bù zhÄ«chà de lèixÃng %q: '%s'" +msgid "unsupported type for %q: '%q'" +msgstr "%q de bù shòu zhÄ«chà de lèixÃng: '%q'" #: py/runtime.c msgid "unsupported type for operator" msgstr "bù zhÄ«chà de cÄozuò zhÄ› lèixÃng" #: py/runtime.c -msgid "unsupported types for %q: '%s', '%s'" -msgstr "bù zhÄ«chà de lèixÃng wèi %q: '%s', '%s'" +msgid "unsupported types for %q: '%q', '%q'" +msgstr "%q bù zhÄ«chà de lèixÃng: '%q', '%q'" #: py/objint.c #, c-format @@ -3360,11 +3333,11 @@ msgstr "zhà jìshù bìxÅ« wèi > 0" #: extmod/ulab/code/linalg/linalg.c msgid "vectors must have same lengths" -msgstr "" +msgstr "xià nglià ng bìxÅ« jùyÇ’u xiÄngtóng de chángdù" #: shared-bindings/watchdog/WatchDogTimer.c msgid "watchdog timeout must be greater than 0" -msgstr "" +msgstr "kÄn mén gÇ’u chÄoshà bìxÅ« dà yú 0" #: shared-bindings/_bleio/Adapter.c msgid "window must be <= interval" @@ -3372,15 +3345,15 @@ msgstr "ChuÄngkÇ’u bìxÅ« shì <= jià ngé" #: extmod/ulab/code/linalg/linalg.c msgid "wrong argument type" -msgstr "" +msgstr "cuòwù de cÄnshù lèixÃng" #: extmod/ulab/code/ndarray.c msgid "wrong index type" -msgstr "" +msgstr "cuòwù de suÇ’yÇn lèixÃng" #: extmod/ulab/code/vector/vectorise.c msgid "wrong input type" -msgstr "" +msgstr "shÅ«rù lèixÃng cuòwù" #: extmod/ulab/code/ulab_create.c py/objstr.c msgid "wrong number of arguments" @@ -3392,11 +3365,11 @@ msgstr "wúfÇŽ jiÄ› bÄo de zhà shù" #: extmod/ulab/code/ndarray.c msgid "wrong operand type" -msgstr "" +msgstr "cuòwù de cÄozuò shù lèixÃng" #: extmod/ulab/code/vector/vectorise.c msgid "wrong output type" -msgstr "" +msgstr "cuòwù de shÅ«chÅ« lèixÃng" #: shared-module/displayio/Shape.c msgid "x value out of bounds" @@ -3416,15 +3389,130 @@ msgstr "lÃng bù" #: extmod/ulab/code/filter/filter.c msgid "zi must be an ndarray" -msgstr "" +msgstr "zi bìxÅ« shì ndarray" #: extmod/ulab/code/filter/filter.c msgid "zi must be of float type" -msgstr "" +msgstr "zi bìxÅ« wèi fú diÇŽn xÃng" #: extmod/ulab/code/filter/filter.c msgid "zi must be of shape (n_section, 2)" -msgstr "" +msgstr "zi bìxÅ« jùyÇ’u xÃngzhuà ng (n_section,2)" + +#~ msgid "tuple/list required on RHS" +#~ msgstr "RHS yÄoqiú de yuán zÇ”/lièbiÇŽo" + +#~ msgid "%q indices must be integers, not %s" +#~ msgstr "%q suÇ’yÇn bìxÅ« shì zhÄ›ngshù, ér bùshì %s" + +#~ msgid "'%s' object does not support '%q'" +#~ msgstr "'%s' duì xià ng bù zhÄ«chà '%q'" + +#~ msgid "'%s' object does not support item assignment" +#~ msgstr "'%s' duìxià ng bù zhÄ«chà xià ngmù fÄ“npèi" + +#~ msgid "'%s' object does not support item deletion" +#~ msgstr "'%s' duìxià ng bù zhÄ«chà shÄnchú xià ngmù" + +#~ msgid "'%s' object has no attribute '%q'" +#~ msgstr "'%s' duìxià ng méiyÇ’u shÇ”xìng '%q'" + +#~ msgid "'%s' object is not an iterator" +#~ msgstr "'%s' duìxià ng bùshì yÄ«gè diédà i qì" + +#~ msgid "'%s' object is not callable" +#~ msgstr "'%s' duìxià ng wúfÇŽ dià oyòng" + +#~ msgid "'%s' object is not iterable" +#~ msgstr "'%s' duìxià ng bùnéng diédà i" + +#~ msgid "'%s' object is not subscriptable" +#~ msgstr "'%s' duìxià ng bùnéng fÄ“nshù" + +#~ msgid "Invalid I2C pin selection" +#~ msgstr "Wúxià o de I2C yÇn jiÇŽo xuÇŽnzé" + +#~ msgid "Invalid SPI pin selection" +#~ msgstr "Wúxià o de SPI yÇn jiÇŽo xuÇŽnzé" + +#~ msgid "Invalid UART pin selection" +#~ msgstr "Wúxià o de UART yÇn jiÇŽo xuÇŽnzé" + +#~ msgid "Pop from an empty Ps2 buffer" +#~ msgstr "Cóng kÅng de Ps2 huÇŽnchÅng qÅ« dà nchÅ«" + +#~ msgid "Running in safe mode! Auto-reload is off.\n" +#~ msgstr "Zà i Änquán móshì xià yùnxÃng! Zìdòng chóngxÄ«n jiÄzà i yÇ guÄnbì.\n" + +#~ msgid "Running in safe mode! Not running saved code.\n" +#~ msgstr "Zà i Änquán móshì xià yùnxÃng! Bù yùnxÃng yÇ bÇŽocún de dà imÇŽ.\n" + +#~ msgid "__init__() should return None, not '%s'" +#~ msgstr "__Init__() yÄ«nggÄi fÇŽnhuà not, ér bùshì '%s'" + +#~ msgid "can't convert %s to complex" +#~ msgstr "wúfÇŽ zhuÇŽnhuà n%s dà o fùzá" + +#~ msgid "can't convert %s to float" +#~ msgstr "wúfÇŽ zhuÇŽnhuà n %s dà o fú diÇŽn xÃng bià nlià ng" + +#~ msgid "can't convert %s to int" +#~ msgstr "wúfÇŽ zhuÇŽnhuà n%s dà o int" + +#~ msgid "can't convert NaN to int" +#~ msgstr "wúfÇŽ jiÄng dÇŽoháng zhuÇŽnhuà n wèi int" + +#~ msgid "can't convert address to int" +#~ msgstr "wúfÇŽ jiÄng dìzhÇ zhuÇŽnhuà n wèi int" + +#~ msgid "can't convert inf to int" +#~ msgstr "bùnéng jiÄng inf zhuÇŽnhuà n wèi int" + +#~ msgid "can't convert to complex" +#~ msgstr "bùnéng zhuÇŽnhuà n wèi fùzá" + +#~ msgid "can't convert to float" +#~ msgstr "bùnéng zhuÇŽnhuà n wèi fú diÇŽn" + +#~ msgid "can't convert to int" +#~ msgstr "bùnéng zhuÇŽnhuà n wèi int" + +#~ msgid "object '%s' is not a tuple or list" +#~ msgstr "duìxià ng '%s' bùshì yuán zÇ” huò lièbiÇŽo" + +#~ msgid "object of type '%s' has no len()" +#~ msgstr "lèixÃng '%s' de duìxià ng méiyÇ’u chángdù" + +#~ msgid "pop from an empty PulseIn" +#~ msgstr "cóng kÅng de PulseIn dà nchÅ« dà nchÅ«" + +#~ msgid "pop from an empty set" +#~ msgstr "cóng kÅng jà dà nchÅ«" + +#~ msgid "pop from empty list" +#~ msgstr "cóng kÅng lièbiÇŽo zhòng dà nchÅ«" + +#~ msgid "popitem(): dictionary is empty" +#~ msgstr "dà nchÅ« xià ngmù (): ZìdiÇŽn wèi kÅng" + +#~ msgid "string index out of range" +#~ msgstr "zìfú chuà n suÇ’yÇn chÄochÅ« fà nwéi" + +#~ msgid "string indices must be integers, not %s" +#~ msgstr "zìfú chuà n zhÇshù bìxÅ« shì zhÄ›ngshù, ér bùshì %s" + +#~ msgid "struct: index out of range" +#~ msgstr "jiégòu: suÇ’yÇn chÄochÅ« fà nwéi" + +#, fuzzy +#~ msgid "unknown format code '%c' for object of type '%s'" +#~ msgstr "lèixÃng '%s' duìxià ng wèizhÄ« de géshì dà imÇŽ '%c'" + +#~ msgid "unsupported type for %q: '%s'" +#~ msgstr "bù zhÄ«chà de lèixÃng %q: '%s'" + +#~ msgid "unsupported types for %q: '%s', '%s'" +#~ msgstr "bù zhÄ«chà de lèixÃng wèi %q: '%s', '%s'" #~ msgid "Address is not %d bytes long or is in wrong format" #~ msgstr "DìzhÇ bùshì %d zì jié zhÇŽng, huòzhÄ› géshì cuòwù" diff --git a/mpy-cross/Makefile.static-raspbian b/mpy-cross/Makefile.static-raspbian index f895f998b..8fe78b0af 100644 --- a/mpy-cross/Makefile.static-raspbian +++ b/mpy-cross/Makefile.static-raspbian @@ -6,7 +6,6 @@ PROG=mpy-cross.static-raspbian BUILD=build-static-raspbian STATIC_BUILD=1 +$(shell if ! [ -d pitools ]; then echo 1>&2 "Fetching pi build tools. This may take awhile."; git clone -q https://github.com/raspberrypi/tools.git --depth=1 pitools; fi) CROSS_COMPILE = pitools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- include mpy-cross.mk - -$(shell [ -d pitools ] || git clone --progress --verbose https://github.com/raspberrypi/tools.git --depth=1 pitools) diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile index 65542354e..30487ae3e 100644 --- a/ports/atmel-samd/Makefile +++ b/ports/atmel-samd/Makefile @@ -103,7 +103,7 @@ ifeq ($(CHIP_FAMILY), same54) PERIPHERALS_CHIP_FAMILY=sam_d5x_e5x OPTIMIZATION_FLAGS ?= -O2 # TinyUSB defines -CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_SAMD51 -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_CDC_RX_BUFSIZE=256 -DCFG_TUD_MIDI_TX_BUFSIZE=128 -DCFG_TUD_CDC_TX_BUFSIZE=256 -DCFG_TUD_MSC_BUFSIZE=1024 +CFLAGS += -DCFG_TUSB_MCU=OPT_MCU_SAME5X -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_CDC_RX_BUFSIZE=256 -DCFG_TUD_MIDI_TX_BUFSIZE=128 -DCFG_TUD_CDC_TX_BUFSIZE=256 -DCFG_TUD_MSC_BUFSIZE=1024 endif # option to override default optimization level, set in boards/$(BOARD)/mpconfigboard.mk diff --git a/ports/atmel-samd/boards/bdmicro_vina_m0/mpconfigboard.mk b/ports/atmel-samd/boards/bdmicro_vina_m0/mpconfigboard.mk index a36966b87..b7ad47ff2 100644 --- a/ports/atmel-samd/boards/bdmicro_vina_m0/mpconfigboard.mk +++ b/ports/atmel-samd/boards/bdmicro_vina_m0/mpconfigboard.mk @@ -15,5 +15,5 @@ CIRCUITPY_BITBANGIO = 0 CIRCUITPY_I2CPERIPHERAL = 0 CIRCUITPY_VECTORIO = 0 -CFLAGS_INLINE_LIMIT = 60 +CFLAGS_INLINE_LIMIT = 50 SUPEROPT_GC = 0 diff --git a/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.mk index de79638bd..512bc533c 100644 --- a/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.mk +++ b/ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.mk @@ -10,4 +10,22 @@ INTERNAL_FLASH_FILESYSTEM = 1 LONGINT_IMPL = NONE CIRCUITPY_FULL_BUILD = 0 + +# A number of modules are removed for RFM9x to make room for frozen libraries. +# Many I/O functions are not available. +CIRCUITPY_ANALOGIO = 0 +CIRCUITPY_PULSEIO = 0 +CIRCUITPY_NEOPIXEL_WRITE = 1 +CIRCUITPY_ROTARYIO = 0 +CIRCUITPY_RTC = 0 +CIRCUITPY_SAMD = 0 +CIRCUITPY_USB_MIDI = 0 +CIRCUITPY_USB_HID = 0 +CIRCUITPY_TOUCHIO = 0 +CFLAGS_INLINE_LIMIT = 35 +# Make more room. SUPEROPT_GC = 0 + +# Include these Python libraries in firmware. +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_RFM9x diff --git a/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk b/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk index ae2a1e973..393adf839 100644 --- a/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk +++ b/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk @@ -7,8 +7,8 @@ CHIP_VARIANT = SAMD51G19A CHIP_FAMILY = samd51 QSPI_FLASH_FILESYSTEM = 1 -EXTERNAL_FLASH_DEVICE_COUNT = 1 -EXTERNAL_FLASH_DEVICES = "W25Q16JV_IM" +EXTERNAL_FLASH_DEVICE_COUNT = 2 +EXTERNAL_FLASH_DEVICES = "W25Q16JV_IM, W25Q16JV_IQ" LONGINT_IMPL = MPZ # No I2S on SAMD51G diff --git a/ports/atmel-samd/common-hal/pulseio/PulseOut.c b/ports/atmel-samd/common-hal/pulseio/PulseOut.c index e9b2137cb..b53c8da2b 100644 --- a/ports/atmel-samd/common-hal/pulseio/PulseOut.c +++ b/ports/atmel-samd/common-hal/pulseio/PulseOut.c @@ -96,7 +96,15 @@ void pulseout_reset() { } void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, - const pulseio_pwmout_obj_t* carrier) { + const pulseio_pwmout_obj_t* carrier, + const mcu_pin_obj_t* pin, + uint32_t frequency, + uint16_t duty_cycle) { + if (!carrier || pin || frequency) { + mp_raise_NotImplementedError(translate("Port does not accept pins or frequency. \ + Construct and pass a PWMOut Carrier instead")); + } + if (refcount == 0) { // Find a spare timer. Tc *tc = NULL; diff --git a/ports/atmel-samd/mpconfigport.mk b/ports/atmel-samd/mpconfigport.mk index 5788a160b..a16daf4b0 100644 --- a/ports/atmel-samd/mpconfigport.mk +++ b/ports/atmel-samd/mpconfigport.mk @@ -47,6 +47,16 @@ USB_MSC_EP_NUM_OUT = 1 CIRCUITPY_ULAB = 0 +ifeq ($(TRANSLATION), ja) +RELEASE_NEEDS_CLEAN_BUILD = 1 +CIRCUITPY_TERMINALIO = 0 +endif + +ifeq ($(TRANSLATION), ko) +RELEASE_NEEDS_CLEAN_BUILD = 1 +CIRCUITPY_TERMINALIO = 0 +endif + endif # samd21 # Put samd51-only choices here. @@ -81,3 +91,5 @@ endif # samd51 INTERNAL_LIBM = 1 USB_SERIAL_NUMBER_LENGTH = 32 + +USB_NUM_EP = 8 diff --git a/ports/cxd56/common-hal/pulseio/PulseOut.c b/ports/cxd56/common-hal/pulseio/PulseOut.c index 21b4c77e5..08081020f 100644 --- a/ports/cxd56/common-hal/pulseio/PulseOut.c +++ b/ports/cxd56/common-hal/pulseio/PulseOut.c @@ -58,8 +58,16 @@ static bool pulseout_timer_handler(unsigned int *next_interval_us, void *arg) return true; } -void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t *self, - const pulseio_pwmout_obj_t *carrier) { +void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, + const pulseio_pwmout_obj_t* carrier, + const mcu_pin_obj_t* pin, + uint32_t frequency, + uint16_t duty_cycle) { + if (!carrier || pin || frequency) { + mp_raise_NotImplementedError(translate("Port does not accept pins or frequency. \ + Construct and pass a PWMOut Carrier instead")); + } + if (pulse_fd < 0) { pulse_fd = open("/dev/timer0", O_RDONLY); } diff --git a/ports/cxd56/supervisor/port.c b/ports/cxd56/supervisor/port.c index a40d31faf..bbd864f90 100644 --- a/ports/cxd56/supervisor/port.c +++ b/ports/cxd56/supervisor/port.c @@ -36,6 +36,8 @@ #include "boards/board.h" #include "supervisor/port.h" +#include "supervisor/background_callback.h" +#include "supervisor/usb.h" #include "supervisor/shared/tick.h" #include "common-hal/microcontroller/Pin.h" @@ -114,6 +116,11 @@ uint32_t port_get_saved_word(void) { return _ebss; } +static background_callback_t callback; +static void usb_background_do(void* unused) { + usb_background(); +} + volatile bool _tick_enabled; void board_timerhook(void) { @@ -121,6 +128,8 @@ void board_timerhook(void) if (_tick_enabled) { supervisor_tick(); } + + background_callback_add(&callback, usb_background_do, NULL); } uint64_t port_get_raw_ticks(uint8_t* subticks) { diff --git a/ports/esp32s2/background.c b/ports/esp32s2/background.c index 40ce9ecfd..3160d9974 100644 --- a/ports/esp32s2/background.c +++ b/ports/esp32s2/background.c @@ -35,10 +35,17 @@ #include "shared-module/displayio/__init__.h" #endif +#if CIRCUITPY_PULSEIO +#include "common-hal/pulseio/PulseIn.h" +#endif + void port_background_task(void) { // Zero delay in case FreeRTOS wants to switch to something else. vTaskDelay(0); + #if CIRCUITPY_PULSEIO + pulsein_background(); + #endif } void port_start_background_task(void) {} diff --git a/ports/esp32s2/boards/espressif_saola_1_wroom/pins.c b/ports/esp32s2/boards/espressif_saola_1_wroom/pins.c index 1d4e2c4eb..0562d9331 100644 --- a/ports/esp32s2/boards/espressif_saola_1_wroom/pins.c +++ b/ports/esp32s2/boards/espressif_saola_1_wroom/pins.c @@ -42,5 +42,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44) }, { MP_ROM_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) }, { MP_ROM_QSTR(MP_QSTR_IO46), MP_ROM_PTR(&pin_GPIO46) }, + + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO18) }, }; MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table); diff --git a/ports/esp32s2/common-hal/neopixel_write/__init__.c b/ports/esp32s2/common-hal/neopixel_write/__init__.c index 1fc976ec3..193d754f4 100644 --- a/ports/esp32s2/common-hal/neopixel_write/__init__.c +++ b/ports/esp32s2/common-hal/neopixel_write/__init__.c @@ -93,6 +93,9 @@ void common_hal_neopixel_write (const digitalio_digitalinout_obj_t* digitalinout // Reserve channel uint8_t number = digitalinout->pin->number; rmt_channel_t channel = esp32s2_peripherals_find_and_reserve_rmt(); + if (channel == RMT_CHANNEL_MAX) { + mp_raise_RuntimeError(translate("All timers in use")); + } // Configure Channel rmt_config_t config = RMT_DEFAULT_CONFIG_TX(number, channel); diff --git a/ports/esp32s2/common-hal/pulseio/PulseIn.c b/ports/esp32s2/common-hal/pulseio/PulseIn.c index 65fc6631d..f7429ec12 100644 --- a/ports/esp32s2/common-hal/pulseio/PulseIn.c +++ b/ports/esp32s2/common-hal/pulseio/PulseIn.c @@ -25,51 +25,184 @@ */ #include "common-hal/pulseio/PulseIn.h" +#include "shared-bindings/microcontroller/__init__.h" #include "py/runtime.h" -// STATIC void pulsein_handler(uint8_t num) { -// } +STATIC uint8_t refcount = 0; +STATIC pulseio_pulsein_obj_t * handles[RMT_CHANNEL_MAX]; + +// Requires rmt.c void esp32s2_peripherals_reset_all(void) to reset + +STATIC void update_internal_buffer(pulseio_pulsein_obj_t* self) { + uint32_t length = 0; + rmt_item32_t *items = (rmt_item32_t *) xRingbufferReceive(self->buf_handle, &length, 0); + if (items) { + length /= 4; + for (size_t i=0; i < length; i++) { + uint16_t pos = (self->start + self->len) % self->maxlen; + self->buffer[pos] = items[i].duration0 * 3; + // Check if second item exists before incrementing + if (items[i].duration1) { + self->buffer[pos+1] = items[i].duration1 * 3; + if (self->len < (self->maxlen - 1)) { + self->len += 2; + } else { + self->start += 2; + } + } else { + if (self->len < self->maxlen) { + self->len++; + } else { + self->start++; + } + } + } + vRingbufferReturnItem(self->buf_handle, (void *) items); + } +} + +// We can't access the RMT interrupt, so we need a global service to prevent +// the ringbuffer from overflowing and crashing the peripheral +void pulsein_background(void) { + for (size_t i = 0; i < RMT_CHANNEL_MAX; i++) { + if (handles[i]) { + update_internal_buffer(handles[i]); + UBaseType_t items_waiting; + vRingbufferGetInfo(handles[i]->buf_handle, NULL, NULL, NULL, NULL, &items_waiting); + } + } +} void pulsein_reset(void) { + for (size_t i = 0; i < RMT_CHANNEL_MAX; i++) { + handles[i] = NULL; + } + supervisor_disable_tick(); + refcount = 0; } void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t* self, const mcu_pin_obj_t* pin, uint16_t maxlen, bool idle_state) { - mp_raise_NotImplementedError(translate("PulseIn not supported on this chip")); + self->buffer = (uint16_t *) m_malloc(maxlen * sizeof(uint16_t), false); + if (self->buffer == NULL) { + mp_raise_msg_varg(&mp_type_MemoryError, translate("Failed to allocate RX buffer of %d bytes"), maxlen * sizeof(uint16_t)); + } + self->pin = pin; + self->maxlen = maxlen; + self->idle_state = idle_state; + self->start = 0; + self->len = 0; + self->paused = false; + + // Set pull settings + gpio_pullup_dis(pin->number); + gpio_pulldown_dis(pin->number); + if (idle_state) { + gpio_pullup_en(pin->number); + } else { + gpio_pulldown_en(pin->number); + } + + // Find a free RMT Channel and configure it + rmt_channel_t channel = esp32s2_peripherals_find_and_reserve_rmt(); + if (channel == RMT_CHANNEL_MAX) { + mp_raise_RuntimeError(translate("All timers in use")); + } + rmt_config_t config = RMT_DEFAULT_CONFIG_RX(pin->number, channel); + config.rx_config.filter_en = true; + config.rx_config.idle_threshold = 30000; // 30*3=90ms idle required to register a sequence + config.clk_div = 240; // All measurements are divided by 3 to accomodate 65ms pulses + rmt_config(&config); + rmt_driver_install(channel, 1000, 0); //TODO: pick a more specific buffer size? + + // Store this object and the buffer handle for background updates + self->channel = channel; + handles[channel] = self; + rmt_get_ringbuf_handle(channel, &(self->buf_handle)); + + // start RMT RX, and enable ticks so the core doesn't turn off. + rmt_rx_start(channel, true); + supervisor_enable_tick(); + refcount++; } bool common_hal_pulseio_pulsein_deinited(pulseio_pulsein_obj_t* self) { - return false; + return handles[self->channel] ? false : true; } void common_hal_pulseio_pulsein_deinit(pulseio_pulsein_obj_t* self) { + handles[self->channel] = NULL; + esp32s2_peripherals_free_rmt(self->channel); + reset_pin_number(self->pin->number); + refcount--; + if (refcount == 0) { + supervisor_disable_tick(); + } } void common_hal_pulseio_pulsein_pause(pulseio_pulsein_obj_t* self) { + self->paused = true; + rmt_rx_stop(self->channel); } void common_hal_pulseio_pulsein_resume(pulseio_pulsein_obj_t* self, uint16_t trigger_duration) { + // Make sure we're paused. + if ( !self->paused ) { + common_hal_pulseio_pulsein_pause(self); + } + + if (trigger_duration > 0) { + gpio_set_direction(self->pin->number, GPIO_MODE_DEF_OUTPUT); + gpio_set_level(self->pin->number, !self->idle_state); + common_hal_mcu_delay_us((uint32_t)trigger_duration); + gpio_set_level(self->pin->number, self->idle_state); + gpio_set_direction(self->pin->number, GPIO_MODE_INPUT); // should revert to pull direction + } + + self->paused = false; + rmt_rx_start(self->channel, false); } void common_hal_pulseio_pulsein_clear(pulseio_pulsein_obj_t* self) { + // Buffer only updates in BG tasks or fetches, so no extra protection is needed + self->start = 0; + self->len = 0; } uint16_t common_hal_pulseio_pulsein_get_item(pulseio_pulsein_obj_t* self, int16_t index) { - return false; + update_internal_buffer(self); + if (index < 0) { + index += self->len; + } + if (index < 0 || index >= self->len) { + mp_raise_IndexError(translate("index out of range")); + } + uint16_t value = self->buffer[(self->start + index) % self->maxlen]; + return value; } uint16_t common_hal_pulseio_pulsein_popleft(pulseio_pulsein_obj_t* self) { - return false; + update_internal_buffer(self); + + if (self->len == 0) { + mp_raise_IndexError(translate("pop from an empty PulseIn")); + } + + uint16_t value = self->buffer[self->start]; + self->start = (self->start + 1) % self->maxlen; + self->len--; + + return value; } uint16_t common_hal_pulseio_pulsein_get_maxlen(pulseio_pulsein_obj_t* self) { - return false; + return self->maxlen; } bool common_hal_pulseio_pulsein_get_paused(pulseio_pulsein_obj_t* self) { - return false; + return self->paused; } uint16_t common_hal_pulseio_pulsein_get_len(pulseio_pulsein_obj_t* self) { - return false; + return self->len; } diff --git a/ports/esp32s2/common-hal/pulseio/PulseIn.h b/ports/esp32s2/common-hal/pulseio/PulseIn.h index b317c516c..97d70d4b0 100644 --- a/ports/esp32s2/common-hal/pulseio/PulseIn.h +++ b/ports/esp32s2/common-hal/pulseio/PulseIn.h @@ -30,24 +30,27 @@ #include "common-hal/microcontroller/Pin.h" #include "py/obj.h" +#include "driver/rmt.h" +#include "rmt.h" typedef struct { mp_obj_base_t base; const mcu_pin_obj_t* pin; + rmt_channel_t channel; bool idle_state; bool paused; - volatile bool first_edge; + + RingbufHandle_t buf_handle; uint16_t* buffer; uint16_t maxlen; volatile uint16_t start; volatile uint16_t len; - volatile uint32_t last_overflow; - volatile uint16_t last_count; } pulseio_pulsein_obj_t; void pulsein_reset(void); +void pulsein_background(void); #endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_PULSEIO_PULSEIN_H diff --git a/ports/esp32s2/common-hal/pulseio/PulseOut.c b/ports/esp32s2/common-hal/pulseio/PulseOut.c index c448c578d..d3c163ca8 100644 --- a/ports/esp32s2/common-hal/pulseio/PulseOut.c +++ b/ports/esp32s2/common-hal/pulseio/PulseOut.c @@ -29,32 +29,63 @@ #include "shared-bindings/pulseio/PWMOut.h" #include "py/runtime.h" -// STATIC void turn_on(pulseio_pulseout_obj_t *pulseout) { -// } +// Requires rmt.c void esp32s2_peripherals_reset_all(void) to reset -// STATIC void turn_off(pulseio_pulseout_obj_t *pulseout) { -// } +void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, + const pulseio_pwmout_obj_t* carrier, + const mcu_pin_obj_t* pin, + uint32_t frequency, + uint16_t duty_cycle) { + if (carrier || !pin || !frequency) { + mp_raise_NotImplementedError(translate("Port does not accept PWM carrier. \ + Pass a pin, frequency and duty cycle instead")); + } -// STATIC void start_timer(void) { -// } + rmt_channel_t channel = esp32s2_peripherals_find_and_reserve_rmt(); + if (channel == RMT_CHANNEL_MAX) { + mp_raise_RuntimeError(translate("All timers in use")); + } -// STATIC void pulseout_event_handler(void) { -// } + // Configure Channel + rmt_config_t config = RMT_DEFAULT_CONFIG_TX(pin->number, channel); + config.tx_config.carrier_en = true; + config.tx_config.carrier_duty_percent = (duty_cycle * 100) / (1<<16); + config.tx_config.carrier_freq_hz = frequency; + config.clk_div = 80; -void pulseout_reset() { -} + rmt_config(&config); + rmt_driver_install(channel, 0, 0); -void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, - const pulseio_pwmout_obj_t* carrier) { - mp_raise_NotImplementedError(translate("PulseOut not supported on this chip")); + self->channel = channel; } bool common_hal_pulseio_pulseout_deinited(pulseio_pulseout_obj_t* self) { - return false; + return (self->channel == RMT_CHANNEL_MAX); } void common_hal_pulseio_pulseout_deinit(pulseio_pulseout_obj_t* self) { + esp32s2_peripherals_free_rmt(self->channel); + self->channel = RMT_CHANNEL_MAX; + } void common_hal_pulseio_pulseout_send(pulseio_pulseout_obj_t* self, uint16_t* pulses, uint16_t length) { + rmt_item32_t items[length]; + + // Circuitpython allows 16 bit pulse values, while ESP32 only allows 15 bits + // Thus, we use entire items for one pulse, rather than switching inside each item + for (size_t i = 0; i < length; i++) { + // Setting the RMT duration to 0 has undefined behavior, so avoid that pre-emptively. + if (pulses[i] == 0) { + pulses[i] = 1; + } + uint32_t level = (i % 2) ? 0 : 1; + const rmt_item32_t item = {{{ (pulses[i] & 0x8000 ? 0x7FFF : 1), level, (pulses[i] & 0x7FFF), level}}}; + items[i] = item; + } + + rmt_write_items(self->channel, items, length, true); + while (rmt_wait_tx_done(self->channel, 0) != ESP_OK) { + RUN_BACKGROUND_TASKS; + } } diff --git a/ports/esp32s2/common-hal/pulseio/PulseOut.h b/ports/esp32s2/common-hal/pulseio/PulseOut.h index f465d0079..513905992 100644 --- a/ports/esp32s2/common-hal/pulseio/PulseOut.h +++ b/ports/esp32s2/common-hal/pulseio/PulseOut.h @@ -29,14 +29,14 @@ #include "common-hal/microcontroller/Pin.h" #include "common-hal/pulseio/PWMOut.h" +#include "driver/rmt.h" +#include "rmt.h" #include "py/obj.h" typedef struct { mp_obj_base_t base; - pulseio_pwmout_obj_t *pwmout; + rmt_channel_t channel; } pulseio_pulseout_obj_t; -void pulseout_reset(void); - #endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_PULSEIO_PULSEOUT_H diff --git a/ports/esp32s2/mpconfigport.h b/ports/esp32s2/mpconfigport.h index d340bb480..07f83434a 100644 --- a/ports/esp32s2/mpconfigport.h +++ b/ports/esp32s2/mpconfigport.h @@ -28,19 +28,18 @@ #ifndef ESP32S2_MPCONFIGPORT_H__ #define ESP32S2_MPCONFIGPORT_H__ -#define CIRCUITPY_INTERNAL_NVM_SIZE (0) -#define MICROPY_NLR_THUMB (0) +#define CIRCUITPY_INTERNAL_NVM_SIZE (0) +#define MICROPY_NLR_THUMB (0) -#define MICROPY_PY_UJSON (0) -#define MICROPY_USE_INTERNAL_PRINTF (0) +#define MICROPY_PY_UJSON (0) +#define MICROPY_USE_INTERNAL_PRINTF (0) #include "py/circuitpy_mpconfig.h" - #define MICROPY_PORT_ROOT_POINTERS \ CIRCUITPY_COMMON_ROOT_POINTERS -#define MICROPY_NLR_SETJMP (1) -#define CIRCUITPY_DEFAULT_STACK_SIZE 0x6000 +#define MICROPY_NLR_SETJMP (1) +#define CIRCUITPY_DEFAULT_STACK_SIZE (0x6000) #endif // __INCLUDED_ESP32S2_MPCONFIGPORT_H diff --git a/ports/esp32s2/peripherals/rmt.c b/ports/esp32s2/peripherals/rmt.c index f17957c1c..b7629dbd5 100644 --- a/ports/esp32s2/peripherals/rmt.c +++ b/ports/esp32s2/peripherals/rmt.c @@ -29,6 +29,14 @@ bool rmt_reserved_channels[RMT_CHANNEL_MAX]; +void esp32s2_peripherals_rmt_reset(void) { + for (size_t i = 0; i < RMT_CHANNEL_MAX; i++) { + if (rmt_reserved_channels[i]) { + esp32s2_peripherals_free_rmt(i); + } + } +} + rmt_channel_t esp32s2_peripherals_find_and_reserve_rmt(void) { for (size_t i = 0; i < RMT_CHANNEL_MAX; i++) { if (!rmt_reserved_channels[i]) { @@ -36,8 +44,8 @@ rmt_channel_t esp32s2_peripherals_find_and_reserve_rmt(void) { return i; } } - mp_raise_RuntimeError(translate("All timers in use")); - return false; + // Returning the max indicates a reservation failure. + return RMT_CHANNEL_MAX; } void esp32s2_peripherals_free_rmt(rmt_channel_t chan) { diff --git a/ports/esp32s2/peripherals/rmt.h b/ports/esp32s2/peripherals/rmt.h index 4741a5bc5..01ed09907 100644 --- a/ports/esp32s2/peripherals/rmt.h +++ b/ports/esp32s2/peripherals/rmt.h @@ -31,6 +31,7 @@ #include "driver/rmt.h" #include <stdint.h> +void esp32s2_peripherals_rmt_reset(void); rmt_channel_t esp32s2_peripherals_find_and_reserve_rmt(void); void esp32s2_peripherals_free_rmt(rmt_channel_t chan); diff --git a/ports/esp32s2/supervisor/port.c b/ports/esp32s2/supervisor/port.c index e4767e514..46590b551 100644 --- a/ports/esp32s2/supervisor/port.c +++ b/ports/esp32s2/supervisor/port.c @@ -39,9 +39,12 @@ #include "common-hal/busio/SPI.h" #include "common-hal/busio/UART.h" #include "common-hal/pulseio/PWMOut.h" +#include "common-hal/pulseio/PulseIn.h" #include "supervisor/memory.h" #include "supervisor/shared/tick.h" +#include "rmt.h" + STATIC esp_timer_handle_t _tick_timer; void tick_timer_cb(void* arg) { @@ -66,7 +69,9 @@ void reset_port(void) { vTaskDelay(4); #if CIRCUITPY_PULSEIO + esp32s2_peripherals_rmt_reset(); pwmout_reset(); + pulsein_reset(); #endif #if CIRCUITPY_BUSIO i2c_reset(); diff --git a/ports/mimxrt10xx/common-hal/pulseio/PulseOut.c b/ports/mimxrt10xx/common-hal/pulseio/PulseOut.c index ffa885688..3aefd8766 100644 --- a/ports/mimxrt10xx/common-hal/pulseio/PulseOut.c +++ b/ports/mimxrt10xx/common-hal/pulseio/PulseOut.c @@ -94,7 +94,10 @@ void pulseout_reset() { } void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, - const pulseio_pwmout_obj_t* carrier) { + const pulseio_pwmout_obj_t* carrier, + const mcu_pin_obj_t* pin, + uint32_t frequency, + uint16_t duty_cycle) { // if (refcount == 0) { // // Find a spare timer. // Tc *tc = NULL; diff --git a/ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk b/ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk index d5e38c5b7..9b16834b5 100644 --- a/ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk +++ b/ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk @@ -6,10 +6,3 @@ USB_MANUFACTURER = "Arduino" MCU_CHIP = nrf52840 INTERNAL_FLASH_FILESYSTEM = 1 - -# Allocate two, not just one I2C peripheral, so that we have both -# on-board and off-board I2C available. -# When SPIM3 becomes available we'll be able to have two I2C and two SPI peripherals. -# We use a CFLAGS define here because there are include order issues -# if we try to include "mpconfigport.h" into nrfx_config.h . -CFLAGS += -DCIRCUITPY_NRF_NUM_I2C=2 diff --git a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk index 38c993334..6b5c0424f 100644 --- a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk +++ b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk @@ -8,9 +8,3 @@ MCU_CHIP = nrf52840 QSPI_FLASH_FILESYSTEM = 1 EXTERNAL_FLASH_DEVICE_COUNT = 1 EXTERNAL_FLASH_DEVICES = "GD25Q16C" - -# Allocate two, not just one I2C peripheral for CPB, so that we have both -# on-board and off-board I2C available. -# We use a CFLAGS define here because there are include order issues -# if we try to include "mpconfigport.h" into nrfx_config.h . -CFLAGS += -DCIRCUITPY_NRF_NUM_I2C=2 diff --git a/ports/nrf/boards/common.template.ld b/ports/nrf/boards/common.template.ld index 5982b8ba0..192215eee 100644 --- a/ports/nrf/boards/common.template.ld +++ b/ports/nrf/boards/common.template.ld @@ -18,13 +18,16 @@ MEMORY FLASH_BOOTLOADER_SETTINGS (r) : ORIGIN = ${BOOTLOADER_SETTINGS_START_ADDR}, LENGTH = ${BOOTLOADER_SETTINGS_SIZE} - /* 0x2000000 - RAM:ORIGIN is reserved for Softdevice */ - /* SoftDevice 6.1.0 with 5 connections and various increases takes just under 64kiB. - /* To measure the minimum required amount of memory for given configuration, set this number - high enough to work and then check the mutation of the value done by sd_ble_enable. */ - SPIM3_RAM (rw) : ORIGIN = 0x20000000 + ${SOFTDEVICE_RAM_SIZE}, LENGTH = ${SPIM3_BUFFER_SIZE} - RAM (xrw) : ORIGIN = 0x20000000 + ${SOFTDEVICE_RAM_SIZE} + ${SPIM3_BUFFER_SIZE}, LENGTH = ${RAM_SIZE} - ${SOFTDEVICE_RAM_SIZE} -${SPIM3_BUFFER_SIZE} - + /* SoftDevice RAM must start at the beginning of RAM: 0x2000000 (RAM_START_ADDR). + On nRF52840, the first 64kB of RAM is composed of 8 8kB RAM blocks. Above those is + RAM block 8, which is 192kB. + If SPIM3_BUFFER_RAM_SIZE is 8kB, as opposed to zero, it must be in the first 64kB of RAM. + So the amount of RAM reserved for the SoftDevice must be no more than 56kB. + */ + RAM (xrw) : ORIGIN = ${RAM_START_ADDR}, LENGTH = ${RAM_SIZE} + SD_RAM (rw) : ORIGIN = ${SOFTDEVICE_RAM_START_ADDR}, LENGTH = ${SOFTDEVICE_RAM_SIZE} + SPIM3_RAM (rw) : ORIGIN = ${SPIM3_BUFFER_RAM_START_ADDR}, LENGTH = ${SPIM3_BUFFER_RAM_SIZE} + APP_RAM (xrw) : ORIGIN = ${APP_RAM_START_ADDR}, LENGTH = ${APP_RAM_SIZE} } /* produce a link error if there is not this amount of RAM available */ @@ -32,16 +35,16 @@ _minimum_heap_size = 0; /* top end of the stack */ -/*_stack_end = ORIGIN(RAM) + LENGTH(RAM);*/ -_estack = ORIGIN(RAM) + LENGTH(RAM); +/*_stack_end = ORIGIN(APP_RAM) + LENGTH(APP_RAM);*/ +_estack = ORIGIN(APP_RAM) + LENGTH(APP_RAM); /* RAM extents for the garbage collector */ -_ram_end = ORIGIN(RAM) + LENGTH(RAM); +_ram_end = ORIGIN(APP_RAM) + LENGTH(APP_RAM); _heap_end = 0x20020000; /* tunable */ /* nrf52840 SPIM3 needs its own area to work around hardware problems. Nothing else may use this space. */ _spim3_ram = ORIGIN(SPIM3_RAM); -_spim3_ram_end = ORIGIN(SPIM3_RAM) + LENGTH(RAM); +_spim3_ram_end = ORIGIN(SPIM3_RAM) + LENGTH(SPIM3_RAM); /* define output sections */ SECTIONS @@ -87,7 +90,7 @@ SECTIONS . = ALIGN(4); _edata = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */ - } >RAM + } >APP_RAM /* Zero-initialized data section */ .bss : @@ -100,7 +103,7 @@ SECTIONS . = ALIGN(4); _ebss = .; /* define a global symbol at bss end; used by startup code and GC */ - } >RAM + } >APP_RAM /* Uninitialized data section Data placed into this section will remain unchanged across reboots. */ @@ -113,7 +116,7 @@ SECTIONS . = ALIGN(4); _euninitialized = .; /* define a global symbol at uninitialized end; currently unused */ - } >RAM + } >APP_RAM /* this is to define the start of the heap, and make sure we have a minimum size */ .heap : @@ -123,7 +126,7 @@ SECTIONS PROVIDE ( _end = . ); _heap_start = .; /* define a global symbol at heap start */ . = . + _minimum_heap_size; - } >RAM + } >APP_RAM /* this just checks there is enough RAM for the stack */ .stack : @@ -131,7 +134,7 @@ SECTIONS . = ALIGN(4); . = . + ${CIRCUITPY_DEFAULT_STACK_SIZE}; . = ALIGN(4); - } >RAM + } >APP_RAM /* Remove exception unwinding information, since Circuit Python does not support this GCC feature. */ diff --git a/ports/nrf/boards/hiibot_bluefi/mpconfigboard.mk b/ports/nrf/boards/hiibot_bluefi/mpconfigboard.mk index e43639a89..d60124348 100644 --- a/ports/nrf/boards/hiibot_bluefi/mpconfigboard.mk +++ b/ports/nrf/boards/hiibot_bluefi/mpconfigboard.mk @@ -8,10 +8,3 @@ MCU_CHIP = nrf52840 QSPI_FLASH_FILESYSTEM = 1 EXTERNAL_FLASH_DEVICE_COUNT = 1 EXTERNAL_FLASH_DEVICES = "W25Q16JV_IQ" - -# Allocate two, not just one I2C peripheral for Bluefi, so that we have both -# on-board and off-board I2C available. -# When SPIM3 becomes available we'll be able to have two I2C and two SPI peripherals. -# We use a CFLAGS define here because there are include order issues -# if we try to include "mpconfigport.h" into nrfx_config.h . -CFLAGS += -DCIRCUITPY_NRF_NUM_I2C=2 diff --git a/ports/nrf/boards/pca10100/mpconfigboard.h b/ports/nrf/boards/pca10100/mpconfigboard.h index c645b778b..4639a208b 100644 --- a/ports/nrf/boards/pca10100/mpconfigboard.h +++ b/ports/nrf/boards/pca10100/mpconfigboard.h @@ -46,3 +46,5 @@ #define BLEIO_PERIPH_ROLE_COUNT 2 #define BLEIO_TOTAL_CONNECTION_COUNT 2 #define BLEIO_ATTR_TAB_SIZE (BLE_GATTS_ATTR_TAB_SIZE_DEFAULT * 2) + +#define SOFTDEVICE_RAM_SIZE (32*1024) diff --git a/ports/nrf/boards/pca10100/mpconfigboard.mk b/ports/nrf/boards/pca10100/mpconfigboard.mk index e15bf3a67..a8cacbafc 100644 --- a/ports/nrf/boards/pca10100/mpconfigboard.mk +++ b/ports/nrf/boards/pca10100/mpconfigboard.mk @@ -27,9 +27,5 @@ CIRCUITPY_ULAB = 0 SUPEROPT_GC = 0 -# These defines must be overridden before mpconfigboard.h is included, which is -# why they are passed on the command line. -CFLAGS += -DSPIM3_BUFFER_SIZE=0 -DSOFTDEVICE_RAM_SIZE='(32*1024)' - # Override optimization to keep binary small OPTIMIZATION_FLAGS = -Os diff --git a/ports/nrf/boards/simmel/mpconfigboard.h b/ports/nrf/boards/simmel/mpconfigboard.h index 28c4ee7d9..a89f540b0 100644 --- a/ports/nrf/boards/simmel/mpconfigboard.h +++ b/ports/nrf/boards/simmel/mpconfigboard.h @@ -45,6 +45,9 @@ #define BOOTLOADER_SIZE (0x4000) // 12 kiB #define CIRCUITPY_BLE_CONFIG_SIZE (12*1024) +#define DEFAULT_I2C_BUS_SCL (&pin_P0_08) +#define DEFAULT_I2C_BUS_SDA (&pin_P1_09) + // Reduce nRF SoftRadio memory usage #define BLEIO_VS_UUID_COUNT 10 #define BLEIO_HVN_TX_QUEUE_SIZE 2 @@ -52,3 +55,5 @@ #define BLEIO_PERIPH_ROLE_COUNT 2 #define BLEIO_TOTAL_CONNECTION_COUNT 2 #define BLEIO_ATTR_TAB_SIZE (BLE_GATTS_ATTR_TAB_SIZE_DEFAULT * 2) + +#define SOFTDEVICE_RAM_SIZE (32*1024) diff --git a/ports/nrf/boards/simmel/mpconfigboard.mk b/ports/nrf/boards/simmel/mpconfigboard.mk index 8dd284d57..e34739c0f 100644 --- a/ports/nrf/boards/simmel/mpconfigboard.mk +++ b/ports/nrf/boards/simmel/mpconfigboard.mk @@ -29,9 +29,5 @@ CIRCUITPY_WATCHDOG = 1 # Enable micropython.native #CIRCUITPY_ENABLE_MPY_NATIVE = 1 -# These defines must be overridden before mpconfigboard.h is included, which is -# why they are passed on the command line. -CFLAGS += -DSPIM3_BUFFER_SIZE=0 -DSOFTDEVICE_RAM_SIZE='(32*1024)' -DNRFX_SPIM3_ENABLED=0 - # Override optimization to keep binary small OPTIMIZATION_FLAGS = -Os diff --git a/ports/nrf/boards/simmel/pins.c b/ports/nrf/boards/simmel/pins.c index 6c572cae2..e9710967b 100644 --- a/ports/nrf/boards/simmel/pins.c +++ b/ports/nrf/boards/simmel/pins.c @@ -9,19 +9,15 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { 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_I2S_LRCK), MP_ROM_PTR(&pin_P0_08) }, - { MP_ROM_QSTR(MP_QSTR_I2S_SDIN), MP_ROM_PTR(&pin_P1_09) }, - { MP_ROM_QSTR(MP_QSTR_I2S_SCK), MP_ROM_PTR(&pin_P0_12) }, - { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_P0_06) }, - { MP_ROM_QSTR(MP_QSTR_CHG), MP_ROM_PTR(&pin_P0_04) }, - { MP_ROM_QSTR(MP_QSTR_PWM), MP_ROM_PTR(&pin_P0_02) }, - { MP_ROM_QSTR(MP_QSTR_PWM_N), MP_ROM_PTR(&pin_P0_19) }, + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P0_08) }, + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P1_09) }, { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + }; MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/nrf/common-hal/_bleio/Adapter.c b/ports/nrf/common-hal/_bleio/Adapter.c index 6d6669c5e..4df26f33a 100644 --- a/ports/nrf/common-hal/_bleio/Adapter.c +++ b/ports/nrf/common-hal/_bleio/Adapter.c @@ -61,7 +61,7 @@ #endif #ifndef BLEIO_HVN_TX_QUEUE_SIZE -#define BLEIO_HVN_TX_QUEUE_SIZE 9 +#define BLEIO_HVN_TX_QUEUE_SIZE 5 #endif #ifndef BLEIO_CENTRAL_ROLE_COUNT @@ -120,11 +120,11 @@ STATIC uint32_t ble_stack_enable(void) { // Start with no event handlers, etc. ble_drv_reset(); - // Set everything up to have one persistent code editing connection and one user managed - // connection. In the future we could move .data and .bss to the other side of the stack and + // In the future we might move .data and .bss to the other side of the stack and // dynamically adjust for different memory requirements of the SD based on boot.py - // configuration. - uint32_t app_ram_start = (uint32_t) &_ram_start; + // configuration. But we still need to keep the SPIM3 buffer (if needed) in the first 64kB of RAM. + + uint32_t sd_ram_end = SOFTDEVICE_RAM_START_ADDR + SOFTDEVICE_RAM_SIZE; ble_cfg_t ble_conf; ble_conf.conn_cfg.conn_cfg_tag = BLE_CONN_CFG_TAG_CUSTOM; @@ -135,7 +135,7 @@ STATIC uint32_t ble_stack_enable(void) { // Event length here can influence throughput so perhaps make multiple connection profiles // available. ble_conf.conn_cfg.params.gap_conn_cfg.event_length = BLE_GAP_EVENT_LENGTH_DEFAULT; - err_code = sd_ble_cfg_set(BLE_CONN_CFG_GAP, &ble_conf, app_ram_start); + err_code = sd_ble_cfg_set(BLE_CONN_CFG_GAP, &ble_conf, sd_ram_end); if (err_code != NRF_SUCCESS) { return err_code; } @@ -147,7 +147,7 @@ STATIC uint32_t ble_stack_enable(void) { ble_conf.gap_cfg.role_count_cfg.periph_role_count = BLEIO_PERIPH_ROLE_COUNT; // central_role_count costs 648 bytes for 1 to 2, then ~1250 for each further increment. ble_conf.gap_cfg.role_count_cfg.central_role_count = BLEIO_CENTRAL_ROLE_COUNT; - err_code = sd_ble_cfg_set(BLE_GAP_CFG_ROLE_COUNT, &ble_conf, app_ram_start); + err_code = sd_ble_cfg_set(BLE_GAP_CFG_ROLE_COUNT, &ble_conf, sd_ram_end); if (err_code != NRF_SUCCESS) { return err_code; } @@ -158,7 +158,7 @@ STATIC uint32_t ble_stack_enable(void) { // DevZone recommends not setting this directly, but instead changing gap_conn_cfg.event_length. // However, we are setting connection extension, so this seems to make sense. ble_conf.conn_cfg.params.gatts_conn_cfg.hvn_tx_queue_size = BLEIO_HVN_TX_QUEUE_SIZE; - err_code = sd_ble_cfg_set(BLE_CONN_CFG_GATTS, &ble_conf, app_ram_start); + err_code = sd_ble_cfg_set(BLE_CONN_CFG_GATTS, &ble_conf, sd_ram_end); if (err_code != NRF_SUCCESS) { return err_code; } @@ -167,7 +167,7 @@ STATIC uint32_t ble_stack_enable(void) { memset(&ble_conf, 0, sizeof(ble_conf)); ble_conf.conn_cfg.conn_cfg_tag = BLE_CONN_CFG_TAG_CUSTOM; ble_conf.conn_cfg.params.gatt_conn_cfg.att_mtu = BLE_GATTS_VAR_ATTR_LEN_MAX; - err_code = sd_ble_cfg_set(BLE_CONN_CFG_GATT, &ble_conf, app_ram_start); + err_code = sd_ble_cfg_set(BLE_CONN_CFG_GATT, &ble_conf, sd_ram_end); if (err_code != NRF_SUCCESS) { return err_code; } @@ -177,7 +177,7 @@ STATIC uint32_t ble_stack_enable(void) { memset(&ble_conf, 0, sizeof(ble_conf)); // Each increment to the BLE_GATTS_ATTR_TAB_SIZE_DEFAULT multiplier costs 1408 bytes. ble_conf.gatts_cfg.attr_tab_size.attr_tab_size = BLEIO_ATTR_TAB_SIZE; - err_code = sd_ble_cfg_set(BLE_GATTS_CFG_ATTR_TAB_SIZE, &ble_conf, app_ram_start); + err_code = sd_ble_cfg_set(BLE_GATTS_CFG_ATTR_TAB_SIZE, &ble_conf, sd_ram_end); if (err_code != NRF_SUCCESS) { return err_code; } @@ -187,13 +187,15 @@ STATIC uint32_t ble_stack_enable(void) { memset(&ble_conf, 0, sizeof(ble_conf)); // Each additional vs_uuid_count costs 16 bytes. ble_conf.common_cfg.vs_uuid_cfg.vs_uuid_count = BLEIO_VS_UUID_COUNT; // Defaults to 10. - err_code = sd_ble_cfg_set(BLE_COMMON_CFG_VS_UUID, &ble_conf, app_ram_start); + err_code = sd_ble_cfg_set(BLE_COMMON_CFG_VS_UUID, &ble_conf, sd_ram_end); if (err_code != NRF_SUCCESS) { return err_code; } - // This sets app_ram_start to the minimum value needed for the settings set above. - err_code = sd_ble_enable(&app_ram_start); + // This sets sd_ram_end to the minimum value needed for the settings set above. + // You can set a breakpoint just after this call and examine sd_ram_end to see + // how much RAM the SD needs with the configuration above. + err_code = sd_ble_enable(&sd_ram_end); if (err_code != NRF_SUCCESS) { return err_code; } @@ -483,8 +485,8 @@ mp_obj_t common_hal_bleio_adapter_start_scan(bleio_adapter_obj_t *self, uint8_t* err_code = sd_ble_gap_scan_start(&scan_params, sd_data); if (err_code != NRF_SUCCESS) { - self->scan_results = NULL; ble_drv_remove_event_handler(scan_on_ble_evt, self->scan_results); + self->scan_results = NULL; check_nrf_error(err_code); } diff --git a/ports/nrf/common-hal/busio/SPI.c b/ports/nrf/common-hal/busio/SPI.c index fdfe61811..380ec27de 100644 --- a/ports/nrf/common-hal/busio/SPI.c +++ b/ports/nrf/common-hal/busio/SPI.c @@ -57,7 +57,7 @@ STATIC spim_peripheral_t spim_peripherals[] = { // Allocate SPIM3 first. { .spim = NRFX_SPIM_INSTANCE(3), .max_frequency = 32000000, - .max_xfer_size = MIN(SPIM3_BUFFER_SIZE, (1UL << SPIM3_EASYDMA_MAXCNT_SIZE) - 1) + .max_xfer_size = MIN(SPIM3_BUFFER_RAM_SIZE, (1UL << SPIM3_EASYDMA_MAXCNT_SIZE) - 1) }, #endif #if NRFX_CHECK(NRFX_SPIM2_ENABLED) @@ -87,8 +87,7 @@ STATIC bool never_reset[MP_ARRAY_SIZE(spim_peripherals)]; // Separate RAM area for SPIM3 transmit buffer to avoid SPIM3 hardware errata. // https://infocenter.nordicsemi.com/index.jsp?topic=%2Ferrata_nRF52840_Rev2%2FERR%2FnRF52840%2FRev2%2Flatest%2Fanomaly_840_198.html -extern uint32_t _spim3_ram; -STATIC uint8_t *spim3_transmit_buffer = (uint8_t *) &_spim3_ram; +STATIC uint8_t *spim3_transmit_buffer = (uint8_t *) SPIM3_BUFFER_RAM_START_ADDR; void spi_reset(void) { for (size_t i = 0 ; i < MP_ARRAY_SIZE(spim_peripherals); i++) { diff --git a/ports/nrf/common-hal/pulseio/PulseOut.c b/ports/nrf/common-hal/pulseio/PulseOut.c index 270cb45d6..bdc5cfbef 100644 --- a/ports/nrf/common-hal/pulseio/PulseOut.c +++ b/ports/nrf/common-hal/pulseio/PulseOut.c @@ -100,7 +100,15 @@ void pulseout_reset() { } void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, - const pulseio_pwmout_obj_t* carrier) { + const pulseio_pwmout_obj_t* carrier, + const mcu_pin_obj_t* pin, + uint32_t frequency, + uint16_t duty_cycle) { + if (!carrier || pin || frequency) { + mp_raise_NotImplementedError(translate("Port does not accept pins or frequency. \ + Construct and pass a PWMOut Carrier instead")); + } + if (refcount == 0) { timer = nrf_peripherals_allocate_timer_or_throw(); } diff --git a/ports/nrf/ld_defines.c b/ports/nrf/ld_defines.c index 8430daccb..6e266e4f7 100644 --- a/ports/nrf/ld_defines.c +++ b/ports/nrf/ld_defines.c @@ -10,6 +10,7 @@ // START_LD_DEFINES /*FLASH_SIZE=*/ FLASH_SIZE; +/*RAM_START_ADDR=*/ RAM_START_ADDR; /*RAM_SIZE=*/ RAM_SIZE; /*MBR_START_ADDR=*/ MBR_START_ADDR; @@ -41,5 +42,11 @@ /*BOOTLOADER_SETTINGS_START_ADDR=*/ BOOTLOADER_SETTINGS_START_ADDR; /*BOOTLOADER_SETTINGS_SIZE=*/ BOOTLOADER_SETTINGS_SIZE; +/*SOFTDEVICE_RAM_START_ADDR=*/ SOFTDEVICE_RAM_START_ADDR; /*SOFTDEVICE_RAM_SIZE=*/ SOFTDEVICE_RAM_SIZE; -/*SPIM3_BUFFER_SIZE=*/ SPIM3_BUFFER_SIZE; + +/*SPIM3_BUFFER_RAM_START_ADDR=*/ SPIM3_BUFFER_RAM_START_ADDR; +/*SPIM3_BUFFER_RAM_SIZE=*/ SPIM3_BUFFER_RAM_SIZE; + +/*APP_RAM_START_ADDR=*/ APP_RAM_START_ADDR; +/*APP_RAM_SIZE=*/ APP_RAM_SIZE; diff --git a/ports/nrf/mpconfigport.h b/ports/nrf/mpconfigport.h index 4e49568ed..36a9819dc 100644 --- a/ports/nrf/mpconfigport.h +++ b/ports/nrf/mpconfigport.h @@ -34,43 +34,36 @@ #include "nrf_sdm.h" // for SD_FLASH_SIZE #include "peripherals/nrf/nvm.h" // for FLASH_PAGE_SIZE -// Max RAM used by SoftDevice. Can be changed when SoftDevice parameters are changed. -// See common.template.ld. -#ifndef SOFTDEVICE_RAM_SIZE -#define SOFTDEVICE_RAM_SIZE (64*1024) -#endif +#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_STDIO_BUFFER (1) +#define MICROPY_PY_UBINASCII (1) +#define MICROPY_PY_UJSON (1) + +// 24kiB stack +#define CIRCUITPY_DEFAULT_STACK_SIZE (24*1024) #ifdef NRF52840 #define MICROPY_PY_SYS_PLATFORM "nRF52840" -#define FLASH_SIZE (0x100000) // 1MiB -#define RAM_SIZE (0x40000) // 256 KiB +#define FLASH_SIZE (1024*1024) // 1MiB +#define RAM_SIZE (256*1024) // 256 KiB // Special RAM area for SPIM3 transmit buffer, to work around hardware bug. // See common.template.ld. -#define SPIM3_BUFFER_SIZE (8192) +#define SPIM3_BUFFER_RAM_SIZE (8*1024) // 8 KiB #endif #ifdef NRF52833 #define MICROPY_PY_SYS_PLATFORM "nRF52833" -#define FLASH_SIZE (0x80000) // 512 KiB -#define RAM_SIZE (0x20000) // 128 KiB -// Special RAM area for SPIM3 transmit buffer, to work around hardware bug. -// See common.template.ld. -#ifndef SPIM3_BUFFER_SIZE -#define SPIM3_BUFFER_SIZE (8192) +#define FLASH_SIZE (512*1024) // 512 KiB +#define RAM_SIZE (128*1024) // 128 KiB +// SPIM3 buffer is not needed on nRF52833: the SPIM3 hw bug is not present. +#ifndef SPIM3_BUFFER_RAM_SIZE +#define SPIM3_BUFFER_RAM_SIZE (0) #endif #endif -#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_STDIO_BUFFER (1) -#define MICROPY_PY_UBINASCII (1) -#define MICROPY_PY_UJSON (1) - -// 24kiB stack -#define CIRCUITPY_DEFAULT_STACK_SIZE 0x6000 - //////////////////////////////////////////////////////////////////////////////////////////////////// // This also includes mpconfigboard.h. @@ -79,7 +72,7 @@ // Definitions that might be overriden by mpconfigboard.h #ifndef CIRCUITPY_INTERNAL_NVM_SIZE -#define CIRCUITPY_INTERNAL_NVM_SIZE (8192) +#define CIRCUITPY_INTERNAL_NVM_SIZE (8*1024) #endif #ifndef BOARD_HAS_32KHZ_XTAL @@ -88,11 +81,11 @@ #endif #if INTERNAL_FLASH_FILESYSTEM - #ifndef CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE - #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (256*1024) - #endif +#ifndef CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE +#define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (256*1024) +#endif #else - #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (0) +#define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (0) #endif // Flash layout, starting at 0x00000000 @@ -116,7 +109,7 @@ // SD_FLASH_SIZE is from nrf_sdm.h #define ISR_START_ADDR (SD_FLASH_START_ADDR + SD_FLASH_SIZE) -#define ISR_SIZE (0x1000) // 4kiB +#define ISR_SIZE (4*1024) // 4kiB // Smallest unit of flash that can be erased. #define FLASH_ERASE_SIZE FLASH_PAGE_SIZE @@ -127,12 +120,12 @@ // Bootloader values from https://github.com/adafruit/Adafruit_nRF52_Bootloader/blob/master/src/linker/s140_v6.ld #define BOOTLOADER_START_ADDR (FLASH_SIZE - BOOTLOADER_SIZE - BOOTLOADER_SETTINGS_SIZE - BOOTLOADER_MBR_SIZE) -#define BOOTLOADER_MBR_SIZE (0x1000) // 4kib +#define BOOTLOADER_MBR_SIZE (4*1024) // 4kib #ifndef BOOTLOADER_SIZE -#define BOOTLOADER_SIZE (0xA000) // 40kiB +#define BOOTLOADER_SIZE (40*1024) // 40kiB #endif #define BOOTLOADER_SETTINGS_START_ADDR (FLASH_SIZE - BOOTLOADER_SETTINGS_SIZE) -#define BOOTLOADER_SETTINGS_SIZE (0x1000) // 4kiB +#define BOOTLOADER_SETTINGS_SIZE (4*1024) // 4kiB #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR (BOOTLOADER_START_ADDR - CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE) @@ -180,11 +173,46 @@ #error No space left in flash for firmware after specifying other regions! #endif +//////////////////////////////////////////////////////////////////////////////////////////////////// +// RAM space definitions + +// Max RAM used by SoftDevice. Can be changed when SoftDevice parameters are changed. +// On nRF52840, the first 64kB of RAM is composed of 8 8kB RAM blocks. Above those is +// RAM block 8, which is 192kB. +// If SPIM3_BUFFER_RAM_SIZE is 8kB, as opposed to zero, it must be in the first 64kB of RAM. +// So the amount of RAM reserved for the SoftDevice must be no more than 56kB. +// SoftDevice 6.1.0 with 5 connections and various increases can be made to use < 56kB. +// To measure the minimum required amount of memory for given configuration, set this number +// high enough to work and then check the mutation of the value done by sd_ble_enable(). +// See common.template.ld. +#ifndef SOFTDEVICE_RAM_SIZE +#define SOFTDEVICE_RAM_SIZE (56*1024) +#endif + + +#define RAM_START_ADDR (0x20000000) +#define SOFTDEVICE_RAM_START_ADDR (RAM_START_ADDR) +#define SPIM3_BUFFER_RAM_START_ADDR (SOFTDEVICE_RAM_START_ADDR + SOFTDEVICE_RAM_SIZE) +#define APP_RAM_START_ADDR (SPIM3_BUFFER_RAM_START_ADDR + SPIM3_BUFFER_RAM_SIZE) +#define APP_RAM_SIZE (RAM_START_ADDR + RAM_SIZE - APP_RAM_START_ADDR) + +#if SPIM3_BUFFER_RAM_SIZE > 0 && SOFTDEVICE_RAM_SIZE + SPIM3_BUFFER_RAM_SIZE > (64*1024) +#error SPIM3 buffer must be in the first 64kB of RAM. +#endif + +#if SOFTDEVICE_RAM_SIZE + SPIM3_BUFFER_RAM_SIZE + APP_RAM_SIZE > RAM_SIZE +#error RAM size regions overflow RAM +#endif + +#if SOFTDEVICE_RAM_SIZE + SPIM3_BUFFER_RAM_SIZE + APP_RAM_SIZE < RAM_SIZE +#error RAM size regions do not use all of RAM +#endif + -#define MICROPY_PORT_ROOT_POINTERS \ - CIRCUITPY_COMMON_ROOT_POINTERS \ - uint16_t* pixels_pattern_heap; \ - ble_drv_evt_handler_entry_t* ble_drv_evt_handler_entries; \ +#define MICROPY_PORT_ROOT_POINTERS \ + CIRCUITPY_COMMON_ROOT_POINTERS \ + uint16_t* pixels_pattern_heap; \ + ble_drv_evt_handler_entry_t* ble_drv_evt_handler_entries; \ #endif // NRF5_MPCONFIGPORT_H__ diff --git a/ports/nrf/nrfx_config.h b/ports/nrf/nrfx_config.h index b528a6032..94812d591 100644 --- a/ports/nrf/nrfx_config.h +++ b/ports/nrf/nrfx_config.h @@ -5,7 +5,7 @@ #define NRFX_POWER_ENABLED 1 #define NRFX_POWER_DEFAULT_CONFIG_IRQ_PRIORITY 7 -// NOTE: THIS WORKAROUND CAUSES BLE CODE TO CRASH. +// NOTE: THIS WORKAROUND CAUSES BLE CODE TO CRASH. DO NOT USE. // It doesn't work with the SoftDevice. // See https://devzone.nordicsemi.com/f/nordic-q-a/33982/sdk-15-software-crash-during-spi-session // Turn on nrfx supported workarounds for errata in Rev1 of nRF52840 diff --git a/ports/stm/common-hal/pulseio/PulseOut.c b/ports/stm/common-hal/pulseio/PulseOut.c index bcc25d817..eec1049dd 100644 --- a/ports/stm/common-hal/pulseio/PulseOut.c +++ b/ports/stm/common-hal/pulseio/PulseOut.c @@ -113,7 +113,15 @@ void pulseout_reset() { } void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, - const pulseio_pwmout_obj_t* carrier) { + const pulseio_pwmout_obj_t* carrier, + const mcu_pin_obj_t* pin, + uint32_t frequency, + uint16_t duty_cycle) { + if (!carrier || pin || frequency) { + mp_raise_NotImplementedError(translate("Port does not accept pins or frequency. \ + Construct and pass a PWMOut Carrier instead")); + } + // Add to active PulseOuts refcount++; TIM_TypeDef * tim_instance = stm_peripherals_find_timer(); diff --git a/py/circuitpy_defns.mk b/py/circuitpy_defns.mk index 515b386f9..b70ae64a8 100644 --- a/py/circuitpy_defns.mk +++ b/py/circuitpy_defns.mk @@ -145,7 +145,7 @@ ifeq ($(CIRCUITPY_DIGITALIO),1) SRC_PATTERNS += digitalio/% endif ifeq ($(CIRCUITPY_DISPLAYIO),1) -SRC_PATTERNS += displayio/% terminalio/% fontio/% +SRC_PATTERNS += displayio/% endif ifeq ($(CIRCUITPY_VECTORIO),1) SRC_PATTERNS += vectorio/% @@ -237,6 +237,9 @@ endif ifeq ($(CIRCUITPY_SUPERVISOR),1) SRC_PATTERNS += supervisor/% endif +ifeq ($(CIRCUITPY_TERMINALIO),1) +SRC_PATTERNS += terminalio/% fontio/% +endif ifeq ($(CIRCUITPY_TIME),1) SRC_PATTERNS += time/% endif diff --git a/py/circuitpy_mpconfig.h b/py/circuitpy_mpconfig.h index f0e8adffa..12d667d8f 100644 --- a/py/circuitpy_mpconfig.h +++ b/py/circuitpy_mpconfig.h @@ -347,16 +347,20 @@ extern const struct _mp_obj_module_t displayio_module; extern const struct _mp_obj_module_t fontio_module; extern const struct _mp_obj_module_t terminalio_module; #define DISPLAYIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_displayio), (mp_obj_t)&displayio_module }, -#define FONTIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_fontio), (mp_obj_t)&fontio_module }, -#define TERMINALIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_terminalio), (mp_obj_t)&terminalio_module }, #ifndef CIRCUITPY_DISPLAY_LIMIT #define CIRCUITPY_DISPLAY_LIMIT (1) #endif #else #define DISPLAYIO_MODULE +#define CIRCUITPY_DISPLAY_LIMIT (0) +#endif + +#if CIRCUITPY_DISPLAYIO && CIRCUITPY_TERMINALIO +#define FONTIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_fontio), (mp_obj_t)&fontio_module }, +#define TERMINALIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_terminalio), (mp_obj_t)&terminalio_module }, +#else #define FONTIO_MODULE #define TERMINALIO_MODULE -#define CIRCUITPY_DISPLAY_LIMIT (0) #endif #if CIRCUITPY_FRAMEBUFFERIO diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 56060fa59..bdc1e77d5 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -195,6 +195,9 @@ CFLAGS += -DCIRCUITPY_STRUCT=$(CIRCUITPY_STRUCT) CIRCUITPY_SUPERVISOR ?= 1 CFLAGS += -DCIRCUITPY_SUPERVISOR=$(CIRCUITPY_SUPERVISOR) +CIRCUITPY_TERMINALIO ?= $(CIRCUITPY_DISPLAYIO) +CFLAGS += -DCIRCUITPY_TERMINALIO=$(CIRCUITPY_TERMINALIO) + CIRCUITPY_TIME ?= 1 CFLAGS += -DCIRCUITPY_TIME=$(CIRCUITPY_TIME) diff --git a/py/makeqstrdata.py b/py/makeqstrdata.py index df2c687e5..04c893876 100644 --- a/py/makeqstrdata.py +++ b/py/makeqstrdata.py @@ -102,10 +102,6 @@ def translate(translation_file, i18ns): def compute_huffman_coding(translations, qstrs, compression_filename): all_strings = [x[1] for x in translations] - - # go through each qstr and print it out - for _, _, qstr in qstrs.values(): - all_strings.append(qstr) all_strings_concat = "".join(all_strings) counts = collections.Counter(all_strings_concat) cb = huffman.codebook(counts.items()) @@ -259,8 +255,6 @@ def compress(encoding_table, decompressed, encoded_length_bits, len_translation_ current_bit -= 1 if current_bit != 7: current_byte += 1 - if current_byte > len(decompressed): - print("Note: compression increased length", repr(decompressed), len(decompressed), current_byte, file=sys.stderr) return enc[:current_byte] def qstr_escape(qst): diff --git a/shared-bindings/_pixelbuf/PixelBuf.c b/shared-bindings/_pixelbuf/PixelBuf.c index 4fc6f7cbf..88e8aa801 100644 --- a/shared-bindings/_pixelbuf/PixelBuf.c +++ b/shared-bindings/_pixelbuf/PixelBuf.c @@ -40,6 +40,10 @@ #include "shared-module/_pixelbuf/PixelBuf.h" #include "shared-bindings/digitalio/DigitalInOut.h" +#ifdef CIRCUITPY_ULAB +#include "extmod/ulab/code/ndarray.h" +#endif + extern const int32_t colorwheel(float pos); static void parse_byteorder(mp_obj_t byteorder_obj, pixelbuf_byteorder_details_t* parsed); @@ -305,6 +309,16 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp size_t length = common_hal__pixelbuf_pixelbuf_get_len(self_in); mp_seq_get_fast_slice_indexes(length, index_in, &slice); + static mp_obj_tuple_t flat_item_tuple = { + .base = {&mp_type_tuple}, + .len = 0, + .items = { + mp_const_none, + mp_const_none, + mp_const_none, + mp_const_none, + } + }; size_t slice_len; if (slice.step > 0) { @@ -326,27 +340,13 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp } else { // Set #if MICROPY_PY_ARRAY_SLICE_ASSIGN - if (!(MP_OBJ_IS_TYPE(value, &mp_type_list) || MP_OBJ_IS_TYPE(value, &mp_type_tuple))) { - mp_raise_ValueError(translate("tuple/list required on RHS")); - } + size_t num_items = mp_obj_get_int(mp_obj_len(value)); - mp_obj_t *src_objs; - size_t num_items; - if (MP_OBJ_IS_TYPE(value, &mp_type_list)) { - mp_obj_list_t *t = MP_OBJ_TO_PTR(value); - num_items = t->len; - src_objs = t->items; - } else { - mp_obj_tuple_t *l = MP_OBJ_TO_PTR(value); - num_items = l->len; - src_objs = l->items; - } - if (num_items != slice_len) { - mp_raise_ValueError_varg(translate("Unmatched number of items on RHS (expected %d, got %d)."), - slice_len, num_items); + if (num_items != slice_len && num_items != (slice_len * common_hal__pixelbuf_pixelbuf_get_bpp(self_in))) { + mp_raise_ValueError_varg(translate("Unmatched number of items on RHS (expected %d, got %d)."), slice_len, num_items); } - - common_hal__pixelbuf_pixelbuf_set_pixels(self_in, slice.start, slice.step, slice_len, src_objs); + common_hal__pixelbuf_pixelbuf_set_pixels(self_in, slice.start, slice.step, slice_len, value, + num_items != slice_len ? &flat_item_tuple : mp_const_none); return mp_const_none; #else return MP_OBJ_NULL; // op not supported diff --git a/shared-bindings/_pixelbuf/PixelBuf.h b/shared-bindings/_pixelbuf/PixelBuf.h index 0b09a5771..d41082059 100644 --- a/shared-bindings/_pixelbuf/PixelBuf.h +++ b/shared-bindings/_pixelbuf/PixelBuf.h @@ -47,6 +47,6 @@ void common_hal__pixelbuf_pixelbuf_fill(mp_obj_t self, mp_obj_t item); void common_hal__pixelbuf_pixelbuf_show(mp_obj_t self); mp_obj_t common_hal__pixelbuf_pixelbuf_get_pixel(mp_obj_t self, size_t index); void common_hal__pixelbuf_pixelbuf_set_pixel(mp_obj_t self, size_t index, mp_obj_t item); -void common_hal__pixelbuf_pixelbuf_set_pixels(mp_obj_t self_in, size_t start, mp_int_t step, size_t slice_len, mp_obj_t* values); +void common_hal__pixelbuf_pixelbuf_set_pixels(mp_obj_t self_in, size_t start, mp_int_t step, size_t slice_len, mp_obj_t* values, mp_obj_tuple_t *flatten_to); #endif // CP_SHARED_BINDINGS_PIXELBUF_PIXELBUF_H diff --git a/shared-bindings/_typing/__init__ 2.pyi b/shared-bindings/_typing/__init__ 2.pyi new file mode 100644 index 000000000..48e68a8d5 --- /dev/null +++ b/shared-bindings/_typing/__init__ 2.pyi @@ -0,0 +1,54 @@ +"""Types for the C-level protocols""" + +from typing import Union + +import array +import audiocore +import audiomixer +import audiomp3 +import rgbmatrix +import ulab + +ReadableBuffer = Union[ + bytes, bytearray, memoryview, array.array, ulab.array, rgbmatrix.RGBMatrix +] +"""Classes that implement the readable buffer protocol + + - `bytes` + - `bytearray` + - `memoryview` + - `array.array` + - `ulab.array` + - `rgbmatrix.RGBMatrix` +""" + +WriteableBuffer = Union[ + bytearray, memoryview, array.array, ulab.array, rgbmatrix.RGBMatrix +] +"""Classes that implement the writeable buffer protocol + + - `bytearray` + - `memoryview` + - `array.array` + - `ulab.array` + - `rgbmatrix.RGBMatrix` +""" + +AudioSample = Union[ + audiocore.WaveFile, audiocore.RawSample, audiomixer.Mixer, audiomp3.MP3Decoder +] +"""Classes that implement the audiosample protocol + + - `audiocore.WaveFile` + - `audiocore.RawSample` + - `audiomixer.Mixer` + - `audiomp3.MP3Decoder` + + You can play these back with `audioio.AudioOut`, `audiobusio.I2SOut` or `audiopwmio.PWMAudioOut`. +""" + +FrameBuffer = Union[rgbmatrix.RGBMatrix] +"""Classes that implement the framebuffer protocol + + - `rgbmatrix.RGBMatrix` +""" diff --git a/shared-bindings/displayio/Bitmap.c b/shared-bindings/displayio/Bitmap.c index a31256f93..2fb1cd11e 100644 --- a/shared-bindings/displayio/Bitmap.c +++ b/shared-bindings/displayio/Bitmap.c @@ -172,7 +172,8 @@ STATIC mp_obj_t bitmap_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t val return mp_const_none; } -//| def blit(self, x: int, y: int, source_bitmap: bitmap, *, x1: int, y1: int, x2: int, y2: int, skip_index: int) -> Any: + +//| def blit(self, x: int, y: int, source_bitmap: bitmap, *, x1: int, y1: int, x2: int, y2: int, skip_index: int) -> None: //| """Inserts the source_bitmap region defined by rectangular boundaries //| (x1,y1) and (x2,y2) into the bitmap at the specified (x,y) location. //| :param int x: Horizontal pixel location in bitmap where source_bitmap upper-left @@ -294,11 +295,7 @@ MP_DEFINE_CONST_FUN_OBJ_2(displayio_bitmap_fill_obj, displayio_bitmap_obj_fill); STATIC const mp_rom_map_elem_t displayio_bitmap_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&displayio_bitmap_height_obj) }, { MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&displayio_bitmap_width_obj) }, -<<<<<<< HEAD { MP_ROM_QSTR(MP_QSTR_blit), MP_ROM_PTR(&displayio_bitmap_blit_obj) }, -======= - { MP_ROM_QSTR(MP_QSTR_insert), MP_ROM_PTR(&displayio_bitmap_insert_obj) }, // Added insert function 8/7/2020 ->>>>>>> upstream/master { MP_ROM_QSTR(MP_QSTR_fill), MP_ROM_PTR(&displayio_bitmap_fill_obj) }, }; diff --git a/shared-bindings/gnss/GNSS 2.c b/shared-bindings/gnss/GNSS 2.c new file mode 100644 index 000000000..087c35395 --- /dev/null +++ b/shared-bindings/gnss/GNSS 2.c @@ -0,0 +1,205 @@ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT + +#include "shared-bindings/gnss/GNSS.h" +#include "shared-bindings/time/__init__.h" +#include "shared-bindings/util.h" + +#include "py/objproperty.h" +#include "py/runtime.h" + +//| class GNSS: +//| """Get updated positioning information from Global Navigation Satellite System (GNSS) +//| +//| Usage:: +//| +//| import gnss +//| import time +//| +//| nav = gnss.GNSS([gnss.SatelliteSystem.GPS, gnss.SatelliteSystem.GLONASS]) +//| last_print = time.monotonic() +//| while True: +//| nav.update() +//| current = time.monotonic() +//| if current - last_print >= 1.0: +//| last_print = current +//| if nav.fix is gnss.PositionFix.INVALID: +//| print("Waiting for fix...") +//| continue +//| print("Latitude: {0:.6f} degrees".format(nav.latitude)) +//| print("Longitude: {0:.6f} degrees".format(nav.longitude))""" +//| + +//| def __init__(self, system: Union[SatelliteSystem, List[SatelliteSystem]]) -> None: +//| """Turn on the GNSS. +//| +//| :param system: satellite system to use""" +//| ... +//| +STATIC mp_obj_t gnss_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + gnss_obj_t *self = m_new_obj(gnss_obj_t); + self->base.type = &gnss_type; + enum { ARG_system }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_system, MP_ARG_REQUIRED | MP_ARG_OBJ }, + }; + 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); + + unsigned long selection = 0; + if (MP_OBJ_IS_TYPE(args[ARG_system].u_obj, &gnss_satellitesystem_type)) { + selection |= gnss_satellitesystem_obj_to_type(args[ARG_system].u_obj); + } else if (MP_OBJ_IS_TYPE(args[ARG_system].u_obj, &mp_type_list)) { + size_t systems_size = 0; + mp_obj_t *systems; + mp_obj_list_get(args[ARG_system].u_obj, &systems_size, &systems); + for (size_t i = 0; i < systems_size; ++i) { + if (!MP_OBJ_IS_TYPE(systems[i], &gnss_satellitesystem_type)) { + mp_raise_TypeError(translate("System entry must be gnss.SatelliteSystem")); + } + selection |= gnss_satellitesystem_obj_to_type(systems[i]); + } + } else { + mp_raise_TypeError(translate("System entry must be gnss.SatelliteSystem")); + } + + common_hal_gnss_construct(self, selection); + return MP_OBJ_FROM_PTR(self); +} + +//| def deinit(self) -> None: +//| """Turn off the GNSS.""" +//| ... +//| +STATIC mp_obj_t gnss_obj_deinit(mp_obj_t self_in) { + gnss_obj_t *self = MP_OBJ_TO_PTR(self_in); + common_hal_gnss_deinit(self); + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_1(gnss_deinit_obj, gnss_obj_deinit); + +STATIC void check_for_deinit(gnss_obj_t *self) { + if (common_hal_gnss_deinited(self)) { + raise_deinited_error(); + } +} + +//| def update(self) -> None: +//| """Update GNSS positioning information.""" +//| ... +//| +STATIC mp_obj_t gnss_obj_update(mp_obj_t self_in) { + gnss_obj_t *self = MP_OBJ_TO_PTR(self_in); + check_for_deinit(self); + + common_hal_gnss_update(self); + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_1(gnss_update_obj, gnss_obj_update); + +//| latitude: float +//| """Latitude of current position in degrees (float).""" +//| +STATIC mp_obj_t gnss_obj_get_latitude(mp_obj_t self_in) { + gnss_obj_t *self = MP_OBJ_TO_PTR(self_in); + check_for_deinit(self); + return mp_obj_new_float(common_hal_gnss_get_latitude(self)); +} +MP_DEFINE_CONST_FUN_OBJ_1(gnss_get_latitude_obj, gnss_obj_get_latitude); + +const mp_obj_property_t gnss_latitude_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&gnss_get_latitude_obj, + (mp_obj_t)&mp_const_none_obj, + (mp_obj_t)&mp_const_none_obj}, +}; + +//| longitude: float +//| """Longitude of current position in degrees (float).""" +//| +STATIC mp_obj_t gnss_obj_get_longitude(mp_obj_t self_in) { + gnss_obj_t *self = MP_OBJ_TO_PTR(self_in); + check_for_deinit(self); + return mp_obj_new_float(common_hal_gnss_get_longitude(self)); +} +MP_DEFINE_CONST_FUN_OBJ_1(gnss_get_longitude_obj, gnss_obj_get_longitude); + +const mp_obj_property_t gnss_longitude_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&gnss_get_longitude_obj, + (mp_obj_t)&mp_const_none_obj, + (mp_obj_t)&mp_const_none_obj}, +}; + +//| altitude: float +//| """Altitude of current position in meters (float).""" +//| +STATIC mp_obj_t gnss_obj_get_altitude(mp_obj_t self_in) { + gnss_obj_t *self = MP_OBJ_TO_PTR(self_in); + check_for_deinit(self); + return mp_obj_new_float(common_hal_gnss_get_altitude(self)); +} +MP_DEFINE_CONST_FUN_OBJ_1(gnss_get_altitude_obj, gnss_obj_get_altitude); + +const mp_obj_property_t gnss_altitude_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&gnss_get_altitude_obj, + (mp_obj_t)&mp_const_none_obj, + (mp_obj_t)&mp_const_none_obj}, +}; + +//| timestamp: time.struct_time +//| """Time when the position data was updated.""" +//| +STATIC mp_obj_t gnss_obj_get_timestamp(mp_obj_t self_in) { + gnss_obj_t *self = MP_OBJ_TO_PTR(self_in); + check_for_deinit(self); + timeutils_struct_time_t tm; + common_hal_gnss_get_timestamp(self, &tm); + return struct_time_from_tm(&tm); +} +MP_DEFINE_CONST_FUN_OBJ_1(gnss_get_timestamp_obj, gnss_obj_get_timestamp); + +const mp_obj_property_t gnss_timestamp_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&gnss_get_timestamp_obj, + (mp_obj_t)&mp_const_none_obj, + (mp_obj_t)&mp_const_none_obj}, +}; + +//| fix: PositionFix +//| """Fix mode.""" +//| +STATIC mp_obj_t gnss_obj_get_fix(mp_obj_t self_in) { + gnss_obj_t *self = MP_OBJ_TO_PTR(self_in); + check_for_deinit(self); + return gnss_positionfix_type_to_obj(common_hal_gnss_get_fix(self)); +} +MP_DEFINE_CONST_FUN_OBJ_1(gnss_get_fix_obj, gnss_obj_get_fix); + +const mp_obj_property_t gnss_fix_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&gnss_get_fix_obj, + (mp_obj_t)&mp_const_none_obj, + (mp_obj_t)&mp_const_none_obj}, +}; + +STATIC const mp_rom_map_elem_t gnss_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&gnss_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&gnss_update_obj) }, + + { MP_ROM_QSTR(MP_QSTR_latitude), MP_ROM_PTR(&gnss_latitude_obj) }, + { MP_ROM_QSTR(MP_QSTR_longitude), MP_ROM_PTR(&gnss_longitude_obj) }, + { MP_ROM_QSTR(MP_QSTR_altitude), MP_ROM_PTR(&gnss_altitude_obj) }, + { MP_ROM_QSTR(MP_QSTR_timestamp), MP_ROM_PTR(&gnss_timestamp_obj) }, + { MP_ROM_QSTR(MP_QSTR_fix), MP_ROM_PTR(&gnss_fix_obj) } +}; +STATIC MP_DEFINE_CONST_DICT(gnss_locals_dict, gnss_locals_dict_table); + +const mp_obj_type_t gnss_type = { + { &mp_type_type }, + .name = MP_QSTR_GNSS, + .make_new = gnss_make_new, + .locals_dict = (mp_obj_dict_t*)&gnss_locals_dict, +}; diff --git a/shared-bindings/gnss/GNSS 2.h b/shared-bindings/gnss/GNSS 2.h new file mode 100644 index 000000000..60069a90a --- /dev/null +++ b/shared-bindings/gnss/GNSS 2.h @@ -0,0 +1,27 @@ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT + +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_GNSS_H +#define MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_GNSS_H + +#include "common-hal/gnss/GNSS.h" +#include "shared-bindings/gnss/SatelliteSystem.h" +#include "shared-bindings/gnss/PositionFix.h" + +#include "lib/timeutils/timeutils.h" + +extern const mp_obj_type_t gnss_type; + +void common_hal_gnss_construct(gnss_obj_t *self, unsigned long selection); +void common_hal_gnss_deinit(gnss_obj_t *self); +bool common_hal_gnss_deinited(gnss_obj_t *self); +void common_hal_gnss_update(gnss_obj_t *self); + +mp_float_t common_hal_gnss_get_latitude(gnss_obj_t *self); +mp_float_t common_hal_gnss_get_longitude(gnss_obj_t *self); +mp_float_t common_hal_gnss_get_altitude(gnss_obj_t *self); +void common_hal_gnss_get_timestamp(gnss_obj_t *self, timeutils_struct_time_t *tm); +gnss_positionfix_t common_hal_gnss_get_fix(gnss_obj_t *self); + +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_GNSS_H diff --git a/shared-bindings/gnss/PositionFix 2.c b/shared-bindings/gnss/PositionFix 2.c new file mode 100644 index 000000000..e60611d70 --- /dev/null +++ b/shared-bindings/gnss/PositionFix 2.c @@ -0,0 +1,80 @@ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT + +#include "shared-bindings/gnss/PositionFix.h" + +//| class PositionFix: +//| """Position fix mode""" +//| +//| def __init__(self) -> None: +//| """Enum-like class to define the position fix mode.""" +//| +//| INVALID: PositionFix +//| """No measurement.""" +//| +//| FIX_2D: PositionFix +//| """2D fix.""" +//| +//| FIX_3D: PositionFix +//| """3D fix.""" +//| +const mp_obj_type_t gnss_positionfix_type; + +const gnss_positionfix_obj_t gnss_positionfix_invalid_obj = { + { &gnss_positionfix_type }, +}; + +const gnss_positionfix_obj_t gnss_positionfix_fix2d_obj = { + { &gnss_positionfix_type }, +}; + +const gnss_positionfix_obj_t gnss_positionfix_fix3d_obj = { + { &gnss_positionfix_type }, +}; + +gnss_positionfix_t gnss_positionfix_obj_to_type(mp_obj_t obj) { + gnss_positionfix_t posfix = POSITIONFIX_INVALID; + if (obj == MP_ROM_PTR(&gnss_positionfix_fix2d_obj)) { + posfix = POSITIONFIX_2D; + } else if (obj == MP_ROM_PTR(&gnss_positionfix_fix3d_obj)) { + posfix = POSITIONFIX_3D; + } + return posfix; +} + +mp_obj_t gnss_positionfix_type_to_obj(gnss_positionfix_t posfix) { + switch (posfix) { + case POSITIONFIX_2D: + return (mp_obj_t)MP_ROM_PTR(&gnss_positionfix_fix2d_obj); + case POSITIONFIX_3D: + return (mp_obj_t)MP_ROM_PTR(&gnss_positionfix_fix3d_obj); + case POSITIONFIX_INVALID: + default: + return (mp_obj_t)MP_ROM_PTR(&gnss_positionfix_invalid_obj); + } +} + +STATIC const mp_rom_map_elem_t gnss_positionfix_locals_dict_table[] = { + {MP_ROM_QSTR(MP_QSTR_INVALID), MP_ROM_PTR(&gnss_positionfix_invalid_obj)}, + {MP_ROM_QSTR(MP_QSTR_FIX_2D), MP_ROM_PTR(&gnss_positionfix_fix2d_obj)}, + {MP_ROM_QSTR(MP_QSTR_FIX_3D), MP_ROM_PTR(&gnss_positionfix_fix3d_obj)}, +}; +STATIC MP_DEFINE_CONST_DICT(gnss_positionfix_locals_dict, gnss_positionfix_locals_dict_table); + +STATIC void gnss_positionfix_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { + qstr posfix = MP_QSTR_INVALID; + if (MP_OBJ_TO_PTR(self_in) == MP_ROM_PTR(&gnss_positionfix_fix2d_obj)) { + posfix = MP_QSTR_FIX_2D; + } else if (MP_OBJ_TO_PTR(self_in) == MP_ROM_PTR(&gnss_positionfix_fix3d_obj)) { + posfix = MP_QSTR_FIX_3D; + } + mp_printf(print, "%q.%q.%q", MP_QSTR_gnss, MP_QSTR_PositionFix, posfix); +} + +const mp_obj_type_t gnss_positionfix_type = { + { &mp_type_type }, + .name = MP_QSTR_PositionFix, + .print = gnss_positionfix_print, + .locals_dict = (mp_obj_t)&gnss_positionfix_locals_dict, +}; diff --git a/shared-bindings/gnss/PositionFix 2.h b/shared-bindings/gnss/PositionFix 2.h new file mode 100644 index 000000000..34090872c --- /dev/null +++ b/shared-bindings/gnss/PositionFix 2.h @@ -0,0 +1,28 @@ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT + +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_POSITIONFIX_H +#define MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_POSITIONFIX_H + +#include "py/obj.h" + +typedef enum { + POSITIONFIX_INVALID, + POSITIONFIX_2D, + POSITIONFIX_3D, +} gnss_positionfix_t; + +const mp_obj_type_t gnss_positionfix_type; + +gnss_positionfix_t gnss_positionfix_obj_to_type(mp_obj_t obj); +mp_obj_t gnss_positionfix_type_to_obj(gnss_positionfix_t mode); + +typedef struct { + mp_obj_base_t base; +} gnss_positionfix_obj_t; +extern const gnss_positionfix_obj_t gnss_positionfix_invalid_obj; +extern const gnss_positionfix_obj_t gnss_positionfix_fix2d_obj; +extern const gnss_positionfix_obj_t gnss_positionfix_fix3d_obj; + +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_POSITIONFIX_H diff --git a/shared-bindings/gnss/SatelliteSystem 2.c b/shared-bindings/gnss/SatelliteSystem 2.c new file mode 100644 index 000000000..7d66727b8 --- /dev/null +++ b/shared-bindings/gnss/SatelliteSystem 2.c @@ -0,0 +1,113 @@ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT + +#include "shared-bindings/gnss/SatelliteSystem.h" + +//| class SatelliteSystem: +//| """Satellite system type""" +//| +//| def __init__(self) -> None: +//| """Enum-like class to define the satellite system type.""" +//| +//| GPS: SatelliteSystem +//| """Global Positioning System.""" +//| +//| GLONASS: SatelliteSystem +//| """GLObal NAvigation Satellite System.""" +//| +//| SBAS: SatelliteSystem +//| """Satellite Based Augmentation System.""" +//| +//| QZSS_L1CA: SatelliteSystem +//| """Quasi-Zenith Satellite System L1C/A.""" +//| +//| QZSS_L1S: SatelliteSystem +//| """Quasi-Zenith Satellite System L1S.""" +//| +const mp_obj_type_t gnss_satellitesystem_type; + +const gnss_satellitesystem_obj_t gnss_satellitesystem_gps_obj = { + { &gnss_satellitesystem_type }, +}; + +const gnss_satellitesystem_obj_t gnss_satellitesystem_glonass_obj = { + { &gnss_satellitesystem_type }, +}; + +const gnss_satellitesystem_obj_t gnss_satellitesystem_sbas_obj = { + { &gnss_satellitesystem_type }, +}; + +const gnss_satellitesystem_obj_t gnss_satellitesystem_qzss_l1ca_obj = { + { &gnss_satellitesystem_type }, +}; + +const gnss_satellitesystem_obj_t gnss_satellitesystem_qzss_l1s_obj = { + { &gnss_satellitesystem_type }, +}; + +gnss_satellitesystem_t gnss_satellitesystem_obj_to_type(mp_obj_t obj) { + if (obj == MP_ROM_PTR(&gnss_satellitesystem_gps_obj)) { + return SATELLITESYSTEM_GPS; + } else if (obj == MP_ROM_PTR(&gnss_satellitesystem_glonass_obj)) { + return SATELLITESYSTEM_GLONASS; + } else if (obj == MP_ROM_PTR(&gnss_satellitesystem_sbas_obj)) { + return SATELLITESYSTEM_SBAS; + } else if (obj == MP_ROM_PTR(&gnss_satellitesystem_qzss_l1ca_obj)) { + return SATELLITESYSTEM_QZSS_L1CA; + } else if (obj == MP_ROM_PTR(&gnss_satellitesystem_qzss_l1s_obj)) { + return SATELLITESYSTEM_QZSS_L1S; + } + return SATELLITESYSTEM_NONE; +} + +mp_obj_t gnss_satellitesystem_type_to_obj(gnss_satellitesystem_t system) { + switch (system) { + case SATELLITESYSTEM_GPS: + return (mp_obj_t)MP_ROM_PTR(&gnss_satellitesystem_gps_obj); + case SATELLITESYSTEM_GLONASS: + return (mp_obj_t)MP_ROM_PTR(&gnss_satellitesystem_glonass_obj); + case SATELLITESYSTEM_SBAS: + return (mp_obj_t)MP_ROM_PTR(&gnss_satellitesystem_sbas_obj); + case SATELLITESYSTEM_QZSS_L1CA: + return (mp_obj_t)MP_ROM_PTR(&gnss_satellitesystem_qzss_l1ca_obj); + case SATELLITESYSTEM_QZSS_L1S: + return (mp_obj_t)MP_ROM_PTR(&gnss_satellitesystem_qzss_l1s_obj); + case SATELLITESYSTEM_NONE: + default: + return (mp_obj_t)MP_ROM_PTR(&mp_const_none_obj); + } +} + +STATIC const mp_rom_map_elem_t gnss_satellitesystem_locals_dict_table[] = { + {MP_ROM_QSTR(MP_QSTR_GPS), MP_ROM_PTR(&gnss_satellitesystem_gps_obj)}, + {MP_ROM_QSTR(MP_QSTR_GLONASS), MP_ROM_PTR(&gnss_satellitesystem_glonass_obj)}, + {MP_ROM_QSTR(MP_QSTR_SBAS), MP_ROM_PTR(&gnss_satellitesystem_sbas_obj)}, + {MP_ROM_QSTR(MP_QSTR_QZSS_L1CA), MP_ROM_PTR(&gnss_satellitesystem_qzss_l1ca_obj)}, + {MP_ROM_QSTR(MP_QSTR_QZSS_L1S), MP_ROM_PTR(&gnss_satellitesystem_qzss_l1s_obj)}, +}; +STATIC MP_DEFINE_CONST_DICT(gnss_satellitesystem_locals_dict, gnss_satellitesystem_locals_dict_table); + +STATIC void gnss_satellitesystem_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) { + qstr system = MP_QSTR_None; + if (MP_OBJ_TO_PTR(self_in) == MP_ROM_PTR(&gnss_satellitesystem_gps_obj)) { + system = MP_QSTR_GPS; + } else if (MP_OBJ_TO_PTR(self_in) == MP_ROM_PTR(&gnss_satellitesystem_glonass_obj)) { + system = MP_QSTR_GLONASS; + } else if (MP_OBJ_TO_PTR(self_in) == MP_ROM_PTR(&gnss_satellitesystem_sbas_obj)) { + system = MP_QSTR_SBAS; + } else if (MP_OBJ_TO_PTR(self_in) == MP_ROM_PTR(&gnss_satellitesystem_qzss_l1ca_obj)) { + system = MP_QSTR_QZSS_L1CA; + } else if (MP_OBJ_TO_PTR(self_in) == MP_ROM_PTR(&gnss_satellitesystem_qzss_l1s_obj)) { + system = MP_QSTR_QZSS_L1S; + } + mp_printf(print, "%q.%q.%q", MP_QSTR_gnss, MP_QSTR_SatelliteSystem, system); +} + +const mp_obj_type_t gnss_satellitesystem_type = { + { &mp_type_type }, + .name = MP_QSTR_SatelliteSystem, + .print = gnss_satellitesystem_print, + .locals_dict = (mp_obj_t)&gnss_satellitesystem_locals_dict, +}; diff --git a/shared-bindings/gnss/SatelliteSystem 2.h b/shared-bindings/gnss/SatelliteSystem 2.h new file mode 100644 index 000000000..17f155002 --- /dev/null +++ b/shared-bindings/gnss/SatelliteSystem 2.h @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT + +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_SATELLITESYSTEM_H +#define MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_SATELLITESYSTEM_H + +#include "py/obj.h" + +typedef enum { + SATELLITESYSTEM_NONE = 0, + SATELLITESYSTEM_GPS = (1U << 0), + SATELLITESYSTEM_GLONASS = (1U << 1), + SATELLITESYSTEM_SBAS = (1U << 2), + SATELLITESYSTEM_QZSS_L1CA = (1U << 3), + SATELLITESYSTEM_QZSS_L1S = (1U << 4), +} gnss_satellitesystem_t; + +const mp_obj_type_t gnss_satellitesystem_type; + +gnss_satellitesystem_t gnss_satellitesystem_obj_to_type(mp_obj_t obj); +mp_obj_t gnss_satellitesystem_type_to_obj(gnss_satellitesystem_t mode); + +typedef struct { + mp_obj_base_t base; +} gnss_satellitesystem_obj_t; +extern const gnss_satellitesystem_obj_t gnss_satellitesystem_gps_obj; +extern const gnss_satellitesystem_obj_t gnss_satellitesystem_glonass_obj; +extern const gnss_satellitesystem_obj_t gnss_satellitesystem_sbas_obj; +extern const gnss_satellitesystem_obj_t gnss_satellitesystem_qzss_l1ca_obj; +extern const gnss_satellitesystem_obj_t gnss_satellitesystem_qzss_l1s_obj; + +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_SATELLITESYSTEM_H diff --git a/shared-bindings/gnss/__init__ 2.c b/shared-bindings/gnss/__init__ 2.c new file mode 100644 index 000000000..4b0d312ae --- /dev/null +++ b/shared-bindings/gnss/__init__ 2.c @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT + +#include "py/obj.h" +#include "py/runtime.h" +#include "py/mphal.h" +#include "shared-bindings/gnss/GNSS.h" +#include "shared-bindings/gnss/SatelliteSystem.h" +#include "shared-bindings/gnss/PositionFix.h" +#include "shared-bindings/util.h" + +//| """Global Navigation Satellite System +//| +//| The `gnss` module contains classes to control the GNSS and acquire positioning information.""" +//| +STATIC const mp_rom_map_elem_t gnss_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_gnss) }, + { MP_ROM_QSTR(MP_QSTR_GNSS), MP_ROM_PTR(&gnss_type) }, + + // Enum-like Classes. + { MP_ROM_QSTR(MP_QSTR_SatelliteSystem), MP_ROM_PTR(&gnss_satellitesystem_type) }, + { MP_ROM_QSTR(MP_QSTR_PositionFix), MP_ROM_PTR(&gnss_positionfix_type) }, +}; + +STATIC MP_DEFINE_CONST_DICT(gnss_module_globals, gnss_module_globals_table); + +const mp_obj_module_t gnss_module = { + .base = { &mp_type_module }, + .globals = (mp_obj_dict_t*)&gnss_module_globals, +}; diff --git a/shared-bindings/i2cperipheral/I2CPeripheral 2.c b/shared-bindings/i2cperipheral/I2CPeripheral 2.c new file mode 100644 index 000000000..b5ac861b4 --- /dev/null +++ b/shared-bindings/i2cperipheral/I2CPeripheral 2.c @@ -0,0 +1,436 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2018 Noralf Trønnes + * + * 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 "shared-bindings/microcontroller/Pin.h" +#include "shared-bindings/i2cperipheral/I2CPeripheral.h" +#include "shared-bindings/time/__init__.h" +#include "shared-bindings/util.h" + +#include "lib/utils/buffer_helper.h" +#include "lib/utils/context_manager_helpers.h" +#include "lib/utils/interrupt_char.h" + +#include "py/mperrno.h" +#include "py/mphal.h" +#include "py/obj.h" +#include "py/objproperty.h" +#include "py/runtime.h" + +STATIC mp_obj_t mp_obj_new_i2cperipheral_i2c_peripheral_request(i2cperipheral_i2c_peripheral_obj_t *peripheral, uint8_t address, bool is_read, bool is_restart) { + i2cperipheral_i2c_peripheral_request_obj_t *self = m_new_obj(i2cperipheral_i2c_peripheral_request_obj_t); + self->base.type = &i2cperipheral_i2c_peripheral_request_type; + self->peripheral = peripheral; + self->address = address; + self->is_read = is_read; + self->is_restart = is_restart; + return (mp_obj_t)self; +} + +//| class I2CPeripheral: +//| """Two wire serial protocol peripheral""" +//| +//| def __init__(self, scl: microcontroller.Pin, sda: microcontroller.Pin, addresses: Sequence[int], smbus: bool = False) -> None: +//| """I2C is a two-wire protocol for communicating between devices. +//| This implements the peripheral (sensor, secondary) side. +//| +//| :param ~microcontroller.Pin scl: The clock pin +//| :param ~microcontroller.Pin sda: The data pin +//| :param addresses: The I2C addresses to respond to (how many is hw dependent). +//| :type addresses: list[int] +//| :param bool smbus: Use SMBUS timings if the hardware supports it""" +//| ... +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + i2cperipheral_i2c_peripheral_obj_t *self = m_new_obj(i2cperipheral_i2c_peripheral_obj_t); + self->base.type = &i2cperipheral_i2c_peripheral_type; + enum { ARG_scl, ARG_sda, ARG_addresses, ARG_smbus }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_scl, MP_ARG_REQUIRED | MP_ARG_OBJ }, + { MP_QSTR_sda, MP_ARG_REQUIRED | MP_ARG_OBJ }, + { MP_QSTR_addresses, MP_ARG_REQUIRED | MP_ARG_OBJ }, + { MP_QSTR_smbus, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} }, + }; + 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); + + const mcu_pin_obj_t* scl = validate_obj_is_free_pin(args[ARG_scl].u_obj); + const mcu_pin_obj_t* sda = validate_obj_is_free_pin(args[ARG_sda].u_obj); + + mp_obj_iter_buf_t iter_buf; + mp_obj_t iterable = mp_getiter(args[ARG_addresses].u_obj, &iter_buf); + mp_obj_t item; + uint8_t *addresses = NULL; + unsigned int i = 0; + while ((item = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) { + mp_int_t value; + if (!mp_obj_get_int_maybe(item, &value)) { + mp_raise_TypeError_varg(translate("can't convert %q to %q"), MP_QSTR_address, MP_QSTR_int); + } + if (value < 0x00 || value > 0x7f) { + mp_raise_ValueError(translate("address out of bounds")); + } + addresses = m_renew(uint8_t, addresses, i, i + 1); + addresses[i++] = value; + } + if (i == 0) { + mp_raise_ValueError(translate("addresses is empty")); + } + + common_hal_i2cperipheral_i2c_peripheral_construct(self, scl, sda, addresses, i, args[ARG_smbus].u_bool); + return (mp_obj_t)self; +} + +//| def deinit(self) -> None: +//| """Releases control of the underlying hardware so other classes can use it.""" +//| ... +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_obj_deinit(mp_obj_t self_in) { + mp_check_self(MP_OBJ_IS_TYPE(self_in, &i2cperipheral_i2c_peripheral_type)); + i2cperipheral_i2c_peripheral_obj_t *self = MP_OBJ_TO_PTR(self_in); + common_hal_i2cperipheral_i2c_peripheral_deinit(self); + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_1(i2cperipheral_i2c_peripheral_deinit_obj, i2cperipheral_i2c_peripheral_obj_deinit); + +//| def __enter__(self) -> I2CPeripheral: +//| """No-op used in Context Managers.""" +//| ... +//| +// Provided by context manager helper. + +//| def __exit__(self) -> None: +//| """Automatically deinitializes the hardware on context exit. See +//| :ref:`lifetime-and-contextmanagers` for more info.""" +//| ... +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_obj___exit__(size_t n_args, const mp_obj_t *args) { + mp_check_self(MP_OBJ_IS_TYPE(args[0], &i2cperipheral_i2c_peripheral_type)); + i2cperipheral_i2c_peripheral_obj_t *self = MP_OBJ_TO_PTR(args[0]); + common_hal_i2cperipheral_i2c_peripheral_deinit(self); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(i2cperipheral_i2c_peripheral___exit___obj, 4, 4, i2cperipheral_i2c_peripheral_obj___exit__); + +//| def request(self, timeout: float = -1) -> I2CPeripheralRequest: +//| """Wait for an I2C request. +//| +//| :param float timeout: Timeout in seconds. Zero means wait forever, a negative value means check once +//| :return: I2C Slave Request or None if timeout=-1 and there's no request +//| :rtype: ~i2cperipheral.I2CPeripheralRequest""" +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_request(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + mp_check_self(MP_OBJ_IS_TYPE(pos_args[0], &i2cperipheral_i2c_peripheral_type)); + i2cperipheral_i2c_peripheral_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]); + if(common_hal_i2cperipheral_i2c_peripheral_deinited(self)) { + raise_deinited_error(); + } + enum { ARG_timeout }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NEW_SMALL_INT(-1)} }, + }; + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + #if MICROPY_PY_BUILTINS_FLOAT + float f = mp_obj_get_float(args[ARG_timeout].u_obj) * 1000; + int timeout_ms = (int)f; + #else + int timeout_ms = mp_obj_get_int(args[ARG_timeout].u_obj) * 1000; + #endif + + bool forever = false; + uint64_t timeout_end = 0; + if (timeout_ms == 0) { + forever = true; + } else if (timeout_ms > 0) { + timeout_end = common_hal_time_monotonic() + timeout_ms; + } + + int last_error = 0; + + do { + uint8_t address; + bool is_read; + bool is_restart; + + RUN_BACKGROUND_TASKS; + if (mp_hal_is_interrupted()) { + return mp_const_none; + } + + int status = common_hal_i2cperipheral_i2c_peripheral_is_addressed(self, &address, &is_read, &is_restart); + if (status < 0) { + // On error try one more time before bailing out + if (last_error) { + mp_raise_OSError(last_error); + } + last_error = -status; + mp_hal_delay_ms(10); + continue; + } + + last_error = 0; + + if (status == 0) { + mp_hal_delay_us(10); + continue; + } + + return mp_obj_new_i2cperipheral_i2c_peripheral_request(self, address, is_read, is_restart); + } while (forever || common_hal_time_monotonic() < timeout_end); + + if (timeout_ms > 0) { + mp_raise_OSError(MP_ETIMEDOUT); + } + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_KW(i2cperipheral_i2c_peripheral_request_obj, 1, i2cperipheral_i2c_peripheral_request); + +STATIC const mp_rom_map_elem_t i2cperipheral_i2c_peripheral_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, + { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&i2cperipheral_i2c_peripheral___exit___obj) }, + { MP_ROM_QSTR(MP_QSTR_request), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_request_obj) }, + +}; + +STATIC MP_DEFINE_CONST_DICT(i2cperipheral_i2c_peripheral_locals_dict, i2cperipheral_i2c_peripheral_locals_dict_table); + +const mp_obj_type_t i2cperipheral_i2c_peripheral_type = { + { &mp_type_type }, + .name = MP_QSTR_I2CPeripheral, + .make_new = i2cperipheral_i2c_peripheral_make_new, + .locals_dict = (mp_obj_dict_t*)&i2cperipheral_i2c_peripheral_locals_dict, +}; + +//| class I2CPeripheralRequest: +//| +//| def __init__(self, peripheral: i2cperipheral.I2CPeripheral, address: int, is_read: bool, is_restart: bool) -> None: +//| """Information about an I2C transfer request +//| This cannot be instantiated directly, but is returned by :py:meth:`I2CPeripheral.request`. +//| +//| :param peripheral: The I2CPeripheral object receiving this request +//| :param address: I2C address +//| :param is_read: True if the main peripheral is requesting data +//| :param is_restart: Repeated Start Condition""" +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_request_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) { + mp_arg_check_num(n_args, kw_args, 4, 4, false); + return mp_obj_new_i2cperipheral_i2c_peripheral_request(args[0], mp_obj_get_int(args[1]), mp_obj_is_true(args[2]), mp_obj_is_true(args[3])); +} + +//| def __enter__(self) -> I2CPeripheralRequest: +//| """No-op used in Context Managers.""" +//| ... +//| +// Provided by context manager helper. + +//| def __exit__(self) -> None: +//| """Close the request.""" +//| ... +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_request_obj___exit__(size_t n_args, const mp_obj_t *args) { + mp_check_self(MP_OBJ_IS_TYPE(args[0], &i2cperipheral_i2c_peripheral_request_type)); + i2cperipheral_i2c_peripheral_request_obj_t *self = MP_OBJ_TO_PTR(args[0]); + common_hal_i2cperipheral_i2c_peripheral_close(self->peripheral); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(i2cperipheral_i2c_peripheral_request___exit___obj, 4, 4, i2cperipheral_i2c_peripheral_request_obj___exit__); + +//| address: int +//| """The I2C address of the request.""" +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_request_get_address(mp_obj_t self_in) { + mp_check_self(MP_OBJ_IS_TYPE(self_in, &i2cperipheral_i2c_peripheral_request_type)); + i2cperipheral_i2c_peripheral_request_obj_t *self = MP_OBJ_TO_PTR(self_in); + return mp_obj_new_int(self->address); +} +MP_DEFINE_CONST_PROP_GET(i2cperipheral_i2c_peripheral_request_address_obj, i2cperipheral_i2c_peripheral_request_get_address); + +//| is_read: bool +//| """The I2C main controller is reading from this peripheral.""" +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_request_get_is_read(mp_obj_t self_in) { + mp_check_self(MP_OBJ_IS_TYPE(self_in, &i2cperipheral_i2c_peripheral_request_type)); + i2cperipheral_i2c_peripheral_request_obj_t *self = MP_OBJ_TO_PTR(self_in); + return mp_obj_new_bool(self->is_read); +} +MP_DEFINE_CONST_PROP_GET(i2cperipheral_i2c_peripheral_request_is_read_obj, i2cperipheral_i2c_peripheral_request_get_is_read); + +//| is_restart: bool +//| """Is Repeated Start Condition.""" +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_request_get_is_restart(mp_obj_t self_in) { + mp_check_self(MP_OBJ_IS_TYPE(self_in, &i2cperipheral_i2c_peripheral_request_type)); + i2cperipheral_i2c_peripheral_request_obj_t *self = MP_OBJ_TO_PTR(self_in); + return mp_obj_new_bool(self->is_restart); +} +MP_DEFINE_CONST_PROP_GET(i2cperipheral_i2c_peripheral_request_is_restart_obj, i2cperipheral_i2c_peripheral_request_get_is_restart); + +//| def read(self, n: int = -1, ack: bool = True) -> bytearray: +//| """Read data. +//| If ack=False, the caller is responsible for calling :py:meth:`I2CPeripheralRequest.ack`. +//| +//| :param n: Number of bytes to read (negative means all) +//| :param ack: Whether or not to send an ACK after the n'th byte +//| :return: Bytes read""" +//| ... +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_request_read(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + mp_check_self(MP_OBJ_IS_TYPE(pos_args[0], &i2cperipheral_i2c_peripheral_request_type)); + i2cperipheral_i2c_peripheral_request_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]); + enum { ARG_n, ARG_ack }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_n, MP_ARG_INT, {.u_int = -1} }, + { MP_QSTR_ack, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true} }, + }; + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + if (self->is_read) { + mp_raise_OSError(MP_EACCES); + } + + int n = args[ARG_n].u_int; + if (n == 0) { + return mp_obj_new_bytearray(0, NULL); + } + bool ack = args[ARG_ack].u_bool; + + int i = 0; + uint8_t *buffer = NULL; + uint64_t timeout_end = common_hal_time_monotonic() + 10 * 1000; + while (common_hal_time_monotonic() < timeout_end) { + RUN_BACKGROUND_TASKS; + if (mp_hal_is_interrupted()) { + break; + } + + uint8_t data; + int num = common_hal_i2cperipheral_i2c_peripheral_read_byte(self->peripheral, &data); + if (num == 0) { + break; + } + + buffer = m_renew(uint8_t, buffer, i, i + 1); + buffer[i++] = data; + if (i == n) { + if (ack) { + common_hal_i2cperipheral_i2c_peripheral_ack(self->peripheral, true); + } + break; + } + common_hal_i2cperipheral_i2c_peripheral_ack(self->peripheral, true); + } + + return mp_obj_new_bytearray(i, buffer); +} +MP_DEFINE_CONST_FUN_OBJ_KW(i2cperipheral_i2c_peripheral_request_read_obj, 1, i2cperipheral_i2c_peripheral_request_read); + +//| def write(self, buffer: ReadableBuffer) -> int: +//| """Write the data contained in buffer. +//| +//| :param ~_typing.ReadableBuffer buffer: Write out the data in this buffer +//| :return: Number of bytes written""" +//| ... +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_request_write(mp_obj_t self_in, mp_obj_t buf_in) { + mp_check_self(MP_OBJ_IS_TYPE(self_in, &i2cperipheral_i2c_peripheral_request_type)); + i2cperipheral_i2c_peripheral_request_obj_t *self = MP_OBJ_TO_PTR(self_in); + + if (!self->is_read) { + mp_raise_OSError(MP_EACCES); + } + + mp_buffer_info_t bufinfo; + mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_READ); + + for (size_t i = 0; i < bufinfo.len; i++) { + RUN_BACKGROUND_TASKS; + if (mp_hal_is_interrupted()) { + break; + } + + int num = common_hal_i2cperipheral_i2c_peripheral_write_byte(self->peripheral, ((uint8_t *)(bufinfo.buf))[i]); + if (num == 0) { + return mp_obj_new_int(i); + } + } + + return mp_obj_new_int(bufinfo.len); +} +STATIC MP_DEFINE_CONST_FUN_OBJ_2(i2cperipheral_i2c_peripheral_request_write_obj, i2cperipheral_i2c_peripheral_request_write); + +//| def ack(self, ack: bool = True) -> None: +//| """Acknowledge or Not Acknowledge last byte received. +//| Use together with :py:meth:`I2CPeripheralRequest.read` ack=False. +//| +//| :param ack: Whether to send an ACK or NACK""" +//| ... +//| +STATIC mp_obj_t i2cperipheral_i2c_peripheral_request_ack(uint n_args, const mp_obj_t *args) { + mp_check_self(MP_OBJ_IS_TYPE(args[0], &i2cperipheral_i2c_peripheral_request_type)); + i2cperipheral_i2c_peripheral_request_obj_t *self = MP_OBJ_TO_PTR(args[0]); + bool ack = (n_args == 1) ? true : mp_obj_is_true(args[1]); + + if (self->is_read) { + mp_raise_OSError(MP_EACCES); + } + + common_hal_i2cperipheral_i2c_peripheral_ack(self->peripheral, ack); + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(i2cperipheral_i2c_peripheral_request_ack_obj, 1, 2, i2cperipheral_i2c_peripheral_request_ack); + +STATIC mp_obj_t i2cperipheral_i2c_peripheral_request_close(mp_obj_t self_in) { + mp_check_self(MP_OBJ_IS_TYPE(self_in, &i2cperipheral_i2c_peripheral_request_type)); + i2cperipheral_i2c_peripheral_request_obj_t *self = MP_OBJ_TO_PTR(self_in); + + common_hal_i2cperipheral_i2c_peripheral_close(self->peripheral); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_1(i2cperipheral_i2c_peripheral_request_close_obj, i2cperipheral_i2c_peripheral_request_close); + +STATIC const mp_rom_map_elem_t i2cperipheral_i2c_peripheral_request_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, + { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_request___exit___obj) }, + { MP_ROM_QSTR(MP_QSTR_address), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_request_address_obj) }, + { MP_ROM_QSTR(MP_QSTR_is_read), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_request_is_read_obj) }, + { MP_ROM_QSTR(MP_QSTR_is_restart), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_request_is_restart_obj) }, + { MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_request_read_obj) }, + { MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_request_write_obj) }, + { MP_ROM_QSTR(MP_QSTR_ack), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_request_ack_obj) }, + { MP_ROM_QSTR(MP_QSTR_close), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_request_close_obj) }, +}; + +STATIC MP_DEFINE_CONST_DICT(i2cperipheral_i2c_peripheral_request_locals_dict, i2cperipheral_i2c_peripheral_request_locals_dict_table); + +const mp_obj_type_t i2cperipheral_i2c_peripheral_request_type = { + { &mp_type_type }, + .name = MP_QSTR_I2CPeripheralRequest, + .make_new = i2cperipheral_i2c_peripheral_request_make_new, + .locals_dict = (mp_obj_dict_t*)&i2cperipheral_i2c_peripheral_request_locals_dict, +}; diff --git a/shared-bindings/i2cperipheral/I2CPeripheral 2.h b/shared-bindings/i2cperipheral/I2CPeripheral 2.h new file mode 100644 index 000000000..3035cfbfe --- /dev/null +++ b/shared-bindings/i2cperipheral/I2CPeripheral 2.h @@ -0,0 +1,60 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2018 Noralf Trønnes + * + * 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. + */ + +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BUSIO_I2C_SLAVE_H +#define MICROPY_INCLUDED_SHARED_BINDINGS_BUSIO_I2C_SLAVE_H + +#include "py/obj.h" + +#include "common-hal/microcontroller/Pin.h" +#include "common-hal/i2cperipheral/I2CPeripheral.h" + +typedef struct { + mp_obj_base_t base; + i2cperipheral_i2c_peripheral_obj_t *peripheral; + uint16_t address; + bool is_read; + bool is_restart; +} i2cperipheral_i2c_peripheral_request_obj_t; + +extern const mp_obj_type_t i2cperipheral_i2c_peripheral_request_type; + +extern const mp_obj_type_t i2cperipheral_i2c_peripheral_type; + +extern void common_hal_i2cperipheral_i2c_peripheral_construct(i2cperipheral_i2c_peripheral_obj_t *self, + const mcu_pin_obj_t* scl, const mcu_pin_obj_t* sda, + uint8_t *addresses, unsigned int num_addresses, bool smbus); +extern void common_hal_i2cperipheral_i2c_peripheral_deinit(i2cperipheral_i2c_peripheral_obj_t *self); +extern bool common_hal_i2cperipheral_i2c_peripheral_deinited(i2cperipheral_i2c_peripheral_obj_t *self); + +extern int common_hal_i2cperipheral_i2c_peripheral_is_addressed(i2cperipheral_i2c_peripheral_obj_t *self, + uint8_t *address, bool *is_read, bool *is_restart); +extern int common_hal_i2cperipheral_i2c_peripheral_read_byte(i2cperipheral_i2c_peripheral_obj_t *self, uint8_t *data); +extern int common_hal_i2cperipheral_i2c_peripheral_write_byte(i2cperipheral_i2c_peripheral_obj_t *self, uint8_t data); +extern void common_hal_i2cperipheral_i2c_peripheral_ack(i2cperipheral_i2c_peripheral_obj_t *self, bool ack); +extern void common_hal_i2cperipheral_i2c_peripheral_close(i2cperipheral_i2c_peripheral_obj_t *self); + +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BUSIO_I2C_SLAVE_H diff --git a/shared-bindings/i2cperipheral/__init__ 2.c b/shared-bindings/i2cperipheral/__init__ 2.c new file mode 100644 index 000000000..e2cb8509d --- /dev/null +++ b/shared-bindings/i2cperipheral/__init__ 2.c @@ -0,0 +1,106 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2018 Noralf Trønnes + * + * 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 <stdint.h> + +#include "py/obj.h" +#include "py/runtime.h" + +#include "shared-bindings/microcontroller/Pin.h" +//#include "shared-bindings/i2cperipheral/__init__.h" +#include "shared-bindings/i2cperipheral/I2CPeripheral.h" + +#include "py/runtime.h" + +//| """Two wire serial protocol peripheral +//| +//| The `i2cperipheral` module contains classes to support an I2C peripheral. +//| +//| Example emulating a peripheral with 2 addresses (read and write):: +//| +//| import board +//| from i2cperipheral import I2CPeripheral +//| +//| regs = [0] * 16 +//| index = 0 +//| +//| with I2CPeripheral(board.SCL, board.SDA, (0x40, 0x41)) as device: +//| while True: +//| r = device.request() +//| if not r: +//| # Maybe do some housekeeping +//| continue +//| with r: # Closes the transfer if necessary by sending a NACK or feeding dummy bytes +//| if r.address == 0x40: +//| if not r.is_read: # Main write which is Selected read +//| b = r.read(1) +//| if not b or b[0] > 15: +//| break +//| index = b[0] +//| b = r.read(1) +//| if b: +//| regs[index] = b[0] +//| elif r.is_restart: # Combined transfer: This is the Main read message +//| n = r.write(bytes([regs[index]])) +//| #else: +//| # A read transfer is not supported in this example +//| # If the microcontroller tries, it will get 0xff byte(s) by the ctx manager (r.close()) +//| elif r.address == 0x41: +//| if not r.is_read: +//| b = r.read(1) +//| if b and b[0] == 0xde: +//| # do something +//| pass +//| +//| This example sets up an I2C device that can be accessed from Linux like this:: +//| +//| $ i2cget -y 1 0x40 0x01 +//| 0x00 +//| $ i2cset -y 1 0x40 0x01 0xaa +//| $ i2cget -y 1 0x40 0x01 +//| 0xaa +//| +//| .. warning:: +//| I2CPeripheral makes use of clock stretching in order to slow down +//| the host. +//| Make sure the I2C host supports this. +//| +//| Raspberry Pi in particular does not support this with its I2C hw block. +//| This can be worked around by using the ``i2c-gpio`` bit banging driver. +//| Since the RPi firmware uses the hw i2c, it's not possible to emulate a HAT eeprom.""" +//| + +STATIC const mp_rom_map_elem_t i2cperipheral_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_i2cperipheral) }, + { MP_ROM_QSTR(MP_QSTR_I2CPeripheral), MP_ROM_PTR(&i2cperipheral_i2c_peripheral_type) }, +}; + +STATIC MP_DEFINE_CONST_DICT(i2cperipheral_module_globals, i2cperipheral_module_globals_table); + +const mp_obj_module_t i2cperipheral_module = { + .base = { &mp_type_module }, + .globals = (mp_obj_dict_t*)&i2cperipheral_module_globals, +}; diff --git a/shared-bindings/memorymonitor/AllocationAlarm 2.c b/shared-bindings/memorymonitor/AllocationAlarm 2.c new file mode 100644 index 000000000..7de8c1287 --- /dev/null +++ b/shared-bindings/memorymonitor/AllocationAlarm 2.c @@ -0,0 +1,137 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 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 <stdint.h> + +#include "py/objproperty.h" +#include "py/runtime.h" +#include "py/runtime0.h" +#include "shared-bindings/memorymonitor/AllocationAlarm.h" +#include "shared-bindings/util.h" +#include "supervisor/shared/translate.h" + +//| class AllocationAlarm: +//| +//| def __init__(self, *, minimum_block_count: int = 1) -> None: +//| """Throw an exception when an allocation of ``minimum_block_count`` or more blocks +//| occurs while active. +//| +//| Track allocations:: +//| +//| import memorymonitor +//| +//| aa = memorymonitor.AllocationAlarm(minimum_block_count=2) +//| x = 2 +//| # Should not allocate any blocks. +//| with aa: +//| x = 5 +//| +//| # Should throw an exception when allocating storage for the 20 bytes. +//| with aa: +//| x = bytearray(20) +//| +//| """ +//| ... +//| +STATIC mp_obj_t memorymonitor_allocationalarm_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + enum { ARG_minimum_block_count }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_minimum_block_count, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} }, + }; + 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); + mp_int_t minimum_block_count = args[ARG_minimum_block_count].u_int; + if (minimum_block_count < 1) { + mp_raise_ValueError_varg(translate("%q must be >= 1"), MP_QSTR_minimum_block_count); + } + + memorymonitor_allocationalarm_obj_t *self = m_new_obj(memorymonitor_allocationalarm_obj_t); + self->base.type = &memorymonitor_allocationalarm_type; + + common_hal_memorymonitor_allocationalarm_construct(self, minimum_block_count); + + return MP_OBJ_FROM_PTR(self); +} + +//| def ignore(self, count: int) -> AllocationAlarm: +//| """Sets the number of applicable allocations to ignore before raising the exception. +//| Automatically set back to zero at context exit. +//| +//| Use it within a ``with`` block:: +//| +//| # Will not alarm because the bytearray allocation will be ignored. +//| with aa.ignore(2): +//| x = bytearray(20) +//| """ +//| ... +//| +STATIC mp_obj_t memorymonitor_allocationalarm_obj_ignore(mp_obj_t self_in, mp_obj_t count_obj) { + mp_int_t count = mp_obj_get_int(count_obj); + if (count < 0) { + mp_raise_ValueError_varg(translate("%q must be >= 0"), MP_QSTR_count); + } + common_hal_memorymonitor_allocationalarm_set_ignore(self_in, count); + return self_in; +} +MP_DEFINE_CONST_FUN_OBJ_2(memorymonitor_allocationalarm_ignore_obj, memorymonitor_allocationalarm_obj_ignore); + +//| def __enter__(self) -> AllocationAlarm: +//| """Enables the alarm.""" +//| ... +//| +STATIC mp_obj_t memorymonitor_allocationalarm_obj___enter__(mp_obj_t self_in) { + common_hal_memorymonitor_allocationalarm_resume(self_in); + return self_in; +} +MP_DEFINE_CONST_FUN_OBJ_1(memorymonitor_allocationalarm___enter___obj, memorymonitor_allocationalarm_obj___enter__); + +//| def __exit__(self) -> None: +//| """Automatically disables the allocation alarm when exiting a context. See +//| :ref:`lifetime-and-contextmanagers` for more info.""" +//| ... +//| +STATIC mp_obj_t memorymonitor_allocationalarm_obj___exit__(size_t n_args, const mp_obj_t *args) { + (void)n_args; + common_hal_memorymonitor_allocationalarm_set_ignore(args[0], 0); + common_hal_memorymonitor_allocationalarm_pause(args[0]); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(memorymonitor_allocationalarm___exit___obj, 4, 4, memorymonitor_allocationalarm_obj___exit__); + +STATIC const mp_rom_map_elem_t memorymonitor_allocationalarm_locals_dict_table[] = { + // Methods + { MP_ROM_QSTR(MP_QSTR_ignore), MP_ROM_PTR(&memorymonitor_allocationalarm_ignore_obj) }, + { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&memorymonitor_allocationalarm___enter___obj) }, + { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&memorymonitor_allocationalarm___exit___obj) }, +}; +STATIC MP_DEFINE_CONST_DICT(memorymonitor_allocationalarm_locals_dict, memorymonitor_allocationalarm_locals_dict_table); + +const mp_obj_type_t memorymonitor_allocationalarm_type = { + { &mp_type_type }, + .name = MP_QSTR_AllocationAlarm, + .make_new = memorymonitor_allocationalarm_make_new, + .locals_dict = (mp_obj_dict_t*)&memorymonitor_allocationalarm_locals_dict, +}; diff --git a/shared-bindings/memorymonitor/AllocationAlarm 2.h b/shared-bindings/memorymonitor/AllocationAlarm 2.h new file mode 100644 index 000000000..304b9c5a7 --- /dev/null +++ b/shared-bindings/memorymonitor/AllocationAlarm 2.h @@ -0,0 +1,39 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 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. + */ + +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_MEMORYMONITOR_ALLOCATIONALARM_H +#define MICROPY_INCLUDED_SHARED_BINDINGS_MEMORYMONITOR_ALLOCATIONALARM_H + +#include "shared-module/memorymonitor/AllocationAlarm.h" + +extern const mp_obj_type_t memorymonitor_allocationalarm_type; + +void common_hal_memorymonitor_allocationalarm_construct(memorymonitor_allocationalarm_obj_t* self, size_t minimum_block_count); +void common_hal_memorymonitor_allocationalarm_pause(memorymonitor_allocationalarm_obj_t* self); +void common_hal_memorymonitor_allocationalarm_resume(memorymonitor_allocationalarm_obj_t* self); +void common_hal_memorymonitor_allocationalarm_set_ignore(memorymonitor_allocationalarm_obj_t* self, mp_int_t count); + +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_MEMORYMONITOR_ALLOCATIONALARM_H diff --git a/shared-bindings/memorymonitor/AllocationSize 2.c b/shared-bindings/memorymonitor/AllocationSize 2.c new file mode 100644 index 000000000..b35bae360 --- /dev/null +++ b/shared-bindings/memorymonitor/AllocationSize 2.c @@ -0,0 +1,183 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 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 <stdint.h> + +#include "py/objproperty.h" +#include "py/runtime.h" +#include "py/runtime0.h" +#include "shared-bindings/memorymonitor/AllocationSize.h" +#include "shared-bindings/util.h" +#include "supervisor/shared/translate.h" + +//| class AllocationSize: +//| +//| def __init__(self) -> None: +//| """Tracks the number of allocations in power of two buckets. +//| +//| It will have 16 16-bit buckets to track allocation counts. It is total allocations +//| meaning frees are ignored. Reallocated memory is counted twice, at allocation and when +//| reallocated with the larger size. +//| +//| The buckets are measured in terms of blocks which is the finest granularity of the heap. +//| This means bucket 0 will count all allocations less than or equal to the number of bytes +//| per block, typically 16. Bucket 2 will be less than or equal to 4 blocks. See +//| `bytes_per_block` to convert blocks to bytes. +//| +//| Multiple AllocationSizes can be used to track different code boundaries. +//| +//| Track allocations:: +//| +//| import memorymonitor +//| +//| mm = memorymonitor.AllocationSize() +//| with mm: +//| print("hello world" * 3) +//| +//| for bucket, count in enumerate(mm): +//| print("<", 2 ** bucket, count) +//| +//| """ +//| ... +//| +STATIC mp_obj_t memorymonitor_allocationsize_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + memorymonitor_allocationsize_obj_t *self = m_new_obj(memorymonitor_allocationsize_obj_t); + self->base.type = &memorymonitor_allocationsize_type; + + common_hal_memorymonitor_allocationsize_construct(self); + + return MP_OBJ_FROM_PTR(self); +} + +//| def __enter__(self) -> AllocationSize: +//| """Clears counts and resumes tracking.""" +//| ... +//| +STATIC mp_obj_t memorymonitor_allocationsize_obj___enter__(mp_obj_t self_in) { + common_hal_memorymonitor_allocationsize_clear(self_in); + common_hal_memorymonitor_allocationsize_resume(self_in); + return self_in; +} +MP_DEFINE_CONST_FUN_OBJ_1(memorymonitor_allocationsize___enter___obj, memorymonitor_allocationsize_obj___enter__); + +//| def __exit__(self) -> None: +//| """Automatically pauses allocation tracking when exiting a context. See +//| :ref:`lifetime-and-contextmanagers` for more info.""" +//| ... +//| +STATIC mp_obj_t memorymonitor_allocationsize_obj___exit__(size_t n_args, const mp_obj_t *args) { + (void)n_args; + common_hal_memorymonitor_allocationsize_pause(args[0]); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(memorymonitor_allocationsize___exit___obj, 4, 4, memorymonitor_allocationsize_obj___exit__); + +//| bytes_per_block: int +//| """Number of bytes per block""" +//| +STATIC mp_obj_t memorymonitor_allocationsize_obj_get_bytes_per_block(mp_obj_t self_in) { + memorymonitor_allocationsize_obj_t *self = MP_OBJ_TO_PTR(self_in); + + return MP_OBJ_NEW_SMALL_INT(common_hal_memorymonitor_allocationsize_get_bytes_per_block(self)); +} +MP_DEFINE_CONST_FUN_OBJ_1(memorymonitor_allocationsize_get_bytes_per_block_obj, memorymonitor_allocationsize_obj_get_bytes_per_block); + +const mp_obj_property_t memorymonitor_allocationsize_bytes_per_block_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&memorymonitor_allocationsize_get_bytes_per_block_obj, + (mp_obj_t)&mp_const_none_obj, + (mp_obj_t)&mp_const_none_obj}, +}; + +//| def __len__(self) -> int: +//| """Returns the number of allocation buckets. +//| +//| This allows you to:: +//| +//| mm = memorymonitor.AllocationSize() +//| print(len(mm))""" +//| ... +//| +STATIC mp_obj_t memorymonitor_allocationsize_unary_op(mp_unary_op_t op, mp_obj_t self_in) { + memorymonitor_allocationsize_obj_t *self = MP_OBJ_TO_PTR(self_in); + uint16_t len = common_hal_memorymonitor_allocationsize_get_len(self); + switch (op) { + case MP_UNARY_OP_BOOL: return mp_obj_new_bool(len != 0); + case MP_UNARY_OP_LEN: return MP_OBJ_NEW_SMALL_INT(len); + default: return MP_OBJ_NULL; // op not supported + } +} + +//| def __getitem__(self, index: int) -> Optional[int]: +//| """Returns the allocation count for the given bucket. +//| +//| This allows you to:: +//| +//| mm = memorymonitor.AllocationSize() +//| print(mm[0])""" +//| ... +//| +STATIC mp_obj_t memorymonitor_allocationsize_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t value) { + if (value == mp_const_none) { + // delete item + mp_raise_AttributeError(translate("Cannot delete values")); + } else { + memorymonitor_allocationsize_obj_t *self = MP_OBJ_TO_PTR(self_in); + + if (MP_OBJ_IS_TYPE(index_obj, &mp_type_slice)) { + mp_raise_NotImplementedError(translate("Slices not supported")); + } else { + size_t index = mp_get_index(&memorymonitor_allocationsize_type, common_hal_memorymonitor_allocationsize_get_len(self), index_obj, false); + if (value == MP_OBJ_SENTINEL) { + // load + return MP_OBJ_NEW_SMALL_INT(common_hal_memorymonitor_allocationsize_get_item(self, index)); + } else { + mp_raise_AttributeError(translate("Read-only")); + } + } + } + return mp_const_none; +} + +STATIC const mp_rom_map_elem_t memorymonitor_allocationsize_locals_dict_table[] = { + // Methods + { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&memorymonitor_allocationsize___enter___obj) }, + { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&memorymonitor_allocationsize___exit___obj) }, + + // Properties + { MP_ROM_QSTR(MP_QSTR_bytes_per_block), MP_ROM_PTR(&memorymonitor_allocationsize_bytes_per_block_obj) }, +}; +STATIC MP_DEFINE_CONST_DICT(memorymonitor_allocationsize_locals_dict, memorymonitor_allocationsize_locals_dict_table); + +const mp_obj_type_t memorymonitor_allocationsize_type = { + { &mp_type_type }, + .name = MP_QSTR_AllocationSize, + .make_new = memorymonitor_allocationsize_make_new, + .subscr = memorymonitor_allocationsize_subscr, + .unary_op = memorymonitor_allocationsize_unary_op, + .getiter = mp_obj_new_generic_iterator, + .locals_dict = (mp_obj_dict_t*)&memorymonitor_allocationsize_locals_dict, +}; diff --git a/shared-bindings/memorymonitor/AllocationSize 2.h b/shared-bindings/memorymonitor/AllocationSize 2.h new file mode 100644 index 000000000..bcd9514bf --- /dev/null +++ b/shared-bindings/memorymonitor/AllocationSize 2.h @@ -0,0 +1,42 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 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. + */ + +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_MEMORYMONITOR_ALLOCATIONSIZE_H +#define MICROPY_INCLUDED_SHARED_BINDINGS_MEMORYMONITOR_ALLOCATIONSIZE_H + +#include "shared-module/memorymonitor/AllocationSize.h" + +extern const mp_obj_type_t memorymonitor_allocationsize_type; + +extern void common_hal_memorymonitor_allocationsize_construct(memorymonitor_allocationsize_obj_t* self); +extern void common_hal_memorymonitor_allocationsize_pause(memorymonitor_allocationsize_obj_t* self); +extern void common_hal_memorymonitor_allocationsize_resume(memorymonitor_allocationsize_obj_t* self); +extern void common_hal_memorymonitor_allocationsize_clear(memorymonitor_allocationsize_obj_t* self); +extern size_t common_hal_memorymonitor_allocationsize_get_bytes_per_block(memorymonitor_allocationsize_obj_t* self); +extern uint16_t common_hal_memorymonitor_allocationsize_get_len(memorymonitor_allocationsize_obj_t* self); +extern uint16_t common_hal_memorymonitor_allocationsize_get_item(memorymonitor_allocationsize_obj_t* self, int16_t index); + +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_MEMORYMONITOR_ALLOCATIONSIZE_H diff --git a/shared-bindings/memorymonitor/__init__ 2.c b/shared-bindings/memorymonitor/__init__ 2.c new file mode 100644 index 000000000..c101ba5e0 --- /dev/null +++ b/shared-bindings/memorymonitor/__init__ 2.c @@ -0,0 +1,76 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Scott Shawcroft + * + * 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 <stdint.h> + +#include "py/obj.h" +#include "py/runtime.h" + +#include "shared-bindings/memorymonitor/__init__.h" +#include "shared-bindings/memorymonitor/AllocationAlarm.h" +#include "shared-bindings/memorymonitor/AllocationSize.h" + +//| """Memory monitoring helpers""" +//| + +//| class AllocationError(Exception): +//| """Catchall exception for allocation related errors.""" +//| ... +MP_DEFINE_MEMORYMONITOR_EXCEPTION(AllocationError, Exception) + +NORETURN void mp_raise_memorymonitor_AllocationError(const compressed_string_t* fmt, ...) { + va_list argptr; + va_start(argptr,fmt); + mp_obj_t exception = mp_obj_new_exception_msg_vlist(&mp_type_memorymonitor_AllocationError, fmt, argptr); + va_end(argptr); + nlr_raise(exception); +} + +STATIC const mp_rom_map_elem_t memorymonitor_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_memorymonitor) }, + { MP_ROM_QSTR(MP_QSTR_AllocationAlarm), MP_ROM_PTR(&memorymonitor_allocationalarm_type) }, + { MP_ROM_QSTR(MP_QSTR_AllocationSize), MP_ROM_PTR(&memorymonitor_allocationsize_type) }, + + // Errors + { MP_ROM_QSTR(MP_QSTR_AllocationError), MP_ROM_PTR(&mp_type_memorymonitor_AllocationError) }, +}; + +STATIC MP_DEFINE_CONST_DICT(memorymonitor_module_globals, memorymonitor_module_globals_table); + +void memorymonitor_exception_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t kind) { + mp_print_kind_t k = kind & ~PRINT_EXC_SUBCLASS; + bool is_subclass = kind & PRINT_EXC_SUBCLASS; + if (!is_subclass && (k == PRINT_EXC)) { + mp_print_str(print, qstr_str(MP_OBJ_QSTR_VALUE(memorymonitor_module_globals_table[0].value))); + mp_print_str(print, "."); + } + mp_obj_exception_print(print, o_in, kind); +} + +const mp_obj_module_t memorymonitor_module = { + .base = { &mp_type_module }, + .globals = (mp_obj_dict_t*)&memorymonitor_module_globals, +}; diff --git a/shared-bindings/memorymonitor/__init__ 2.h b/shared-bindings/memorymonitor/__init__ 2.h new file mode 100644 index 000000000..60fcdc3f6 --- /dev/null +++ b/shared-bindings/memorymonitor/__init__ 2.h @@ -0,0 +1,49 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Scott Shawcroft + * + * 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. + */ + +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_MEMORYMONITOR___INIT___H +#define MICROPY_INCLUDED_SHARED_BINDINGS_MEMORYMONITOR___INIT___H + +#include "py/obj.h" + + +void memorymonitor_exception_print(const mp_print_t *print, mp_obj_t o_in, mp_print_kind_t kind); + +#define MP_DEFINE_MEMORYMONITOR_EXCEPTION(exc_name, base_name) \ +const mp_obj_type_t mp_type_memorymonitor_ ## exc_name = { \ + { &mp_type_type }, \ + .name = MP_QSTR_ ## exc_name, \ + .print = memorymonitor_exception_print, \ + .make_new = mp_obj_exception_make_new, \ + .attr = mp_obj_exception_attr, \ + .parent = &mp_type_ ## base_name, \ +}; + +extern const mp_obj_type_t mp_type_memorymonitor_AllocationError; + +NORETURN void mp_raise_memorymonitor_AllocationError(const compressed_string_t* msg, ...); + +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_MEMORYMONITOR___INIT___H diff --git a/shared-bindings/pulseio/PulseOut.c b/shared-bindings/pulseio/PulseOut.c index 3d35f0544..3fd722558 100644 --- a/shared-bindings/pulseio/PulseOut.c +++ b/shared-bindings/pulseio/PulseOut.c @@ -64,20 +64,29 @@ //| pulse.send(pulses)""" //| ... //| -STATIC mp_obj_t pulseio_pulseout_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) { - mp_arg_check_num(n_args, kw_args, 1, 1, false); - mp_obj_t carrier_obj = args[0]; +STATIC mp_obj_t pulseio_pulseout_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { - if (!MP_OBJ_IS_TYPE(carrier_obj, &pulseio_pwmout_type)) { - mp_raise_TypeError_varg(translate("Expected a %q"), pulseio_pwmout_type.name); - } - - // create Pulse object from the given pin pulseio_pulseout_obj_t *self = m_new_obj(pulseio_pulseout_obj_t); self->base.type = &pulseio_pulseout_type; - common_hal_pulseio_pulseout_construct(self, (pulseio_pwmout_obj_t *)MP_OBJ_TO_PTR(carrier_obj)); - + mp_obj_t carrier_obj = pos_args[0]; + if (MP_OBJ_IS_TYPE(carrier_obj, &pulseio_pwmout_type)) { + // Use a PWMOut Carrier + mp_arg_check_num(n_args, kw_args, 1, 1, false); + common_hal_pulseio_pulseout_construct(self, (pulseio_pwmout_obj_t *)MP_OBJ_TO_PTR(carrier_obj), NULL, 0, 0); + } else { + // Use a Pin, frequency, and duty cycle + enum { ARG_pin, ARG_frequency}; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_pin, MP_ARG_REQUIRED | MP_ARG_OBJ }, + { MP_QSTR_frequency, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 38000} }, + { MP_QSTR_duty_cycle, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1<<15} }, + }; + 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); + const mcu_pin_obj_t* pin = validate_obj_is_free_pin(args[ARG_pin].u_obj); + common_hal_pulseio_pulseout_construct(self, NULL, pin, args[ARG_frequency].u_int, args[ARG_frequency].u_int); + } return MP_OBJ_FROM_PTR(self); } diff --git a/shared-bindings/pulseio/PulseOut.h b/shared-bindings/pulseio/PulseOut.h index 390910ff6..9d4778e93 100644 --- a/shared-bindings/pulseio/PulseOut.h +++ b/shared-bindings/pulseio/PulseOut.h @@ -34,7 +34,11 @@ extern const mp_obj_type_t pulseio_pulseout_type; extern void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, - const pulseio_pwmout_obj_t* carrier); + const pulseio_pwmout_obj_t* carrier, + const mcu_pin_obj_t* pin, + uint32_t frequency, + uint16_t duty_cycle); + extern void common_hal_pulseio_pulseout_deinit(pulseio_pulseout_obj_t* self); extern bool common_hal_pulseio_pulseout_deinited(pulseio_pulseout_obj_t* self); extern void common_hal_pulseio_pulseout_send(pulseio_pulseout_obj_t* self, diff --git a/shared-bindings/sdcardio/SDCard 2.c b/shared-bindings/sdcardio/SDCard 2.c new file mode 100644 index 000000000..975f8b095 --- /dev/null +++ b/shared-bindings/sdcardio/SDCard 2.c @@ -0,0 +1,183 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Jeff Epler 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 "py/obj.h" +#include "py/objproperty.h" +#include "py/runtime.h" +#include "py/objarray.h" + +#include "shared-bindings/sdcardio/SDCard.h" +#include "shared-module/sdcardio/SDCard.h" +#include "common-hal/busio/SPI.h" +#include "shared-bindings/busio/SPI.h" +#include "shared-bindings/microcontroller/Pin.h" +#include "supervisor/flash.h" + +//| class SDCard: +//| """SD Card Block Interface +//| +//| Controls an SD card over SPI. This built-in module has higher read +//| performance than the library adafruit_sdcard, but it is only compatible with +//| `busio.SPI`, not `bitbangio.SPI`. Usually an SDCard object is used +//| with ``storage.VfsFat`` to allow file I/O to an SD card.""" +//| +//| def __init__(self, bus: busio.SPI, cs: microcontroller.Pin, baudrate: int = 8000000) -> None: +//| """Construct an SPI SD Card object with the given properties +//| +//| :param busio.SPI spi: The SPI bus +//| :param microcontroller.Pin cs: The chip select connected to the card +//| :param int baudrate: The SPI data rate to use after card setup +//| +//| Note that during detection and configuration, a hard-coded low baudrate is used. +//| Data transfers use the specified baurate (rounded down to one that is supported by +//| the microcontroller) +//| +//| Example usage: +//| +//| .. code-block:: python +//| +//| import os +//| +//| import board +//| import sdcardio +//| import storage +//| +//| sd = sdcardio.SDCard(board.SPI(), board.SD_CS) +//| vfs = storage.VfsFat(sd) +//| storage.mount(vfs, '/sd') +//| os.listdir('/sd')""" + +STATIC mp_obj_t sdcardio_sdcard_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + enum { ARG_spi, ARG_cs, ARG_baudrate, ARG_sdio, NUM_ARGS }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_spi, MP_ARG_OBJ, {.u_obj = mp_const_none } }, + { MP_QSTR_cs, MP_ARG_OBJ, {.u_obj = mp_const_none } }, + { MP_QSTR_baudrate, MP_ARG_INT, {.u_int = 8000000} }, + { MP_QSTR_sdio, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_int = 8000000} }, + }; + MP_STATIC_ASSERT( MP_ARRAY_SIZE(allowed_args) == NUM_ARGS ); + 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); + + busio_spi_obj_t *spi = validate_obj_is_spi_bus(args[ARG_spi].u_obj); + mcu_pin_obj_t *cs = validate_obj_is_free_pin(args[ARG_cs].u_obj); + + sdcardio_sdcard_obj_t *self = m_new_obj(sdcardio_sdcard_obj_t); + self->base.type = &sdcardio_SDCard_type; + + common_hal_sdcardio_sdcard_construct(self, spi, cs, args[ARG_baudrate].u_int); + + return self; +} + + +//| def count(self) -> int: +//| """Returns the total number of sectors +//| +//| Due to technical limitations, this is a function and not a property. +//| +//| :return: The number of 512-byte blocks, as a number""" +//| +mp_obj_t sdcardio_sdcard_count(mp_obj_t self_in) { + sdcardio_sdcard_obj_t *self = (sdcardio_sdcard_obj_t*)self_in; + return mp_obj_new_int_from_ull(common_hal_sdcardio_sdcard_get_blockcount(self)); +} +MP_DEFINE_CONST_FUN_OBJ_1(sdcardio_sdcard_count_obj, sdcardio_sdcard_count); + +//| def deinit(self) -> None: +//| """Disable permanently. +//| +//| :return: None""" +//| +mp_obj_t sdcardio_sdcard_deinit(mp_obj_t self_in) { + sdcardio_sdcard_obj_t *self = (sdcardio_sdcard_obj_t*)self_in; + common_hal_sdcardio_sdcard_deinit(self); + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_1(sdcardio_sdcard_deinit_obj, sdcardio_sdcard_deinit); + + +//| def readblocks(self, start_block: int, buf: WriteableBuffer) -> None: +//| +//| """Read one or more blocks from the card +//| +//| :param int start_block: The block to start reading from +//| :param ~_typing.WriteableBuffer buf: The buffer to write into. Length must be multiple of 512. +//| +//| :return: None""" +//| + +mp_obj_t sdcardio_sdcard_readblocks(mp_obj_t self_in, mp_obj_t start_block_in, mp_obj_t buf_in) { + uint32_t start_block = mp_obj_get_int(start_block_in); + mp_buffer_info_t bufinfo; + mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_WRITE); + sdcardio_sdcard_obj_t *self = (sdcardio_sdcard_obj_t*)self_in; + int result = common_hal_sdcardio_sdcard_readblocks(self, start_block, &bufinfo); + if (result < 0) { + mp_raise_OSError(-result); + } + return mp_const_none; +} + +MP_DEFINE_CONST_FUN_OBJ_3(sdcardio_sdcard_readblocks_obj, sdcardio_sdcard_readblocks); + +//| def writeblocks(self, start_block: int, buf: ReadableBuffer) -> None: +//| +//| """Write one or more blocks to the card +//| +//| :param int start_block: The block to start writing from +//| :param ~_typing.ReadableBuffer buf: The buffer to read from. Length must be multiple of 512. +//| +//| :return: None""" +//| + +mp_obj_t sdcardio_sdcard_writeblocks(mp_obj_t self_in, mp_obj_t start_block_in, mp_obj_t buf_in) { + uint32_t start_block = mp_obj_get_int(start_block_in); + mp_buffer_info_t bufinfo; + mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_READ); + sdcardio_sdcard_obj_t *self = (sdcardio_sdcard_obj_t*)self_in; + int result = common_hal_sdcardio_sdcard_writeblocks(self, start_block, &bufinfo); + if (result < 0) { + mp_raise_OSError(-result); + } + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_3(sdcardio_sdcard_writeblocks_obj, sdcardio_sdcard_writeblocks); + +STATIC const mp_rom_map_elem_t sdcardio_sdcard_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR_count), MP_ROM_PTR(&sdcardio_sdcard_count_obj) }, + { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&sdcardio_sdcard_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR_readblocks), MP_ROM_PTR(&sdcardio_sdcard_readblocks_obj) }, + { MP_ROM_QSTR(MP_QSTR_writeblocks), MP_ROM_PTR(&sdcardio_sdcard_writeblocks_obj) }, +}; +STATIC MP_DEFINE_CONST_DICT(sdcardio_sdcard_locals_dict, sdcardio_sdcard_locals_dict_table); + +const mp_obj_type_t sdcardio_SDCard_type = { + { &mp_type_type }, + .name = MP_QSTR_SDCard, + .make_new = sdcardio_sdcard_make_new, + .locals_dict = (mp_obj_dict_t*)&sdcardio_sdcard_locals_dict, +}; diff --git a/shared-bindings/sdcardio/SDCard 2.h b/shared-bindings/sdcardio/SDCard 2.h new file mode 100644 index 000000000..5986d5b81 --- /dev/null +++ b/shared-bindings/sdcardio/SDCard 2.h @@ -0,0 +1,30 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017, 2018 Scott Shawcroft for Adafruit Industries + * Copyright (c) 2020 Jeff Epler 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. + */ + +#pragma once + +extern const mp_obj_type_t sdcardio_SDCard_type; diff --git a/shared-bindings/sdcardio/__init__ 2.c b/shared-bindings/sdcardio/__init__ 2.c new file mode 100644 index 000000000..746aa5588 --- /dev/null +++ b/shared-bindings/sdcardio/__init__ 2.c @@ -0,0 +1,47 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Jeff Epler 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 <stdint.h> + +#include "py/obj.h" +#include "py/runtime.h" + +#include "shared-bindings/sdcardio/SDCard.h" + +//| """Interface to an SD card via the SPI bus""" + +STATIC const mp_rom_map_elem_t sdcardio_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sdcardio) }, + { MP_ROM_QSTR(MP_QSTR_SDCard), MP_ROM_PTR(&sdcardio_SDCard_type) }, +}; + +STATIC MP_DEFINE_CONST_DICT(sdcardio_module_globals, sdcardio_module_globals_table); + +const mp_obj_module_t sdcardio_module = { + .base = { &mp_type_module }, + .globals = (mp_obj_dict_t*)&sdcardio_module_globals, +}; diff --git a/shared-bindings/sdcardio/__init__ 2.h b/shared-bindings/sdcardio/__init__ 2.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/shared-bindings/sdcardio/__init__ 2.h diff --git a/shared-bindings/sdioio/SDCard 2.c b/shared-bindings/sdioio/SDCard 2.c new file mode 100644 index 000000000..aba414cd6 --- /dev/null +++ b/shared-bindings/sdioio/SDCard 2.c @@ -0,0 +1,296 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Scott Shawcroft + * + * 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. + */ + +// This file contains all of the Python API definitions for the +// sdioio.SDCard class. + +#include <string.h> + +#include "shared-bindings/microcontroller/Pin.h" +#include "shared-bindings/sdioio/SDCard.h" +#include "shared-bindings/util.h" + +#include "lib/utils/buffer_helper.h" +#include "lib/utils/context_manager_helpers.h" +#include "py/mperrno.h" +#include "py/objproperty.h" +#include "py/runtime.h" +#include "supervisor/shared/translate.h" + +//| class SDCard: +//| """SD Card Block Interface with SDIO +//| +//| Controls an SD card over SDIO. SDIO is a parallel protocol designed +//| for SD cards. It uses a clock pin, a command pin, and 1 or 4 +//| data pins. It can be operated at a high frequency such as +//| 25MHz. Usually an SDCard object is used with ``storage.VfsFat`` +//| to allow file I/O to an SD card.""" +//| +//| def __init__(self, clock: microcontroller.Pin, command: microcontroller.Pin, data: Sequence[microcontroller.Pin], frequency: int) -> None: +//| """Construct an SDIO SD Card object with the given properties +//| +//| :param ~microcontroller.Pin clock: the pin to use for the clock. +//| :param ~microcontroller.Pin command: the pin to use for the command. +//| :param data: A sequence of pins to use for data. +//| :param frequency: The frequency of the bus in Hz +//| +//| Example usage: +//| +//| .. code-block:: python +//| +//| import os +//| +//| import board +//| import sdioio +//| import storage +//| +//| sd = sdioio.SDCard( +//| clock=board.SDIO_CLOCK, +//| command=board.SDIO_COMMAND, +//| data=board.SDIO_DATA, +//| frequency=25000000) +//| vfs = storage.VfsFat(sd) +//| storage.mount(vfs, '/sd') +//| os.listdir('/sd')""" +//| ... +//| + +STATIC mp_obj_t sdioio_sdcard_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + sdioio_sdcard_obj_t *self = m_new_obj(sdioio_sdcard_obj_t); + self->base.type = &sdioio_SDCard_type; + enum { ARG_clock, ARG_command, ARG_data, ARG_frequency, NUM_ARGS }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_clock, MP_ARG_REQUIRED | MP_ARG_KW_ONLY | MP_ARG_OBJ }, + { MP_QSTR_command, MP_ARG_REQUIRED | MP_ARG_KW_ONLY | MP_ARG_OBJ }, + { MP_QSTR_data, MP_ARG_REQUIRED | MP_ARG_KW_ONLY | MP_ARG_OBJ }, + { MP_QSTR_frequency, MP_ARG_REQUIRED | MP_ARG_KW_ONLY | MP_ARG_INT }, + }; + MP_STATIC_ASSERT( MP_ARRAY_SIZE(allowed_args) == NUM_ARGS ); + 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); + + const mcu_pin_obj_t* clock = validate_obj_is_free_pin(args[ARG_clock].u_obj); + const mcu_pin_obj_t* command = validate_obj_is_free_pin(args[ARG_command].u_obj); + mcu_pin_obj_t *data_pins[4]; + uint8_t num_data; + validate_list_is_free_pins(MP_QSTR_data, data_pins, MP_ARRAY_SIZE(data_pins), args[ARG_data].u_obj, &num_data); + + common_hal_sdioio_sdcard_construct(self, clock, command, num_data, data_pins, args[ARG_frequency].u_int); + return MP_OBJ_FROM_PTR(self); +} + +STATIC void check_for_deinit(sdioio_sdcard_obj_t *self) { + if (common_hal_sdioio_sdcard_deinited(self)) { + raise_deinited_error(); + } +} + +//| def configure(self, frequency: int = 0, width: int = 0) -> None: +//| """Configures the SDIO bus. +//| +//| :param int frequency: the desired clock rate in Hertz. The actual clock rate may be higher or lower due to the granularity of available clock settings. Check the `frequency` attribute for the actual clock rate. +//| :param int width: the number of data lines to use. Must be 1 or 4 and must also not exceed the number of data lines at construction +//| +//| .. note:: Leaving a value unspecified or 0 means the current setting is kept""" +//| +STATIC mp_obj_t sdioio_sdcard_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + enum { ARG_frequency, ARG_width, NUM_ARGS }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_frequency, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} }, + { MP_QSTR_width, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} }, + }; + sdioio_sdcard_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]); + check_for_deinit(self); + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + MP_STATIC_ASSERT( MP_ARRAY_SIZE(allowed_args) == NUM_ARGS ); + mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + mp_int_t frequency = args[ARG_frequency].u_int; + if (frequency < 0) { + mp_raise_ValueError_varg(translate("Invalid %q"), MP_QSTR_baudrate); + } + + uint8_t width = args[ARG_width].u_int; + if (width != 0 && width != 1 && width != 4) { + mp_raise_ValueError_varg(translate("Invalid %q"), MP_QSTR_width); + } + + if (!common_hal_sdioio_sdcard_configure(self, frequency, width)) { + mp_raise_OSError(MP_EIO); + } + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_KW(sdioio_sdcard_configure_obj, 1, sdioio_sdcard_configure); + +//| def count(self) -> int: +//| """Returns the total number of sectors +//| +//| Due to technical limitations, this is a function and not a property. +//| +//| :return: The number of 512-byte blocks, as a number""" +//| +STATIC mp_obj_t sdioio_sdcard_count(mp_obj_t self_in) { + sdioio_sdcard_obj_t *self = MP_OBJ_TO_PTR(self_in); + check_for_deinit(self); + return MP_OBJ_NEW_SMALL_INT(common_hal_sdioio_sdcard_get_count(self)); +} +MP_DEFINE_CONST_FUN_OBJ_1(sdioio_sdcard_count_obj, sdioio_sdcard_count); + +//| def readblocks(self, start_block: int, buf: WriteableBuffer) -> None: +//| +//| """Read one or more blocks from the card +//| +//| :param int start_block: The block to start reading from +//| :param ~_typing.WriteableBuffer buf: The buffer to write into. Length must be multiple of 512. +//| +//| :return: None""" +mp_obj_t sdioio_sdcard_readblocks(mp_obj_t self_in, mp_obj_t start_block_in, mp_obj_t buf_in) { + uint32_t start_block = mp_obj_get_int(start_block_in); + mp_buffer_info_t bufinfo; + mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_WRITE); + sdioio_sdcard_obj_t *self = (sdioio_sdcard_obj_t*)self_in; + int result = common_hal_sdioio_sdcard_readblocks(self, start_block, &bufinfo); + if (result < 0) { + mp_raise_OSError(-result); + } + return mp_const_none; +} + +MP_DEFINE_CONST_FUN_OBJ_3(sdioio_sdcard_readblocks_obj, sdioio_sdcard_readblocks); + +//| def writeblocks(self, start_block: int, buf: ReadableBuffer) -> None: +//| +//| """Write one or more blocks to the card +//| +//| :param int start_block: The block to start writing from +//| :param ~_typing.ReadableBuffer buf: The buffer to read from. Length must be multiple of 512. +//| +//| :return: None""" +//| +mp_obj_t sdioio_sdcard_writeblocks(mp_obj_t self_in, mp_obj_t start_block_in, mp_obj_t buf_in) { + uint32_t start_block = mp_obj_get_int(start_block_in); + mp_buffer_info_t bufinfo; + mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_READ); + sdioio_sdcard_obj_t *self = (sdioio_sdcard_obj_t*)self_in; + int result = common_hal_sdioio_sdcard_writeblocks(self, start_block, &bufinfo); + if (result < 0) { + mp_raise_OSError(-result); + } + return mp_const_none; +} + +MP_DEFINE_CONST_FUN_OBJ_3(sdioio_sdcard_writeblocks_obj, sdioio_sdcard_writeblocks); + +//| @property +//| def frequency(self) -> int: +//| """The actual SDIO bus frequency. This may not match the frequency +//| requested due to internal limitations.""" +//| ... +//| +STATIC mp_obj_t sdioio_sdcard_obj_get_frequency(mp_obj_t self_in) { + sdioio_sdcard_obj_t *self = MP_OBJ_TO_PTR(self_in); + check_for_deinit(self); + return MP_OBJ_NEW_SMALL_INT(common_hal_sdioio_sdcard_get_frequency(self)); +} +MP_DEFINE_CONST_FUN_OBJ_1(sdioio_sdcard_get_frequency_obj, sdioio_sdcard_obj_get_frequency); + +const mp_obj_property_t sdioio_sdcard_frequency_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&sdioio_sdcard_get_frequency_obj, + (mp_obj_t)&mp_const_none_obj, + (mp_obj_t)&mp_const_none_obj}, +}; + +//| @property +//| def width(self) -> int: +//| """The actual SDIO bus width, in bits""" +//| ... +//| +STATIC mp_obj_t sdioio_sdcard_obj_get_width(mp_obj_t self_in) { + sdioio_sdcard_obj_t *self = MP_OBJ_TO_PTR(self_in); + check_for_deinit(self); + return MP_OBJ_NEW_SMALL_INT(common_hal_sdioio_sdcard_get_width(self)); +} +MP_DEFINE_CONST_FUN_OBJ_1(sdioio_sdcard_get_width_obj, sdioio_sdcard_obj_get_width); + +const mp_obj_property_t sdioio_sdcard_width_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&sdioio_sdcard_get_width_obj, + (mp_obj_t)&mp_const_none_obj, + (mp_obj_t)&mp_const_none_obj}, +}; + +//| def deinit(self) -> None: +//| """Disable permanently. +//| +//| :return: None""" +STATIC mp_obj_t sdioio_sdcard_obj_deinit(mp_obj_t self_in) { + sdioio_sdcard_obj_t *self = MP_OBJ_TO_PTR(self_in); + common_hal_sdioio_sdcard_deinit(self); + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_1(sdioio_sdcard_deinit_obj, sdioio_sdcard_obj_deinit); + +//| def __enter__(self) -> SDCard: +//| """No-op used by Context Managers. +//| Provided by context manager helper.""" +//| ... +//| + +//| def __exit__(self) -> None: +//| """Automatically deinitializes the hardware when exiting a context. See +//| :ref:`lifetime-and-contextmanagers` for more info.""" +//| ... +//| +STATIC mp_obj_t sdioio_sdcard_obj___exit__(size_t n_args, const mp_obj_t *args) { + (void)n_args; + common_hal_sdioio_sdcard_deinit(args[0]); + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(sdioio_sdcard_obj___exit___obj, 4, 4, sdioio_sdcard_obj___exit__); + +STATIC const mp_rom_map_elem_t sdioio_sdcard_locals_dict_table[] = { + { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&sdioio_sdcard_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, + { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&sdioio_sdcard_obj___exit___obj) }, + + { MP_ROM_QSTR(MP_QSTR_configure), MP_ROM_PTR(&sdioio_sdcard_configure_obj) }, + { MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&sdioio_sdcard_frequency_obj) }, + { MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&sdioio_sdcard_width_obj) }, + + { MP_ROM_QSTR(MP_QSTR_count), MP_ROM_PTR(&sdioio_sdcard_count_obj) }, + { MP_ROM_QSTR(MP_QSTR_readblocks), MP_ROM_PTR(&sdioio_sdcard_readblocks_obj) }, + { MP_ROM_QSTR(MP_QSTR_writeblocks), MP_ROM_PTR(&sdioio_sdcard_writeblocks_obj) }, +}; +STATIC MP_DEFINE_CONST_DICT(sdioio_sdcard_locals_dict, sdioio_sdcard_locals_dict_table); + +const mp_obj_type_t sdioio_SDCard_type = { + { &mp_type_type }, + .name = MP_QSTR_SDCard, + .make_new = sdioio_sdcard_make_new, + .locals_dict = (mp_obj_dict_t*)&sdioio_sdcard_locals_dict, +}; diff --git a/shared-bindings/sdioio/SDCard 2.h b/shared-bindings/sdioio/SDCard 2.h new file mode 100644 index 000000000..7f62ee7a6 --- /dev/null +++ b/shared-bindings/sdioio/SDCard 2.h @@ -0,0 +1,66 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Scott Shawcroft + * + * 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. + */ + +#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_BUSIO_SDIO_H +#define MICROPY_INCLUDED_SHARED_BINDINGS_BUSIO_SDIO_H + +#include "py/obj.h" + +#include "common-hal/microcontroller/Pin.h" +#include "common-hal/sdioio/SDCard.h" + +// Type object used in Python. Should be shared between ports. +extern const mp_obj_type_t sdioio_SDCard_type; + +// Construct an underlying SDIO object. +extern void common_hal_sdioio_sdcard_construct(sdioio_sdcard_obj_t *self, + const mcu_pin_obj_t * clock, const mcu_pin_obj_t * command, + uint8_t num_data, mcu_pin_obj_t ** data, uint32_t frequency); + +extern void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self); +extern bool common_hal_sdioio_sdcard_deinited(sdioio_sdcard_obj_t *self); + +extern bool common_hal_sdioio_sdcard_configure(sdioio_sdcard_obj_t *self, uint32_t baudrate, uint8_t width); + +extern void common_hal_sdioio_sdcard_unlock(sdioio_sdcard_obj_t *self); + +// Return actual SDIO bus frequency. +uint32_t common_hal_sdioio_sdcard_get_frequency(sdioio_sdcard_obj_t* self); + +// Return SDIO bus width. +uint8_t common_hal_sdioio_sdcard_get_width(sdioio_sdcard_obj_t* self); + +// Return number of device blocks +uint32_t common_hal_sdioio_sdcard_get_count(sdioio_sdcard_obj_t* self); + +// Read or write blocks +int common_hal_sdioio_sdcard_readblocks(sdioio_sdcard_obj_t* self, uint32_t start_block, mp_buffer_info_t *bufinfo); +int common_hal_sdioio_sdcard_writeblocks(sdioio_sdcard_obj_t* self, uint32_t start_block, mp_buffer_info_t *bufinfo); + +// This is used by the supervisor to claim SDIO devices indefinitely. +extern void common_hal_sdioio_sdcard_never_reset(sdioio_sdcard_obj_t *self); + +#endif // MICROPY_INCLUDED_SHARED_BINDINGS_BUSIO_SDIO_H diff --git a/shared-bindings/sdioio/__init__ 2.c b/shared-bindings/sdioio/__init__ 2.c new file mode 100644 index 000000000..b88e5c3a9 --- /dev/null +++ b/shared-bindings/sdioio/__init__ 2.c @@ -0,0 +1,47 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Jeff Epler 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 <stdint.h> + +#include "py/obj.h" +#include "py/runtime.h" + +#include "shared-bindings/sdioio/SDCard.h" + +//| """Interface to an SD card via the SDIO bus""" + +STATIC const mp_rom_map_elem_t sdioio_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sdio) }, + { MP_ROM_QSTR(MP_QSTR_SDCard), MP_ROM_PTR(&sdioio_SDCard_type) }, +}; + +STATIC MP_DEFINE_CONST_DICT(sdioio_module_globals, sdioio_module_globals_table); + +const mp_obj_module_t sdioio_module = { + .base = { &mp_type_module }, + .globals = (mp_obj_dict_t*)&sdioio_module_globals, +}; diff --git a/shared-bindings/sdioio/__init__ 2.h b/shared-bindings/sdioio/__init__ 2.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/shared-bindings/sdioio/__init__ 2.h diff --git a/shared-module/_pixelbuf/PixelBuf.c b/shared-module/_pixelbuf/PixelBuf.c index 9d671e454..f3e679631 100644 --- a/shared-module/_pixelbuf/PixelBuf.c +++ b/shared-module/_pixelbuf/PixelBuf.c @@ -132,6 +132,18 @@ void common_hal__pixelbuf_pixelbuf_set_brightness(mp_obj_t self_in, mp_float_t b } } +uint8_t _pixelbuf_get_as_uint8(mp_obj_t obj) { + if (MP_OBJ_IS_SMALL_INT(obj)) { + return MP_OBJ_SMALL_INT_VALUE(obj); + } else if (MP_OBJ_IS_INT(obj)) { + return mp_obj_get_int_truncated(obj); + } else if (mp_obj_is_float(obj)) { + return (uint8_t)mp_obj_get_float(obj); + } + mp_raise_TypeError_varg( + translate("can't convert %q to %q"), mp_obj_get_type_qstr(obj), MP_QSTR_int); +} + void _pixelbuf_parse_color(pixelbuf_pixelbuf_obj_t* self, mp_obj_t color, uint8_t* r, uint8_t* g, uint8_t* b, uint8_t* w) { pixelbuf_byteorder_details_t *byteorder = &self->byteorder; // w is shared between white in NeoPixels and brightness in dotstars (so that DotStars can have @@ -142,8 +154,8 @@ void _pixelbuf_parse_color(pixelbuf_pixelbuf_obj_t* self, mp_obj_t color, uint8_ *w = 0; } - if (MP_OBJ_IS_INT(color)) { - mp_int_t value = mp_obj_get_int_truncated(color); + if (MP_OBJ_IS_INT(color) || mp_obj_is_float(color)) { + mp_int_t value = MP_OBJ_IS_INT(color) ? mp_obj_get_int_truncated(color) : mp_obj_get_float(color); *r = value >> 16 & 0xff; *g = (value >> 8) & 0xff; *b = value & 0xff; @@ -155,9 +167,9 @@ void _pixelbuf_parse_color(pixelbuf_pixelbuf_obj_t* self, mp_obj_t color, uint8_ mp_raise_ValueError_varg(translate("Expected tuple of length %d, got %d"), byteorder->bpp, len); } - *r = mp_obj_get_int_truncated(items[PIXEL_R]); - *g = mp_obj_get_int_truncated(items[PIXEL_G]); - *b = mp_obj_get_int_truncated(items[PIXEL_B]); + *r = _pixelbuf_get_as_uint8(items[PIXEL_R]); + *g = _pixelbuf_get_as_uint8(items[PIXEL_G]); + *b = _pixelbuf_get_as_uint8(items[PIXEL_B]); if (len > 3) { if (mp_obj_is_float(items[PIXEL_W])) { *w = 255 * mp_obj_get_float(items[PIXEL_W]); @@ -218,17 +230,35 @@ void _pixelbuf_set_pixel(pixelbuf_pixelbuf_obj_t* self, size_t index, mp_obj_t v _pixelbuf_set_pixel_color(self, index, r, g, b, w); } -void common_hal__pixelbuf_pixelbuf_set_pixels(mp_obj_t self_in, size_t start, mp_int_t step, size_t slice_len, mp_obj_t* values) { +void common_hal__pixelbuf_pixelbuf_set_pixels(mp_obj_t self_in, size_t start, mp_int_t step, size_t slice_len, mp_obj_t* values, + mp_obj_tuple_t *flatten_to) +{ pixelbuf_pixelbuf_obj_t* self = native_pixelbuf(self_in); - for (size_t i = 0; i < slice_len; i++) { - _pixelbuf_set_pixel(self, start, values[i]); - start+=step; + mp_obj_iter_buf_t iter_buf; + mp_obj_t iterable = mp_getiter(values, &iter_buf); + mp_obj_t item; + size_t i = 0; + bool flattened = flatten_to != mp_const_none; + if (flattened) flatten_to->len = self->bytes_per_pixel; + while ((item = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) { + if (flattened) { + flatten_to->items[i % self->bytes_per_pixel] = item; + if (++i % self->bytes_per_pixel == 0) { + _pixelbuf_set_pixel(self, start, flatten_to); + start+=step; + } + } else { + _pixelbuf_set_pixel(self, start, item); + start+=step; + } } if (self->auto_write) { common_hal__pixelbuf_pixelbuf_show(self_in); } } + + void common_hal__pixelbuf_pixelbuf_set_pixel(mp_obj_t self_in, size_t index, mp_obj_t value) { pixelbuf_pixelbuf_obj_t* self = native_pixelbuf(self_in); _pixelbuf_set_pixel(self, index, value); diff --git a/shared-module/board/__init__.c b/shared-module/board/__init__.c index 2c9139d8a..265c6517f 100644 --- a/shared-module/board/__init__.c +++ b/shared-module/board/__init__.c @@ -39,6 +39,11 @@ #include "shared-module/displayio/__init__.h" #endif +#if CIRCUITPY_SHARPDISPLAY +#include "shared-bindings/sharpdisplay/SharpMemoryFramebuffer.h" +#include "shared-module/sharpdisplay/SharpMemoryFramebuffer.h" +#endif + #if BOARD_I2C // Statically allocate the I2C object so it can live past the end of the heap and into the next VM. // That way it can be used by built-in I2CDisplay displays and be accessible through board.I2C(). @@ -148,10 +153,17 @@ void reset_board_busses(void) { bool display_using_spi = false; #if CIRCUITPY_DISPLAYIO for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) { - if (displays[i].fourwire_bus.bus == spi_singleton) { + mp_const_obj_t bus_type = displays[i].bus_base.type; + if (bus_type == &displayio_fourwire_type && displays[i].fourwire_bus.bus == spi_singleton) { + display_using_spi = true; + break; + } + #if CIRCUITPY_SHARPDISPLAY + if (displays[i].bus_base.type == &sharpdisplay_framebuffer_type && displays[i].sharpdisplay.bus == spi_singleton) { display_using_spi = true; break; } + #endif } #endif if (!display_using_spi) { diff --git a/shared-module/displayio/Bitmap.c b/shared-module/displayio/Bitmap.c index 8a27b5be1..d1942efc7 100644 --- a/shared-module/displayio/Bitmap.c +++ b/shared-module/displayio/Bitmap.c @@ -129,7 +129,6 @@ void common_hal_displayio_bitmap_blit(displayio_bitmap_t *self, int16_t x, int16 } } } - } void common_hal_displayio_bitmap_set_pixel(displayio_bitmap_t *self, int16_t x, int16_t y, uint32_t value) { diff --git a/shared-module/displayio/__init__.c b/shared-module/displayio/__init__.c index 5afcba35e..101dac4b3 100644 --- a/shared-module/displayio/__init__.c +++ b/shared-module/displayio/__init__.c @@ -26,7 +26,7 @@ primary_display_t displays[CIRCUITPY_DISPLAY_LIMIT]; -#if CIRCUITPY_RGBMATRIX || CIRCUITPY_SHARPDISPLAY +#if CIRCUITPY_RGBMATRIX STATIC bool any_display_uses_this_framebuffer(mp_obj_base_t *obj) { for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) { if (displays[i].display_base.type == &framebufferio_framebufferdisplay_type) { @@ -186,11 +186,7 @@ void reset_displays(void) { #if CIRCUITPY_SHARPDISPLAY } else if (displays[i].bus_base.type == &sharpdisplay_framebuffer_type) { sharpdisplay_framebuffer_obj_t * sharp = &displays[i].sharpdisplay; - if(any_display_uses_this_framebuffer(&sharp->base)) { - common_hal_sharpdisplay_framebuffer_reset(sharp); - } else { - common_hal_sharpdisplay_framebuffer_deinit(sharp); - } + common_hal_sharpdisplay_framebuffer_reset(sharp); #endif } else { // Not an active display bus. @@ -398,8 +394,8 @@ primary_display_t *allocate_display_or_raise(void) { } primary_display_t *allocate_display_bus(void) { for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) { - mp_const_obj_t display_type = displays[i].display.base.type; - if (display_type == NULL || display_type == &mp_type_NoneType) { + mp_const_obj_t display_bus_type = displays[i].bus_base.type; + if (display_bus_type == NULL || display_bus_type == &mp_type_NoneType) { return &displays[i]; } } diff --git a/shared-module/memorymonitor/AllocationAlarm 2.c b/shared-module/memorymonitor/AllocationAlarm 2.c new file mode 100644 index 000000000..35f4e4c63 --- /dev/null +++ b/shared-module/memorymonitor/AllocationAlarm 2.c @@ -0,0 +1,94 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 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 "shared-bindings/memorymonitor/__init__.h" +#include "shared-bindings/memorymonitor/AllocationAlarm.h" + +#include "py/gc.h" +#include "py/mpstate.h" +#include "py/runtime.h" + +void common_hal_memorymonitor_allocationalarm_construct(memorymonitor_allocationalarm_obj_t* self, size_t minimum_block_count) { + self->minimum_block_count = minimum_block_count; + self->next = NULL; + self->previous = NULL; +} + +void common_hal_memorymonitor_allocationalarm_set_ignore(memorymonitor_allocationalarm_obj_t* self, mp_int_t count) { + self->count = count; +} + +void common_hal_memorymonitor_allocationalarm_pause(memorymonitor_allocationalarm_obj_t* self) { + // Check to make sure we aren't already paused. We can be if we're exiting from an exception we + // caused. + if (self->previous == NULL) { + return; + } + *self->previous = self->next; + self->next = NULL; + self->previous = NULL; +} + +void common_hal_memorymonitor_allocationalarm_resume(memorymonitor_allocationalarm_obj_t* self) { + if (self->previous != NULL) { + mp_raise_RuntimeError(translate("Already running")); + } + self->next = MP_STATE_VM(active_allocationalarms); + self->previous = (memorymonitor_allocationalarm_obj_t**) &MP_STATE_VM(active_allocationalarms); + if (self->next != NULL) { + self->next->previous = &self->next; + } + MP_STATE_VM(active_allocationalarms) = self; +} + +void memorymonitor_allocationalarms_allocation(size_t block_count) { + memorymonitor_allocationalarm_obj_t* alarm = MP_OBJ_TO_PTR(MP_STATE_VM(active_allocationalarms)); + size_t alert_count = 0; + while (alarm != NULL) { + // Hold onto next in case we remove the alarm from the list. + memorymonitor_allocationalarm_obj_t* next = alarm->next; + if (block_count >= alarm->minimum_block_count) { + if (alarm->count > 0) { + alarm->count--; + } else { + // Uncomment the breakpoint below if you want to use a C debugger to figure out the C + // call stack for an allocation. + // asm("bkpt"); + // Pause now because we may alert when throwing the exception too. + common_hal_memorymonitor_allocationalarm_pause(alarm); + alert_count++; + } + } + alarm = next; + } + if (alert_count > 0) { + mp_raise_memorymonitor_AllocationError(translate("Attempt to allocate %d blocks"), block_count); + } +} + +void memorymonitor_allocationalarms_reset(void) { + MP_STATE_VM(active_allocationalarms) = NULL; +} diff --git a/shared-module/memorymonitor/AllocationAlarm 2.h b/shared-module/memorymonitor/AllocationAlarm 2.h new file mode 100644 index 000000000..172c24f6c --- /dev/null +++ b/shared-module/memorymonitor/AllocationAlarm 2.h @@ -0,0 +1,51 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 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. + */ + +#ifndef MICROPY_INCLUDED_SHARED_MODULE_MEMORYMONITOR_ALLOCATIONALARM_H +#define MICROPY_INCLUDED_SHARED_MODULE_MEMORYMONITOR_ALLOCATIONALARM_H + +#include <stdbool.h> +#include <stdint.h> + +#include "py/obj.h" + +typedef struct _memorymonitor_allocationalarm_obj_t memorymonitor_allocationalarm_obj_t; + +#define ALLOCATION_SIZE_BUCKETS 16 + +typedef struct _memorymonitor_allocationalarm_obj_t { + mp_obj_base_t base; + size_t minimum_block_count; + mp_int_t count; + // Store the location that points to us so we can remove ourselves. + memorymonitor_allocationalarm_obj_t** previous; + memorymonitor_allocationalarm_obj_t* next; +} memorymonitor_allocationalarm_obj_t; + +void memorymonitor_allocationalarms_allocation(size_t block_count); +void memorymonitor_allocationalarms_reset(void); + +#endif // MICROPY_INCLUDED_SHARED_MODULE_MEMORYMONITOR_ALLOCATIONALARM_H diff --git a/shared-module/memorymonitor/AllocationSize 2.c b/shared-module/memorymonitor/AllocationSize 2.c new file mode 100644 index 000000000..c28e65592 --- /dev/null +++ b/shared-module/memorymonitor/AllocationSize 2.c @@ -0,0 +1,91 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 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 "shared-bindings/memorymonitor/AllocationSize.h" + +#include "py/gc.h" +#include "py/mpstate.h" +#include "py/runtime.h" + +void common_hal_memorymonitor_allocationsize_construct(memorymonitor_allocationsize_obj_t* self) { + common_hal_memorymonitor_allocationsize_clear(self); + self->next = NULL; + self->previous = NULL; +} + +void common_hal_memorymonitor_allocationsize_pause(memorymonitor_allocationsize_obj_t* self) { + *self->previous = self->next; + self->next = NULL; + self->previous = NULL; +} + +void common_hal_memorymonitor_allocationsize_resume(memorymonitor_allocationsize_obj_t* self) { + if (self->previous != NULL) { + mp_raise_RuntimeError(translate("Already running")); + } + self->next = MP_STATE_VM(active_allocationsizes); + self->previous = (memorymonitor_allocationsize_obj_t**) &MP_STATE_VM(active_allocationsizes); + if (self->next != NULL) { + self->next->previous = &self->next; + } + MP_STATE_VM(active_allocationsizes) = self; +} + +void common_hal_memorymonitor_allocationsize_clear(memorymonitor_allocationsize_obj_t* self) { + for (size_t i = 0; i < ALLOCATION_SIZE_BUCKETS; i++) { + self->buckets[i] = 0; + } +} + +uint16_t common_hal_memorymonitor_allocationsize_get_len(memorymonitor_allocationsize_obj_t* self) { + return ALLOCATION_SIZE_BUCKETS; +} + +size_t common_hal_memorymonitor_allocationsize_get_bytes_per_block(memorymonitor_allocationsize_obj_t* self) { + return BYTES_PER_BLOCK; +} + +uint16_t common_hal_memorymonitor_allocationsize_get_item(memorymonitor_allocationsize_obj_t* self, int16_t index) { + return self->buckets[index]; +} + +void memorymonitor_allocationsizes_track_allocation(size_t block_count) { + memorymonitor_allocationsize_obj_t* as = MP_OBJ_TO_PTR(MP_STATE_VM(active_allocationsizes)); + size_t power_of_two = 0; + block_count >>= 1; + while (block_count != 0) { + power_of_two++; + block_count >>= 1; + } + while (as != NULL) { + as->buckets[power_of_two]++; + as = as->next; + } +} + +void memorymonitor_allocationsizes_reset(void) { + MP_STATE_VM(active_allocationsizes) = NULL; +} diff --git a/shared-module/memorymonitor/AllocationSize 2.h b/shared-module/memorymonitor/AllocationSize 2.h new file mode 100644 index 000000000..3baab2213 --- /dev/null +++ b/shared-module/memorymonitor/AllocationSize 2.h @@ -0,0 +1,51 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 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. + */ + +#ifndef MICROPY_INCLUDED_SHARED_MODULE_MEMORYMONITOR_ALLOCATIONSIZE_H +#define MICROPY_INCLUDED_SHARED_MODULE_MEMORYMONITOR_ALLOCATIONSIZE_H + +#include <stdbool.h> +#include <stdint.h> + +#include "py/obj.h" + +typedef struct _memorymonitor_allocationsize_obj_t memorymonitor_allocationsize_obj_t; + +#define ALLOCATION_SIZE_BUCKETS 16 + +typedef struct _memorymonitor_allocationsize_obj_t { + mp_obj_base_t base; + uint16_t buckets[ALLOCATION_SIZE_BUCKETS]; + // Store the location that points to us so we can remove ourselves. + memorymonitor_allocationsize_obj_t** previous; + memorymonitor_allocationsize_obj_t* next; + bool paused; +} memorymonitor_allocationsize_obj_t; + +void memorymonitor_allocationsizes_track_allocation(size_t block_count); +void memorymonitor_allocationsizes_reset(void); + +#endif // MICROPY_INCLUDED_SHARED_MODULE_MEMORYMONITOR_ALLOCATIONSIZE_H diff --git a/shared-module/memorymonitor/__init__ 2.c b/shared-module/memorymonitor/__init__ 2.c new file mode 100644 index 000000000..6cb424153 --- /dev/null +++ b/shared-module/memorymonitor/__init__ 2.c @@ -0,0 +1,39 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Scott Shawcroft + * + * 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 "shared-module/memorymonitor/__init__.h" +#include "shared-module/memorymonitor/AllocationAlarm.h" +#include "shared-module/memorymonitor/AllocationSize.h" + +void memorymonitor_track_allocation(size_t block_count) { + memorymonitor_allocationalarms_allocation(block_count); + memorymonitor_allocationsizes_track_allocation(block_count); +} + +void memorymonitor_reset(void) { + memorymonitor_allocationalarms_reset(); + memorymonitor_allocationsizes_reset(); +} diff --git a/shared-module/memorymonitor/__init__ 2.h b/shared-module/memorymonitor/__init__ 2.h new file mode 100644 index 000000000..f47f6434b --- /dev/null +++ b/shared-module/memorymonitor/__init__ 2.h @@ -0,0 +1,35 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 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. + */ + +#ifndef MICROPY_INCLUDED_MEMORYMONITOR___INIT___H +#define MICROPY_INCLUDED_MEMORYMONITOR___INIT___H + +#include <stddef.h> + +void memorymonitor_track_allocation(size_t block_count); +void memorymonitor_reset(void); + +#endif // MICROPY_INCLUDED_MEMORYMONITOR___INIT___H diff --git a/shared-module/sdcardio/SDCard 2.c b/shared-module/sdcardio/SDCard 2.c new file mode 100644 index 000000000..9e861279d --- /dev/null +++ b/shared-module/sdcardio/SDCard 2.c @@ -0,0 +1,466 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Jeff Epler 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. + */ + +// This implementation largely follows the structure of adafruit_sdcard.py + +#include "shared-bindings/busio/SPI.h" +#include "shared-bindings/digitalio/DigitalInOut.h" +#include "shared-bindings/time/__init__.h" +#include "shared-bindings/util.h" +#include "shared-module/sdcardio/SDCard.h" + +#include "py/mperrno.h" + +#if 0 +#define DEBUG_PRINT(...) ((void)mp_printf(&mp_plat_print, ## __VA_ARGS__)) +#else +#define DEBUG_PRINT(...) ((void)0) +#endif + +#define CMD_TIMEOUT (200) + +#define R1_IDLE_STATE (1<<0) +#define R1_ILLEGAL_COMMAND (1<<2) + +#define TOKEN_CMD25 (0xFC) +#define TOKEN_STOP_TRAN (0xFD) +#define TOKEN_DATA (0xFE) + +STATIC bool lock_and_configure_bus(sdcardio_sdcard_obj_t *self) { + if (!common_hal_busio_spi_try_lock(self->bus)) { + return false; + } + common_hal_busio_spi_configure(self->bus, self->baudrate, 0, 0, 8); + common_hal_digitalio_digitalinout_set_value(&self->cs, false); + return true; +} + +STATIC void lock_bus_or_throw(sdcardio_sdcard_obj_t *self) { + if (!lock_and_configure_bus(self)) { + mp_raise_OSError(EAGAIN); + } +} + +STATIC void clock_card(sdcardio_sdcard_obj_t *self, int bytes) { + uint8_t buf[] = {0xff}; + common_hal_digitalio_digitalinout_set_value(&self->cs, true); + for (int i=0; i<bytes; i++) { + common_hal_busio_spi_write(self->bus, buf, 1); + } +} + +STATIC void extraclock_and_unlock_bus(sdcardio_sdcard_obj_t *self) { + clock_card(self, 1); + common_hal_busio_spi_unlock(self->bus); +} + +static uint8_t CRC7(const uint8_t* data, uint8_t n) { + uint8_t crc = 0; + for (uint8_t i = 0; i < n; i++) { + uint8_t d = data[i]; + for (uint8_t j = 0; j < 8; j++) { + crc <<= 1; + if ((d & 0x80) ^ (crc & 0x80)) { + crc ^= 0x09; + } + d <<= 1; + } + } + return (crc << 1) | 1; +} + +#define READY_TIMEOUT_NS (300 * 1000 * 1000) // 300ms +STATIC void wait_for_ready(sdcardio_sdcard_obj_t *self) { + uint64_t deadline = common_hal_time_monotonic_ns() + READY_TIMEOUT_NS; + while (common_hal_time_monotonic_ns() < deadline) { + uint8_t b; + common_hal_busio_spi_read(self->bus, &b, 1, 0xff); + if (b == 0xff) { + break; + } + } +} + +// In Python API, defaults are response=None, data_block=True, wait=True +STATIC int cmd(sdcardio_sdcard_obj_t *self, int cmd, int arg, void *response_buf, size_t response_len, bool data_block, bool wait) { + DEBUG_PRINT("cmd % 3d [%02x] arg=% 11d [%08x] len=%d%s%s\n", cmd, cmd, arg, arg, response_len, data_block ? " data" : "", wait ? " wait" : ""); + uint8_t cmdbuf[6]; + cmdbuf[0] = cmd | 0x40; + cmdbuf[1] = (arg >> 24) & 0xff; + cmdbuf[2] = (arg >> 16) & 0xff; + cmdbuf[3] = (arg >> 8) & 0xff; + cmdbuf[4] = arg & 0xff; + cmdbuf[5] = CRC7(cmdbuf, 5); + + if (wait) { + wait_for_ready(self); + } + + common_hal_busio_spi_write(self->bus, cmdbuf, sizeof(cmdbuf)); + + // Wait for the response (response[7] == 0) + bool response_received = false; + for (int i=0; i<CMD_TIMEOUT; i++) { + common_hal_busio_spi_read(self->bus, cmdbuf, 1, 0xff); + if ((cmdbuf[0] & 0x80) == 0) { + response_received = true; + break; + } + } + + if (!response_received) { + return -EIO; + } + + if (response_buf) { + + if (data_block) { + cmdbuf[1] = 0xff; + do { + // Wait for the start block byte + common_hal_busio_spi_read(self->bus, cmdbuf+1, 1, 0xff); + } while (cmdbuf[1] != 0xfe); + } + + common_hal_busio_spi_read(self->bus, response_buf, response_len, 0xff); + + if (data_block) { + // Read and discard the CRC-CCITT checksum + common_hal_busio_spi_read(self->bus, cmdbuf+1, 2, 0xff); + } + + } + + return cmdbuf[0]; +} + +STATIC int block_cmd(sdcardio_sdcard_obj_t *self, int cmd_, int block, void *response_buf, size_t response_len, bool data_block, bool wait) { + return cmd(self, cmd_, block * self->cdv, response_buf, response_len, true, true); +} + +STATIC bool cmd_nodata(sdcardio_sdcard_obj_t* self, int cmd, int response) { + uint8_t cmdbuf[2] = {cmd, 0xff}; + + common_hal_busio_spi_write(self->bus, cmdbuf, sizeof(cmdbuf)); + + // Wait for the response (response[7] == response) + for (int i=0; i<CMD_TIMEOUT; i++) { + common_hal_busio_spi_read(self->bus, cmdbuf, 1, 0xff); + if (cmdbuf[0] == response) { + return 0; + } + } + return -EIO; +} + +STATIC const compressed_string_t *init_card_v1(sdcardio_sdcard_obj_t *self) { + for (int i=0; i<CMD_TIMEOUT; i++) { + if (cmd(self, 41, 0, NULL, 0, true, true) == 0) { + return NULL; + } + } + return translate("timeout waiting for v1 card"); +} + +STATIC const compressed_string_t *init_card_v2(sdcardio_sdcard_obj_t *self) { + for (int i=0; i<CMD_TIMEOUT; i++) { + uint8_t ocr[4]; + common_hal_time_delay_ms(50); + cmd(self, 58, 0, ocr, sizeof(ocr), false, true); + cmd(self, 55, 0, NULL, 0, true, true); + if (cmd(self, 41, 0x40000000, NULL, 0, true, true) == 0) { + cmd(self, 58, 0, ocr, sizeof(ocr), false, true); + if ((ocr[0] & 0x40) != 0) { + self->cdv = 1; + } + return NULL; + } + } + return translate("timeout waiting for v2 card"); +} + +STATIC const compressed_string_t *init_card(sdcardio_sdcard_obj_t *self) { + clock_card(self, 10); + + common_hal_digitalio_digitalinout_set_value(&self->cs, false); + + // CMD0: init card: should return _R1_IDLE_STATE (allow 5 attempts) + { + bool reached_idle_state = false; + for (int i=0; i<5; i++) { + if (cmd(self, 0, 0, NULL, 0, true, true) == R1_IDLE_STATE) { + reached_idle_state = true; + break; + } + } + if (!reached_idle_state) { + return translate("no SD card"); + } + } + + // CMD8: determine card version + { + uint8_t rb7[4]; + int response = cmd(self, 8, 0x1AA, rb7, sizeof(rb7), false, true); + if (response == R1_IDLE_STATE) { + const compressed_string_t *result =init_card_v2(self); + if (result != NULL) { + return result; + } + } else if (response == (R1_IDLE_STATE | R1_ILLEGAL_COMMAND)) { + const compressed_string_t *result =init_card_v1(self); + if (result != NULL) { + return result; + } + } else { + return translate("couldn't determine SD card version"); + } + } + + // CMD9: get number of sectors + { + uint8_t csd[16]; + int response = cmd(self, 9, 0, csd, sizeof(csd), true, true); + if (response != 0) { + return translate("no response from SD card"); + } + int csd_version = (csd[0] & 0xC0) >> 6; + if (csd_version >= 2) { + return translate("SD card CSD format not supported"); + } + + if (csd_version == 1) { + self->sectors = ((csd[8] << 8 | csd[9]) + 1) * 1024; + } else { + uint32_t block_length = 1 << (csd[5] & 0xF); + uint32_t c_size = ((csd[6] & 0x3) << 10) | (csd[7] << 2) | ((csd[8] & 0xC) >> 6); + uint32_t mult = 1 << (((csd[9] & 0x3) << 1 | (csd[10] & 0x80) >> 7) + 2); + self->sectors = block_length / 512 * mult * (c_size + 1); + } + } + + // CMD16: set block length to 512 bytes + { + int response = cmd(self, 16, 512, NULL, 0, true, true); + if (response != 0) { + return translate("can't set 512 block size"); + } + } + + return NULL; +} + +void common_hal_sdcardio_sdcard_construct(sdcardio_sdcard_obj_t *self, busio_spi_obj_t *bus, mcu_pin_obj_t *cs, int baudrate) { + self->bus = bus; + common_hal_digitalio_digitalinout_construct(&self->cs, cs); + common_hal_digitalio_digitalinout_switch_to_output(&self->cs, true, DRIVE_MODE_PUSH_PULL); + + self->cdv = 512; + self->sectors = 0; + self->baudrate = 250000; + + lock_bus_or_throw(self); + const compressed_string_t *result = init_card(self); + extraclock_and_unlock_bus(self); + + if (result != NULL) { + common_hal_digitalio_digitalinout_deinit(&self->cs); + mp_raise_OSError_msg(result); + } + + self->baudrate = baudrate; +} + +void common_hal_sdcardio_sdcard_deinit(sdcardio_sdcard_obj_t *self) { + if (!self->bus) { + return; + } + self->bus = 0; + common_hal_digitalio_digitalinout_deinit(&self->cs); +} + +void common_hal_sdcardio_check_for_deinit(sdcardio_sdcard_obj_t *self) { + if (!self->bus) { + raise_deinited_error(); + } +} + +int common_hal_sdcardio_sdcard_get_blockcount(sdcardio_sdcard_obj_t *self) { + common_hal_sdcardio_check_for_deinit(self); + return self->sectors; +} + +int readinto(sdcardio_sdcard_obj_t *self, void *buf, size_t size) { + uint8_t aux[2] = {0, 0}; + while (aux[0] != 0xfe) { + common_hal_busio_spi_read(self->bus, aux, 1, 0xff); + } + + common_hal_busio_spi_read(self->bus, buf, size, 0xff); + + // Read checksum and throw it away + common_hal_busio_spi_read(self->bus, aux, sizeof(aux), 0xff); + return 0; +} + +int readblocks(sdcardio_sdcard_obj_t *self, uint32_t start_block, mp_buffer_info_t *buf) { + uint32_t nblocks = buf->len / 512; + if (nblocks == 1) { + // Use CMD17 to read a single block + return block_cmd(self, 17, start_block, buf->buf, buf->len, true, true); + } else { + // Use CMD18 to read multiple blocks + int r = block_cmd(self, 18, start_block, NULL, 0, true, true); + if (r < 0) { + return r; + } + + uint8_t *ptr = buf->buf; + while (nblocks--) { + r = readinto(self, ptr, 512); + if (r < 0) { + return r; + } + ptr += 512; + } + + // End the multi-block read + r = cmd(self, 12, 0, NULL, 0, true, false); + + // Return first status 0 or last before card ready (0xff) + while (r != 0) { + uint8_t single_byte; + common_hal_busio_spi_read(self->bus, &single_byte, 1, 0xff); + if (single_byte & 0x80) { + return r; + } + r = single_byte; + } + } + return 0; +} + +int common_hal_sdcardio_sdcard_readblocks(sdcardio_sdcard_obj_t *self, uint32_t start_block, mp_buffer_info_t *buf) { + common_hal_sdcardio_check_for_deinit(self); + if (buf->len % 512 != 0) { + mp_raise_ValueError(translate("Buffer length must be a multiple of 512")); + } + + lock_and_configure_bus(self); + int r = readblocks(self, start_block, buf); + extraclock_and_unlock_bus(self); + return r; +} + +int _write(sdcardio_sdcard_obj_t *self, uint8_t token, void *buf, size_t size) { + wait_for_ready(self); + + uint8_t cmd[2]; + cmd[0] = token; + + common_hal_busio_spi_write(self->bus, cmd, 1); + common_hal_busio_spi_write(self->bus, buf, size); + + cmd[0] = cmd[1] = 0xff; + common_hal_busio_spi_write(self->bus, cmd, 2); + + // Check the response + // This differs from the traditional adafruit_sdcard handling, + // but adafruit_sdcard also ignored the return value of SDCard._write(!) + // so nobody noticed + // + // + // Response is as follows: + // x x x 0 STAT 1 + // 7 6 5 4 3..1 0 + // with STATUS 010 indicating "data accepted", and other status bit + // combinations indicating failure. + // In practice, I was seeing cmd[0] as 0xe5, indicating success + for (int i=0; i<CMD_TIMEOUT; i++) { + common_hal_busio_spi_read(self->bus, cmd, 1, 0xff); + DEBUG_PRINT("i=%02d cmd[0] = 0x%02x\n", i, cmd[0]); + if ((cmd[0] & 0b00010001) == 0b00000001) { + if ((cmd[0] & 0x1f) != 0x5) { + return -EIO; + } else { + break; + } + } + } + + // Wait for the write to finish + do { + common_hal_busio_spi_read(self->bus, cmd, 1, 0xff); + } while (cmd[0] == 0); + + // Success + return 0; +} + +int writeblocks(sdcardio_sdcard_obj_t *self, uint32_t start_block, mp_buffer_info_t *buf) { + common_hal_sdcardio_check_for_deinit(self); + uint32_t nblocks = buf->len / 512; + if (nblocks == 1) { + // Use CMD24 to write a single block + int r = block_cmd(self, 24, start_block, NULL, 0, true, true); + if (r < 0) { + return r; + } + r = _write(self, TOKEN_DATA, buf->buf, buf->len); + if (r < 0) { + return r; + } + } else { + // Use CMD25 to write multiple block + int r = block_cmd(self, 25, start_block, NULL, 0, true, true); + if (r < 0) { + return r; + } + + uint8_t *ptr = buf->buf; + while (nblocks--) { + r = _write(self, TOKEN_CMD25, ptr, 512); + if (r < 0) { + return r; + } + ptr += 512; + } + + cmd_nodata(self, TOKEN_STOP_TRAN, 0); + } + return 0; +} + +int common_hal_sdcardio_sdcard_writeblocks(sdcardio_sdcard_obj_t *self, uint32_t start_block, mp_buffer_info_t *buf) { + common_hal_sdcardio_check_for_deinit(self); + if (buf->len % 512 != 0) { + mp_raise_ValueError(translate("Buffer length must be a multiple of 512")); + } + lock_and_configure_bus(self); + int r = writeblocks(self, start_block, buf); + extraclock_and_unlock_bus(self); + return r; +} diff --git a/shared-module/sdcardio/SDCard 2.h b/shared-module/sdcardio/SDCard 2.h new file mode 100644 index 000000000..76c906029 --- /dev/null +++ b/shared-module/sdcardio/SDCard 2.h @@ -0,0 +1,51 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Jeff Epler 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. + */ + +#pragma once + +#include "py/obj.h" +#include "py/objproperty.h" +#include "py/runtime.h" +#include "py/objarray.h" + +#include "common-hal/busio/SPI.h" +#include "common-hal/digitalio/DigitalInOut.h" + +typedef struct { + mp_obj_base_t base; + busio_spi_obj_t *bus; + digitalio_digitalinout_obj_t cs; + int cdv; + int baudrate; + uint32_t sectors; +} sdcardio_sdcard_obj_t; + +void common_hal_sdcardio_sdcard_construct(sdcardio_sdcard_obj_t *self, busio_spi_obj_t *spi, mcu_pin_obj_t *cs, int baudrate); +void common_hal_sdcardio_sdcard_deinit(sdcardio_sdcard_obj_t *self); +void common_hal_sdcardio_sdcard_check_for_deinit(sdcardio_sdcard_obj_t *self); +int common_hal_sdcardio_sdcard_get_blockcount(sdcardio_sdcard_obj_t *self); +int common_hal_sdcardio_sdcard_readblocks(sdcardio_sdcard_obj_t *self, uint32_t start_block, mp_buffer_info_t *buf); +int common_hal_sdcardio_sdcard_writeblocks(sdcardio_sdcard_obj_t *self, uint32_t start_block, mp_buffer_info_t *buf); diff --git a/shared-module/sdcardio/__init__ 2.c b/shared-module/sdcardio/__init__ 2.c new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/shared-module/sdcardio/__init__ 2.c diff --git a/shared-module/sdcardio/__init__ 2.h b/shared-module/sdcardio/__init__ 2.h new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/shared-module/sdcardio/__init__ 2.h diff --git a/supervisor/background_callback 2.h b/supervisor/background_callback 2.h new file mode 100644 index 000000000..535dd656b --- /dev/null +++ b/supervisor/background_callback 2.h @@ -0,0 +1,87 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Jeff Epler 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. + */ + +#ifndef CIRCUITPY_INCLUDED_SUPERVISOR_BACKGROUND_CALLBACK_H +#define CIRCUITPY_INCLUDED_SUPERVISOR_BACKGROUND_CALLBACK_H + +/** Background callbacks are a linked list of tasks to call in the background. + * + * Include a member of type `background_callback_t` inside an object + * which needs to queue up background work, and zero-initialize it. + * + * To schedule the work, use background_callback_add, with fun as the + * function to call and data pointing to the object itself. + * + * Next time run_background_tasks_if_tick is called, the callback will + * be run and removed from the linked list. + * + * Queueing a task that is already queued does nothing. Unconditionally + * re-queueing it from its own background task will cause it to run during the + * very next background-tasks invocation, leading to a CircuitPython freeze, so + * don't do that. + * + * background_callback_add can be called from interrupt context. + */ +typedef void (*background_callback_fun)(void *data); +typedef struct background_callback { + background_callback_fun fun; + void *data; + struct background_callback *next; + struct background_callback *prev; +} background_callback_t; + +/* Add a background callback for which 'fun' and 'data' were previously set */ +void background_callback_add_core(background_callback_t *cb); + +/* Add a background callback to the given function with the given data. When + * the callback involves an object on the GC heap, the 'data' must be a pointer + * to that object itself, not an internal pointer. Otherwise, it can be the + * case that no other references to the object itself survive, and the object + * becomes garbage collected while an outstanding background callback still + * exists. + */ +void background_callback_add(background_callback_t *cb, background_callback_fun fun, void *data); + +/* Run all background callbacks. Normally, this is done by the supervisor + * whenever the list is non-empty */ +void background_callback_run_all(void); + +/* During soft reset, remove all pending callbacks and clear the critical section flag */ +void background_callback_reset(void); + +/* Sometimes background callbacks must be blocked. Use these functions to + * bracket the section of code where this is the case. These calls nest, and + * begins must be balanced with ends. + */ +void background_callback_begin_critical_section(void); +void background_callback_end_critical_section(void); + +/* + * Background callbacks may stop objects from being collected + */ +void background_callback_gc_collect(void); + +#endif diff --git a/supervisor/shared/background_callback 2.c b/supervisor/shared/background_callback 2.c new file mode 100644 index 000000000..8e12dd362 --- /dev/null +++ b/supervisor/shared/background_callback 2.c @@ -0,0 +1,138 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Jeff Epler 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 <string.h> + +#include "py/gc.h" +#include "py/mpconfig.h" +#include "supervisor/background_callback.h" +#include "supervisor/shared/tick.h" +#include "shared-bindings/microcontroller/__init__.h" + +STATIC volatile background_callback_t *callback_head, *callback_tail; + +#define CALLBACK_CRITICAL_BEGIN (common_hal_mcu_disable_interrupts()) +#define CALLBACK_CRITICAL_END (common_hal_mcu_enable_interrupts()) + +void background_callback_add_core(background_callback_t *cb) { + CALLBACK_CRITICAL_BEGIN; + if (cb->prev || callback_head == cb) { + CALLBACK_CRITICAL_END; + return; + } + cb->next = 0; + cb->prev = (background_callback_t*)callback_tail; + if (callback_tail) { + callback_tail->next = cb; + cb->prev = (background_callback_t*)callback_tail; + } + if (!callback_head) { + callback_head = cb; + } + callback_tail = cb; + CALLBACK_CRITICAL_END; +} + +void background_callback_add(background_callback_t *cb, background_callback_fun fun, void *data) { + cb->fun = fun; + cb->data = data; + background_callback_add_core(cb); +} + +static bool in_background_callback; +void background_callback_run_all() { + if (!callback_head) { + return; + } + CALLBACK_CRITICAL_BEGIN; + if (in_background_callback) { + CALLBACK_CRITICAL_END; + return; + } + in_background_callback = true; + background_callback_t *cb = (background_callback_t*)callback_head; + callback_head = NULL; + callback_tail = NULL; + while (cb) { + background_callback_t *next = cb->next; + cb->next = cb->prev = NULL; + background_callback_fun fun = cb->fun; + void *data = cb->data; + CALLBACK_CRITICAL_END; + // Leave the critical section in order to run the callback function + if (fun) { + fun(data); + } + CALLBACK_CRITICAL_BEGIN; + cb = next; + } + in_background_callback = false; + CALLBACK_CRITICAL_END; +} + +void background_callback_begin_critical_section() { + CALLBACK_CRITICAL_BEGIN; +} + +void background_callback_end_critical_section() { + CALLBACK_CRITICAL_END; +} + +void background_callback_reset() { + CALLBACK_CRITICAL_BEGIN; + background_callback_t *cb = (background_callback_t*)callback_head; + while(cb) { + background_callback_t *next = cb->next; + memset(cb, 0, sizeof(*cb)); + cb = next; + } + callback_head = NULL; + callback_tail = NULL; + in_background_callback = false; + CALLBACK_CRITICAL_END; +} + +void background_callback_gc_collect(void) { + // We don't enter the callback critical section here. We rely on + // gc_collect_ptr _NOT_ entering background callbacks, so it is not + // possible for the list to be cleared. + // + // However, it is possible for the list to be extended. We make the + // minor assumption that no newly added callback is for a + // collectable object. That is, we only plug the hole where an + // object becomes collectable AFTER it is added but before the + // callback is run, not the hole where an object was ALREADY + // collectable but adds a background task for itself. + // + // It's necessary to traverse the whole list here, as the callbacks + // themselves can be in non-gc memory, and some of the cb->data + // objects themselves might be in non-gc memory. + background_callback_t *cb = (background_callback_t*)callback_head; + while(cb) { + gc_collect_ptr(cb->data); + cb = cb->next; + } +} diff --git a/supervisor/shared/display.c b/supervisor/shared/display.c index 08dd71404..634720d0a 100644 --- a/supervisor/shared/display.c +++ b/supervisor/shared/display.c @@ -29,6 +29,7 @@ #include <string.h> #include "py/mpstate.h" +#include "shared-bindings/displayio/Bitmap.h" #include "shared-bindings/displayio/Group.h" #include "shared-bindings/displayio/Palette.h" #include "shared-bindings/displayio/TileGrid.h" @@ -48,15 +49,21 @@ extern size_t blinka_bitmap_data[]; extern displayio_bitmap_t blinka_bitmap; extern displayio_group_t circuitpython_splash; +#if CIRCUITPY_TERMINALIO static supervisor_allocation* tilegrid_tiles = NULL; +#endif void supervisor_start_terminal(uint16_t width_px, uint16_t height_px) { + // Default the scale to 2 because we may show blinka without the terminal for + // languages that don't have font support. + uint8_t scale = 2; + + #if CIRCUITPY_TERMINALIO displayio_tilegrid_t* grid = &supervisor_terminal_text_grid; uint16_t width_in_tiles = (width_px - blinka_bitmap.width) / grid->tile_width; // determine scale based on h - uint8_t scale = 1; - if (width_in_tiles > 80) { - scale = 2; + if (width_in_tiles < 80) { + scale = 1; } width_in_tiles = (width_px - blinka_bitmap.width * scale) / (grid->tile_width * scale); uint16_t height_in_tiles = height_px / (grid->tile_height * scale); @@ -64,7 +71,6 @@ void supervisor_start_terminal(uint16_t width_px, uint16_t height_px) { if (remaining_pixels > 0) { height_in_tiles += 1; } - circuitpython_splash.scale = scale; uint16_t total_tiles = width_in_tiles * height_in_tiles; @@ -94,34 +100,42 @@ void supervisor_start_terminal(uint16_t width_px, uint16_t height_px) { grid->full_change = true; common_hal_terminalio_terminal_construct(&supervisor_terminal, grid, &supervisor_terminal_font); + #endif + + circuitpython_splash.scale = scale; } void supervisor_stop_terminal(void) { + #if CIRCUITPY_TERMINALIO if (tilegrid_tiles != NULL) { free_memory(tilegrid_tiles); tilegrid_tiles = NULL; supervisor_terminal_text_grid.inline_tiles = false; supervisor_terminal_text_grid.tiles = NULL; } + #endif } void supervisor_display_move_memory(void) { - #if CIRCUITPY_DISPLAYIO + #if CIRCUITPY_TERMINALIO displayio_tilegrid_t* grid = &supervisor_terminal_text_grid; - if (MP_STATE_VM(terminal_tilegrid_tiles) == NULL || grid->tiles != MP_STATE_VM(terminal_tilegrid_tiles)) { - return; - } - uint16_t total_tiles = grid->width_in_tiles * grid->height_in_tiles; + if (MP_STATE_VM(terminal_tilegrid_tiles) != NULL && + grid->tiles == MP_STATE_VM(terminal_tilegrid_tiles)) { + uint16_t total_tiles = grid->width_in_tiles * grid->height_in_tiles; - tilegrid_tiles = allocate_memory(align32_size(total_tiles), false); - if (tilegrid_tiles != NULL) { - memcpy(tilegrid_tiles->ptr, grid->tiles, total_tiles); - grid->tiles = (uint8_t*) tilegrid_tiles->ptr; - } else { - grid->tiles = NULL; - grid->inline_tiles = false; + tilegrid_tiles = allocate_memory(align32_size(total_tiles), false); + if (tilegrid_tiles != NULL) { + memcpy(tilegrid_tiles->ptr, grid->tiles, total_tiles); + grid->tiles = (uint8_t*) tilegrid_tiles->ptr; + } else { + grid->tiles = NULL; + grid->inline_tiles = false; + } + MP_STATE_VM(terminal_tilegrid_tiles) = NULL; } - MP_STATE_VM(terminal_tilegrid_tiles) = NULL; + #endif + + #if CIRCUITPY_DISPLAYIO for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) { #if CIRCUITPY_RGBMATRIX if (displays[i].rgbmatrix.base.type == &rgbmatrix_RGBMatrix_type) { @@ -254,18 +268,26 @@ displayio_tilegrid_t blinka_sprite = { .in_group = true }; +#if CIRCUITPY_TERMINALIO +#define CHILD_COUNT 2 displayio_group_child_t splash_children[2] = { {&blinka_sprite, &blinka_sprite}, {&supervisor_terminal_text_grid, &supervisor_terminal_text_grid} }; +#else +#define CHILD_COUNT 1 +displayio_group_child_t splash_children[1] = { + {&blinka_sprite, &blinka_sprite}, +}; +#endif displayio_group_t circuitpython_splash = { .base = {.type = &displayio_group_type }, .x = 0, .y = 0, .scale = 2, - .size = 2, - .max_size = 2, + .size = CHILD_COUNT, + .max_size = CHILD_COUNT, .children = splash_children, .item_removed = false, .in_group = false, diff --git a/supervisor/shared/display.h b/supervisor/shared/display.h index 2a2ccf46d..4110cfe8e 100644 --- a/supervisor/shared/display.h +++ b/supervisor/shared/display.h @@ -27,6 +27,10 @@ #ifndef MICROPY_INCLUDED_SUPERVISOR_SHARED_DISPLAY_H #define MICROPY_INCLUDED_SUPERVISOR_SHARED_DISPLAY_H +#include <stdint.h> + +#if CIRCUITPY_TERMINALIO + #include "shared-bindings/displayio/Bitmap.h" #include "shared-bindings/displayio/TileGrid.h" #include "shared-bindings/fontio/BuiltinFont.h" @@ -42,6 +46,8 @@ extern displayio_bitmap_t supervisor_terminal_font_bitmap; extern displayio_tilegrid_t supervisor_terminal_text_grid; extern terminalio_terminal_obj_t supervisor_terminal; +#endif + void supervisor_start_terminal(uint16_t width_px, uint16_t height_px); void supervisor_stop_terminal(void); diff --git a/supervisor/shared/serial.c b/supervisor/shared/serial.c index 8eb78a90e..303f89e75 100644 --- a/supervisor/shared/serial.c +++ b/supervisor/shared/serial.c @@ -99,7 +99,7 @@ void serial_write_substring(const char* text, uint32_t length) { if (length == 0) { return; } -#if CIRCUITPY_DISPLAYIO +#if CIRCUITPY_TERMINALIO int errcode; common_hal_terminalio_terminal_write(&supervisor_terminal, (const uint8_t*) text, length, &errcode); #endif diff --git a/supervisor/supervisor.mk b/supervisor/supervisor.mk index a066fc0fd..c876a11cc 100644 --- a/supervisor/supervisor.mk +++ b/supervisor/supervisor.mk @@ -110,7 +110,9 @@ ifeq ($(CIRCUITPY_DISPLAYIO), 1) SRC_SUPERVISOR += \ supervisor/shared/display.c - SUPERVISOR_O += $(BUILD)/autogen_display_resources.o + ifeq ($(CIRCUITPY_TERMINALIO), 1) + SUPERVISOR_O += $(BUILD)/autogen_display_resources.o + endif endif ifndef USB_INTERFACE_NAME USB_INTERFACE_NAME = "CircuitPython" @@ -169,6 +171,10 @@ ifndef USB_MIDI_EP_NUM_IN USB_MIDI_EP_NUM_IN = 0 endif +ifndef USB_NUM_EP +USB_NUM_EP = 0 +endif + USB_DESCRIPTOR_ARGS = \ --manufacturer $(USB_MANUFACTURER)\ --product $(USB_PRODUCT)\ @@ -178,6 +184,7 @@ USB_DESCRIPTOR_ARGS = \ --interface_name $(USB_INTERFACE_NAME)\ --devices $(USB_DEVICES)\ --hid_devices $(USB_HID_DEVICES)\ + --max_ep $(USB_NUM_EP) \ --cdc_ep_num_notification $(USB_CDC_EP_NUM_NOTIFICATION)\ --cdc_ep_num_data_out $(USB_CDC_EP_NUM_DATA_OUT)\ --cdc_ep_num_data_in $(USB_CDC_EP_NUM_DATA_IN)\ diff --git a/tools/gen_display_resources.py b/tools/gen_display_resources.py index 478a2f22f..6657b6a27 100644 --- a/tools/gen_display_resources.py +++ b/tools/gen_display_resources.py @@ -58,16 +58,20 @@ filtered_characters = all_characters # Try to pre-load all of the glyphs. Misses will still be slow later. f.load_glyphs(set(ord(c) for c in all_characters)) +missing = 0 # Get each glyph. for c in set(all_characters): if ord(c) not in f._glyphs: - print("Font missing character:", c, ord(c)) + missing += 1 filtered_characters = filtered_characters.replace(c, "") continue g = f.get_glyph(ord(c)) if g["shift"][1] != 0: raise RuntimeError("y shift") +if missing > 0: + print("Font missing", missing, "characters", file=sys.stderr) + x, y, dx, dy = f.get_bounding_box() tile_x, tile_y = x - dx, y - dy total_bits = tile_x * len(all_characters) diff --git a/tools/gen_usb_descriptor.py b/tools/gen_usb_descriptor.py index fb91fd334..baee8cad7 100644 --- a/tools/gen_usb_descriptor.py +++ b/tools/gen_usb_descriptor.py @@ -62,6 +62,8 @@ parser.add_argument('--midi_ep_num_out', type=int, default=0, help='endpoint number of MIDI OUT') parser.add_argument('--midi_ep_num_in', type=int, default=0, help='endpoint number of MIDI IN') +parser.add_argument('--max_ep', type=int, default=0, + help='total number of endpoints available') parser.add_argument('--output_c_file', type=argparse.FileType('w', encoding='UTF-8'), required=True) parser.add_argument('--output_h_file', type=argparse.FileType('w', encoding='UTF-8'), required=True) @@ -376,6 +378,15 @@ if 'AUDIO' in args.devices: # interface cross-references. interfaces = util.join_interfaces(interfaces_to_join, renumber_endpoints=args.renumber_endpoints) +if args.max_ep != 0: + for interface in interfaces: + for subdescriptor in interface.subdescriptors: + endpoint_address = getattr(subdescriptor, 'bEndpointAddress', 0) & 0x7f + if endpoint_address > args.max_ep: + raise ValueError("Endpoint address %d of %s may not exceed %d" % (endpoint_address & 0x7f, interface.description, args.max_ep)) +else: + print("Unable to check whether maximum number of endpoints is respected", file=sys.stderr) + # Now adjust the CDC interface cross-references. cdc_union.bMasterInterface = cdc_comm_interface.bInterfaceNumber |
