Merge remote-tracking branch 'upstream/master' into stm32-pulsein
This commit is contained in:
commit
38064750f9
2
.gitmodules
vendored
2
.gitmodules
vendored
@ -116,7 +116,7 @@
|
||||
url = https://github.com/adafruit/Adafruit_CircuitPython_Register.git
|
||||
[submodule "extmod/ulab"]
|
||||
path = extmod/ulab
|
||||
url = https://github.com/adafruit/circuitpython-ulab
|
||||
url = https://github.com/v923z/micropython-ulab/
|
||||
[submodule "frozen/Adafruit_CircuitPython_ESP32SPI"]
|
||||
path = frozen/Adafruit_CircuitPython_ESP32SPI
|
||||
url = https://github.com/adafruit/Adafruit_CircuitPython_ESP32SPI
|
||||
|
@ -476,6 +476,8 @@ properties.
|
||||
+-----------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| ``distance`` | float | centimeters |
|
||||
+-----------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| ``proximity`` | int | non-unit-specifc proximity values (monotonic but not actual distance) |
|
||||
+-----------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| ``light`` | float | non-unit-specific light levels (should be monotonic but is not lux) |
|
||||
+-----------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| ``lux`` | float | SI lux |
|
||||
@ -504,6 +506,8 @@ properties.
|
||||
+-----------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| ``weight`` | float | grams (g) |
|
||||
+-----------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
| ``sound_level`` | float | non-unit-specific sound level (monotonic but not actual decibels) |
|
||||
+-----------------------+-----------------------+-------------------------------------------------------------------------+
|
||||
|
||||
Adding native modules
|
||||
--------------------------------------------------------------------------------
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 42d831e1e65b1c75ed90de11b87a1c4a0ebe6152
|
||||
Subproject commit 66b89de8c714790de8647dc55f59430002044171
|
30
locale/ID.po
30
locale/ID.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-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"
|
||||
@ -2080,6 +2080,26 @@ msgstr "argumen keyword ekstra telah diberikan"
|
||||
msgid "extra positional arguments given"
|
||||
msgstr "argumen posisi ekstra telah diberikan"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2393,6 +2413,10 @@ msgstr ""
|
||||
msgid "long int not supported in this build"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr ""
|
||||
@ -2721,6 +2745,10 @@ msgstr ""
|
||||
msgid "queue overflow"
|
||||
msgstr "antrian meluap (overflow)"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-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"
|
||||
@ -2056,6 +2056,26 @@ msgstr ""
|
||||
msgid "extra positional arguments given"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2369,6 +2389,10 @@ msgstr ""
|
||||
msgid "long int not supported in this build"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr ""
|
||||
@ -2696,6 +2720,10 @@ msgstr ""
|
||||
msgid "queue overflow"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
|
||||
"Last-Translator: Pascal Deneaux\n"
|
||||
"Language-Team: Sebastian Plamauer, Pascal Deneaux\n"
|
||||
@ -2085,6 +2085,26 @@ msgstr "Es wurden zusätzliche Keyword-Argumente angegeben"
|
||||
msgid "extra positional arguments given"
|
||||
msgstr "Es wurden zusätzliche Argumente ohne Keyword angegeben"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2405,6 +2425,10 @@ msgstr ""
|
||||
msgid "long int not supported in this build"
|
||||
msgstr "long int wird in diesem Build nicht unterstützt"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr "map buffer zu klein"
|
||||
@ -2734,6 +2758,10 @@ msgstr ""
|
||||
msgid "queue overflow"
|
||||
msgstr "Warteschlangenüberlauf"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@ -2056,6 +2056,26 @@ msgstr ""
|
||||
msgid "extra positional arguments given"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2369,6 +2389,10 @@ msgstr ""
|
||||
msgid "long int not supported in this build"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr ""
|
||||
@ -2696,6 +2720,10 @@ msgstr ""
|
||||
msgid "queue overflow"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2018-07-27 11:55-0700\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: @sommersoft, @MrCertainly\n"
|
||||
@ -2060,6 +2060,26 @@ msgstr ""
|
||||
msgid "extra positional arguments given"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2373,6 +2393,10 @@ msgstr ""
|
||||
msgid "long int not supported in this build"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr ""
|
||||
@ -2700,6 +2724,10 @@ msgstr ""
|
||||
msgid "queue overflow"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
30
locale/es.po
30
locale/es.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2018-08-24 22:56-0500\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@ -2087,6 +2087,26 @@ msgstr "argumento(s) por palabra clave adicionales fueron dados"
|
||||
msgid "extra positional arguments given"
|
||||
msgstr "argumento posicional adicional dado"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2403,6 +2423,10 @@ msgstr "variable local referenciada antes de la asignación"
|
||||
msgid "long int not supported in this build"
|
||||
msgstr "long int no soportado en esta compilación"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr "map buffer muy pequeño"
|
||||
@ -2734,6 +2758,10 @@ msgstr "pow() con 3 argumentos requiere enteros"
|
||||
msgid "queue overflow"
|
||||
msgstr "desbordamiento de cola(queue)"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2018-12-20 22:15-0800\n"
|
||||
"Last-Translator: Timothy <me@timothygarcia.ca>\n"
|
||||
"Language-Team: fil\n"
|
||||
@ -2101,6 +2101,26 @@ msgstr "dagdag na keyword argument na ibinigay"
|
||||
msgid "extra positional arguments given"
|
||||
msgstr "dagdag na positional argument na ibinigay"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2419,6 +2439,10 @@ msgstr "local variable na reference bago na i-assign"
|
||||
msgid "long int not supported in this build"
|
||||
msgstr "long int hindi sinusuportahan sa build na ito"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr "masyadong maliit ang buffer map"
|
||||
@ -2748,6 +2772,10 @@ msgstr "pow() na may 3 argumento kailangan ng integers"
|
||||
msgid "queue overflow"
|
||||
msgstr "puno na ang pila (overflow)"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
30
locale/fr.po
30
locale/fr.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 0.1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2019-04-14 20:05+0100\n"
|
||||
"Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n"
|
||||
"Language-Team: fr\n"
|
||||
@ -2126,6 +2126,26 @@ msgstr "argument(s) nommé(s) supplémentaire(s) donné(s)"
|
||||
msgid "extra positional arguments given"
|
||||
msgstr "argument(s) positionnel(s) supplémentaire(s) donné(s)"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2443,6 +2463,10 @@ msgstr "variable locale référencée avant d'être assignée"
|
||||
msgid "long int not supported in this build"
|
||||
msgstr "entiers longs non supportés dans cette build"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr "tampon trop petit"
|
||||
@ -2780,6 +2804,10 @@ msgstr "pow() avec 3 arguments nécessite des entiers"
|
||||
msgid "queue overflow"
|
||||
msgstr "dépassement de file"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2018-10-02 16:27+0200\n"
|
||||
"Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n"
|
||||
"Language-Team: \n"
|
||||
@ -2102,6 +2102,26 @@ msgstr "argomento nominato aggiuntivo fornito"
|
||||
msgid "extra positional arguments given"
|
||||
msgstr "argomenti posizonali extra dati"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2421,6 +2441,10 @@ msgstr "variabile locale richiamata prima di un assegnamento"
|
||||
msgid "long int not supported in this build"
|
||||
msgstr "long int non supportata in questa build"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr "map buffer troppo piccolo"
|
||||
@ -2755,6 +2779,10 @@ msgstr "pow() con 3 argomenti richiede interi"
|
||||
msgid "queue overflow"
|
||||
msgstr "overflow della coda"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
30
locale/ko.po
30
locale/ko.po
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2019-05-06 14:22-0700\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -2061,6 +2061,26 @@ msgstr ""
|
||||
msgid "extra positional arguments given"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2374,6 +2394,10 @@ msgstr ""
|
||||
msgid "long int not supported in this build"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr ""
|
||||
@ -2701,6 +2725,10 @@ msgstr ""
|
||||
msgid "queue overflow"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
30
locale/pl.po
30
locale/pl.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2019-03-19 18:37-0700\n"
|
||||
"Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n"
|
||||
"Language-Team: pl\n"
|
||||
@ -2065,6 +2065,26 @@ msgstr "nadmiarowe argumenty nazwane"
|
||||
msgid "extra positional arguments given"
|
||||
msgstr "nadmiarowe argumenty pozycyjne"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2378,6 +2398,10 @@ msgstr "zmienna lokalna użyta przed przypisaniem"
|
||||
msgid "long int not supported in this build"
|
||||
msgstr "long int jest nieobsługiwany"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr "bufor mapy zbyt mały"
|
||||
@ -2706,6 +2730,10 @@ msgstr "trzyargumentowe pow() wymaga liczb całkowitych"
|
||||
msgid "queue overflow"
|
||||
msgstr "przepełnienie kolejki"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2018-10-02 21:14-0000\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
@ -2078,6 +2078,26 @@ msgstr "argumentos extras de palavras-chave passados"
|
||||
msgid "extra positional arguments given"
|
||||
msgstr "argumentos extra posicionais passados"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2391,6 +2411,10 @@ msgstr ""
|
||||
msgid "long int not supported in this build"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr ""
|
||||
@ -2718,6 +2742,10 @@ msgstr ""
|
||||
msgid "queue overflow"
|
||||
msgstr "estouro de fila"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: circuitpython-cn\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-03-03 20:13-0600\n"
|
||||
"POT-Creation-Date: 2020-03-09 08:19-0500\n"
|
||||
"PO-Revision-Date: 2019-04-13 10:10-0700\n"
|
||||
"Last-Translator: hexthat\n"
|
||||
"Language-Team: Chinese Hanyu Pinyin\n"
|
||||
@ -2093,6 +2093,26 @@ msgstr "éwài de guānjiàn cí cānshù"
|
||||
msgid "extra positional arguments given"
|
||||
msgstr "gěi chūle éwài de wèizhì cānshù"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a '#'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string expression part cannot include a backslash"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: empty expression not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: expecting '}'"
|
||||
msgstr ""
|
||||
|
||||
#: py/parse.c
|
||||
msgid "f-string: single '}' is not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
@ -2407,6 +2427,10 @@ msgstr "fùzhí qián yǐnyòng de júbù biànliàng"
|
||||
msgid "long int not supported in this build"
|
||||
msgstr "cǐ bǎnběn bù zhīchí zhǎng zhěngshù"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "malformed f-string"
|
||||
msgstr ""
|
||||
|
||||
#: shared-bindings/_stage/Layer.c
|
||||
msgid "map buffer too small"
|
||||
msgstr "dìtú huǎnchōng qū tài xiǎo"
|
||||
@ -2735,6 +2759,10 @@ msgstr "pow() yǒu 3 cānshù xūyào zhěngshù"
|
||||
msgid "queue overflow"
|
||||
msgstr "duìliè yìchū"
|
||||
|
||||
#: py/parse.c
|
||||
msgid "raw f-strings are not implemented"
|
||||
msgstr ""
|
||||
|
||||
#: extmod/ulab/code/fft.c
|
||||
msgid "real and imaginary parts must be of equal length"
|
||||
msgstr ""
|
||||
|
@ -49,7 +49,7 @@ uint8_t display_init_sequence[] = {
|
||||
|
||||
void board_init(void) {
|
||||
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||
common_hal_busio_spi_construct(spi, &pin_PA01, &pin_PA00, mp_const_none);
|
||||
common_hal_busio_spi_construct(spi, &pin_PA01, &pin_PA00, NULL);
|
||||
common_hal_busio_spi_never_reset(spi);
|
||||
|
||||
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||
|
@ -50,7 +50,7 @@ uint8_t display_init_sequence[] = {
|
||||
|
||||
void board_init(void) {
|
||||
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||
common_hal_busio_spi_construct(spi, &pin_PA13, &pin_PA12, mp_const_none);
|
||||
common_hal_busio_spi_construct(spi, &pin_PA13, &pin_PA12, NULL);
|
||||
common_hal_busio_spi_never_reset(spi);
|
||||
|
||||
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||
|
@ -55,7 +55,7 @@ uint8_t stop_sequence[] = {
|
||||
|
||||
void board_init(void) {
|
||||
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, mp_const_none);
|
||||
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, NULL);
|
||||
common_hal_busio_spi_never_reset(spi);
|
||||
|
||||
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||
|
@ -97,7 +97,7 @@ uint8_t display_init_sequence[] = {
|
||||
|
||||
void board_init(void) {
|
||||
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||
common_hal_busio_spi_construct(spi, &pin_PA13, &pin_PA15, mp_const_none);
|
||||
common_hal_busio_spi_construct(spi, &pin_PA13, &pin_PA15, NULL);
|
||||
common_hal_busio_spi_never_reset(spi);
|
||||
|
||||
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||
|
@ -72,7 +72,7 @@ uint8_t display_init_sequence[] = {
|
||||
|
||||
void board_init(void) {
|
||||
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, mp_const_none);
|
||||
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, NULL);
|
||||
common_hal_busio_spi_never_reset(spi);
|
||||
|
||||
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||
|
@ -50,7 +50,7 @@ uint8_t display_init_sequence[] = {
|
||||
|
||||
void board_init(void) {
|
||||
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, mp_const_none);
|
||||
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, NULL);
|
||||
common_hal_busio_spi_never_reset(spi);
|
||||
|
||||
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||
|
@ -72,7 +72,7 @@ uint8_t display_init_sequence[] = {
|
||||
|
||||
void board_init(void) {
|
||||
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, mp_const_none);
|
||||
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, NULL);
|
||||
common_hal_busio_spi_never_reset(spi);
|
||||
|
||||
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||
|
@ -50,7 +50,7 @@ uint8_t display_init_sequence[] = {
|
||||
|
||||
void board_init(void) {
|
||||
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB12, mp_const_none);
|
||||
common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB12, NULL);
|
||||
common_hal_busio_spi_never_reset(spi);
|
||||
|
||||
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||
|
@ -6,6 +6,7 @@ USB_PID = 0x8062
|
||||
USB_PRODUCT = "Sol"
|
||||
USB_MANUFACTURER = "Winterbloom"
|
||||
USB_INTERFACE_NAME = "Sol"
|
||||
USB_DEVICES = "CDC,MSC,AUDIO"
|
||||
|
||||
CHIP_VARIANT = SAMD51J20A
|
||||
CHIP_FAMILY = samd51
|
||||
@ -25,6 +26,7 @@ CIRCUITPY_I2CSLAVE = 0
|
||||
CIRCUITPY_NETWORK = 0
|
||||
CIRCUITPY_TOUCHIO = 0
|
||||
CIRCUITPY_PS2IO = 0
|
||||
CIRCUITPY_USB_HID = 0
|
||||
|
||||
# Enable micropython.native
|
||||
CIRCUITPY_ENABLE_MPY_NATIVE = 1
|
||||
|
@ -73,7 +73,7 @@ void common_hal_analogio_analogin_construct(analogio_analogin_obj_t* self,
|
||||
}
|
||||
|
||||
bool common_hal_analogio_analogin_deinited(analogio_analogin_obj_t *self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
|
||||
@ -81,7 +81,7 @@ void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
|
||||
return;
|
||||
}
|
||||
reset_pin_number(self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
void analogin_reset() {
|
||||
|
@ -89,6 +89,7 @@ void i2sout_reset(void) {
|
||||
#endif
|
||||
}
|
||||
|
||||
// Caller validates that pins are free.
|
||||
void common_hal_audiobusio_i2sout_construct(audiobusio_i2sout_obj_t* self,
|
||||
const mcu_pin_obj_t* bit_clock, const mcu_pin_obj_t* word_select,
|
||||
const mcu_pin_obj_t* data, bool left_justified) {
|
||||
@ -182,9 +183,6 @@ void common_hal_audiobusio_i2sout_construct(audiobusio_i2sout_obj_t* self,
|
||||
#ifdef SAMD21
|
||||
#define GPIO_I2S_FUNCTION GPIO_PIN_FUNCTION_G
|
||||
#endif
|
||||
assert_pin_free(bit_clock);
|
||||
assert_pin_free(word_select);
|
||||
assert_pin_free(data);
|
||||
|
||||
self->bit_clock = bit_clock;
|
||||
self->word_select = word_select;
|
||||
@ -204,7 +202,7 @@ void common_hal_audiobusio_i2sout_construct(audiobusio_i2sout_obj_t* self,
|
||||
}
|
||||
|
||||
bool common_hal_audiobusio_i2sout_deinited(audiobusio_i2sout_obj_t* self) {
|
||||
return self->bit_clock == mp_const_none;
|
||||
return self->bit_clock == NULL;
|
||||
}
|
||||
|
||||
void common_hal_audiobusio_i2sout_deinit(audiobusio_i2sout_obj_t* self) {
|
||||
@ -213,11 +211,11 @@ void common_hal_audiobusio_i2sout_deinit(audiobusio_i2sout_obj_t* self) {
|
||||
}
|
||||
|
||||
reset_pin_number(self->bit_clock->number);
|
||||
self->bit_clock = mp_const_none;
|
||||
self->bit_clock = NULL;
|
||||
reset_pin_number(self->word_select->number);
|
||||
self->word_select = mp_const_none;
|
||||
self->word_select = NULL;
|
||||
reset_pin_number(self->data->number);
|
||||
self->data = mp_const_none;
|
||||
self->data = NULL;
|
||||
}
|
||||
|
||||
void common_hal_audiobusio_i2sout_play(audiobusio_i2sout_obj_t* self,
|
||||
|
@ -74,6 +74,7 @@ void pdmin_reset(void) {
|
||||
I2S->CTRLA.reg = I2S_CTRLA_SWRST;
|
||||
}
|
||||
|
||||
// Caller validates that pins are free.
|
||||
void common_hal_audiobusio_pdmin_construct(audiobusio_pdmin_obj_t* self,
|
||||
const mcu_pin_obj_t* clock_pin,
|
||||
const mcu_pin_obj_t* data_pin,
|
||||
@ -157,8 +158,6 @@ void common_hal_audiobusio_pdmin_construct(audiobusio_pdmin_obj_t* self,
|
||||
#ifdef SAMD21
|
||||
#define GPIO_I2S_FUNCTION GPIO_PIN_FUNCTION_G
|
||||
#endif
|
||||
assert_pin_free(clock_pin);
|
||||
assert_pin_free(data_pin);
|
||||
|
||||
uint32_t clock_divisor = (uint32_t) roundf( 48000000.0f / sample_rate / oversample);
|
||||
float mic_clock_freq = 48000000.0f / clock_divisor;
|
||||
@ -219,7 +218,7 @@ void common_hal_audiobusio_pdmin_construct(audiobusio_pdmin_obj_t* self,
|
||||
}
|
||||
|
||||
bool common_hal_audiobusio_pdmin_deinited(audiobusio_pdmin_obj_t* self) {
|
||||
return self->clock_pin == mp_const_none;
|
||||
return self->clock_pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_audiobusio_pdmin_deinit(audiobusio_pdmin_obj_t* self) {
|
||||
@ -237,8 +236,8 @@ void common_hal_audiobusio_pdmin_deinit(audiobusio_pdmin_obj_t* self) {
|
||||
|
||||
reset_pin_number(self->clock_pin->number);
|
||||
reset_pin_number(self->data_pin->number);
|
||||
self->clock_pin = mp_const_none;
|
||||
self->data_pin = mp_const_none;
|
||||
self->clock_pin = NULL;
|
||||
self->data_pin = NULL;
|
||||
}
|
||||
|
||||
uint8_t common_hal_audiobusio_pdmin_get_bit_depth(audiobusio_pdmin_obj_t* self) {
|
||||
|
@ -115,6 +115,7 @@ void audioout_reset(void) {
|
||||
// TODO(tannewt): Turn off the DAC clocks to save power.
|
||||
}
|
||||
|
||||
// Caller validates that pins are free.
|
||||
void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self,
|
||||
const mcu_pin_obj_t* left_channel, const mcu_pin_obj_t* right_channel, uint16_t quiescent_value) {
|
||||
#ifdef SAMD51
|
||||
@ -135,7 +136,6 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self,
|
||||
if (left_channel != &pin_PA02) {
|
||||
mp_raise_ValueError(translate("Invalid pin"));
|
||||
}
|
||||
assert_pin_free(left_channel);
|
||||
claim_pin(left_channel);
|
||||
#endif
|
||||
#ifdef SAMD51
|
||||
@ -143,7 +143,6 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self,
|
||||
if (left_channel != &pin_PA02 && left_channel != &pin_PA05) {
|
||||
mp_raise_ValueError(translate("Invalid pin for left channel"));
|
||||
}
|
||||
assert_pin_free(left_channel);
|
||||
if (right_channel != NULL && right_channel != &pin_PA02 && right_channel != &pin_PA05) {
|
||||
mp_raise_ValueError(translate("Invalid pin for right channel"));
|
||||
}
|
||||
@ -304,7 +303,7 @@ void common_hal_audioio_audioout_construct(audioio_audioout_obj_t* self,
|
||||
}
|
||||
|
||||
bool common_hal_audioio_audioout_deinited(audioio_audioout_obj_t* self) {
|
||||
return self->left_channel == mp_const_none;
|
||||
return self->left_channel == NULL;
|
||||
}
|
||||
|
||||
void common_hal_audioio_audioout_deinit(audioio_audioout_obj_t* self) {
|
||||
@ -332,10 +331,10 @@ void common_hal_audioio_audioout_deinit(audioio_audioout_obj_t* self) {
|
||||
tc_set_enable(tc_insts[self->tc_index], false);
|
||||
|
||||
reset_pin_number(self->left_channel->number);
|
||||
self->left_channel = mp_const_none;
|
||||
self->left_channel = NULL;
|
||||
#ifdef SAMD51
|
||||
reset_pin_number(self->right_channel->number);
|
||||
self->right_channel = mp_const_none;
|
||||
self->right_channel = NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -89,8 +89,8 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
||||
Sercom* sercom = NULL;
|
||||
uint8_t sercom_index;
|
||||
uint32_t clock_pinmux = 0;
|
||||
bool mosi_none = mosi == mp_const_none || mosi == NULL;
|
||||
bool miso_none = miso == mp_const_none || miso == NULL;
|
||||
bool mosi_none = mosi == NULL;
|
||||
bool miso_none = miso == NULL;
|
||||
uint32_t mosi_pinmux = 0;
|
||||
uint32_t miso_pinmux = 0;
|
||||
uint8_t clock_pad = 0;
|
||||
|
@ -65,7 +65,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
uint32_t tx_pinmux = 0;
|
||||
uint8_t tx_pad = 255; // Unset pad
|
||||
|
||||
if ((rts != mp_const_none) || (cts != mp_const_none) || (rs485_dir != mp_const_none) || (rs485_invert)) {
|
||||
if ((rts != NULL) || (cts != NULL) || (rs485_dir != NULL) || (rs485_invert)) {
|
||||
mp_raise_ValueError(translate("RTS/CTS/RS485 Not yet supported on this device"));
|
||||
}
|
||||
|
||||
@ -73,8 +73,8 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
mp_raise_NotImplementedError(translate("bytes > 8 bits not supported"));
|
||||
}
|
||||
|
||||
bool have_tx = tx != mp_const_none;
|
||||
bool have_rx = rx != mp_const_none;
|
||||
bool have_tx = tx != NULL;
|
||||
bool have_rx = rx != NULL;
|
||||
if (!have_tx && !have_rx) {
|
||||
mp_raise_ValueError(translate("tx and rx cannot both be None"));
|
||||
}
|
||||
@ -109,7 +109,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
#endif
|
||||
tx_pinmux = PINMUX(tx->number, (i == 0) ? MUX_C : MUX_D);
|
||||
tx_pad = tx->sercom[i].pad;
|
||||
if (rx == mp_const_none) {
|
||||
if (rx == NULL) {
|
||||
sercom = potential_sercom;
|
||||
break;
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ void common_hal_digitalio_digitalinout_never_reset(
|
||||
}
|
||||
|
||||
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t* self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t* self) {
|
||||
@ -63,7 +63,7 @@ void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t* self
|
||||
return;
|
||||
}
|
||||
reset_pin_number(self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_switch_to_input(
|
||||
|
@ -292,7 +292,7 @@ pwmout_result_t common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t* self,
|
||||
}
|
||||
|
||||
bool common_hal_pulseio_pwmout_deinited(pulseio_pwmout_obj_t* self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t* self) {
|
||||
@ -319,7 +319,7 @@ void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t* self) {
|
||||
}
|
||||
}
|
||||
reset_pin_number(self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
extern void common_hal_pulseio_pwmout_set_duty_cycle(pulseio_pwmout_obj_t* self, uint16_t duty) {
|
||||
|
@ -40,6 +40,8 @@ endif
|
||||
# SAMD21 needs separate endpoint pairs for MSC BULK IN and BULK OUT, otherwise it's erratic.
|
||||
USB_MSC_EP_NUM_OUT = 1
|
||||
|
||||
MICROPY_PY_ULAB = 0
|
||||
|
||||
endif # samd21
|
||||
|
||||
# Put samd51-only choices here.
|
||||
|
@ -176,6 +176,10 @@ OBJ = $(PY_O) $(SUPERVISOR_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
||||
OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
|
||||
OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_EXPANDED:.c=.o))
|
||||
OBJ += $(addprefix $(BUILD)/, $(SRC_SHARED_MODULE_EXPANDED:.c=.o))
|
||||
ifeq ($(INTERNAL_LIBM),1)
|
||||
OBJ += $(addprefix $(BUILD)/, $(SRC_LIBM:.c=.o))
|
||||
endif
|
||||
OBJ += $(addprefix $(BUILD)/, $(SRC_MOD:.c=.o))
|
||||
|
||||
# List of sources for qstr extraction
|
||||
SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED)
|
||||
|
@ -83,7 +83,7 @@ void common_hal_analogio_analogin_construct(analogio_analogin_obj_t *self, const
|
||||
|
||||
// start ADC
|
||||
ioctl(analogin_dev[self->number].fd, ANIOC_CXD56_START, 0);
|
||||
|
||||
|
||||
self->pin = pin;
|
||||
}
|
||||
|
||||
@ -97,7 +97,7 @@ void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
|
||||
close(analogin_dev[self->number].fd);
|
||||
analogin_dev[self->number].fd = -1;
|
||||
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
bool common_hal_analogio_analogin_deinited(analogio_analogin_obj_t *self) {
|
||||
|
@ -60,10 +60,10 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
mp_float_t timeout, uint16_t receiver_buffer_size) {
|
||||
struct termios tio;
|
||||
|
||||
if ((rts != mp_const_none) || (cts != mp_const_none) || (rs485_dir != mp_const_none) || (rs485_invert)) {
|
||||
if ((rts != NULL) || (cts != NULL) || (rs485_dir != NULL) || (rs485_invert)) {
|
||||
mp_raise_ValueError(translate("RTS/CTS/RS485 Not yet supported on this device"));
|
||||
}
|
||||
|
||||
|
||||
if (bits != 8) {
|
||||
mp_raise_ValueError(translate("Could not initialize UART"));
|
||||
}
|
||||
|
@ -56,11 +56,11 @@ void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t *self
|
||||
board_gpio_config(self->pin->number, 0, false, true, PIN_FLOAT);
|
||||
|
||||
reset_pin_number(self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_switch_to_input(digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
|
||||
|
@ -50,7 +50,7 @@ pwmout_result_t common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t *self,
|
||||
const mcu_pin_obj_t *pin, uint16_t duty, uint32_t frequency,
|
||||
bool variable_frequency) {
|
||||
self->number = -1;
|
||||
|
||||
|
||||
for (int i = 0; i < MP_ARRAY_SIZE(pwmout_dev); i++) {
|
||||
if (pin->number == pwmout_dev[i].pin->number) {
|
||||
self->number = i;
|
||||
@ -95,7 +95,7 @@ void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t *self) {
|
||||
pwmout_dev[self->number].fd = -1;
|
||||
|
||||
reset_pin_number(self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
bool common_hal_pulseio_pwmout_deinited(pulseio_pwmout_obj_t *self) {
|
||||
@ -131,11 +131,11 @@ bool common_hal_pulseio_pwmout_get_variable_frequency(pulseio_pwmout_obj_t *self
|
||||
void common_hal_pulseio_pwmout_never_reset(pulseio_pwmout_obj_t *self) {
|
||||
never_reset_pin_number(self->pin->number);
|
||||
|
||||
pwmout_dev[self->number].reset = false;
|
||||
pwmout_dev[self->number].reset = false;
|
||||
}
|
||||
|
||||
void common_hal_pulseio_pwmout_reset_ok(pulseio_pwmout_obj_t *self) {
|
||||
pwmout_dev[self->number].reset = true;
|
||||
pwmout_dev[self->number].reset = true;
|
||||
}
|
||||
|
||||
void pwmout_reset(void) {
|
||||
|
@ -106,7 +106,7 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t *self,
|
||||
|
||||
board_gpio_int(self->pin->number, true);
|
||||
}
|
||||
|
||||
|
||||
void common_hal_pulseio_pulsein_deinit(pulseio_pulsein_obj_t *self) {
|
||||
if (common_hal_pulseio_pulsein_deinited(self)) {
|
||||
return;
|
||||
@ -116,18 +116,18 @@ void common_hal_pulseio_pulsein_deinit(pulseio_pulsein_obj_t *self) {
|
||||
board_gpio_intconfig(self->pin->number, 0, false, NULL);
|
||||
|
||||
reset_pin_number(self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
|
||||
bool common_hal_pulseio_pulsein_deinited(pulseio_pulsein_obj_t *self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
|
||||
void common_hal_pulseio_pulsein_pause(pulseio_pulsein_obj_t *self) {
|
||||
board_gpio_int(self->pin->number, false);
|
||||
self->paused = true;
|
||||
}
|
||||
|
||||
|
||||
void common_hal_pulseio_pulsein_resume(pulseio_pulsein_obj_t *self, uint16_t trigger_duration) {
|
||||
// Make sure we're paused.
|
||||
common_hal_pulseio_pulsein_pause(self);
|
||||
@ -147,14 +147,14 @@ void common_hal_pulseio_pulsein_resume(pulseio_pulsein_obj_t *self, uint16_t tri
|
||||
pulsein_set_config(self, true);
|
||||
board_gpio_int(self->pin->number, true);
|
||||
}
|
||||
|
||||
|
||||
void common_hal_pulseio_pulsein_clear(pulseio_pulsein_obj_t *self) {
|
||||
common_hal_mcu_disable_interrupts();
|
||||
self->start = 0;
|
||||
self->len = 0;
|
||||
common_hal_mcu_enable_interrupts();
|
||||
}
|
||||
|
||||
|
||||
uint16_t common_hal_pulseio_pulsein_popleft(pulseio_pulsein_obj_t *self) {
|
||||
if (self->len == 0) {
|
||||
mp_raise_IndexError(translate("pop from an empty PulseIn"));
|
||||
@ -167,19 +167,19 @@ uint16_t common_hal_pulseio_pulsein_popleft(pulseio_pulsein_obj_t *self) {
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
|
||||
uint16_t common_hal_pulseio_pulsein_get_maxlen(pulseio_pulsein_obj_t *self) {
|
||||
return self->maxlen;
|
||||
}
|
||||
|
||||
|
||||
bool common_hal_pulseio_pulsein_get_paused(pulseio_pulsein_obj_t *self) {
|
||||
return self->paused;
|
||||
}
|
||||
|
||||
|
||||
uint16_t common_hal_pulseio_pulsein_get_len(pulseio_pulsein_obj_t *self) {
|
||||
return self->len;
|
||||
}
|
||||
|
||||
|
||||
uint16_t common_hal_pulseio_pulsein_get_item(pulseio_pulsein_obj_t *self, int16_t index) {
|
||||
common_hal_mcu_disable_interrupts();
|
||||
if (index < 0) {
|
||||
@ -193,4 +193,3 @@ uint16_t common_hal_pulseio_pulsein_get_item(pulseio_pulsein_obj_t *self, int16_
|
||||
common_hal_mcu_enable_interrupts();
|
||||
return value;
|
||||
}
|
||||
|
@ -18,3 +18,5 @@ CIRCUITPY_NEOPIXEL_WRITE = 0
|
||||
CIRCUITPY_NVM = 0
|
||||
CIRCUITPY_DISPLAYIO = 0
|
||||
CIRCUITPY_FREQUENCYIO = 0
|
||||
|
||||
INTERNAL_LIBM = 1
|
||||
|
@ -58,7 +58,7 @@ void common_hal_analogio_analogin_construct(analogio_analogin_obj_t* self,
|
||||
}
|
||||
|
||||
bool common_hal_analogio_analogin_deinited(analogio_analogin_obj_t *self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
|
||||
@ -66,7 +66,7 @@ void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
|
||||
return;
|
||||
}
|
||||
reset_pin_number(self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
|
||||
|
@ -80,8 +80,8 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
|
||||
// TODO: Allow none rx or tx
|
||||
|
||||
bool have_tx = tx != mp_const_none;
|
||||
bool have_rx = rx != mp_const_none;
|
||||
bool have_tx = tx != NULL;
|
||||
bool have_rx = rx != NULL;
|
||||
if (!have_tx && !have_rx) {
|
||||
mp_raise_ValueError(translate("tx and rx cannot both be None"));
|
||||
}
|
||||
@ -116,8 +116,8 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
}
|
||||
|
||||
// Filter for sane settings for RS485
|
||||
if (rs485_dir != mp_const_none) {
|
||||
if ((rts != mp_const_none) || (cts != mp_const_none)) {
|
||||
if (rs485_dir != NULL) {
|
||||
if ((rts != NULL) || (cts != NULL)) {
|
||||
mp_raise_ValueError(translate("Cannot specify RTS or CTS in RS485 mode"));
|
||||
}
|
||||
// For IMXRT the RTS pin is used for RS485 direction
|
||||
@ -133,7 +133,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
const uint32_t rts_count = sizeof(mcu_uart_rts_list) / sizeof(mcu_periph_obj_t);
|
||||
const uint32_t cts_count = sizeof(mcu_uart_cts_list) / sizeof(mcu_periph_obj_t);
|
||||
|
||||
if (rts != mp_const_none) {
|
||||
if (rts != NULL) {
|
||||
for (uint32_t i=0; i < rts_count; ++i) {
|
||||
if (mcu_uart_rts_list[i].bank_idx == self->rx_pin->bank_idx) {
|
||||
if (mcu_uart_rts_list[i].pin == rts) {
|
||||
@ -146,7 +146,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
mp_raise_ValueError(translate("Selected RTS pin not valid"));
|
||||
}
|
||||
|
||||
if (cts != mp_const_none) {
|
||||
if (cts != NULL) {
|
||||
for (uint32_t i=0; i < cts_count; ++i) {
|
||||
if (mcu_uart_cts_list[i].bank_idx == self->rx_pin->bank_idx) {
|
||||
if (mcu_uart_cts_list[i].pin == cts) {
|
||||
@ -158,7 +158,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
if (self->cts_pin == NULL)
|
||||
mp_raise_ValueError(translate("Selected CTS pin not valid"));
|
||||
}
|
||||
|
||||
|
||||
self->uart = mcu_uart_banks[self->tx_pin->bank_idx - 1];
|
||||
|
||||
config_periph_pin(self->rx_pin);
|
||||
@ -166,7 +166,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
if (self->rts_pin)
|
||||
config_periph_pin(self->rts_pin);
|
||||
if (self->cts_pin)
|
||||
config_periph_pin(self->cts_pin);
|
||||
config_periph_pin(self->cts_pin);
|
||||
|
||||
lpuart_config_t config = { 0 };
|
||||
LPUART_GetDefaultConfig(&config);
|
||||
@ -187,7 +187,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
// Before we init, setup RS485 direction pin
|
||||
// ..unfortunately this isn't done by the driver library
|
||||
uint32_t modir = (self->uart->MODIR) & ~(LPUART_MODIR_TXRTSPOL_MASK | LPUART_MODIR_TXRTSE_MASK);
|
||||
if (rs485_dir != mp_const_none) {
|
||||
if (rs485_dir != NULL) {
|
||||
modir |= LPUART_MODIR_TXRTSE_MASK;
|
||||
if (rs485_invert)
|
||||
modir |= LPUART_MODIR_TXRTSPOL_MASK;
|
||||
|
@ -78,7 +78,7 @@ void common_hal_digitalio_digitalinout_never_reset(
|
||||
}
|
||||
|
||||
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t* self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t* self) {
|
||||
@ -86,7 +86,7 @@ void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t* self
|
||||
return;
|
||||
}
|
||||
reset_pin_number(self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_switch_to_input(
|
||||
|
@ -49,7 +49,7 @@ uint8_t display_init_sequence[] = {
|
||||
|
||||
void board_init(void) {
|
||||
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||
common_hal_busio_spi_construct(spi, &pin_P0_14, &pin_P0_15, mp_const_none);
|
||||
common_hal_busio_spi_construct(spi, &pin_P0_14, &pin_P0_15, NULL);
|
||||
common_hal_busio_spi_never_reset(spi);
|
||||
|
||||
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||
|
@ -49,7 +49,7 @@ uint8_t display_init_sequence[] = {
|
||||
|
||||
void board_init(void) {
|
||||
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||
common_hal_busio_spi_construct(spi, &pin_P0_11, &pin_P0_12, mp_const_none);
|
||||
common_hal_busio_spi_construct(spi, &pin_P0_11, &pin_P0_12, NULL);
|
||||
common_hal_busio_spi_never_reset(spi);
|
||||
|
||||
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||
|
@ -55,7 +55,7 @@ void common_hal_analogio_analogin_construct(analogio_analogin_obj_t *self, const
|
||||
}
|
||||
|
||||
bool common_hal_analogio_analogin_deinited(analogio_analogin_obj_t *self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
|
||||
@ -65,7 +65,7 @@ void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
|
||||
nrf_gpio_cfg_default(self->pin->number);
|
||||
|
||||
reset_pin_number(self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
|
||||
|
@ -34,6 +34,7 @@ NRF_PDM_Type *nrf_pdm = NRF_PDM;
|
||||
|
||||
static uint32_t dummy_buffer[4];
|
||||
|
||||
// Caller validates that pins are free.
|
||||
void common_hal_audiobusio_pdmin_construct(audiobusio_pdmin_obj_t* self,
|
||||
const mcu_pin_obj_t* clock_pin,
|
||||
const mcu_pin_obj_t* data_pin,
|
||||
@ -41,8 +42,6 @@ void common_hal_audiobusio_pdmin_construct(audiobusio_pdmin_obj_t* self,
|
||||
uint8_t bit_depth,
|
||||
bool mono,
|
||||
uint8_t oversample) {
|
||||
assert_pin_free(clock_pin);
|
||||
assert_pin_free(data_pin);
|
||||
claim_pin(clock_pin);
|
||||
claim_pin(data_pin);
|
||||
|
||||
|
@ -155,10 +155,9 @@ void audiopwmout_background() {
|
||||
}
|
||||
}
|
||||
|
||||
// Caller validates that pins are free.
|
||||
void common_hal_audiopwmio_pwmaudioout_construct(audiopwmio_pwmaudioout_obj_t* self,
|
||||
const mcu_pin_obj_t* left_channel, const mcu_pin_obj_t* right_channel, uint16_t quiescent_value) {
|
||||
assert_pin_free(left_channel);
|
||||
assert_pin_free(right_channel);
|
||||
self->pwm = pwmout_allocate(256, PWM_PRESCALER_PRESCALER_DIV_1, true, NULL, NULL);
|
||||
if (!self->pwm) {
|
||||
mp_raise_RuntimeError(translate("All timers in use"));
|
||||
|
@ -155,7 +155,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, const mcu_pin_obj_t *
|
||||
self->clock_pin_number = clock->number;
|
||||
claim_pin(clock);
|
||||
|
||||
if (mosi != mp_const_none) {
|
||||
if (mosi != NULL) {
|
||||
config.mosi_pin = mosi->number;
|
||||
self->MOSI_pin_number = mosi->number;
|
||||
claim_pin(mosi);
|
||||
@ -163,7 +163,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, const mcu_pin_obj_t *
|
||||
self->MOSI_pin_number = NO_PIN;
|
||||
}
|
||||
|
||||
if (miso != mp_const_none) {
|
||||
if (miso != NULL) {
|
||||
config.miso_pin = miso->number;
|
||||
self->MISO_pin_number = mosi->number;
|
||||
claim_pin(miso);
|
||||
|
@ -135,10 +135,10 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
uint32_t baudrate, uint8_t bits, uart_parity_t parity, uint8_t stop,
|
||||
mp_float_t timeout, uint16_t receiver_buffer_size) {
|
||||
|
||||
if ((rts != mp_const_none) || (cts != mp_const_none) || (rs485_dir != mp_const_none) || (rs485_invert)) {
|
||||
if ((rts != NULL) || (cts != NULL) || (rs485_dir != NULL) || (rs485_invert)) {
|
||||
mp_raise_ValueError(translate("RTS/CTS/RS485 Not yet supported on this device"));
|
||||
}
|
||||
|
||||
|
||||
// Find a free UART peripheral.
|
||||
self->uarte = NULL;
|
||||
for (size_t i = 0 ; i < MP_ARRAY_SIZE(nrfx_uartes); i++) {
|
||||
@ -152,7 +152,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
mp_raise_ValueError(translate("All UART peripherals are in use"));
|
||||
}
|
||||
|
||||
if ( (tx == mp_const_none) && (rx == mp_const_none) ) {
|
||||
if ( (tx == NULL) && (rx == NULL) ) {
|
||||
mp_raise_ValueError(translate("tx and rx cannot both be None"));
|
||||
}
|
||||
|
||||
@ -165,8 +165,8 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
}
|
||||
|
||||
nrfx_uarte_config_t config = {
|
||||
.pseltxd = (tx == mp_const_none) ? NRF_UARTE_PSEL_DISCONNECTED : tx->number,
|
||||
.pselrxd = (rx == mp_const_none) ? NRF_UARTE_PSEL_DISCONNECTED : rx->number,
|
||||
.pseltxd = (tx == NULL) ? NRF_UARTE_PSEL_DISCONNECTED : tx->number,
|
||||
.pselrxd = (rx == NULL) ? NRF_UARTE_PSEL_DISCONNECTED : rx->number,
|
||||
.pselcts = NRF_UARTE_PSEL_DISCONNECTED,
|
||||
.pselrts = NRF_UARTE_PSEL_DISCONNECTED,
|
||||
.p_context = self,
|
||||
@ -181,7 +181,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
_VERIFY_ERR(nrfx_uarte_init(self->uarte, &config, uart_callback_irq));
|
||||
|
||||
// Init buffer for rx
|
||||
if ( rx != mp_const_none ) {
|
||||
if ( rx != NULL ) {
|
||||
// Initially allocate the UART's buffer in the long-lived part of the
|
||||
// heap. UARTs are generally long-lived objects, but the "make long-
|
||||
// lived" machinery is incapable of moving internal pointers like
|
||||
@ -200,7 +200,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
claim_pin(rx);
|
||||
}
|
||||
|
||||
if ( tx != mp_const_none ) {
|
||||
if ( tx != NULL ) {
|
||||
self->tx_pin_number = tx->number;
|
||||
claim_pin(tx);
|
||||
} else {
|
||||
|
@ -46,7 +46,7 @@ digitalinout_result_t common_hal_digitalio_digitalinout_construct(
|
||||
}
|
||||
|
||||
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t *self) {
|
||||
@ -56,7 +56,7 @@ void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t *self
|
||||
nrf_gpio_cfg_default(self->pin->number);
|
||||
|
||||
reset_pin_number(self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_switch_to_input(
|
||||
|
@ -45,11 +45,11 @@ void common_hal_analogio_analogin_construct(analogio_analogin_obj_t* self,
|
||||
}
|
||||
// TODO: add ADC traits to structure?
|
||||
|
||||
// Note that ADC2 is always bundled pin-to-pin with ADC1 if it exists, and used only
|
||||
// for dual conversion. For this basic application it is never used.
|
||||
// Note that ADC2 is always bundled pin-to-pin with ADC1 if it exists, and used only
|
||||
// for dual conversion. For this basic application it is never used.
|
||||
LL_GPIO_SetPinMode(pin_port(pin->port), (uint32_t)pin_mask(pin->number), LL_GPIO_MODE_ANALOG);
|
||||
if (pin->adc_unit & 0x01) {
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC1);
|
||||
} else if (pin->adc_unit == 0x04) {
|
||||
#ifdef LL_APB2_GRP1_PERIPH_ADC3
|
||||
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_ADC3);
|
||||
@ -62,7 +62,7 @@ void common_hal_analogio_analogin_construct(analogio_analogin_obj_t* self,
|
||||
}
|
||||
|
||||
bool common_hal_analogio_analogin_deinited(analogio_analogin_obj_t *self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
|
||||
@ -70,7 +70,7 @@ void common_hal_analogio_analogin_deinit(analogio_analogin_obj_t *self) {
|
||||
return;
|
||||
}
|
||||
reset_pin_number(self->pin->port,self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
|
||||
@ -116,10 +116,10 @@ uint16_t common_hal_analogio_analogin_get_value(analogio_analogin_obj_t *self) {
|
||||
HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);
|
||||
|
||||
HAL_ADC_Start(&AdcHandle);
|
||||
HAL_ADC_PollForConversion(&AdcHandle,1);
|
||||
HAL_ADC_PollForConversion(&AdcHandle,1);
|
||||
uint16_t value = (uint16_t)HAL_ADC_GetValue(&AdcHandle);
|
||||
HAL_ADC_Stop(&AdcHandle);
|
||||
|
||||
|
||||
// // Shift the value to be 16 bit.
|
||||
return value << 4;
|
||||
}
|
||||
|
@ -39,7 +39,7 @@
|
||||
|
||||
#include "stm32f4xx_hal.h"
|
||||
|
||||
//DAC is shared between both channels.
|
||||
//DAC is shared between both channels.
|
||||
#if HAS_DAC
|
||||
DAC_HandleTypeDef handle;
|
||||
#endif
|
||||
@ -97,7 +97,7 @@ bool common_hal_analogio_analogout_deinited(analogio_analogout_obj_t *self) {
|
||||
void common_hal_analogio_analogout_deinit(analogio_analogout_obj_t *self) {
|
||||
#if HAS_DAC
|
||||
reset_pin_number(self->pin->port,self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
dac_on[self->dac_index] = false;
|
||||
|
||||
//turn off the DAC if both channels are off
|
||||
|
@ -100,14 +100,14 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = self->sda->altfn_index;
|
||||
GPIO_InitStruct.Alternate = self->sda->altfn_index;
|
||||
HAL_GPIO_Init(pin_port(sda->port), &GPIO_InitStruct);
|
||||
|
||||
GPIO_InitStruct.Pin = pin_mask(scl->number);
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||
GPIO_InitStruct.Alternate = self->scl->altfn_index;
|
||||
GPIO_InitStruct.Alternate = self->scl->altfn_index;
|
||||
HAL_GPIO_Init(pin_port(scl->port), &GPIO_InitStruct);
|
||||
|
||||
//Note: due to I2C soft reboot issue, do not relocate clock init.
|
||||
@ -144,7 +144,7 @@ void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) {
|
||||
}
|
||||
|
||||
bool common_hal_busio_i2c_deinited(busio_i2c_obj_t *self) {
|
||||
return self->sda->pin == mp_const_none;
|
||||
return self->sda == NULL;
|
||||
}
|
||||
|
||||
void common_hal_busio_i2c_deinit(busio_i2c_obj_t *self) {
|
||||
@ -158,8 +158,8 @@ void common_hal_busio_i2c_deinit(busio_i2c_obj_t *self) {
|
||||
|
||||
reset_pin_number(self->sda->pin->port,self->sda->pin->number);
|
||||
reset_pin_number(self->scl->pin->port,self->scl->pin->number);
|
||||
self->sda = mp_const_none;
|
||||
self->scl = mp_const_none;
|
||||
self->sda = NULL;
|
||||
self->scl = NULL;
|
||||
}
|
||||
|
||||
bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) {
|
||||
@ -169,7 +169,7 @@ bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) {
|
||||
bool common_hal_busio_i2c_try_lock(busio_i2c_obj_t *self) {
|
||||
bool grabbed_lock = false;
|
||||
|
||||
//Critical section code that may be required at some point.
|
||||
//Critical section code that may be required at some point.
|
||||
// uint32_t store_primask = __get_PRIMASK();
|
||||
// __disable_irq();
|
||||
// __DMB();
|
||||
@ -195,19 +195,19 @@ void common_hal_busio_i2c_unlock(busio_i2c_obj_t *self) {
|
||||
|
||||
uint8_t common_hal_busio_i2c_write(busio_i2c_obj_t *self, uint16_t addr,
|
||||
const uint8_t *data, size_t len, bool transmit_stop_bit) {
|
||||
HAL_StatusTypeDef result = HAL_I2C_Master_Transmit(&(self->handle), (uint16_t)(addr << 1),
|
||||
HAL_StatusTypeDef result = HAL_I2C_Master_Transmit(&(self->handle), (uint16_t)(addr << 1),
|
||||
(uint8_t *)data, (uint16_t)len, 500);
|
||||
return result == HAL_OK ? 0 : MP_EIO;
|
||||
}
|
||||
|
||||
uint8_t common_hal_busio_i2c_read(busio_i2c_obj_t *self, uint16_t addr,
|
||||
uint8_t *data, size_t len) {
|
||||
return HAL_I2C_Master_Receive(&(self->handle), (uint16_t)(addr<<1), data, (uint16_t)len, 500)
|
||||
return HAL_I2C_Master_Receive(&(self->handle), (uint16_t)(addr<<1), data, (uint16_t)len, 500)
|
||||
== HAL_OK ? 0 : MP_EIO;
|
||||
}
|
||||
|
||||
STATIC void i2c_clock_enable(uint8_t mask) {
|
||||
//Note: hard reset required due to soft reboot issue.
|
||||
//Note: hard reset required due to soft reboot issue.
|
||||
#ifdef I2C1
|
||||
if (mask & (1 << 0)) {
|
||||
__HAL_RCC_I2C1_CLK_ENABLE();
|
||||
|
@ -49,7 +49,7 @@ STATIC void spi_clock_enable(uint8_t mask);
|
||||
STATIC void spi_clock_disable(uint8_t mask);
|
||||
|
||||
STATIC uint32_t get_busclock(SPI_TypeDef * instance) {
|
||||
//SPI2 and 3 are on PCLK1, if they exist.
|
||||
//SPI2 and 3 are on PCLK1, if they exist.
|
||||
#ifdef SPI2
|
||||
if (instance == SPI2) return HAL_RCC_GetPCLK1Freq();
|
||||
#endif
|
||||
@ -113,7 +113,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
||||
for (uint i = 0; i < sck_len; i++) {
|
||||
if (mcu_spi_sck_list[i].pin == sck) {
|
||||
//if both MOSI and MISO exist, loop search normally
|
||||
if ((mosi != mp_const_none) && (miso != mp_const_none)) {
|
||||
if ((mosi != NULL) && (miso != NULL)) {
|
||||
//MOSI
|
||||
for (uint j = 0; j < mosi_len; j++) {
|
||||
if (mcu_spi_mosi_list[j].pin == mosi) {
|
||||
@ -133,11 +133,11 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
||||
self->miso = &mcu_spi_miso_list[k];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if just MISO, reduce search
|
||||
} else if (miso != mp_const_none) {
|
||||
} else if (miso != NULL) {
|
||||
for (uint j = 0; j < miso_len; j++) {
|
||||
if ((mcu_spi_miso_list[j].pin == miso) //only SCK and MISO need the same index
|
||||
&& (mcu_spi_sck_list[i].spi_index == mcu_spi_miso_list[j].spi_index)) {
|
||||
@ -152,9 +152,9 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
||||
self->miso = &mcu_spi_miso_list[j];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// if just MOSI, reduce search
|
||||
} else if (mosi != mp_const_none) {
|
||||
} else if (mosi != NULL) {
|
||||
for (uint j = 0; j < mosi_len; j++) {
|
||||
if ((mcu_spi_mosi_list[j].pin == mosi) //only SCK and MOSI need the same index
|
||||
&& (mcu_spi_sck_list[i].spi_index == mcu_spi_mosi_list[j].spi_index)) {
|
||||
@ -169,7 +169,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
||||
self->miso = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//throw an error immediately
|
||||
mp_raise_ValueError(translate("Must provide MISO or MOSI pin"));
|
||||
@ -179,8 +179,8 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
||||
|
||||
//handle typedef selection, errors
|
||||
if ( (self->sck != NULL && self->mosi != NULL && self->miso != NULL) ||
|
||||
(self->sck != NULL && self->mosi != NULL && miso == mp_const_none) ||
|
||||
(self->sck != NULL && self->miso != NULL && mosi == mp_const_none)) {
|
||||
(self->sck != NULL && self->mosi != NULL && miso == NULL) ||
|
||||
(self->sck != NULL && self->miso != NULL && mosi == NULL)) {
|
||||
SPIx = mcu_spi_banks[self->sck->spi_index - 1];
|
||||
} else {
|
||||
if (spi_taken) {
|
||||
@ -196,7 +196,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = self->sck->altfn_index;
|
||||
GPIO_InitStruct.Alternate = self->sck->altfn_index;
|
||||
HAL_GPIO_Init(pin_port(sck->port), &GPIO_InitStruct);
|
||||
|
||||
if (self->mosi != NULL) {
|
||||
@ -204,7 +204,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = self->mosi->altfn_index;
|
||||
GPIO_InitStruct.Alternate = self->mosi->altfn_index;
|
||||
HAL_GPIO_Init(pin_port(mosi->port), &GPIO_InitStruct);
|
||||
}
|
||||
|
||||
@ -213,14 +213,14 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = self->miso->altfn_index;
|
||||
GPIO_InitStruct.Alternate = self->miso->altfn_index;
|
||||
HAL_GPIO_Init(pin_port(miso->port), &GPIO_InitStruct);
|
||||
}
|
||||
|
||||
spi_clock_enable(1 << (self->sck->spi_index - 1));
|
||||
reserved_spi[self->sck->spi_index - 1] = true;
|
||||
|
||||
self->handle.Instance = SPIx;
|
||||
|
||||
self->handle.Instance = SPIx;
|
||||
self->handle.Init.Mode = SPI_MODE_MASTER;
|
||||
// Direction change only required for RX-only, see RefMan RM0090:884
|
||||
self->handle.Init.Direction = (self->mosi == NULL) ? SPI_CR1_RXONLY : SPI_DIRECTION_2LINES;
|
||||
@ -269,7 +269,7 @@ void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) {
|
||||
}
|
||||
|
||||
bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) {
|
||||
return self->sck->pin == mp_const_none;
|
||||
return self->sck->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_busio_spi_deinit(busio_spi_obj_t *self) {
|
||||
@ -287,15 +287,15 @@ void common_hal_busio_spi_deinit(busio_spi_obj_t *self) {
|
||||
if (self->miso != NULL) {
|
||||
reset_pin_number(self->miso->pin->port,self->miso->pin->number);
|
||||
}
|
||||
self->sck = mp_const_none;
|
||||
self->mosi = mp_const_none;
|
||||
self->miso = mp_const_none;
|
||||
self->sck = NULL;
|
||||
self->mosi = NULL;
|
||||
self->miso = NULL;
|
||||
}
|
||||
|
||||
bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
|
||||
uint32_t baudrate, uint8_t polarity, uint8_t phase, uint8_t bits) {
|
||||
//This resets the SPI, so check before updating it redundantly
|
||||
if (baudrate == self->baudrate && polarity== self->polarity
|
||||
if (baudrate == self->baudrate && polarity== self->polarity
|
||||
&& phase == self->phase && bits == self->bits) {
|
||||
return true;
|
||||
}
|
||||
@ -307,7 +307,7 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
|
||||
self->handle.Init.CLKPolarity = (polarity) ? SPI_POLARITY_HIGH : SPI_POLARITY_LOW;
|
||||
self->handle.Init.CLKPhase = (phase) ? SPI_PHASE_2EDGE : SPI_PHASE_1EDGE;
|
||||
|
||||
self->handle.Init.BaudRatePrescaler = stm32_baud_to_spi_div(baudrate, &self->prescaler,
|
||||
self->handle.Init.BaudRatePrescaler = stm32_baud_to_spi_div(baudrate, &self->prescaler,
|
||||
get_busclock(self->handle.Instance));
|
||||
|
||||
if (HAL_SPI_Init(&self->handle) != HAL_OK)
|
||||
@ -325,7 +325,7 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
|
||||
bool common_hal_busio_spi_try_lock(busio_spi_obj_t *self) {
|
||||
bool grabbed_lock = false;
|
||||
|
||||
//Critical section code that may be required at some point.
|
||||
//Critical section code that may be required at some point.
|
||||
// uint32_t store_primask = __get_PRIMASK();
|
||||
// __disable_irq();
|
||||
// __DMB();
|
||||
@ -367,7 +367,7 @@ bool common_hal_busio_spi_read(busio_spi_obj_t *self,
|
||||
return result == HAL_OK;
|
||||
}
|
||||
|
||||
bool common_hal_busio_spi_transfer(busio_spi_obj_t *self,
|
||||
bool common_hal_busio_spi_transfer(busio_spi_obj_t *self,
|
||||
uint8_t *data_out, uint8_t *data_in, size_t len) {
|
||||
if (self->miso == NULL || self->mosi == NULL) {
|
||||
mp_raise_ValueError(translate("Missing MISO or MOSI Pin"));
|
||||
|
@ -86,12 +86,12 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
bool uart_taken = false;
|
||||
uint8_t uart_index = 0; //origin 0 corrected
|
||||
|
||||
if ((rts != mp_const_none) || (cts != mp_const_none) || (rs485_dir != mp_const_none) || (rs485_invert == true)) {
|
||||
if ((rts != NULL) || (cts != NULL) || (rs485_dir != NULL) || (rs485_invert == true)) {
|
||||
mp_raise_ValueError(translate("RTS/CTS/RS485 Not yet supported on this device"));
|
||||
}
|
||||
|
||||
|
||||
//Can have both pins, or either
|
||||
if ((tx != mp_const_none) && (rx != mp_const_none)) {
|
||||
if ((tx != NULL) && (rx != NULL)) {
|
||||
//normal find loop if both pins exist
|
||||
for (uint i = 0; i < tx_len; i++) {
|
||||
if (mcu_uart_tx_list[i].pin == tx) {
|
||||
@ -115,7 +115,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
uart_index = self->tx->uart_index - 1;
|
||||
USARTx = assign_uart_or_throw(self, (self->tx != NULL && self->rx != NULL),
|
||||
uart_index, uart_taken);
|
||||
} else if (tx == mp_const_none) {
|
||||
} else if (tx == NULL) {
|
||||
//If there is no tx, run only rx
|
||||
for (uint i = 0; i < rx_len; i++) {
|
||||
if (mcu_uart_rx_list[i].pin == rx) {
|
||||
@ -132,7 +132,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
uart_index = self->rx->uart_index - 1;
|
||||
USARTx = assign_uart_or_throw(self, (self->rx != NULL),
|
||||
uart_index, uart_taken);
|
||||
} else if (rx == mp_const_none) {
|
||||
} else if (rx == NULL) {
|
||||
//If there is no rx, run only tx
|
||||
for (uint i = 0; i < tx_len; i++) {
|
||||
if (mcu_uart_tx_list[i].pin == tx) {
|
||||
@ -236,7 +236,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
|
||||
}
|
||||
|
||||
bool common_hal_busio_uart_deinited(busio_uart_obj_t *self) {
|
||||
return self->tx->pin == mp_const_none;
|
||||
return self->tx->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_busio_uart_deinit(busio_uart_obj_t *self) {
|
||||
@ -244,8 +244,8 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) {
|
||||
|
||||
reset_pin_number(self->tx->pin->port,self->tx->pin->number);
|
||||
reset_pin_number(self->rx->pin->port,self->rx->pin->number);
|
||||
self->tx = mp_const_none;
|
||||
self->rx = mp_const_none;
|
||||
self->tx = NULL;
|
||||
self->rx = NULL;
|
||||
gc_free(self->rbuf.buf);
|
||||
self->rbuf.size = 0;
|
||||
self->rbuf.iput = self->rbuf.iget = 0;
|
||||
|
@ -54,7 +54,7 @@ digitalinout_result_t common_hal_digitalio_digitalinout_construct(
|
||||
}
|
||||
|
||||
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self) {
|
||||
return self->pin == mp_const_none;
|
||||
return self->pin == NULL;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t *self) {
|
||||
@ -63,7 +63,7 @@ void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t *self
|
||||
}
|
||||
|
||||
reset_pin_number(self->pin->port, self->pin->number);
|
||||
self->pin = mp_const_none;
|
||||
self->pin = NULL;
|
||||
}
|
||||
|
||||
void common_hal_digitalio_digitalinout_switch_to_input(
|
||||
@ -90,7 +90,7 @@ void common_hal_digitalio_digitalinout_switch_to_output(
|
||||
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
||||
digitalio_digitalinout_obj_t *self) {
|
||||
|
||||
return (LL_GPIO_GetPinMode(pin_port(self->pin->port), pin_mask(self->pin->number))
|
||||
return (LL_GPIO_GetPinMode(pin_port(self->pin->port), pin_mask(self->pin->number))
|
||||
== LL_GPIO_MODE_INPUT) ? DIRECTION_INPUT : DIRECTION_OUTPUT;
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ void common_hal_digitalio_digitalinout_set_drive_mode(
|
||||
digitalio_drive_mode_t drive_mode) {
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
GPIO_InitStruct.Pin = pin_mask(self->pin->number);
|
||||
GPIO_InitStruct.Mode = (drive_mode == DRIVE_MODE_OPEN_DRAIN ?
|
||||
GPIO_InitStruct.Mode = (drive_mode == DRIVE_MODE_OPEN_DRAIN ?
|
||||
GPIO_MODE_OUTPUT_OD : GPIO_MODE_OUTPUT_PP);
|
||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
@ -121,7 +121,7 @@ void common_hal_digitalio_digitalinout_set_drive_mode(
|
||||
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
||||
digitalio_digitalinout_obj_t *self) {
|
||||
|
||||
return LL_GPIO_GetPinOutputType(pin_port(self->pin->port), pin_mask(self->pin->number))
|
||||
return LL_GPIO_GetPinOutputType(pin_port(self->pin->port), pin_mask(self->pin->number))
|
||||
== LL_GPIO_OUTPUT_OPENDRAIN ? DRIVE_MODE_OPEN_DRAIN : DRIVE_MODE_PUSH_PULL;
|
||||
}
|
||||
|
||||
@ -145,7 +145,7 @@ void common_hal_digitalio_digitalinout_set_pull(
|
||||
|
||||
digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(
|
||||
digitalio_digitalinout_obj_t *self) {
|
||||
|
||||
|
||||
|
||||
switch (LL_GPIO_GetPinPull(pin_port(self->pin->port), pin_mask(self->pin->number))) {
|
||||
case LL_GPIO_PULL_UP:
|
||||
|
@ -72,7 +72,7 @@ STATIC uint32_t timer_get_internal_duty(uint16_t duty, uint32_t period) {
|
||||
return (duty*period) / ((1 << 16) - 1);
|
||||
}
|
||||
|
||||
STATIC void timer_get_optimal_divisors(uint32_t*period, uint32_t*prescaler,
|
||||
STATIC void timer_get_optimal_divisors(uint32_t*period, uint32_t*prescaler,
|
||||
uint32_t frequency, uint32_t source_freq) {
|
||||
//Find the largest possible period supported by this frequency
|
||||
for (int i = 0; i < (1 << 16); i++) {
|
||||
@ -139,7 +139,7 @@ pwmout_result_t common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t* self,
|
||||
first_time_setup = false; //skip setting up the timer
|
||||
}
|
||||
//No problems taken, so set it up
|
||||
self->tim = l_tim;
|
||||
self->tim = l_tim;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -182,7 +182,7 @@ pwmout_result_t common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t* self,
|
||||
|
||||
uint32_t prescaler = 0; //prescaler is 15 bit
|
||||
uint32_t period = 0; //period is 16 bit
|
||||
timer_get_optimal_divisors(&period, &prescaler, frequency,
|
||||
timer_get_optimal_divisors(&period, &prescaler, frequency,
|
||||
timer_get_source_freq(self->tim->tim_index));
|
||||
|
||||
//Timer init
|
||||
@ -240,7 +240,7 @@ void common_hal_pulseio_pwmout_reset_ok(pulseio_pwmout_obj_t *self) {
|
||||
}
|
||||
|
||||
bool common_hal_pulseio_pwmout_deinited(pulseio_pwmout_obj_t* self) {
|
||||
return self->tim == mp_const_none;
|
||||
return self->tim == NULL;
|
||||
}
|
||||
|
||||
void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t* self) {
|
||||
@ -255,7 +255,7 @@ void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t* self) {
|
||||
HAL_TIM_PWM_Stop(&self->handle, self->channel);
|
||||
}
|
||||
reset_pin_number(self->tim->pin->port,self->tim->pin->number);
|
||||
self->tim = mp_const_none;
|
||||
self->tim = NULL;
|
||||
|
||||
//if reserved timer has no active channels, we can disable it
|
||||
if (!reserved_tim[self->tim->tim_index - 1]) {
|
||||
@ -276,13 +276,13 @@ uint16_t common_hal_pulseio_pwmout_get_duty_cycle(pulseio_pwmout_obj_t* self) {
|
||||
|
||||
void common_hal_pulseio_pwmout_set_frequency(pulseio_pwmout_obj_t* self, uint32_t frequency) {
|
||||
//don't halt setup for the same frequency
|
||||
if (frequency == self->frequency) {
|
||||
if (frequency == self->frequency) {
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t prescaler = 0;
|
||||
uint32_t period = 0;
|
||||
timer_get_optimal_divisors(&period, &prescaler, frequency,
|
||||
timer_get_optimal_divisors(&period, &prescaler, frequency,
|
||||
timer_get_source_freq(self->tim->tim_index));
|
||||
|
||||
//shut down
|
||||
@ -290,7 +290,7 @@ void common_hal_pulseio_pwmout_set_frequency(pulseio_pwmout_obj_t* self, uint32_
|
||||
|
||||
//Only change altered values
|
||||
self->handle.Init.Period = period - 1;
|
||||
self->handle.Init.Prescaler = prescaler - 1;
|
||||
self->handle.Init.Prescaler = prescaler - 1;
|
||||
|
||||
//restart everything, adjusting for new speed
|
||||
if (HAL_TIM_PWM_Init(&self->handle) != HAL_OK) {
|
||||
|
@ -71,5 +71,7 @@ endif
|
||||
|
||||
CFLAGS += -DMICROPY_CPYTHON_COMPAT=1
|
||||
|
||||
MICROPY_PY_ULAB = 1
|
||||
|
||||
#ifeq ($(MCU_SUB_VARIANT), stm32f412zx)
|
||||
#endif
|
||||
|
@ -400,21 +400,31 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
|
||||
DEBUG_printf("Current path: %.*s\n", vstr_len(&path), vstr_str(&path));
|
||||
|
||||
if (stat == MP_IMPORT_STAT_NO_EXIST) {
|
||||
#if MICROPY_MODULE_WEAK_LINKS
|
||||
// check if there is a weak link to this module
|
||||
if (i == mod_len) {
|
||||
mp_map_elem_t *el = mp_map_lookup((mp_map_t*)&mp_builtin_module_weak_links_map, MP_OBJ_NEW_QSTR(mod_name), MP_MAP_LOOKUP);
|
||||
// This is just the module name after the previous .
|
||||
qstr current_module_name = qstr_from_strn(mod_str + last, i - last);
|
||||
mp_map_elem_t *el = NULL;
|
||||
if (outer_module_obj == MP_OBJ_NULL) {
|
||||
el = mp_map_lookup((mp_map_t*)&mp_builtin_module_map,
|
||||
MP_OBJ_NEW_QSTR(current_module_name),
|
||||
MP_MAP_LOOKUP);
|
||||
#if MICROPY_MODULE_WEAK_LINKS
|
||||
// check if there is a weak link to this module
|
||||
if (el == NULL) {
|
||||
goto no_exist;
|
||||
el = mp_map_lookup((mp_map_t*)&mp_builtin_module_weak_links_map,
|
||||
MP_OBJ_NEW_QSTR(current_module_name),
|
||||
MP_MAP_LOOKUP);
|
||||
}
|
||||
// found weak linked module
|
||||
#endif
|
||||
} else {
|
||||
el = mp_map_lookup(&((mp_obj_module_t*) outer_module_obj)->globals->map,
|
||||
MP_OBJ_NEW_QSTR(current_module_name),
|
||||
MP_MAP_LOOKUP);
|
||||
}
|
||||
|
||||
if (el != NULL && MP_OBJ_IS_TYPE(el->value, &mp_type_module)) {
|
||||
module_obj = el->value;
|
||||
mp_module_call_init(mod_name, module_obj);
|
||||
} else {
|
||||
no_exist:
|
||||
#else
|
||||
{
|
||||
#endif
|
||||
// couldn't find the file, so fail
|
||||
if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
|
||||
mp_raise_ImportError(translate("module not found"));
|
||||
|
@ -187,6 +187,9 @@ typedef long mp_off_t;
|
||||
#if !defined(MICROPY_CPYTHON_COMPAT)
|
||||
#define MICROPY_CPYTHON_COMPAT (CIRCUITPY_FULL_BUILD)
|
||||
#endif
|
||||
#if !defined(MICROPY_COMP_FSTRING_LITERAL)
|
||||
#define MICROPY_COMP_FSTRING_LITERAL (MICROPY_CPYTHON_COMPAT)
|
||||
#endif
|
||||
#define MICROPY_MODULE_WEAK_LINKS (CIRCUITPY_FULL_BUILD)
|
||||
#define MICROPY_PY_ALL_SPECIAL_METHODS (CIRCUITPY_FULL_BUILD)
|
||||
#define MICROPY_PY_BUILTINS_COMPLEX (CIRCUITPY_FULL_BUILD)
|
||||
|
@ -339,6 +339,11 @@ CIRCUITPY_SERIAL_UART = 0
|
||||
endif
|
||||
CFLAGS += -DCIRCUITPY_SERIAL_UART=$(CIRCUITPY_SERIAL_UART)
|
||||
|
||||
# ulab numerics library
|
||||
ifndef MICROPY_PY_ULAB
|
||||
MICROPY_PY_ULAB = $(CIRCUITPY_FULL_BUILD)
|
||||
endif
|
||||
|
||||
# Enabled micropython.native decorator (experimental)
|
||||
ifndef CIRCUITPY_ENABLE_MPY_NATIVE
|
||||
CIRCUITPY_ENABLE_MPY_NATIVE = 0
|
||||
|
@ -89,7 +89,7 @@ mp_obj_dict_t *make_dict_long_lived(mp_obj_dict_t *dict, uint8_t max_depth) {
|
||||
#ifndef MICROPY_ENABLE_GC
|
||||
return dict;
|
||||
#endif
|
||||
if (dict == NULL || max_depth == 0 || dict == &MP_STATE_VM(dict_main)) {
|
||||
if (dict == NULL || max_depth == 0 || dict == &MP_STATE_VM(dict_main) || dict->map.is_fixed) {
|
||||
return dict;
|
||||
}
|
||||
// Don't recurse unnecessarily. Return immediately if we've already seen this dict.
|
||||
|
166
py/lexer.c
166
py/lexer.c
@ -64,6 +64,12 @@ STATIC bool is_char_or3(mp_lexer_t *lex, byte c1, byte c2, byte c3) {
|
||||
return lex->chr0 == c1 || lex->chr0 == c2 || lex->chr0 == c3;
|
||||
}
|
||||
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
STATIC bool is_char_or4(mp_lexer_t *lex, byte c1, byte c2, byte c3, byte c4) {
|
||||
return lex->chr0 == c1 || lex->chr0 == c2 || lex->chr0 == c3 || lex->chr0 == c4;
|
||||
}
|
||||
#endif
|
||||
|
||||
STATIC bool is_char_following(mp_lexer_t *lex, byte c) {
|
||||
return lex->chr1 == c;
|
||||
}
|
||||
@ -107,7 +113,13 @@ STATIC bool is_following_odigit(mp_lexer_t *lex) {
|
||||
|
||||
STATIC bool is_string_or_bytes(mp_lexer_t *lex) {
|
||||
return is_char_or(lex, '\'', '\"')
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
|| (is_char_or4(lex, 'r', 'u', 'b', 'f') && is_char_following_or(lex, '\'', '\"'))
|
||||
|| ((is_char_and(lex, 'r', 'f') || is_char_and(lex, 'f', 'r'))
|
||||
&& is_char_following_following_or(lex, '\'', '\"'))
|
||||
#else
|
||||
|| (is_char_or3(lex, 'r', 'u', 'b') && is_char_following_or(lex, '\'', '\"'))
|
||||
#endif
|
||||
|| ((is_char_and(lex, 'r', 'b') || is_char_and(lex, 'b', 'r'))
|
||||
&& is_char_following_following_or(lex, '\'', '\"'));
|
||||
}
|
||||
@ -121,6 +133,31 @@ STATIC bool is_tail_of_identifier(mp_lexer_t *lex) {
|
||||
return is_head_of_identifier(lex) || is_digit(lex);
|
||||
}
|
||||
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
STATIC void swap_char_banks(mp_lexer_t *lex) {
|
||||
if (lex->vstr_postfix_processing) {
|
||||
lex->chr3 = lex->chr0;
|
||||
lex->chr4 = lex->chr1;
|
||||
lex->chr5 = lex->chr2;
|
||||
lex->chr0 = lex->vstr_postfix.buf[0];
|
||||
lex->chr1 = lex->vstr_postfix.buf[1];
|
||||
lex->chr2 = lex->vstr_postfix.buf[2];
|
||||
|
||||
lex->vstr_postfix_idx = 3;
|
||||
} else {
|
||||
// blindly reset to the "backup" bank when done postfix processing
|
||||
// this restores control to the mp_reader
|
||||
lex->chr0 = lex->chr3;
|
||||
lex->chr1 = lex->chr4;
|
||||
lex->chr2 = lex->chr5;
|
||||
// willfully ignoring setting chr3-5 here - WARNING consider those garbage data now
|
||||
|
||||
vstr_reset(&lex->vstr_postfix);
|
||||
lex->vstr_postfix_idx = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
STATIC void next_char(mp_lexer_t *lex) {
|
||||
if (lex->chr0 == '\n') {
|
||||
// a new line
|
||||
@ -136,7 +173,19 @@ STATIC void next_char(mp_lexer_t *lex) {
|
||||
|
||||
lex->chr0 = lex->chr1;
|
||||
lex->chr1 = lex->chr2;
|
||||
lex->chr2 = lex->reader.readbyte(lex->reader.data);
|
||||
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
if (lex->vstr_postfix_processing) {
|
||||
if (lex->vstr_postfix_idx == lex->vstr_postfix.len) {
|
||||
lex->chr2 = '\0';
|
||||
} else {
|
||||
lex->chr2 = lex->vstr_postfix.buf[lex->vstr_postfix_idx++];
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
lex->chr2 = lex->reader.readbyte(lex->reader.data);
|
||||
}
|
||||
|
||||
if (lex->chr1 == '\r') {
|
||||
// CR is a new line, converted to LF
|
||||
@ -151,6 +200,13 @@ STATIC void next_char(mp_lexer_t *lex) {
|
||||
if (lex->chr2 == MP_LEXER_EOF && lex->chr1 != MP_LEXER_EOF && lex->chr1 != '\n') {
|
||||
lex->chr2 = '\n';
|
||||
}
|
||||
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
if (lex->vstr_postfix_processing && lex->chr0 == '\0') {
|
||||
lex->vstr_postfix_processing = false;
|
||||
swap_char_banks(lex);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
STATIC void indent_push(mp_lexer_t *lex, size_t indent) {
|
||||
@ -270,7 +326,7 @@ STATIC bool get_hex(mp_lexer_t *lex, size_t num_digits, mp_uint_t *result) {
|
||||
return true;
|
||||
}
|
||||
|
||||
STATIC void parse_string_literal(mp_lexer_t *lex, bool is_raw) {
|
||||
STATIC void parse_string_literal(mp_lexer_t *lex, bool is_raw, bool is_fstring) {
|
||||
// get first quoting character
|
||||
char quote_char = '\'';
|
||||
if (is_char(lex, '\"')) {
|
||||
@ -291,15 +347,71 @@ STATIC void parse_string_literal(mp_lexer_t *lex, bool is_raw) {
|
||||
}
|
||||
|
||||
size_t n_closing = 0;
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
bool in_expression = false;
|
||||
bool expression_eat = true;
|
||||
#endif
|
||||
|
||||
while (!is_end(lex) && (num_quotes > 1 || !is_char(lex, '\n')) && n_closing < num_quotes) {
|
||||
if (is_char(lex, quote_char)) {
|
||||
n_closing += 1;
|
||||
vstr_add_char(&lex->vstr, CUR_CHAR(lex));
|
||||
} else {
|
||||
n_closing = 0;
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
if (is_fstring && is_char(lex, '{')) {
|
||||
vstr_add_char(&lex->vstr, CUR_CHAR(lex));
|
||||
in_expression = !in_expression;
|
||||
expression_eat = in_expression;
|
||||
|
||||
if (lex->vstr_postfix.len == 0) {
|
||||
vstr_add_str(&lex->vstr_postfix, ".format(");
|
||||
}
|
||||
|
||||
next_char(lex);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (is_fstring && is_char(lex, '}')) {
|
||||
vstr_add_char(&lex->vstr, CUR_CHAR(lex));
|
||||
|
||||
if (in_expression) {
|
||||
in_expression = false;
|
||||
vstr_add_char(&lex->vstr_postfix, ',');
|
||||
}
|
||||
|
||||
next_char(lex);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (in_expression) {
|
||||
// throw errors for illegal chars inside f-string expressions
|
||||
if (is_char(lex, '#')) {
|
||||
lex->tok_kind = MP_TOKEN_FSTRING_COMMENT;
|
||||
return;
|
||||
} else if (is_char(lex, '\\')) {
|
||||
lex->tok_kind = MP_TOKEN_FSTRING_BACKSLASH;
|
||||
return;
|
||||
} else if (is_char(lex, ':')) {
|
||||
expression_eat = false;
|
||||
}
|
||||
|
||||
unichar c = CUR_CHAR(lex);
|
||||
if (expression_eat) {
|
||||
vstr_add_char(&lex->vstr_postfix, c);
|
||||
} else {
|
||||
vstr_add_char(&lex->vstr, c);
|
||||
}
|
||||
|
||||
next_char(lex);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (is_char(lex, '\\')) {
|
||||
next_char(lex);
|
||||
unichar c = CUR_CHAR(lex);
|
||||
|
||||
if (is_raw) {
|
||||
// raw strings allow escaping of quotes, but the backslash is also emitted
|
||||
vstr_add_char(&lex->vstr, '\\');
|
||||
@ -430,6 +542,15 @@ STATIC bool skip_whitespace(mp_lexer_t *lex, bool stop_at_newline) {
|
||||
}
|
||||
|
||||
void mp_lexer_to_next(mp_lexer_t *lex) {
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
if (lex->vstr_postfix.len && !lex->vstr_postfix_processing) {
|
||||
// end format call injection
|
||||
vstr_add_char(&lex->vstr_postfix, ')');
|
||||
lex->vstr_postfix_processing = true;
|
||||
swap_char_banks(lex);
|
||||
}
|
||||
#endif
|
||||
|
||||
// start new token text
|
||||
vstr_reset(&lex->vstr);
|
||||
|
||||
@ -481,10 +602,19 @@ void mp_lexer_to_next(mp_lexer_t *lex) {
|
||||
// MP_TOKEN_END is used to indicate that this is the first string token
|
||||
lex->tok_kind = MP_TOKEN_END;
|
||||
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
bool saw_normal = false, saw_fstring = false;
|
||||
#endif
|
||||
|
||||
// Loop to accumulate string/bytes literals
|
||||
do {
|
||||
// parse type codes
|
||||
bool is_raw = false;
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
bool is_fstring = false;
|
||||
#else
|
||||
const bool is_fstring = false;
|
||||
#endif
|
||||
mp_token_kind_t kind = MP_TOKEN_STRING;
|
||||
int n_char = 0;
|
||||
if (is_char(lex, 'u')) {
|
||||
@ -503,8 +633,34 @@ void mp_lexer_to_next(mp_lexer_t *lex) {
|
||||
kind = MP_TOKEN_BYTES;
|
||||
n_char = 2;
|
||||
}
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
if (is_char_following(lex, 'f')) {
|
||||
lex->tok_kind = MP_TOKEN_FSTRING_RAW;
|
||||
break;
|
||||
}
|
||||
} else if (is_char(lex, 'f')) {
|
||||
if (is_char_following(lex, 'r')) {
|
||||
lex->tok_kind = MP_TOKEN_FSTRING_RAW;
|
||||
break;
|
||||
}
|
||||
n_char = 1;
|
||||
is_fstring = true;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
if (is_fstring) {
|
||||
saw_fstring = true;
|
||||
} else {
|
||||
saw_normal = true;
|
||||
}
|
||||
|
||||
if (saw_fstring && saw_normal) {
|
||||
// Can't concatenate f-string with normal string
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Set or check token kind
|
||||
if (lex->tok_kind == MP_TOKEN_END) {
|
||||
lex->tok_kind = kind;
|
||||
@ -522,13 +678,12 @@ void mp_lexer_to_next(mp_lexer_t *lex) {
|
||||
}
|
||||
|
||||
// Parse the literal
|
||||
parse_string_literal(lex, is_raw);
|
||||
parse_string_literal(lex, is_raw, is_fstring);
|
||||
|
||||
// Skip whitespace so we can check if there's another string following
|
||||
skip_whitespace(lex, true);
|
||||
|
||||
} while (is_string_or_bytes(lex));
|
||||
|
||||
} else if (is_head_of_identifier(lex)) {
|
||||
lex->tok_kind = MP_TOKEN_NAME;
|
||||
|
||||
@ -682,6 +837,9 @@ mp_lexer_t *mp_lexer_new(qstr src_name, mp_reader_t reader) {
|
||||
lex->num_indent_level = 1;
|
||||
lex->indent_level = m_new(uint16_t, lex->alloc_indent_level);
|
||||
vstr_init(&lex->vstr, 32);
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
vstr_init(&lex->vstr_postfix, 0);
|
||||
#endif
|
||||
|
||||
// store sentinel for first indentation level
|
||||
lex->indent_level[0] = 0;
|
||||
|
16
py/lexer.h
16
py/lexer.h
@ -44,6 +44,14 @@ typedef enum _mp_token_kind_t {
|
||||
MP_TOKEN_INVALID,
|
||||
MP_TOKEN_DEDENT_MISMATCH,
|
||||
MP_TOKEN_LONELY_STRING_OPEN,
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
MP_TOKEN_FSTRING_BACKSLASH,
|
||||
MP_TOKEN_FSTRING_COMMENT,
|
||||
MP_TOKEN_FSTRING_UNCLOSED,
|
||||
MP_TOKEN_FSTRING_UNOPENED,
|
||||
MP_TOKEN_FSTRING_EMPTY_EXP,
|
||||
MP_TOKEN_FSTRING_RAW,
|
||||
#endif
|
||||
|
||||
MP_TOKEN_NEWLINE,
|
||||
MP_TOKEN_INDENT,
|
||||
@ -150,6 +158,9 @@ typedef struct _mp_lexer_t {
|
||||
mp_reader_t reader; // stream source
|
||||
|
||||
unichar chr0, chr1, chr2; // current cached characters from source
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
unichar chr3, chr4, chr5; // current cached characters from alt source
|
||||
#endif
|
||||
|
||||
size_t line; // current source line
|
||||
size_t column; // current source column
|
||||
@ -165,6 +176,11 @@ typedef struct _mp_lexer_t {
|
||||
size_t tok_column; // token source column
|
||||
mp_token_kind_t tok_kind; // token kind
|
||||
vstr_t vstr; // token data
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
vstr_t vstr_postfix; // postfix to apply to string
|
||||
bool vstr_postfix_processing;
|
||||
uint16_t vstr_postfix_idx;
|
||||
#endif
|
||||
} mp_lexer_t;
|
||||
|
||||
mp_lexer_t *mp_lexer_new(qstr src_name, mp_reader_t reader);
|
||||
|
@ -377,6 +377,11 @@
|
||||
#define MICROPY_COMP_RETURN_IF_EXPR (0)
|
||||
#endif
|
||||
|
||||
// Whether to include parsing of f-string literals
|
||||
#ifndef MICROPY_COMP_FSTRING_LITERAL
|
||||
#define MICROPY_COMP_FSTRING_LITERAL (1)
|
||||
#endif
|
||||
|
||||
/*****************************************************************************/
|
||||
/* Internal debugging stuff */
|
||||
|
||||
|
@ -69,6 +69,13 @@ STATIC void module_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) {
|
||||
// delete/store attribute
|
||||
mp_obj_dict_t *dict = self->globals;
|
||||
if (dict->map.is_fixed) {
|
||||
mp_map_elem_t *elem = mp_map_lookup(&dict->map, MP_OBJ_NEW_QSTR(attr), MP_MAP_LOOKUP);
|
||||
// Return success if the given value is already in the dictionary. This is the case for
|
||||
// native packages with native submodules.
|
||||
if (elem != NULL && elem->value == dest[1]) {
|
||||
dest[0] = MP_OBJ_NULL; // indicate success
|
||||
return;
|
||||
} else
|
||||
#if MICROPY_CAN_OVERRIDE_BUILTINS
|
||||
if (dict == &mp_module_builtins_globals) {
|
||||
if (MP_STATE_VM(mp_module_builtins_override_dict) == NULL) {
|
||||
|
61
py/parse.c
61
py/parse.c
@ -924,6 +924,7 @@ mp_parse_tree_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind) {
|
||||
backtrack = false;
|
||||
}
|
||||
for (; i < n; ++i) {
|
||||
//printf("--> inside for @L924\n");
|
||||
uint16_t kind = rule_arg[i] & RULE_ARG_KIND_MASK;
|
||||
if (kind == RULE_ARG_TOK) {
|
||||
if (lex->tok_kind == (rule_arg[i] & RULE_ARG_ARG_MASK)) {
|
||||
@ -1168,15 +1169,57 @@ mp_parse_tree_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind) {
|
||||
) {
|
||||
syntax_error:;
|
||||
mp_obj_t exc;
|
||||
if (lex->tok_kind == MP_TOKEN_INDENT) {
|
||||
exc = mp_obj_new_exception_msg(&mp_type_IndentationError,
|
||||
translate("unexpected indent"));
|
||||
} else if (lex->tok_kind == MP_TOKEN_DEDENT_MISMATCH) {
|
||||
exc = mp_obj_new_exception_msg(&mp_type_IndentationError,
|
||||
translate("unindent does not match any outer indentation level"));
|
||||
} else {
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
translate("invalid syntax"));
|
||||
switch(lex->tok_kind) {
|
||||
case MP_TOKEN_INDENT:
|
||||
exc = mp_obj_new_exception_msg(&mp_type_IndentationError,
|
||||
translate("unexpected indent"));
|
||||
break;
|
||||
case MP_TOKEN_DEDENT_MISMATCH:
|
||||
exc = mp_obj_new_exception_msg(&mp_type_IndentationError,
|
||||
translate("unindent does not match any outer indentation level"));
|
||||
break;
|
||||
#if MICROPY_COMP_FSTRING_LITERAL
|
||||
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_DETAILED
|
||||
case MP_TOKEN_FSTRING_BACKSLASH:
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
translate("f-string expression part cannot include a backslash"));
|
||||
break;
|
||||
case MP_TOKEN_FSTRING_COMMENT:
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
translate("f-string expression part cannot include a '#'"));
|
||||
break;
|
||||
case MP_TOKEN_FSTRING_UNCLOSED:
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
translate("f-string: expecting '}'"));
|
||||
break;
|
||||
case MP_TOKEN_FSTRING_UNOPENED:
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
translate("f-string: single '}' is not allowed"));
|
||||
break;
|
||||
case MP_TOKEN_FSTRING_EMPTY_EXP:
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
translate("f-string: empty expression not allowed"));
|
||||
break;
|
||||
case MP_TOKEN_FSTRING_RAW:
|
||||
exc = mp_obj_new_exception_msg(&mp_type_NotImplementedError,
|
||||
translate("raw f-strings are not implemented"));
|
||||
break;
|
||||
#else
|
||||
case MP_TOKEN_FSTRING_BACKSLASH:
|
||||
case MP_TOKEN_FSTRING_COMMENT:
|
||||
case MP_TOKEN_FSTRING_UNCLOSED:
|
||||
case MP_TOKEN_FSTRING_UNOPENED:
|
||||
case MP_TOKEN_FSTRING_EMPTY_EXP:
|
||||
case MP_TOKEN_FSTRING_RAW:
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
translate("malformed f-string"));
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
default:
|
||||
exc = mp_obj_new_exception_msg(&mp_type_SyntaxError,
|
||||
translate("invalid syntax"));
|
||||
break;
|
||||
}
|
||||
// add traceback to give info about file name and location
|
||||
// we don't have a 'block' name, so just pass the NULL qstr to indicate this
|
||||
|
@ -63,16 +63,13 @@ STATIC mp_obj_t analogio_analogin_make_new(const mp_obj_type_t *type,
|
||||
mp_arg_check_num(n_args, kw_args, 1, 1, false);
|
||||
|
||||
// 1st argument is the pin
|
||||
mp_obj_t pin_obj = args[0];
|
||||
assert_pin(pin_obj, false);
|
||||
const mcu_pin_obj_t *pin = validate_obj_is_free_pin(args[0]);
|
||||
|
||||
analogio_analogin_obj_t *self = m_new_obj(analogio_analogin_obj_t);
|
||||
self->base.type = &analogio_analogin_type;
|
||||
const mcu_pin_obj_t *pin = MP_OBJ_TO_PTR(pin_obj);
|
||||
assert_pin_free(pin);
|
||||
common_hal_analogio_analogin_construct(self, pin);
|
||||
|
||||
return (mp_obj_t) self;
|
||||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
//| .. method:: deinit()
|
||||
@ -141,7 +138,7 @@ STATIC mp_obj_t analogio_analogin_obj_get_reference_voltage(mp_obj_t self_in) {
|
||||
|
||||
float reference_voltage = common_hal_analogio_analogin_get_reference_voltage(self);
|
||||
if (reference_voltage <= 0.0f) {
|
||||
return mp_const_none;
|
||||
return mp_const_none;
|
||||
} else {
|
||||
return mp_obj_new_float(reference_voltage);
|
||||
}
|
||||
|
@ -62,15 +62,13 @@ STATIC mp_obj_t analogio_analogout_make_new(const mp_obj_type_t *type, mp_uint_t
|
||||
// check arguments
|
||||
mp_arg_check_num(n_args, kw_args, 1, 1, false);
|
||||
|
||||
assert_pin(args[0], false);
|
||||
const mcu_pin_obj_t *pin = MP_OBJ_TO_PTR(args[0]);
|
||||
const mcu_pin_obj_t *pin = validate_obj_is_free_pin(args[0]);
|
||||
|
||||
analogio_analogout_obj_t *self = m_new_obj(analogio_analogout_obj_t);
|
||||
self->base.type = &analogio_analogout_type;
|
||||
assert_pin_free(pin);
|
||||
common_hal_analogio_analogout_construct(self, pin);
|
||||
|
||||
return self;
|
||||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
//| .. method:: deinit()
|
||||
|
@ -105,17 +105,9 @@ STATIC mp_obj_t audiobusio_i2sout_make_new(const mp_obj_type_t *type, size_t n_a
|
||||
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_obj_t bit_clock_obj = args[ARG_bit_clock].u_obj;
|
||||
assert_pin(bit_clock_obj, false);
|
||||
const mcu_pin_obj_t *bit_clock = MP_OBJ_TO_PTR(bit_clock_obj);
|
||||
|
||||
mp_obj_t word_select_obj = args[ARG_word_select].u_obj;
|
||||
assert_pin(word_select_obj, false);
|
||||
const mcu_pin_obj_t *word_select = MP_OBJ_TO_PTR(word_select_obj);
|
||||
|
||||
mp_obj_t data_obj = args[ARG_data].u_obj;
|
||||
assert_pin(data_obj, false);
|
||||
const mcu_pin_obj_t *data = MP_OBJ_TO_PTR(data_obj);
|
||||
const mcu_pin_obj_t *bit_clock = validate_obj_is_free_pin(args[ARG_bit_clock].u_obj);
|
||||
const mcu_pin_obj_t *word_select = validate_obj_is_free_pin(args[ARG_word_select].u_obj);
|
||||
const mcu_pin_obj_t *data = validate_obj_is_free_pin(args[ARG_data].u_obj);
|
||||
|
||||
audiobusio_i2sout_obj_t *self = m_new_obj_with_finaliser(audiobusio_i2sout_obj_t);
|
||||
self->base.type = &audiobusio_i2sout_type;
|
||||
|
@ -104,15 +104,8 @@ STATIC mp_obj_t audiobusio_pdmin_make_new(const mp_obj_type_t *type, size_t n_ar
|
||||
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_obj_t clock_pin_obj = args[ARG_clock_pin].u_obj;
|
||||
assert_pin(clock_pin_obj, false);
|
||||
const mcu_pin_obj_t *clock_pin = MP_OBJ_TO_PTR(clock_pin_obj);
|
||||
assert_pin_free(clock_pin);
|
||||
|
||||
mp_obj_t data_pin_obj = args[ARG_data_pin].u_obj;
|
||||
assert_pin(data_pin_obj, false);
|
||||
const mcu_pin_obj_t *data_pin = MP_OBJ_TO_PTR(data_pin_obj);
|
||||
assert_pin_free(data_pin);
|
||||
const mcu_pin_obj_t *clock_pin = validate_obj_is_free_pin(args[ARG_clock_pin].u_obj);
|
||||
const mcu_pin_obj_t *data_pin = validate_obj_is_free_pin(args[ARG_data_pin].u_obj);
|
||||
|
||||
// create PDMIn object from the given pin
|
||||
audiobusio_pdmin_obj_t *self = m_new_obj(audiobusio_pdmin_obj_t);
|
||||
|
@ -104,16 +104,8 @@ STATIC mp_obj_t audioio_audioout_make_new(const mp_obj_type_t *type, size_t n_ar
|
||||
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_obj_t left_channel_obj = args[ARG_left_channel].u_obj;
|
||||
assert_pin(left_channel_obj, false);
|
||||
const mcu_pin_obj_t *left_channel_pin = MP_OBJ_TO_PTR(left_channel_obj);
|
||||
|
||||
mp_obj_t right_channel_obj = args[ARG_right_channel].u_obj;
|
||||
const mcu_pin_obj_t *right_channel_pin = NULL;
|
||||
if (right_channel_obj != mp_const_none) {
|
||||
assert_pin(right_channel_obj, false);
|
||||
right_channel_pin = MP_OBJ_TO_PTR(right_channel_obj);
|
||||
}
|
||||
const mcu_pin_obj_t *left_channel_pin = validate_obj_is_free_pin(args[ARG_left_channel].u_obj);
|
||||
const mcu_pin_obj_t *right_channel_pin = validate_obj_is_free_pin_or_none(args[ARG_right_channel].u_obj);
|
||||
|
||||
// create AudioOut object from the given pin
|
||||
audioio_audioout_obj_t *self = m_new_obj(audioio_audioout_obj_t);
|
||||
|
@ -107,16 +107,8 @@ STATIC mp_obj_t audiopwmio_pwmaudioout_make_new(const mp_obj_type_t *type, size_
|
||||
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_obj_t left_channel_obj = args[ARG_left_channel].u_obj;
|
||||
assert_pin(left_channel_obj, false);
|
||||
const mcu_pin_obj_t *left_channel_pin = MP_OBJ_TO_PTR(left_channel_obj);
|
||||
|
||||
mp_obj_t right_channel_obj = args[ARG_right_channel].u_obj;
|
||||
const mcu_pin_obj_t *right_channel_pin = NULL;
|
||||
if (right_channel_obj != mp_const_none) {
|
||||
assert_pin(right_channel_obj, false);
|
||||
right_channel_pin = MP_OBJ_TO_PTR(right_channel_obj);
|
||||
}
|
||||
const mcu_pin_obj_t *left_channel_pin = validate_obj_is_free_pin(args[ARG_left_channel].u_obj);
|
||||
const mcu_pin_obj_t *right_channel_pin = validate_obj_is_free_pin_or_none(args[ARG_right_channel].u_obj);
|
||||
|
||||
// create AudioOut object from the given pin
|
||||
audiopwmio_pwmaudioout_obj_t *self = m_new_obj(audiopwmio_pwmaudioout_obj_t);
|
||||
|
@ -63,10 +63,9 @@ STATIC mp_obj_t bitbangio_i2c_make_new(const mp_obj_type_t *type, size_t n_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);
|
||||
assert_pin(args[ARG_scl].u_obj, false);
|
||||
assert_pin(args[ARG_sda].u_obj, false);
|
||||
const mcu_pin_obj_t* scl = MP_OBJ_TO_PTR(args[ARG_scl].u_obj);
|
||||
const mcu_pin_obj_t* sda = MP_OBJ_TO_PTR(args[ARG_sda].u_obj);
|
||||
|
||||
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);
|
||||
|
||||
bitbangio_i2c_obj_t *self = m_new_obj(bitbangio_i2c_obj_t);
|
||||
self->base.type = &bitbangio_i2c_type;
|
||||
|
@ -69,9 +69,8 @@ STATIC mp_obj_t bitbangio_onewire_make_new(const mp_obj_type_t *type, size_t n_a
|
||||
};
|
||||
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);
|
||||
assert_pin(args[ARG_pin].u_obj, false);
|
||||
const mcu_pin_obj_t* pin = MP_OBJ_TO_PTR(args[ARG_pin].u_obj);
|
||||
assert_pin_free(pin);
|
||||
|
||||
const mcu_pin_obj_t* pin = validate_obj_is_free_pin(args[ARG_pin].u_obj);
|
||||
|
||||
bitbangio_onewire_obj_t *self = m_new_obj(bitbangio_onewire_obj_t);
|
||||
self->base.type = &bitbangio_onewire_type;
|
||||
|
@ -71,12 +71,10 @@ STATIC mp_obj_t bitbangio_spi_make_new(const mp_obj_type_t *type, size_t n_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);
|
||||
assert_pin(args[ARG_clock].u_obj, false);
|
||||
assert_pin(args[ARG_MOSI].u_obj, true);
|
||||
assert_pin(args[ARG_MISO].u_obj, true);
|
||||
const mcu_pin_obj_t* clock = MP_OBJ_TO_PTR(args[ARG_clock].u_obj);
|
||||
const mcu_pin_obj_t* mosi = MP_OBJ_TO_PTR(args[ARG_MOSI].u_obj);
|
||||
const mcu_pin_obj_t* miso = MP_OBJ_TO_PTR(args[ARG_MISO].u_obj);
|
||||
|
||||
const mcu_pin_obj_t* clock = validate_obj_is_free_pin(args[ARG_clock].u_obj);
|
||||
const mcu_pin_obj_t* mosi = validate_obj_is_free_pin_or_none(args[ARG_MOSI].u_obj);
|
||||
const mcu_pin_obj_t* miso = validate_obj_is_free_pin_or_none(args[ARG_MISO].u_obj);
|
||||
|
||||
bitbangio_spi_obj_t *self = m_new_obj(bitbangio_spi_obj_t);
|
||||
self->base.type = &bitbangio_spi_type;
|
||||
|
@ -76,12 +76,10 @@ STATIC mp_obj_t busio_i2c_make_new(const mp_obj_type_t *type, size_t n_args, con
|
||||
};
|
||||
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);
|
||||
assert_pin(args[ARG_scl].u_obj, false);
|
||||
assert_pin(args[ARG_sda].u_obj, false);
|
||||
const mcu_pin_obj_t* scl = MP_OBJ_TO_PTR(args[ARG_scl].u_obj);
|
||||
assert_pin_free(scl);
|
||||
const mcu_pin_obj_t* sda = MP_OBJ_TO_PTR(args[ARG_sda].u_obj);
|
||||
assert_pin_free(sda);
|
||||
|
||||
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);
|
||||
|
||||
common_hal_busio_i2c_construct(self, scl, sda, args[ARG_frequency].u_int, args[ARG_timeout].u_int);
|
||||
return (mp_obj_t)self;
|
||||
}
|
||||
|
@ -69,9 +69,7 @@ STATIC mp_obj_t busio_onewire_make_new(const mp_obj_type_t *type, size_t n_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);
|
||||
assert_pin(args[ARG_pin].u_obj, false);
|
||||
const mcu_pin_obj_t* pin = MP_OBJ_TO_PTR(args[ARG_pin].u_obj);
|
||||
assert_pin_free(pin);
|
||||
const mcu_pin_obj_t* pin = validate_obj_is_free_pin(args[ARG_pin].u_obj);
|
||||
|
||||
busio_onewire_obj_t *self = m_new_obj(busio_onewire_obj_t);
|
||||
self->base.type = &busio_onewire_type;
|
||||
|
@ -89,17 +89,13 @@ STATIC mp_obj_t busio_spi_make_new(const mp_obj_type_t *type, size_t n_args, con
|
||||
};
|
||||
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);
|
||||
assert_pin(args[ARG_clock].u_obj, false);
|
||||
assert_pin(args[ARG_MOSI].u_obj, true);
|
||||
assert_pin(args[ARG_MISO].u_obj, true);
|
||||
const mcu_pin_obj_t* clock = MP_OBJ_TO_PTR(args[ARG_clock].u_obj);
|
||||
assert_pin_free(clock);
|
||||
const mcu_pin_obj_t* mosi = MP_OBJ_TO_PTR(args[ARG_MOSI].u_obj);
|
||||
assert_pin_free(mosi);
|
||||
const mcu_pin_obj_t* miso = MP_OBJ_TO_PTR(args[ARG_MISO].u_obj);
|
||||
assert_pin_free(miso);
|
||||
|
||||
const mcu_pin_obj_t* clock = validate_obj_is_free_pin(args[ARG_clock].u_obj);
|
||||
const mcu_pin_obj_t* mosi = validate_obj_is_free_pin_or_none(args[ARG_MOSI].u_obj);
|
||||
const mcu_pin_obj_t* miso = validate_obj_is_free_pin_or_none(args[ARG_MISO].u_obj);
|
||||
|
||||
common_hal_busio_spi_construct(self, clock, mosi, miso);
|
||||
return (mp_obj_t)self;
|
||||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
//| .. method:: deinit()
|
||||
|
@ -105,13 +105,12 @@ STATIC mp_obj_t busio_uart_make_new(const mp_obj_type_t *type, size_t n_args, co
|
||||
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);
|
||||
|
||||
assert_pin(args[ARG_rx].u_obj, true);
|
||||
const mcu_pin_obj_t* rx = MP_OBJ_TO_PTR(args[ARG_rx].u_obj);
|
||||
assert_pin_free(rx);
|
||||
const mcu_pin_obj_t* rx = validate_obj_is_free_pin_or_none(args[ARG_rx].u_obj);
|
||||
const mcu_pin_obj_t* tx = validate_obj_is_free_pin_or_none(args[ARG_tx].u_obj);
|
||||
|
||||
assert_pin(args[ARG_tx].u_obj, true);
|
||||
const mcu_pin_obj_t* tx = MP_OBJ_TO_PTR(args[ARG_tx].u_obj);
|
||||
assert_pin_free(tx);
|
||||
if ( (tx == NULL) && (rx == NULL) ) {
|
||||
mp_raise_ValueError(translate("tx and rx cannot both be None"));
|
||||
}
|
||||
|
||||
uint8_t bits = args[ARG_bits].u_int;
|
||||
if (bits < 7 || bits > 9) {
|
||||
@ -133,12 +132,11 @@ STATIC mp_obj_t busio_uart_make_new(const mp_obj_type_t *type, size_t n_args, co
|
||||
mp_float_t timeout = mp_obj_get_float(args[ARG_timeout].u_obj);
|
||||
validate_timeout(timeout);
|
||||
|
||||
const mcu_pin_obj_t* rts = MP_OBJ_TO_PTR(args[ARG_rts].u_obj);
|
||||
const mcu_pin_obj_t* rts = validate_obj_is_free_pin_or_none(args[ARG_rts].u_obj);
|
||||
const mcu_pin_obj_t* cts = validate_obj_is_free_pin_or_none(args[ARG_cts].u_obj);
|
||||
const mcu_pin_obj_t* rs485_dir = validate_obj_is_free_pin_or_none(args[ARG_rs485_dir].u_obj);
|
||||
|
||||
const mcu_pin_obj_t* cts = MP_OBJ_TO_PTR(args[ARG_cts].u_obj);
|
||||
|
||||
const mcu_pin_obj_t* rs485_dir = args[ARG_rs485_dir].u_obj;
|
||||
bool rs485_invert = args[ARG_rs485_invert].u_bool;
|
||||
const bool rs485_invert = args[ARG_rs485_invert].u_bool;
|
||||
|
||||
common_hal_busio_uart_construct(self, tx, rx, rts, cts, rs485_dir, rs485_invert,
|
||||
args[ARG_baudrate].u_int, bits, parity, stop, timeout,
|
||||
|
@ -68,12 +68,10 @@ STATIC mp_obj_t digitalio_digitalinout_make_new(const mp_obj_type_t *type,
|
||||
digitalio_digitalinout_obj_t *self = m_new_obj(digitalio_digitalinout_obj_t);
|
||||
self->base.type = &digitalio_digitalinout_type;
|
||||
|
||||
assert_pin(args[0], false);
|
||||
mcu_pin_obj_t *pin = MP_OBJ_TO_PTR(args[0]);
|
||||
assert_pin_free(pin);
|
||||
mcu_pin_obj_t *pin = validate_obj_is_free_pin(args[0]);
|
||||
common_hal_digitalio_digitalinout_construct(self, pin);
|
||||
|
||||
return (mp_obj_t)self;
|
||||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
//| .. method:: deinit()
|
||||
|
@ -141,13 +141,7 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a
|
||||
mp_buffer_info_t bufinfo;
|
||||
mp_get_buffer_raise(args[ARG_init_sequence].u_obj, &bufinfo, MP_BUFFER_READ);
|
||||
|
||||
mp_obj_t backlight_pin_obj = args[ARG_backlight_pin].u_obj;
|
||||
assert_pin(backlight_pin_obj, true);
|
||||
const mcu_pin_obj_t* backlight_pin = NULL;
|
||||
if (backlight_pin_obj != NULL && backlight_pin_obj != mp_const_none) {
|
||||
backlight_pin = MP_OBJ_TO_PTR(backlight_pin_obj);
|
||||
assert_pin_free(backlight_pin);
|
||||
}
|
||||
const mcu_pin_obj_t* backlight_pin = validate_obj_is_free_pin_or_none(args[ARG_backlight_pin].u_obj);
|
||||
|
||||
mp_float_t brightness = mp_obj_get_float(args[ARG_brightness].u_obj);
|
||||
|
||||
|
@ -129,13 +129,7 @@ STATIC mp_obj_t displayio_epaperdisplay_make_new(const mp_obj_type_t *type, size
|
||||
mp_get_buffer_raise(args[ARG_stop_sequence].u_obj, &stop_bufinfo, MP_BUFFER_READ);
|
||||
|
||||
|
||||
mp_obj_t busy_pin_obj = args[ARG_busy_pin].u_obj;
|
||||
assert_pin(busy_pin_obj, true);
|
||||
const mcu_pin_obj_t* busy_pin = NULL;
|
||||
if (busy_pin_obj != NULL && busy_pin_obj != mp_const_none) {
|
||||
busy_pin = MP_OBJ_TO_PTR(busy_pin_obj);
|
||||
assert_pin_free(busy_pin);
|
||||
}
|
||||
const mcu_pin_obj_t* busy_pin = validate_obj_is_free_pin_or_none(args[ARG_busy_pin].u_obj);
|
||||
|
||||
mp_int_t rotation = args[ARG_rotation].u_int;
|
||||
if (rotation % 90 != 0) {
|
||||
|
@ -73,16 +73,9 @@ STATIC mp_obj_t displayio_fourwire_make_new(const mp_obj_type_t *type, size_t n_
|
||||
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_obj_t command = args[ARG_command].u_obj;
|
||||
mp_obj_t chip_select = args[ARG_chip_select].u_obj;
|
||||
assert_pin_free(command);
|
||||
assert_pin_free(chip_select);
|
||||
mp_obj_t reset = args[ARG_reset].u_obj;
|
||||
if (reset != mp_const_none) {
|
||||
assert_pin_free(reset);
|
||||
} else {
|
||||
reset = NULL;
|
||||
}
|
||||
mcu_pin_obj_t *command = validate_obj_is_free_pin(args[ARG_command].u_obj);
|
||||
mcu_pin_obj_t *chip_select = validate_obj_is_free_pin(args[ARG_chip_select].u_obj);
|
||||
mcu_pin_obj_t *reset = validate_obj_is_free_pin_or_none(args[ARG_reset].u_obj);
|
||||
|
||||
displayio_fourwire_obj_t* self = NULL;
|
||||
mp_obj_t spi = args[ARG_spi_bus].u_obj;
|
||||
|
@ -69,12 +69,7 @@ STATIC mp_obj_t displayio_i2cdisplay_make_new(const mp_obj_type_t *type, size_t
|
||||
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_obj_t reset = args[ARG_reset].u_obj;
|
||||
if (reset != mp_const_none) {
|
||||
assert_pin_free(reset);
|
||||
} else {
|
||||
reset = NULL;
|
||||
}
|
||||
mcu_pin_obj_t *reset = validate_obj_is_free_pin_or_none(args[ARG_reset].u_obj);
|
||||
|
||||
displayio_i2cdisplay_obj_t* self = NULL;
|
||||
mp_obj_t i2c = args[ARG_i2c_bus].u_obj;
|
||||
|
@ -71,23 +71,17 @@ STATIC mp_obj_t displayio_parallelbus_make_new(const mp_obj_type_t *type, size_t
|
||||
{ MP_QSTR_chip_select, MP_ARG_OBJ | MP_ARG_KW_ONLY | MP_ARG_REQUIRED },
|
||||
{ MP_QSTR_write, MP_ARG_OBJ | MP_ARG_KW_ONLY | MP_ARG_REQUIRED },
|
||||
{ MP_QSTR_read, MP_ARG_OBJ | MP_ARG_KW_ONLY | MP_ARG_REQUIRED },
|
||||
{ MP_QSTR_reset, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none} },
|
||||
{ MP_QSTR_reset, MP_ARG_OBJ | MP_ARG_KW_ONLY | MP_ARG_REQUIRED },
|
||||
};
|
||||
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_obj_t data0 = args[ARG_data0].u_obj;
|
||||
mp_obj_t command = args[ARG_command].u_obj;
|
||||
mp_obj_t chip_select = args[ARG_chip_select].u_obj;
|
||||
mp_obj_t write = args[ARG_write].u_obj;
|
||||
mp_obj_t read = args[ARG_read].u_obj;
|
||||
mp_obj_t reset = args[ARG_reset].u_obj;
|
||||
assert_pin_free(data0);
|
||||
assert_pin_free(command);
|
||||
assert_pin_free(chip_select);
|
||||
assert_pin_free(write);
|
||||
assert_pin_free(read);
|
||||
assert_pin_free(reset);
|
||||
mcu_pin_obj_t *data0 = validate_obj_is_free_pin(args[ARG_data0].u_obj);
|
||||
mcu_pin_obj_t *command = validate_obj_is_free_pin(args[ARG_command].u_obj);
|
||||
mcu_pin_obj_t *chip_select = validate_obj_is_free_pin(args[ARG_chip_select].u_obj);
|
||||
mcu_pin_obj_t *write = validate_obj_is_free_pin(args[ARG_write].u_obj);
|
||||
mcu_pin_obj_t *read = validate_obj_is_free_pin(args[ARG_read].u_obj);
|
||||
mcu_pin_obj_t *reset = validate_obj_is_free_pin(args[ARG_reset].u_obj);
|
||||
|
||||
displayio_parallelbus_obj_t* self = NULL;
|
||||
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
|
||||
|
@ -87,9 +87,7 @@ STATIC mp_obj_t frequencyio_frequencyin_make_new(const mp_obj_type_t *type, size
|
||||
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);
|
||||
|
||||
assert_pin(args[ARG_pin].u_obj, false);
|
||||
mcu_pin_obj_t* pin = MP_OBJ_TO_PTR(args[ARG_pin].u_obj);
|
||||
assert_pin_free(pin);
|
||||
mcu_pin_obj_t* pin = validate_obj_is_free_pin(args[ARG_pin].u_obj);
|
||||
|
||||
const uint16_t capture_period = args[ARG_capture_period].u_int;
|
||||
|
||||
|
@ -77,12 +77,8 @@ STATIC mp_obj_t i2cslave_i2c_slave_make_new(const mp_obj_type_t *type, size_t n_
|
||||
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);
|
||||
|
||||
assert_pin(args[ARG_scl].u_obj, false);
|
||||
assert_pin(args[ARG_sda].u_obj, false);
|
||||
const mcu_pin_obj_t* scl = MP_OBJ_TO_PTR(args[ARG_scl].u_obj);
|
||||
assert_pin_free(scl);
|
||||
const mcu_pin_obj_t* sda = MP_OBJ_TO_PTR(args[ARG_sda].u_obj);
|
||||
assert_pin_free(sda);
|
||||
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);
|
||||
|
@ -84,10 +84,35 @@ const mp_obj_type_t mcu_pin_type = {
|
||||
.print = mcu_pin_print
|
||||
};
|
||||
|
||||
void assert_pin(mp_obj_t obj, bool none_ok) {
|
||||
if ((obj != mp_const_none || !none_ok) && !MP_OBJ_IS_TYPE(obj, &mcu_pin_type)) {
|
||||
mcu_pin_obj_t *validate_obj_is_pin(mp_obj_t obj) {
|
||||
if (!MP_OBJ_IS_TYPE(obj, &mcu_pin_type)) {
|
||||
mp_raise_TypeError_varg(translate("Expected a %q"), mcu_pin_type.name);
|
||||
}
|
||||
return MP_OBJ_TO_PTR(obj);
|
||||
}
|
||||
|
||||
// Validate that the obj is a pin or None. Return an mcu_pin_obj_t* or NULL, correspondingly.
|
||||
mcu_pin_obj_t *validate_obj_is_pin_or_none(mp_obj_t obj) {
|
||||
if (obj == mp_const_none) {
|
||||
return NULL;
|
||||
}
|
||||
return validate_obj_is_pin(obj);
|
||||
}
|
||||
|
||||
mcu_pin_obj_t *validate_obj_is_free_pin(mp_obj_t obj) {
|
||||
mcu_pin_obj_t *pin = validate_obj_is_pin(obj);
|
||||
assert_pin_free(pin);
|
||||
return pin;
|
||||
}
|
||||
|
||||
// Validate that the obj is a free pin or None. Return an mcu_pin_obj_t* or NULL, correspondingly.
|
||||
mcu_pin_obj_t *validate_obj_is_free_pin_or_none(mp_obj_t obj) {
|
||||
if (obj == mp_const_none) {
|
||||
return NULL;
|
||||
}
|
||||
mcu_pin_obj_t *pin = validate_obj_is_pin(obj);
|
||||
assert_pin_free(pin);
|
||||
return pin;
|
||||
}
|
||||
|
||||
void assert_pin_free(const mcu_pin_obj_t* pin) {
|
||||
|
@ -33,7 +33,11 @@
|
||||
// Type object used in Python. Should be shared between ports.
|
||||
extern const mp_obj_type_t mcu_pin_type;
|
||||
|
||||
void assert_pin(mp_obj_t obj, bool none_ok);
|
||||
mcu_pin_obj_t *validate_obj_is_pin(mp_obj_t obj);
|
||||
mcu_pin_obj_t *validate_obj_is_pin_or_none(mp_obj_t obj);
|
||||
mcu_pin_obj_t *validate_obj_is_free_pin(mp_obj_t obj);
|
||||
mcu_pin_obj_t *validate_obj_is_free_pin_or_none(mp_obj_t obj);
|
||||
|
||||
void assert_pin_free(const mcu_pin_obj_t* pin);
|
||||
|
||||
bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t* pin);
|
||||
|
@ -77,12 +77,9 @@ STATIC mp_obj_t ps2io_ps2_make_new(const mp_obj_type_t *type, size_t n_args, con
|
||||
};
|
||||
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);
|
||||
assert_pin(args[ARG_clkpin].u_obj, false);
|
||||
assert_pin(args[ARG_datapin].u_obj, false);
|
||||
const mcu_pin_obj_t* clkpin = MP_OBJ_TO_PTR(args[ARG_clkpin].u_obj);
|
||||
assert_pin_free(clkpin);
|
||||
const mcu_pin_obj_t* datapin = MP_OBJ_TO_PTR(args[ARG_datapin].u_obj);
|
||||
assert_pin_free(datapin);
|
||||
|
||||
const mcu_pin_obj_t* clkpin = validate_obj_is_free_pin(args[ARG_clkpin].u_obj);
|
||||
const mcu_pin_obj_t* datapin = validate_obj_is_free_pin(args[ARG_datapin].u_obj);
|
||||
|
||||
ps2io_ps2_obj_t *self = m_new_obj(ps2io_ps2_obj_t);
|
||||
self->base.type = &ps2io_ps2_type;
|
||||
|
@ -96,10 +96,7 @@ STATIC mp_obj_t pulseio_pwmout_make_new(const mp_obj_type_t *type, size_t n_args
|
||||
mp_arg_val_t parsed_args[MP_ARRAY_SIZE(allowed_args)];
|
||||
mp_arg_parse_all(n_args, args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, parsed_args);
|
||||
|
||||
mp_obj_t pin_obj = parsed_args[ARG_pin].u_obj;
|
||||
assert_pin(pin_obj, false);
|
||||
const mcu_pin_obj_t *pin = MP_OBJ_TO_PTR(pin_obj);
|
||||
assert_pin_free(pin);
|
||||
const mcu_pin_obj_t *pin = validate_obj_is_free_pin(parsed_args[ARG_pin].u_obj);
|
||||
|
||||
uint16_t duty_cycle = parsed_args[ARG_duty_cycle].u_int;
|
||||
uint32_t frequency = parsed_args[ARG_frequency].u_int;
|
||||
|
@ -90,9 +90,7 @@ STATIC mp_obj_t pulseio_pulsein_make_new(const mp_obj_type_t *type, size_t n_arg
|
||||
};
|
||||
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);
|
||||
assert_pin(args[ARG_pin].u_obj, false);
|
||||
const mcu_pin_obj_t* pin = MP_OBJ_TO_PTR(args[ARG_pin].u_obj);
|
||||
assert_pin_free(pin);
|
||||
const mcu_pin_obj_t* pin = validate_obj_is_free_pin(args[ARG_pin].u_obj);
|
||||
|
||||
pulseio_pulsein_obj_t *self = m_new_obj(pulseio_pulsein_obj_t);
|
||||
self->base.type = &pulseio_pulsein_type;
|
||||
|
@ -73,13 +73,8 @@ STATIC mp_obj_t rotaryio_incrementalencoder_make_new(const mp_obj_type_t *type,
|
||||
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);
|
||||
|
||||
assert_pin(args[ARG_pin_a].u_obj, false);
|
||||
const mcu_pin_obj_t* pin_a = MP_OBJ_TO_PTR(args[ARG_pin_a].u_obj);
|
||||
assert_pin_free(pin_a);
|
||||
|
||||
assert_pin(args[ARG_pin_b].u_obj, false);
|
||||
const mcu_pin_obj_t* pin_b = MP_OBJ_TO_PTR(args[ARG_pin_b].u_obj);
|
||||
assert_pin_free(pin_b);
|
||||
const mcu_pin_obj_t* pin_a = validate_obj_is_free_pin(args[ARG_pin_a].u_obj);
|
||||
const mcu_pin_obj_t* pin_b = validate_obj_is_free_pin(args[ARG_pin_b].u_obj);
|
||||
|
||||
rotaryio_incrementalencoder_obj_t *self = m_new_obj(rotaryio_incrementalencoder_obj_t);
|
||||
self->base.type = &rotaryio_incrementalencoder_type;
|
||||
|
@ -66,10 +66,7 @@ STATIC mp_obj_t touchio_touchin_make_new(const mp_obj_type_t *type,
|
||||
mp_arg_check_num(n_args, kw_args, 1, 1, false);
|
||||
|
||||
// 1st argument is the pin
|
||||
mp_obj_t pin_obj = args[0];
|
||||
assert_pin(pin_obj, false);
|
||||
const mcu_pin_obj_t *pin = MP_OBJ_TO_PTR(pin_obj);
|
||||
assert_pin_free(pin);
|
||||
const mcu_pin_obj_t *pin = validate_obj_is_free_pin(args[0]);
|
||||
|
||||
touchio_touchin_obj_t *self = m_new_obj(touchio_touchin_obj_t);
|
||||
self->base.type = &touchio_touchin_type;
|
||||
|
@ -78,10 +78,10 @@ STATIC mp_obj_t wiznet5k_make_new(const mp_obj_type_t *type, size_t n_args, cons
|
||||
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);
|
||||
// TODO check type of ARG_spi?
|
||||
assert_pin(args[ARG_cs].u_obj, false);
|
||||
assert_pin(args[ARG_rst].u_obj, true); // may be NULL
|
||||
const mcu_pin_obj_t *cs = validate_obj_is_free_pin(args[ARG_cs].u_obj);
|
||||
const mcu_pin_obj_t *rst = validate_obj_is_free_pin_or_none(args[ARG_rst].u_obj);
|
||||
|
||||
mp_obj_t ret = wiznet5k_create(args[ARG_spi].u_obj, args[ARG_cs].u_obj, args[ARG_rst].u_obj);
|
||||
mp_obj_t ret = wiznet5k_create(args[ARG_spi].u_obj, cs, rst);
|
||||
if (args[ARG_dhcp].u_bool) wiznet5k_start_dhcp();
|
||||
return ret;
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ void shared_module_bitbangio_spi_construct(bitbangio_spi_obj_t *self,
|
||||
}
|
||||
common_hal_digitalio_digitalinout_switch_to_output(&self->clock, self->polarity == 1, DRIVE_MODE_PUSH_PULL);
|
||||
|
||||
if (mosi != mp_const_none) {
|
||||
if (mosi != NULL) {
|
||||
result = common_hal_digitalio_digitalinout_construct(&self->mosi, mosi);
|
||||
if (result != DIGITALINOUT_OK) {
|
||||
common_hal_digitalio_digitalinout_deinit(&self->clock);
|
||||
@ -55,12 +55,12 @@ void shared_module_bitbangio_spi_construct(bitbangio_spi_obj_t *self,
|
||||
common_hal_digitalio_digitalinout_switch_to_output(&self->mosi, false, DRIVE_MODE_PUSH_PULL);
|
||||
}
|
||||
|
||||
if (miso != mp_const_none) {
|
||||
if (miso != NULL) {
|
||||
// Starts out as input by default, no need to change.
|
||||
result = common_hal_digitalio_digitalinout_construct(&self->miso, miso);
|
||||
if (result != DIGITALINOUT_OK) {
|
||||
common_hal_digitalio_digitalinout_deinit(&self->clock);
|
||||
if (mosi != mp_const_none) {
|
||||
if (mosi != NULL) {
|
||||
common_hal_digitalio_digitalinout_deinit(&self->mosi);
|
||||
}
|
||||
mp_raise_ValueError(translate("MISO pin init failed."));
|
||||
|
@ -103,12 +103,12 @@ mp_obj_t common_hal_board_create_uart(void) {
|
||||
#ifdef DEFAULT_UART_BUS_RTS
|
||||
const mcu_pin_obj_t* rts = MP_OBJ_TO_PTR(DEFAULT_UART_BUS_RTS);
|
||||
#else
|
||||
const mcu_pin_obj_t* rts = mp_const_none;
|
||||
const mcu_pin_obj_t* rts = NULL;
|
||||
#endif
|
||||
#ifdef DEFAULT_UART_BUS_CTS
|
||||
const mcu_pin_obj_t* cts = MP_OBJ_TO_PTR(DEFAULT_UART_BUS_CTS);
|
||||
#else
|
||||
const mcu_pin_obj_t* cts = mp_const_none;
|
||||
const mcu_pin_obj_t* cts = NULL;
|
||||
#endif
|
||||
#ifdef DEFAULT_UART_IS_RS485
|
||||
const mcu_pin_obj_t* rs485_dir = MP_OBJ_TO_PTR(DEFAULT_UART_BUS_RS485DIR);
|
||||
@ -118,7 +118,7 @@ mp_obj_t common_hal_board_create_uart(void) {
|
||||
const bool rs485_invert = false;
|
||||
#endif
|
||||
#else
|
||||
const mcu_pin_obj_t* rs485_dir = mp_const_none;
|
||||
const mcu_pin_obj_t* rs485_dir = NULL;
|
||||
const bool rs485_invert = false;
|
||||
#endif
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user