summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2020-03-03 20:13:53 -0600
committerJeff Epler <jepler@gmail.com>2020-03-03 20:13:53 -0600
commitda31acfcc45e5ad43c8ea515650ef16540de7fbb (patch)
treedba7d3ef6c7099c8d79e7dde7bd42d132e435498
parentc0bfa117661766cdc7d5a3daca88008a669b5a90 (diff)
parente98991fd7e472f8d43ae60ad62ef1c32fd250fea (diff)
Merge remote-tracking branch 'origin/master' into ulab
-rw-r--r--.github/workflows/build.yml10
-rw-r--r--lib/oofatfs/ff.c6
-rw-r--r--lib/oofatfs/ffconf.h6
-rw-r--r--locale/ID.po21
-rw-r--r--locale/circuitpython.pot21
-rw-r--r--locale/de_DE.po21
-rw-r--r--locale/en_US.po21
-rw-r--r--locale/en_x_pirate.po21
-rw-r--r--locale/es.po21
-rw-r--r--locale/fil.po21
-rw-r--r--locale/fr.po21
-rw-r--r--locale/it_IT.po21
-rw-r--r--locale/ko.po21
-rw-r--r--locale/pl.po21
-rw-r--r--locale/pt_BR.po21
-rw-r--r--locale/zh_Latn_pinyin.po26
-rw-r--r--mpy-cross/.gitignore1
-rw-r--r--mpy-cross/Makefile.fuzz6
-rwxr-xr-xports/nrf/Makefile1
-rw-r--r--ports/nrf/supervisor/qspi_flash.c43
-rw-r--r--ports/stm32f4/common-hal/pulseio/PWMOut.c2
-rw-r--r--ports/stm32f4/common-hal/pulseio/PulseOut.c163
-rw-r--r--ports/stm32f4/common-hal/pulseio/PulseOut.h2
-rw-r--r--ports/stm32f4/peripherals/stm32f4/periph.h7
-rw-r--r--ports/stm32f4/supervisor/port.c2
-rw-r--r--ports/unix/Makefile12
-rw-r--r--py/compile.c17
-rw-r--r--py/parse.c3
-rw-r--r--tools/build_board_info.py19
-rwxr-xr-xtools/upload_release_files.py35
30 files changed, 481 insertions, 132 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 118135850..32c949a3a 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -273,13 +273,3 @@ jobs:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
if: github.event_name == 'push' || (github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested'))
- - name: Install upload deps
- run: |
- pip install uritemplate
- - name: Upload to Release
- run: "[ -z \"$ADABOT_GITHUB_ACCESS_TOKEN\" ] || python3 -u upload_release_files.py"
- working-directory: tools
- env:
- UPLOAD_URL: ${{ github.event.release.upload_url }}
- ADABOT_GITHUB_ACCESS_TOKEN: ${{ secrets.BLINKA_GITHUB_ACCESS_TOKEN }}
- if: github.event_name == 'release' && (github.event.action == 'published' || github.event.action == 'rerequested')
diff --git a/lib/oofatfs/ff.c b/lib/oofatfs/ff.c
index 71bd19702..e961c789d 100644
--- a/lib/oofatfs/ff.c
+++ b/lib/oofatfs/ff.c
@@ -3382,11 +3382,7 @@ FRESULT f_read (
if (!sect) ABORT(fs, FR_INT_ERR);
sect += csect;
cc = btr / SS(fs); /* When remaining bytes >= sector size, */
- if (cc
-#if _FS_DISK_READ_ALIGNED
- && (((int)rbuff & 3) == 0)
-#endif
- ) {/* Read maximum contiguous sectors directly */
+ if (cc) {/* Read maximum contiguous sectors directly */
if (csect + cc > fs->csize) { /* Clip at cluster boundary */
cc = fs->csize - csect;
}
diff --git a/lib/oofatfs/ffconf.h b/lib/oofatfs/ffconf.h
index a3795fa3f..214311b4c 100644
--- a/lib/oofatfs/ffconf.h
+++ b/lib/oofatfs/ffconf.h
@@ -343,12 +343,6 @@
/ SemaphoreHandle_t and etc.. A header file for O/S definitions needs to be
/ included somewhere in the scope of ff.h. */
-// Set to nonzero if buffers passed to disk_read have a word alignment
-// restriction
-#ifndef _FS_DISK_READ_ALIGNED
-#define _FS_DISK_READ_ALIGNED 0
-#endif
-
/* #include <windows.h> // O/S definitions */
diff --git a/locale/ID.po b/locale/ID.po
index 07d224104..4325ac322 100644
--- a/locale/ID.po
+++ b/locale/ID.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\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"
@@ -185,6 +185,10 @@ msgid "'align' requires 1 argument"
msgstr "'align' membutuhkan 1 argumen"
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr "'await' diluar fungsi"
@@ -910,10 +914,13 @@ msgstr "Pin untuk channel kanan tidak valid"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr "Pin-pin tidak valid"
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr ""
@@ -1003,6 +1010,10 @@ msgstr ""
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1181,7 +1192,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2216,7 +2227,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr "inline assembler harus sebuah fungsi"
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2539,7 +2550,7 @@ msgstr ""
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot
index 9f6fee54f..5494ed932 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-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\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"
@@ -184,6 +184,10 @@ msgid "'align' requires 1 argument"
msgstr ""
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr ""
@@ -899,10 +903,13 @@ msgstr ""
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr ""
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr ""
@@ -992,6 +999,10 @@ msgstr ""
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1167,7 +1178,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2192,7 +2203,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr ""
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2515,7 +2526,7 @@ msgstr ""
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 43d1bb624..9f0ff3a43 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: Pascal Deneaux\n"
"Language-Team: Sebastian Plamauer, Pascal Deneaux\n"
@@ -186,6 +186,10 @@ msgid "'align' requires 1 argument"
msgstr "'align' erfordert genau ein Argument"
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr "'await' außerhalb einer Funktion"
@@ -907,10 +911,13 @@ msgstr "Ungültiger Pin für rechten Kanal"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr "Ungültige Pins"
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr "Ungültige Polarität"
@@ -1001,6 +1008,10 @@ msgstr "Muss eine %q Unterklasse sein."
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1184,7 +1195,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2222,7 +2233,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr "inline assembler muss eine function sein"
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2551,7 +2562,7 @@ msgstr ""
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/en_US.po b/locale/en_US.po
index 58b9d4df2..3ab55e3e3 100644
--- a/locale/en_US.po
+++ b/locale/en_US.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -184,6 +184,10 @@ msgid "'align' requires 1 argument"
msgstr ""
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr ""
@@ -899,10 +903,13 @@ msgstr ""
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr ""
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr ""
@@ -992,6 +999,10 @@ msgstr ""
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1167,7 +1178,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2192,7 +2203,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr ""
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2515,7 +2526,7 @@ msgstr ""
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/en_x_pirate.po b/locale/en_x_pirate.po
index 9fd5ff4fe..6e31f7638 100644
--- a/locale/en_x_pirate.po
+++ b/locale/en_x_pirate.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n"
"Language-Team: @sommersoft, @MrCertainly\n"
@@ -186,6 +186,10 @@ msgid "'align' requires 1 argument"
msgstr ""
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr ""
@@ -903,10 +907,13 @@ msgstr "Belay that! Invalid pin for starboard-side channel"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr ""
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr ""
@@ -996,6 +1003,10 @@ msgstr ""
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1171,7 +1182,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2196,7 +2207,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr ""
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2519,7 +2530,7 @@ msgstr ""
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/es.po b/locale/es.po
index ebd2a1e93..406d91234 100644
--- a/locale/es.po
+++ b/locale/es.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2018-08-24 22:56-0500\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -186,6 +186,10 @@ msgid "'align' requires 1 argument"
msgstr "'align' requiere 1 argumento"
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr "'await' fuera de la función"
@@ -907,10 +911,13 @@ msgstr "Pin inválido para canal derecho"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr "pines inválidos"
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr "Polaridad inválida"
@@ -1000,6 +1007,10 @@ msgstr "Debe de ser una subclase de %q"
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1183,7 +1194,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2223,7 +2234,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr "ensamblador en línea debe ser una función"
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2552,7 +2563,7 @@ msgstr "no suficientes argumentos para format string"
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/fil.po b/locale/fil.po
index e358c9eb8..2c79dfe5c 100644
--- a/locale/fil.po
+++ b/locale/fil.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2018-12-20 22:15-0800\n"
"Last-Translator: Timothy <me@timothygarcia.ca>\n"
"Language-Team: fil\n"
@@ -187,6 +187,10 @@ msgid "'align' requires 1 argument"
msgstr "'align' kailangan ng 1 argument"
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr "'await' sa labas ng function"
@@ -915,10 +919,13 @@ msgstr "Mali ang pin para sa kanang channel"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr "Mali ang pins"
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr "Mali ang polarity"
@@ -1008,6 +1015,10 @@ msgstr ""
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1189,7 +1200,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2238,7 +2249,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr "inline assembler ay dapat na function"
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2565,7 +2576,7 @@ msgstr "kulang sa arguments para sa format string"
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/fr.po b/locale/fr.po
index cd7a533c3..220b66de8 100644
--- a/locale/fr.po
+++ b/locale/fr.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2019-04-14 20:05+0100\n"
"Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n"
"Language-Team: fr\n"
@@ -188,6 +188,10 @@ msgid "'align' requires 1 argument"
msgstr "'align' nécessite 1 argument"
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr "'await' en dehors d'une fonction"
@@ -921,10 +925,13 @@ msgstr "Broche invalide pour le canal droit"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr "Broches invalides"
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr "Polarité invalide"
@@ -1015,6 +1022,10 @@ msgstr ""
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1202,7 +1213,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2262,7 +2273,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr "l'assembleur doit être une fonction"
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2592,7 +2603,7 @@ msgstr "pas assez d'arguments pour la chaîne de format"
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/it_IT.po b/locale/it_IT.po
index e0581b086..19162faf5 100644
--- a/locale/it_IT.po
+++ b/locale/it_IT.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2018-10-02 16:27+0200\n"
"Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n"
"Language-Team: \n"
@@ -186,6 +186,10 @@ msgid "'align' requires 1 argument"
msgstr "'align' richiede 1 argomento"
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr "'await' al di fuori della funzione"
@@ -917,10 +921,13 @@ msgstr "Pin non valido per il canale destro"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr "Pin non validi"
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr "Polarità non valida"
@@ -1012,6 +1019,10 @@ msgstr ""
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1198,7 +1209,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2239,7 +2250,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr "inline assembler deve essere una funzione"
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2570,7 +2581,7 @@ msgstr "argomenti non sufficienti per la stringa di formattazione"
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/ko.po b/locale/ko.po
index d9efa7466..067d3491f 100644
--- a/locale/ko.po
+++ b/locale/ko.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2019-05-06 14:22-0700\n"
"Last-Translator: \n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -186,6 +186,10 @@ msgid "'align' requires 1 argument"
msgstr "'align' 에는 1 개의 독립변수가 필요합니다"
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr "'await' 는 펑크션 외부에 있습니다"
@@ -903,10 +907,13 @@ msgstr "오른쪽 채널 핀이 잘못되었습니다"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr "핀이 유효하지 않습니다"
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr ""
@@ -996,6 +1003,10 @@ msgstr ""
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1171,7 +1182,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2197,7 +2208,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr ""
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2520,7 +2531,7 @@ msgstr ""
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/pl.po b/locale/pl.po
index a8620dbc9..a1d47caa6 100644
--- a/locale/pl.po
+++ b/locale/pl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2019-03-19 18:37-0700\n"
"Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n"
"Language-Team: pl\n"
@@ -185,6 +185,10 @@ msgid "'align' requires 1 argument"
msgstr "'align' wymaga 1 argumentu"
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr "'await' poza funkcją"
@@ -904,10 +908,13 @@ msgstr "Zła nóżka dla prawego kanału"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr "Złe nóżki"
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr "Zła polaryzacja"
@@ -997,6 +1004,10 @@ msgstr ""
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1172,7 +1183,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2201,7 +2212,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr "wtrącony asembler musi być funkcją"
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2524,7 +2535,7 @@ msgstr "nie dość argumentów przy formatowaniu"
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/pt_BR.po b/locale/pt_BR.po
index ed63a1595..f37d75050 100644
--- a/locale/pt_BR.po
+++ b/locale/pt_BR.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2018-10-02 21:14-0000\n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -186,6 +186,10 @@ msgid "'align' requires 1 argument"
msgstr ""
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr ""
@@ -910,10 +914,13 @@ msgstr "Pino inválido para canal direito"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr "Pinos inválidos"
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr ""
@@ -1004,6 +1011,10 @@ msgstr ""
msgid "Must provide MISO or MOSI pin"
msgstr ""
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr ""
@@ -1183,7 +1194,7 @@ msgid "PulseIn not yet supported"
msgstr ""
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
+msgid "PulseOut not supported on this chip"
msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
@@ -2214,7 +2225,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr ""
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2537,7 +2548,7 @@ msgstr ""
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po
index c94f4240d..465920d5d 100644
--- a/locale/zh_Latn_pinyin.po
+++ b/locale/zh_Latn_pinyin.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: circuitpython-cn\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-02-27 11:02-0600\n"
+"POT-Creation-Date: 2020-03-03 20:13-0600\n"
"PO-Revision-Date: 2019-04-13 10:10-0700\n"
"Last-Translator: hexthat\n"
"Language-Team: Chinese Hanyu Pinyin\n"
@@ -191,6 +191,10 @@ msgid "'align' requires 1 argument"
msgstr "'align' xūyào 1 gè cānshù"
#: py/compile.c
+msgid "'async for' or 'async with' outside async function"
+msgstr ""
+
+#: py/compile.c
msgid "'await' outside function"
msgstr "'await' wàibù gōngnéng"
@@ -912,10 +916,13 @@ msgstr "Yòuxián tōngdào yǐn jiǎo wúxiào"
#: ports/atmel-samd/common-hal/i2cslave/I2CSlave.c
#: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c
#: ports/cxd56/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c
-#: ports/stm32f4/common-hal/pulseio/PWMOut.c
msgid "Invalid pins"
msgstr "Wúxiào de yǐn jiǎo"
+#: ports/stm32f4/common-hal/pulseio/PWMOut.c
+msgid "Invalid pins for PWMOut"
+msgstr ""
+
#: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c
msgid "Invalid polarity"
msgstr "Wúxiào liǎng jí zhí"
@@ -1005,6 +1012,10 @@ msgstr "Bìxū shì %q zi lèi."
msgid "Must provide MISO or MOSI pin"
msgstr "Bìxū tígōng MISO huò MOSI yǐn jiǎo"
+#: py/parse.c
+msgid "Name too long"
+msgstr ""
+
#: shared-bindings/_pixelbuf/PixelBuf.c
msgid "Negative step not supported"
msgstr "Bù zhīchí fù bù"
@@ -1186,8 +1197,8 @@ msgid "PulseIn not yet supported"
msgstr "Shàng bù zhīchí PulseIn"
#: ports/stm32f4/common-hal/pulseio/PulseOut.c
-msgid "PulseOut not yet supported"
-msgstr "Shàng bù zhīchí PulseOut"
+msgid "PulseOut not supported on this chip"
+msgstr ""
#: ports/stm32f4/common-hal/os/__init__.c
msgid "RNG DeInit Error"
@@ -2229,7 +2240,7 @@ msgstr ""
msgid "inline assembler must be a function"
msgstr "nèi lián jíhé bìxū shì yīgè hánshù"
-#: extmod/ulab/code/linalg.c
+#: extmod/ulab/code/create.c
msgid "input argument must be an integer or a 2-tuple"
msgstr ""
@@ -2554,7 +2565,7 @@ msgstr "géshì zìfú chuàn cān shǔ bùzú"
msgid "number of arguments must be 2, or 3"
msgstr ""
-#: extmod/ulab/code/numerical.c
+#: extmod/ulab/code/create.c
msgid "number of points must be at least 2"
msgstr ""
@@ -3286,6 +3297,9 @@ msgstr "líng bù"
#~ msgid "Pixel beyond bounds of buffer"
#~ msgstr "Xiàngsù chāochū huǎnchōng qū biānjiè"
+#~ msgid "PulseOut not yet supported"
+#~ msgstr "Shàng bù zhīchí PulseOut"
+
#~ msgid "Range out of bounds"
#~ msgstr "Fànwéi chāochū biānjiè"
diff --git a/mpy-cross/.gitignore b/mpy-cross/.gitignore
index 0681b685f..80d7acd42 100644
--- a/mpy-cross/.gitignore
+++ b/mpy-cross/.gitignore
@@ -3,4 +3,5 @@
/mpy-cross.static
/mpy-cross.static.exe
/mpy-cross.static-raspbian
+/mpy-cross.fuzz
/pitools
diff --git a/mpy-cross/Makefile.fuzz b/mpy-cross/Makefile.fuzz
new file mode 100644
index 000000000..ca59788f4
--- /dev/null
+++ b/mpy-cross/Makefile.fuzz
@@ -0,0 +1,6 @@
+
+PROG=mpy-cross.fuzz
+BUILD=build-static
+STATIC_BUILD=1
+CC=afl-clang-fast
+include mpy-cross.mk
diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile
index 47a5b8653..89d88ce36 100755
--- a/ports/nrf/Makefile
+++ b/ports/nrf/Makefile
@@ -102,7 +102,6 @@ CFLAGS += -Wno-undef
CFLAGS += -Wno-cast-align
NRF_DEFINES += -DCONFIG_GPIO_AS_PINRESET
-NRF_DEFINES += -D_FS_DISK_READ_ALIGNED=1
CFLAGS += $(NRF_DEFINES)
CFLAGS += \
diff --git a/ports/nrf/supervisor/qspi_flash.c b/ports/nrf/supervisor/qspi_flash.c
index bb449d881..90260b091 100644
--- a/ports/nrf/supervisor/qspi_flash.c
+++ b/ports/nrf/supervisor/qspi_flash.c
@@ -83,11 +83,52 @@ bool spi_flash_sector_command(uint8_t command, uint32_t address) {
}
bool spi_flash_write_data(uint32_t address, uint8_t* data, uint32_t length) {
+ // TODO: In theory, this also needs to handle unaligned data and
+ // non-multiple-of-4 length. (in practice, I don't think the fat layer
+ // generates such writes)
return nrfx_qspi_write(data, length, address) == NRFX_SUCCESS;
}
bool spi_flash_read_data(uint32_t address, uint8_t* data, uint32_t length) {
- return nrfx_qspi_read(data, length, address) == NRFX_SUCCESS;
+ int misaligned = ((intptr_t)data) & 3;
+ // If the data is misaligned, we need to read 4 bytes
+ // into an aligned buffer, and then copy 1, 2, or 3 bytes from the aligned
+ // buffer to data.
+ if(misaligned) {
+ int sz = 4 - misaligned;
+ __attribute__((aligned(4))) uint8_t buf[4];
+
+ if(nrfx_qspi_read(buf, 4, address) != NRFX_SUCCESS) {
+ return false;
+ }
+ memcpy(data, buf, sz);
+ data += sz;
+ address += sz;
+ length -= sz;
+ }
+
+ // nrfx_qspi_read works in 4 byte increments, though it doesn't
+ // signal an error if sz is not a multiple of 4. Read (directly into data)
+ // all but the last 1, 2, or 3 bytes depending on the (remaining) length.
+ uint32_t sz = length & ~(uint32_t)3;
+ if(nrfx_qspi_read(data, sz, address) != NRFX_SUCCESS) {
+ return false;
+ }
+ data += sz;
+ address += sz;
+ length -= sz;
+
+ // Now, if we have any bytes left over, we must do a final read of 4
+ // bytes and copy 1, 2, or 3 bytes to data.
+ if(length) {
+ __attribute__((aligned(4))) uint8_t buf[4];
+ if(nrfx_qspi_read(buf, 4, address) != NRFX_SUCCESS) {
+ return false;
+ }
+ memcpy(data, buf, length);
+ }
+
+ return true;
}
void spi_flash_init(void) {
diff --git a/ports/stm32f4/common-hal/pulseio/PWMOut.c b/ports/stm32f4/common-hal/pulseio/PWMOut.c
index 50bacbb51..4bb3afae4 100644
--- a/ports/stm32f4/common-hal/pulseio/PWMOut.c
+++ b/ports/stm32f4/common-hal/pulseio/PWMOut.c
@@ -163,7 +163,7 @@ pwmout_result_t common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t* self,
} else if (var_freq_mismatch) {
mp_raise_ValueError(translate("Cannot vary frequency on a timer that is already in use"));
} else {
- mp_raise_ValueError(translate("Invalid pins"));
+ mp_raise_ValueError(translate("Invalid pins for PWMOut"));
}
}
diff --git a/ports/stm32f4/common-hal/pulseio/PulseOut.c b/ports/stm32f4/common-hal/pulseio/PulseOut.c
index d393afc5c..d82525ea1 100644
--- a/ports/stm32f4/common-hal/pulseio/PulseOut.c
+++ b/ports/stm32f4/common-hal/pulseio/PulseOut.c
@@ -35,21 +35,180 @@
#include "shared-bindings/pulseio/PWMOut.h"
#include "supervisor/shared/translate.h"
+#include "stm32f4xx_hal.h"
+#include "common-hal/microcontroller/Pin.h"
+#include "tick.h"
+
+// A single timer is shared amongst all PulseOut objects under the assumption that
+// the code is single threaded.
+STATIC uint8_t refcount = 0;
+
+STATIC uint16_t *pulse_array = NULL;
+STATIC volatile uint16_t pulse_array_index = 0;
+STATIC uint16_t pulse_array_length;
+
+//Timer is shared, must be accessible by interrupt
+STATIC TIM_HandleTypeDef t7_handle;
+pulseio_pulseout_obj_t *curr_pulseout = NULL;
+
+STATIC void turn_on(pulseio_pulseout_obj_t *pulseout) {
+ // Turn on PWM
+ HAL_TIM_PWM_Start(&(pulseout->pwmout->handle), pulseout->pwmout->channel);
+}
+
+STATIC void turn_off(pulseio_pulseout_obj_t *pulseout) {
+ // Turn off PWM
+ HAL_TIM_PWM_Stop(&(pulseout->pwmout->handle), pulseout->pwmout->channel);
+ // Make sure pin is low.
+ HAL_GPIO_WritePin(pin_port(pulseout->pwmout->tim->pin->port),
+ pin_mask(pulseout->pwmout->tim->pin->number), 0);
+}
+
+STATIC void start_timer(void) {
+ // Set the new period
+ t7_handle.Init.Period = pulse_array[pulse_array_index] - 1;
+ HAL_TIM_Base_Init(&t7_handle);
+
+ // TIM7 has limited HAL support, set registers manually
+ t7_handle.Instance->SR = 0; // Prevent the SR from triggering an interrupt
+ t7_handle.Instance->CR1 |= TIM_CR1_CEN; // Resume timer
+ t7_handle.Instance->CR1 |= TIM_CR1_URS; // Disable non-overflow interrupts
+ __HAL_TIM_ENABLE_IT(&t7_handle, TIM_IT_UPDATE);
+
+}
+
+STATIC void pulseout_event_handler(void) {
+ if (curr_pulseout->pwmout == NULL) {
+ return; //invalid interrupt
+ }
+
+ HAL_GPIO_WritePin(pin_port(2),pin_mask(6), 1);
+ HAL_GPIO_WritePin(pin_port(2),pin_mask(6), 0);
+
+ pulse_array_index++;
+
+ // No more pulses. Turn off output and don't restart.
+ if (pulse_array_index >= pulse_array_length) {
+ turn_off(curr_pulseout);
+ return;
+ }
+
+ // Alternate on and off, starting with on.
+ if (pulse_array_index % 2 == 0) {
+ turn_on(curr_pulseout);
+ } else {
+ turn_off(curr_pulseout);
+ }
+
+ // Count up to the next given value.
+ start_timer();
+}
void pulseout_reset() {
+ #if HAS_BASIC_TIM
+ __HAL_RCC_TIM7_CLK_DISABLE();
+ refcount = 0;
+ #endif
}
void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self,
const pulseio_pwmout_obj_t* carrier) {
- mp_raise_NotImplementedError(translate("PulseOut not yet supported"));
+#if !(HAS_BASIC_TIM)
+ mp_raise_NotImplementedError(translate("PulseOut not supported on this chip"));
+#else
+ // Add to active PulseOuts
+ refcount++;
+
+ // Calculate a 1 ms period
+ uint32_t source, clk_div;
+ source = HAL_RCC_GetPCLK1Freq(); // TIM7 is on APB1
+ clk_div = RCC->CFGR & RCC_CFGR_PPRE1;
+ // APB quirk, see See DM00031020 Rev 4, page 115.
+ if (clk_div != 0) {
+ // APB prescaler for this timer is > 1
+ source *= 2;
+ }
+
+ uint32_t prescaler = source/1000000; //1us intervals
+
+ __HAL_RCC_TIM7_CLK_ENABLE();
+ HAL_NVIC_SetPriority(TIM7_IRQn, 4, 0);
+ HAL_NVIC_EnableIRQ(TIM7_IRQn);
+
+ // Timers 6 and 7 have no pins, so using them doesn't affect PWM availability
+ t7_handle.Instance = TIM7;
+ t7_handle.Init.Period = 100; //immediately replaced.
+ t7_handle.Init.Prescaler = prescaler - 1;
+ t7_handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
+ t7_handle.Init.CounterMode = TIM_COUNTERMODE_UP;
+ t7_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
+
+ HAL_TIM_Base_Init(&t7_handle);
+ t7_handle.Instance->SR = 0;
+
+ // The HAL can't work with const, recast required.
+ self->pwmout = (pulseio_pwmout_obj_t*)carrier;
+
+ turn_off(self);
+#endif
}
bool common_hal_pulseio_pulseout_deinited(pulseio_pulseout_obj_t* self) {
- return true;
+ return self->pwmout == NULL;
}
void common_hal_pulseio_pulseout_deinit(pulseio_pulseout_obj_t* self) {
+ if (common_hal_pulseio_pulseout_deinited(self)) {
+ return;
+ }
+ turn_on(self);
+ self->pwmout = NULL;
+
+ refcount--;
+ if (refcount == 0) {
+ #if HAS_BASIC_TIM
+ __HAL_RCC_TIM7_CLK_DISABLE();
+ #endif
+ }
}
void common_hal_pulseio_pulseout_send(pulseio_pulseout_obj_t* self, uint16_t* pulses, uint16_t length) {
+ pulse_array = pulses;
+ pulse_array_index = 0;
+ pulse_array_length = length;
+ curr_pulseout = self;
+
+ turn_on(self);
+
+ // Count up to the next given value.
+ start_timer();
+
+ // Use when debugging, or issues are irrecoverable
+ // uint32_t starttime = supervisor_ticks_ms64();
+ // uint32_t timeout = 10000;
+ while(pulse_array_index < length) {
+ // Do other things while we wait. The interrupts will handle sending the
+ // signal.
+ RUN_BACKGROUND_TASKS;
+
+ // Use when debugging, or issues are irrecoverable
+ // if ((supervisor_ticks_ms64() - starttime ) > timeout ) {
+ // mp_raise_RuntimeError(translate("Error: Send Timeout"));
+ // }
+ }
+ //turn off timer counter.
+ t7_handle.Instance->CR1 &= ~TIM_CR1_CEN;
+}
+
+void TIM7_IRQHandler(void)
+{
+ // Detect TIM Update event
+ if (__HAL_TIM_GET_FLAG(&t7_handle, TIM_FLAG_UPDATE) != RESET)
+ {
+ if (__HAL_TIM_GET_IT_SOURCE(&t7_handle, TIM_IT_UPDATE) != RESET)
+ {
+ __HAL_TIM_CLEAR_IT(&t7_handle, TIM_IT_UPDATE);
+ pulseout_event_handler();
+ }
+ }
}
diff --git a/ports/stm32f4/common-hal/pulseio/PulseOut.h b/ports/stm32f4/common-hal/pulseio/PulseOut.h
index 45823d28a..aa97396d0 100644
--- a/ports/stm32f4/common-hal/pulseio/PulseOut.h
+++ b/ports/stm32f4/common-hal/pulseio/PulseOut.h
@@ -34,7 +34,7 @@
typedef struct {
mp_obj_base_t base;
- const pulseio_pwmout_obj_t *pwmout;
+ pulseio_pwmout_obj_t *pwmout;
} pulseio_pulseout_obj_t;
void pulseout_reset(void);
diff --git a/ports/stm32f4/peripherals/stm32f4/periph.h b/ports/stm32f4/peripherals/stm32f4/periph.h
index 969a8e79b..d311afe4a 100644
--- a/ports/stm32f4/peripherals/stm32f4/periph.h
+++ b/ports/stm32f4/peripherals/stm32f4/periph.h
@@ -138,23 +138,26 @@ typedef struct {
.pin = tim_pin, \
}
-//Starter Lines
+//Access Lines
#ifdef STM32F401xE
#define HAS_DAC 0
#define HAS_TRNG 0
+#define HAS_BASIC_TIM 0
#include "stm32f401xe/periph.h"
#endif
#ifdef STM32F411xE
#define HAS_DAC 0
#define HAS_TRNG 0
+#define HAS_BASIC_TIM 0
#include "stm32f411xe/periph.h"
#endif
#ifdef STM32F412Zx
#define HAS_DAC 0
#define HAS_TRNG 1
+#define HAS_BASIC_TIM 1
#include "stm32f412zx/periph.h"
#endif
@@ -163,12 +166,14 @@ typedef struct {
#ifdef STM32F405xx
#define HAS_DAC 1
#define HAS_TRNG 1
+#define HAS_BASIC_TIM 1
#include "stm32f405xx/periph.h"
#endif
#ifdef STM32F407xx
#define HAS_DAC 1
#define HAS_TRNG 1
+#define HAS_BASIC_TIM 1
#include "stm32f407xx/periph.h"
#endif
diff --git a/ports/stm32f4/supervisor/port.c b/ports/stm32f4/supervisor/port.c
index e9e4720d7..ecb4d3d15 100644
--- a/ports/stm32f4/supervisor/port.c
+++ b/ports/stm32f4/supervisor/port.c
@@ -35,6 +35,7 @@
#include "common-hal/busio/SPI.h"
#include "common-hal/busio/UART.h"
#include "common-hal/pulseio/PWMOut.h"
+#include "common-hal/pulseio/PulseOut.h"
#include "stm32f4/clocks.h"
#include "stm32f4/gpio.h"
@@ -60,6 +61,7 @@ void reset_port(void) {
spi_reset();
uart_reset();
pwmout_reset();
+ pulseout_reset();
}
void reset_to_bootloader(void) {
diff --git a/ports/unix/Makefile b/ports/unix/Makefile
index 7ffa0fd08..63c4980c3 100644
--- a/ports/unix/Makefile
+++ b/ports/unix/Makefile
@@ -277,6 +277,18 @@ coverage_test: coverage
coverage_clean:
$(MAKE) V=2 BUILD=build-coverage PROG=micropython_coverage clean
+# build an interpreter for fuzzing
+fuzz:
+ $(MAKE) \
+ CC=afl-clang-fast DEBUG=1 \
+ CFLAGS_EXTRA='$(CFLAGS_EXTRA) -ffunction-sections' \
+ LDFLAGS_EXTRA='$(LDFLAGS_EXTRA)' \
+ BUILD=build-fuzz PROG=micropython_fuzz
+
+fuzz_clean:
+ $(MAKE) V=2 BUILD=build-fuzz PROG=micropython_fuzz clean
+
+
# Value of configure's --host= option (required for cross-compilation).
# Deduce it from CROSS_COMPILE by default, but can be overridden.
ifneq ($(CROSS_COMPILE),)
diff --git a/py/compile.c b/py/compile.c
index 77715d3fe..d5fae0299 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -1711,6 +1711,16 @@ STATIC void compile_yield_from(compiler_t *comp) {
}
#if MICROPY_PY_ASYNC_AWAIT
+STATIC bool compile_require_async_context(compiler_t *comp, mp_parse_node_struct_t *pns) {
+ int scope_flags = comp->scope_cur->scope_flags;
+ if(scope_flags & MP_SCOPE_FLAG_GENERATOR) {
+ return true;
+ }
+ compile_syntax_error(comp, (mp_parse_node_t)pns,
+ translate("'async for' or 'async with' outside async function"));
+ return false;
+}
+
STATIC void compile_await_object_method(compiler_t *comp, qstr method) {
EMIT_ARG(load_method, method, false);
EMIT_ARG(call_method, 0, 0, 0);
@@ -1720,6 +1730,10 @@ STATIC void compile_await_object_method(compiler_t *comp, qstr method) {
STATIC void compile_async_for_stmt(compiler_t *comp, mp_parse_node_struct_t *pns) {
// comp->break_label |= MP_EMIT_BREAK_FROM_FOR;
+ if(!compile_require_async_context(comp, pns)) {
+ return;
+ }
+
qstr context = MP_PARSE_NODE_LEAF_ARG(pns->nodes[1]);
uint while_else_label = comp_next_label(comp);
uint try_exception_label = comp_next_label(comp);
@@ -1857,6 +1871,9 @@ STATIC void compile_async_with_stmt_helper(compiler_t *comp, int n, mp_parse_nod
}
STATIC void compile_async_with_stmt(compiler_t *comp, mp_parse_node_struct_t *pns) {
+ if(!compile_require_async_context(comp, pns)) {
+ return;
+ }
// get the nodes for the pre-bit of the with (the a as b, c as d, ... bit)
mp_parse_node_t *nodes;
int n = mp_parse_node_extract_list(&pns->nodes[0], PN_with_stmt_list, &nodes);
diff --git a/py/parse.c b/py/parse.c
index 911b891e0..864528470 100644
--- a/py/parse.c
+++ b/py/parse.c
@@ -477,6 +477,9 @@ STATIC void push_result_token(parser_t *parser, uint8_t rule_id) {
mp_parse_node_t pn;
mp_lexer_t *lex = parser->lexer;
if (lex->tok_kind == MP_TOKEN_NAME) {
+ if(lex->vstr.len >= (1 << (8 * MICROPY_QSTR_BYTES_IN_LEN))) {
+ mp_raise_msg(&mp_type_SyntaxError, translate("Name too long"));
+ }
qstr id = qstr_from_strn(lex->vstr.buf, lex->vstr.len);
#if MICROPY_COMP_CONST
// if name is a standalone identifier, look it up in the table of dynamic constants
diff --git a/tools/build_board_info.py b/tools/build_board_info.py
index 1f074dddf..3c8f44f74 100644
--- a/tools/build_board_info.py
+++ b/tools/build_board_info.py
@@ -21,6 +21,10 @@ HEX = ('hex',)
HEX_UF2 = ('hex', 'uf2')
SPK = ('spk',)
+# Example:
+# https://downloads.circuitpython.org/bin/trinket_m0/en_US/adafruit-circuitpython-trinket_m0-en_US-5.0.0-rc.0.uf2
+DOWNLOAD_BASE_URL = "https://downloads.circuitpython.org/bin"
+
# Default extensions
extension_by_port = {
"nrf": UF2,
@@ -33,8 +37,10 @@ extension_by_port = {
# Per board overrides
extension_by_board = {
# samd
- "arduino_mkr1300": BIN,
- "arduino_zero": BIN,
+ "arduino_mkr1300": BIN_UF2,
+ "arduino_mkrzero": BIN_UF2,
+ "arduino_nano_33_iot": BIN_UF2,
+ "arduino_zero": BIN_UF2,
"feather_m0_adalogger": BIN_UF2,
"feather_m0_basic": BIN_UF2,
"feather_m0_rfm69": BIN_UF2,
@@ -275,7 +281,14 @@ def generate_download_info():
files = []
new_version["files"][language] = files
for extension in board_info["extensions"]:
- files.append("https://github.com/adafruit/circuitpython/releases/download/{tag}/adafruit-circuitpython-{alias}-{language}-{tag}.{extension}".format(tag=new_tag, alias=alias, language=language, extension=extension))
+ files.append(
+ "{base_url}/{alias}/{language}/adafruit-circuitpython-{alias}-{language}-{tag}.{extension}"
+ .format(
+ base_url=DOWNLOAD_BASE_URL,
+ tag=new_tag,
+ alias=alias,
+ language=language,
+ extension=extension))
current_info[alias]["downloads"] = alias_info["download_count"]
current_info[alias]["versions"].append(new_version)
diff --git a/tools/upload_release_files.py b/tools/upload_release_files.py
deleted file mode 100755
index 4f193a8be..000000000
--- a/tools/upload_release_files.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#! /usr/bin/env python3
-
-import os
-import os.path
-import sys
-import uritemplate
-
-sys.path.append("adabot")
-import adabot.github_requests as github
-
-exit_status = 0
-
-for dirpath, dirnames, filenames in os.walk("../bin"):
- if not filenames:
- continue
- for filename in filenames:
- full_filename = os.path.join(dirpath, filename)
- label = filename.replace("adafruit-circuitpython-", "")
- url_vars = {}
- url_vars["name"] = filename
- url_vars["label"] = label
- url = uritemplate.expand(os.environ["UPLOAD_URL"], url_vars)
- headers = {"content-type": "application/octet-stream"}
- print(url)
- with open(full_filename, "rb") as f:
- response = github.post(url, data=f, headers=headers)
- if not response.ok:
- if response.status_code == 422 and response.json().get("errors", [{"code":""}])[0]["code"] == "already_exists":
- print("File already uploaded. Skipping.")
- continue
- print("Upload of {} failed with {}.".format(filename, response.status_code))
- print(response.text)
- sys.exit(response.status_code)
-
-sys.exit(exit_status)