summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build.yml11
-rw-r--r--.gitmodules3
-rw-r--r--.readthedocs.yml3
-rw-r--r--docs/rstjinja.py20
m---------frozen/Adafruit_CircuitPython_RFM9x0
-rw-r--r--lib/mp-readline/readline.c11
-rw-r--r--locale/ID.po311
-rw-r--r--locale/circuitpython.pot52
-rw-r--r--locale/cs.po275
-rw-r--r--locale/de_DE.po402
-rw-r--r--locale/es.po417
-rw-r--r--locale/fil.po378
-rw-r--r--locale/fr.po403
-rw-r--r--locale/hi.po256
-rw-r--r--locale/it_IT.po377
-rw-r--r--locale/ja.po539
-rw-r--r--locale/ko.po276
-rw-r--r--locale/nl.po423
-rw-r--r--locale/pl.po380
-rw-r--r--locale/pt_BR.po412
-rw-r--r--locale/sv.po404
-rw-r--r--locale/zh_Latn_pinyin.po684
-rw-r--r--mpy-cross/Makefile.static-raspbian3
-rw-r--r--ports/atmel-samd/Makefile2
-rw-r--r--ports/atmel-samd/boards/bdmicro_vina_m0/mpconfigboard.mk2
-rw-r--r--ports/atmel-samd/boards/feather_m0_rfm9x/mpconfigboard.mk18
-rw-r--r--ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk4
-rw-r--r--ports/atmel-samd/common-hal/pulseio/PulseOut.c10
-rw-r--r--ports/atmel-samd/mpconfigport.mk12
-rw-r--r--ports/cxd56/common-hal/pulseio/PulseOut.c12
-rw-r--r--ports/cxd56/supervisor/port.c9
-rw-r--r--ports/esp32s2/background.c7
-rw-r--r--ports/esp32s2/boards/espressif_saola_1_wroom/pins.c2
-rw-r--r--ports/esp32s2/common-hal/neopixel_write/__init__.c3
-rw-r--r--ports/esp32s2/common-hal/pulseio/PulseIn.c151
-rw-r--r--ports/esp32s2/common-hal/pulseio/PulseIn.h9
-rw-r--r--ports/esp32s2/common-hal/pulseio/PulseOut.c59
-rw-r--r--ports/esp32s2/common-hal/pulseio/PulseOut.h6
-rw-r--r--ports/esp32s2/mpconfigport.h13
-rw-r--r--ports/esp32s2/peripherals/rmt.c12
-rw-r--r--ports/esp32s2/peripherals/rmt.h1
-rw-r--r--ports/esp32s2/supervisor/port.c5
-rw-r--r--ports/mimxrt10xx/common-hal/pulseio/PulseOut.c5
-rw-r--r--ports/nrf/boards/arduino_nano_33_ble/mpconfigboard.mk7
-rw-r--r--ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk6
-rw-r--r--ports/nrf/boards/common.template.ld35
-rw-r--r--ports/nrf/boards/hiibot_bluefi/mpconfigboard.mk7
-rw-r--r--ports/nrf/boards/pca10100/mpconfigboard.h2
-rw-r--r--ports/nrf/boards/pca10100/mpconfigboard.mk4
-rw-r--r--ports/nrf/boards/simmel/mpconfigboard.h5
-rw-r--r--ports/nrf/boards/simmel/mpconfigboard.mk4
-rw-r--r--ports/nrf/boards/simmel/pins.c10
-rw-r--r--ports/nrf/common-hal/_bleio/Adapter.c30
-rw-r--r--ports/nrf/common-hal/busio/SPI.c5
-rw-r--r--ports/nrf/common-hal/pulseio/PulseOut.c10
-rw-r--r--ports/nrf/ld_defines.c9
-rw-r--r--ports/nrf/mpconfigport.h104
-rw-r--r--ports/nrf/nrfx_config.h2
-rw-r--r--ports/stm/common-hal/pulseio/PulseOut.c10
-rw-r--r--py/circuitpy_defns.mk5
-rw-r--r--py/circuitpy_mpconfig.h10
-rw-r--r--py/circuitpy_mpconfig.mk3
-rw-r--r--py/makeqstrdata.py6
-rw-r--r--shared-bindings/_pixelbuf/PixelBuf.c38
-rw-r--r--shared-bindings/_pixelbuf/PixelBuf.h2
-rw-r--r--shared-bindings/_typing/__init__ 2.pyi54
-rw-r--r--shared-bindings/displayio/Bitmap.c7
-rw-r--r--shared-bindings/gnss/GNSS 2.c205
-rw-r--r--shared-bindings/gnss/GNSS 2.h27
-rw-r--r--shared-bindings/gnss/PositionFix 2.c80
-rw-r--r--shared-bindings/gnss/PositionFix 2.h28
-rw-r--r--shared-bindings/gnss/SatelliteSystem 2.c113
-rw-r--r--shared-bindings/gnss/SatelliteSystem 2.h33
-rw-r--r--shared-bindings/gnss/__init__ 2.c31
-rw-r--r--shared-bindings/i2cperipheral/I2CPeripheral 2.c436
-rw-r--r--shared-bindings/i2cperipheral/I2CPeripheral 2.h60
-rw-r--r--shared-bindings/i2cperipheral/__init__ 2.c106
-rw-r--r--shared-bindings/memorymonitor/AllocationAlarm 2.c137
-rw-r--r--shared-bindings/memorymonitor/AllocationAlarm 2.h39
-rw-r--r--shared-bindings/memorymonitor/AllocationSize 2.c183
-rw-r--r--shared-bindings/memorymonitor/AllocationSize 2.h42
-rw-r--r--shared-bindings/memorymonitor/__init__ 2.c76
-rw-r--r--shared-bindings/memorymonitor/__init__ 2.h49
-rw-r--r--shared-bindings/pulseio/PulseOut.c29
-rw-r--r--shared-bindings/pulseio/PulseOut.h6
-rw-r--r--shared-bindings/sdcardio/SDCard 2.c183
-rw-r--r--shared-bindings/sdcardio/SDCard 2.h30
-rw-r--r--shared-bindings/sdcardio/__init__ 2.c47
-rw-r--r--shared-bindings/sdcardio/__init__ 2.h0
-rw-r--r--shared-bindings/sdioio/SDCard 2.c296
-rw-r--r--shared-bindings/sdioio/SDCard 2.h66
-rw-r--r--shared-bindings/sdioio/__init__ 2.c47
-rw-r--r--shared-bindings/sdioio/__init__ 2.h0
-rw-r--r--shared-module/_pixelbuf/PixelBuf.c48
-rw-r--r--shared-module/board/__init__.c14
-rw-r--r--shared-module/displayio/Bitmap.c1
-rw-r--r--shared-module/displayio/__init__.c12
-rw-r--r--shared-module/memorymonitor/AllocationAlarm 2.c94
-rw-r--r--shared-module/memorymonitor/AllocationAlarm 2.h51
-rw-r--r--shared-module/memorymonitor/AllocationSize 2.c91
-rw-r--r--shared-module/memorymonitor/AllocationSize 2.h51
-rw-r--r--shared-module/memorymonitor/__init__ 2.c39
-rw-r--r--shared-module/memorymonitor/__init__ 2.h35
-rw-r--r--shared-module/sdcardio/SDCard 2.c466
-rw-r--r--shared-module/sdcardio/SDCard 2.h51
-rw-r--r--shared-module/sdcardio/__init__ 2.c0
-rw-r--r--shared-module/sdcardio/__init__ 2.h0
-rw-r--r--supervisor/background_callback 2.h87
-rw-r--r--supervisor/shared/background_callback 2.c138
-rw-r--r--supervisor/shared/display.c60
-rw-r--r--supervisor/shared/display.h6
-rw-r--r--supervisor/shared/serial.c2
-rw-r--r--supervisor/supervisor.mk9
-rw-r--r--tools/gen_display_resources.py6
-rw-r--r--tools/gen_usb_descriptor.py11
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