Merge branch 'main' into esp32

This commit is contained in:
Scott Shawcroft 2022-07-13 15:30:53 -07:00 committed by GitHub
commit ac460dd1e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
62 changed files with 2217 additions and 306 deletions

View File

@ -5,6 +5,7 @@
.. module:: hashlib
:synopsis: hashing algorithms
:noindex:
|see_cpython_module| :mod:`cpython:hashlib`.

View File

@ -286,6 +286,44 @@ not protected by basic auth in case the device is someone elses.
Only `GET` requests are supported and will return `405 Method Not Allowed` otherwise.
#### `/cp/devices.json`
Returns information about other devices found on the network using MDNS.
* `total`: Total MDNS response count. May be more than in `devices` if internal limits were hit.
* `devices`: List of discovered devices.
* `hostname`: MDNS hostname
* `instance_name`: MDNS instance name. Defaults to human readable board name.
* `port`: Port of CircuitPython Web API
* `ip`: IP address
Example:
```sh
curl -v -L http://circuitpython.local/cp/devices.json
```
```json
{
"total": 1,
"devices": [
{
"hostname": "cpy-951032",
"instance_name": "Adafruit Feather ESP32-S2 TFT",
"port": 80,
"ip": "192.168.1.235"
}
]
}
```
#### `/cp/serial/`
Serves a basic serial terminal program when a `GET` request is received without the
`Upgrade: websocket` header. Otherwise the socket is upgraded to a WebSocket. See WebSockets below for more detail.
This is an authenticated endpoint in both modes.
#### `/cp/version.json`
Returns information about the device.
@ -323,36 +361,6 @@ curl -v -L http://circuitpython.local/cp/version.json
}
```
#### `/cp/devices.json`
Returns information about other devices found on the network using MDNS.
* `total`: Total MDNS response count. May be more than in `devices` if internal limits were hit.
* `devices`: List of discovered devices.
* `hostname`: MDNS hostname
* `instance_name`: MDNS instance name. Defaults to human readable board name.
* `port`: Port of CircuitPython Web API
* `ip`: IP address
Example:
```sh
curl -v -L http://circuitpython.local/cp/devices.json
```
```json
{
"total": 1,
"devices": [
{
"hostname": "cpy-951032",
"instance_name": "Adafruit Feather ESP32-S2 TFT",
"port": 80,
"ip": "192.168.1.235"
}
]
}
```
### Static files
* `/favicon.ico` - Blinka
@ -361,4 +369,12 @@ curl -v -L http://circuitpython.local/cp/devices.json
### WebSocket
Coming soon!
The CircuitPython serial interactions are available over a WebSocket. A WebSocket begins as a
special HTTP request that gets upgraded to a WebSocket. Authentication happens before upgrading.
WebSockets are *not* bare sockets once upgraded. Instead they have their own framing format for data.
CircuitPython can handle PING and CLOSE opcodes. All others are treated as TEXT. Data to
CircuitPython is expected to be masked UTF-8, as the spec requires. Data from CircuitPython to the
client is unmasked. It is also unbuffered so the client will get a variety of frame sizes.
Only one WebSocket at a time is supported.

@ -1 +1 @@
Subproject commit 5d01882c41dbc4115bc94f0b61c093d5a6b812b6
Subproject commit 346c936e14c6ea3a8d3d65cb1fa46202dc92999d

@ -1 +1 @@
Subproject commit d890d23f4261722338280f284cc1640e22e50e14
Subproject commit 53f15602460329f69fef95498e6b8293aebb513a

View File

@ -2383,6 +2383,10 @@ msgstr "argumen harus berupa ndarrays"
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2750,6 +2754,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2841,6 +2849,10 @@ msgstr ""
msgid "empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "heap kosong"
@ -2944,7 +2956,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3092,7 +3104,7 @@ msgstr ""
msgid "incorrect padding"
msgstr "lapisan (padding) tidak benar"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3159,6 +3171,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3167,11 +3183,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3372,7 +3384,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3621,7 +3633,7 @@ msgstr "panjang data string memiliki keganjilan (odd-length)"
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3772,6 +3784,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4207,6 +4220,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4248,7 +4269,17 @@ msgstr "indeks sumbu salah"
msgid "wrong axis specified"
msgstr "sumbu yang ditentukan salah"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr "tipe input salah"
@ -4256,6 +4287,10 @@ msgstr "tipe input salah"
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "jumlah argumen salah"

View File

@ -2199,6 +2199,10 @@ msgstr ""
msgid "Unsupported format"
msgstr ""
#: shared-bindings/hashlib/__init__.c
msgid "Unsupported hash algorithm"
msgstr ""
#: ports/espressif/common-hal/dualbank/__init__.c
msgid "Update Failed"
msgstr ""
@ -2352,6 +2356,10 @@ msgstr ""
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2719,6 +2727,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2810,6 +2822,10 @@ msgstr ""
msgid "empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr ""
@ -2913,7 +2929,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3061,7 +3077,7 @@ msgstr ""
msgid "incorrect padding"
msgstr ""
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3128,6 +3144,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3136,11 +3156,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3341,7 +3357,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3590,7 +3606,7 @@ msgstr ""
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -4180,6 +4196,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4221,7 +4245,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr ""
@ -4229,6 +4263,10 @@ msgstr ""
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr ""

View File

@ -2370,6 +2370,10 @@ msgstr ""
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2737,6 +2741,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2828,6 +2836,10 @@ msgstr ""
msgid "empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr ""
@ -2931,7 +2943,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3079,7 +3091,7 @@ msgstr ""
msgid "incorrect padding"
msgstr ""
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3146,6 +3158,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3154,11 +3170,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3359,7 +3371,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3608,7 +3620,7 @@ msgstr ""
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3758,6 +3770,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4193,6 +4206,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4234,7 +4255,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr ""
@ -4242,6 +4273,10 @@ msgstr ""
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr ""

View File

@ -2422,6 +2422,10 @@ msgstr "Argumente müssen ndarrays sein"
msgid "array and index length must be equal"
msgstr "Array- und Indexlänge müssen gleich sein"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2799,6 +2803,10 @@ msgstr "Convolve-Argumente müssen ndarrays sein"
msgid "convolve arguments must not be empty"
msgstr "Convolve Argumente dürfen nicht leer sein"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr "Vandermonde-Matrix konnte nicht invertiert werden"
@ -2892,6 +2900,10 @@ msgstr "dtype muss Float oder komplex sein"
msgid "empty"
msgstr "leer"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "leerer heap"
@ -2995,7 +3007,7 @@ msgstr "das erste Argument muss eine Funktion sein"
msgid "first argument must be a tuple of ndarrays"
msgstr "das erste Argument muss ein Tupel von ndarrays sein"
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr "Das erste Argument muss ein Ndarray sein"
@ -3145,7 +3157,7 @@ msgstr "unvollständiger Formatschlüssel"
msgid "incorrect padding"
msgstr "padding ist inkorrekt"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr "Index ist außerhalb der Grenzen"
@ -3212,6 +3224,10 @@ msgstr "Eingabematrix ist asymmetrisch"
msgid "input matrix is singular"
msgstr "Eingabematrix ist singulär"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr "Eingabe muss ein 1D ndarray sein"
@ -3220,11 +3236,7 @@ msgstr "Eingabe muss ein 1D ndarray sein"
msgid "input must be a dense ndarray"
msgstr "Eingabe muss ein dichtes ndarray sein"
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr "Eingabe muss ein Tensor von Rang 2 sein"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr "Eingabe muss ein ndarray sein"
@ -3431,8 +3443,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length muss 0-%d sein, wenn fixed_length %s ist"
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgstr "die maximale Anzahl der Dimensionen beträgt 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
msgid "maximum recursion depth exceeded"
@ -3681,7 +3693,7 @@ msgstr "String mit ungerader Länge"
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr "Offset ist zu groß"
@ -3835,6 +3847,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() mit 3 Argumenten erfordert Integer"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr "Drücken der Boot-Taste beim Start.\n"
@ -4275,6 +4288,14 @@ msgstr "nicht unterstützter Typ für Operator"
msgid "unsupported types for %q: '%q', '%q'"
msgstr "nicht unterstützte Typen für %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4316,7 +4337,17 @@ msgstr "falscher Achsenindex"
msgid "wrong axis specified"
msgstr "falsche Achse gewählt"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "falscher Indextyp"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr "falscher Eingabetyp"
@ -4324,6 +4355,10 @@ msgstr "falscher Eingabetyp"
msgid "wrong length of condition array"
msgstr "falsche Länge des Array von Bedingungen"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "falsche Anzahl an Argumenten"
@ -4368,6 +4403,12 @@ msgstr "zi muss eine Gleitkommazahl sein"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi muss die Form (n_section, 2) haben"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "Eingabe muss ein Tensor von Rang 2 sein"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "die maximale Anzahl der Dimensionen beträgt 4"
#~ msgid "Watchdog timer expired."
#~ msgstr "Watchdog timer abgelaufen."
@ -5131,9 +5172,6 @@ msgstr "zi muss die Form (n_section, 2) haben"
#~ msgid "wrong argument type"
#~ msgstr "falscher Argumenttyp"
#~ msgid "wrong index type"
#~ msgstr "falscher Indextyp"
#~ msgid ""
#~ "\n"
#~ "To exit, please reset the board without "

View File

@ -2352,6 +2352,10 @@ msgstr ""
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2719,6 +2723,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2810,6 +2818,10 @@ msgstr ""
msgid "empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr ""
@ -2913,7 +2925,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3061,7 +3073,7 @@ msgstr ""
msgid "incorrect padding"
msgstr ""
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3128,6 +3140,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3136,11 +3152,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3341,7 +3353,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3590,7 +3602,7 @@ msgstr ""
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3740,6 +3752,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4175,6 +4188,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4216,7 +4237,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr ""
@ -4224,6 +4255,10 @@ msgstr ""
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr ""

View File

@ -2386,6 +2386,10 @@ msgstr "arguments must be ndarrays"
msgid "array and index length must be equal"
msgstr "array and index length must be equal"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2755,6 +2759,10 @@ msgstr "convolve arguments must be ndarrays"
msgid "convolve arguments must not be empty"
msgstr "convolve arguments must not be empty"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr "could not invert Vandermonde matrix"
@ -2847,6 +2855,10 @@ msgstr ""
msgid "empty"
msgstr "empty"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "empty heap"
@ -2950,7 +2962,7 @@ msgstr "first argument must be a function"
msgid "first argument must be a tuple of ndarrays"
msgstr "first argument must be a tuple of ndarrays"
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr "first argument must be an ndarray"
@ -3098,7 +3110,7 @@ msgstr "incomplete format key"
msgid "incorrect padding"
msgstr "incorrect padding"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr "index is out of bounds"
@ -3165,6 +3177,10 @@ msgstr "input matrix is asymmetric"
msgid "input matrix is singular"
msgstr "input matrix is singular"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3173,11 +3189,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr "input must be a dense ndarray"
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr "input must be a tensor of rank 2"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr "input must be an ndarray"
@ -3378,8 +3390,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length must be 0-%d when fixed_length is %s"
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgstr "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
msgid "maximum recursion depth exceeded"
@ -3627,7 +3639,7 @@ msgstr "odd-length string"
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr "offset is too large"
@ -3777,6 +3789,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() with 3 arguments requires integers"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr "pressing boot button at start up.\n"
@ -4214,6 +4227,14 @@ msgstr "unsupported type for operator"
msgid "unsupported types for %q: '%q', '%q'"
msgstr "unsupported types for %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4255,7 +4276,17 @@ msgstr "wrong axis index"
msgid "wrong axis specified"
msgstr "wrong axis specified"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr "wrong input type"
@ -4263,6 +4294,10 @@ msgstr "wrong input type"
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "wrong number of arguments"
@ -4307,6 +4342,12 @@ msgstr "zi must be of float type"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi must be of shape (n_section, 2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "input must be a tensor of rank 2"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "maximum number of dimensions is 4"
#~ msgid "Watchdog timer expired."
#~ msgstr "WatchDog timer expired."

View File

@ -2419,6 +2419,10 @@ msgstr "argumentos deben ser ndarrays"
msgid "array and index length must be equal"
msgstr "Longitud del array e índice tienen que ser iguales"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2791,6 +2795,10 @@ msgstr "los argumentos para convolve deben ser ndarrays"
msgid "convolve arguments must not be empty"
msgstr "los argumentos para convolve no deben estar vacíos"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr "no se pudo invertir la matriz de Vandermonde"
@ -2884,6 +2892,10 @@ msgstr ""
msgid "empty"
msgstr "vacío"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "heap vacío"
@ -2987,7 +2999,7 @@ msgstr "el primer argumento debe ser una función"
msgid "first argument must be a tuple of ndarrays"
msgstr "Primer argumento tiene que ser una tupla de ndarrays"
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr "el primer argumento debe ser ndarray"
@ -3135,7 +3147,7 @@ msgstr "formato de llave incompleto"
msgid "incorrect padding"
msgstr "relleno (padding) incorrecto"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr "el índice está fuera de límites"
@ -3202,6 +3214,10 @@ msgstr "la matriz de entrada es asimétrica"
msgid "input matrix is singular"
msgstr "la matriz de entrada es singular"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3210,11 +3226,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr "Entrada tiene que ser un ndarray denso"
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr "Entrada tiene que ser un tensor de rango 2"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr "Entrada tiene que ser un ndarray"
@ -3418,8 +3430,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length debe ser 0-%d cuando fixed_length es %s"
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgstr "Máximo número de dimensiones es 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
msgid "maximum recursion depth exceeded"
@ -3671,7 +3683,7 @@ msgstr "string de longitud impar"
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr "offset es demasiado grande"
@ -3821,6 +3833,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() con 3 argumentos requiere enteros"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr "presionando botón de arranque al inicio.\n"
@ -4259,6 +4272,14 @@ msgstr "tipo de operador no soportado"
msgid "unsupported types for %q: '%q', '%q'"
msgstr "tipos no soportados para %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4300,7 +4321,17 @@ msgstr "indice de eje erróneo"
msgid "wrong axis specified"
msgstr "eje especificado erróneo"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "tipo de índice incorrecto"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr "tipo de entrada incorrecta"
@ -4308,6 +4339,10 @@ msgstr "tipo de entrada incorrecta"
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "numero erroneo de argumentos"
@ -4352,6 +4387,12 @@ msgstr "zi debe ser de tipo flotante"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi debe ser una forma (n_section,2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "Entrada tiene que ser un tensor de rango 2"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "Máximo número de dimensiones es 4"
#~ msgid "Watchdog timer expired."
#~ msgstr "Temporizador de perro guardián expirado."
@ -5210,9 +5251,6 @@ msgstr "zi debe ser una forma (n_section,2)"
#~ msgid "wrong argument type"
#~ msgstr "tipo de argumento incorrecto"
#~ msgid "wrong index type"
#~ msgstr "tipo de índice incorrecto"
#~ msgid "specify size or data, but not both"
#~ msgstr "especifique o tamaño o datos, pero no ambos"

View File

@ -2372,6 +2372,10 @@ msgstr ""
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2746,6 +2750,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2841,6 +2849,10 @@ msgstr ""
msgid "empty"
msgstr "walang laman"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "walang laman ang heap"
@ -2945,7 +2957,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3094,7 +3106,7 @@ msgstr "hindi kumpleto ang format key"
msgid "incorrect padding"
msgstr "mali ang padding"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3161,6 +3173,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3169,11 +3185,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3378,7 +3390,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3627,7 +3639,7 @@ msgstr "odd-length string"
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3779,6 +3791,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() na may 3 argumento kailangan ng integers"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4217,6 +4230,14 @@ msgstr "hindi sinusuportahang type para sa operator"
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4258,7 +4279,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr ""
@ -4266,6 +4297,10 @@ msgstr ""
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "mali ang bilang ng argumento"

View File

@ -2453,6 +2453,10 @@ msgstr "les paramètres doivent être des ndarrays"
msgid "array and index length must be equal"
msgstr "la taille de la matrice et de l'index doivent être égaux"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2830,6 +2834,10 @@ msgstr "les paramêtres pour convolve doivent être des ndarrays"
msgid "convolve arguments must not be empty"
msgstr "les arguments convolve ne doivent pas être vides"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr "n'a pas pu inverser la matrice Vandermonde"
@ -2924,6 +2932,10 @@ msgstr "le dtype doit être un flottant, ou un complexe"
msgid "empty"
msgstr "vide"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "tas vide"
@ -3027,7 +3039,7 @@ msgstr "le premier argument doit être une fonction"
msgid "first argument must be a tuple of ndarrays"
msgstr "le premier paramêtre doit être un tuple de ndarrays"
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr "le premier paramêtre doit être un ndarray"
@ -3175,7 +3187,7 @@ msgstr "clé de format incomplète"
msgid "incorrect padding"
msgstr "espacement incorrect"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr "l'index est hors limites"
@ -3243,6 +3255,10 @@ msgstr "la matrice d'entrée est asymétrique"
msgid "input matrix is singular"
msgstr "la matrice d'entrée est singulière"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr "l'entrée doit être un ndarray 1D"
@ -3251,11 +3267,7 @@ msgstr "l'entrée doit être un ndarray 1D"
msgid "input must be a dense ndarray"
msgstr "l'entrée doit être un ndarray dense"
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr "l'entrée doit être un tenseur de rang 2"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr "l'entrée doit être un ndarray"
@ -3462,8 +3474,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length doit être 0-%d lorsque fixed_length est %s"
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgstr "nombre maximal de dimensions est 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
msgid "maximum recursion depth exceeded"
@ -3713,7 +3725,7 @@ msgstr "chaîne de longueur impaire"
msgid "off"
msgstr "inactif"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr "offset est trop large"
@ -3866,6 +3878,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() avec 3 arguments nécessite des entiers"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr "bouton boot appuyé lors du démarrage.\n"
@ -4304,6 +4317,14 @@ msgstr "type non supporté pour l'opérateur"
msgid "unsupported types for %q: '%q', '%q'"
msgstr "types non supportés pour %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4345,7 +4366,17 @@ msgstr "index d'axe incorrecte"
msgid "wrong axis specified"
msgstr "axe incorrecte spécifiée"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "type d'index incorrect"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr "type d'entrée incorrect"
@ -4353,6 +4384,10 @@ msgstr "type d'entrée incorrect"
msgid "wrong length of condition array"
msgstr "mauvaise taille du tableau de condition"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "mauvais nombres d'arguments"
@ -4397,6 +4432,12 @@ msgstr "zi doit être de type float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi doit être de forme (n_section, 2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "l'entrée doit être un tenseur de rang 2"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "nombre maximal de dimensions est 4"
#~ msgid "Watchdog timer expired."
#~ msgstr "Le minuteur Watchdog a expiré."
@ -5270,9 +5311,6 @@ msgstr "zi doit être de forme (n_section, 2)"
#~ msgid "wrong argument type"
#~ msgstr "type d'argument incorrect"
#~ msgid "wrong index type"
#~ msgstr "type d'index incorrect"
#~ msgid "Must provide SCK pin"
#~ msgstr "Vous devez fournir un code PIN SCK"

View File

@ -2352,6 +2352,10 @@ msgstr ""
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2719,6 +2723,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2810,6 +2818,10 @@ msgstr ""
msgid "empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr ""
@ -2913,7 +2925,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3061,7 +3073,7 @@ msgstr ""
msgid "incorrect padding"
msgstr ""
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3128,6 +3140,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3136,11 +3152,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3341,7 +3353,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3590,7 +3602,7 @@ msgstr ""
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3740,6 +3752,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4175,6 +4188,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4216,7 +4237,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr ""
@ -4224,6 +4255,10 @@ msgstr ""
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr ""

View File

@ -2382,6 +2382,10 @@ msgstr ""
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2755,6 +2759,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2849,6 +2857,10 @@ msgstr ""
msgid "empty"
msgstr "vuoto"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "heap vuoto"
@ -2953,7 +2965,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3102,7 +3114,7 @@ msgstr ""
msgid "incorrect padding"
msgstr "padding incorretto"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3169,6 +3181,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3177,11 +3193,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3387,7 +3399,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3638,7 +3650,7 @@ msgstr "stringa di lunghezza dispari"
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3792,6 +3804,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() con 3 argomenti richiede interi"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4230,6 +4243,14 @@ msgstr "tipo non supportato per l'operando"
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4271,7 +4292,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr ""
@ -4279,6 +4310,10 @@ msgstr ""
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "numero di argomenti errato"

View File

@ -2366,6 +2366,10 @@ msgstr "引数はndarrayでなければなりません"
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2735,6 +2739,10 @@ msgstr "convolve引数はndarrayでなければなりません"
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr "ヴァンデルモンド行列の逆行列を求められません"
@ -2828,6 +2836,10 @@ msgstr ""
msgid "empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr ""
@ -2931,7 +2943,7 @@ msgstr "1つ目の引数は関数でなければなりません"
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr "1つ目の引数はndarrayでなければなりません"
@ -3079,7 +3091,7 @@ msgstr ""
msgid "incorrect padding"
msgstr ""
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3147,6 +3159,10 @@ msgstr "入力行列が非対称"
msgid "input matrix is singular"
msgstr "入力が非正則行列"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3155,11 +3171,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3360,7 +3372,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3609,7 +3621,7 @@ msgstr "奇数長の文字列"
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3761,6 +3773,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow()の第3引数には整数が必要"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4197,6 +4210,14 @@ msgstr "演算子が対応していない型"
msgid "unsupported types for %q: '%q', '%q'"
msgstr "%q が対応していない型: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4238,7 +4259,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "インデクスの型が不正"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr ""
@ -4246,6 +4277,10 @@ msgstr ""
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr ""
@ -4832,9 +4867,6 @@ msgstr ""
#~ msgid "wrong argument type"
#~ msgstr "引数の型が不正"
#~ msgid "wrong index type"
#~ msgstr "インデクスの型が不正"
#~ msgid "Must provide SCK pin"
#~ msgstr "SCKピンが必要"

View File

@ -2356,6 +2356,10 @@ msgstr ""
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2723,6 +2727,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2814,6 +2822,10 @@ msgstr ""
msgid "empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr ""
@ -2917,7 +2929,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3065,7 +3077,7 @@ msgstr ""
msgid "incorrect padding"
msgstr ""
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3132,6 +3144,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3140,11 +3156,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3345,7 +3357,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3594,7 +3606,7 @@ msgstr ""
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3744,6 +3756,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4179,6 +4192,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4220,7 +4241,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr ""
@ -4228,6 +4259,10 @@ msgstr ""
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr ""

View File

@ -2382,6 +2382,10 @@ msgstr "argumenten moeten ndarrays zijn"
msgid "array and index length must be equal"
msgstr "array en indexlengte moeten gelijk zijn"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2750,6 +2754,10 @@ msgstr "convolutie argumenten moeten ndarrays zijn"
msgid "convolve arguments must not be empty"
msgstr "convolutie argumenten mogen niet leeg zijn"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr "kon de Vandermonde matrix niet omkeren"
@ -2843,6 +2851,10 @@ msgstr ""
msgid "empty"
msgstr "leeg"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "lege heap"
@ -2946,7 +2958,7 @@ msgstr "eerste argument moet een functie zijn"
msgid "first argument must be a tuple of ndarrays"
msgstr "eerste argument moet een tupel van ndarrays zijn"
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr "eerst argument moet een ndarray zijn"
@ -3095,7 +3107,7 @@ msgstr "incomplete formaatsleutel"
msgid "incorrect padding"
msgstr "vulling (padding) is onjuist"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr "index is buiten bereik"
@ -3162,6 +3174,10 @@ msgstr "invoermatrix is asymmetrisch"
msgid "input matrix is singular"
msgstr "invoermatrix is singulier"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3170,11 +3186,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr "invoer moet een gesloten ndarray zijn"
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr "invoer moet een tensor van rang 2 zijn"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr "invoer moet een ndarray zijn"
@ -3378,8 +3390,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length moet 0-%d zijn als fixed_length %s is"
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgstr "maximaal aantal dimensies is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
msgid "maximum recursion depth exceeded"
@ -3627,7 +3639,7 @@ msgstr "string met oneven lengte"
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr "compensatie is te groot"
@ -3777,6 +3789,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() met 3 argumenten vereist integers"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr "druk bootknop in bij opstarten.\n"
@ -4214,6 +4227,14 @@ msgstr "niet ondersteund type voor operator"
msgid "unsupported types for %q: '%q', '%q'"
msgstr "niet ondersteunde types voor %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4255,7 +4276,17 @@ msgstr "foute index voor as"
msgid "wrong axis specified"
msgstr "onjuiste as gespecificeerd"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "onjuist indextype"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr "onjuist invoertype"
@ -4263,6 +4294,10 @@ msgstr "onjuist invoertype"
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "onjuist aantal argumenten"
@ -4307,6 +4342,12 @@ msgstr "zi moet van type float zijn"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi moet vorm (n_section, 2) hebben"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "invoer moet een tensor van rang 2 zijn"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "maximaal aantal dimensies is 4"
#~ msgid "Watchdog timer expired."
#~ msgstr "Watchdog-timer verstreken."
@ -5037,9 +5078,6 @@ msgstr "zi moet vorm (n_section, 2) hebben"
#~ msgid "wrong argument type"
#~ msgstr "onjuist argumenttype"
#~ msgid "wrong index type"
#~ msgstr "onjuist indextype"
#~ msgid "Must provide SCK pin"
#~ msgstr "SCK pin moet opgegeven worden"

View File

@ -2363,6 +2363,10 @@ msgstr ""
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2730,6 +2734,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2822,6 +2830,10 @@ msgstr ""
msgid "empty"
msgstr "puste"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "pusta sterta"
@ -2925,7 +2937,7 @@ msgstr "pierwszy argument musi być funkcją"
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3073,7 +3085,7 @@ msgstr "niepełny klucz formatu"
msgid "incorrect padding"
msgstr "złe wypełnienie"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr "indeks jest poza zakresem"
@ -3140,6 +3152,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3148,11 +3164,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3353,7 +3365,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3602,7 +3614,7 @@ msgstr "łańcuch o nieparzystej długości"
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3753,6 +3765,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "trzyargumentowe pow() wymaga liczb całkowitych"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4189,6 +4202,14 @@ msgstr "zły typ dla operatora"
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4230,7 +4251,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "zły typ indeksu"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr "nieprawidłowy typ wejścia"
@ -4238,6 +4269,10 @@ msgstr "nieprawidłowy typ wejścia"
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "zła liczba argumentów"
@ -4747,9 +4782,6 @@ msgstr ""
#~ msgid "wrong argument type"
#~ msgstr "zły typ argumentu"
#~ msgid "wrong index type"
#~ msgstr "zły typ indeksu"
#~ msgid "Must provide SCK pin"
#~ msgstr "Należy podać pin SCK"

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2022-07-03 00:22+0000\n"
"PO-Revision-Date: 2022-07-12 13:10+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: \n"
"Language: pt_BR\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.13.1-dev\n"
"X-Generator: Weblate 4.14-dev\n"
#: main.c
msgid ""
@ -2435,6 +2435,10 @@ msgstr "os argumentos devem ser ndarrays"
msgid "array and index length must be equal"
msgstr "a matriz e comprimento do índice devem ser iguais"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr "a matriz possui muitas dimensões"
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2808,6 +2812,10 @@ msgstr "os argumentos convolutivos devem ser ndarrays"
msgid "convolve arguments must not be empty"
msgstr "os argumentos convolutivos não devem estar vazios"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr "arquivo corrompido"
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr "não foi possível inverter a matriz Vandermonde"
@ -2902,6 +2910,10 @@ msgstr "dtype deve ser flutuante ou complexo"
msgid "empty"
msgstr "vazio"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr "arquivo vazio"
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "a área de alocação dinâmica de variáveis (heap) está vazia"
@ -3005,7 +3017,7 @@ msgstr "o primeiro argumento deve ser uma função"
msgid "first argument must be a tuple of ndarrays"
msgstr "o primeiro argumento deve ser um tuple de ndarrays"
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr "o primeiro argumento deve ser um ndarray"
@ -3153,7 +3165,7 @@ msgstr "a chave do formato está incompleto"
msgid "incorrect padding"
msgstr "preenchimento incorreto"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr "o índice está fora dos limites"
@ -3221,6 +3233,10 @@ msgstr "a matriz da entrada é assimétrica"
msgid "input matrix is singular"
msgstr "a matriz da entrada é singular"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr "a entrada deve ser 1- ou 2-d"
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr "a entrada deve ser um 1D ndarray"
@ -3229,11 +3245,7 @@ msgstr "a entrada deve ser um 1D ndarray"
msgid "input must be a dense ndarray"
msgstr "a entrada deve ser um ndarray denso"
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr "a entrada dos dados deve ser um tensor de nível 2"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr "a entrada deve ser um ndarray"
@ -3437,8 +3449,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "o max_length deve ser 0-%d quando Fixed_length for %s"
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgstr "O número máximo de dimensões são 4"
msgid "maximum number of dimensions is "
msgstr "a quantidade máxima de dimensões é "
#: py/runtime.c
msgid "maximum recursion depth exceeded"
@ -3688,7 +3700,7 @@ msgstr "sequência com comprimento ímpar"
msgid "off"
msgstr "desligado"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr "o offset é muito grande"
@ -3843,6 +3855,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "o pow() com 3 argumentos requer números inteiros"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr "pressionando o botão de boot na inicialização.\n"
@ -4280,6 +4293,14 @@ msgstr "tipo não compatível para o operador"
msgid "unsupported types for %q: '%q', '%q'"
msgstr "tipo sem suporte para %q: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr "usecols é muito alto"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr "palavra-chave para o usecols deve ser definida"
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4321,7 +4342,17 @@ msgstr "índice do eixo errado"
msgid "wrong axis specified"
msgstr "um eixo errado foi definido"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr "dtype errado"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "tipo do índice errado"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr "tipo da entrada incorreta"
@ -4329,6 +4360,10 @@ msgstr "tipo da entrada incorreta"
msgid "wrong length of condition array"
msgstr "comprimento errado na condição da matriz"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr "comprimento errado do índice da matriz"
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "quantidade errada dos argumentos"
@ -4373,6 +4408,12 @@ msgstr "zi deve ser de um tipo float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi deve estar na forma (n_section, 2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "a entrada dos dados deve ser um tensor de nível 2"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "O número máximo de dimensões são 4"
#~ msgid "Watchdog timer expired."
#~ msgstr "O temporizador Watchdog expirou."
@ -5295,9 +5336,6 @@ msgstr "zi deve estar na forma (n_section, 2)"
#~ msgid "wrong argument type"
#~ msgstr "tipo do argumento errado"
#~ msgid "wrong index type"
#~ msgstr "tipo do índice errado"
#~ msgid "specify size or data, but not both"
#~ msgstr "defina o tamanho ou os dados, porém não ambos"

View File

@ -2401,6 +2401,10 @@ msgstr ""
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2768,6 +2772,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2859,6 +2867,10 @@ msgstr ""
msgid "empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr ""
@ -2962,7 +2974,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3110,7 +3122,7 @@ msgstr ""
msgid "incorrect padding"
msgstr ""
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3177,6 +3189,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3185,11 +3201,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3390,7 +3402,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3639,7 +3651,7 @@ msgstr ""
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3789,6 +3801,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4224,6 +4237,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4265,7 +4286,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr ""
@ -4273,6 +4304,10 @@ msgstr ""
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr ""

View File

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2022-07-01 17:46+0000\n"
"PO-Revision-Date: 2022-07-12 13:10+0000\n"
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: sv\n"
@ -14,7 +14,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.13.1-dev\n"
"X-Generator: Weblate 4.14-dev\n"
#: main.c
msgid ""
@ -2405,6 +2405,10 @@ msgstr "argumenten måste vara ndarray"
msgid "array and index length must be equal"
msgstr "array och indexlängd måste vara lika"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr "array har för många dimensioner"
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2774,6 +2778,10 @@ msgstr "Argumenten convolve måste vara ndarray:er"
msgid "convolve arguments must not be empty"
msgstr "Argumenten convolve kan inte vara tomma"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr "korrupt fil"
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr "kan inte invertera Vandermonde-matris"
@ -2868,6 +2876,10 @@ msgstr "dtype måste vara float eller complex"
msgid "empty"
msgstr "tom"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr "tom fil"
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "tom heap"
@ -2971,7 +2983,7 @@ msgstr "första argumentet måste vara en funktion"
msgid "first argument must be a tuple of ndarrays"
msgstr "första argumentet måste vara en tupel av ndarray"
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr "första argumentet måste vara en ndarray"
@ -3119,7 +3131,7 @@ msgstr "ofullständig formatnyckel"
msgid "incorrect padding"
msgstr "felaktig utfyllnad"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr "index är utanför gränserna"
@ -3186,6 +3198,10 @@ msgstr "indatamatrisen är asymmetrisk"
msgid "input matrix is singular"
msgstr "indatamatrisen är singulär"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr "input måste vara 1- eller 2-d"
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr "indata måste vara en 1D ndarray"
@ -3194,11 +3210,7 @@ msgstr "indata måste vara en 1D ndarray"
msgid "input must be a dense ndarray"
msgstr "indata måste vara en dense ndarray"
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr "indata måste vara en tensor av rank 2"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr "indata måste vara en ndarray"
@ -3402,8 +3414,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "max_length måste vara 0-%d när fixed_length är %s"
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgstr "maximalt antal dimensioner är 4"
msgid "maximum number of dimensions is "
msgstr "maximalt antal dimensioner är "
#: py/runtime.c
msgid "maximum recursion depth exceeded"
@ -3651,7 +3663,7 @@ msgstr "sträng har udda längd"
msgid "off"
msgstr "av"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr "offset är för stor"
@ -3802,6 +3814,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() med 3 argument kräver heltal"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr "trycka på startknappen vid start.\n"
@ -4239,6 +4252,14 @@ msgstr "typ stöds inte för operatören"
msgid "unsupported types for %q: '%q', '%q'"
msgstr "typen %q stöder inte '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr "usecols är för hög"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr "nyckelordet usecols måste anges"
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4280,7 +4301,17 @@ msgstr "fel axelindex"
msgid "wrong axis specified"
msgstr "fel axel angiven"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr "fel dtype"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "fel indextyp"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr "fel indatatyp"
@ -4288,6 +4319,10 @@ msgstr "fel indatatyp"
msgid "wrong length of condition array"
msgstr "fel längd på villkorsmatrisen"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr "fel längd av index array"
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "fel antal argument"
@ -4332,6 +4367,12 @@ msgstr "zi måste vara av typ float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi måste vara i formen (n_section, 2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "indata måste vara en tensor av rank 2"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "maximalt antal dimensioner är 4"
#~ msgid "Watchdog timer expired."
#~ msgstr "Watchdog-timern har löpt ut."
@ -5236,9 +5277,6 @@ msgstr "zi måste vara i formen (n_section, 2)"
#~ msgid "wrong argument type"
#~ msgstr "fel typ av argument"
#~ msgid "wrong index type"
#~ msgstr "fel indextyp"
#~ msgid "specify size or data, but not both"
#~ msgstr "ange storlek eller data, men inte båda"

View File

@ -2372,6 +2372,10 @@ msgstr ""
msgid "array and index length must be equal"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2739,6 +2743,10 @@ msgstr ""
msgid "convolve arguments must not be empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr ""
@ -2830,6 +2838,10 @@ msgstr ""
msgid "empty"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr ""
@ -2933,7 +2945,7 @@ msgstr ""
msgid "first argument must be a tuple of ndarrays"
msgstr ""
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr ""
@ -3081,7 +3093,7 @@ msgstr ""
msgid "incorrect padding"
msgstr ""
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr ""
@ -3148,6 +3160,10 @@ msgstr ""
msgid "input matrix is singular"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr ""
@ -3156,11 +3172,7 @@ msgstr ""
msgid "input must be a dense ndarray"
msgstr ""
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr ""
@ -3361,7 +3373,7 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr ""
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
@ -3610,7 +3622,7 @@ msgstr ""
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr ""
@ -3760,6 +3772,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr ""
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr ""
@ -4195,6 +4208,14 @@ msgstr ""
msgid "unsupported types for %q: '%q', '%q'"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4236,7 +4257,17 @@ msgstr ""
msgid "wrong axis specified"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr ""
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr ""
@ -4244,6 +4275,10 @@ msgstr ""
msgid "wrong length of condition array"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr ""

View File

@ -2416,6 +2416,10 @@ msgstr "cānshù bìxū shì ndarrays"
msgid "array and index length must be equal"
msgstr "shù zǔ hé suǒ yǐn cháng dù bì xū xiāng děng"
#: extmod/ulab/code/numpy/io/io.c
msgid "array has too many dimensions"
msgstr ""
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
#: shared-bindings/nvm/ByteArray.c
msgid "array/bytes required on right side"
@ -2787,6 +2791,10 @@ msgstr "juàn jī cānshù bìxū shì ndarrays"
msgid "convolve arguments must not be empty"
msgstr "juàn jī cān shǔ bùnéng wéi kōng"
#: extmod/ulab/code/numpy/io/io.c
msgid "corrupted file"
msgstr ""
#: extmod/ulab/code/numpy/poly.c
msgid "could not invert Vandermonde matrix"
msgstr "wúfǎ fǎn zhuǎn fàndéméng dé jǔzhèn"
@ -2880,6 +2888,10 @@ msgstr "dtype bì xū shì fú diǎn xíng huò fù shù"
msgid "empty"
msgstr "kòngxián"
#: extmod/ulab/code/numpy/io/io.c
msgid "empty file"
msgstr ""
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
msgid "empty heap"
msgstr "kōng yīn yīnxiào"
@ -2983,7 +2995,7 @@ msgstr "dì yīgè cānshù bìxū shì yī gè hánshù"
msgid "first argument must be a tuple of ndarrays"
msgstr "dì yī gè cān shù bì xū shì yí gè yuán zǔ ndarrays"
#: extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/transform.c extmod/ulab/code/numpy/vector.c
msgid "first argument must be an ndarray"
msgstr "dì yī gè cānshù bìxū shì ndarray"
@ -3131,7 +3143,7 @@ msgstr "géshì bù wánzhěng de mì yào"
msgid "incorrect padding"
msgstr "bù zhèngquè de tiánchōng"
#: extmod/ulab/code/ndarray.c
#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c
msgid "index is out of bounds"
msgstr "suǒyǐn chāochū fànwéi"
@ -3198,6 +3210,10 @@ msgstr "shūrù jǔzhèn bù duìchèn"
msgid "input matrix is singular"
msgstr "shūrù jǔzhèn shì qíyì de"
#: extmod/ulab/code/numpy/create.c
msgid "input must be 1- or 2-d"
msgstr ""
#: extmod/ulab/code/numpy/carray/carray.c
msgid "input must be a 1D ndarray"
msgstr "shū rù bì xū shì 1D ndarray"
@ -3206,11 +3222,7 @@ msgstr "shū rù bì xū shì 1D ndarray"
msgid "input must be a dense ndarray"
msgstr "shū rù bì xū shì mì jí de ndarray"
#: extmod/ulab/code/numpy/create.c
msgid "input must be a tensor of rank 2"
msgstr "shū rù bì xū shì děng jí 2 de zhāng liàng"
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/user/user.c
#: extmod/ulab/code/user/user.c
msgid "input must be an ndarray"
msgstr "shū rù bì xū shì ndarray"
@ -3412,8 +3424,8 @@ msgid "max_length must be 0-%d when fixed_length is %s"
msgstr "dāng fixed_length de zhí wéi %s shí, max_length bì xū wéi 0-%d"
#: extmod/ulab/code/ndarray.c
msgid "maximum number of dimensions is 4"
msgstr "zuì dà chǐ cùn shù wéi 4"
msgid "maximum number of dimensions is "
msgstr ""
#: py/runtime.c
msgid "maximum recursion depth exceeded"
@ -3661,7 +3673,7 @@ msgstr "jīshù zìfú chuàn"
msgid "off"
msgstr ""
#: extmod/ulab/code/numpy/create.c extmod/ulab/code/utils/utils.c
#: extmod/ulab/code/utils/utils.c
msgid "offset is too large"
msgstr "piān yí tài dà"
@ -3811,6 +3823,7 @@ msgid "pow() with 3 arguments requires integers"
msgstr "pow() yǒu 3 cānshù xūyào zhěngshù"
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
#: supervisor/shared/safe_mode.c
msgid "pressing boot button at start up.\n"
msgstr "Zài qǐdòng shí àn qǐdòng ànniǔ.\n"
@ -4251,6 +4264,14 @@ msgstr "bù zhīchí de cāozuò zhě lèixíng"
msgid "unsupported types for %q: '%q', '%q'"
msgstr "%q bù zhīchí de lèixíng: '%q', '%q'"
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols is too high"
msgstr ""
#: extmod/ulab/code/numpy/io/io.c
msgid "usecols keyword must be specified"
msgstr ""
#: py/objint.c
#, c-format
msgid "value must fit in %d byte(s)"
@ -4292,7 +4313,17 @@ msgstr "cuò wù de zhóu suǒ yǐn"
msgid "wrong axis specified"
msgstr "zhǐ dìng de zhóu cuò wù"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c
#: extmod/ulab/code/numpy/io/io.c
msgid "wrong dtype"
msgstr ""
#: extmod/ulab/code/numpy/transform.c
msgid "wrong index type"
msgstr "cuòwù de suǒyǐn lèixíng"
#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/create.c
#: extmod/ulab/code/numpy/io/io.c extmod/ulab/code/numpy/transform.c
#: extmod/ulab/code/numpy/vector.c
msgid "wrong input type"
msgstr "shūrù lèixíng cuòwù"
@ -4300,6 +4331,10 @@ msgstr "shūrù lèixíng cuòwù"
msgid "wrong length of condition array"
msgstr "tiáo jiàn shù zǔ de cháng dù cuò wù"
#: extmod/ulab/code/numpy/transform.c
msgid "wrong length of index array"
msgstr ""
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
msgid "wrong number of arguments"
msgstr "cānshù shù cuòwù"
@ -4344,6 +4379,12 @@ msgstr "zi bìxū wèi fú diǎn xíng"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)"
#~ msgid "input must be a tensor of rank 2"
#~ msgstr "shū rù bì xū shì děng jí 2 de zhāng liàng"
#~ msgid "maximum number of dimensions is 4"
#~ msgstr "zuì dà chǐ cùn shù wéi 4"
#~ msgid "Watchdog timer expired."
#~ msgstr "Kān mén gǒu dìngshí qì yǐ guòqí."
@ -5214,9 +5255,6 @@ msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)"
#~ msgid "wrong argument type"
#~ msgstr "cuòwù de cānshù lèixíng"
#~ msgid "wrong index type"
#~ msgstr "cuòwù de suǒyǐn lèixíng"
#~ msgid "Must provide SCK pin"
#~ msgstr "bì xū tí gòng SCK yǐn jiǎo"

View File

@ -13,6 +13,8 @@ LONGINT_IMPL = MPZ
CIRCUITPY_LTO_PARTITION = one
CIRCUITPY_AESIO = 0
CIRCUITPY_FLOPPYIO = 0
CIRCUITPY_GIFIO = 0
CIRCUITPY_ONEWIREIO = 0
CIRCUITPY_PARALLELDISPLAY = 0
CIRCUITPY_SDCARDIO = 0

View File

@ -1,11 +1,11 @@
# Select the board to build for.
BOARD=raspberrypi_pi4
BOARD?=raspberrypi_pi4b
ifeq ($(BOARD),)
$(error You must provide a BOARD parameter)
else
ifeq ($(wildcard boards/$(BOARD)/.),)
$(error Invalid BOARD specified)
$(error Invalid BOARD "$(BOARD)" specified)
endif
endif

View File

@ -0,0 +1,110 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "supervisor/board.h"
#include "mpconfigboard.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/busio/SPI.h"
#include "shared-bindings/displayio/FourWire.h"
#include "shared-module/displayio/__init__.h"
#include "shared-module/displayio/mipi_constants.h"
uint8_t display_init_sequence[] = {
0x01, 0x80, 0x96, // _SWRESET and Delay 150ms
0x11, 0x80, 0xFF, // _SLPOUT and Delay 500ms
0x3A, 0x81, 0x55, 0x0A, // _COLMOD and Delay 10ms
0x21, 0x80, 0x0A, // _INVON
0x13, 0x80, 0x0A, // _NORON and Delay 10ms
0x36, 0x01, 0xA0, // _MADCTL
0x29, 0x80, 0xFF, // _DISPON and Delay 500ms
};
void board_init(void) {
busio_spi_obj_t *spi = &displays[0].fourwire_bus.inline_bus;
common_hal_busio_spi_construct(spi, &pin_GPIO7, &pin_GPIO6, NULL, false);
common_hal_busio_spi_never_reset(spi);
displayio_fourwire_obj_t *bus = &displays[0].fourwire_bus;
bus->base.type = &displayio_fourwire_type;
common_hal_displayio_fourwire_construct(bus,
spi,
&pin_GPIO4, // TFT_DC Command or data
&pin_GPIO5, // TFT_CS Chip select
&pin_GPIO48, // TFT_RST Reset
60000000, // Baudrate
0, // Polarity
0); // Phase
displayio_display_obj_t *display = &displays[0].display;
display->base.type = &displayio_display_type;
common_hal_displayio_display_construct(display,
bus,
320, // Width
240, // Height
0, // column start
0, // row start
0, // rotation
16, // Color depth
false, // Grayscale
false, // pixels in a byte share a row. Only valid for depths < 8
1, // bytes per cell. Only valid for depths < 8
false, // reverse_pixels_in_byte. Only valid for depths < 8
true, // reverse_pixels_in_word
MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command
display_init_sequence,
sizeof(display_init_sequence),
&pin_GPIO45, // backlight pin
NO_BRIGHTNESS_COMMAND,
1.0f, // brightness (ignored)
true, // auto_brightness
false, // single_byte_bounds
false, // data_as_commands
true, // auto_refresh
60, // native_frames_per_second
false, // backlight_on_high
false, // SH1107_addressing
50000); // backlight pwm frequency
// Debug UART
#ifdef DEBUG
common_hal_never_reset_pin(&pin_GPIO43);
common_hal_never_reset_pin(&pin_GPIO44);
#endif
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}
void board_deinit(void) {
}

View File

@ -0,0 +1,30 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
// Micropython setup
#define MICROPY_HW_BOARD_NAME "ESP32-S3-Box-Lite"
#define MICROPY_HW_MCU_NAME "ESP32S3"

View File

@ -0,0 +1,17 @@
USB_VID = 0x303A
USB_PID = 0x700D
USB_PRODUCT = "ESP32-S3-Box-Lite"
USB_MANUFACTURER = "Espressif"
IDF_TARGET = esp32s3
INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = MPZ
# The default queue depth of 16 overflows on release builds,
# so increase it to 32.
CFLAGS += -DCFG_TUD_TASK_QUEUE_SZ=32
CIRCUITPY_ESP_FLASH_MODE=dio
CIRCUITPY_ESP_FLASH_FREQ=40m
CIRCUITPY_ESP_FLASH_SIZE=16MB

View File

@ -0,0 +1,67 @@
#include "shared-bindings/board/__init__.h"
#include "shared-module/displayio/__init__.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
// First PMOD connector
{ MP_ROM_QSTR(MP_QSTR_G9), MP_ROM_PTR(&pin_GPIO9) },
{ MP_ROM_QSTR(MP_QSTR_U0TXD), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_G43), MP_ROM_PTR(&pin_GPIO43) },
{ MP_ROM_QSTR(MP_QSTR_U0RXD), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_G44), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_CS), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_G10), MP_ROM_PTR(&pin_GPIO10) },
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_G11), MP_ROM_PTR(&pin_GPIO11) },
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_G13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_CLK), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_G12), MP_ROM_PTR(&pin_GPIO12) },
{ MP_ROM_QSTR(MP_QSTR_G14), MP_ROM_PTR(&pin_GPIO14) },
// Second PMOD connector
{ MP_ROM_QSTR(MP_QSTR_G38), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_G39), MP_ROM_PTR(&pin_GPIO39) },
{ MP_ROM_QSTR(MP_QSTR_SCL2), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_G40), MP_ROM_PTR(&pin_GPIO40) },
{ MP_ROM_QSTR(MP_QSTR_SDA2), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_G41), MP_ROM_PTR(&pin_GPIO41) },
{ MP_ROM_QSTR(MP_QSTR_G42), MP_ROM_PTR(&pin_GPIO42) },
{ MP_ROM_QSTR(MP_QSTR_G21), MP_ROM_PTR(&pin_GPIO21) },
// LCD & touchscreen
{ MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO5) },
{ MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO6) },
{ MP_ROM_QSTR(MP_QSTR_LCD_SCK), MP_ROM_PTR(&pin_GPIO7) },
{ MP_ROM_QSTR(MP_QSTR_LCD_RST), MP_ROM_PTR(&pin_GPIO48) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CTRL), MP_ROM_PTR(&pin_GPIO45) },
{ MP_ROM_QSTR(MP_QSTR_CTP_INT), MP_ROM_PTR(&pin_GPIO3) },
// Audio
{ MP_ROM_QSTR(MP_QSTR_I2S_ADC_SDOUT), MP_ROM_PTR(&pin_GPIO16) },
{ MP_ROM_QSTR(MP_QSTR_I2S_MCLK), MP_ROM_PTR(&pin_GPIO2) },
{ MP_ROM_QSTR(MP_QSTR_I2S_SCLK), MP_ROM_PTR(&pin_GPIO17) },
{ MP_ROM_QSTR(MP_QSTR_I2S_LRCK), MP_ROM_PTR(&pin_GPIO47) },
{ MP_ROM_QSTR(MP_QSTR_I2S_CODEC_DSDIN), MP_ROM_PTR(&pin_GPIO15) },
{ MP_ROM_QSTR(MP_QSTR_PA_CTRL), MP_ROM_PTR(&pin_GPIO46) },
{ MP_ROM_QSTR(MP_QSTR_MUTE_STATUS), MP_ROM_PTR(&pin_GPIO1) },
// Internal I2C bus
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO8) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO18) },
// boot button, also usable as a software button
{ MP_ROM_QSTR(MP_QSTR_BOOT), MP_ROM_PTR(&pin_GPIO0) },
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)}
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View File

@ -0,0 +1,37 @@
CONFIG_ESP32S3_SPIRAM_SUPPORT=y
#
# SPI RAM config
#
# CONFIG_SPIRAM_MODE_QUAD is not set
CONFIG_SPIRAM_MODE_OCT=y
CONFIG_SPIRAM_TYPE_AUTO=y
# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set
CONFIG_SPIRAM_SIZE=-1
# end of SPI RAM config
CONFIG_DEFAULT_PSRAM_CLK_IO=30
#
# PSRAM Clock and CS IO for ESP32S3
#
CONFIG_DEFAULT_PSRAM_CS_IO=26
# end of PSRAM Clock and CS IO for ESP32S3
# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set
# CONFIG_SPIRAM_RODATA is not set
CONFIG_SPIRAM_SPEED_80M=y
# CONFIG_SPIRAM_SPEED_40M is not set
CONFIG_SPIRAM=y
CONFIG_SPIRAM_BOOT_INIT=y
# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set
# CONFIG_SPIRAM_USE_MEMMAP is not set
# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set
CONFIG_SPIRAM_USE_MALLOC=y
CONFIG_SPIRAM_MEMTEST=y
CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384
# CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set
CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768
#
# LWIP
#
CONFIG_LWIP_LOCAL_HOSTNAME="espressif-esp32s3"
# end of LWIP

View File

@ -0,0 +1,57 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/hashlib/Hash.h"
#include "components/mbedtls/mbedtls/include/mbedtls/ssl.h"
void common_hal_hashlib_hash_update(hashlib_hash_obj_t *self, const uint8_t *data, size_t datalen) {
if (self->hash_type == MBEDTLS_SSL_HASH_SHA1) {
mbedtls_sha1_update_ret(&self->sha1, data, datalen);
return;
}
}
void common_hal_hashlib_hash_digest(hashlib_hash_obj_t *self, uint8_t *data, size_t datalen) {
if (datalen < common_hal_hashlib_hash_get_digest_size(self)) {
return;
}
if (self->hash_type == MBEDTLS_SSL_HASH_SHA1) {
// We copy the sha1 state so we can continue to update if needed or get
// the digest a second time.
mbedtls_sha1_context copy;
mbedtls_sha1_clone(&copy, &self->sha1);
mbedtls_sha1_finish_ret(&self->sha1, data);
mbedtls_sha1_clone(&self->sha1, &copy);
}
}
size_t common_hal_hashlib_hash_get_digest_size(hashlib_hash_obj_t *self) {
if (self->hash_type == MBEDTLS_SSL_HASH_SHA1) {
return 20;
}
return 0;
}

View File

@ -0,0 +1,41 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_ESPRESSIF_COMMON_HAL_HASHLIB_HASH_H
#define MICROPY_INCLUDED_ESPRESSIF_COMMON_HAL_HASHLIB_HASH_H
#include "components/mbedtls/mbedtls/include/mbedtls/sha1.h"
typedef struct {
mp_obj_base_t base;
union {
mbedtls_sha1_context sha1;
};
// Of MBEDTLS_SSL_HASH_*
uint8_t hash_type;
} hashlib_hash_obj_t;
#endif // MICROPY_INCLUDED_ESPRESSIF_COMMON_HAL_HASHLIB_HASH_H

View File

@ -0,0 +1,40 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/hashlib/__init__.h"
#include "components/mbedtls/mbedtls/include/mbedtls/ssl.h"
bool common_hal_hashlib_new(hashlib_hash_obj_t *self, const char *algorithm) {
if (strcmp(algorithm, "sha1") == 0) {
self->hash_type = MBEDTLS_SSL_HASH_SHA1;
mbedtls_sha1_init(&self->sha1);
mbedtls_sha1_starts_ret(&self->sha1);
return true;
}
return false;
}

View File

@ -139,14 +139,14 @@ void common_hal_wifi_radio_set_mac_address(wifi_radio_obj_t *self, const uint8_t
esp_wifi_set_mac(ESP_IF_WIFI_STA, mac);
}
uint8_t common_hal_wifi_radio_get_tx_power(wifi_radio_obj_t *self) {
mp_float_t common_hal_wifi_radio_get_tx_power(wifi_radio_obj_t *self) {
int8_t tx_power;
esp_wifi_get_max_tx_power(&tx_power);
return tx_power / 4;
return tx_power / 4.0f;
}
void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const uint8_t tx_power) {
esp_wifi_set_max_tx_power(tx_power * 4);
void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const mp_float_t tx_power) {
esp_wifi_set_max_tx_power(tx_power * 4.0f);
}
mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self) {

View File

@ -19,6 +19,7 @@ CIRCUITPY_COUNTIO ?= 1
CIRCUITPY_DUALBANK ?= 1
CIRCUITPY_FRAMEBUFFERIO ?= 1
CIRCUITPY_FREQUENCYIO ?= 1
CIRCUITPY_HASHLIB ?= 1
CIRCUITPY_IMAGECAPTURE ?= 1
CIRCUITPY_I2CPERIPHERAL ?= 1
CIRCUITPY_RGBMATRIX ?= 1

View File

@ -1,2 +1,4 @@
#define MICROPY_HW_BOARD_NAME "ELECFREAKS PICO:ED"
#define MICROPY_HW_MCU_NAME "rp2040"
#define MICROPY_HW_LED_STATUS (&pin_GPIO25)

View File

@ -311,7 +311,7 @@ uint32_t common_hal_busio_uart_rx_characters_available(busio_uart_obj_t *self) {
// The UART only interrupts after a threshold so make sure to copy anything
// out of its FIFO before measuring how many bytes we've received.
_copy_into_ringbuf(&self->ringbuf, self->uart);
irq_set_enabled(self->uart_irq_id, false);
irq_set_enabled(self->uart_irq_id, true);
return ringbuf_num_filled(&self->ringbuf);
}

View File

@ -8,6 +8,9 @@ ifeq ($(MCU_VARIANT),$(filter $(MCU_VARIANT),STM32F405xx STM32F407xx))
CIRCUITPY_SDIOIO ?= 1
# Number of USB endpoint pairs.
USB_NUM_ENDPOINT_PAIRS = 4
endif
ifeq ($(MCU_VARIANT),STM32F407xx)
UF2_FAMILY_ID ?= 0x6d0922fa
endif

View File

@ -207,6 +207,9 @@ endif
ifeq ($(CIRCUITPY_GNSS),1)
SRC_PATTERNS += gnss/%
endif
ifeq ($(CIRCUITPY_HASHLIB),1)
SRC_PATTERNS += hashlib/%
endif
ifeq ($(CIRCUITPY_I2CPERIPHERAL),1)
SRC_PATTERNS += i2cperipheral/%
endif
@ -419,6 +422,8 @@ SRC_COMMON_HAL_ALL = \
gnss/GNSS.c \
gnss/PositionFix.c \
gnss/SatelliteSystem.c \
hashlib/__init__.c \
hashlib/Hash.c \
i2cperipheral/I2CPeripheral.c \
i2cperipheral/__init__.c \
microcontroller/Pin.c \

View File

@ -230,7 +230,7 @@ CIRCUITPY_GETPASS ?= $(CIRCUITPY_FULL_BUILD)
CFLAGS += -DCIRCUITPY_GETPASS=$(CIRCUITPY_GETPASS)
ifeq ($(CIRCUITPY_DISPLAYIO),1)
CIRCUITPY_GIFIO ?= $(CIRCUITPY_FULL_BUILD)
CIRCUITPY_GIFIO ?= $(CIRCUITPY_CAMERA)
else
CIRCUITPY_GIFIO ?= 0
endif
@ -239,6 +239,9 @@ CFLAGS += -DCIRCUITPY_GIFIO=$(CIRCUITPY_GIFIO)
CIRCUITPY_GNSS ?= 0
CFLAGS += -DCIRCUITPY_GNSS=$(CIRCUITPY_GNSS)
CIRCUITPY_HASHLIB ?= $(CIRCUITPY_WEB_WORKFLOW)
CFLAGS += -DCIRCUITPY_HASHLIB=$(CIRCUITPY_HASHLIB)
CIRCUITPY_I2CPERIPHERAL ?= $(CIRCUITPY_FULL_BUILD)
CFLAGS += -DCIRCUITPY_I2CPERIPHERAL=$(CIRCUITPY_I2CPERIPHERAL)

View File

@ -26,3 +26,7 @@ pyelftools
# for stubs and annotations
adafruit-circuitpython-typing
# for web workflow minify
minify_html
jsmin

View File

@ -0,0 +1,96 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-bindings/hashlib/Hash.h"
#include "py/obj.h"
#include "py/objproperty.h"
#include "py/objstr.h"
#include "py/runtime.h"
//| class Hash:
//| """In progress hash algorithm. This object is always created by a `hashlib.new()`. It has no
//| user-visible constructor."""
//|
//| digest_size: int
//| """Digest size in bytes"""
//|
STATIC mp_obj_t hashlib_hash_get_digest_size(mp_obj_t self_in) {
mp_check_self(mp_obj_is_type(self_in, &hashlib_hash_type));
hashlib_hash_obj_t *self = MP_OBJ_TO_PTR(self_in);
return MP_OBJ_NEW_SMALL_INT(common_hal_hashlib_hash_get_digest_size(self));
}
MP_PROPERTY_GETTER(hashlib_hash_digest_size_obj, hashlib_hash_get_digest_size);
//| def update(self, data: ReadableBuffer) -> None:
//| """Update the hash with the given bytes.
//|
//| :param ~circuitpython_typing.ReadableBuffer data: Update the hash from data in this buffer"""
//| ...
//|
mp_obj_t hashlib_hash_update(mp_obj_t self_in, mp_obj_t buf_in) {
mp_check_self(mp_obj_is_type(self_in, &hashlib_hash_type));
hashlib_hash_obj_t *self = MP_OBJ_TO_PTR(self_in);
mp_buffer_info_t bufinfo;
mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_READ);
common_hal_hashlib_hash_update(self, bufinfo.buf, bufinfo.len);
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(hashlib_hash_update_obj, hashlib_hash_update);
//| def digest(self) -> bytes:
//| """Returns the current digest as bytes() with a length of `hashlib.Hash.digest_size`."""
//| ...
//|
STATIC mp_obj_t hashlib_hash_digest(mp_obj_t self_in) {
mp_check_self(mp_obj_is_type(self_in, &hashlib_hash_type));
hashlib_hash_obj_t *self = MP_OBJ_TO_PTR(self_in);
size_t size = common_hal_hashlib_hash_get_digest_size(self);
mp_obj_t obj = mp_obj_new_bytes_of_zeros(size);
mp_obj_str_t *o = MP_OBJ_TO_PTR(obj);
common_hal_hashlib_hash_digest(self, (uint8_t *)o->data, size);
return obj;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(hashlib_hash_digest_obj, hashlib_hash_digest);
STATIC const mp_rom_map_elem_t hashlib_hash_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_digest_size), MP_ROM_PTR(&hashlib_hash_digest_size_obj) },
{ MP_ROM_QSTR(MP_QSTR_update), MP_ROM_PTR(&hashlib_hash_update_obj) },
{ MP_ROM_QSTR(MP_QSTR_digest), MP_ROM_PTR(&hashlib_hash_digest_obj) },
};
STATIC MP_DEFINE_CONST_DICT(hashlib_hash_locals_dict, hashlib_hash_locals_dict_table);
const mp_obj_type_t hashlib_hash_type = {
{ &mp_type_type },
.name = MP_QSTR_Hash,
.locals_dict = (mp_obj_dict_t *)&hashlib_hash_locals_dict,
};

View File

@ -0,0 +1,43 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB_HASH_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB_HASH_H
#include "py/obj.h"
#include "common-hal/hashlib/Hash.h"
extern const mp_obj_type_t hashlib_hash_type;
// So that new can call it when given data.
mp_obj_t hashlib_hash_update(mp_obj_t self_in, mp_obj_t buf_in);
void common_hal_hashlib_hash_update(hashlib_hash_obj_t *self, const uint8_t *data, size_t datalen);
void common_hal_hashlib_hash_digest(hashlib_hash_obj_t *self, uint8_t *data, size_t datalen);
size_t common_hal_hashlib_hash_get_digest_size(hashlib_hash_obj_t *self);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB_HASH_H

View File

@ -0,0 +1,90 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <string.h>
#include "py/obj.h"
#include "py/mpconfig.h"
#include "py/runtime.h"
#include "shared-bindings/hashlib/__init__.h"
#include "shared-bindings/hashlib/Hash.h"
#include "supervisor/shared/translate/translate.h"
//| """Hashing related functions
//|
//| |see_cpython_module| :mod:`cpython:hashlib`.
//| """
//|
//| def new(name, data=b"") -> hashlib.Hash:
//| """Returns a Hash object setup for the named algorithm. Raises ValueError when the named
//| algorithm is unsupported.
//|
//| :return: a hash object for the given algorithm
//| :rtype: hashlib.Hash"""
//| ...
//|
STATIC mp_obj_t hashlib_new(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_name, ARG_data };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_name, MP_ARG_REQUIRED | MP_ARG_OBJ },
{ MP_QSTR_data, MP_ARG_OBJ, {.u_obj = mp_const_none} },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
const char *algorithm = mp_obj_str_get_str(args[ARG_name].u_obj);
hashlib_hash_obj_t *self = m_new_obj(hashlib_hash_obj_t);
self->base.type = &hashlib_hash_type;
if (!common_hal_hashlib_new(self, algorithm)) {
mp_raise_ValueError(translate("Unsupported hash algorithm"));
}
if (args[ARG_data].u_obj != mp_const_none) {
hashlib_hash_update(self, args[ARG_data].u_obj);
}
return self;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(hashlib_new_obj, 1, hashlib_new);
STATIC const mp_rom_map_elem_t hashlib_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_hashlib) },
{ MP_ROM_QSTR(MP_QSTR_new), MP_ROM_PTR(&hashlib_new_obj) },
// Hash is deliberately omitted here because CPython doesn't expose the
// object on `hashlib` only the internal `_hashlib`.
};
STATIC MP_DEFINE_CONST_DICT(hashlib_module_globals, hashlib_module_globals_table);
const mp_obj_module_t hashlib_module = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t *)&hashlib_module_globals,
};
MP_REGISTER_MODULE(MP_QSTR_hashlib, hashlib_module, CIRCUITPY_HASHLIB);

View File

@ -0,0 +1,36 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB___INIT___H
#define MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB___INIT___H
#include <stdbool.h>
#include "shared-bindings/hashlib/Hash.h"
bool common_hal_hashlib_new(hashlib_hash_obj_t *self, const char *algorithm);
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_HASHLIB___INIT___H

View File

@ -86,6 +86,9 @@ const mp_obj_property_t keypad_generic_events_obj = {
//| connected independently to individual pins,
//| connected to a shift register,
//| or connected in a row-and-column matrix.
//|
//| For more information about working with the `keypad` module in CircuitPython,
//| see `this Learn guide <https://learn.adafruit.com/key-pad-matrix-scanning-in-circuitpython>`_.
//| """
//|

View File

@ -41,6 +41,9 @@
//|
//| Not implemented: 64-bit int, uint, float.
//|
//| For more information about working with msgpack,
//| see `the CPython Library Documentation <https://msgpack-python.readthedocs.io/en/latest/?badge=latest>`_.
//|
//| Example 1::
//|
//| import msgpack

View File

@ -31,9 +31,12 @@
#include "shared-bindings/sharpdisplay/SharpMemoryFramebuffer.h"
//| """Support for Sharp Memory Display framebuffers"""
//| """Support for Sharp Memory Display framebuffers
//|
//| For more information about working with Sharp Memory Displays,
//| see `this Learn guide <https://learn.adafruit.com/adafruit-sharp-memory-display-breakout/circuitpython-displayio-setup>`_.
//| """
//|
STATIC const mp_rom_map_elem_t sharpdisplay_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sharpdisplay) },
{ MP_ROM_QSTR(MP_QSTR_SharpMemoryFramebuffer), MP_ROM_PTR(&sharpdisplay_framebuffer_type) },

View File

@ -45,7 +45,10 @@
//| call :py:meth:`!deinit` or use a context manager. See
//| :ref:`lifetime-and-contextmanagers` for more info.
//|
//| For example::
//| For more information about working with the `touchio` module in CircuitPython,
//| see `this Learn guide page <https://learn.adafruit.com/circuitpython-essentials/circuitpython-cap-touch>`_.
//|
//| Example::
//|
//| import touchio
//| from board import *

View File

@ -138,17 +138,17 @@ MP_PROPERTY_GETSET(wifi_radio_mac_address_obj,
(mp_obj_t)&wifi_radio_get_mac_address_obj,
(mp_obj_t)&wifi_radio_set_mac_address_obj);
//| tx_power: int
//| tx_power: float
//| """Wifi transmission power, in dBm."""
//|
STATIC mp_obj_t wifi_radio_get_tx_power(mp_obj_t self_in) {
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
return mp_obj_new_int(common_hal_wifi_radio_get_tx_power(self));
return mp_obj_new_float(common_hal_wifi_radio_get_tx_power(self));
}
MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_get_tx_power_obj, wifi_radio_get_tx_power);
STATIC mp_obj_t wifi_radio_set_tx_power(mp_obj_t self_in, mp_obj_t tx_power_in) {
mp_int_t tx_power = mp_obj_get_int(tx_power_in);
mp_float_t tx_power = mp_obj_get_float(tx_power_in);
wifi_radio_obj_t *self = MP_OBJ_TO_PTR(self_in);
common_hal_wifi_radio_set_tx_power(self, tx_power);
return mp_const_none;

View File

@ -82,8 +82,8 @@ extern void common_hal_wifi_radio_set_mac_address(wifi_radio_obj_t *self, const
extern mp_obj_t common_hal_wifi_radio_get_mac_address_ap(wifi_radio_obj_t *self);
extern void common_hal_wifi_radio_set_mac_address_ap(wifi_radio_obj_t *self, const uint8_t *mac);
extern uint8_t common_hal_wifi_radio_get_tx_power(wifi_radio_obj_t *self);
extern void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const uint8_t power);
extern mp_float_t common_hal_wifi_radio_get_tx_power(wifi_radio_obj_t *self);
extern void common_hal_wifi_radio_set_tx_power(wifi_radio_obj_t *self, const mp_float_t power);
extern mp_obj_t common_hal_wifi_radio_start_scanning_networks(wifi_radio_obj_t *self);
extern void common_hal_wifi_radio_stop_scanning_networks(wifi_radio_obj_t *self);

View File

@ -45,6 +45,10 @@
#include "tusb.h"
#endif
#if CIRCUITPY_WEB_WORKFLOW
#include "supervisor/shared/web_workflow/websocket.h"
#endif
#if CIRCUITPY_CONSOLE_UART
#include "py/mpprint.h"
#include "shared-bindings/busio/UART.h"
@ -164,6 +168,13 @@ bool serial_connected(void) {
}
#endif
#if CIRCUITPY_WEB_WORKFLOW
if (websocket_connected()) {
return true;
}
#endif
if (port_serial_connected()) {
return true;
}
@ -194,6 +205,12 @@ char serial_read(void) {
}
#endif
#if CIRCUITPY_WEB_WORKFLOW
if (websocket_available()) {
return websocket_read_char();
}
#endif
#if CIRCUITPY_USB_CDC
if (!usb_cdc_console_enabled()) {
return -1;
@ -228,6 +245,12 @@ bool serial_bytes_available(void) {
}
#endif
#if CIRCUITPY_WEB_WORKFLOW
if (websocket_available()) {
return true;
}
#endif
#if CIRCUITPY_USB_CDC
if (usb_cdc_console_enabled() && tud_cdc_available() > 0) {
return true;
@ -270,6 +293,10 @@ void serial_write_substring(const char *text, uint32_t length) {
ble_serial_write(text, length);
#endif
#if CIRCUITPY_WEB_WORKFLOW
websocket_write(text, length);
#endif
#if CIRCUITPY_USB_CDC
if (!usb_cdc_console_enabled()) {
return;

View File

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html style="height: 100%;">
<head>
<title>Simple client</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="/serial.js" defer=true></script>
</head>
<body style="flex-direction: column; display: flex; height: 100%; width: 100%; margin: 0; font-size: 1rem;">
<div style="flex: auto; display: flex; overflow: auto; flex-direction: column;">
<pre id="log" style="margin:0; margin-top: auto;"></pre>
<span style="height: 1px;"></span>
</div>
<div id="controls" style="flex: none; display: flex;">
<fieldset style="display: inline-block; padding: 0;">
<legend>Ctrl</legend>
<button id="c">C</button>
<button id="d">D</button>
</fieldset>
<textarea id="input" rows="1" spellcheck="false" wrap="off" style="resize: none; flex: auto; font-size: 1rem;" autocapitalize="none" autocomplete="off" autocorrect="off"></textarea>
<button onclick="onSubmit(); return false;">Send</button>
</div>
</body>
</html>

View File

@ -0,0 +1,81 @@
var ws;
var input = document.getElementById("input");
input.value = "";
var title = document.querySelector("title");
var log = document.getElementById("log");
function set_enabled(enabled) {
input.disabled = !enabled;
var buttons = document.querySelectorAll("button");
for (button of buttons) {
button.disabled = !enabled;
}
}
set_enabled(false);
function onSubmit() {
ws.send("\r");
input.value = "";
input.focus();
}
ws = new WebSocket("ws://" + window.location.host + "/cp/serial/");
ws.onopen = function() {
set_enabled(true);
};
var setting_title = false;
var encoder = new TextEncoder();
var left_count = 0;
ws.onmessage = function(e) {
if (e.data == "\x1b]0;") {
setting_title = true;
title.textContent = "";
} else if (e.data == "\x1b\\") {
setting_title = false;
} else if (setting_title) {
title.textContent += e.data;
} else if (e.data == "\b") {
left_count += 1;
} else if (e.data == "\x1b[K") { // Clear line
log.textContent = log.textContent.slice(0, -left_count);
left_count = 0;
} else {
log.textContent += e.data;
}
document.querySelector("span").scrollIntoView();
};
ws.onclose = function() {
set_enabled(false);
};
ws.onerror = function(e) {
set_enabled(false);
};
input.addEventListener("beforeinput", function(e) {
if (e.inputType == "insertLineBreak") {
ws.send("\r");
input.value = "";
input.focus();
e.preventDefault();
} else if (e.inputType == "insertText") {
ws.send(e.data);
} else if (e.inputType == "deleteContentBackward") {
ws.send("\b");
}
});
let ctrl_c = document.querySelector("#c");
ctrl_c.onclick = function() {
ws.send("\x03");
}
let ctrl_d = document.querySelector("#d");
ctrl_d.onclick = function() {
ws.send("\x04");
}

View File

@ -3,11 +3,12 @@
<head>
<title>CircuitPython</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="/welcome.js" defer=true></script>
</head>
<script src="/welcome.js" defer=true></script>
<body>
<h1><a href="/"><img src="/favicon.ico"/></a>&nbsp;Welcome!</h1>
Welcome to CircuitPython's Web API. Go to the <a href="/fs/">file browser</a> to work with files in the CIRCUITPY drive. Make sure you've set <code>CIRCUITPY_WEB_API_PASSWORD='somepassword'</code> in <code>/.env</code>. Provide the password when the browser prompts for it. Leave the username blank.
Welcome to CircuitPython's Web API. Go to the <a href="/fs/">file browser</a> to work with files in the CIRCUITPY drive. Go to the <a href="/cp/serial/">serial terminal</a> to see code output and interact with the REPL. Make sure you've set <code>CIRCUITPY_WEB_API_PASSWORD='somepassword'</code> in <code>/.env</code>. Provide the password when the browser prompts for it. Leave the username blank.
<h2>Device Info</h2>
Board: <a id="board"></a><br>
Version: <span id="version"></span><br>

View File

@ -39,8 +39,11 @@
#include "supervisor/shared/reload.h"
#include "supervisor/shared/translate/translate.h"
#include "supervisor/shared/web_workflow/web_workflow.h"
#include "supervisor/shared/web_workflow/websocket.h"
#include "supervisor/usb.h"
#include "shared-bindings/hashlib/__init__.h"
#include "shared-bindings/hashlib/Hash.h"
#include "shared-bindings/mdns/RemoteService.h"
#include "shared-bindings/mdns/Server.h"
#include "shared-bindings/socketpool/__init__.h"
@ -86,6 +89,10 @@ typedef struct {
bool authenticated;
bool expect;
bool json;
bool websocket;
uint32_t websocket_version;
// RFC6455 for websockets says this header should be 24 base64 characters long.
char websocket_key[24 + 1];
} _request;
static wifi_radio_error_t wifi_status = WIFI_RADIO_ERROR_NONE;
@ -256,20 +263,19 @@ void supervisor_start_web_workflow(void) {
active.num = -1;
active.connected = false;
websocket_init();
// TODO:
// GET /cp/serial.txt
// - Most recent 1k of serial output.
// GET /edit/
// - Super basic editor
// GET /ws/circuitpython
// GET /ws/user
// - WebSockets
#endif
}
static void _send_raw(socketpool_socket_obj_t *socket, const uint8_t *buf, int len) {
int sent = -EAGAIN;
while (sent == -EAGAIN) {
while (sent == -EAGAIN && common_hal_socketpool_socket_get_connected(socket)) {
sent = socketpool_socket_send(socket, buf, len);
}
if (sent < len) {
@ -516,7 +522,14 @@ static void _reply_redirect(socketpool_socket_obj_t *socket, _request *request,
"HTTP/1.1 301 Moved Permanently\r\n",
"Connection: close\r\n",
"Content-Length: 0\r\n",
"Location: http://", hostname, ".local", path, "\r\n", NULL);
"Location: ", NULL);
if (request->websocket) {
_send_str(socket, "ws");
} else {
_send_str(socket, "http");
}
_send_strs(socket, "://", hostname, ".local", path, "\r\n", NULL);
_cors_header(socket, request);
_send_str(socket, "\r\n");
}
@ -826,6 +839,8 @@ STATIC_FILE(directory_html);
STATIC_FILE(directory_js);
STATIC_FILE(welcome_html);
STATIC_FILE(welcome_js);
STATIC_FILE(serial_html);
STATIC_FILE(serial_js);
STATIC_FILE(blinka_16x16_ico);
static void _reply_static(socketpool_socket_obj_t *socket, _request *request, const uint8_t *response, size_t response_len, const char *content_type) {
@ -844,10 +859,34 @@ static void _reply_static(socketpool_socket_obj_t *socket, _request *request, co
#define _REPLY_STATIC(socket, request, filename) _reply_static(socket, request, filename, filename##_length, filename##_content_type)
static void _reply_websocket_upgrade(socketpool_socket_obj_t *socket, _request *request) {
// Compute accept key
hashlib_hash_obj_t hash;
common_hal_hashlib_new(&hash, "sha1");
common_hal_hashlib_hash_update(&hash, (const uint8_t *)request->websocket_key, strlen(request->websocket_key));
const char *magic_string = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
common_hal_hashlib_hash_update(&hash, (const uint8_t *)magic_string, strlen(magic_string));
size_t digest_size = common_hal_hashlib_hash_get_digest_size(&hash);
size_t encoded_size = (digest_size + 1) * 4 / 3 + 1;
uint8_t encoded_accept[encoded_size];
common_hal_hashlib_hash_digest(&hash, encoded_accept, sizeof(encoded_accept));
_base64_in_place((char *)encoded_accept, digest_size, encoded_size);
// Reply with upgrade
_send_strs(socket, "HTTP/1.1 101 Switching Protocols\r\n",
"Upgrade: websocket\r\n",
"Connection: Upgrade\r\n",
"Sec-WebSocket-Accept: ", encoded_accept, "\r\n",
"\r\n", NULL);
websocket_handoff(socket);
// socket is now closed and "disconnected".
}
static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
if (request->redirect) {
_reply_redirect(socket, request, request->path);
} else if (strlen(request->origin) > 0 && !_origin_ok(request->origin)) {
ESP_LOGE(TAG, "bad origin %s", request->origin);
_reply_forbidden(socket, request);
} else if (memcmp(request->path, "/fs/", 4) == 0) {
if (!request->authenticated) {
@ -980,6 +1019,20 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
_reply_with_devices_json(socket, request);
} else if (strcmp(path, "/version.json") == 0) {
_reply_with_version_json(socket, request);
} else if (strcmp(path, "/serial/") == 0) {
if (!request->authenticated) {
if (_api_password[0] != '\0') {
_reply_unauthorized(socket, request);
} else {
_reply_forbidden(socket, request);
}
} else if (request->websocket) {
_reply_websocket_upgrade(socket, request);
} else {
_REPLY_STATIC(socket, request, serial_html);
}
} else {
_reply_missing(socket, request);
}
} else if (strcmp(request->method, "GET") != 0) {
_reply_method_not_allowed(socket, request);
@ -992,6 +1045,8 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
_REPLY_STATIC(socket, request, directory_js);
} else if (strcmp(request->path, "/welcome.js") == 0) {
_REPLY_STATIC(socket, request, welcome_js);
} else if (strcmp(request->path, "/serial.js") == 0) {
_REPLY_STATIC(socket, request, serial_js);
} else if (strcmp(request->path, "/favicon.ico") == 0) {
// TODO: Autogenerate this based on the blinka bitmap and change the
// palette based on MAC address.
@ -1015,6 +1070,7 @@ static void _reset_request(_request *request) {
request->authenticated = false;
request->expect = false;
request->json = false;
request->websocket = false;
}
static void _process_request(socketpool_socket_obj_t *socket, _request *request) {
@ -1111,6 +1167,13 @@ static void _process_request(socketpool_socket_obj_t *socket, _request *request)
strcpy(request->origin, request->header_value);
} else if (strcmp(request->header_key, "X-Timestamp") == 0) {
request->timestamp_ms = strtoull(request->header_value, NULL, 10);
} else if (strcmp(request->header_key, "Upgrade") == 0) {
request->websocket = strcmp(request->header_value, "websocket") == 0;
} else if (strcmp(request->header_key, "Sec-WebSocket-Version") == 0) {
request->websocket_version = strtoul(request->header_value, NULL, 10);
} else if (strcmp(request->header_key, "Sec-WebSocket-Key") == 0 &&
strlen(request->header_value) == 24) {
strcpy(request->websocket_key, request->header_value);
}
ESP_LOGI(TAG, "Header %s %s", request->header_key, request->header_value);
} else if (request->offset > sizeof(request->header_value) - 1) {

View File

@ -0,0 +1,234 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "supervisor/shared/web_workflow/websocket.h"
// TODO: Remove ESP specific stuff. For now, it is useful as we refine the server.
#include "esp_log.h"
typedef struct {
socketpool_socket_obj_t socket;
uint8_t opcode;
uint8_t frame_len;
uint8_t payload_len_size;
bool masked;
bool closed;
uint8_t mask[4];
int frame_index;
size_t payload_remaining;
} _websocket;
static _websocket cp_serial;
static const char *TAG = "CP websocket";
void websocket_init(void) {
cp_serial.socket.num = -1;
cp_serial.socket.connected = false;
}
void websocket_handoff(socketpool_socket_obj_t *socket) {
cp_serial.socket = *socket;
cp_serial.closed = false;
cp_serial.opcode = 0;
cp_serial.frame_index = 0;
cp_serial.frame_len = 2;
// Mark the original socket object as closed without telling the lower level.
socket->connected = false;
socket->num = -1;
}
bool websocket_connected(void) {
return !cp_serial.closed && common_hal_socketpool_socket_get_connected(&cp_serial.socket);
}
static bool _read_byte(uint8_t *c) {
int len = socketpool_socket_recv_into(&cp_serial.socket, c, 1);
if (len != 1) {
if (len != -EAGAIN) {
ESP_LOGE(TAG, "recv error %d", len);
}
return false;
}
return true;
}
static void _send_raw(socketpool_socket_obj_t *socket, const uint8_t *buf, int len) {
int sent = -EAGAIN;
while (sent == -EAGAIN) {
sent = socketpool_socket_send(socket, buf, len);
}
if (sent < len) {
ESP_LOGE(TAG, "short send on %d err %d len %d", socket->num, sent, len);
}
}
static void _read_next_frame_header(void) {
uint8_t h;
if (cp_serial.frame_index == 0 && _read_byte(&h)) {
cp_serial.frame_index++;
cp_serial.opcode = h & 0xf;
}
if (cp_serial.frame_index == 1 && _read_byte(&h)) {
cp_serial.frame_index++;
uint8_t len = h & 0xf;
cp_serial.masked = (h >> 7) == 1;
if (len <= 125) {
cp_serial.payload_remaining = len;
cp_serial.payload_len_size = 0;
} else if (len == 126) { // 16 bit length
cp_serial.payload_len_size = 2;
} else if (len == 127) { // 64 bit length
cp_serial.payload_len_size = 8;
}
cp_serial.frame_len = 2 + cp_serial.payload_len_size;
if (cp_serial.masked) {
cp_serial.frame_len += 4;
}
}
while (cp_serial.frame_index >= 2 &&
cp_serial.frame_index < (cp_serial.payload_len_size + 2) &&
_read_byte(&h)) {
cp_serial.frame_index++;
cp_serial.payload_remaining = cp_serial.payload_remaining << 8 | h;
}
int mask_start = cp_serial.payload_len_size + 2;
while (cp_serial.frame_index >= mask_start &&
cp_serial.frame_index < cp_serial.frame_len &&
_read_byte(&h)) {
size_t mask_offset = cp_serial.frame_index - mask_start;
cp_serial.mask[mask_offset] = h;
cp_serial.frame_index++;
}
// Reply to PINGs and CLOSE.
while ((cp_serial.opcode == 0x8 ||
cp_serial.opcode == 0x9) &&
cp_serial.frame_index >= cp_serial.frame_len) {
if (cp_serial.frame_index == cp_serial.frame_len) {
uint8_t opcode = 0x8; // CLOSE
if (cp_serial.opcode == 0x9) {
opcode = 0xA; // PONG
} else {
// Set the TCP socket to send immediately so that we send the payload back before
// closing the connection.
int nodelay = 1;
lwip_setsockopt(cp_serial.socket.num, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));
}
uint8_t frame_header[2];
frame_header[0] = 1 << 7 | opcode;
if (cp_serial.payload_remaining > 125) {
ESP_LOGE(TAG, "CLOSE or PING has long payload");
}
frame_header[1] = cp_serial.payload_remaining;
_send_raw(&cp_serial.socket, (const uint8_t *)frame_header, 2);
}
if (cp_serial.payload_remaining > 0 && _read_byte(&h)) {
// Send the payload back to the client.
cp_serial.frame_index++;
cp_serial.payload_remaining--;
_send_raw(&cp_serial.socket, &h, 1);
}
if (cp_serial.payload_remaining == 0) {
cp_serial.frame_index = 0;
if (cp_serial.opcode == 0x8) {
cp_serial.closed = true;
common_hal_socketpool_socket_close(&cp_serial.socket);
}
}
}
}
static bool _read_next_payload_byte(uint8_t *c) {
_read_next_frame_header();
if (cp_serial.opcode == 0x1 &&
cp_serial.frame_index >= cp_serial.frame_len &&
cp_serial.payload_remaining > 0) {
if (_read_byte(c)) {
uint8_t mask_offset = (cp_serial.frame_index - cp_serial.frame_len) % 4;
*c ^= cp_serial.mask[mask_offset];
cp_serial.frame_index++;
cp_serial.payload_remaining--;
if (cp_serial.payload_remaining == 0) {
cp_serial.frame_index = 0;
}
return true;
}
}
return false;
}
bool websocket_available(void) {
if (!websocket_connected()) {
return false;
}
_read_next_frame_header();
return cp_serial.payload_remaining > 0 && cp_serial.frame_index >= cp_serial.frame_len;
}
char websocket_read_char(void) {
uint8_t c;
_read_next_payload_byte(&c);
return c;
}
static void _websocket_send(_websocket *ws, const char *text, size_t len) {
if (!websocket_connected()) {
return;
}
uint32_t opcode = 1;
uint8_t frame_header[2];
frame_header[0] = 1 << 7 | opcode;
uint8_t payload_len;
if (len <= 125) {
payload_len = len;
} else if (len < (1 << 16)) {
payload_len = 126;
} else {
payload_len = 127;
}
frame_header[1] = payload_len;
_send_raw(&ws->socket, (const uint8_t *)frame_header, 2);
if (payload_len == 126) {
_send_raw(&ws->socket, (const uint8_t *)&len, 2);
} else if (payload_len == 127) {
uint32_t zero = 0;
// 64 bits where top four bytes are zero.
_send_raw(&ws->socket, (const uint8_t *)&zero, 4);
_send_raw(&ws->socket, (const uint8_t *)&len, 4);
}
_send_raw(&ws->socket, (const uint8_t *)text, len);
char copy[len];
memcpy(copy, text, len);
copy[len] = '\0';
}
void websocket_write(const char *text, size_t len) {
_websocket_send(&cp_serial, text, len);
}

View File

@ -0,0 +1,38 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#pragma once
#include <stdbool.h>
#include "shared-bindings/socketpool/Socket.h"
void websocket_init(void);
void websocket_handoff(socketpool_socket_obj_t *socket);
bool websocket_connected(void);
bool websocket_available(void);
char websocket_read_char(void);
void websocket_write(const char *text, size_t len);

View File

@ -168,8 +168,8 @@ $(BUILD)/autogen_web_workflow_static.c: ../../tools/gen_web_workflow_static.py $
$(STATIC_RESOURCES)
ifeq ($(CIRCUITPY_WEB_WORKFLOW),1)
SRC_SUPERVISOR += supervisor/shared/web_workflow/web_workflow.c
SRC_SUPERVISOR += supervisor/shared/web_workflow/web_workflow.c \
supervisor/shared/web_workflow/websocket.c
SRC_SUPERVISOR += $(BUILD)/autogen_web_workflow_static.c
endif

View File

@ -38,12 +38,12 @@ hashlib json math qrio
rainbowio re sys termios
traceback ubinascii uctypes uerrno
uheapq uio ujson ulab
ulab.fft ulab.linalg ulab.numpy ulab.scipy
ulab.scipy.linalg ulab.scipy.optimize
ulab.scipy.signal ulab.scipy.special
ulab.utils uos urandom ure
uselect ustruct utime utimeq
uzlib zlib
ulab.numpy ulab.numpy.fft ulab.numpy.linalg
ulab.scipy ulab.scipy.linalg
ulab.scipy.optimize ulab.scipy.signal
ulab.scipy.special ulab.utils uos
urandom ure uselect ustruct
utime utimeq uzlib zlib
ime
utime utimeq

View File

@ -4,6 +4,8 @@
import argparse
import gzip
import minify_html
import jsmin
import mimetypes
import pathlib
@ -24,6 +26,10 @@ for f in args.files:
variable = path.name.replace(".", "_")
uncompressed = f.read()
ulen = len(uncompressed)
if f.name.endswith(".html"):
uncompressed = minify_html.minify(uncompressed.decode("utf-8")).encode("utf-8")
elif f.name.endswith(".js"):
uncompressed = jsmin.jsmin(uncompressed.decode("utf-8")).encode("utf-8")
compressed = gzip.compress(uncompressed)
clen = len(compressed)
compressed = ", ".join([hex(x) for x in compressed])