Merge remote-tracking branch 'adafruit/main' into simpler-status-bar-code

This commit is contained in:
Dan Halbert 2022-09-27 11:24:46 -04:00
commit d983f08f36
72 changed files with 1221 additions and 785 deletions

View File

@ -93,6 +93,7 @@ bool common_hal_bleio_characteristic_buffer_deinited(bleio_characteristic_buffer
void common_hal_bleio_characteristic_buffer_deinit(bleio_characteristic_buffer_obj_t *self) { void common_hal_bleio_characteristic_buffer_deinit(bleio_characteristic_buffer_obj_t *self) {
if (!common_hal_bleio_characteristic_buffer_deinited(self)) { if (!common_hal_bleio_characteristic_buffer_deinited(self)) {
bleio_characteristic_clear_observer(self->characteristic); bleio_characteristic_clear_observer(self->characteristic);
ringbuf_deinit(&self->ringbuf);
} }
} }

View File

@ -37,13 +37,13 @@
#include "supervisor/shared/tick.h" #include "supervisor/shared/tick.h"
STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, uint8_t *data, uint16_t len) { STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, uint8_t *data, uint16_t len) {
if (len + sizeof(uint16_t) > ringbuf_capacity(&self->ringbuf)) { if (len + sizeof(uint16_t) > ringbuf_size(&self->ringbuf)) {
// This shouldn't happen. // This shouldn't happen.
return; return;
} }
// Push all the data onto the ring buffer. // Push all the data onto the ring buffer.
// Make room for the new value by dropping the oldest packets first. // Make room for the new value by dropping the oldest packets first.
while (ringbuf_capacity(&self->ringbuf) - ringbuf_num_filled(&self->ringbuf) < len + sizeof(uint16_t)) { while (ringbuf_size(&self->ringbuf) - ringbuf_num_filled(&self->ringbuf) < len + sizeof(uint16_t)) {
uint16_t packet_length; uint16_t packet_length;
ringbuf_get_n(&self->ringbuf, (uint8_t *)&packet_length, sizeof(uint16_t)); ringbuf_get_n(&self->ringbuf, (uint8_t *)&packet_length, sizeof(uint16_t));
for (uint16_t i = 0; i < packet_length; i++) { for (uint16_t i = 0; i < packet_length; i++) {
@ -264,5 +264,6 @@ bool common_hal_bleio_packet_buffer_deinited(bleio_packet_buffer_obj_t *self) {
void common_hal_bleio_packet_buffer_deinit(bleio_packet_buffer_obj_t *self) { void common_hal_bleio_packet_buffer_deinit(bleio_packet_buffer_obj_t *self) {
if (!common_hal_bleio_packet_buffer_deinited(self)) { if (!common_hal_bleio_packet_buffer_deinited(self)) {
bleio_characteristic_clear_observer(self->characteristic); bleio_characteristic_clear_observer(self->characteristic);
ringbuf_deinit(&self->ringbuf);
} }
} }

@ -1 +1 @@
Subproject commit 346c936e14c6ea3a8d3d65cb1fa46202dc92999d Subproject commit 57de23c1fb434ba99aaafe1d00bd77d5cdf5d66b

View File

@ -2557,8 +2557,7 @@ msgstr "tidak dapat menetapkan ke ekspresi"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "" msgstr ""
@ -2745,10 +2744,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "" msgstr ""
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr ""
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2900,10 +2895,6 @@ msgstr ""
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3771,10 +3762,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "" msgstr ""
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr ""
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "" msgstr ""
@ -4012,10 +3999,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr ""
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "" msgstr ""
@ -4230,7 +4213,6 @@ msgid "unreadable attribute"
msgstr "" msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "" msgstr ""
@ -4360,10 +4342,6 @@ msgstr "nilai x di luar batas"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "xTaskCreate gagal" msgstr "xTaskCreate gagal"
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y harus menjadi int"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "Nilai y di luar batas" msgstr "Nilai y di luar batas"
@ -4384,6 +4362,9 @@ msgstr "zi harus berjenis float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "Zi harus berbentuk (n_section, 2)" msgstr "Zi harus berbentuk (n_section, 2)"
#~ msgid "y should be an int"
#~ msgstr "y harus menjadi int"
#~ msgid "%q must be a tuple of length 2" #~ msgid "%q must be a tuple of length 2"
#~ msgstr "%q harus berupa tuple dengan panjang 2" #~ msgstr "%q harus berupa tuple dengan panjang 2"

View File

@ -2526,8 +2526,7 @@ msgstr ""
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "" msgstr ""
@ -2714,10 +2713,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "" msgstr ""
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr ""
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2869,10 +2864,6 @@ msgstr ""
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3739,10 +3730,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "" msgstr ""
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr ""
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "" msgstr ""
@ -3980,10 +3967,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr ""
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "" msgstr ""
@ -4198,7 +4181,6 @@ msgid "unreadable attribute"
msgstr "" msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "" msgstr ""
@ -4328,10 +4310,6 @@ msgstr ""
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr ""
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "" msgstr ""

View File

@ -2544,8 +2544,7 @@ msgstr ""
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "" msgstr ""
@ -2732,10 +2731,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "" msgstr ""
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr ""
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2887,10 +2882,6 @@ msgstr ""
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3757,10 +3748,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "" msgstr ""
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr ""
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "" msgstr ""
@ -3998,10 +3985,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr ""
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "" msgstr ""
@ -4216,7 +4199,6 @@ msgid "unreadable attribute"
msgstr "" msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "" msgstr ""
@ -4346,10 +4328,6 @@ msgstr ""
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr ""
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "" msgstr ""

View File

@ -2599,8 +2599,7 @@ msgstr "kann keinem Ausdruck zuweisen"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "kann self nicht abbrechen" msgstr "kann self nicht abbrechen"
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "kann %q nicht zu %q konvertieren" msgstr "kann %q nicht zu %q konvertieren"
@ -2795,10 +2794,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "Farbe muss zwischen 0x000000 und 0xffffff liegen" msgstr "Farbe muss zwischen 0x000000 und 0xffffff liegen"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "Farbe sollte ein int sein"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "Vergleich von int und uint" msgstr "Vergleich von int und uint"
@ -2952,10 +2947,6 @@ msgstr "leere Sequenz"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "Ende des Formats wärend der Suche nach einem conversion specifier" msgstr "Ende des Formats wärend der Suche nach einem conversion specifier"
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr "end_x sollte ein int sein"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "epoch_time wird auf diesem Board nicht unterstützt" msgstr "epoch_time wird auf diesem Board nicht unterstützt"
@ -3835,10 +3826,6 @@ msgstr "pack erwartete %d Artikel zum Packen (erhalten %d)"
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "Die Palette muss 32 Byte lang sein" msgstr "Die Palette muss 32 Byte lang sein"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_index sollte ein int sein"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "Die Parameter müssen Register der Reihenfolge a2 bis a5 sein" msgstr "Die Parameter müssen Register der Reihenfolge a2 bis a5 sein"
@ -4076,10 +4063,6 @@ msgstr "source_bitmap muss value_count von 8 haben"
msgid "start/end indices" msgid "start/end indices"
msgstr "start/end Indizes" msgstr "start/end Indizes"
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr "start_x sollte ein int sein"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "Schritt (step) darf nicht Null sein" msgstr "Schritt (step) darf nicht Null sein"
@ -4297,7 +4280,6 @@ msgid "unreadable attribute"
msgstr "nicht lesbares Attribut" msgstr "nicht lesbares Attribut"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "Nicht unterstützter %q-Typ" msgstr "Nicht unterstützter %q-Typ"
@ -4427,10 +4409,6 @@ msgstr "x Wert außerhalb der Grenzen"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "xTaskCreate fehlgeschlagen" msgstr "xTaskCreate fehlgeschlagen"
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y sollte ein int sein"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "y Wert außerhalb der Grenzen" msgstr "y Wert außerhalb der Grenzen"
@ -4451,6 +4429,21 @@ msgstr "zi muss eine Gleitkommazahl sein"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi muss die Form (n_section, 2) haben" msgstr "zi muss die Form (n_section, 2) haben"
#~ msgid "color should be an int"
#~ msgstr "Farbe sollte ein int sein"
#~ msgid "end_x should be an int"
#~ msgstr "end_x sollte ein int sein"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_index sollte ein int sein"
#~ msgid "start_x should be an int"
#~ msgstr "start_x sollte ein int sein"
#~ msgid "y should be an int"
#~ msgstr "y sollte ein int sein"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -8,19 +8,23 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: 2022-09-23 17:20+0000\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Bill Sideris <bill88t@feline.gr>\n"
"Language-Team: none\n" "Language-Team: none\n"
"Language: el\n" "Language: el\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.1\n"
#: main.c #: main.c
msgid "" msgid ""
"\n" "\n"
"Code done running.\n" "Code done running.\n"
msgstr "" msgstr ""
"\n"
"Η εκτέλεση του κώδικα ολοκληρώθηκε.\n"
#: main.c #: main.c
msgid "" msgid ""
@ -34,14 +38,18 @@ msgid ""
"Please file an issue with the contents of your CIRCUITPY drive at \n" "Please file an issue with the contents of your CIRCUITPY drive at \n"
"https://github.com/adafruit/circuitpython/issues\n" "https://github.com/adafruit/circuitpython/issues\n"
msgstr "" msgstr ""
"\n"
"Παρακαλώ δημιουγήστε ενα πρόβλημα με τα περιεχόμενα του CIRCUITPY δίσκου "
"στο\n"
"https://github.com/adafruit/circuitpython/issues\n"
#: py/obj.c #: py/obj.c
msgid " File \"%q\"" msgid " File \"%q\""
msgstr "" msgstr " Αρχείο \"%q\""
#: py/obj.c #: py/obj.c
msgid " File \"%q\", line %d" msgid " File \"%q\", line %d"
msgstr "" msgstr " Αρχείο \"%q\", γραμμή %d"
#: py/builtinhelp.c #: py/builtinhelp.c
msgid " is of type %q\n" msgid " is of type %q\n"
@ -53,7 +61,7 @@ msgstr ""
#: main.c #: main.c
msgid " output:\n" msgid " output:\n"
msgstr "" msgstr " έξοδος:\n"
#: py/objstr.c #: py/objstr.c
#, c-format #, c-format
@ -325,7 +333,7 @@ msgstr ""
#: py/compile.c #: py/compile.c
msgid "'await' outside function" msgid "'await' outside function"
msgstr "" msgstr "'await' εκτός συνάρτησης"
#: py/compile.c #: py/compile.c
msgid "'await', 'async for' or 'async with' outside async function" msgid "'await', 'async for' or 'async with' outside async function"
@ -337,15 +345,15 @@ msgstr ""
#: py/compile.c #: py/compile.c
msgid "'continue' outside loop" msgid "'continue' outside loop"
msgstr "" msgstr "'continue' εκτός επανάληψης"
#: py/objgenerator.c #: py/objgenerator.c
msgid "'coroutine' object is not an iterator" msgid "'coroutine' object is not an iterator"
msgstr "" msgstr "'coroutine' αντικείμενο δεν μπορεί να χρησιμοποιηθεί σαν επαναλήπτης"
#: py/compile.c #: py/compile.c
msgid "'data' requires at least 2 arguments" msgid "'data' requires at least 2 arguments"
msgstr "" msgstr "'data' απαιτεί τουλάχιστον 2 παραμέτρους"
#: py/compile.c #: py/compile.c
msgid "'data' requires integer arguments" msgid "'data' requires integer arguments"
@ -373,15 +381,15 @@ msgstr ""
#: py/obj.c #: py/obj.c
msgid ", in %q\n" msgid ", in %q\n"
msgstr "" msgstr ", στο %q\n"
#: py/objcomplex.c #: py/objcomplex.c
msgid "0.0 to a complex power" msgid "0.0 to a complex power"
msgstr "" msgstr "0.0 σε μία σύνθετη δύναμη"
#: py/modbuiltins.c #: py/modbuiltins.c
msgid "3-arg pow() not supported" msgid "3-arg pow() not supported"
msgstr "" msgstr "pow() με 3 παραμέτρους δεν υποστηρίζεται"
#: shared-module/msgpack/__init__.c #: shared-module/msgpack/__init__.c
msgid "64 bit types" msgid "64 bit types"
@ -391,66 +399,66 @@ msgstr ""
#: ports/atmel-samd/common-hal/countio/Counter.c #: ports/atmel-samd/common-hal/countio/Counter.c
#: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c #: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c
msgid "A hardware interrupt channel is already in use" msgid "A hardware interrupt channel is already in use"
msgstr "" msgstr "Ένα κανάλι interrupt υλικού είναι ήδη σε χρήση"
#: ports/espressif/common-hal/analogio/AnalogIn.c #: ports/espressif/common-hal/analogio/AnalogIn.c
msgid "ADC2 is being used by WiFi" msgid "ADC2 is being used by WiFi"
msgstr "" msgstr "Το ADC2 χρησιμοποιείται απο το WIFI"
#: shared-bindings/_bleio/Address.c shared-bindings/ipaddress/IPv4Address.c #: shared-bindings/_bleio/Address.c shared-bindings/ipaddress/IPv4Address.c
#, c-format #, c-format
msgid "Address must be %d bytes long" msgid "Address must be %d bytes long"
msgstr "" msgstr "Η διεύθυνση πρέπει να είναι %d bytes μεγάλη"
#: ports/espressif/common-hal/canio/CAN.c #: ports/espressif/common-hal/canio/CAN.c
msgid "All CAN peripherals are in use" msgid "All CAN peripherals are in use"
msgstr "" msgstr "Όλα τα περιφεριακά CAN είναι σε χρήση"
#: ports/espressif/common-hal/busio/I2C.c #: ports/espressif/common-hal/busio/I2C.c
#: ports/espressif/common-hal/i2ctarget/I2CTarget.c #: ports/espressif/common-hal/i2ctarget/I2CTarget.c
#: ports/nrf/common-hal/busio/I2C.c #: ports/nrf/common-hal/busio/I2C.c
msgid "All I2C peripherals are in use" msgid "All I2C peripherals are in use"
msgstr "" msgstr "Όλα τα I2C περιφεριακά ειναι σε χρήση"
#: ports/espressif/common-hal/countio/Counter.c #: ports/espressif/common-hal/countio/Counter.c
#: ports/espressif/common-hal/frequencyio/FrequencyIn.c #: ports/espressif/common-hal/frequencyio/FrequencyIn.c
#: ports/espressif/common-hal/rotaryio/IncrementalEncoder.c #: ports/espressif/common-hal/rotaryio/IncrementalEncoder.c
msgid "All PCNT units in use" msgid "All PCNT units in use"
msgstr "" msgstr "Όλες οι μονάδες PCNT είναι σε χρήση"
#: ports/atmel-samd/common-hal/canio/Listener.c #: ports/atmel-samd/common-hal/canio/Listener.c
#: ports/espressif/common-hal/canio/Listener.c #: ports/espressif/common-hal/canio/Listener.c
#: ports/stm/common-hal/canio/Listener.c #: ports/stm/common-hal/canio/Listener.c
msgid "All RX FIFOs in use" msgid "All RX FIFOs in use"
msgstr "" msgstr "Όλα τα RX FIFOs είναι σε χρήση"
#: ports/espressif/common-hal/busio/SPI.c ports/nrf/common-hal/busio/SPI.c #: ports/espressif/common-hal/busio/SPI.c ports/nrf/common-hal/busio/SPI.c
msgid "All SPI peripherals are in use" msgid "All SPI peripherals are in use"
msgstr "" msgstr "Όλα τα SPI περιφεριακά είναι σε χρήση"
#: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c #: ports/espressif/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c
#: ports/raspberrypi/common-hal/busio/UART.c #: ports/raspberrypi/common-hal/busio/UART.c
msgid "All UART peripherals are in use" msgid "All UART peripherals are in use"
msgstr "" msgstr "Όλα τα UART περιφεριακά ειναι σε χρήση"
#: ports/nrf/common-hal/countio/Counter.c #: ports/nrf/common-hal/countio/Counter.c
#: ports/nrf/common-hal/pulseio/PulseIn.c #: ports/nrf/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/rotaryio/IncrementalEncoder.c #: ports/nrf/common-hal/rotaryio/IncrementalEncoder.c
#: shared-bindings/pwmio/PWMOut.c #: shared-bindings/pwmio/PWMOut.c
msgid "All channels in use" msgid "All channels in use"
msgstr "" msgstr "Όλα τα κανάλια είναι σε χρήση"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c #: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "All event channels in use" msgid "All event channels in use"
msgstr "" msgstr "Όλα τα κανάλια γεγονότων είναι σε χρήση"
#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c
msgid "All state machines in use" msgid "All state machines in use"
msgstr "" msgstr "Όλες οι μηχανές κατάστασης είναι σε χρήση"
#: ports/atmel-samd/audio_dma.c #: ports/atmel-samd/audio_dma.c
msgid "All sync event channels in use" msgid "All sync event channels in use"
msgstr "" msgstr "Όλα τα κανάλια γεγονότων συγχρονισμού είναι σε χρήση"
#: shared-bindings/pwmio/PWMOut.c #: shared-bindings/pwmio/PWMOut.c
msgid "All timers for this pin are in use" msgid "All timers for this pin are in use"
@ -535,7 +543,7 @@ msgstr ""
#: main.c #: main.c
msgid "Auto-reload is off.\n" msgid "Auto-reload is off.\n"
msgstr "" msgstr "Η αυτόματη επαναφόρτωση είναι απενεργοποιημένη.\n"
#: main.c #: main.c
msgid "" msgid ""
@ -2526,8 +2534,7 @@ msgstr ""
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "" msgstr ""
@ -2714,10 +2721,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "" msgstr ""
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr ""
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2869,10 +2872,6 @@ msgstr ""
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3739,10 +3738,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "" msgstr ""
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr ""
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "" msgstr ""
@ -3980,10 +3975,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr ""
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "" msgstr ""
@ -4198,7 +4189,6 @@ msgid "unreadable attribute"
msgstr "" msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "" msgstr ""
@ -4328,10 +4318,6 @@ msgstr ""
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr ""
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "" msgstr ""

View File

@ -2560,8 +2560,7 @@ msgstr "Can't assign to expression"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "can't cancel self" msgstr "can't cancel self"
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "Can't convert %q to %q" msgstr "Can't convert %q to %q"
@ -2750,10 +2749,6 @@ msgstr "colour buffer must be a bytearray or array of type 'b' or 'B'"
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "colour must be between 0x000000 and 0xffffff" msgstr "colour must be between 0x000000 and 0xffffff"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "colour should be an int"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "comparison of int and uint" msgstr "comparison of int and uint"
@ -2906,10 +2901,6 @@ msgstr "empty sequence"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "end of format while looking for conversion specifier" msgstr "end of format while looking for conversion specifier"
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr "end_x should be an int"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "epoch_time not supported on this board" msgstr "epoch_time not supported on this board"
@ -3776,10 +3767,6 @@ msgstr "pack expected %d items for packing (got %d)"
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "palette must be 32 bytes long" msgstr "palette must be 32 bytes long"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_index should be an int"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "parameters must be registers in sequence a2 to a5" msgstr "parameters must be registers in sequence a2 to a5"
@ -4017,10 +4004,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "start/end indices" msgstr "start/end indices"
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr "start_x should be an int"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "step must be non-zero" msgstr "step must be non-zero"
@ -4235,7 +4218,6 @@ msgid "unreadable attribute"
msgstr "unreadable attribute" msgstr "unreadable attribute"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "unsupported %q type" msgstr "unsupported %q type"
@ -4365,10 +4347,6 @@ msgstr "x value out of bounds"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "xTaskCreate failed" msgstr "xTaskCreate failed"
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y should be an int"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "y value out of bounds" msgstr "y value out of bounds"
@ -4389,6 +4367,21 @@ msgstr "zi must be of float type"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi must be of shape (n_section, 2)" msgstr "zi must be of shape (n_section, 2)"
#~ msgid "color should be an int"
#~ msgstr "colour should be an int"
#~ msgid "end_x should be an int"
#~ msgstr "end_x should be an int"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_index should be an int"
#~ msgid "start_x should be an int"
#~ msgstr "start_x should be an int"
#~ msgid "y should be an int"
#~ msgstr "y should be an int"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-04 12:55-0600\n" "POT-Creation-Date: 2021-01-04 12:55-0600\n"
"PO-Revision-Date: 2021-08-23 14:19+0000\n" "PO-Revision-Date: 2022-09-23 17:20+0000\n"
"Last-Translator: Jeff Epler <jepler@gmail.com>\n" "Last-Translator: Alvaro Figueroa <alvaro@greencore.co.cr>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: es\n" "Language: es\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.8.1-dev\n" "X-Generator: Weblate 4.14.1\n"
#: main.c #: main.c
msgid "" msgid ""
@ -31,6 +31,8 @@ msgid ""
"\n" "\n"
"Code stopped by auto-reload. Reloading soon.\n" "Code stopped by auto-reload. Reloading soon.\n"
msgstr "" msgstr ""
"\n"
"Código detenido por la auto-recarga. Recargando pronto.\n"
#: supervisor/shared/safe_mode.c #: supervisor/shared/safe_mode.c
msgid "" msgid ""
@ -85,20 +87,21 @@ msgstr ""
#: ports/raspberrypi/common-hal/analogio/AnalogOut.c #: ports/raspberrypi/common-hal/analogio/AnalogOut.c
#: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c #: ports/raspberrypi/common-hal/rtc/RTC.c ports/stm/common-hal/alarm/__init__.c
#: ports/stm/common-hal/rtc/RTC.c #: ports/stm/common-hal/rtc/RTC.c
#, fuzzy
msgid "%q" msgid "%q"
msgstr "" msgstr "%q"
#: shared-bindings/microcontroller/Pin.c #: shared-bindings/microcontroller/Pin.c
msgid "%q and %q contain duplicate pins" msgid "%q and %q contain duplicate pins"
msgstr "" msgstr "%q y %q contienen pines duplicados"
#: ports/atmel-samd/common-hal/audioio/AudioOut.c #: ports/atmel-samd/common-hal/audioio/AudioOut.c
msgid "%q and %q must be different" msgid "%q and %q must be different"
msgstr "" msgstr "%q y %q deben ser diferentes"
#: shared-bindings/microcontroller/Pin.c #: shared-bindings/microcontroller/Pin.c
msgid "%q contains duplicate pins" msgid "%q contains duplicate pins"
msgstr "" msgstr "%q contiene pines duplicados"
#: ports/atmel-samd/common-hal/sdioio/SDCard.c #: ports/atmel-samd/common-hal/sdioio/SDCard.c
msgid "%q failure: %d" msgid "%q failure: %d"
@ -118,31 +121,31 @@ msgstr "%q indices deben ser enteros, no %s"
#: shared-module/bitbangio/SPI.c #: shared-module/bitbangio/SPI.c
msgid "%q init failed" msgid "%q init failed"
msgstr "" msgstr "%q inicializado fallido"
#: py/argcheck.c #: py/argcheck.c
msgid "%q length must be %d" msgid "%q length must be %d"
msgstr "" msgstr "%q tamaño debe ser %d"
#: py/argcheck.c #: py/argcheck.c
msgid "%q length must be %d-%d" msgid "%q length must be %d-%d"
msgstr "" msgstr "%q tamaño debe ser %d-%d"
#: py/argcheck.c #: py/argcheck.c
msgid "%q length must be <= %d" msgid "%q length must be <= %d"
msgstr "" msgstr "%q tamaño debe ser <= %d"
#: py/argcheck.c #: py/argcheck.c
msgid "%q length must be >= %d" msgid "%q length must be >= %d"
msgstr "" msgstr "%q tamaño debe ser >= %d"
#: shared-bindings/busio/I2C.c #: shared-bindings/busio/I2C.c
msgid "%q length must be >= 1" msgid "%q length must be >= 1"
msgstr "" msgstr "%q tamaño debe ser >= 1"
#: py/argcheck.c #: py/argcheck.c
msgid "%q must be %d" msgid "%q must be %d"
msgstr "" msgstr "%q debe ser %d"
#: py/argcheck.c #: py/argcheck.c
msgid "%q must be %d-%d" msgid "%q must be %d-%d"
@ -150,11 +153,11 @@ msgstr "%q debe ser %d-%d"
#: shared-bindings/displayio/Display.c #: shared-bindings/displayio/Display.c
msgid "%q must be 1 when %q is True" msgid "%q must be 1 when %q is True"
msgstr "" msgstr "%q debe ser 1 cuando %q es True"
#: py/argcheck.c shared-bindings/gifio/GifWriter.c #: py/argcheck.c shared-bindings/gifio/GifWriter.c
msgid "%q must be <= %d" msgid "%q must be <= %d"
msgstr "" msgstr "%q debe ser <= %d"
#: py/argcheck.c #: py/argcheck.c
msgid "%q must be >= %d" msgid "%q must be >= %d"
@ -2593,8 +2596,7 @@ msgstr "no se puede asignar a la expresión"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "no se puede cancelar a si mismo" msgstr "no se puede cancelar a si mismo"
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "no puede convertir %q a %q" msgstr "no puede convertir %q a %q"
@ -2786,10 +2788,6 @@ msgstr "color buffer deberia ser un bytearray o array de tipo 'b' o 'B'"
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "color debe estar entre 0x000000 y 0xffffff" msgstr "color debe estar entre 0x000000 y 0xffffff"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "color deberia ser un int"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "comparación entre int y uint" msgstr "comparación entre int y uint"
@ -2943,10 +2941,6 @@ msgstr "secuencia vacía"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "el final del formato mientras se busca el especificador de conversión" msgstr "el final del formato mientras se busca el especificador de conversión"
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr "end_x debe ser un int"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "epoch_time no esta soportado en esta tarjeta" msgstr "epoch_time no esta soportado en esta tarjeta"
@ -3820,10 +3814,6 @@ msgstr "pack espera %d items para empaquetado (se recibió %d)"
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "palette debe ser 32 bytes de largo" msgstr "palette debe ser 32 bytes de largo"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_index deberia ser un int"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "los parámetros deben ser registros en secuencia de a2 a a5" msgstr "los parámetros deben ser registros en secuencia de a2 a a5"
@ -4061,10 +4051,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "índices inicio/final" msgstr "índices inicio/final"
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr "start_x deberia ser un int"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "paso debe ser numero no cero" msgstr "paso debe ser numero no cero"
@ -4280,7 +4266,6 @@ msgid "unreadable attribute"
msgstr "atributo no legible" msgstr "atributo no legible"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "tipo de %q no soportado" msgstr "tipo de %q no soportado"
@ -4410,10 +4395,6 @@ msgstr "valor x fuera de límites"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "fallo en xTaskCreate" msgstr "fallo en xTaskCreate"
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y deberia ser un int"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "valor y fuera de límites" msgstr "valor y fuera de límites"
@ -4434,6 +4415,21 @@ msgstr "zi debe ser de tipo flotante"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi debe ser una forma (n_section,2)" msgstr "zi debe ser una forma (n_section,2)"
#~ msgid "color should be an int"
#~ msgstr "color deberia ser un int"
#~ msgid "end_x should be an int"
#~ msgstr "end_x debe ser un int"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_index deberia ser un int"
#~ msgid "start_x should be an int"
#~ msgstr "start_x deberia ser un int"
#~ msgid "y should be an int"
#~ msgstr "y deberia ser un int"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -2548,8 +2548,7 @@ msgstr "hindi ma i-assign sa expression"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "" msgstr ""
@ -2741,10 +2740,6 @@ msgstr "ang color buffer ay dapat bytearray o array na type b or B"
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "color ay dapat mula sa 0x000000 hangang 0xffffff" msgstr "color ay dapat mula sa 0x000000 hangang 0xffffff"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "color ay dapat na int"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2900,11 +2895,6 @@ msgstr "walang laman ang sequence"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "sa huli ng format habang naghahanap sa conversion specifier" msgstr "sa huli ng format habang naghahanap sa conversion specifier"
#: shared-bindings/displayio/Shape.c
#, fuzzy
msgid "end_x should be an int"
msgstr "y ay dapat int"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3777,10 +3767,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "ang palette ay dapat 32 bytes ang haba" msgstr "ang palette ay dapat 32 bytes ang haba"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_index ay dapat na int"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "ang mga parameter ay dapat na nagrerehistro sa sequence a2 hanggang a5" msgstr "ang mga parameter ay dapat na nagrerehistro sa sequence a2 hanggang a5"
@ -4019,11 +4005,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "start/end indeks" msgstr "start/end indeks"
#: shared-bindings/displayio/Shape.c
#, fuzzy
msgid "start_x should be an int"
msgstr "y ay dapat int"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "step ay dapat hindi zero" msgstr "step ay dapat hindi zero"
@ -4238,7 +4219,6 @@ msgid "unreadable attribute"
msgstr "hindi mabasa ang attribute" msgstr "hindi mabasa ang attribute"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "Hindi supportadong tipo ng %q" msgstr "Hindi supportadong tipo ng %q"
@ -4369,10 +4349,6 @@ msgstr "wala sa sakop ang address"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y ay dapat int"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
#, fuzzy #, fuzzy
msgid "y value out of bounds" msgid "y value out of bounds"
@ -4394,6 +4370,23 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "" msgstr ""
#~ msgid "color should be an int"
#~ msgstr "color ay dapat na int"
#, fuzzy
#~ msgid "end_x should be an int"
#~ msgstr "y ay dapat int"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_index ay dapat na int"
#, fuzzy
#~ msgid "start_x should be an int"
#~ msgstr "y ay dapat int"
#~ msgid "y should be an int"
#~ msgstr "y ay dapat int"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -2628,8 +2628,7 @@ msgstr "ne peut pas assigner à une expression"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "ne peut pas s'annuler soi-même" msgstr "ne peut pas s'annuler soi-même"
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "impossible de convertir %q en %q" msgstr "impossible de convertir %q en %q"
@ -2825,10 +2824,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "la couleur doit être entre 0x000000 et 0xffffff" msgstr "la couleur doit être entre 0x000000 et 0xffffff"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "la couleur doit être un entier 'int'"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "comparaison entre int et uint" msgstr "comparaison entre int et uint"
@ -2983,10 +2978,6 @@ msgstr "séquence vide"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "fin de format en cherchant une spécification de conversion" msgstr "fin de format en cherchant une spécification de conversion"
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr "end_x doit être un entier 'int'"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "epoch_time n'est pas supporté sur ce panneau" msgstr "epoch_time n'est pas supporté sur ce panneau"
@ -3864,10 +3855,6 @@ msgstr "pack attend %d element(s) (%d reçu)"
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "la palette doit être longue de 32 octets" msgstr "la palette doit être longue de 32 octets"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_index devrait être un entier 'int'"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "les paramètres doivent être des registres dans la séquence a2 à a5" msgstr "les paramètres doivent être des registres dans la séquence a2 à a5"
@ -4106,10 +4093,6 @@ msgstr "source_bitmap doit avoir une value_count de 8"
msgid "start/end indices" msgid "start/end indices"
msgstr "indices de début/fin" msgstr "indices de début/fin"
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr "'start_x' doit être un entier 'int'"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "le pas 'step' doit être non nul" msgstr "le pas 'step' doit être non nul"
@ -4325,7 +4308,6 @@ msgid "unreadable attribute"
msgstr "attribut illisible" msgstr "attribut illisible"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "type %q non pris on charge" msgstr "type %q non pris on charge"
@ -4455,10 +4437,6 @@ msgstr "valeur x hors limites"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "Échec de xTaskCreate" msgstr "Échec de xTaskCreate"
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "'y' doit être un entier 'int'"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "valeur y hors limites" msgstr "valeur y hors limites"
@ -4479,6 +4457,21 @@ msgstr "zi doit être de type float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi doit être de forme (n_section, 2)" msgstr "zi doit être de forme (n_section, 2)"
#~ msgid "color should be an int"
#~ msgstr "la couleur doit être un entier 'int'"
#~ msgid "end_x should be an int"
#~ msgstr "end_x doit être un entier 'int'"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_index devrait être un entier 'int'"
#~ msgid "start_x should be an int"
#~ msgstr "'start_x' doit être un entier 'int'"
#~ msgid "y should be an int"
#~ msgstr "'y' doit être un entier 'int'"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -2526,8 +2526,7 @@ msgstr ""
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "" msgstr ""
@ -2714,10 +2713,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "" msgstr ""
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr ""
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2869,10 +2864,6 @@ msgstr ""
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3739,10 +3730,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "" msgstr ""
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr ""
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "" msgstr ""
@ -3980,10 +3967,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr ""
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "" msgstr ""
@ -4198,7 +4181,6 @@ msgid "unreadable attribute"
msgstr "" msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "" msgstr ""
@ -4328,10 +4310,6 @@ msgstr ""
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr ""
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "" msgstr ""

View File

@ -2560,8 +2560,7 @@ msgstr "impossibile assegnare all'espressione"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "" msgstr ""
@ -2750,10 +2749,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "il colore deve essere compreso tra 0x000000 e 0xffffff" msgstr "il colore deve essere compreso tra 0x000000 e 0xffffff"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "il colore deve essere un int"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2908,11 +2903,6 @@ msgstr "sequenza vuota"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
#, fuzzy
msgid "end_x should be an int"
msgstr "y dovrebbe essere un int"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3789,10 +3779,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "la palette deve essere lunga 32 byte" msgstr "la palette deve essere lunga 32 byte"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_index deve essere un int"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "parametri devono essere i registri in sequenza da a2 a a5" msgstr "parametri devono essere i registri in sequenza da a2 a a5"
@ -4032,11 +4018,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
#, fuzzy
msgid "start_x should be an int"
msgstr "y dovrebbe essere un int"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "step deve essere non zero" msgstr "step deve essere non zero"
@ -4251,7 +4232,6 @@ msgid "unreadable attribute"
msgstr "attributo non leggibile" msgstr "attributo non leggibile"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "tipo di %q non supportato" msgstr "tipo di %q non supportato"
@ -4382,10 +4362,6 @@ msgstr "indirizzo fuori limite"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y dovrebbe essere un int"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
#, fuzzy #, fuzzy
msgid "y value out of bounds" msgid "y value out of bounds"
@ -4407,6 +4383,23 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "" msgstr ""
#~ msgid "color should be an int"
#~ msgstr "il colore deve essere un int"
#, fuzzy
#~ msgid "end_x should be an int"
#~ msgstr "y dovrebbe essere un int"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_index deve essere un int"
#, fuzzy
#~ msgid "start_x should be an int"
#~ msgstr "y dovrebbe essere un int"
#~ msgid "y should be an int"
#~ msgstr "y dovrebbe essere un int"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -2540,8 +2540,7 @@ msgstr "式には代入できません"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "%qを%qに変換できません" msgstr "%qを%qに変換できません"
@ -2730,10 +2729,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "色は0x000000から0xffffffでなければなりません" msgstr "色は0x000000から0xffffffでなければなりません"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr ""
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2887,10 +2882,6 @@ msgstr ""
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr "end_xは整数でなければなりません"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3758,10 +3749,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "パレットの長さは32バイトでなければなりません" msgstr "パレットの長さは32バイトでなければなりません"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_indexには整数が必要"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "" msgstr ""
@ -4001,10 +3988,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr ""
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "stepは非ゼロ値でなければなりません" msgstr "stepは非ゼロ値でなければなりません"
@ -4219,7 +4202,6 @@ msgid "unreadable attribute"
msgstr "読み込み不可能な属性" msgstr "読み込み不可能な属性"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "非対応の型 %q" msgstr "非対応の型 %q"
@ -4349,10 +4331,6 @@ msgstr "xが範囲外"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "yは整数でなければなりません"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "yが範囲外" msgstr "yが範囲外"
@ -4373,6 +4351,15 @@ msgstr "ziはfloat値でなければなりません"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "" msgstr ""
#~ msgid "end_x should be an int"
#~ msgstr "end_xは整数でなければなりません"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_indexには整数が必要"
#~ msgid "y should be an int"
#~ msgstr "yは整数でなければなりません"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -2530,8 +2530,7 @@ msgstr ""
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "" msgstr ""
@ -2718,10 +2717,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "" msgstr ""
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr ""
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2873,10 +2868,6 @@ msgstr ""
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3743,10 +3734,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "" msgstr ""
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr ""
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "" msgstr ""
@ -3984,10 +3971,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr ""
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "" msgstr ""
@ -4202,7 +4185,6 @@ msgid "unreadable attribute"
msgstr "" msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "" msgstr ""
@ -4332,10 +4314,6 @@ msgstr ""
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr ""
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "" msgstr ""

View File

@ -2557,8 +2557,7 @@ msgstr "kan niet toewijzen aan expressie"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "kan %q niet naar %q converteren" msgstr "kan %q niet naar %q converteren"
@ -2745,10 +2744,6 @@ msgstr "kleurbuffer moet een bytearray of array van type 'b' of 'B' zijn"
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "kleur moet tussen 0x000000 en 0xffffff liggen" msgstr "kleur moet tussen 0x000000 en 0xffffff liggen"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "kleur moet een int zijn"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2902,10 +2897,6 @@ msgstr "lege sequentie"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "einde van format terwijl zoekend naar conversie-specifier" msgstr "einde van format terwijl zoekend naar conversie-specifier"
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr "end_x moet een int zijn"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "epoch_time niet ondersteund op dit bord" msgstr "epoch_time niet ondersteund op dit bord"
@ -3776,10 +3767,6 @@ msgstr "pack verwachtte %d elementen (ontving %d)"
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "palette moet 32 bytes lang zijn" msgstr "palette moet 32 bytes lang zijn"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_index moet een int zijn"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "parameters moeten registers zijn in de volgorde a2 tot a5" msgstr "parameters moeten registers zijn in de volgorde a2 tot a5"
@ -4017,10 +4004,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "start/stop indices" msgstr "start/stop indices"
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr "start_x moet een int zijn"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "step mag geen nul zijn" msgstr "step mag geen nul zijn"
@ -4235,7 +4218,6 @@ msgid "unreadable attribute"
msgstr "onleesbaar attribuut" msgstr "onleesbaar attribuut"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "niet ondersteund %q type" msgstr "niet ondersteund %q type"
@ -4365,10 +4347,6 @@ msgstr "x-waarde buiten bereik"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y moet een int zijn"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "y-waarde buiten bereik" msgstr "y-waarde buiten bereik"
@ -4389,6 +4367,21 @@ msgstr "zi moet van type float zijn"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi moet vorm (n_section, 2) hebben" msgstr "zi moet vorm (n_section, 2) hebben"
#~ msgid "color should be an int"
#~ msgstr "kleur moet een int zijn"
#~ msgid "end_x should be an int"
#~ msgstr "end_x moet een int zijn"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_index moet een int zijn"
#~ msgid "start_x should be an int"
#~ msgstr "start_x moet een int zijn"
#~ msgid "y should be an int"
#~ msgstr "y moet een int zijn"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -2537,8 +2537,7 @@ msgstr "przypisanie do wyrażenia"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "nie można dokonać konwersji %q na %q" msgstr "nie można dokonać konwersji %q na %q"
@ -2725,10 +2724,6 @@ msgstr "bufor kolorów musi być bytearray lub tablicą typu 'b' lub 'B'"
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "kolor musi być pomiędzy 0x000000 a 0xffffff" msgstr "kolor musi być pomiędzy 0x000000 a 0xffffff"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "kolor powinien być liczbą całkowitą"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2881,10 +2876,6 @@ msgstr "pusta sekwencja"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "koniec formatu przy szukaniu specyfikacji konwersji" msgstr "koniec formatu przy szukaniu specyfikacji konwersji"
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr "end_x powinien być całkowity"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3751,10 +3742,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "paleta musi mieć 32 bajty długości" msgstr "paleta musi mieć 32 bajty długości"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_index powinien być całkowity"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "parametry muszą być rejestrami w kolejności a2 do a5" msgstr "parametry muszą być rejestrami w kolejności a2 do a5"
@ -3993,10 +3980,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "początkowe/końcowe indeksy" msgstr "początkowe/końcowe indeksy"
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr "start_x powinien być całkowity"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "step nie może być zerowe" msgstr "step nie może być zerowe"
@ -4211,7 +4194,6 @@ msgid "unreadable attribute"
msgstr "nieczytelny atrybut" msgstr "nieczytelny atrybut"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "zły typ %q" msgstr "zły typ %q"
@ -4341,10 +4323,6 @@ msgstr "x poza zakresem"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y powinno być całkowite"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "y poza zakresem" msgstr "y poza zakresem"
@ -4365,6 +4343,21 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "" msgstr ""
#~ msgid "color should be an int"
#~ msgstr "kolor powinien być liczbą całkowitą"
#~ msgid "end_x should be an int"
#~ msgstr "end_x powinien być całkowity"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_index powinien być całkowity"
#~ msgid "start_x should be an int"
#~ msgstr "start_x powinien być całkowity"
#~ msgid "y should be an int"
#~ msgstr "y powinno być całkowite"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -2609,8 +2609,7 @@ msgstr "a expressão não pode ser atribuída"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "não é possível cancelar a si mesmo" msgstr "não é possível cancelar a si mesmo"
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "não é possível converter %q para %q" msgstr "não é possível converter %q para %q"
@ -2803,10 +2802,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "cor deve estar entre 0x000000 e 0xffffff" msgstr "cor deve estar entre 0x000000 e 0xffffff"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "cor deve ser um int"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "comparação de int e uint" msgstr "comparação de int e uint"
@ -2961,10 +2956,6 @@ msgstr "seqüência vazia"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "final de formato enquanto procura pelo especificador de conversão" msgstr "final de formato enquanto procura pelo especificador de conversão"
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr "end_x deve ser um int"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "O epoch_time não é compatível com esta placa" msgstr "O epoch_time não é compatível com esta placa"
@ -3844,10 +3835,6 @@ msgstr "o pacote previa %d itens para a empacotamento (obteve %d)"
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "a paleta deve ter 32 bytes de comprimento" msgstr "a paleta deve ter 32 bytes de comprimento"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_index deve ser um int"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "os parâmetros devem ser registradores na sequência a2 até a5" msgstr "os parâmetros devem ser registradores na sequência a2 até a5"
@ -4085,10 +4072,6 @@ msgstr "o source_bitmap deve ter o value_count de 8"
msgid "start/end indices" msgid "start/end indices"
msgstr "os índices de início/fim" msgstr "os índices de início/fim"
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr "start_x deve ser um int"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "o passo deve ser diferente de zero" msgstr "o passo deve ser diferente de zero"
@ -4303,7 +4286,6 @@ msgid "unreadable attribute"
msgstr "atributo ilegível" msgstr "atributo ilegível"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "tipo %q não suportado" msgstr "tipo %q não suportado"
@ -4433,10 +4415,6 @@ msgstr "o valor x está fora dos limites"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "o xTaskCreate falhou" msgstr "o xTaskCreate falhou"
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y deve ser um int"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "o valor y está fora dos limites" msgstr "o valor y está fora dos limites"
@ -4457,6 +4435,21 @@ msgstr "zi deve ser de um tipo float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi deve estar na forma (n_section, 2)" msgstr "zi deve estar na forma (n_section, 2)"
#~ msgid "color should be an int"
#~ msgstr "cor deve ser um int"
#~ msgid "end_x should be an int"
#~ msgstr "end_x deve ser um int"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_index deve ser um int"
#~ msgid "start_x should be an int"
#~ msgstr "start_x deve ser um int"
#~ msgid "y should be an int"
#~ msgstr "y deve ser um int"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -2575,8 +2575,7 @@ msgstr ""
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "" msgstr ""
@ -2763,10 +2762,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "" msgstr ""
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr ""
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2918,10 +2913,6 @@ msgstr ""
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3788,10 +3779,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "" msgstr ""
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr ""
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "" msgstr ""
@ -4029,10 +4016,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr ""
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "" msgstr ""
@ -4247,7 +4230,6 @@ msgid "unreadable attribute"
msgstr "" msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "" msgstr ""
@ -4377,10 +4359,6 @@ msgstr ""
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr ""
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "" msgstr ""

View File

@ -2581,8 +2581,7 @@ msgstr "kan inte tilldela uttryck"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "kan inte avbryta sig själv" msgstr "kan inte avbryta sig själv"
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "kan inte konvertera %q till %q" msgstr "kan inte konvertera %q till %q"
@ -2771,10 +2770,6 @@ msgstr "färgbuffert måste vara en bytearray eller matris av typ 'b' eller 'B'"
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "färg måste vara mellan 0x000000 och 0xffffff" msgstr "färg måste vara mellan 0x000000 och 0xffffff"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "color ska vara en int"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "jämförelse av int och uint" msgstr "jämförelse av int och uint"
@ -2929,10 +2924,6 @@ msgstr "tom sekvens"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "slut på format vid sökning efter konverteringsspecificerare" msgstr "slut på format vid sökning efter konverteringsspecificerare"
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr "color ska vara en int"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "epoch_time stöds inte av detta kort" msgstr "epoch_time stöds inte av detta kort"
@ -3804,10 +3795,6 @@ msgstr "pack förväntade %d stycken för packning (fick %d)"
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "palette måste vara 32 bytes lång" msgstr "palette måste vara 32 bytes lång"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "palette_index ska vara en int"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "parametrarna måste registreras i följd a2-a5" msgstr "parametrarna måste registreras i följd a2-a5"
@ -4046,10 +4033,6 @@ msgstr "source_bitmap måste ha value_count av 8"
msgid "start/end indices" msgid "start/end indices"
msgstr "start-/slutindex" msgstr "start-/slutindex"
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr "start_x ska vara en int"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "step måste vara icke-noll" msgstr "step måste vara icke-noll"
@ -4264,7 +4247,6 @@ msgid "unreadable attribute"
msgstr "attribut kan inte läsas" msgstr "attribut kan inte läsas"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "typ %q stöds inte" msgstr "typ %q stöds inte"
@ -4394,10 +4376,6 @@ msgstr "x-värde utanför intervall"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "xTaskCreate misslyckades" msgstr "xTaskCreate misslyckades"
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y ska vara en int"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "y-värde utanför intervall" msgstr "y-värde utanför intervall"
@ -4418,6 +4396,21 @@ msgstr "zi måste vara av typ float"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi måste vara i formen (n_section, 2)" msgstr "zi måste vara i formen (n_section, 2)"
#~ msgid "color should be an int"
#~ msgstr "color ska vara en int"
#~ msgid "end_x should be an int"
#~ msgstr "color ska vara en int"
#~ msgid "palette_index should be an int"
#~ msgstr "palette_index ska vara en int"
#~ msgid "start_x should be an int"
#~ msgstr "start_x ska vara en int"
#~ msgid "y should be an int"
#~ msgstr "y ska vara en int"
#~ msgid "%q ``must`` be a bytearray or array of type 'h', 'H', 'b' or 'B'" #~ msgid "%q ``must`` be a bytearray or array of type 'h', 'H', 'b' or 'B'"
#~ msgstr "" #~ msgstr ""
#~ "%q ``måste`` vara en bytearray eller matris av typen 'h', 'H', 'b' eller " #~ "%q ``måste`` vara en bytearray eller matris av typen 'h', 'H', 'b' eller "

View File

@ -2545,8 +2545,7 @@ msgstr ""
msgid "can't cancel self" msgid "can't cancel self"
msgstr "" msgstr ""
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "" msgstr ""
@ -2733,10 +2732,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "" msgstr ""
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr ""
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "" msgstr ""
@ -2888,10 +2883,6 @@ msgstr ""
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "" msgstr ""
@ -3758,10 +3749,6 @@ msgstr ""
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "" msgstr ""
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr ""
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "" msgstr ""
@ -3999,10 +3986,6 @@ msgstr ""
msgid "start/end indices" msgid "start/end indices"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr ""
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "" msgstr ""
@ -4217,7 +4200,6 @@ msgid "unreadable attribute"
msgstr "" msgstr ""
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "" msgstr ""
@ -4347,10 +4329,6 @@ msgstr ""
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "" msgstr ""
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr ""
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "" msgstr ""

View File

@ -2584,8 +2584,7 @@ msgstr "bùnéng fēnpèi dào biǎodá shì"
msgid "can't cancel self" msgid "can't cancel self"
msgstr "bù néng qǔ xiāo zì wǒ" msgstr "bù néng qǔ xiāo zì wǒ"
#: py/obj.c py/objint.c shared-bindings/i2ctarget/I2CTarget.c #: py/obj.c py/objint.c shared-module/adafruit_pixelbuf/PixelBuf.c
#: shared-module/adafruit_pixelbuf/PixelBuf.c
msgid "can't convert %q to %q" msgid "can't convert %q to %q"
msgstr "Wúfǎ jiāng %q zhuǎnhuàn wèi %q" msgstr "Wúfǎ jiāng %q zhuǎnhuàn wèi %q"
@ -2776,10 +2775,6 @@ msgstr ""
msgid "color must be between 0x000000 and 0xffffff" msgid "color must be between 0x000000 and 0xffffff"
msgstr "yánsè bìxū jiè yú 0x000000 hé 0xffffff zhī jiān" msgstr "yánsè bìxū jiè yú 0x000000 hé 0xffffff zhī jiān"
#: shared-bindings/displayio/ColorConverter.c
msgid "color should be an int"
msgstr "yánsè yīng wèi zhěngshù"
#: py/emitnative.c #: py/emitnative.c
msgid "comparison of int and uint" msgid "comparison of int and uint"
msgstr "yīn tè hé wū yīn tè de bǐ jiào" msgstr "yīn tè hé wū yīn tè de bǐ jiào"
@ -2933,10 +2928,6 @@ msgstr "kōng xùliè"
msgid "end of format while looking for conversion specifier" msgid "end of format while looking for conversion specifier"
msgstr "xúnzhǎo zhuǎnhuàn biāozhù géshì de jiéshù" msgstr "xúnzhǎo zhuǎnhuàn biāozhù géshì de jiéshù"
#: shared-bindings/displayio/Shape.c
msgid "end_x should be an int"
msgstr "jiéwěi_x yīnggāi shì yīgè zhěngshù"
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c
msgid "epoch_time not supported on this board" msgid "epoch_time not supported on this board"
msgstr "epoch_time bǎn bù zhī chí cǐ bǎn běn" msgstr "epoch_time bǎn bù zhī chí cǐ bǎn běn"
@ -3804,10 +3795,6 @@ msgstr "bāo zhuāng yù qī de %d bāo zhuāng xiàng mù (dé dào %d)"
msgid "palette must be 32 bytes long" msgid "palette must be 32 bytes long"
msgstr "yánsè bìxū shì 32 gè zì jié" msgstr "yánsè bìxū shì 32 gè zì jié"
#: shared-bindings/displayio/Palette.c
msgid "palette_index should be an int"
msgstr "yánsè suǒyǐn yīnggāi shì yīgè zhěngshù"
#: py/emitinlinextensa.c #: py/emitinlinextensa.c
msgid "parameters must be registers in sequence a2 to a5" msgid "parameters must be registers in sequence a2 to a5"
msgstr "cānshù bìxū shì xùliè a2 zhì a5 de dēngjì shù" msgstr "cānshù bìxū shì xùliè a2 zhì a5 de dēngjì shù"
@ -4048,10 +4035,6 @@ msgstr "yuán wèi tú (source_bitmap) de zhí de shù mù (value_count) bì xū
msgid "start/end indices" msgid "start/end indices"
msgstr "kāishǐ/jiéshù zhǐshù" msgstr "kāishǐ/jiéshù zhǐshù"
#: shared-bindings/displayio/Shape.c
msgid "start_x should be an int"
msgstr "kāishǐ_x yīnggāi shì yīgè zhěngshù"
#: shared-bindings/random/__init__.c #: shared-bindings/random/__init__.c
msgid "step must be non-zero" msgid "step must be non-zero"
msgstr "bùzhòu bìxū shìfēi líng" msgstr "bùzhòu bìxū shìfēi líng"
@ -4266,7 +4249,6 @@ msgid "unreadable attribute"
msgstr "bùkě dú shǔxìng" msgstr "bùkě dú shǔxìng"
#: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c #: shared-bindings/displayio/TileGrid.c shared-bindings/vectorio/VectorShape.c
#: shared-module/vectorio/Polygon.c shared-module/vectorio/VectorShape.c
msgid "unsupported %q type" msgid "unsupported %q type"
msgstr "bù zhīchí %q lèixíng" msgstr "bù zhīchí %q lèixíng"
@ -4396,10 +4378,6 @@ msgstr "x zhí chāochū biānjiè"
msgid "xTaskCreate failed" msgid "xTaskCreate failed"
msgstr "xTaskCreate shī bài" msgstr "xTaskCreate shī bài"
#: shared-bindings/displayio/Shape.c
msgid "y should be an int"
msgstr "y yīnggāi shì yīgè zhěngshù"
#: shared-module/displayio/Shape.c #: shared-module/displayio/Shape.c
msgid "y value out of bounds" msgid "y value out of bounds"
msgstr "y zhí chāochū biānjiè" msgstr "y zhí chāochū biānjiè"
@ -4420,6 +4398,21 @@ msgstr "zi bìxū wèi fú diǎn xíng"
msgid "zi must be of shape (n_section, 2)" msgid "zi must be of shape (n_section, 2)"
msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)" msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)"
#~ msgid "color should be an int"
#~ msgstr "yánsè yīng wèi zhěngshù"
#~ msgid "end_x should be an int"
#~ msgstr "jiéwěi_x yīnggāi shì yīgè zhěngshù"
#~ msgid "palette_index should be an int"
#~ msgstr "yánsè suǒyǐn yīnggāi shì yīgè zhěngshù"
#~ msgid "start_x should be an int"
#~ msgstr "kāishǐ_x yīnggāi shì yīgè zhěngshù"
#~ msgid "y should be an int"
#~ msgstr "y yīnggāi shì yīgè zhěngshù"
#~ msgid "" #~ msgid ""
#~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' " #~ "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' "
#~ "or 'B'" #~ "or 'B'"

View File

@ -208,8 +208,9 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
self->sigint_enabled = sigint_enabled; self->sigint_enabled = sigint_enabled;
if (rx != NULL) { if (rx != NULL) {
// Use the provided buffer when given.
if (receiver_buffer != NULL) { if (receiver_buffer != NULL) {
self->ringbuf = (ringbuf_t) { receiver_buffer, receiver_buffer_size }; ringbuf_init(&self->ringbuf, receiver_buffer, receiver_buffer_size);
} else { } else {
// Initially allocate the UART's buffer in the long-lived part of the // Initially allocate the UART's buffer in the long-lived part of the
// heap. UARTs are generally long-lived objects, but the "make long- // heap. UARTs are generally long-lived objects, but the "make long-
@ -217,7 +218,6 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
// self->buffer, so do it manually. (However, as long as internal // self->buffer, so do it manually. (However, as long as internal
// pointers like this are NOT moved, allocating the buffer // pointers like this are NOT moved, allocating the buffer
// in the long-lived pool is not strictly necessary) // in the long-lived pool is not strictly necessary)
// (This is a macro.)
if (!ringbuf_alloc(&self->ringbuf, receiver_buffer_size, true)) { if (!ringbuf_alloc(&self->ringbuf, receiver_buffer_size, true)) {
m_malloc_fail(receiver_buffer_size); m_malloc_fail(receiver_buffer_size);
} }
@ -337,7 +337,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) {
pl011->CR = 0; pl011->CR = 0;
} }
active_uart[self->uart_id] = NULL; active_uart[self->uart_id] = NULL;
ringbuf_free(&self->ringbuf); ringbuf_deinit(&self->ringbuf);
uart_status[self->uart_id] = STATUS_FREE; uart_status[self->uart_id] = STATUS_FREE;
common_hal_reset_pin(self->tx_pin); common_hal_reset_pin(self->tx_pin);
common_hal_reset_pin(self->rx_pin); common_hal_reset_pin(self->rx_pin);

View File

@ -36,11 +36,11 @@ typedef struct {
const mcu_pin_obj_t *rx_pin; const mcu_pin_obj_t *rx_pin;
const mcu_pin_obj_t *cts_pin; const mcu_pin_obj_t *cts_pin;
const mcu_pin_obj_t *rts_pin; const mcu_pin_obj_t *rts_pin;
uint8_t uart_id;
uint32_t baudrate; uint32_t baudrate;
uint32_t timeout_ms; uint32_t timeout_ms;
bool sigint_enabled;
ringbuf_t ringbuf; ringbuf_t ringbuf;
bool sigint_enabled;
uint8_t uart_id;
} busio_uart_obj_t; } busio_uart_obj_t;
extern void reset_uart(void); extern void reset_uart(void);

View File

@ -46,9 +46,9 @@
//| self, //| self,
//| *, //| *,
//| data_pins: List[microcontroller.Pin], //| data_pins: List[microcontroller.Pin],
//| pixel_clock: microcontroller.Pin, //| pixel_clock_pin: microcontroller.Pin,
//| vsync: microcontroller.Pin, //| vsync_pin: microcontroller.Pin,
//| href: microcontroller.Pin, //| href_pin: microcontroller.Pin,
//| i2c: busio.I2C, //| i2c: busio.I2C,
//| external_clock_pin: microcontroller.Pin, //| external_clock_pin: microcontroller.Pin,
//| external_clock_frequency: int, //| external_clock_frequency: int,
@ -79,12 +79,12 @@
//| that case. //| that case.
//| //|
//| :param data_pins: The 8 data data_pins used for image data transfer from the camera module, least significant bit first //| :param data_pins: The 8 data data_pins used for image data transfer from the camera module, least significant bit first
//| :param pixel_clock: The pixel clock output from the camera module //| :param pixel_clock_pin: The pixel clock output from the camera module
//| :param vsync: The vertical sync pulse output from the camera module //| :param vsync_pin: The vertical sync pulse output from the camera module
//| :param href: The horizontal reference output from the camera module //| :param href_pin: The horizontal reference output from the camera module
//| :param i2c: The I2C bus connected to the camera module //| :param i2c: The I2C bus connected to the camera module
//| :param external_clock_frequency: The frequency generated on the external clock pin
//| :param external_clock_pin: The pin on which to generate the external clock //| :param external_clock_pin: The pin on which to generate the external clock
//| :param external_clock_frequency: The frequency generated on the external clock pin
//| :param powerdown_pin: The powerdown input to the camera module //| :param powerdown_pin: The powerdown input to the camera module
//| :param reset_pin: The reset input to the camera module //| :param reset_pin: The reset input to the camera module
//| :param pixel_format: The pixel format of the captured image //| :param pixel_format: The pixel format of the captured image
@ -125,7 +125,7 @@ STATIC mp_obj_t esp32_camera_camera_make_new(const mp_obj_type_t *type, size_t n
const mcu_pin_obj_t *pixel_clock_pin = validate_obj_is_free_pin(args[ARG_pixel_clock_pin].u_obj); const mcu_pin_obj_t *pixel_clock_pin = validate_obj_is_free_pin(args[ARG_pixel_clock_pin].u_obj);
const mcu_pin_obj_t *vsync_pin = validate_obj_is_free_pin(args[ARG_vsync_pin].u_obj); const mcu_pin_obj_t *vsync_pin = validate_obj_is_free_pin(args[ARG_vsync_pin].u_obj);
const mcu_pin_obj_t *href_pin = validate_obj_is_free_pin(args[ARG_href_pin].u_obj); const mcu_pin_obj_t *href_pin = validate_obj_is_free_pin(args[ARG_href_pin].u_obj);
const busio_i2c_obj_t *i2c = MP_OBJ_TO_PTR(mp_arg_validate_type(args[ARG_i2c].u_obj, &busio_i2c_type, MP_QSTR_i2c)); busio_i2c_obj_t *i2c = MP_OBJ_TO_PTR(mp_arg_validate_type(args[ARG_i2c].u_obj, &busio_i2c_type, MP_QSTR_i2c));
const mcu_pin_obj_t *external_clock_pin = validate_obj_is_free_pin(args[ARG_external_clock_pin].u_obj); const mcu_pin_obj_t *external_clock_pin = validate_obj_is_free_pin(args[ARG_external_clock_pin].u_obj);
const mcu_pin_obj_t *powerdown_pin = validate_obj_is_free_pin_or_none(args[ARG_powerdown_pin].u_obj); const mcu_pin_obj_t *powerdown_pin = validate_obj_is_free_pin_or_none(args[ARG_powerdown_pin].u_obj);
const mcu_pin_obj_t *reset_pin = validate_obj_is_free_pin_or_none(args[ARG_reset_pin].u_obj); const mcu_pin_obj_t *reset_pin = validate_obj_is_free_pin_or_none(args[ARG_reset_pin].u_obj);

View File

@ -45,7 +45,7 @@ extern void common_hal_esp32_camera_camera_construct(
const mcu_pin_obj_t *href_pin, const mcu_pin_obj_t *href_pin,
const mcu_pin_obj_t *powerdown_pin, const mcu_pin_obj_t *powerdown_pin,
const mcu_pin_obj_t *reset_pin, const mcu_pin_obj_t *reset_pin,
const busio_i2c_obj_t *i2c, busio_i2c_obj_t *i2c,
mp_int_t external_clock_frequency, mp_int_t external_clock_frequency,
pixformat_t pixel_format, pixformat_t pixel_format,
framesize_t frame_size, framesize_t frame_size,

View File

@ -1,5 +1,5 @@
CIRCUITPY_CREATOR_ID = 0x70010001 CIRCUITPY_CREATOR_ID = 0x000C303B
CIRCUITPY_CREATION_ID = 0x00100001 CIRCUITPY_CREATION_ID = 0x00320001
IDF_TARGET = esp32c3 IDF_TARGET = esp32c3

View File

@ -72,11 +72,7 @@ void _common_hal_bleio_characteristic_buffer_construct(bleio_characteristic_buff
void *static_handler_entry) { void *static_handler_entry) {
self->characteristic = characteristic; self->characteristic = characteristic;
self->timeout_ms = timeout * 1000; self->timeout_ms = timeout * 1000;
ringbuf_init(&self->ringbuf, buffer, buffer_size);
self->ringbuf.buf = (uint8_t *)buffer;
self->ringbuf.size = buffer_size;
self->ringbuf.iget = 0;
self->ringbuf.iput = 0;
if (static_handler_entry != NULL) { if (static_handler_entry != NULL) {
ble_event_add_handler_entry((ble_event_handler_entry_t *)static_handler_entry, characteristic_buffer_on_ble_evt, self); ble_event_add_handler_entry((ble_event_handler_entry_t *)static_handler_entry, characteristic_buffer_on_ble_evt, self);
@ -131,6 +127,7 @@ void common_hal_bleio_characteristic_buffer_deinit(bleio_characteristic_buffer_o
if (!common_hal_bleio_characteristic_buffer_deinited(self)) { if (!common_hal_bleio_characteristic_buffer_deinited(self)) {
ble_event_remove_handler(characteristic_buffer_on_ble_evt, self); ble_event_remove_handler(characteristic_buffer_on_ble_evt, self);
self->characteristic = NULL; self->characteristic = NULL;
ringbuf_deinit(&self->ringbuf);
} }
} }

View File

@ -42,13 +42,13 @@
STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, const struct os_mbuf *mbuf) { STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, const struct os_mbuf *mbuf) {
size_t len = OS_MBUF_PKTLEN(mbuf); size_t len = OS_MBUF_PKTLEN(mbuf);
if (len + sizeof(uint16_t) > ringbuf_capacity(&self->ringbuf)) { if (len + sizeof(uint16_t) > ringbuf_size(&self->ringbuf)) {
// This shouldn't happen but can if our buffer size was much smaller than // This shouldn't happen but can if our buffer size was much smaller than
// the writes the client actually makes. // the writes the client actually makes.
return; return;
} }
// Make room for the new value by dropping the oldest packets first. // Make room for the new value by dropping the oldest packets first.
while (ringbuf_capacity(&self->ringbuf) - ringbuf_num_filled(&self->ringbuf) < len + sizeof(uint16_t)) { while (ringbuf_size(&self->ringbuf) - ringbuf_num_filled(&self->ringbuf) < len + sizeof(uint16_t)) {
uint16_t packet_length; uint16_t packet_length;
ringbuf_get_n(&self->ringbuf, (uint8_t *)&packet_length, sizeof(uint16_t)); ringbuf_get_n(&self->ringbuf, (uint8_t *)&packet_length, sizeof(uint16_t));
for (uint16_t i = 0; i < packet_length; i++) { for (uint16_t i = 0; i < packet_length; i++) {
@ -164,10 +164,7 @@ void _common_hal_bleio_packet_buffer_construct(
} }
if (incoming) { if (incoming) {
self->ringbuf.buf = (uint8_t *)incoming_buffer; ringbuf_init(&self->ringbuf, (uint8_t *)incoming_buffer, incoming_buffer_size);
self->ringbuf.size = incoming_buffer_size;
self->ringbuf.iget = 0;
self->ringbuf.iput = 0;
} }
self->packet_queued = false; self->packet_queued = false;
@ -219,8 +216,7 @@ void common_hal_bleio_packet_buffer_construct(
size_t incoming_buffer_size = 0; size_t incoming_buffer_size = 0;
uint32_t *incoming_buffer = NULL; uint32_t *incoming_buffer = NULL;
if (incoming) { if (incoming) {
incoming_buffer_size = buffer_size * (sizeof(uint16_t) + max_packet_size); ringbuf_init(&self->ringbuf, (uint8_t *)incoming_buffer, incoming_buffer_size);
incoming_buffer = m_malloc(incoming_buffer_size, false);
} }
uint32_t *outgoing1 = NULL; uint32_t *outgoing1 = NULL;
@ -414,5 +410,6 @@ bool common_hal_bleio_packet_buffer_deinited(bleio_packet_buffer_obj_t *self) {
void common_hal_bleio_packet_buffer_deinit(bleio_packet_buffer_obj_t *self) { void common_hal_bleio_packet_buffer_deinit(bleio_packet_buffer_obj_t *self) {
if (!common_hal_bleio_packet_buffer_deinited(self)) { if (!common_hal_bleio_packet_buffer_deinited(self)) {
ble_event_remove_handler(packet_buffer_on_ble_client_evt, self); ble_event_remove_handler(packet_buffer_on_ble_client_evt, self);
ringbuf_deinit(&self->ringbuf);
} }
} }

View File

@ -24,12 +24,15 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
#include "py/mperrno.h"
#include "py/runtime.h" #include "py/runtime.h"
#include "bindings/esp32_camera/Camera.h" #include "bindings/esp32_camera/Camera.h"
#include "bindings/espidf/__init__.h" #include "bindings/espidf/__init__.h"
#include "common-hal/esp32_camera/Camera.h" #include "common-hal/esp32_camera/Camera.h"
#include "shared-bindings/busio/I2C.h"
#include "shared-bindings/microcontroller/Pin.h" #include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/util.h"
#include "common-hal/microcontroller/Pin.h" #include "common-hal/microcontroller/Pin.h"
#include "esp32-camera/driver/private_include/cam_hal.h" #include "esp32-camera/driver/private_include/cam_hal.h"
@ -38,6 +41,19 @@
#error esp32_camera only works on boards configured with spiram, disable it in mpconfigboard.mk #error esp32_camera only works on boards configured with spiram, disable it in mpconfigboard.mk
#endif #endif
static void i2c_lock(esp32_camera_camera_obj_t *self) {
if (common_hal_busio_i2c_deinited(self->i2c)) {
raise_deinited_error();
}
if (!common_hal_busio_i2c_try_lock(self->i2c)) {
mp_raise_OSError(MP_EWOULDBLOCK);
}
}
static void i2c_unlock(esp32_camera_camera_obj_t *self) {
common_hal_busio_i2c_unlock(self->i2c);
}
static void maybe_claim_pin(const mcu_pin_obj_t *pin) { static void maybe_claim_pin(const mcu_pin_obj_t *pin) {
if (pin) { if (pin) {
claim_pin(pin); claim_pin(pin);
@ -53,7 +69,7 @@ void common_hal_esp32_camera_camera_construct(
const mcu_pin_obj_t *href_pin, const mcu_pin_obj_t *href_pin,
const mcu_pin_obj_t *powerdown_pin, const mcu_pin_obj_t *powerdown_pin,
const mcu_pin_obj_t *reset_pin, const mcu_pin_obj_t *reset_pin,
const busio_i2c_obj_t *i2c, busio_i2c_obj_t *i2c,
mp_int_t external_clock_frequency, mp_int_t external_clock_frequency,
pixformat_t pixel_format, pixformat_t pixel_format,
framesize_t frame_size, framesize_t frame_size,
@ -78,6 +94,8 @@ void common_hal_esp32_camera_camera_construct(
common_hal_pwmio_pwmout_construct(&self->pwm, external_clock_pin, 1, external_clock_frequency, true); common_hal_pwmio_pwmout_construct(&self->pwm, external_clock_pin, 1, external_clock_frequency, true);
self->i2c = i2c;
self->camera_config.pin_pwdn = common_hal_mcu_pin_number(powerdown_pin); self->camera_config.pin_pwdn = common_hal_mcu_pin_number(powerdown_pin);
self->camera_config.pin_reset = common_hal_mcu_pin_number(reset_pin); self->camera_config.pin_reset = common_hal_mcu_pin_number(reset_pin);
self->camera_config.pin_xclk = common_hal_mcu_pin_number(external_clock_pin); self->camera_config.pin_xclk = common_hal_mcu_pin_number(external_clock_pin);
@ -112,7 +130,11 @@ void common_hal_esp32_camera_camera_construct(
self->camera_config.sccb_i2c_port = i2c->i2c_num; self->camera_config.sccb_i2c_port = i2c->i2c_num;
CHECK_ESP_RESULT(esp_camera_init(&self->camera_config)); i2c_lock(self);
esp_err_t result = esp_camera_init(&self->camera_config);
i2c_unlock(self);
CHECK_ESP_RESULT(result);
} }
extern void common_hal_esp32_camera_camera_deinit(esp32_camera_camera_obj_t *self) { extern void common_hal_esp32_camera_camera_deinit(esp32_camera_camera_obj_t *self) {
@ -165,7 +187,9 @@ camera_fb_t *common_hal_esp32_camera_camera_take(esp32_camera_camera_obj_t *self
#define SENSOR_GET(type, name, status_field_name, setter_function_name) \ #define SENSOR_GET(type, name, status_field_name, setter_function_name) \
type common_hal_esp32_camera_camera_get_##name(esp32_camera_camera_obj_t * self) { \ type common_hal_esp32_camera_camera_get_##name(esp32_camera_camera_obj_t * self) { \
i2c_lock(self); \
sensor_t *sensor = esp_camera_sensor_get(); \ sensor_t *sensor = esp_camera_sensor_get(); \
i2c_unlock(self); \
if (!sensor->setter_function_name) { \ if (!sensor->setter_function_name) { \
mp_raise_AttributeError(translate("no such attribute")); \ mp_raise_AttributeError(translate("no such attribute")); \
} \ } \
@ -174,7 +198,9 @@ camera_fb_t *common_hal_esp32_camera_camera_take(esp32_camera_camera_obj_t *self
#define SENSOR_SET(type, name, setter_function_name) \ #define SENSOR_SET(type, name, setter_function_name) \
void common_hal_esp32_camera_camera_set_##name(esp32_camera_camera_obj_t * self, type value) { \ void common_hal_esp32_camera_camera_set_##name(esp32_camera_camera_obj_t * self, type value) { \
i2c_lock(self); \
sensor_t *sensor = esp_camera_sensor_get(); \ sensor_t *sensor = esp_camera_sensor_get(); \
i2c_unlock(self); \
if (!sensor->setter_function_name) { \ if (!sensor->setter_function_name) { \
mp_raise_AttributeError(translate("no such attribute")); \ mp_raise_AttributeError(translate("no such attribute")); \
} \ } \
@ -203,6 +229,7 @@ void common_hal_esp32_camera_camera_reconfigure(esp32_camera_camera_obj_t *self,
frame_size = sensor_info->max_size; frame_size = sensor_info->max_size;
} }
i2c_lock(self);
cam_deinit(); cam_deinit();
self->camera_config.pixel_format = pixel_format; self->camera_config.pixel_format = pixel_format;
self->camera_config.frame_size = frame_size; self->camera_config.frame_size = frame_size;
@ -212,6 +239,7 @@ void common_hal_esp32_camera_camera_reconfigure(esp32_camera_camera_obj_t *self,
sensor->set_framesize(sensor, self->camera_config.frame_size); sensor->set_framesize(sensor, self->camera_config.frame_size);
cam_init(&self->camera_config); cam_init(&self->camera_config);
cam_config(&self->camera_config, frame_size, sensor_info->pid); cam_config(&self->camera_config, frame_size, sensor_info->pid);
i2c_unlock(self);
cam_start(); cam_start();
} }

View File

@ -29,10 +29,12 @@
#include "py/obj.h" #include "py/obj.h"
#include "esp_camera.h" #include "esp_camera.h"
#include "shared-bindings/pwmio/PWMOut.h" #include "shared-bindings/pwmio/PWMOut.h"
#include "common-hal/busio/I2C.h"
typedef struct esp32_camera_camera_obj { typedef struct esp32_camera_camera_obj {
mp_obj_base_t base; mp_obj_base_t base;
camera_config_t camera_config; camera_config_t camera_config;
camera_fb_t *buffer_to_return; camera_fb_t *buffer_to_return;
pwmio_pwmout_obj_t pwm; pwmio_pwmout_obj_t pwm;
busio_i2c_obj_t *i2c;
} esp32_camera_obj_t; } esp32_camera_obj_t;

View File

@ -90,10 +90,7 @@ void _common_hal_bleio_characteristic_buffer_construct(bleio_characteristic_buff
self->characteristic = characteristic; self->characteristic = characteristic;
self->timeout_ms = timeout * 1000; self->timeout_ms = timeout * 1000;
self->ringbuf.buf = (uint8_t *)buffer; ringbuf_init(&self->ringbuf, buffer, buffer_size);
self->ringbuf.size = buffer_size;
self->ringbuf.iget = 0;
self->ringbuf.iput = 0;
if (static_handler_entry != NULL) { if (static_handler_entry != NULL) {
ble_drv_add_event_handler_entry((ble_drv_evt_handler_entry_t *)static_handler_entry, characteristic_buffer_on_ble_evt, self); ble_drv_add_event_handler_entry((ble_drv_evt_handler_entry_t *)static_handler_entry, characteristic_buffer_on_ble_evt, self);
@ -159,6 +156,7 @@ void common_hal_bleio_characteristic_buffer_deinit(bleio_characteristic_buffer_o
if (!common_hal_bleio_characteristic_buffer_deinited(self)) { if (!common_hal_bleio_characteristic_buffer_deinited(self)) {
ble_drv_remove_event_handler(characteristic_buffer_on_ble_evt, self); ble_drv_remove_event_handler(characteristic_buffer_on_ble_evt, self);
self->characteristic = NULL; self->characteristic = NULL;
ringbuf_deinit(&self->ringbuf);
} }
} }

View File

@ -43,7 +43,7 @@
#include "supervisor/shared/bluetooth/serial.h" #include "supervisor/shared/bluetooth/serial.h"
STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, uint8_t *data, uint16_t len) { STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, uint8_t *data, uint16_t len) {
if (len + sizeof(uint16_t) > ringbuf_capacity(&self->ringbuf)) { if (len + sizeof(uint16_t) > ringbuf_size(&self->ringbuf)) {
// This shouldn't happen but can if our buffer size was much smaller than // This shouldn't happen but can if our buffer size was much smaller than
// the writes the client actually makes. // the writes the client actually makes.
return; return;
@ -52,7 +52,7 @@ STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, uint8_t *data, uin
uint8_t is_nested_critical_region; uint8_t is_nested_critical_region;
sd_nvic_critical_region_enter(&is_nested_critical_region); sd_nvic_critical_region_enter(&is_nested_critical_region);
// Make room for the new value by dropping the oldest packets first. // Make room for the new value by dropping the oldest packets first.
while (ringbuf_capacity(&self->ringbuf) - ringbuf_num_filled(&self->ringbuf) < len + sizeof(uint16_t)) { while (ringbuf_size(&self->ringbuf) - ringbuf_num_filled(&self->ringbuf) < len + sizeof(uint16_t)) {
uint16_t packet_length; uint16_t packet_length;
ringbuf_get_n(&self->ringbuf, (uint8_t *)&packet_length, sizeof(uint16_t)); ringbuf_get_n(&self->ringbuf, (uint8_t *)&packet_length, sizeof(uint16_t));
for (uint16_t i = 0; i < packet_length; i++) { for (uint16_t i = 0; i < packet_length; i++) {
@ -233,10 +233,7 @@ void _common_hal_bleio_packet_buffer_construct(
} }
if (incoming) { if (incoming) {
self->ringbuf.buf = (uint8_t *)incoming_buffer; ringbuf_init(&self->ringbuf, (uint8_t *)incoming_buffer, incoming_buffer_size);
self->ringbuf.size = incoming_buffer_size;
self->ringbuf.iget = 0;
self->ringbuf.iput = 0;
} }
self->packet_queued = false; self->packet_queued = false;
@ -502,7 +499,9 @@ bool common_hal_bleio_packet_buffer_deinited(bleio_packet_buffer_obj_t *self) {
} }
void common_hal_bleio_packet_buffer_deinit(bleio_packet_buffer_obj_t *self) { void common_hal_bleio_packet_buffer_deinit(bleio_packet_buffer_obj_t *self) {
if (!common_hal_bleio_packet_buffer_deinited(self)) { if (!common_hal_bleio_packet_buffer_deinited(self)) {
ble_drv_remove_event_handler(packet_buffer_on_ble_client_evt, self); ble_drv_remove_event_handler(packet_buffer_on_ble_client_evt, self);
ringbuf_deinit(&self->ringbuf);
} }
} }

View File

@ -213,25 +213,21 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
// Init buffer for rx // Init buffer for rx
if (rx != NULL) { if (rx != NULL) {
self->allocated_ringbuf = true;
// Use the provided buffer when given. // Use the provided buffer when given.
if (receiver_buffer != NULL) { if (receiver_buffer != NULL) {
self->ringbuf.buf = receiver_buffer; ringbuf_init(&self->ringbuf, receiver_buffer, receiver_buffer_size);
self->ringbuf.size = receiver_buffer_size - 1; } else {
self->ringbuf.iput = 0;
self->ringbuf.iget = 0;
self->allocated_ringbuf = false;
// Initially allocate the UART's buffer in the long-lived part of the // Initially allocate the UART's buffer in the long-lived part of the
// heap. UARTs are generally long-lived objects, but the "make long- // heap. UARTs are generally long-lived objects, but the "make long-
// lived" machinery is incapable of moving internal pointers like // lived" machinery is incapable of moving internal pointers like
// self->buffer, so do it manually. (However, as long as internal // self->buffer, so do it manually. (However, as long as internal
// pointers like this are NOT moved, allocating the buffer // pointers like this are NOT moved, allocating the buffer
// in the long-lived pool is not strictly necessary) // in the long-lived pool is not strictly necessary)
// (This is a macro.) if (!ringbuf_alloc(&self->ringbuf, receiver_buffer_size, true)) {
} else if (!ringbuf_alloc(&self->ringbuf, receiver_buffer_size, true)) {
nrfx_uarte_uninit(self->uarte); nrfx_uarte_uninit(self->uarte);
m_malloc_fail(receiver_buffer_size); m_malloc_fail(receiver_buffer_size);
} }
}
self->rx_pin_number = rx->number; self->rx_pin_number = rx->number;
claim_pin(rx); claim_pin(rx);
@ -282,9 +278,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) {
self->rx_pin_number = NO_PIN; self->rx_pin_number = NO_PIN;
self->rts_pin_number = NO_PIN; self->rts_pin_number = NO_PIN;
self->cts_pin_number = NO_PIN; self->cts_pin_number = NO_PIN;
if (self->allocated_ringbuf) { ringbuf_deinit(&self->ringbuf);
ringbuf_free(&self->ringbuf);
}
for (size_t i = 0; i < MP_ARRAY_SIZE(nrfx_uartes); i++) { for (size_t i = 0; i < MP_ARRAY_SIZE(nrfx_uartes); i++) {
if (self->uarte == &nrfx_uartes[i]) { if (self->uarte == &nrfx_uartes[i]) {
@ -305,7 +299,7 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t
// check removed to reduce code size // check removed to reduce code size
/* /*
if (len > ringbuf_capacity(&self->ringbuf)) { if (len > ringbuf_size(&self->ringbuf)) {
mp_raise_ValueError(translate("Reading >receiver_buffer_size bytes is not supported")); mp_raise_ValueError(translate("Reading >receiver_buffer_size bytes is not supported"));
} }
*/ */

View File

@ -44,7 +44,6 @@ typedef struct {
ringbuf_t ringbuf; ringbuf_t ringbuf;
uint8_t rx_char; // EasyDMA buf uint8_t rx_char; // EasyDMA buf
bool rx_paused; // set by irq if no space in rbuf bool rx_paused; // set by irq if no space in rbuf
bool allocated_ringbuf;
uint8_t tx_pin_number; uint8_t tx_pin_number;
uint8_t rx_pin_number; uint8_t rx_pin_number;

View File

@ -521,8 +521,7 @@ STATIC mp_obj_t rp2pio_statemachine_obj_stop_background_write(mp_obj_t self_in)
} }
MP_DEFINE_CONST_FUN_OBJ_1(rp2pio_statemachine_stop_background_write_obj, rp2pio_statemachine_obj_stop_background_write); MP_DEFINE_CONST_FUN_OBJ_1(rp2pio_statemachine_stop_background_write_obj, rp2pio_statemachine_obj_stop_background_write);
//| @property //| writing: bool
//| def writing(self) -> bool:
//| """Returns True if a background write is in progress""" //| """Returns True if a background write is in progress"""
//| //|
STATIC mp_obj_t rp2pio_statemachine_obj_get_writing(mp_obj_t self_in) { STATIC mp_obj_t rp2pio_statemachine_obj_get_writing(mp_obj_t self_in) {
@ -539,8 +538,7 @@ const mp_obj_property_t rp2pio_statemachine_writing_obj = {
}; };
//| @property //| pending: int
//| def pending(self) -> int:
//| """Returns the number of pending buffers for background writing. //| """Returns the number of pending buffers for background writing.
//| //|
//| If the number is 0, then a `StateMachine.background_write` call will not block.""" //| If the number is 0, then a `StateMachine.background_write` call will not block."""

View File

@ -155,16 +155,23 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
uart_set_hw_flow(self->uart, (cts != NULL), (rts != NULL)); uart_set_hw_flow(self->uart, (cts != NULL), (rts != NULL));
if (rx != NULL) { if (rx != NULL) {
// Use the provided buffer when given.
if (receiver_buffer != NULL) {
ringbuf_init(&self->ringbuf, receiver_buffer, receiver_buffer_size);
} else {
// Initially allocate the UART's buffer in the long-lived part of the // Initially allocate the UART's buffer in the long-lived part of the
// heap. UARTs are generally long-lived objects, but the "make long- // heap. UARTs are generally long-lived objects, but the "make long-
// lived" machinery is incapable of moving internal pointers like // lived" machinery is incapable of moving internal pointers like
// self->buffer, so do it manually. (However, as long as internal // self->buffer, so do it manually. (However, as long as internal
// pointers like this are NOT moved, allocating the buffer // pointers like this are NOT moved, allocating the buffer
// in the long-lived pool is not strictly necessary) // in the long-lived pool is not strictly necessary)
// (This is a macro.)
if (!ringbuf_alloc(&self->ringbuf, receiver_buffer_size, true)) { if (!ringbuf_alloc(&self->ringbuf, receiver_buffer_size, true)) {
uart_deinit(self->uart);
m_malloc_fail(receiver_buffer_size); m_malloc_fail(receiver_buffer_size);
} }
}
}
active_uarts[uart_id] = self; active_uarts[uart_id] = self;
if (uart_id == 1) { if (uart_id == 1) {
self->uart_irq_id = UART1_IRQ; self->uart_irq_id = UART1_IRQ;
@ -176,7 +183,6 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
irq_set_enabled(self->uart_irq_id, true); irq_set_enabled(self->uart_irq_id, true);
uart_set_irq_enables(self->uart, true /* rx has data */, false /* tx needs data */); uart_set_irq_enables(self->uart, true /* rx has data */, false /* tx needs data */);
} }
}
bool common_hal_busio_uart_deinited(busio_uart_obj_t *self) { bool common_hal_busio_uart_deinited(busio_uart_obj_t *self) {
return self->tx_pin == NO_PIN && self->rx_pin == NO_PIN; return self->tx_pin == NO_PIN && self->rx_pin == NO_PIN;
@ -187,7 +193,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) {
return; return;
} }
uart_deinit(self->uart); uart_deinit(self->uart);
ringbuf_free(&self->ringbuf); ringbuf_deinit(&self->ringbuf);
active_uarts[self->uart_id] = NULL; active_uarts[self->uart_id] = NULL;
uart_status[self->uart_id] = STATUS_FREE; uart_status[self->uart_id] = STATUS_FREE;
reset_pin_number(self->tx_pin); reset_pin_number(self->tx_pin);

View File

@ -0,0 +1,26 @@
/*
GNU linker script for STM32F446 with filesystem
*/
/* Specify the memory areas */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 512K /* entire flash */
FLASH_ISR (rx) : ORIGIN = 0x08000000, LENGTH = 16K /* sector 0 */
FLASH_FS (rx) : ORIGIN = 0x08004000, LENGTH = 48K /* sectors 1,2,3 are 16K */
FLASH_FIRMWARE (rx) : ORIGIN = 0x08010000, LENGTH = 448K /* sector 4 is 64K, sectors 5,6,7 are 128K */
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
}
/* produce a link error if there is not this amount of RAM for these sections */
_minimum_stack_size = 24K;
_minimum_heap_size = 16K;
/* Define tho top end of the stack. The stack is full descending so begins just
above last byte of RAM. Note that EABI requires the stack to be 8-byte
aligned for a call. */
_estack = ORIGIN(RAM) + LENGTH(RAM);
/* RAM extents for the garbage collector */
_ram_start = ORIGIN(RAM);
_ram_end = ORIGIN(RAM) + LENGTH(RAM);

View File

@ -0,0 +1,29 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 flom84
*
* 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"
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

View File

@ -0,0 +1,55 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 flom84
*
* 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 "NUCLEO F446RE"
#define MICROPY_HW_MCU_NAME "STM32F446xx"
#define FLASH_SIZE (0x80000u) // 512K
#define FLASH_PAGE_SIZE (0x4000u) // 16K
#define HSE_VALUE ((uint32_t)8000000u)
#define BOARD_HSE_SOURCE (RCC_HSE_ON)
// The schematic has a 32k crystal that isn't fitted. Uncommented the line below if you add it.
// #define BOARD_HAS_LOW_SPEED_CRYSTAL (1)
// #define LSE_VALUE ((uint32_t)32000U)
#define BOARD_HAS_LOW_SPEED_CRYSTAL (0)
// USART3 + USB FTDI
// #define CIRCUITPY_CONSOLE_UART_TX (&pin_PC10)
// #define CIRCUITPY_CONSOLE_UART_RX (&pin_PC11)
// USART2 + ST link
// #define CIRCUITPY_CONSOLE_UART_TX (&pin_PA02)
// #define CIRCUITPY_CONSOLE_UART_RX (&pin_PA03)
// Status LEDs
#define MICROPY_HW_LED_STATUS (&pin_PA05)
#define MICROPY_FATFS_EXFAT 0
#define BOARD_NO_VBUS_SENSE (1)

View File

@ -0,0 +1,35 @@
USB_VID = 0x0483
USB_PID = 0x572A
USB_PRODUCT = "NUCLEO-F446RE - CPy"
USB_MANUFACTURER = "STMicroelectronics"
INTERNAL_FLASH_FILESYSTEM = 1
MCU_SERIES = F4
MCU_VARIANT = STM32F446xx
MCU_PACKAGE = LQFP64
LD_COMMON = boards/common_default.ld
LD_FILE = boards/STM32F446_fs.ld
# Too big for the flash
CIRCUITPY_AUDIOCORE = 0
CIRCUITPY_AUDIOPWMIO = 0
CIRCUITPY_BITMAPTOOLS = 0
CIRCUITPY_BLEIO_HCI = 0
CIRCUITPY_VECTORIO = 0
CIRCUITPY_TOUCHIO = 0
CIRCUITPY_RAINBOWIO = 0
CIRCUITPY_USB_HID = 0
CIRCUITPY_USB_MIDI = 0
CIRCUITPY_JSON = 0
# Requires neopixel_write or SPI (dotstar)
CIRCUITPY_PIXELBUF = 0
# No requirements, but takes extra flash
CIRCUITPY_ULAB = 0
CIRCUITPY_GAMEPADSHIFT = 0
CIRCUITPY_BITBANGIO = 0
CIRCUITPY_NEOPIXEL_WRITE = 0
CIRCUITPY_SDCARDIO = 0
CIRCUITPY_DISPLAYIO = 0
CIRCUITPY_KEYPAD = 0

View File

@ -0,0 +1,78 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{MP_ROM_QSTR(MP_QSTR_ID), MP_ROM_PTR(&board_module_id_obj)},
{MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_PA03)},
{MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_PA02)},
{MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_PA10)},
{MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PB03)},
{MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PB05)},
{MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PB04)},
{MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PB10)},
{MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_PA08)},
{MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_PA09)},
{MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PC07)},
{MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PB06)},
{MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA07)},
{MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA06)},
{MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA05)},
{MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_PB09)},
{MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_PB08)},
{MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA00)},
{MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PA01)},
{MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PA04)},
{MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PB00)},
{MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PC01)},
{MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PC00)},
{MP_ROM_QSTR(MP_QSTR_PA0), MP_ROM_PTR(&pin_PA00)},
{MP_ROM_QSTR(MP_QSTR_PA1), MP_ROM_PTR(&pin_PA01)},
{MP_ROM_QSTR(MP_QSTR_PA2), MP_ROM_PTR(&pin_PA02)},
{MP_ROM_QSTR(MP_QSTR_PA3), MP_ROM_PTR(&pin_PA03)},
{MP_ROM_QSTR(MP_QSTR_PA4), MP_ROM_PTR(&pin_PA04)},
{MP_ROM_QSTR(MP_QSTR_PA5), MP_ROM_PTR(&pin_PA05)},
{MP_ROM_QSTR(MP_QSTR_PA6), MP_ROM_PTR(&pin_PA06)},
{MP_ROM_QSTR(MP_QSTR_PA7), MP_ROM_PTR(&pin_PA07)},
{MP_ROM_QSTR(MP_QSTR_PA8), MP_ROM_PTR(&pin_PA08)},
{MP_ROM_QSTR(MP_QSTR_PA9), MP_ROM_PTR(&pin_PA09)},
{MP_ROM_QSTR(MP_QSTR_PA10), MP_ROM_PTR(&pin_PA10)},
{MP_ROM_QSTR(MP_QSTR_PA11), MP_ROM_PTR(&pin_PA11)},
{MP_ROM_QSTR(MP_QSTR_PA12), MP_ROM_PTR(&pin_PA12)},
{MP_ROM_QSTR(MP_QSTR_PA15), MP_ROM_PTR(&pin_PA15)},
{MP_ROM_QSTR(MP_QSTR_PB0), MP_ROM_PTR(&pin_PB00)},
{MP_ROM_QSTR(MP_QSTR_PB1), MP_ROM_PTR(&pin_PB01)},
{MP_ROM_QSTR(MP_QSTR_PB2), MP_ROM_PTR(&pin_PB02)},
{MP_ROM_QSTR(MP_QSTR_PB3), MP_ROM_PTR(&pin_PB03)},
{MP_ROM_QSTR(MP_QSTR_PB4), MP_ROM_PTR(&pin_PB04)},
{MP_ROM_QSTR(MP_QSTR_PB5), MP_ROM_PTR(&pin_PB05)},
{MP_ROM_QSTR(MP_QSTR_PB6), MP_ROM_PTR(&pin_PB06)},
{MP_ROM_QSTR(MP_QSTR_PB7), MP_ROM_PTR(&pin_PB07)},
{MP_ROM_QSTR(MP_QSTR_PB8), MP_ROM_PTR(&pin_PB08)},
{MP_ROM_QSTR(MP_QSTR_PB9), MP_ROM_PTR(&pin_PB09)},
{MP_ROM_QSTR(MP_QSTR_PB10), MP_ROM_PTR(&pin_PB10)},
{MP_ROM_QSTR(MP_QSTR_PB12), MP_ROM_PTR(&pin_PB12)},
{MP_ROM_QSTR(MP_QSTR_PB13), MP_ROM_PTR(&pin_PB13)},
{MP_ROM_QSTR(MP_QSTR_PB14), MP_ROM_PTR(&pin_PB14)},
{MP_ROM_QSTR(MP_QSTR_PB15), MP_ROM_PTR(&pin_PB15)},
{MP_ROM_QSTR(MP_QSTR_PC0), MP_ROM_PTR(&pin_PC00)},
{MP_ROM_QSTR(MP_QSTR_PC1), MP_ROM_PTR(&pin_PC01)},
{MP_ROM_QSTR(MP_QSTR_PC2), MP_ROM_PTR(&pin_PC02)},
{MP_ROM_QSTR(MP_QSTR_PC3), MP_ROM_PTR(&pin_PC03)},
{MP_ROM_QSTR(MP_QSTR_PC4), MP_ROM_PTR(&pin_PC04)},
{MP_ROM_QSTR(MP_QSTR_PC5), MP_ROM_PTR(&pin_PC05)},
{MP_ROM_QSTR(MP_QSTR_PC6), MP_ROM_PTR(&pin_PC06)},
{MP_ROM_QSTR(MP_QSTR_PC7), MP_ROM_PTR(&pin_PC07)},
{MP_ROM_QSTR(MP_QSTR_PC8), MP_ROM_PTR(&pin_PC08)},
{MP_ROM_QSTR(MP_QSTR_PC9), MP_ROM_PTR(&pin_PC09)},
{MP_ROM_QSTR(MP_QSTR_PC10), MP_ROM_PTR(&pin_PC10)},
{MP_ROM_QSTR(MP_QSTR_PC11), MP_ROM_PTR(&pin_PC11)},
{MP_ROM_QSTR(MP_QSTR_PC12), MP_ROM_PTR(&pin_PC12)},
{MP_ROM_QSTR(MP_QSTR_PC13), MP_ROM_PTR(&pin_PC13)},
{MP_ROM_QSTR(MP_QSTR_PC14), MP_ROM_PTR(&pin_PC14)},
{MP_ROM_QSTR(MP_QSTR_PC15), MP_ROM_PTR(&pin_PC15)},
{MP_ROM_QSTR(MP_QSTR_PD2), MP_ROM_PTR(&pin_PD02)},
{MP_ROM_QSTR(MP_QSTR_PH0), MP_ROM_PTR(&pin_PH00)},
{MP_ROM_QSTR(MP_QSTR_PH1), MP_ROM_PTR(&pin_PH01)},
{MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PA05)},
{MP_ROM_QSTR(MP_QSTR_SW), MP_ROM_PTR(&pin_PC13)},
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);

View File

@ -214,9 +214,16 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
// Init buffer for rx and claim pins // Init buffer for rx and claim pins
if (self->rx != NULL) { if (self->rx != NULL) {
// Use the provided buffer when given.
if (receiver_buffer != NULL) { if (receiver_buffer != NULL) {
self->ringbuf = (ringbuf_t) { receiver_buffer, receiver_buffer_size }; ringbuf_init(&self->ringbuf, receiver_buffer, receiver_buffer_size);
} else { } else {
// Initially allocate the UART's buffer in the long-lived part of the
// heap. UARTs are generally long-lived objects, but the "make long-
// lived" machinery is incapable of moving internal pointers like
// self->buffer, so do it manually. (However, as long as internal
// pointers like this are NOT moved, allocating the buffer
// in the long-lived pool is not strictly necessary)
if (!ringbuf_alloc(&self->ringbuf, receiver_buffer_size, true)) { if (!ringbuf_alloc(&self->ringbuf, receiver_buffer_size, true)) {
m_malloc_fail(receiver_buffer_size); m_malloc_fail(receiver_buffer_size);
} }
@ -281,7 +288,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) {
self->rx = NULL; self->rx = NULL;
} }
ringbuf_free(&self->ringbuf); ringbuf_deinit(&self->ringbuf);
} }
size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t len, int *errcode) { size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t len, int *errcode) {

View File

@ -119,6 +119,13 @@ typedef struct {
#include "stm32f4/stm32f407xx/periph.h" #include "stm32f4/stm32f407xx/periph.h"
#endif #endif
#ifdef STM32F446xx
#define HAS_DAC 0
#define HAS_TRNG 0
#define HAS_BASIC_TIM 0
#include "stm32f4/stm32f446xx/periph.h"
#endif
// F7 Series // F7 Series
#ifdef STM32F746xx #ifdef STM32F746xx

View File

@ -97,6 +97,9 @@ extern const mp_obj_type_t mcu_pin_type;
#ifdef STM32F407xx #ifdef STM32F407xx
#include "stm32f4/stm32f407xx/pins.h" #include "stm32f4/stm32f407xx/pins.h"
#endif #endif
#ifdef STM32F446xx
#include "stm32f4/stm32f446xx/pins.h"
#endif
// F7 Series // F7 Series
#ifdef STM32F746xx #ifdef STM32F746xx

View File

@ -47,11 +47,14 @@
#ifdef STM32F407xx #ifdef STM32F407xx
#include "stm32f4/stm32f407xx/clocks.h" #include "stm32f4/stm32f407xx/clocks.h"
#endif #endif
#ifdef STM32F446xx
#include "stm32f4/stm32f446xx/clocks.h"
#endif
void stm32_peripherals_clocks_init(void) { void stm32_peripherals_clocks_init(void) {
RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitTypeDef RCC_OscInitStruct; RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
// Set voltage scaling in accordance with system clock speed // Set voltage scaling in accordance with system clock speed
__HAL_RCC_PWR_CLK_ENABLE(); __HAL_RCC_PWR_CLK_ENABLE();

View File

@ -0,0 +1,66 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 flom84
*
* 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 "stm32f4xx_hal.h"
// Chip: STM32F446xC/xV
// Line Type: Access Line
// Speed: 168MHz (max 180MHz)
// Defaults:
#ifndef CPY_CLK_VSCALE
#define CPY_CLK_VSCALE (PWR_REGULATOR_VOLTAGE_SCALE1)
#endif
#ifndef CPY_CLK_PLLM
#define CPY_CLK_PLLM (8)
#endif
#ifndef CPY_CLK_PLLN
#define CPY_CLK_PLLN (336)
#endif
#ifndef CPY_CLK_PLLP
#define CPY_CLK_PLLP (RCC_PLLP_DIV2)
#endif
#ifndef CPY_CLK_PLLQ
#define CPY_CLK_PLLQ (7)
#endif
#ifndef CPY_CLK_AHBDIV
#define CPY_CLK_AHBDIV (RCC_SYSCLK_DIV1)
#endif
#ifndef CPY_CLK_APB1DIV
#define CPY_CLK_APB1DIV (RCC_HCLK_DIV4)
#endif
#ifndef CPY_CLK_APB2DIV
#define CPY_CLK_APB2DIV (RCC_HCLK_DIV2)
#endif
#ifndef CPY_CLK_FLASH_LATENCY
#define CPY_CLK_FLASH_LATENCY (FLASH_LATENCY_5)
#endif
#ifndef CPY_CLK_USB_USES_AUDIOPLL
#define CPY_CLK_USB_USES_AUDIOPLL (0)
#endif
#ifndef BOARD_HSE_SOURCE
#define BOARD_HSE_SOURCE (RCC_HSE_ON)
#endif

View File

@ -0,0 +1,47 @@
/*
* This file is part of the Micro Python project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 flom84
*
* 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 "peripherals/gpio.h"
#include "stm32f4xx_hal.h"
#include "common-hal/microcontroller/Pin.h"
void stm32_peripherals_gpio_init(void) {
// * GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// Never reset pins
never_reset_pin_number(2, 13); // PC13 anti tamp
never_reset_pin_number(2, 14); // PC14 OSC32_IN
never_reset_pin_number(2, 15); // PC15 OSC32_OUT
never_reset_pin_number(0, 13); // PA13 SWDIO
never_reset_pin_number(0, 14); // PA14 SWCLK
}
void stm32f4_peripherals_status_led(uint8_t led, uint8_t state) {
}

View File

@ -0,0 +1,129 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 flom84
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "py/obj.h"
#include "py/mphal.h"
#include "peripherals/pins.h"
#include "peripherals/periph.h"
// I2C
I2C_TypeDef *mcu_i2c_banks[3] = {I2C1, I2C2, I2C3};
const mcu_periph_obj_t mcu_i2c_sda_list[3] = {
PERIPH(1, 4, &pin_PB07),
PERIPH(2, 4, &pin_PB03),
PERIPH(3, 4, &pin_PB04),
};
const mcu_periph_obj_t mcu_i2c_scl_list[3] = {
PERIPH(1, 4, &pin_PB06),
PERIPH(2, 4, &pin_PB10),
PERIPH(3, 4, &pin_PA08),
};
// SPI
SPI_TypeDef *mcu_spi_banks[3] = {SPI1, SPI2, SPI3};
const mcu_periph_obj_t mcu_spi_sck_list[3] = {
PERIPH(1, 5, &pin_PA05),
PERIPH(2, 5, &pin_PB13),
PERIPH(3, 6, &pin_PB03),
};
const mcu_periph_obj_t mcu_spi_mosi_list[3] = {
PERIPH(1, 5, &pin_PA07),
PERIPH(2, 5, &pin_PB15),
PERIPH(3, 6, &pin_PB05),
};
const mcu_periph_obj_t mcu_spi_miso_list[3] = {
PERIPH(1, 5, &pin_PA06),
PERIPH(2, 5, &pin_PB14),
PERIPH(3, 6, &pin_PB04),
};
const mcu_periph_obj_t mcu_spi_nss_list[3] = {
PERIPH(1, 5, &pin_PA04),
PERIPH(2, 5, &pin_PB12),
PERIPH(3, 6, &pin_PA15),
};
USART_TypeDef *mcu_uart_banks[MAX_UART] = {USART1, USART2, USART3, NULL, NULL, NULL};
bool mcu_uart_has_usart[MAX_UART] = {false, false, false, true, true, false};
const mcu_periph_obj_t mcu_uart_tx_list[3] = {
PERIPH(1, 7, &pin_PB06),
PERIPH(2, 7, &pin_PA02),
PERIPH(3, 7, &pin_PC10),
};
const mcu_periph_obj_t mcu_uart_rx_list[3] = {
PERIPH(1, 7, &pin_PB07),
PERIPH(2, 7, &pin_PA03),
PERIPH(3, 7, &pin_PC11),
};
// Timers
TIM_TypeDef *mcu_tim_banks[14] = {TIM1, TIM2, TIM3, TIM4, TIM5, NULL, NULL, NULL, TIM9, TIM10,
TIM11, NULL, NULL, NULL};
const mcu_tim_pin_obj_t mcu_tim_pin_list[34] = {
TIM(2, 1, 1, &pin_PA00),
TIM(5, 2, 1, &pin_PA00),
TIM(2, 1, 2, &pin_PA01),
TIM(5, 2, 2, &pin_PA01),
TIM(2, 1, 3, &pin_PA02),
TIM(5, 2, 3, &pin_PA02),
TIM(2, 1, 4, &pin_PA03),
TIM(5, 2, 4, &pin_PA03),
TIM(9, 3, 1, &pin_PA02),
TIM(9, 3, 2, &pin_PA03),
TIM(3, 2, 1, &pin_PA06),
TIM(3, 2, 2, &pin_PA07),
TIM(1, 1, 1, &pin_PA08),
TIM(1, 1, 2, &pin_PA09),
TIM(1, 1, 3, &pin_PA10),
TIM(1, 1, 4, &pin_PA11),
TIM(2, 1, 1, &pin_PA15),
TIM(3, 2, 3, &pin_PB00),
TIM(3, 2, 4, &pin_PB01),
TIM(2, 1, 2, &pin_PB03),
TIM(3, 2, 1, &pin_PB04),
TIM(3, 2, 2, &pin_PB05),
TIM(4, 2, 1, &pin_PB06),
TIM(4, 2, 2, &pin_PB07),
TIM(4, 2, 3, &pin_PB08),
TIM(10, 2, 1, &pin_PB08),
TIM(4, 2, 4, &pin_PB09),
TIM(11, 2, 1, &pin_PB09),
TIM(2, 1, 3, &pin_PB10),
TIM(3, 2, 1, &pin_PC06),
TIM(3, 2, 2, &pin_PC07),
TIM(3, 2, 3, &pin_PC08),
TIM(3, 2, 4, &pin_PC09),
};

View File

@ -0,0 +1,57 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 flom84
*
* 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_STM32_PERIPHERALS_STM32F446RE_PERIPH_H
#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F446RE_PERIPH_H
// I2C
extern I2C_TypeDef *mcu_i2c_banks[3];
extern const mcu_periph_obj_t mcu_i2c_sda_list[3];
extern const mcu_periph_obj_t mcu_i2c_scl_list[3];
// SPI
extern SPI_TypeDef *mcu_spi_banks[3];
extern const mcu_periph_obj_t mcu_spi_sck_list[3];
extern const mcu_periph_obj_t mcu_spi_mosi_list[3];
extern const mcu_periph_obj_t mcu_spi_miso_list[3];
extern const mcu_periph_obj_t mcu_spi_nss_list[3];
// UART
extern USART_TypeDef *mcu_uart_banks[MAX_UART];
extern bool mcu_uart_has_usart[MAX_UART];
extern const mcu_periph_obj_t mcu_uart_tx_list[3];
extern const mcu_periph_obj_t mcu_uart_rx_list[3];
// Timers
#define TIM_BANK_ARRAY_LEN 14
#define TIM_PIN_ARRAY_LEN 34
extern TIM_TypeDef *mcu_tim_banks[TIM_BANK_ARRAY_LEN];
extern const mcu_tim_pin_obj_t mcu_tim_pin_list[TIM_PIN_ARRAY_LEN];
#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F446RE_PERIPH_H

View File

@ -0,0 +1,88 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 flom84
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "py/obj.h"
#include "py/mphal.h"
#include "peripherals/pins.h"
const mcu_pin_obj_t pin_PC13 = PIN(2, 13, NO_ADC); // anti-tamp
const mcu_pin_obj_t pin_PC14 = PIN(2, 14, NO_ADC); // OSC32_IN
const mcu_pin_obj_t pin_PC15 = PIN(2, 15, NO_ADC); // OSC32_OUT
const mcu_pin_obj_t pin_PC00 = PIN(2, 0, ADC_INPUT(ADC_1, 10));
const mcu_pin_obj_t pin_PC01 = PIN(2, 1, ADC_INPUT(ADC_1, 11));
const mcu_pin_obj_t pin_PC02 = PIN(2, 2, ADC_INPUT(ADC_1, 12));
const mcu_pin_obj_t pin_PC03 = PIN(2, 3, ADC_INPUT(ADC_1, 13));
const mcu_pin_obj_t pin_PA00 = PIN(0, 0, ADC_INPUT(ADC_1, 0));
const mcu_pin_obj_t pin_PA01 = PIN(0, 1, ADC_INPUT(ADC_1, 1));
const mcu_pin_obj_t pin_PA02 = PIN(0, 2, ADC_INPUT(ADC_1, 2));
const mcu_pin_obj_t pin_PA03 = PIN(0, 3, ADC_INPUT(ADC_1, 3));
const mcu_pin_obj_t pin_PA04 = PIN(0, 4, ADC_INPUT(ADC_1, 4));
const mcu_pin_obj_t pin_PA05 = PIN(0, 5, ADC_INPUT(ADC_1, 5));
const mcu_pin_obj_t pin_PA06 = PIN(0, 6, ADC_INPUT(ADC_1, 6));
const mcu_pin_obj_t pin_PA07 = PIN(0, 7, ADC_INPUT(ADC_1, 7));
const mcu_pin_obj_t pin_PC04 = PIN(2, 4, ADC_INPUT(ADC_1, 14));
const mcu_pin_obj_t pin_PC05 = PIN(2, 5, ADC_INPUT(ADC_1, 15));
const mcu_pin_obj_t pin_PB00 = PIN(1, 0, ADC_INPUT(ADC_1, 8));
const mcu_pin_obj_t pin_PB01 = PIN(1, 1, ADC_INPUT(ADC_1, 9));
const mcu_pin_obj_t pin_PB02 = PIN(1, 2, NO_ADC);
const mcu_pin_obj_t pin_PB10 = PIN(1, 10, NO_ADC);
const mcu_pin_obj_t pin_PB12 = PIN(1, 12, NO_ADC);
const mcu_pin_obj_t pin_PB13 = PIN(1, 13, NO_ADC);
const mcu_pin_obj_t pin_PB14 = PIN(1, 14, NO_ADC);
const mcu_pin_obj_t pin_PB15 = PIN(1, 15, NO_ADC);
const mcu_pin_obj_t pin_PC06 = PIN(2, 6, NO_ADC);
const mcu_pin_obj_t pin_PC07 = PIN(2, 7, NO_ADC);
const mcu_pin_obj_t pin_PC08 = PIN(2, 8, NO_ADC);
const mcu_pin_obj_t pin_PC09 = PIN(2, 9, NO_ADC);
const mcu_pin_obj_t pin_PA08 = PIN(0, 8, NO_ADC);
const mcu_pin_obj_t pin_PA09 = PIN(0, 9, NO_ADC);
const mcu_pin_obj_t pin_PA10 = PIN(0, 10, NO_ADC);
const mcu_pin_obj_t pin_PA11 = PIN(0, 11, NO_ADC);
const mcu_pin_obj_t pin_PA12 = PIN(0, 12, NO_ADC);
const mcu_pin_obj_t pin_PA13 = PIN(0, 13, NO_ADC); // SWDIO
const mcu_pin_obj_t pin_PA14 = PIN(0, 14, NO_ADC); // SWCLK
const mcu_pin_obj_t pin_PA15 = PIN(0, 15, NO_ADC); // JTDI
const mcu_pin_obj_t pin_PC10 = PIN(2, 10, NO_ADC);
const mcu_pin_obj_t pin_PC11 = PIN(2, 11, NO_ADC);
const mcu_pin_obj_t pin_PC12 = PIN(2, 12, NO_ADC);
const mcu_pin_obj_t pin_PB03 = PIN(1, 3, NO_ADC);
const mcu_pin_obj_t pin_PB04 = PIN(1, 4, NO_ADC);
const mcu_pin_obj_t pin_PB05 = PIN(1, 5, NO_ADC);
const mcu_pin_obj_t pin_PB06 = PIN(1, 6, NO_ADC);
const mcu_pin_obj_t pin_PB07 = PIN(1, 7, NO_ADC);
const mcu_pin_obj_t pin_PB08 = PIN(1, 8, NO_ADC);
const mcu_pin_obj_t pin_PB09 = PIN(1, 9, NO_ADC);
const mcu_pin_obj_t pin_PD02 = PIN(5, 2, NO_ADC);
const mcu_pin_obj_t pin_PH00 = PIN(7, 0, NO_ADC);
const mcu_pin_obj_t pin_PH01 = PIN(7, 1, NO_ADC);

View File

@ -0,0 +1,90 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2022 flom84
*
* 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_STM32_PERIPHERALS_STM32F446RE_PINS_H
#define MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F446RE_PINS_H
// Pins in datasheet order: DocID026289 Rev 7 page 38. LQFP64 only
extern const mcu_pin_obj_t pin_PC13;
extern const mcu_pin_obj_t pin_PC14;
extern const mcu_pin_obj_t pin_PC15;
extern const mcu_pin_obj_t pin_PC00;
extern const mcu_pin_obj_t pin_PC01;
extern const mcu_pin_obj_t pin_PC02;
extern const mcu_pin_obj_t pin_PC03;
extern const mcu_pin_obj_t pin_PA00;
extern const mcu_pin_obj_t pin_PA01;
extern const mcu_pin_obj_t pin_PA02;
extern const mcu_pin_obj_t pin_PA03;
extern const mcu_pin_obj_t pin_PA04;
extern const mcu_pin_obj_t pin_PA05;
extern const mcu_pin_obj_t pin_PA06;
extern const mcu_pin_obj_t pin_PA07;
extern const mcu_pin_obj_t pin_PC04;
extern const mcu_pin_obj_t pin_PC05;
extern const mcu_pin_obj_t pin_PB00;
extern const mcu_pin_obj_t pin_PB01;
extern const mcu_pin_obj_t pin_PB02;
extern const mcu_pin_obj_t pin_PB10;
extern const mcu_pin_obj_t pin_PB12;
extern const mcu_pin_obj_t pin_PB13;
extern const mcu_pin_obj_t pin_PB14;
extern const mcu_pin_obj_t pin_PB15;
extern const mcu_pin_obj_t pin_PC06;
extern const mcu_pin_obj_t pin_PC07;
extern const mcu_pin_obj_t pin_PC08;
extern const mcu_pin_obj_t pin_PC09;
extern const mcu_pin_obj_t pin_PA08;
extern const mcu_pin_obj_t pin_PA09;
extern const mcu_pin_obj_t pin_PA10;
extern const mcu_pin_obj_t pin_PA11;
extern const mcu_pin_obj_t pin_PA12;
extern const mcu_pin_obj_t pin_PA13;
extern const mcu_pin_obj_t pin_PA14;
extern const mcu_pin_obj_t pin_PA15;
extern const mcu_pin_obj_t pin_PC10;
extern const mcu_pin_obj_t pin_PC11;
extern const mcu_pin_obj_t pin_PC12;
extern const mcu_pin_obj_t pin_PB03;
extern const mcu_pin_obj_t pin_PB04;
extern const mcu_pin_obj_t pin_PB05;
extern const mcu_pin_obj_t pin_PB06;
extern const mcu_pin_obj_t pin_PB07;
extern const mcu_pin_obj_t pin_PB08;
extern const mcu_pin_obj_t pin_PB09;
extern const mcu_pin_obj_t pin_PD02;
extern const mcu_pin_obj_t pin_PH00;
extern const mcu_pin_obj_t pin_PH01;
#endif // MICROPY_INCLUDED_STM32F4_PERIPHERALS_STM32F446RE_PINS_H

View File

@ -77,6 +77,12 @@
#define INTERNAL_FLASH_FILESYSTEM_START_ADDR 0x08004000 #define INTERNAL_FLASH_FILESYSTEM_START_ADDR 0x08004000
#endif #endif
#ifdef STM32F446xx
#define STM32_FLASH_SIZE 0x80000 // 512KiB
#define INTERNAL_FLASH_FILESYSTEM_SIZE 0xC000 // 48KiB
#define INTERNAL_FLASH_FILESYSTEM_START_ADDR 0x08004000
#endif
/* Note this applies to STM32F769xG only, STM32F746xE has 512KB */ /* Note this applies to STM32F769xG only, STM32F746xE has 512KB */
#ifdef STM32F746xx #ifdef STM32F746xx
#define STM32_FLASH_SIZE 0x100000 // 1MB #define STM32_FLASH_SIZE 0x100000 // 1MB

View File

@ -526,7 +526,9 @@ STATIC mp_obj_t extra_coverage(void) {
// ringbuf // ringbuf
{ {
byte buf[100]; #define RINGBUF_SIZE 99
byte buf[RINGBUF_SIZE];
ringbuf_t ringbuf; ringbuf_t ringbuf;
ringbuf_init(&ringbuf, &buf[0], sizeof(buf)); ringbuf_init(&ringbuf, &buf[0], sizeof(buf));
@ -546,7 +548,7 @@ STATIC mp_obj_t extra_coverage(void) {
mp_printf(&mp_plat_print, "%d %d\n", ringbuf_num_empty(&ringbuf), ringbuf_num_filled(&ringbuf)); mp_printf(&mp_plat_print, "%d %d\n", ringbuf_num_empty(&ringbuf), ringbuf_num_filled(&ringbuf));
// Two-byte put with full ringbuf. // Two-byte put with full ringbuf.
for (int i = 0; i < 99; ++i) { for (int i = 0; i < RINGBUF_SIZE; ++i) {
ringbuf_put(&ringbuf, i); ringbuf_put(&ringbuf, i);
} }
mp_printf(&mp_plat_print, "%d %d\n", ringbuf_num_empty(&ringbuf), ringbuf_num_filled(&ringbuf)); mp_printf(&mp_plat_print, "%d %d\n", ringbuf_num_empty(&ringbuf), ringbuf_num_filled(&ringbuf));
@ -558,16 +560,15 @@ STATIC mp_obj_t extra_coverage(void) {
ringbuf_get(&ringbuf); ringbuf_get(&ringbuf);
mp_printf(&mp_plat_print, "%d %d\n", ringbuf_num_empty(&ringbuf), ringbuf_num_filled(&ringbuf)); mp_printf(&mp_plat_print, "%d %d\n", ringbuf_num_empty(&ringbuf), ringbuf_num_filled(&ringbuf));
mp_printf(&mp_plat_print, "%d\n", ringbuf_put16(&ringbuf, 0xcc99)); mp_printf(&mp_plat_print, "%d\n", ringbuf_put16(&ringbuf, 0xcc99));
for (int i = 0; i < 97; ++i) { for (int i = 0; i < RINGBUF_SIZE - 2; ++i) {
ringbuf_get(&ringbuf); ringbuf_get(&ringbuf);
} }
mp_printf(&mp_plat_print, "%04x\n", ringbuf_get16(&ringbuf)); mp_printf(&mp_plat_print, "%04x\n", ringbuf_get16(&ringbuf));
mp_printf(&mp_plat_print, "%d %d\n", ringbuf_num_empty(&ringbuf), ringbuf_num_filled(&ringbuf)); mp_printf(&mp_plat_print, "%d %d\n", ringbuf_num_empty(&ringbuf), ringbuf_num_filled(&ringbuf));
// Two-byte put with wrap around on first byte: // Two-byte put with wrap around on first byte:
ringbuf.iput = 0; ringbuf_clear(&ringbuf);
ringbuf.iget = 0; for (int i = 0; i < RINGBUF_SIZE; ++i) {
for (int i = 0; i < 99; ++i) {
ringbuf_put(&ringbuf, i); ringbuf_put(&ringbuf, i);
ringbuf_get(&ringbuf); ringbuf_get(&ringbuf);
} }
@ -575,9 +576,8 @@ STATIC mp_obj_t extra_coverage(void) {
mp_printf(&mp_plat_print, "%04x\n", ringbuf_get16(&ringbuf)); mp_printf(&mp_plat_print, "%04x\n", ringbuf_get16(&ringbuf));
// Two-byte put with wrap around on second byte: // Two-byte put with wrap around on second byte:
ringbuf.iput = 0; ringbuf_clear(&ringbuf);
ringbuf.iget = 0; for (int i = 0; i < RINGBUF_SIZE - 1; ++i) {
for (int i = 0; i < 98; ++i) {
ringbuf_put(&ringbuf, i); ringbuf_put(&ringbuf, i);
ringbuf_get(&ringbuf); ringbuf_get(&ringbuf);
} }
@ -585,13 +585,11 @@ STATIC mp_obj_t extra_coverage(void) {
mp_printf(&mp_plat_print, "%04x\n", ringbuf_get16(&ringbuf)); mp_printf(&mp_plat_print, "%04x\n", ringbuf_get16(&ringbuf));
// Two-byte get from empty ringbuf. // Two-byte get from empty ringbuf.
ringbuf.iput = 0; ringbuf_clear(&ringbuf);
ringbuf.iget = 0;
mp_printf(&mp_plat_print, "%d\n", ringbuf_get16(&ringbuf)); mp_printf(&mp_plat_print, "%d\n", ringbuf_get16(&ringbuf));
// Two-byte get from ringbuf with one byte available. // Two-byte get from ringbuf with one byte available.
ringbuf.iput = 0; ringbuf_clear(&ringbuf);
ringbuf.iget = 0;
ringbuf_put(&ringbuf, 0xaa); ringbuf_put(&ringbuf, 0xaa);
mp_printf(&mp_plat_print, "%d\n", ringbuf_get16(&ringbuf)); mp_printf(&mp_plat_print, "%d\n", ringbuf_get16(&ringbuf));
} }

View File

@ -189,7 +189,7 @@ mp_float_t mp_arg_validate_obj_float_non_negative(mp_obj_t float_in, mp_float_t
? default_for_null ? default_for_null
: mp_obj_get_float(float_in); : mp_obj_get_float(float_in);
if (f <= (mp_float_t)0.0) { if (f <= (mp_float_t)0.0) {
mp_raise_ValueError_varg(translate("%q must be >= 0"), arg_name); mp_raise_ValueError_varg(translate("%q must be >= %d"), arg_name, 0);
} }
return f; return f;
} }

View File

@ -27,86 +27,85 @@
#include "ringbuf.h" #include "ringbuf.h"
bool ringbuf_init(ringbuf_t *r, uint8_t *buf, size_t capacity) { bool ringbuf_init(ringbuf_t *r, uint8_t *buf, size_t size) {
r->buf = buf; r->buf = buf;
r->size = capacity; r->size = size;
r->iget = r->iput = 0; r->used = 0;
r->next_read = 0;
r->next_write = 0;
return r->buf != NULL; return r->buf != NULL;
} }
// Dynamic initialization. This should be accessible from a root pointer. // Dynamic initialization. This should be accessible from a root pointer..
// capacity is the number of bytes the ring buffer can hold. The actual bool ringbuf_alloc(ringbuf_t *r, size_t size, bool long_lived) {
// size of the buffer is one greater than that, due to how the buffer bool result = ringbuf_init(r, gc_alloc(size, false, long_lived), size);
// handles empty and full statuses. return result;
bool ringbuf_alloc(ringbuf_t *r, size_t capacity, bool long_lived) {
r->buf = gc_alloc(capacity + 1, false, long_lived);
r->size = capacity + 1;
r->iget = r->iput = 0;
return r->buf != NULL;
} }
void ringbuf_free(ringbuf_t *r) { void ringbuf_deinit(ringbuf_t *r) {
// Free buf by letting gc take care of it. If the VM has finished already, // Free buf by doing nothing and letting gc take care of it. If the VM has finished already,
// this will be safe. // this will be safe.
r->buf = (uint8_t *)NULL; r->buf = (uint8_t *)NULL;
r->size = 0; r->size = 0;
ringbuf_clear(r); ringbuf_clear(r);
} }
size_t ringbuf_capacity(ringbuf_t *r) { size_t ringbuf_size(ringbuf_t *r) {
return r->size - 1; return r->size;
} }
// Returns -1 if buffer is empty, else returns byte fetched. // Return -1 if buffer is empty, else return byte fetched.
int ringbuf_get(ringbuf_t *r) { int ringbuf_get(ringbuf_t *r) {
if (r->iget == r->iput) { if (r->used < 1) {
return -1; return -1;
} }
uint8_t v = r->buf[r->iget++]; uint8_t v = r->buf[r->next_read];
if (r->iget >= r->size) { r->next_read++;
r->iget = 0; if (r->next_read >= r->size) {
r->next_read = 0;
} }
r->used--;
return v; return v;
} }
int ringbuf_get16(ringbuf_t *r) { int ringbuf_get16(ringbuf_t *r) {
int v = ringbuf_peek16(r); if (r->used < 2) {
if (v == -1) {
return v;
}
r->iget += 2;
if (r->iget >= r->size) {
r->iget -= r->size;
}
return v;
}
// Returns -1 if no room in buffer, else returns 0.
int ringbuf_put(ringbuf_t *r, uint8_t v) {
uint32_t iput_new = r->iput + 1;
if (iput_new >= r->size) {
iput_new = 0;
}
if (iput_new == r->iget) {
return -1; return -1;
} }
r->buf[r->iput] = v;
r->iput = iput_new; int high_byte = ringbuf_get(r);
int low_byte = ringbuf_get(r);
return (high_byte << 8) | low_byte;
}
// Return -1 if no room in buffer, else return 0.
int ringbuf_put(ringbuf_t *r, uint8_t v) {
if (r->used >= r->size) {
return -1;
}
r->buf[r->next_write] = v;
r->next_write++;
if (r->next_write >= r->size) {
r->next_write = 0;
}
r->used++;
return 0; return 0;
} }
void ringbuf_clear(ringbuf_t *r) { void ringbuf_clear(ringbuf_t *r) {
r->iput = r->iget = 0; r->next_write = 0;
r->next_read = 0;
r->used = 0;
} }
// Number of free slots that can be written. // Number of free slots that can be written.
size_t ringbuf_num_empty(ringbuf_t *r) { size_t ringbuf_num_empty(ringbuf_t *r) {
return (r->size + r->iget - r->iput - 1) % r->size; return r->size - r->used;
} }
// Number of bytes available to read. // Number of bytes available to read.
size_t ringbuf_num_filled(ringbuf_t *r) { size_t ringbuf_num_filled(ringbuf_t *r) {
return (r->size + r->iput - r->iget) % r->size; return r->used;
} }
// If the ring buffer fills up, not all bytes will be written. // If the ring buffer fills up, not all bytes will be written.
@ -134,37 +133,12 @@ size_t ringbuf_get_n(ringbuf_t *r, uint8_t *buf, size_t bufsize) {
return bufsize; return bufsize;
} }
int ringbuf_peek16(ringbuf_t *r) { int ringbuf_put16(ringbuf_t *r, uint16_t v) {
if (r->iget == r->iput) { if (r->size - r->used < 2) {
return -1; return -1;
} }
uint32_t iget_a = r->iget + 1;
if (iget_a == r->size) {
iget_a = 0;
}
if (iget_a == r->iput) {
return -1;
}
return (r->buf[r->iget] << 8) | (r->buf[iget_a]);
}
int ringbuf_put16(ringbuf_t *r, uint16_t v) { ringbuf_put(r, (v >> 8) & 0xff);
uint32_t iput_a = r->iput + 1; ringbuf_put(r, v & 0xff);
if (iput_a == r->size) {
iput_a = 0;
}
if (iput_a == r->iget) {
return -1;
}
uint32_t iput_b = iput_a + 1;
if (iput_b == r->size) {
iput_b = 0;
}
if (iput_b == r->iget) {
return -1;
}
r->buf[r->iput] = (v >> 8) & 0xff;
r->buf[iput_a] = v & 0xff;
r->iput = iput_b;
return 0; return 0;
} }

View File

@ -33,19 +33,23 @@
typedef struct _ringbuf_t { typedef struct _ringbuf_t {
uint8_t *buf; uint8_t *buf;
// Allocated size; capacity is one less. Don't reference this directly.
uint32_t size; uint32_t size;
uint32_t iget; uint32_t used;
uint32_t iput; uint32_t next_read;
uint32_t next_write;
} ringbuf_t; } ringbuf_t;
// Note that the capacity of the buffer is N-1! // For static initialization with an existing buffer, use ringbuf_init().
// For static initialization use ringbuf_init()
bool ringbuf_init(ringbuf_t *r, uint8_t *buf, size_t capacity); bool ringbuf_init(ringbuf_t *r, uint8_t *buf, size_t capacity);
// For allocation of a buffer on the heap, use ringbuf_alloc().
bool ringbuf_alloc(ringbuf_t *r, size_t capacity, bool long_lived); bool ringbuf_alloc(ringbuf_t *r, size_t capacity, bool long_lived);
void ringbuf_free(ringbuf_t *r);
size_t ringbuf_capacity(ringbuf_t *r); // Mark ringbuf as no longer in use, and allow any heap storage to be freed by gc.
void ringbuf_deinit(ringbuf_t *r);
// Note: Ringbuf operations are not atomic.
size_t ringbuf_size(ringbuf_t *r);
int ringbuf_get(ringbuf_t *r); int ringbuf_get(ringbuf_t *r);
int ringbuf_put(ringbuf_t *r, uint8_t v); int ringbuf_put(ringbuf_t *r, uint8_t v);
void ringbuf_clear(ringbuf_t *r); void ringbuf_clear(ringbuf_t *r);
@ -54,9 +58,8 @@ size_t ringbuf_num_filled(ringbuf_t *r);
size_t ringbuf_put_n(ringbuf_t *r, const uint8_t *buf, size_t bufsize); size_t ringbuf_put_n(ringbuf_t *r, const uint8_t *buf, size_t bufsize);
size_t ringbuf_get_n(ringbuf_t *r, uint8_t *buf, size_t bufsize); size_t ringbuf_get_n(ringbuf_t *r, uint8_t *buf, size_t bufsize);
// Note: big-endian. No-op if not enough room available for both bytes. // Note: big-endian. Return -1 if can't read or write two bytes.
int ringbuf_get16(ringbuf_t *r); int ringbuf_get16(ringbuf_t *r);
int ringbuf_peek16(ringbuf_t *r);
int ringbuf_put16(ringbuf_t *r, uint16_t v); int ringbuf_put16(ringbuf_t *r, uint16_t v);
#endif // MICROPY_INCLUDED_PY_RINGBUF_H #endif // MICROPY_INCLUDED_PY_RINGBUF_H

View File

@ -9,7 +9,7 @@ setuptools>=45
setuptools_scm setuptools_scm
# For sphinx # For sphinx
sphinx>=4.0.0 sphinx!=5.2.0.post0
sphinx-autoapi sphinx-autoapi
sphinx-rtd-theme sphinx-rtd-theme
sphinxcontrib-svg2pdfconverter sphinxcontrib-svg2pdfconverter

View File

@ -188,10 +188,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(audiobusio_pdmin___exit___obj, 4, 4,
STATIC mp_obj_t audiobusio_pdmin_obj_record(mp_obj_t self_obj, mp_obj_t destination, mp_obj_t destination_length) { STATIC mp_obj_t audiobusio_pdmin_obj_record(mp_obj_t self_obj, mp_obj_t destination, mp_obj_t destination_length) {
audiobusio_pdmin_obj_t *self = MP_OBJ_TO_PTR(self_obj); audiobusio_pdmin_obj_t *self = MP_OBJ_TO_PTR(self_obj);
check_for_deinit(self); check_for_deinit(self);
if (!mp_obj_is_small_int(destination_length) || MP_OBJ_SMALL_INT_VALUE(destination_length) < 0) { uint32_t length = mp_arg_validate_type_int(destination_length, MP_QSTR_length);
mp_raise_TypeError(translate("destination_length must be an int >= 0")); mp_arg_validate_length_min(length, 0, MP_QSTR_length);
}
uint32_t length = MP_OBJ_SMALL_INT_VALUE(destination_length);
mp_buffer_info_t bufinfo; mp_buffer_info_t bufinfo;
if (mp_obj_is_type(destination, &mp_type_fileio)) { if (mp_obj_is_type(destination, &mp_type_fileio)) {

View File

@ -172,6 +172,21 @@ STATIC mp_obj_t audiomp3_mp3file_obj_set_file(mp_obj_t self_in, mp_obj_t file) {
} }
MP_DEFINE_CONST_FUN_OBJ_2(audiomp3_mp3file_set_file_obj, audiomp3_mp3file_obj_set_file); MP_DEFINE_CONST_FUN_OBJ_2(audiomp3_mp3file_set_file_obj, audiomp3_mp3file_obj_set_file);
//| def open(self, filepath: str) -> None:
//| """Takes in the name of a mp3 file, opens it, and replaces the old playback file."""
//| ...
//|
STATIC mp_obj_t audiomp3_mp3file_obj_open(mp_obj_t self_in, mp_obj_t path) {
audiomp3_mp3file_obj_t *self = MP_OBJ_TO_PTR(self_in);
check_for_deinit(self);
mp_obj_t file = mp_call_function_2(MP_OBJ_FROM_PTR(&mp_builtin_open_obj), path, MP_ROM_QSTR(MP_QSTR_rb));
common_hal_audiomp3_mp3file_set_file(self, file);
return mp_const_none;
}
MP_DEFINE_CONST_FUN_OBJ_2(audiomp3_mp3file_open_obj, audiomp3_mp3file_obj_open);
MP_PROPERTY_GETSET(audiomp3_mp3file_file_obj, MP_PROPERTY_GETSET(audiomp3_mp3file_file_obj,
(mp_obj_t)&audiomp3_mp3file_get_file_obj, (mp_obj_t)&audiomp3_mp3file_get_file_obj,
(mp_obj_t)&audiomp3_mp3file_set_file_obj); (mp_obj_t)&audiomp3_mp3file_set_file_obj);
@ -256,6 +271,7 @@ MP_PROPERTY_GETTER(audiomp3_mp3file_samples_decoded_obj,
STATIC const mp_rom_map_elem_t audiomp3_mp3file_locals_dict_table[] = { STATIC const mp_rom_map_elem_t audiomp3_mp3file_locals_dict_table[] = {
// Methods // Methods
{ MP_ROM_QSTR(MP_QSTR_open), MP_ROM_PTR(&audiomp3_mp3file_open_obj) },
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&audiomp3_mp3file_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&audiomp3_mp3file_deinit_obj) },
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) },
{ MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&audiomp3_mp3file___exit___obj) }, { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&audiomp3_mp3file___exit___obj) },

View File

@ -72,10 +72,7 @@ STATIC mp_obj_t displayio_colorconverter_make_new(const mp_obj_type_t *type, siz
STATIC mp_obj_t displayio_colorconverter_obj_convert(mp_obj_t self_in, mp_obj_t color_obj) { STATIC mp_obj_t displayio_colorconverter_obj_convert(mp_obj_t self_in, mp_obj_t color_obj) {
displayio_colorconverter_t *self = MP_OBJ_TO_PTR(self_in); displayio_colorconverter_t *self = MP_OBJ_TO_PTR(self_in);
mp_int_t color; mp_int_t color = mp_arg_validate_type_int(color_obj, MP_QSTR_color);
if (!mp_obj_get_int_maybe(color_obj, &color)) {
mp_raise_ValueError(translate("color should be an int"));
}
_displayio_colorspace_t colorspace; _displayio_colorspace_t colorspace;
colorspace.depth = 16; colorspace.depth = 16;
uint32_t output_color; uint32_t output_color;

View File

@ -156,11 +156,8 @@ STATIC mp_obj_t palette_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t val
STATIC mp_obj_t displayio_palette_obj_make_transparent(mp_obj_t self_in, mp_obj_t palette_index_obj) { STATIC mp_obj_t displayio_palette_obj_make_transparent(mp_obj_t self_in, mp_obj_t palette_index_obj) {
displayio_palette_t *self = MP_OBJ_TO_PTR(self_in); displayio_palette_t *self = MP_OBJ_TO_PTR(self_in);
mp_int_t palette_index; mp_int_t palette_index = mp_arg_validate_type_int(palette_index_obj, MP_QSTR_palette_index);
if (!mp_obj_get_int_maybe(palette_index_obj, &palette_index)) { mp_arg_validate_int_range(palette_index, 0, common_hal_displayio_palette_get_len(self) - 1, MP_QSTR_palette_index);
mp_raise_ValueError(translate("palette_index should be an int"));
}
palette_index = mp_arg_validate_int_range(palette_index, 0, common_hal_displayio_palette_get_len(self) - 1, MP_QSTR_palette_index);
common_hal_displayio_palette_make_transparent(self, palette_index); common_hal_displayio_palette_make_transparent(self, palette_index);
return mp_const_none; return mp_const_none;
@ -173,10 +170,7 @@ MP_DEFINE_CONST_FUN_OBJ_2(displayio_palette_make_transparent_obj, displayio_pale
STATIC mp_obj_t displayio_palette_obj_make_opaque(mp_obj_t self_in, mp_obj_t palette_index_obj) { STATIC mp_obj_t displayio_palette_obj_make_opaque(mp_obj_t self_in, mp_obj_t palette_index_obj) {
displayio_palette_t *self = MP_OBJ_TO_PTR(self_in); displayio_palette_t *self = MP_OBJ_TO_PTR(self_in);
mp_int_t palette_index; mp_int_t palette_index = mp_arg_validate_type_int(palette_index_obj, MP_QSTR_palette_index);
if (!mp_obj_get_int_maybe(palette_index_obj, &palette_index)) {
mp_raise_ValueError(translate("palette_index should be an int"));
}
palette_index = mp_arg_validate_int_range(palette_index, 0, common_hal_displayio_palette_get_len(self) - 1, MP_QSTR_palette_index); palette_index = mp_arg_validate_int_range(palette_index, 0, common_hal_displayio_palette_get_len(self) - 1, MP_QSTR_palette_index);
common_hal_displayio_palette_make_opaque(self, palette_index); common_hal_displayio_palette_make_opaque(self, palette_index);
@ -191,10 +185,7 @@ MP_DEFINE_CONST_FUN_OBJ_2(displayio_palette_make_opaque_obj, displayio_palette_o
STATIC mp_obj_t displayio_palette_obj_is_transparent(mp_obj_t self_in, mp_obj_t palette_index_obj) { STATIC mp_obj_t displayio_palette_obj_is_transparent(mp_obj_t self_in, mp_obj_t palette_index_obj) {
displayio_palette_t *self = MP_OBJ_TO_PTR(self_in); displayio_palette_t *self = MP_OBJ_TO_PTR(self_in);
mp_int_t palette_index; mp_int_t palette_index = mp_arg_validate_type_int(palette_index_obj, MP_QSTR_palette_index);
if (!mp_obj_get_int_maybe(palette_index_obj, &palette_index)) {
mp_raise_ValueError(translate("palette_index should be an int"));
}
palette_index = mp_arg_validate_int_range(palette_index, 0, common_hal_displayio_palette_get_len(self) - 1, MP_QSTR_palette_index); palette_index = mp_arg_validate_int_range(palette_index, 0, common_hal_displayio_palette_get_len(self) - 1, MP_QSTR_palette_index);
return mp_obj_new_bool(common_hal_displayio_palette_is_transparent(self, palette_index)); return mp_obj_new_bool(common_hal_displayio_palette_is_transparent(self, palette_index));

View File

@ -80,18 +80,9 @@ STATIC mp_obj_t displayio_shape_make_new(const mp_obj_type_t *type, size_t n_arg
STATIC mp_obj_t displayio_shape_obj_set_boundary(size_t n_args, const mp_obj_t *args) { STATIC mp_obj_t displayio_shape_obj_set_boundary(size_t n_args, const mp_obj_t *args) {
(void)n_args; (void)n_args;
displayio_shape_t *self = MP_OBJ_TO_PTR(args[0]); displayio_shape_t *self = MP_OBJ_TO_PTR(args[0]);
mp_int_t y; mp_int_t y = mp_arg_validate_type_int(args[1], MP_QSTR_y);
if (!mp_obj_get_int_maybe(args[1], &y)) { mp_int_t start_x = mp_arg_validate_type_int(args[1], MP_QSTR_start_x);
mp_raise_ValueError(translate("y should be an int")); mp_int_t end_x = mp_arg_validate_type_int(args[1], MP_QSTR_end_x);
}
mp_int_t start_x;
if (!mp_obj_get_int_maybe(args[2], &start_x)) {
mp_raise_ValueError(translate("start_x should be an int"));
}
mp_int_t end_x;
if (!mp_obj_get_int_maybe(args[3], &end_x)) {
mp_raise_ValueError(translate("end_x should be an int"));
}
common_hal_displayio_shape_set_boundary(self, y, start_x, end_x); common_hal_displayio_shape_set_boundary(self, y, start_x, end_x);
return mp_const_none; return mp_const_none;

View File

@ -85,13 +85,7 @@ STATIC mp_obj_t i2ctarget_i2c_target_make_new(const mp_obj_type_t *type, size_t
uint8_t *addresses = NULL; uint8_t *addresses = NULL;
unsigned int i = 0; unsigned int i = 0;
while ((item = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) { while ((item = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) {
mp_int_t value; mp_uint_t value = mp_arg_validate_int_range(mp_obj_get_int(item), 0x00, 0x7f, MP_QSTR_address);
if (!mp_obj_get_int_maybe(item, &value)) {
mp_raise_TypeError_varg(translate("can't convert %q to %q"), MP_QSTR_address, MP_QSTR_int);
}
if (value < 0x00 || value > 0x7f) {
mp_raise_ValueError(translate("address out of bounds"));
}
addresses = m_renew(uint8_t, addresses, i, i + 1); addresses = m_renew(uint8_t, addresses, i, i + 1);
addresses[i++] = value; addresses[i++] = value;
} }

View File

@ -201,11 +201,9 @@ STATIC mp_obj_t sdioio_sdcard_writeblocks(mp_obj_t self_in, mp_obj_t start_block
MP_DEFINE_CONST_FUN_OBJ_3(sdioio_sdcard_writeblocks_obj, sdioio_sdcard_writeblocks); MP_DEFINE_CONST_FUN_OBJ_3(sdioio_sdcard_writeblocks_obj, sdioio_sdcard_writeblocks);
//| @property //| frequency: int
//| def frequency(self) -> int:
//| """The actual SDIO bus frequency. This may not match the frequency //| """The actual SDIO bus frequency. This may not match the frequency
//| requested due to internal limitations.""" //| requested due to internal limitations."""
//| ...
//| //|
STATIC mp_obj_t sdioio_sdcard_obj_get_frequency(mp_obj_t self_in) { STATIC mp_obj_t sdioio_sdcard_obj_get_frequency(mp_obj_t self_in) {
sdioio_sdcard_obj_t *self = MP_OBJ_TO_PTR(self_in); sdioio_sdcard_obj_t *self = MP_OBJ_TO_PTR(self_in);
@ -217,10 +215,8 @@ MP_DEFINE_CONST_FUN_OBJ_1(sdioio_sdcard_get_frequency_obj, sdioio_sdcard_obj_get
MP_PROPERTY_GETTER(sdioio_sdcard_frequency_obj, MP_PROPERTY_GETTER(sdioio_sdcard_frequency_obj,
(mp_obj_t)&sdioio_sdcard_get_frequency_obj); (mp_obj_t)&sdioio_sdcard_get_frequency_obj);
//| @property //| width:int
//| def width(self) -> int:
//| """The actual SDIO bus width, in bits""" //| """The actual SDIO bus width, in bits"""
//| ...
//| //|
STATIC mp_obj_t sdioio_sdcard_obj_get_width(mp_obj_t self_in) { STATIC mp_obj_t sdioio_sdcard_obj_get_width(mp_obj_t self_in) {
sdioio_sdcard_obj_t *self = MP_OBJ_TO_PTR(self_in); sdioio_sdcard_obj_t *self = MP_OBJ_TO_PTR(self_in);

View File

@ -54,11 +54,12 @@
//| ... //| ...
//| //|
//| def readinto(self, buf: WriteableBuffer) -> int: //| def readinto(self, buf: WriteableBuffer) -> int:
//| """Read bytes into the ``buf``. If ``nbytes`` is specified then read at most //| """Read bytes into the ``buf``. Read at most ``len(buf)`` bytes. If `timeout`
//| that many bytes, subject to `timeout`. Otherwise, read at most ``len(buf)`` bytes. //| is > 0 or ``None``, keep waiting until the timeout expires or ``len(buf)``
//| bytes are available.
//| //|
//| :return: number of bytes read and stored into ``buf`` //| :return: number of bytes read and stored into ``buf``
//| :rtype: bytes""" //| :rtype: int"""
//| ... //| ...
//| //|
//| def readline(self, size: int = -1) -> Optional[bytes]: //| def readline(self, size: int = -1) -> Optional[bytes]:

View File

@ -34,9 +34,7 @@ static mp_obj_t vectorio_circle_make_new(const mp_obj_type_t *type, size_t n_arg
mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
mp_int_t radius = args[ARG_radius].u_int; mp_int_t radius = args[ARG_radius].u_int;
if (radius < 1) { mp_arg_validate_int_min(radius, 1, MP_QSTR_radius);
mp_raise_ValueError_varg(translate("%q must be >= 1"), MP_QSTR_radius);
}
vectorio_circle_t *self = m_new_obj(vectorio_circle_t); vectorio_circle_t *self = m_new_obj(vectorio_circle_t);
self->base.type = &vectorio_circle_type; self->base.type = &vectorio_circle_type;

View File

@ -34,13 +34,9 @@ static mp_obj_t vectorio_rectangle_make_new(const mp_obj_type_t *type, size_t n_
mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
mp_int_t width = args[ARG_width].u_int; mp_int_t width = args[ARG_width].u_int;
if (width < 1) { mp_arg_validate_int_min(width, 1, MP_QSTR_width);
mp_raise_ValueError_varg(translate("%q must be >= 1"), MP_QSTR_width);
}
mp_int_t height = args[ARG_height].u_int; mp_int_t height = args[ARG_height].u_int;
if (height < 1) { mp_arg_validate_int_min(height, 1, MP_QSTR_height);
mp_raise_ValueError_varg(translate("%q must be >= 1"), MP_QSTR_height);
}
vectorio_rectangle_t *self = m_new_obj(vectorio_rectangle_t); vectorio_rectangle_t *self = m_new_obj(vectorio_rectangle_t);
self->base.type = &vectorio_rectangle_type; self->base.type = &vectorio_rectangle_type;

View File

@ -14,7 +14,8 @@
// Converts a list of points tuples to a flat list of ints for speedier internal use. // Converts a list of points tuples to a flat list of ints for speedier internal use.
// Also validates the points. // Also validates the points. If this fails due to invalid types or values, the
// number of points is 0 and the points_list is NULL.
static void _clobber_points_list(vectorio_polygon_t *self, mp_obj_t points_tuple_list) { static void _clobber_points_list(vectorio_polygon_t *self, mp_obj_t points_tuple_list) {
size_t len = 0; size_t len = 0;
mp_obj_t *items; mp_obj_t *items;
@ -25,15 +26,12 @@ static void _clobber_points_list(vectorio_polygon_t *self, mp_obj_t points_tuple
mp_raise_TypeError(translate("Polygon needs at least 3 points")); mp_raise_TypeError(translate("Polygon needs at least 3 points"));
} }
if (self->len < 2 * len) { int16_t *points_list = gc_realloc(self->points_list, 2 * len * sizeof(uint16_t), true);
if (self->points_list != NULL) { VECTORIO_POLYGON_DEBUG("realloc(%p, %d) -> %p", self->points_list, 2 * len * sizeof(uint16_t), points_list);
VECTORIO_POLYGON_DEBUG("free(%d), ", sizeof(self->points_list));
gc_free(self->points_list); // In case the validation calls below fail, set these values temporarily
} self->points_list = NULL;
self->points_list = gc_alloc(2 * len * sizeof(uint16_t), false, false); self->len = 0;
VECTORIO_POLYGON_DEBUG("alloc(%p, %d)", self->points_list, 2 * len * sizeof(uint16_t));
}
self->len = 2 * len;
for (uint16_t i = 0; i < len; ++i) { for (uint16_t i = 0; i < len; ++i) {
size_t tuple_len = 0; size_t tuple_len = 0;
@ -42,20 +40,16 @@ static void _clobber_points_list(vectorio_polygon_t *self, mp_obj_t points_tuple
mp_arg_validate_length(tuple_len, 2, MP_QSTR_point); mp_arg_validate_length(tuple_len, 2, MP_QSTR_point);
mp_int_t x; mp_int_t x = mp_arg_validate_type_int(tuple_items[0], MP_QSTR_x);
mp_int_t y; mp_arg_validate_int_range(x, SHRT_MIN, SHRT_MAX, MP_QSTR_x);
if (!mp_obj_get_int_maybe(tuple_items[ 0 ], &x) mp_int_t y = mp_arg_validate_type_int(tuple_items[1], MP_QSTR_y);
|| !mp_obj_get_int_maybe(tuple_items[ 1 ], &y) mp_arg_validate_int_range(y, SHRT_MIN, SHRT_MAX, MP_QSTR_y);
|| x < SHRT_MIN || x > SHRT_MAX || y < SHRT_MIN || y > SHRT_MAX points_list[2 * i ] = (int16_t)x;
) { points_list[2 * i + 1] = (int16_t)y;
gc_free(self->points_list);
self->points_list = NULL;
mp_raise_ValueError_varg(translate("unsupported %q type"), MP_QSTR_point);
self->len = 0;
}
self->points_list[2 * i ] = (int16_t)x;
self->points_list[2 * i + 1] = (int16_t)y;
} }
self->points_list = points_list;
self->len = 2 * len;
} }

View File

@ -277,12 +277,8 @@ void common_hal_vectorio_vector_shape_set_location(vectorio_vector_shape_t *self
mp_obj_tuple_get(xy, &tuple_len, &tuple_items); mp_obj_tuple_get(xy, &tuple_len, &tuple_items);
mp_arg_validate_length(tuple_len, 2, MP_QSTR_location); mp_arg_validate_length(tuple_len, 2, MP_QSTR_location);
mp_int_t x; mp_int_t x = mp_arg_validate_type_int(tuple_items[0], MP_QSTR_x);
mp_int_t y; mp_int_t y = mp_arg_validate_type_int(tuple_items[0], MP_QSTR_y);
if (!mp_obj_get_int_maybe(tuple_items[ 0 ], &x)
|| !mp_obj_get_int_maybe(tuple_items[ 1 ], &y)) {
mp_raise_ValueError_varg(translate("unsupported %q type"), MP_QSTR_point);
}
bool dirty = false; bool dirty = false;
if (self->x != x) { if (self->x != x) {
check_bounds_and_set_x(self, x); check_bounds_and_set_x(self, x);

View File

@ -56,7 +56,6 @@ DEFAULT_CLUSTERLIST = {
"espressif_esp32s3_devkitc_1_n8r8", "espressif_esp32s3_devkitc_1_n8r8",
], ],
"0x303A:0x7009": ["espressif_esp32s2_devkitc_1_n4", "espressif_esp32s2_devkitc_1_n4r2"], "0x303A:0x7009": ["espressif_esp32s2_devkitc_1_n4", "espressif_esp32s2_devkitc_1_n4r2"],
"0x70010001:0x00100001": ["ai_thinker_esp32-c3s", "ai_thinker_esp32-c3s-2m"],
} }
cli_parser = argparse.ArgumentParser( cli_parser = argparse.ArgumentParser(