Merge remote-tracking branch 'adafruit/main' into web_workflow_port
This commit is contained in:
commit
6d6234443d
|
@ -211,6 +211,10 @@ msgstr "%q() mengambil posisi argumen %d tapi %d yang diberikan"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr "%q, %q, dan %q semuanya harus memiliki panjang yang sama"
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -205,6 +205,10 @@ msgstr ""
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr ""
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -212,6 +212,10 @@ msgstr "%q() vyžaduje %d pozičních argumentů, ale %d jich bylo zadáno"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr "%q, %q, a %q musí mít všechny shodnou délku"
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -214,6 +214,10 @@ msgstr ""
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr "%q, %q und %q müssen alle die gleiche Länge haben"
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -205,6 +205,10 @@ msgstr ""
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr ""
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -215,6 +215,10 @@ msgstr "%q() takes %d positional arguments but %d were given"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr "%q, %q, and %q must all be the same length"
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -214,6 +214,10 @@ msgstr "%q() toma %d argumentos posicionales pero %d fueron dados"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr ""
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -208,6 +208,10 @@ msgstr ""
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr ""
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
30
locale/fr.po
30
locale/fr.po
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: 0.1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
|
||||
"PO-Revision-Date: 2022-07-06 05:15+0000\n"
|
||||
"PO-Revision-Date: 2022-07-19 23:15+0000\n"
|
||||
"Last-Translator: Maxime Leroy <lisacintosh@gmail.com>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.13.1-dev\n"
|
||||
"X-Generator: Weblate 4.14-dev\n"
|
||||
|
||||
#: main.c
|
||||
msgid ""
|
||||
|
@ -217,6 +217,10 @@ msgstr "%q() prend %d paramètres positionnels mais %d ont été donnés"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr "%q, %q, et %q doivent tous être de la même longueur"
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
@ -2291,7 +2295,7 @@ msgstr "Format non supporté"
|
|||
|
||||
#: shared-bindings/hashlib/__init__.c
|
||||
msgid "Unsupported hash algorithm"
|
||||
msgstr ""
|
||||
msgstr "Algorithme de hachage non supporté"
|
||||
|
||||
#: ports/espressif/common-hal/dualbank/__init__.c
|
||||
msgid "Update Failed"
|
||||
|
@ -2459,7 +2463,7 @@ msgstr "la taille de la matrice et de l'index doivent être égaux"
|
|||
|
||||
#: extmod/ulab/code/numpy/io/io.c
|
||||
msgid "array has too many dimensions"
|
||||
msgstr ""
|
||||
msgstr "la tableau à trop de dimensions"
|
||||
|
||||
#: py/objarray.c shared-bindings/alarm/SleepMemory.c
|
||||
#: shared-bindings/nvm/ByteArray.c
|
||||
|
@ -2840,7 +2844,7 @@ msgstr "les arguments convolve ne doivent pas être vides"
|
|||
|
||||
#: extmod/ulab/code/numpy/io/io.c
|
||||
msgid "corrupted file"
|
||||
msgstr ""
|
||||
msgstr "fichier corrompu"
|
||||
|
||||
#: extmod/ulab/code/numpy/poly.c
|
||||
msgid "could not invert Vandermonde matrix"
|
||||
|
@ -2938,7 +2942,7 @@ msgstr "vide"
|
|||
|
||||
#: extmod/ulab/code/numpy/io/io.c
|
||||
msgid "empty file"
|
||||
msgstr ""
|
||||
msgstr "fichier vide"
|
||||
|
||||
#: extmod/moduasyncio.c extmod/moduheapq.c extmod/modutimeq.c
|
||||
msgid "empty heap"
|
||||
|
@ -3261,7 +3265,7 @@ msgstr "la matrice d'entrée est singulière"
|
|||
|
||||
#: extmod/ulab/code/numpy/create.c
|
||||
msgid "input must be 1- or 2-d"
|
||||
msgstr ""
|
||||
msgstr "l'entrée doit être 1D ou 2D"
|
||||
|
||||
#: extmod/ulab/code/numpy/carray/carray.c
|
||||
msgid "input must be a 1D ndarray"
|
||||
|
@ -3479,7 +3483,7 @@ msgstr "max_length doit être 0-%d lorsque fixed_length est %s"
|
|||
|
||||
#: extmod/ulab/code/ndarray.c
|
||||
msgid "maximum number of dimensions is "
|
||||
msgstr ""
|
||||
msgstr "le nombre maximal de dimensions est "
|
||||
|
||||
#: py/runtime.c
|
||||
msgid "maximum recursion depth exceeded"
|
||||
|
@ -3883,7 +3887,7 @@ msgstr "pow() avec 3 arguments nécessite des entiers"
|
|||
|
||||
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
|
||||
msgid "pressing SW38 button at start up.\n"
|
||||
msgstr ""
|
||||
msgstr "presser le bouton SW38 au démarrage.\n"
|
||||
|
||||
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
|
||||
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
|
||||
|
@ -4327,11 +4331,11 @@ msgstr "types non supportés pour %q: '%q', '%q'"
|
|||
|
||||
#: extmod/ulab/code/numpy/io/io.c
|
||||
msgid "usecols is too high"
|
||||
msgstr ""
|
||||
msgstr "usecols est trop grand"
|
||||
|
||||
#: extmod/ulab/code/numpy/io/io.c
|
||||
msgid "usecols keyword must be specified"
|
||||
msgstr ""
|
||||
msgstr "le mot-clé \"usecols\" doit être spécifié"
|
||||
|
||||
#: py/objint.c
|
||||
#, c-format
|
||||
|
@ -4376,7 +4380,7 @@ msgstr "axe incorrecte spécifiée"
|
|||
|
||||
#: extmod/ulab/code/numpy/io/io.c
|
||||
msgid "wrong dtype"
|
||||
msgstr ""
|
||||
msgstr "dtype invalide"
|
||||
|
||||
#: extmod/ulab/code/numpy/transform.c
|
||||
msgid "wrong index type"
|
||||
|
@ -4394,7 +4398,7 @@ msgstr "mauvaise taille du tableau de condition"
|
|||
|
||||
#: extmod/ulab/code/numpy/transform.c
|
||||
msgid "wrong length of index array"
|
||||
msgstr ""
|
||||
msgstr "mauvaise longueur du tableau d'indices"
|
||||
|
||||
#: extmod/ulab/code/numpy/create.c py/objarray.c py/objstr.c
|
||||
msgid "wrong number of arguments"
|
||||
|
|
|
@ -205,6 +205,10 @@ msgstr ""
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr ""
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -213,6 +213,10 @@ msgstr "%q() prende %d argomenti posizionali ma ne sono stati forniti %d"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr ""
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -210,6 +210,10 @@ msgstr "%q() は %d 個の位置引数を取りますが、%d 個与えられま
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr ""
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -206,6 +206,10 @@ msgstr ""
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr ""
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -208,6 +208,10 @@ msgstr "%q() verwacht %d positionele argumenten maar kreeg %d"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr ""
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -210,6 +210,10 @@ msgstr "%q() bierze %d argumentów pozycyjnych, lecz podano %d"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr ""
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -6,7 +6,7 @@ msgstr ""
|
|||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
|
||||
"PO-Revision-Date: 2022-07-12 13:10+0000\n"
|
||||
"PO-Revision-Date: 2022-07-24 22:22+0000\n"
|
||||
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: pt_BR\n"
|
||||
|
@ -214,6 +214,10 @@ msgstr "%q() recebe %d argumentos posicionais, porém %d foram informados"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr "todos os %q, %q, e %q devem ter mesmo comprimento"
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr "%q=%q"
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
@ -2273,7 +2277,7 @@ msgstr "Formato não suportado"
|
|||
|
||||
#: shared-bindings/hashlib/__init__.c
|
||||
msgid "Unsupported hash algorithm"
|
||||
msgstr ""
|
||||
msgstr "Sem compatibilidade com o algoritmo de hash"
|
||||
|
||||
#: ports/espressif/common-hal/dualbank/__init__.c
|
||||
msgid "Update Failed"
|
||||
|
@ -3860,7 +3864,7 @@ msgstr "o pow() com 3 argumentos requer números inteiros"
|
|||
|
||||
#: ports/espressif/boards/adafruit_feather_esp32_v2/mpconfigboard.h
|
||||
msgid "pressing SW38 button at start up.\n"
|
||||
msgstr ""
|
||||
msgstr "pressionando o botão SW38 na inicialização.\n"
|
||||
|
||||
#: ports/espressif/boards/adafruit_qtpy_esp32c3/mpconfigboard.h
|
||||
#: ports/espressif/boards/lolin_c3_mini/mpconfigboard.h
|
||||
|
|
|
@ -213,6 +213,10 @@ msgstr "%q() принимает %d позиционных аргументов,
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr "%q, %q, и %q должны быть одной длинны"
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -6,7 +6,7 @@ msgstr ""
|
|||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-01-04 12:55-0600\n"
|
||||
"PO-Revision-Date: 2022-07-14 18:05+0000\n"
|
||||
"PO-Revision-Date: 2022-07-21 20:15+0000\n"
|
||||
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: sv\n"
|
||||
|
@ -213,6 +213,10 @@ msgstr "% q() tar %d positionsargument men %d gavs"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr "%q, %q och %q måste vara lika långa"
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr "%q=%q"
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -217,6 +217,10 @@ msgstr "%q(), %d konumsal argümanını alır ancak %d verildi"
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr "%q, %q ve %q aynı uzunlukta olmalıdır"
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -216,6 +216,10 @@ msgstr "%q() yāoqiú shūrù %d gè wèizhì cānshù, dàn mùqián shūrù le
|
|||
msgid "%q, %q, and %q must all be the same length"
|
||||
msgstr "%q, %q, hé %q bì xū cháng dù xiāng tóng"
|
||||
|
||||
#: py/objint.c
|
||||
msgid "%q=%q"
|
||||
msgstr ""
|
||||
|
||||
#: ports/espressif/bindings/espidf/__init__.c ports/espressif/esp_error.c
|
||||
#, c-format
|
||||
msgid "%s error 0x%x"
|
||||
|
|
|
@ -61,17 +61,12 @@ endif
|
|||
|
||||
MICROPY_PY_ASYNC_AWAIT = 0
|
||||
|
||||
# We don't have room for the fonts for terminalio for ja and ko
|
||||
# We don't have room for the fonts for terminalio for certain languages,
|
||||
# so turn off terminalio, and if it's off and displayio is on,
|
||||
# force a clean build.
|
||||
# Note that we cannot test $(CIRCUITPY_DISPLAYIO) directly with an
|
||||
# ifeq, because it's not set yet.
|
||||
ifeq ($(TRANSLATION), ja)
|
||||
CIRCUITPY_TERMINALIO = 0
|
||||
RELEASE_NEEDS_CLEAN_BUILD = $(CIRCUITPY_DISPLAYIO)
|
||||
endif
|
||||
|
||||
ifeq ($(TRANSLATION), ko)
|
||||
ifneq (,$(filter $(TRANSLATION),ja ko ru))
|
||||
CIRCUITPY_TERMINALIO = 0
|
||||
RELEASE_NEEDS_CLEAN_BUILD = $(CIRCUITPY_DISPLAYIO)
|
||||
endif
|
||||
|
|
|
@ -17,4 +17,4 @@ CIRCUITPY_ESP_FLASH_MODE = dio
|
|||
CIRCUITPY_ESP_FLASH_FREQ = 40m
|
||||
CIRCUITPY_ESP_FLASH_SIZE = 4MB
|
||||
|
||||
CIRCUITPY_PS2IO = 0
|
||||
OPTIMIZATION_FLAGS = -Os
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "shared-bindings/microcontroller/Pin.h"
|
||||
#include "supervisor/board.h"
|
||||
|
||||
#include "components/driver/include/driver/gpio.h"
|
||||
|
||||
void board_init(void) {
|
||||
}
|
||||
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
||||
|
||||
void board_deinit(void) {
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
// Board setup
|
||||
|
||||
#define MICROPY_HW_BOARD_NAME "DFRobot Beetle ESP32-C3"
|
||||
#define MICROPY_HW_MCU_NAME "ESP32-C3FN4"
|
||||
|
||||
// Status LED
|
||||
#define MICROPY_HW_NEOPIXEL (&pin_GPIO10)
|
||||
|
||||
#define CIRCUITPY_BOARD_I2C (1)
|
||||
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO9, .sda = &pin_GPIO8}}
|
||||
|
||||
#define CIRCUITPY_BOARD_SPI (1)
|
||||
#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO4, .mosi = &pin_GPIO6, .miso = &pin_GPIO5}}
|
||||
|
||||
#define CIRCUITPY_BOARD_UART (1)
|
||||
#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO21, .rx = &pin_GPIO20}}
|
||||
|
||||
// Explanation of how a user got into safe mode
|
||||
#define BOARD_USER_SAFE_MODE_ACTION translate("pressing boot button at start up.\n")
|
||||
|
||||
#define CIRCUITPY_ESP_USB_SERIAL_JTAG (1)
|
|
@ -0,0 +1,11 @@
|
|||
# TODO
|
||||
CIRCUITPY_CREATOR_ID = 0x10101010
|
||||
CIRCUITPY_CREATION_ID = 0x00C30001
|
||||
|
||||
IDF_TARGET = esp32c3
|
||||
|
||||
INTERNAL_FLASH_FILESYSTEM = 1
|
||||
|
||||
CIRCUITPY_ESP_FLASH_MODE=qio
|
||||
CIRCUITPY_ESP_FLASH_FREQ=80m
|
||||
CIRCUITPY_ESP_FLASH_SIZE=4MB
|
|
@ -0,0 +1,66 @@
|
|||
#include "shared-bindings/board/__init__.h"
|
||||
|
||||
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
||||
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
|
||||
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO0) }, // ADC1_0
|
||||
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO1) }, // ADC1_1
|
||||
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO1) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO2) }, // ADC1_2
|
||||
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO2) },
|
||||
|
||||
// Pad on Board
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO3) }, // ADC1_3
|
||||
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO3) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_GPIO4) }, // ADC1_4, JTAG MTMS
|
||||
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO4) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO4) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_GPIO5) }, // JTAG MTDI
|
||||
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO5) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) }, // JTAG MTCK
|
||||
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO6) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO6) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) }, // JTAG MTDO
|
||||
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO7) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO8) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO8) },
|
||||
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO9) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_GPIO10) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_GPIO20) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO20) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_GPIO21) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO21) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
|
||||
};
|
||||
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
|
|
@ -0,0 +1,7 @@
|
|||
#
|
||||
# LWIP
|
||||
#
|
||||
CONFIG_LWIP_LOCAL_HOSTNAME="beetle-esp32-c3
|
||||
# end of LWIP
|
||||
|
||||
|
|
@ -394,6 +394,11 @@ STATIC void discover_remote_services(bleio_connection_internal_t *self, mp_obj_t
|
|||
? service->end_handle
|
||||
: next_characteristic->def_handle - 1;
|
||||
|
||||
// Pre-check if characteristic is empty so descriptor discovery doesn't fail
|
||||
if (end_handle <= characteristic->handle) {
|
||||
continue;
|
||||
}
|
||||
|
||||
_last_discovery_status = BLE_ERR_SUCCESS;
|
||||
CHECK_NIMBLE_ERROR(ble_gattc_disc_all_dscs(self->conn_handle, characteristic->handle,
|
||||
end_handle,
|
||||
|
|
|
@ -247,7 +247,7 @@ STATIC mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n
|
|||
mp_raise_ValueError(translate("Program size invalid"));
|
||||
}
|
||||
|
||||
mp_arg_validate_length_range(init_bufinfo.len, 2, 64, MP_QSTR_init);
|
||||
mp_arg_validate_length_range(init_bufinfo.len, 0, 64, MP_QSTR_init);
|
||||
if (init_bufinfo.len % 2 != 0) {
|
||||
mp_raise_ValueError(translate("Init program size invalid"));
|
||||
}
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "supervisor/board.h"
|
||||
|
||||
void board_init(void) {
|
||||
}
|
||||
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
||||
|
||||
void board_deinit(void) {
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#define MICROPY_HW_BOARD_NAME "Fig Pi"
|
||||
#define MICROPY_HW_MCU_NAME "rp2040"
|
||||
|
||||
#define MICROPY_HW_NEOPIXEL (&pin_GPIO13)
|
||||
#define CIRCUITPY_STATUS_LED_POWER (&pin_GPIO1)
|
||||
|
||||
#define CIRCUITPY_BOARD_I2C (2)
|
||||
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO17, .sda = &pin_GPIO16}, \
|
||||
{.scl = &pin_GPIO19, .sda = &pin_GPIO18}}
|
||||
|
||||
#define CIRCUITPY_BOARD_SPI (1)
|
||||
#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO6, .mosi = &pin_GPIO7, .miso = &pin_GPIO4}}
|
||||
|
||||
#define CIRCUITPY_BOARD_UART (1)
|
||||
#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO24, .rx = &pin_GPIO25}}
|
|
@ -0,0 +1,9 @@
|
|||
USB_VID = 0x2019
|
||||
USB_PID = 0x7103
|
||||
USB_PRODUCT = "Fig Pi"
|
||||
USB_MANUFACTURER = "Benjamin Shockley"
|
||||
|
||||
CHIP_VARIANT = RP2040
|
||||
CHIP_FAMILY = rp2
|
||||
|
||||
EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"
|
|
@ -0,0 +1,4 @@
|
|||
// Put board-specific pico-sdk definitions here. This file must exist.
|
||||
|
||||
// Allow extra time for xosc to start.
|
||||
#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64
|
|
@ -0,0 +1,62 @@
|
|||
#include "shared-bindings/board/__init__.h"
|
||||
|
||||
CIRCUITPY_BOARD_BUS_SINGLETON(stemma_i2c, i2c, 1)
|
||||
|
||||
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
||||
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO29) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO29) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO28) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO28) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO27) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO27) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO26) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO26) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO16) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO16) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO17) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO17) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO24) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO24) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO25) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO25) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO6) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO6) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO4) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO4) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO7) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_GPIO7) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_GPIO23) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO22) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_GPIO5) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_GPIO3) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_GPIO2) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_D17), MP_ROM_PTR(&pin_GPIO1) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL_POWER), MP_ROM_PTR(&pin_GPIO1) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO20) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_SDA1), MP_ROM_PTR(&pin_GPIO18) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_SCL1), MP_ROM_PTR(&pin_GPIO19) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_stemma_i2c_obj) },
|
||||
};
|
||||
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* This file is part of the MicroPython project, http://micropython.org/
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2021 Scott Shawcroft for Adafruit Industries
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "supervisor/board.h"
|
||||
|
||||
void board_init(void) {
|
||||
}
|
||||
|
||||
bool board_requests_safe_mode(void) {
|
||||
return false;
|
||||
}
|
||||
|
||||
void reset_board(void) {
|
||||
}
|
||||
|
||||
void board_deinit(void) {
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
#define MICROPY_HW_BOARD_NAME "W5500-EVB-Pico"
|
||||
#define MICROPY_HW_MCU_NAME "rp2040"
|
||||
|
||||
#define DEFAULT_SPI_BUS_SCK (&pin_GPIO18)
|
||||
#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO19)
|
||||
#define DEFAULT_SPI_BUS_MISO (&pin_GPIO16)
|
||||
|
||||
#define DEFAULT_UART_BUS_RX (&pin_GPIO1)
|
||||
#define DEFAULT_UART_BUS_TX (&pin_GPIO0)
|
|
@ -0,0 +1,11 @@
|
|||
USB_VID = 0x2E8A
|
||||
USB_PID = 0x1029
|
||||
USB_PRODUCT = "W5500-EVB-Pico"
|
||||
USB_MANUFACTURER = "WIZnet"
|
||||
|
||||
CHIP_VARIANT = RP2040
|
||||
CHIP_FAMILY = rp2
|
||||
|
||||
EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ"
|
||||
|
||||
CIRCUITPY__EVE = 1
|
|
@ -0,0 +1 @@
|
|||
// Put board-specific pico-sdk definitions here. This file must exist.
|
|
@ -0,0 +1,54 @@
|
|||
#include "shared-bindings/board/__init__.h"
|
||||
|
||||
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
||||
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP0), MP_ROM_PTR(&pin_GPIO0) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP1), MP_ROM_PTR(&pin_GPIO1) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP2), MP_ROM_PTR(&pin_GPIO2) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP3), MP_ROM_PTR(&pin_GPIO3) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP4), MP_ROM_PTR(&pin_GPIO4) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP5), MP_ROM_PTR(&pin_GPIO5) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP6), MP_ROM_PTR(&pin_GPIO6) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP7), MP_ROM_PTR(&pin_GPIO7) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP8), MP_ROM_PTR(&pin_GPIO8) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP9), MP_ROM_PTR(&pin_GPIO9) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP10), MP_ROM_PTR(&pin_GPIO10) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP11), MP_ROM_PTR(&pin_GPIO11) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP12), MP_ROM_PTR(&pin_GPIO12) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP13), MP_ROM_PTR(&pin_GPIO13) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP14), MP_ROM_PTR(&pin_GPIO14) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP15), MP_ROM_PTR(&pin_GPIO15) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP16), MP_ROM_PTR(&pin_GPIO16) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP17), MP_ROM_PTR(&pin_GPIO17) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP18), MP_ROM_PTR(&pin_GPIO18) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP19), MP_ROM_PTR(&pin_GPIO19) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP20), MP_ROM_PTR(&pin_GPIO20) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP21), MP_ROM_PTR(&pin_GPIO21) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP22), MP_ROM_PTR(&pin_GPIO22) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_SMPS_MODE), MP_ROM_PTR(&pin_GPIO23) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP23), MP_ROM_PTR(&pin_GPIO23) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_VBUS_SENSE), MP_ROM_PTR(&pin_GPIO24) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP24), MP_ROM_PTR(&pin_GPIO24) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO25) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP25), MP_ROM_PTR(&pin_GPIO25) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP26_A0), MP_ROM_PTR(&pin_GPIO26) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP26), MP_ROM_PTR(&pin_GPIO26) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP27_A1), MP_ROM_PTR(&pin_GPIO27) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP28_A2), MP_ROM_PTR(&pin_GPIO28) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_GP28), MP_ROM_PTR(&pin_GPIO28) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28) },
|
||||
|
||||
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO29) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_GPIO29) },
|
||||
};
|
||||
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
|
|
@ -37,8 +37,8 @@ INC += -I$(BUILD)
|
|||
|
||||
# compiler settings
|
||||
CWARN = -Wall -Werror
|
||||
CWARN += -Wextra -Wno-unused-parameter -Wpointer-arith -Wdouble-promotion -Wfloat-conversion
|
||||
CFLAGS += $(INC) $(CWARN) -std=gnu99 -DUNIX $(CFLAGS_MOD) $(COPT) -I$(VARIANT_DIR) $(CFLAGS_EXTRA)
|
||||
CWARN += -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -Wpointer-arith -Wdouble-promotion -Wfloat-conversion
|
||||
CFLAGS += $(INC) $(CWARN) -std=gnu11 -DUNIX $(CFLAGS_MOD) $(COPT) -I$(VARIANT_DIR) $(CFLAGS_EXTRA)
|
||||
|
||||
# Debugging/Optimization
|
||||
ifdef DEBUG
|
||||
|
|
26
py/objint.c
26
py/objint.c
|
@ -480,19 +480,33 @@ MP_DEFINE_CONST_FUN_OBJ_1(int_bit_length_obj, int_bit_length);
|
|||
#endif
|
||||
|
||||
// this is a classmethod
|
||||
STATIC mp_obj_t int_from_bytes(size_t n_args, const mp_obj_t *args) {
|
||||
STATIC mp_obj_t int_from_bytes(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
// TODO: Support signed param (assumes signed=False at the moment)
|
||||
(void)n_args;
|
||||
|
||||
enum { ARG_bytes, ARG_byteorder, ARG_signed };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_bytes, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
{ MP_QSTR_byteorder, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
{ MP_QSTR_signed, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} },
|
||||
};
|
||||
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
|
||||
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
||||
|
||||
if (args[ARG_signed].u_bool) {
|
||||
mp_raise_NotImplementedError_varg(MP_ERROR_TEXT("%q=%q"), MP_QSTR_signed, MP_QSTR_True);
|
||||
}
|
||||
|
||||
// get the buffer info
|
||||
mp_buffer_info_t bufinfo;
|
||||
mp_get_buffer_raise(args[1], &bufinfo, MP_BUFFER_READ);
|
||||
mp_get_buffer_raise(args[ARG_bytes].u_obj, &bufinfo, MP_BUFFER_READ);
|
||||
|
||||
const byte *buf = (const byte *)bufinfo.buf;
|
||||
int delta = 1;
|
||||
if (args[2] == MP_OBJ_NEW_QSTR(MP_QSTR_little)) {
|
||||
if (args[ARG_byteorder].u_obj == MP_OBJ_NEW_QSTR(MP_QSTR_little)) {
|
||||
buf += bufinfo.len - 1;
|
||||
delta = -1;
|
||||
} else if (args[ARG_byteorder].u_obj != MP_OBJ_NEW_QSTR(MP_QSTR_big)) {
|
||||
mp_arg_error_invalid(MP_QSTR_byteorder);
|
||||
}
|
||||
|
||||
mp_uint_t value = 0;
|
||||
|
@ -501,7 +515,7 @@ STATIC mp_obj_t int_from_bytes(size_t n_args, const mp_obj_t *args) {
|
|||
#if MICROPY_LONGINT_IMPL != MICROPY_LONGINT_IMPL_NONE
|
||||
if (value > (MP_SMALL_INT_MAX >> 8)) {
|
||||
// Result will overflow a small-int so construct a big-int
|
||||
return mp_obj_int_from_bytes_impl(args[2] != MP_OBJ_NEW_QSTR(MP_QSTR_little), bufinfo.len, bufinfo.buf);
|
||||
return mp_obj_int_from_bytes_impl(args[ARG_byteorder].u_obj != MP_OBJ_NEW_QSTR(MP_QSTR_little), bufinfo.len, bufinfo.buf);
|
||||
}
|
||||
#endif
|
||||
value = (value << 8) | *buf;
|
||||
|
@ -509,7 +523,7 @@ STATIC mp_obj_t int_from_bytes(size_t n_args, const mp_obj_t *args) {
|
|||
return mp_obj_new_int_from_uint(value);
|
||||
}
|
||||
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(int_from_bytes_fun_obj, 3, 4, int_from_bytes);
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(int_from_bytes_fun_obj, 3, int_from_bytes);
|
||||
STATIC MP_DEFINE_CONST_CLASSMETHOD_OBJ(int_from_bytes_obj, MP_ROM_PTR(&int_from_bytes_fun_obj));
|
||||
|
||||
STATIC mp_obj_t int_to_bytes(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
|
||||
|
|
|
@ -373,38 +373,40 @@ static bool _endswith(const char *str, const char *suffix) {
|
|||
return strcmp(str + (strlen(str) - strlen(suffix)), suffix) == 0;
|
||||
}
|
||||
|
||||
const char *ok_hosts[] = {"code.circuitpython.org"};
|
||||
const char *ok_hosts[] = {
|
||||
"code.circuitpython.org",
|
||||
"127.0.0.1",
|
||||
"localhost",
|
||||
};
|
||||
|
||||
static bool _origin_ok(const char *origin) {
|
||||
const char *http = "http://";
|
||||
const char *local = ".local";
|
||||
|
||||
if (memcmp(origin, http, strlen(http)) != 0) {
|
||||
// note: redirected requests send an Origin of "null" and will be caught by this
|
||||
if (strncmp(origin, http, strlen(http)) != 0) {
|
||||
return false;
|
||||
}
|
||||
// These are prefix checks up to : so that any port works.
|
||||
const char *hostname = common_hal_mdns_server_get_hostname(&mdns);
|
||||
const char *end = origin + strlen(http) + strlen(hostname) + strlen(local);
|
||||
if (memcmp(origin + strlen(http), hostname, strlen(hostname)) == 0 &&
|
||||
memcmp(origin + strlen(http) + strlen(hostname), local, strlen(local)) == 0 &&
|
||||
if (strncmp(origin + strlen(http), hostname, strlen(hostname)) == 0 &&
|
||||
strncmp(origin + strlen(http) + strlen(hostname), local, strlen(local)) == 0 &&
|
||||
(end[0] == '\0' || end[0] == ':')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
end = origin + strlen(http) + strlen(_our_ip_encoded);
|
||||
if (memcmp(origin + strlen(http), _our_ip_encoded, strlen(_our_ip_encoded)) == 0 &&
|
||||
if (strncmp(origin + strlen(http), _our_ip_encoded, strlen(_our_ip_encoded)) == 0 &&
|
||||
(end[0] == '\0' || end[0] == ':')) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const char *localhost = "127.0.0.1:";
|
||||
if (memcmp(origin + strlen(http), localhost, strlen(localhost)) == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < MP_ARRAY_SIZE(ok_hosts); i++) {
|
||||
// This checks exactly.
|
||||
if (strcmp(origin + strlen(http), ok_hosts[i]) == 0) {
|
||||
// Allows any port
|
||||
end = origin + strlen(http) + strlen(ok_hosts[i]);
|
||||
if (strncmp(origin + strlen(http), ok_hosts[i], strlen(ok_hosts[i])) == 0
|
||||
&& (end[0] == '\0' || end[0] == ':')) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -939,8 +941,11 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
|
|||
} else if (strlen(request->origin) > 0 && !_origin_ok(request->origin)) {
|
||||
ESP_LOGE(TAG, "bad origin %s", request->origin);
|
||||
_reply_forbidden(socket, request);
|
||||
} else if (memcmp(request->path, "/fs/", 4) == 0) {
|
||||
if (!request->authenticated) {
|
||||
} else if (strncmp(request->path, "/fs/", 4) == 0) {
|
||||
if (strcasecmp(request->method, "OPTIONS") == 0) {
|
||||
// OPTIONS is sent for CORS preflight, unauthenticated
|
||||
_reply_access_control(socket, request);
|
||||
} else if (!request->authenticated) {
|
||||
if (_api_password[0] != '\0') {
|
||||
_reply_unauthorized(socket, request);
|
||||
} else {
|
||||
|
@ -961,9 +966,7 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
|
|||
}
|
||||
// Delete is almost identical for files and directories so share the
|
||||
// implementation.
|
||||
if (strcmp(request->method, "OPTIONS") == 0) {
|
||||
_reply_access_control(socket, request);
|
||||
} else if (strcmp(request->method, "DELETE") == 0) {
|
||||
if (strcasecmp(request->method, "DELETE") == 0) {
|
||||
if (_usb_active()) {
|
||||
_reply_conflict(socket, request);
|
||||
return false;
|
||||
|
@ -993,7 +996,7 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
|
|||
return true;
|
||||
}
|
||||
} else if (directory) {
|
||||
if (strcmp(request->method, "GET") == 0) {
|
||||
if (strcasecmp(request->method, "GET") == 0) {
|
||||
FF_DIR dir;
|
||||
FRESULT res = f_opendir(fs, &dir, path);
|
||||
// Put the / back for replies.
|
||||
|
@ -1013,7 +1016,7 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
|
|||
}
|
||||
|
||||
f_closedir(&dir);
|
||||
} else if (strcmp(request->method, "PUT") == 0) {
|
||||
} else if (strcasecmp(request->method, "PUT") == 0) {
|
||||
if (_usb_active()) {
|
||||
_reply_conflict(socket, request);
|
||||
return false;
|
||||
|
@ -1042,7 +1045,7 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
|
|||
}
|
||||
}
|
||||
} else { // Dealing with a file.
|
||||
if (strcmp(request->method, "GET") == 0) {
|
||||
if (strcasecmp(request->method, "GET") == 0) {
|
||||
FIL active_file;
|
||||
FRESULT result = f_open(fs, &active_file, path, FA_READ);
|
||||
|
||||
|
@ -1053,15 +1056,18 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
|
|||
}
|
||||
|
||||
f_close(&active_file);
|
||||
} else if (strcmp(request->method, "PUT") == 0) {
|
||||
} else if (strcasecmp(request->method, "PUT") == 0) {
|
||||
_write_file_and_reply(socket, request, fs, path);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (memcmp(request->path, "/cp/", 4) == 0) {
|
||||
} else if (strncmp(request->path, "/cp/", 4) == 0) {
|
||||
const char *path = request->path + 3;
|
||||
if (strcmp(request->method, "GET") != 0) {
|
||||
if (strcasecmp(request->method, "OPTIONS") == 0) {
|
||||
// handle preflight requests to /cp/
|
||||
_reply_access_control(socket, request);
|
||||
} else if (strcasecmp(request->method, "GET") != 0) {
|
||||
_reply_method_not_allowed(socket, request);
|
||||
} else if (strcmp(path, "/devices.json") == 0) {
|
||||
_reply_with_devices_json(socket, request);
|
||||
|
@ -1082,7 +1088,7 @@ static bool _reply(socketpool_socket_obj_t *socket, _request *request) {
|
|||
} else {
|
||||
_reply_missing(socket, request);
|
||||
}
|
||||
} else if (strcmp(request->method, "GET") != 0) {
|
||||
} else if (strcasecmp(request->method, "GET") != 0) {
|
||||
_reply_method_not_allowed(socket, request);
|
||||
} else {
|
||||
if (strcmp(request->path, "/") == 0) {
|
||||
|
@ -1199,29 +1205,29 @@ static void _process_request(socketpool_socket_obj_t *socket, _request *request)
|
|||
request->header_value[request->offset - 1] = '\0';
|
||||
request->offset = 0;
|
||||
request->state = STATE_HEADER_KEY;
|
||||
if (strcmp(request->header_key, "Authorization") == 0) {
|
||||
if (strcasecmp(request->header_key, "Authorization") == 0) {
|
||||
const char *prefix = "Basic ";
|
||||
request->authenticated = memcmp(request->header_value, prefix, strlen(prefix)) == 0 &&
|
||||
request->authenticated = strncmp(request->header_value, prefix, strlen(prefix)) == 0 &&
|
||||
strcmp(_api_password, request->header_value + strlen(prefix)) == 0;
|
||||
} else if (strcmp(request->header_key, "Host") == 0) {
|
||||
} else if (strcasecmp(request->header_key, "Host") == 0) {
|
||||
// Do a prefix check so that port is ignored.
|
||||
const char *cp_local = "circuitpython.local";
|
||||
request->redirect = memcmp(request->header_value, cp_local, strlen(cp_local)) == 0;
|
||||
} else if (strcmp(request->header_key, "Content-Length") == 0) {
|
||||
request->redirect = strncmp(request->header_value, cp_local, strlen(cp_local)) == 0;
|
||||
} else if (strcasecmp(request->header_key, "Content-Length") == 0) {
|
||||
request->content_length = strtoul(request->header_value, NULL, 10);
|
||||
} else if (strcmp(request->header_key, "Expect") == 0) {
|
||||
} else if (strcasecmp(request->header_key, "Expect") == 0) {
|
||||
request->expect = strcmp(request->header_value, "100-continue") == 0;
|
||||
} else if (strcmp(request->header_key, "Accept") == 0) {
|
||||
request->json = strcmp(request->header_value, "application/json") == 0;
|
||||
} else if (strcmp(request->header_key, "Origin") == 0) {
|
||||
} else if (strcasecmp(request->header_key, "Accept") == 0) {
|
||||
request->json = strcasecmp(request->header_value, "application/json") == 0;
|
||||
} else if (strcasecmp(request->header_key, "Origin") == 0) {
|
||||
strcpy(request->origin, request->header_value);
|
||||
} else if (strcmp(request->header_key, "X-Timestamp") == 0) {
|
||||
} else if (strcasecmp(request->header_key, "X-Timestamp") == 0) {
|
||||
request->timestamp_ms = strtoull(request->header_value, NULL, 10);
|
||||
} else if (strcmp(request->header_key, "Upgrade") == 0) {
|
||||
} else if (strcasecmp(request->header_key, "Upgrade") == 0) {
|
||||
request->websocket = strcmp(request->header_value, "websocket") == 0;
|
||||
} else if (strcmp(request->header_key, "Sec-WebSocket-Version") == 0) {
|
||||
} else if (strcasecmp(request->header_key, "Sec-WebSocket-Version") == 0) {
|
||||
request->websocket_version = strtoul(request->header_value, NULL, 10);
|
||||
} else if (strcmp(request->header_key, "Sec-WebSocket-Key") == 0 &&
|
||||
} else if (strcasecmp(request->header_key, "Sec-WebSocket-Key") == 0 &&
|
||||
strlen(request->header_value) == 24) {
|
||||
strcpy(request->websocket_key, request->header_value);
|
||||
}
|
||||
|
|
|
@ -77,6 +77,7 @@ extension_by_board = {
|
|||
"adafruit_qtpy_esp32c3": BIN,
|
||||
"ai_thinker_esp32-c3s": BIN,
|
||||
"ai_thinker_esp32-c3s-2m": BIN,
|
||||
"beetle-esp32-c3": BIN,
|
||||
"espressif_esp32c3_devkitm_1_n4": BIN,
|
||||
"lilygo_ttgo_t-01c3": BIN,
|
||||
"lolin_c3_mini": BIN,
|
||||
|
|
Loading…
Reference in New Issue