From 8ae103e07ce2332918340463f419f7aad6528c55 Mon Sep 17 00:00:00 2001 From: Dale Hawkins Date: Mon, 16 Mar 2020 09:07:10 -0600 Subject: [PATCH 01/73] Fix documentation typo: tm_minute should be tm_min --- shared-bindings/time/__init__.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-bindings/time/__init__.c b/shared-bindings/time/__init__.c index 8d7f2f3fd2..aa2f4fc6a5 100644 --- a/shared-bindings/time/__init__.c +++ b/shared-bindings/time/__init__.c @@ -107,7 +107,7 @@ mp_obj_t struct_time_make_new(const mp_obj_type_t *type, size_t n_args, const mp //| * ``tm_month``: the month, range [1, 12] //| * ``tm_mday``: the day of the month, range [1, 31] //| * ``tm_hour``: the hour, range [0, 23] -//| * ``tm_minute``: the minute, range [0, 59] +//| * ``tm_min``: the minute, range [0, 59] //| * ``tm_sec``: the second, range [0, 61] //| * ``tm_wday``: the day of the week, range [0, 6], Monday is 0 //| * ``tm_yday``: the day of the year, range [1, 366], -1 indicates not known From f572b723060382bbc9ca7a3edc88cb7c30fdcc30 Mon Sep 17 00:00:00 2001 From: AndrewR-L <59139513+AndrewR-L@users.noreply.github.com> Date: Fri, 17 Apr 2020 15:10:36 +0100 Subject: [PATCH 02/73] busio/UART: Correct and clarify readline() return. Surely readline() "rtype" is string not int as stated (and not bytes as some might expect). Also it is not totally unambiguous what happens on a timeout so it would help to clarify in docs that on a timeout it does NOT return with what it has read so far, rather it leaves all that in the buffer ready for a future read and returns nothing. Likewise clarify that if timeout=0 but there is no newline it DOES return what it has read so far (NOT None). At least this is what I think it does and/or is supposed to do! Python docs are generally not too explicit about what is the proper treatment, so perhaps all the more reason to clarify the interpretation adopted? --- shared-bindings/busio/UART.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/shared-bindings/busio/UART.c b/shared-bindings/busio/UART.c index 02c5afb16e..e4a6b93d9d 100644 --- a/shared-bindings/busio/UART.c +++ b/shared-bindings/busio/UART.c @@ -201,13 +201,15 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(busio_uart___exit___obj, 4, 4, busio_ //| :rtype: int or None (on a non-blocking error) //| //| *New in CircuitPython 4.0:* No length parameter is permitted. - +//| //| .. method:: readline() //| -//| Read a line, ending in a newline character. +//| Read a line, ending in a newline character, or +//| return None if a timeout occurs sooner, or +//| return everything readable if no newline is found and timeout=0 //| //| :return: the line read -//| :rtype: int or None +//| :rtype: str or None //| //| .. method:: write(buf) //| From 87e4f47866853c938a5a624c5a1a416a831692c8 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Mon, 29 Jun 2020 00:17:12 -0500 Subject: [PATCH 03/73] docs/shared_bindings_matrix.py: changes to allow usage in 'tools/build_board_info.py'; includes root dir finder, and output board name option. --- docs/shared_bindings_matrix.py | 49 +++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index 02ef683492..c0d07d4b41 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -23,6 +23,7 @@ import json import os +import pathlib import re import subprocess import sys @@ -30,17 +31,39 @@ import sys SUPPORTED_PORTS = ['atmel-samd', 'esp32s2', 'litex', 'mimxrt10xx', 'nrf', 'stm'] +def get_circuitpython_root_dir(): + """ The path to the root './circuitpython' directory + """ + cwd = pathlib.Path('.').resolve() + cwd_parts = cwd.parts + + root_idx = len(cwd_parts) + + # Search the path from tail to head, so that we capture the + # deepest folder. This avoids overshooting in instances like: + # '/home/user/circuitpython_v5/circuitpython' + for idx, val in enumerate(cwd_parts[::-1]): + if val.startswith("circuitpython"): + root_idx = root_idx - idx + break + + root_dir = '/'.join(cwd_parts[:root_idx]) + + return pathlib.Path(root_dir).resolve() + def get_shared_bindings(): """ Get a list of modules in shared-bindings based on folder names """ - return [item for item in os.listdir("./shared-bindings")] + shared_bindings_dir = get_circuitpython_root_dir() / "shared-bindings" + return [item.name for item in shared_bindings_dir.iterdir()] def read_mpconfig(): """ Open 'circuitpy_mpconfig.mk' and return the contents. """ configs = [] - with open("py/circuitpy_mpconfig.mk") as mpconfig: + cpy_mpcfg = get_circuitpython_root_dir() / "py" / "circuitpy_mpconfig.mk" + with open(cpy_mpcfg) as mpconfig: configs = mpconfig.read() return configs @@ -120,7 +143,7 @@ def lookup_setting(settings, key, default=''): key = value[2:-1] return value -def support_matrix_by_board(): +def support_matrix_by_board(use_branded_name=True): """ Compiles a list of the available core modules available for each board. """ @@ -129,20 +152,22 @@ def support_matrix_by_board(): boards = dict() for port in SUPPORTED_PORTS: - port_dir = "ports/{}/boards".format(port) - for entry in os.scandir(port_dir): + port_dir = get_circuitpython_root_dir() / "ports" / port + for entry in (port_dir / "boards").iterdir(): if not entry.is_dir(): continue board_modules = [] + board_name = entry.name - settings = get_settings_from_makefile(f'ports/{port}', entry.name) + settings = get_settings_from_makefile(str(port_dir), entry.name) - with open(os.path.join(entry.path, "mpconfigboard.h")) as get_name: - board_contents = get_name.read() - board_name_re = re.search("(?<=MICROPY_HW_BOARD_NAME)\s+(.+)", - board_contents) - if board_name_re: - board_name = board_name_re.group(1).strip('"') + if use_branded_name: + with open(os.path.join(entry.path, "mpconfigboard.h")) as get_name: + board_contents = get_name.read() + board_name_re = re.search(r"(?<=MICROPY_HW_BOARD_NAME)\s+(.+)", + board_contents) + if board_name_re: + board_name = board_name_re.group(1).strip('"') board_modules = [] for module in base: From 928433f2e3d16ac04032f495fa4a83fd4a296ca3 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Mon, 29 Jun 2020 00:27:45 -0500 Subject: [PATCH 04/73] tools/build_board_info.py: add built-in modules information for each board for use on circuitpython.org; uses 'docs/shared_bindings_matrix.py' --- tools/build_board_info.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/build_board_info.py b/tools/build_board_info.py index 6c670930f4..20a5866b7f 100644 --- a/tools/build_board_info.py +++ b/tools/build_board_info.py @@ -9,6 +9,9 @@ import base64 from datetime import date from sh.contrib import git +sys.path.append("../docs") +import shared_bindings_matrix + sys.path.append("adabot") import adabot.github_requests as github @@ -246,6 +249,10 @@ def generate_download_info(): languages = get_languages() + support_matrix = shared_bindings_matrix.support_matrix_by_board( + use_branded_name=False + ) + new_stable = "-" not in new_tag previous_releases = set() @@ -283,6 +290,7 @@ def generate_download_info(): new_version = { "stable": new_stable, "version": new_tag, + "modules": support_matrix.get(alias, "[]"), "files": {} } for language in languages: From d911dc98d9a9acd76a337232933ee0776370a66c Mon Sep 17 00:00:00 2001 From: sommersoft Date: Mon, 29 Jun 2020 01:09:04 -0500 Subject: [PATCH 05/73] docs/shared_binding_matrix.py: fix usage with the branded name (building docs) --- docs/shared_bindings_matrix.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index c0d07d4b41..12a7b7eb86 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -162,7 +162,7 @@ def support_matrix_by_board(use_branded_name=True): settings = get_settings_from_makefile(str(port_dir), entry.name) if use_branded_name: - with open(os.path.join(entry.path, "mpconfigboard.h")) as get_name: + with open(entry / "mpconfigboard.h") as get_name: board_contents = get_name.read() board_name_re = re.search(r"(?<=MICROPY_HW_BOARD_NAME)\s+(.+)", board_contents) From c84c30846cded89bfef889ae3bd92f9102fab816 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Mon, 29 Jun 2020 09:02:04 -0500 Subject: [PATCH 06/73] docs/shared_bindings_matrix.py: use '__file__' to ascertain root dir --- docs/shared_bindings_matrix.py | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index 12a7b7eb86..4abf5b8859 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -34,22 +34,10 @@ SUPPORTED_PORTS = ['atmel-samd', 'esp32s2', 'litex', 'mimxrt10xx', 'nrf', 'stm'] def get_circuitpython_root_dir(): """ The path to the root './circuitpython' directory """ - cwd = pathlib.Path('.').resolve() - cwd_parts = cwd.parts + file_path = pathlib.Path(__file__).resolve() + root_dir = file_path.parent.parent - root_idx = len(cwd_parts) - - # Search the path from tail to head, so that we capture the - # deepest folder. This avoids overshooting in instances like: - # '/home/user/circuitpython_v5/circuitpython' - for idx, val in enumerate(cwd_parts[::-1]): - if val.startswith("circuitpython"): - root_idx = root_idx - idx - break - - root_dir = '/'.join(cwd_parts[:root_idx]) - - return pathlib.Path(root_dir).resolve() + return root_dir def get_shared_bindings(): """ Get a list of modules in shared-bindings based on folder names From d4e28dd23393a0129b9faae65a3ff91bff91af11 Mon Sep 17 00:00:00 2001 From: ansonhe97 Date: Wed, 1 Jul 2020 17:06:26 +0800 Subject: [PATCH 07/73] ADD: added more special pins on Wio Terminal --- .../boards/seeeduino_wio_terminal/pins.c | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c b/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c index 8c6260ce2c..92cc8f8be1 100644 --- a/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c +++ b/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c @@ -44,6 +44,27 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { // LED pins { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PA15) }, // status + // LCD Display + { MP_OBJ_NEW_QSTR(MP_QSTR_TFT_MISO), MP_ROM_PTR(&pin_PB18) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_TFT_MOSI), MP_ROM_PTR(&pin_PB19) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_TFT_SCK), MP_ROM_PTR(&pin_PB20) }, + { MP_ROM_QSTR(MP_QSTR_TFT_SS), MP_ROM_PTR(&pin_PB21) }, + { MP_ROM_QSTR(MP_QSTR_TFT_DC), MP_ROM_PTR(&pin_PC06) }, + { MP_ROM_QSTR(MP_QSTR_TFT_BACKLIGHT), MP_ROM_PTR(&pin_PC05) }, + + // Special named pins + { MP_OBJ_NEW_QSTR(MP_QSTR_SWITCH_UP), MP_ROM_PTR(&pin_PD20) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SWITCH_LEFT), MP_ROM_PTR(&pin_PD12) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SWITCH_RIGHT), MP_ROM_PTR(&pin_PD09) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SWITCH_DOWN), MP_ROM_PTR(&pin_PD08) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SWITCH_PRESS), MP_ROM_PTR(&pin_PD10) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_BUTTON_1), MP_ROM_PTR(&pin_PC26) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_BUTTON_2), MP_ROM_PTR(&pin_PC27) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_BUTTON_3), MP_ROM_PTR(&pin_PC28) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_LIGHT), MP_ROM_PTR(&pin_PD01) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_BUZZER), MP_ROM_PTR(&pin_PD11) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IR), MP_ROM_PTR(&pin_PB31) }, + // Comm objects { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, From 87d58b3b0a7b9d1c67e3234680a14a18ca55189c Mon Sep 17 00:00:00 2001 From: Lucian Copeland Date: Wed, 1 Jul 2020 17:48:10 -0400 Subject: [PATCH 08/73] STM32: add debug flags, fix hang in simplex SPI --- ports/stm/Makefile | 4 ++-- ports/stm/common-hal/busio/SPI.c | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ports/stm/Makefile b/ports/stm/Makefile index 08cb36ddf2..a982de765b 100755 --- a/ports/stm/Makefile +++ b/ports/stm/Makefile @@ -81,12 +81,12 @@ INC += -I../../supervisor/shared/usb #Debugging/Optimization ifeq ($(DEBUG), 1) - CFLAGS += -ggdb + CFLAGS += -ggdb3 # You may want to enable these flags to make setting breakpoints easier. CFLAGS += -fno-inline -fno-ipa-sra else CFLAGS += -Os -DNDEBUG - CFLAGS += -ggdb + CFLAGS += -ggdb3 # TODO: Test with -flto # CFLAGS += -flto endif diff --git a/ports/stm/common-hal/busio/SPI.c b/ports/stm/common-hal/busio/SPI.c index 65eeb8ebcf..380302da65 100644 --- a/ports/stm/common-hal/busio/SPI.c +++ b/ports/stm/common-hal/busio/SPI.c @@ -238,8 +238,11 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, self->handle.Instance = SPIx; self->handle.Init.Mode = SPI_MODE_MASTER; - // Direction change only required for RX-only, see RefMan RM0090:884 - self->handle.Init.Direction = (self->mosi == NULL) ? SPI_DIRECTION_2LINES_RXONLY : SPI_DIRECTION_2LINES; + // Implementing one-directional recieve-only SPI as per [RefMan RM0090:884] + // results in BSY bit related hangs. Using MOSI as an IO works fine without it, + // so it's unclear why this mode is present in the first place. + //self->handle.Init.Direction = (self->mosi == NULL) ? SPI_DIRECTION_2LINES_RXONLY : SPI_DIRECTION_2LINES; + self->handle.Init.Direction = SPI_DIRECTION_2LINES; self->handle.Init.DataSize = SPI_DATASIZE_8BIT; self->handle.Init.CLKPolarity = SPI_POLARITY_LOW; self->handle.Init.CLKPhase = SPI_PHASE_1EDGE; From f4a24744477abe0d924ef08781d6e30118cc9982 Mon Sep 17 00:00:00 2001 From: Kamil Tomaszewski Date: Thu, 2 Jul 2020 15:24:59 +0200 Subject: [PATCH 09/73] spresense: Add support for sdioio --- ports/cxd56/boards/spresense/pins.c | 16 +++ ports/cxd56/common-hal/microcontroller/Pin.c | 6 + ports/cxd56/common-hal/microcontroller/Pin.h | 6 + ports/cxd56/common-hal/sdioio/SDCard.c | 141 +++++++++++++++++++ ports/cxd56/common-hal/sdioio/SDCard.h | 47 +++++++ ports/cxd56/common-hal/sdioio/__init__.c | 0 ports/cxd56/mpconfigport.mk | 3 + 7 files changed, 219 insertions(+) create mode 100644 ports/cxd56/common-hal/sdioio/SDCard.c create mode 100644 ports/cxd56/common-hal/sdioio/SDCard.h create mode 100644 ports/cxd56/common-hal/sdioio/__init__.c diff --git a/ports/cxd56/boards/spresense/pins.c b/ports/cxd56/boards/spresense/pins.c index fcc854590a..5028d91556 100644 --- a/ports/cxd56/boards/spresense/pins.c +++ b/ports/cxd56/boards/spresense/pins.c @@ -24,8 +24,21 @@ * THE SOFTWARE. */ +#include "py/objtuple.h" + #include "shared-bindings/board/__init__.h" +STATIC const mp_rom_obj_tuple_t sdio_data_tuple = { + {&mp_type_tuple}, + 4, + { + MP_ROM_PTR(&pin_SDIO_DATA0), + MP_ROM_PTR(&pin_SDIO_DATA1), + MP_ROM_PTR(&pin_SDIO_DATA2), + MP_ROM_PTR(&pin_SDIO_DATA3), + } +}; + STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_UART2_RXD) }, { MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_UART2_TXD) }, @@ -76,5 +89,8 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { 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_SDIO_CLOCK), MP_ROM_PTR(&pin_SDIO_CLK) }, + { MP_ROM_QSTR(MP_QSTR_SDIO_COMMAND), MP_ROM_PTR(&pin_SDIO_CMD) }, + { MP_ROM_QSTR(MP_QSTR_SDIO_DATA), MP_ROM_PTR(&sdio_data_tuple) }, }; MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/cxd56/common-hal/microcontroller/Pin.c b/ports/cxd56/common-hal/microcontroller/Pin.c index 23377197c2..7aba1ad54b 100644 --- a/ports/cxd56/common-hal/microcontroller/Pin.c +++ b/ports/cxd56/common-hal/microcontroller/Pin.c @@ -72,6 +72,12 @@ const mcu_pin_obj_t pin_I2S1_BCK = PIN(PIN_I2S1_BCK, false); const mcu_pin_obj_t pin_I2S1_LRCK = PIN(PIN_I2S1_LRCK, false); const mcu_pin_obj_t pin_I2S1_DATA_IN = PIN(PIN_I2S1_DATA_IN, false); const mcu_pin_obj_t pin_I2S1_DATA_OUT = PIN(PIN_I2S1_DATA_OUT, false); +const mcu_pin_obj_t pin_SDIO_CLK = PIN(PIN_SDIO_CLK, false); +const mcu_pin_obj_t pin_SDIO_CMD = PIN(PIN_SDIO_CMD, false); +const mcu_pin_obj_t pin_SDIO_DATA0 = PIN(PIN_SDIO_DATA0, false); +const mcu_pin_obj_t pin_SDIO_DATA1 = PIN(PIN_SDIO_DATA1, false); +const mcu_pin_obj_t pin_SDIO_DATA2 = PIN(PIN_SDIO_DATA2, false); +const mcu_pin_obj_t pin_SDIO_DATA3 = PIN(PIN_SDIO_DATA3, false); const mcu_pin_obj_t pin_LPADC0 = PIN(0, true); const mcu_pin_obj_t pin_LPADC1 = PIN(1, true); const mcu_pin_obj_t pin_LPADC2 = PIN(2, true); diff --git a/ports/cxd56/common-hal/microcontroller/Pin.h b/ports/cxd56/common-hal/microcontroller/Pin.h index fe6524edb5..6759a2dcab 100644 --- a/ports/cxd56/common-hal/microcontroller/Pin.h +++ b/ports/cxd56/common-hal/microcontroller/Pin.h @@ -77,6 +77,12 @@ extern const mcu_pin_obj_t pin_I2S1_BCK; extern const mcu_pin_obj_t pin_I2S1_LRCK; extern const mcu_pin_obj_t pin_I2S1_DATA_IN; extern const mcu_pin_obj_t pin_I2S1_DATA_OUT; +extern const mcu_pin_obj_t pin_SDIO_CLK; +extern const mcu_pin_obj_t pin_SDIO_CMD; +extern const mcu_pin_obj_t pin_SDIO_DATA0; +extern const mcu_pin_obj_t pin_SDIO_DATA1; +extern const mcu_pin_obj_t pin_SDIO_DATA2; +extern const mcu_pin_obj_t pin_SDIO_DATA3; extern const mcu_pin_obj_t pin_LPADC0; extern const mcu_pin_obj_t pin_LPADC1; extern const mcu_pin_obj_t pin_LPADC2; diff --git a/ports/cxd56/common-hal/sdioio/SDCard.c b/ports/cxd56/common-hal/sdioio/SDCard.c new file mode 100644 index 0000000000..cf7de422c1 --- /dev/null +++ b/ports/cxd56/common-hal/sdioio/SDCard.c @@ -0,0 +1,141 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright 2020 Sony Semiconductor Solutions Corporation + * + * 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 +#include +#include + +#include "py/mperrno.h" +#include "py/runtime.h" + +#include "shared-bindings/sdioio/SDCard.h" +#include "shared-bindings/util.h" + +#define DATA_PINS_NUM 4 + +void common_hal_sdioio_sdcard_construct(sdioio_sdcard_obj_t *self, + const mcu_pin_obj_t *clock, const mcu_pin_obj_t *command, + uint8_t num_data, mcu_pin_obj_t **data, uint32_t frequency) { + struct geometry geo; + + if (clock->number != PIN_SDIO_CLK || command->number != PIN_SDIO_CMD) { + mp_raise_ValueError(translate("Invalid pins")); + } + + uint8_t data_pins_num = 0; + for (uint8_t i = 0; i < DATA_PINS_NUM; i++) { + if (data[i]->number != PIN_SDIO_DATA0 || data[i]->number != PIN_SDIO_DATA1 || + data[i]->number != PIN_SDIO_DATA2 || data[i]->number != PIN_SDIO_DATA3) { + data_pins_num++; + } + } + + if (data_pins_num != DATA_PINS_NUM) { + mp_raise_ValueError(translate("Invalid pins")); + } + + if (open_blockdriver("/dev/mmcsd0", 0, &self->inode) < 0) { + mp_raise_ValueError(translate("Could not initialize SDCard")); + } + + self->inode->u.i_bops->geometry(self->inode, &geo); + + claim_pin(clock); + claim_pin(command); + self->clock_pin = clock; + self->command_pin = command; + for (uint8_t i = 0; i < DATA_PINS_NUM; i++) { + claim_pin(data[i]); + self->data_pins[i] = data[i]; + } + + self->count = geo.geo_nsectors; + self->frequency = frequency; + self->width = num_data; +} + +void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self) { + close_blockdriver(self->inode); + self->inode = NULL; + + reset_pin_number(self->clock_pin->number); + reset_pin_number(self->command_pin->number); + for (uint8_t i = 0; i < DATA_PINS_NUM; i++) { + reset_pin_number(self->data_pins[i]->number); + } +} + +bool common_hal_sdioio_sdcard_deinited(sdioio_sdcard_obj_t *self) { + return self->inode == NULL; +} + +bool common_hal_sdioio_sdcard_configure(sdioio_sdcard_obj_t *self, uint32_t baudrate, uint8_t width) { + return true; +} + +uint32_t common_hal_sdioio_sdcard_get_frequency(sdioio_sdcard_obj_t* self) { + return self->frequency; +} + +uint8_t common_hal_sdioio_sdcard_get_width(sdioio_sdcard_obj_t* self) { + return self->width; +} + +uint32_t common_hal_sdioio_sdcard_get_count(sdioio_sdcard_obj_t* self) { + return self->count; +} + +STATIC void check_whole_block(mp_buffer_info_t *bufinfo) { + if (bufinfo->len % 512) { + mp_raise_ValueError(translate("Buffer length must be a multiple of 512")); + } +} + +int common_hal_sdioio_sdcard_readblocks(sdioio_sdcard_obj_t* self, uint32_t start_block, mp_buffer_info_t *bufinfo) { + if (common_hal_sdioio_sdcard_deinited(self)) { + raise_deinited_error(); + } + check_whole_block(bufinfo); + + return self->inode->u.i_bops->read(self->inode, bufinfo->buf, start_block, bufinfo->len / 512); +} + +int common_hal_sdioio_sdcard_writeblocks(sdioio_sdcard_obj_t* self, uint32_t start_block, mp_buffer_info_t *bufinfo) { + if (common_hal_sdioio_sdcard_deinited(self)) { + raise_deinited_error(); + } + check_whole_block(bufinfo); + + return self->inode->u.i_bops->write(self->inode, bufinfo->buf, start_block, bufinfo->len / 512);; +} + +void common_hal_sdioio_sdcard_never_reset(sdioio_sdcard_obj_t *self) { + never_reset_pin_number(self->clock_pin->number); + never_reset_pin_number(self->command_pin->number); + for (uint8_t i = 0; i < DATA_PINS_NUM; i++) { + never_reset_pin_number(self->data_pins[i]->number); + } +} diff --git a/ports/cxd56/common-hal/sdioio/SDCard.h b/ports/cxd56/common-hal/sdioio/SDCard.h new file mode 100644 index 0000000000..cbdcd47069 --- /dev/null +++ b/ports/cxd56/common-hal/sdioio/SDCard.h @@ -0,0 +1,47 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright 2020 Sony Semiconductor Solutions Corporation + * + * 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_CXD56_SDIOIO_SDCARD_H +#define MICROPY_INCLUDED_CXD56_SDIOIO_SDCARD_H + +#include + +#include "py/obj.h" + +#include "common-hal/microcontroller/Pin.h" + +typedef struct { + mp_obj_base_t base; + struct inode* inode; + uint32_t frequency; + uint32_t count; + uint8_t width; + const mcu_pin_obj_t *command_pin; + const mcu_pin_obj_t *clock_pin; + const mcu_pin_obj_t *data_pins[4]; +} sdioio_sdcard_obj_t; + +#endif // MICROPY_INCLUDED_CXD56_SDIOIO_SDCARD_H diff --git a/ports/cxd56/common-hal/sdioio/__init__.c b/ports/cxd56/common-hal/sdioio/__init__.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ports/cxd56/mpconfigport.mk b/ports/cxd56/mpconfigport.mk index 23f60f8a7f..eb077c07bd 100644 --- a/ports/cxd56/mpconfigport.mk +++ b/ports/cxd56/mpconfigport.mk @@ -7,6 +7,8 @@ USB_CDC_EP_NUM_DATA_IN = 1 USB_MSC_EP_NUM_OUT = 5 USB_MSC_EP_NUM_IN = 4 +MPY_TOOL_LONGINT_IMPL = -mlongint-impl=mpz + CIRCUITPY_AUDIOBUSIO = 0 CIRCUITPY_AUDIOIO = 0 CIRCUITPY_COUNTIO = 0 @@ -18,6 +20,7 @@ CIRCUITPY_I2CPERIPHERAL = 0 CIRCUITPY_NEOPIXEL_WRITE = 0 CIRCUITPY_NVM = 0 CIRCUITPY_ROTARYIO = 0 +CIRCUITPY_SDIOIO = 1 CIRCUITPY_TOUCHIO = 0 CIRCUITPY_USB_HID = 0 CIRCUITPY_USB_MIDI = 0 From 22f0c14fdbdd457f700411781c601d428105d913 Mon Sep 17 00:00:00 2001 From: Kamil Tomaszewski Date: Thu, 2 Jul 2020 15:26:05 +0200 Subject: [PATCH 10/73] locale: update translate --- locale/circuitpython.pot | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 7141cc8722..6e32ebab98 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -425,7 +425,8 @@ msgstr "" msgid "Buffer length %d too big. It must be less than %d" msgstr "" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -589,6 +590,10 @@ msgstr "" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "" @@ -982,7 +987,8 @@ msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" From 4b66483757048be03c7d34fd07d2028693a629a3 Mon Sep 17 00:00:00 2001 From: Lucian Copeland Date: Thu, 2 Jul 2020 15:38:37 -0400 Subject: [PATCH 11/73] Update submodule, revert direction change --- ports/stm/common-hal/busio/SPI.c | 7 ++----- ports/stm/st_driver | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/ports/stm/common-hal/busio/SPI.c b/ports/stm/common-hal/busio/SPI.c index 380302da65..65eeb8ebcf 100644 --- a/ports/stm/common-hal/busio/SPI.c +++ b/ports/stm/common-hal/busio/SPI.c @@ -238,11 +238,8 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, self->handle.Instance = SPIx; self->handle.Init.Mode = SPI_MODE_MASTER; - // Implementing one-directional recieve-only SPI as per [RefMan RM0090:884] - // results in BSY bit related hangs. Using MOSI as an IO works fine without it, - // so it's unclear why this mode is present in the first place. - //self->handle.Init.Direction = (self->mosi == NULL) ? SPI_DIRECTION_2LINES_RXONLY : SPI_DIRECTION_2LINES; - self->handle.Init.Direction = SPI_DIRECTION_2LINES; + // Direction change only required for RX-only, see RefMan RM0090:884 + self->handle.Init.Direction = (self->mosi == NULL) ? SPI_DIRECTION_2LINES_RXONLY : SPI_DIRECTION_2LINES; self->handle.Init.DataSize = SPI_DATASIZE_8BIT; self->handle.Init.CLKPolarity = SPI_POLARITY_LOW; self->handle.Init.CLKPhase = SPI_PHASE_1EDGE; diff --git a/ports/stm/st_driver b/ports/stm/st_driver index 3fc2e0f3db..1900834751 160000 --- a/ports/stm/st_driver +++ b/ports/stm/st_driver @@ -1 +1 @@ -Subproject commit 3fc2e0f3db155b33177bb0705e0dd65cadb58412 +Subproject commit 1900834751fd6754457874b8c971690bab33e0a7 From 185a149da4cb13be12b905a25dcc4984fb636efe Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Thu, 2 Jul 2020 08:37:40 +0000 Subject: [PATCH 12/73] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (777 of 777 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/pt_BR/ --- locale/pt_BR.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 92cf0172d0..9c357e198a 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-01 10:33-0500\n" -"PO-Revision-Date: 2020-07-02 02:02+0000\n" +"PO-Revision-Date: 2020-07-02 13:32+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -3405,7 +3405,7 @@ msgstr "tipo da saída incorreta" #: shared-module/displayio/Shape.c msgid "x value out of bounds" -msgstr "a valor x está fora dos limites" +msgstr "o valor x está fora dos limites" #: shared-bindings/displayio/Shape.c msgid "y should be an int" From 8f921cf138cc3059c7715f7cda03c99fd5a4db71 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 2 Jul 2020 20:28:32 +0200 Subject: [PATCH 13/73] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/ --- locale/ID.po | 12 +++++++++--- locale/cs.po | 12 +++++++++--- locale/de_DE.po | 12 +++++++++--- locale/es.po | 12 +++++++++--- locale/fil.po | 12 +++++++++--- locale/fr.po | 12 +++++++++--- locale/it_IT.po | 12 +++++++++--- locale/ko.po | 12 +++++++++--- locale/nl.po | 12 +++++++++--- locale/pl.po | 12 +++++++++--- locale/pt_BR.po | 12 +++++++++--- locale/sv.po | 12 +++++++++--- locale/zh_Latn_pinyin.po | 12 +++++++++--- 13 files changed, 117 insertions(+), 39 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index da4f7b904b..44d3bfde29 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -429,7 +429,8 @@ msgstr "" msgid "Buffer length %d too big. It must be less than %d" msgstr "" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -599,6 +600,10 @@ msgstr "" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "Tidak dapat menginisialisasi UART" @@ -993,7 +998,8 @@ msgstr "Pin untuk channel kanan tidak valid" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/cs.po b/locale/cs.po index 9029985397..dfe1cfa384 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2020-05-24 03:22+0000\n" "Last-Translator: dronecz \n" "Language-Team: LANGUAGE \n" @@ -433,7 +433,8 @@ msgstr "" msgid "Buffer length %d too big. It must be less than %d" msgstr "" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -597,6 +598,10 @@ msgstr "" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "" @@ -990,7 +995,8 @@ msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/de_DE.po b/locale/de_DE.po index 3b7c49b396..f2d9258566 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2020-06-16 18:24+0000\n" "Last-Translator: Andreas Buchen \n" "Language: de_DE\n" @@ -436,7 +436,8 @@ msgstr "Der Puffer ist zu klein" msgid "Buffer length %d too big. It must be less than %d" msgstr "Die Pufferlänge %d ist zu groß. Sie muss kleiner als %d sein" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -607,6 +608,10 @@ msgstr "Beschädigter raw code" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "Konnte UART nicht initialisieren" @@ -1007,7 +1012,8 @@ msgstr "Ungültiger Pin für rechten Kanal" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/es.po b/locale/es.po index 9034024068..423d673617 100644 --- a/locale/es.po +++ b/locale/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2020-06-29 13:13+0000\n" "Last-Translator: Alvaro Figueroa \n" "Language-Team: \n" @@ -438,7 +438,8 @@ msgstr "El buffer es muy pequeño" msgid "Buffer length %d too big. It must be less than %d" msgstr "La longitud del buffer %d es muy grande. Debe ser menor a %d" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -606,6 +607,10 @@ msgstr "Código crudo corrupto" msgid "Could not initialize GNSS" msgstr "No se pudo inicializar el GNSS" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "No se puede inicializar la UART" @@ -1002,7 +1007,8 @@ msgstr "Pin inválido para canal derecho" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/fil.po b/locale/fil.po index ff5cc6426d..3489316130 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2018-12-20 22:15-0800\n" "Last-Translator: Timothy \n" "Language-Team: fil\n" @@ -431,7 +431,8 @@ msgstr "" msgid "Buffer length %d too big. It must be less than %d" msgstr "" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -598,6 +599,10 @@ msgstr "" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "Hindi ma-initialize ang UART" @@ -998,7 +1003,8 @@ msgstr "Mali ang pin para sa kanang channel" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/fr.po b/locale/fr.po index 7facdef043..2db7f47222 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2020-06-05 17:29+0000\n" "Last-Translator: aberwag \n" "Language: fr\n" @@ -441,7 +441,8 @@ msgstr "Le tampon est trop petit" msgid "Buffer length %d too big. It must be less than %d" msgstr "La longueur du tampon %d est trop grande. Il doit être inférieur à %d" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -614,6 +615,10 @@ msgstr "Code brut corrompu" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "L'UART n'a pu être initialisé" @@ -1011,7 +1016,8 @@ msgstr "Broche invalide pour le canal droit" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/it_IT.po b/locale/it_IT.po index 983b47b824..bd49e2388b 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2018-10-02 16:27+0200\n" "Last-Translator: Enrico Paganin \n" "Language-Team: \n" @@ -431,7 +431,8 @@ msgstr "" msgid "Buffer length %d too big. It must be less than %d" msgstr "" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -599,6 +600,10 @@ msgstr "" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "Impossibile inizializzare l'UART" @@ -1000,7 +1005,8 @@ msgstr "Pin non valido per il canale destro" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/ko.po b/locale/ko.po index ea3f564700..4bd56cde1e 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2019-05-06 14:22-0700\n" "Last-Translator: \n" "Language-Team: LANGUAGE \n" @@ -429,7 +429,8 @@ msgstr "" msgid "Buffer length %d too big. It must be less than %d" msgstr "" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -593,6 +594,10 @@ msgstr "" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "" @@ -986,7 +991,8 @@ msgstr "오른쪽 채널 핀이 잘못되었습니다" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/nl.po b/locale/nl.po index 12a767b183..8306aa7797 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2020-06-02 19:50+0000\n" "Last-Translator: _fonzlate \n" "Language-Team: none\n" @@ -435,7 +435,8 @@ msgstr "Buffer is te klein" msgid "Buffer length %d too big. It must be less than %d" msgstr "Buffer lengte %d te groot. Het moet kleiner zijn dan %d" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -605,6 +606,10 @@ msgstr "Corrupt raw code" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "Kan UART niet initialiseren" @@ -1002,7 +1007,8 @@ msgstr "Ongeldige pin voor rechter kanaal" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/pl.po b/locale/pl.po index d626e8ebcf..7724481314 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2019-03-19 18:37-0700\n" "Last-Translator: Radomir Dopieralski \n" "Language-Team: pl\n" @@ -428,7 +428,8 @@ msgstr "" msgid "Buffer length %d too big. It must be less than %d" msgstr "" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -592,6 +593,10 @@ msgstr "" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "Ustawienie UART nie powiodło się" @@ -987,7 +992,8 @@ msgstr "Zła nóżka dla prawego kanału" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 9c357e198a..99e59304c8 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2020-07-02 13:32+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" @@ -441,7 +441,8 @@ msgstr "O buffer é muito pequeno" msgid "Buffer length %d too big. It must be less than %d" msgstr "O tamanho do buffer %d é muito grande. Deve ser menor que %d" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "O comprimento do Buffer deve ser um múltiplo de 512" @@ -612,6 +613,10 @@ msgstr "Código bruto corrompido" msgid "Could not initialize GNSS" msgstr "Não foi possível inicializar o GNSS" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "Não foi possível inicializar o UART" @@ -1009,7 +1014,8 @@ msgstr "Pino inválido para canal direito" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/sv.po b/locale/sv.po index f359eba275..3ec91c19ee 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2020-06-03 18:59+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" @@ -435,7 +435,8 @@ msgstr "Bufferten är för liten" msgid "Buffer length %d too big. It must be less than %d" msgstr "Buffertlängd %d för stor. Den måste vara mindre än %d" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -605,6 +606,10 @@ msgstr "Korrupt rå kod" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "Det gick inte att initiera UART" @@ -1000,7 +1005,8 @@ msgstr "Ogiltig pinne för höger kanal" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index bc9a7253b9..db41adb536 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: circuitpython-cn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-01 10:33-0500\n" +"POT-Creation-Date: 2020-07-02 15:29+0200\n" "PO-Revision-Date: 2019-04-13 10:10-0700\n" "Last-Translator: hexthat\n" "Language-Team: Chinese Hanyu Pinyin\n" @@ -434,7 +434,8 @@ msgstr "Huǎnchōng qū tài xiǎo" msgid "Buffer length %d too big. It must be less than %d" msgstr "Huǎnchōng qū chángdù%d tài dà. Tā bìxū xiǎoyú%d" -#: ports/atmel-samd/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c +#: ports/atmel-samd/common-hal/sdioio/SDCard.c +#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" msgstr "" @@ -600,6 +601,10 @@ msgstr "Sǔnhuài de yuánshǐ dàimǎ" msgid "Could not initialize GNSS" msgstr "" +#: ports/cxd56/common-hal/sdioio/SDCard.c +msgid "Could not initialize SDCard" +msgstr "" + #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" msgstr "Wúfǎ chūshǐhuà UART" @@ -995,7 +1000,8 @@ msgstr "Yòuxián tōngdào yǐn jiǎo wúxiào" #: ports/atmel-samd/common-hal/busio/UART.c #: ports/atmel-samd/common-hal/i2cperipheral/I2CPeripheral.c #: ports/cxd56/common-hal/busio/I2C.c ports/cxd56/common-hal/busio/SPI.c -#: ports/cxd56/common-hal/busio/UART.c ports/mimxrt10xx/common-hal/busio/I2C.c +#: ports/cxd56/common-hal/busio/UART.c ports/cxd56/common-hal/sdioio/SDCard.c +#: ports/mimxrt10xx/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/I2C.c msgid "Invalid pins" From 35e35e61d3016d83f1e528bf3e7947fa24f995f0 Mon Sep 17 00:00:00 2001 From: _fonzlate Date: Thu, 2 Jul 2020 20:06:04 +0000 Subject: [PATCH 14/73] Translated using Weblate (Dutch) Currently translated at 100.0% (778 of 778 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/nl/ --- locale/nl.po | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/locale/nl.po b/locale/nl.po index 8306aa7797..34e9c835a2 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-02 15:29+0200\n" -"PO-Revision-Date: 2020-06-02 19:50+0000\n" +"PO-Revision-Date: 2020-07-02 20:42+0000\n" "Last-Translator: _fonzlate \n" "Language-Team: none\n" "Language: nl\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.1-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: main.c msgid "" @@ -68,7 +68,7 @@ msgstr "%d adres pins en %d RGB pins geven een hoogte van %d aan, niet %d" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q failure: %d" -msgstr "" +msgstr "%q fout: %d" #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -99,7 +99,7 @@ msgstr "%q moet een tuple van lengte 2 zijn" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q pin invalid" -msgstr "" +msgstr "%q pin onjuist" #: shared-bindings/fontio/BuiltinFont.c msgid "%q should be an int" @@ -438,7 +438,7 @@ msgstr "Buffer lengte %d te groot. Het moet kleiner zijn dan %d" #: ports/atmel-samd/common-hal/sdioio/SDCard.c #: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" -msgstr "" +msgstr "Buffer lengte moet een veelvoud van 512 zijn" #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" @@ -604,11 +604,11 @@ msgstr "Corrupt raw code" #: ports/cxd56/common-hal/gnss/GNSS.c msgid "Could not initialize GNSS" -msgstr "" +msgstr "Kan GNSS niet initialiseren" #: ports/cxd56/common-hal/sdioio/SDCard.c msgid "Could not initialize SDCard" -msgstr "" +msgstr "Kan SDCard niet initialiseren" #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" @@ -898,7 +898,7 @@ msgstr "Interne fout #%d" #: shared-bindings/sdioio/SDCard.c msgid "Invalid %q" -msgstr "" +msgstr "Ongeldige %q" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c @@ -1417,7 +1417,7 @@ msgstr "Draaiende in veilige modus! Opgeslagen code wordt niet uitgevoerd.\n" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" -msgstr "" +msgstr "SD kaart CSD formaat niet ondersteund" #: ports/atmel-samd/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/I2C.c ports/nrf/common-hal/busio/I2C.c @@ -1489,7 +1489,7 @@ msgstr "Geef op zijn minst 1 UART pin op" #: shared-bindings/gnss/GNSS.c msgid "System entry must be gnss.SatelliteSystem" -msgstr "" +msgstr "Systeem invoer moet gnss.SatelliteSystem zijn" #: ports/stm/common-hal/microcontroller/Processor.c msgid "Temperature read timed out" @@ -2062,7 +2062,7 @@ msgstr "kan geen niet-'None' waarde naar een net gestartte generator sturen" #: shared-module/sdcardio/SDCard.c msgid "can't set 512 block size" -msgstr "" +msgstr "kan geen 512 blokgrootte instellen" #: py/objnamedtuple.c msgid "can't set attribute" @@ -2193,7 +2193,7 @@ msgstr "kon de Vandermonde matrix niet omkeren" #: shared-module/sdcardio/SDCard.c msgid "couldn't determine SD card version" -msgstr "" +msgstr "kon SD kaart versie niet bepalen" #: extmod/ulab/code/approx.c msgid "data must be iterable" @@ -2760,7 +2760,7 @@ msgstr "negatieve verschuivingstelling (shift count)" #: shared-module/sdcardio/SDCard.c msgid "no SD card" -msgstr "" +msgstr "geen SD kaart" #: py/vm.c msgid "no active exception to reraise" @@ -2785,7 +2785,7 @@ msgstr "geen reset pin beschikbaar" #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" -msgstr "" +msgstr "geen antwoord van SD kaart" #: py/runtime.c msgid "no such attribute" @@ -3081,7 +3081,7 @@ msgstr "de slaapduur mag niet negatief zijn" #: extmod/ulab/code/ndarray.c msgid "slice step can't be zero" -msgstr "" +msgstr "segmentstap mag niet nul zijn" #: py/objslice.c py/sequence.c msgid "slice step cannot be zero" @@ -3101,15 +3101,15 @@ msgstr "sorteerargument moet een ndarray zijn" #: extmod/ulab/code/filter.c msgid "sos array must be of shape (n_section, 6)" -msgstr "" +msgstr "sos array moet vorm (n_section, 6) hebben" #: extmod/ulab/code/filter.c msgid "sos[:, 3] should be all ones" -msgstr "" +msgstr "sos[:, 3] moeten allemaal 1 zijn" #: extmod/ulab/code/filter.c msgid "sosfilt requires iterable arguments" -msgstr "" +msgstr "sosfilt vereist itereerbare argumenten" #: py/objstr.c msgid "start/end indices" @@ -3198,11 +3198,11 @@ msgstr "timeout moet groter dan 0.0 zijn" #: shared-module/sdcardio/SDCard.c msgid "timeout waiting for v1 card" -msgstr "" +msgstr "timeout bij wachten op v1 kaart" #: shared-module/sdcardio/SDCard.c msgid "timeout waiting for v2 card" -msgstr "" +msgstr "timeout bij wachten op v2 kaart" #: shared-bindings/time/__init__.c msgid "timestamp out of range for platform time_t" @@ -3403,15 +3403,15 @@ msgstr "nul-stap" #: extmod/ulab/code/filter.c msgid "zi must be an ndarray" -msgstr "" +msgstr "zi moet een ndarray zijn" #: extmod/ulab/code/filter.c msgid "zi must be of float type" -msgstr "" +msgstr "zi moet van type float zijn" #: extmod/ulab/code/filter.c msgid "zi must be of shape (n_section, 2)" -msgstr "" +msgstr "zi moet vorm (n_section, 2) hebben" #~ msgid "I2C operation not supported" #~ msgstr "I2C actie niet ondersteund" From fce35c34819845521ed18b9a3cebbc08f8cb00cc Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Thu, 2 Jul 2020 22:57:58 +0200 Subject: [PATCH 15/73] Fluff M0: additional pins on version 1.3 of the board --- ports/atmel-samd/boards/fluff_m0/pins.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ports/atmel-samd/boards/fluff_m0/pins.c b/ports/atmel-samd/boards/fluff_m0/pins.c index d80d46b895..ac7811328b 100644 --- a/ports/atmel-samd/boards/fluff_m0/pins.c +++ b/ports/atmel-samd/boards/fluff_m0/pins.c @@ -30,6 +30,8 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) }, { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) }, { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA17) }, + { MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_PA27) }, + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PA28) }, { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, From 70fdde4aaaa6c1c8fd54c0463d405dfbf8794b10 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 2 Jul 2020 15:11:40 -0700 Subject: [PATCH 16/73] Remove trailing space --- shared-bindings/busio/UART.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-bindings/busio/UART.c b/shared-bindings/busio/UART.c index 25cf5f480a..a9619a8e0b 100644 --- a/shared-bindings/busio/UART.c +++ b/shared-bindings/busio/UART.c @@ -202,7 +202,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(busio_uart___exit___obj, 4, 4, busio_ //| def readline(self, ) -> Any: //| """Read a line, ending in a newline character, or //| return None if a timeout occurs sooner, or -//| return everything readable if no newline is found and timeout=0 +//| return everything readable if no newline is found and timeout=0 //| //| :return: the line read //| :rtype: bytes or None""" From 49aacc8596eb1036e62ea284ca4f6604d514c24a Mon Sep 17 00:00:00 2001 From: ansonhe97 Date: Fri, 3 Jul 2020 12:43:21 +0800 Subject: [PATCH 17/73] ADD: Fixed wrong SPI pins and added more functional pins --- .../boards/seeeduino_wio_terminal/pins.c | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c b/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c index 92cc8f8be1..1fac07b0b8 100644 --- a/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c +++ b/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c @@ -33,9 +33,10 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PB27) }, // SPI pins - { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PA02) }, - { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PA03) }, - { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PA00) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PB02) }, + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PB03) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PB00) }, + { MP_ROM_QSTR(MP_QSTR_SS), MP_ROM_PTR(&pin_PB01) }, // I2C pins { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA16) }, @@ -51,19 +52,35 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_TFT_SS), MP_ROM_PTR(&pin_PB21) }, { MP_ROM_QSTR(MP_QSTR_TFT_DC), MP_ROM_PTR(&pin_PC06) }, { MP_ROM_QSTR(MP_QSTR_TFT_BACKLIGHT), MP_ROM_PTR(&pin_PC05) }, + { MP_ROM_QSTR(MP_QSTR_TFT_RESET), MP_ROM_PTR(&pin_PC07) }, - // Special named pins + // SD Card + { MP_OBJ_NEW_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_PC18) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_PC16) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SD_SCK), MP_ROM_PTR(&pin_PC17) }, + { MP_ROM_QSTR(MP_QSTR_SD_SS), MP_ROM_PTR(&pin_PC19) }, + { MP_ROM_QSTR(MP_QSTR_SD_DET), MP_ROM_PTR(&pin_PC21) }, + + // Switch { MP_OBJ_NEW_QSTR(MP_QSTR_SWITCH_UP), MP_ROM_PTR(&pin_PD20) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SWITCH_LEFT), MP_ROM_PTR(&pin_PD12) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SWITCH_RIGHT), MP_ROM_PTR(&pin_PD09) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SWITCH_DOWN), MP_ROM_PTR(&pin_PD08) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SWITCH_PRESS), MP_ROM_PTR(&pin_PD10) }, + + // Button { MP_OBJ_NEW_QSTR(MP_QSTR_BUTTON_1), MP_ROM_PTR(&pin_PC26) }, { MP_OBJ_NEW_QSTR(MP_QSTR_BUTTON_2), MP_ROM_PTR(&pin_PC27) }, { MP_OBJ_NEW_QSTR(MP_QSTR_BUTTON_3), MP_ROM_PTR(&pin_PC28) }, + + // Special named pins { MP_OBJ_NEW_QSTR(MP_QSTR_LIGHT), MP_ROM_PTR(&pin_PD01) }, { MP_OBJ_NEW_QSTR(MP_QSTR_BUZZER), MP_ROM_PTR(&pin_PD11) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IR), MP_ROM_PTR(&pin_PB31) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MIC), MP_ROM_PTR(&pin_PC30) }, + { MP_ROM_QSTR(MP_QSTR_GYROSCOPE_SCL), MP_ROM_PTR(&pin_PA12) }, + { MP_ROM_QSTR(MP_QSTR_GYROSCOPE_SDA), MP_ROM_PTR(&pin_PA13) }, + { MP_ROM_QSTR(MP_QSTR_GYROSCOPE_INT), MP_ROM_PTR(&pin_PC21) }, // Comm objects { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, From 2a92cf8d8bc63f5179fa8c8b3df5c515dbc407c1 Mon Sep 17 00:00:00 2001 From: ansonhe97 Date: Fri, 3 Jul 2020 12:44:20 +0800 Subject: [PATCH 18/73] ADD: Added LCD driver to board init --- .../boards/seeeduino_wio_terminal/board.c | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/ports/atmel-samd/boards/seeeduino_wio_terminal/board.c b/ports/atmel-samd/boards/seeeduino_wio_terminal/board.c index 0f60736a24..b7fc736eb0 100644 --- a/ports/atmel-samd/boards/seeeduino_wio_terminal/board.c +++ b/ports/atmel-samd/boards/seeeduino_wio_terminal/board.c @@ -27,8 +27,85 @@ #include "boards/board.h" #include "mpconfigboard.h" #include "hal/include/hal_gpio.h" +#include "shared-bindings/busio/SPI.h" +#include "shared-bindings/displayio/FourWire.h" +#include "shared-module/displayio/__init__.h" +#include "shared-module/displayio/mipi_constants.h" + +displayio_fourwire_obj_t board_display_obj; + +uint8_t display_init_sequence[] = { + 0x01, 0x80, 0x80, // Software reset then delay 0x80 (128ms) + 0xEF, 0x03, 0x03, 0x80, 0x02, + 0xCF, 0x03, 0x00, 0xC1, 0x30, + 0xED, 0x04, 0x64, 0x03, 0x12, 0x81, + 0xE8, 0x03, 0x85, 0x00, 0x78, + 0xCB, 0x05, 0x39, 0x2C, 0x00, 0x34, 0x02, + 0xF7, 0x01, 0x20, + 0xEA, 0x02, 0x00, 0x00, + 0xc0, 0x01, 0x23, // Power control VRH[5:0] + 0xc1, 0x01, 0x10, // Power control SAP[2:0];BT[3:0] + 0xc5, 0x02, 0x3e, 0x28, // VCM control + 0xc7, 0x01, 0x86, // VCM control2 + 0x36, 0x01, 0x38, // Memory Access Control + 0x37, 0x01, 0x00, // Vertical scroll zero + 0x3a, 0x01, 0x55, // COLMOD: Pixel Format Set + 0xb1, 0x02, 0x00, 0x18, // Frame Rate Control (In Normal Mode/Full Colors) + 0xb6, 0x03, 0x08, 0x82, 0x27, // Display Function Control + 0xF2, 0x01, 0x00, // 3Gamma Function Disable + 0x26, 0x01, 0x01, // Gamma curve selected + 0xe0, 0x0f, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00, // Set Gamma + 0xe1, 0x0f, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F, // Set Gamma + 0x11, 0x80, 0x78, // Exit Sleep then delay 0x78 (120ms) + 0x29, 0x80, 0x78, // Display on then delay 0x78 (120ms) +}; void board_init(void) { + busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus; + common_hal_busio_spi_construct(spi, &pin_PB20, &pin_PB19, NULL); + common_hal_busio_spi_never_reset(spi); + + displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus; + bus->base.type = &displayio_fourwire_type; + common_hal_displayio_fourwire_construct(bus, + spi, + &pin_PC06, // TFT_DC Command or data + &pin_PB21, // TFT_CS Chip select + &pin_PC07, // TFT_RST Reset + 60000000, // Baudrate + 0, // Polarity + 0); // Phase + + displayio_display_obj_t* display = &displays[0].display; + display->base.type = &displayio_display_type; + common_hal_displayio_display_construct(display, + bus, + 320, // Width + 240, // Height + 0, // column start + 0, // row start + 180, // rotation + 16, // Color depth + false, // Grayscale + false, // pixels in a byte share a row. Only valid for depths < 8 + 1, // bytes per cell. Only valid for depths < 8 + false, // reverse_pixels_in_byte. Only valid for depths < 8 + true, // reverse_pixels_in_word + MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command + MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command + MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command + 0x37, // set vertical scroll command + display_init_sequence, + sizeof(display_init_sequence), + &pin_PC05, // backlight pin + NO_BRIGHTNESS_COMMAND, + 1.0f, // brightness (ignored) + true, // auto_brightness + false, // single_byte_bounds + false, // data_as_commands + true, // auto_refresh + 60, // native_frames_per_second + true); // backlight_on_high } bool board_requests_safe_mode(void) { From 2ecb46f19235e7ea3ac80304aa6a4dc069f31ba0 Mon Sep 17 00:00:00 2001 From: ansonhe97 Date: Fri, 3 Jul 2020 13:42:27 +0800 Subject: [PATCH 19/73] Fix CI --- ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c b/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c index 1fac07b0b8..6668461f9b 100644 --- a/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c +++ b/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c @@ -53,7 +53,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_TFT_DC), MP_ROM_PTR(&pin_PC06) }, { MP_ROM_QSTR(MP_QSTR_TFT_BACKLIGHT), MP_ROM_PTR(&pin_PC05) }, { MP_ROM_QSTR(MP_QSTR_TFT_RESET), MP_ROM_PTR(&pin_PC07) }, - + // SD Card { MP_OBJ_NEW_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_PC18) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_PC16) }, From 50a6342f6d4a8f7fb776bd8a95fc6b2c7b5ed514 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Fri, 3 Jul 2020 12:54:48 -0700 Subject: [PATCH 20/73] Shrink files.json by using one space instead of four. Also: - Remove download count update because the files are no longer on GitHub. - Add "extensions" and "languages" to each board dictionary so we can stop using "files" entirely. --- tools/build_board_info.py | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/tools/build_board_info.py b/tools/build_board_info.py index 20a5866b7f..bbafe19f6a 100644 --- a/tools/build_board_info.py +++ b/tools/build_board_info.py @@ -153,7 +153,7 @@ def create_pr(changes, updated, git_info, user): info["id"] = id updated_list.append(info) - updated = json.dumps(updated_list, sort_keys=True, indent=4).encode("utf-8") + b"\n" + updated = json.dumps(updated_list, sort_keys=True, indent=1).encode("utf-8") + b"\n" #print(updated.decode("utf-8")) pr_title = "Automated website update for release {}".format(changes["new_release"]) boards = "" @@ -205,19 +205,6 @@ def create_pr(changes, updated, git_info, user): print(changes) print(pr_info) -def update_downloads(boards, release): - response = github.get("/repos/adafruit/circuitpython/releases/tags/{}".format(release)) - if not response.ok: - print(response.text) - raise RuntimeError("cannot get previous release info") - - assets = response.json()["assets"] - for asset in assets: - board_name = asset["name"].split("-")[2] - if board_name not in boards: - continue - boards[board_name]["download_count"] += asset["download_count"] - def print_active_user(): response = github.get("/user") @@ -269,9 +256,6 @@ def generate_download_info(): board_mapping = get_board_mapping() - for release in previous_releases: - update_downloads(board_mapping, release) - for port in SUPPORTED_PORTS: board_path = os.path.join("../ports", port, "boards") for board_path in os.scandir(board_path): @@ -291,7 +275,9 @@ def generate_download_info(): "stable": new_stable, "version": new_tag, "modules": support_matrix.get(alias, "[]"), - "files": {} + "files": {}, + "languages": languages, + "extensions": board_info["extensions"] } for language in languages: files = [] From 5375e546037ffa2d1c0b7b9cffbd56bc3472ab7e Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Fri, 3 Jul 2020 13:08:18 +0000 Subject: [PATCH 21/73] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (778 of 778 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/pt_BR/ --- locale/pt_BR.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 99e59304c8..f25d2d86e6 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-02 15:29+0200\n" -"PO-Revision-Date: 2020-07-02 13:32+0000\n" +"PO-Revision-Date: 2020-07-03 22:53+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -615,7 +615,7 @@ msgstr "Não foi possível inicializar o GNSS" #: ports/cxd56/common-hal/sdioio/SDCard.c msgid "Could not initialize SDCard" -msgstr "" +msgstr "Não foi possível inicializar o SDCard" #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" From 2345b57373eb3ad95ba72d65c076a735f28b605a Mon Sep 17 00:00:00 2001 From: oon arfiandwi Date: Sat, 4 Jul 2020 00:58:33 +0000 Subject: [PATCH 22/73] Translated using Weblate (Indonesian) Currently translated at 29.1% (227 of 778 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/id/ --- locale/ID.po | 150 ++++++++++++++++++++++++++------------------------- 1 file changed, 77 insertions(+), 73 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 44d3bfde29..390bfcd944 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -3,25 +3,28 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-02 15:29+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2020-07-04 02:34+0000\n" +"Last-Translator: oon arfiandwi \n" "Language-Team: LANGUAGE \n" -"Language: \n" +"Language: ID\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.2-dev\n" #: main.c msgid "" "\n" "Code done running. Waiting for reload.\n" msgstr "" +"\n" +"Kode selesai berjalan. Menunggu memuat ulang.\n" #: supervisor/shared/safe_mode.c msgid "" @@ -29,20 +32,25 @@ msgid "" "Please file an issue with the contents of your CIRCUITPY drive at \n" "https://github.com/adafruit/circuitpython/issues\n" msgstr "" +"\n" +"Harap ajukan masalah dengan konten drive CIRCUITPY Anda di\n" +"https://github.com/adafruit/circuitpython/issues\n" #: supervisor/shared/safe_mode.c msgid "" "\n" "To exit, please reset the board without " msgstr "" +"\n" +"Untuk keluar, harap setel ulang papan tanpa" #: py/obj.c msgid " File \"%q\"" -msgstr "" +msgstr "  File \"% q\"" #: py/obj.c msgid " File \"%q\", line %d" -msgstr "" +msgstr "  File \"% q\", baris% d" #: main.c msgid " output:\n" @@ -51,12 +59,12 @@ msgstr "output:\n" #: py/objstr.c #, c-format msgid "%%c requires int or char" -msgstr "" +msgstr "%%c harus int atau char" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "%d address pins and %d rgb pins indicate a height of %d, not %d" -msgstr "" +msgstr "pin alamat %d dan pin rgb %d menunjukkan tinggi %d, bukan %d" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q failure: %d" @@ -64,39 +72,38 @@ msgstr "" #: shared-bindings/microcontroller/Pin.c msgid "%q in use" -msgstr "" +msgstr "%q sedang digunakan" #: py/obj.c msgid "%q index out of range" -msgstr "" +msgstr "%q indeks di luar batas" #: py/obj.c msgid "%q indices must be integers, not %s" -msgstr "" +msgstr "indeks %q harus bilangan bulat, bukan %s" #: shared-bindings/vectorio/Polygon.c msgid "%q list must be a list" -msgstr "" +msgstr "daftar %q harus berupa daftar" #: shared-bindings/_bleio/CharacteristicBuffer.c #: shared-bindings/_bleio/PacketBuffer.c shared-bindings/displayio/Group.c #: shared-bindings/displayio/Shape.c shared-bindings/vectorio/Circle.c #: shared-bindings/vectorio/Rectangle.c -#, fuzzy msgid "%q must be >= 1" -msgstr "buffers harus mempunyai panjang yang sama" +msgstr "%q harus >= 1" #: shared-module/vectorio/Polygon.c msgid "%q must be a tuple of length 2" -msgstr "" +msgstr "%q harus berupa tuple dengan panjang 2" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q pin invalid" -msgstr "" +msgstr "pin %q tidak valid" #: shared-bindings/fontio/BuiltinFont.c msgid "%q should be an int" -msgstr "" +msgstr "%q harus berupa int" #: py/bc.c py/objnamedtuple.c msgid "%q() takes %d positional arguments but %d were given" @@ -109,7 +116,7 @@ msgstr "'%q' argumen dibutuhkan" #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format msgid "'%s' expects a label" -msgstr "" +msgstr "'%s' mengharapkan sebuah label" #: py/emitinlinethumb.c py/emitinlinextensa.c #, c-format @@ -149,7 +156,7 @@ msgstr "'%s' mengharapkan {r0, r1, ...}" #: py/emitinlinextensa.c #, c-format msgid "'%s' integer %d is not within range %d..%d" -msgstr "" +msgstr "'%s' integer %d tidak dalam kisaran %d..%d" #: py/emitinlinethumb.c #, c-format @@ -158,40 +165,40 @@ msgstr "'%s' integer 0x%x tidak cukup didalam mask 0x%x" #: py/runtime.c msgid "'%s' object cannot assign attribute '%q'" -msgstr "" +msgstr "Objek '%s' tidak dapat menetapkan atribut '%q'" #: py/proto.c msgid "'%s' object does not support '%q'" -msgstr "" +msgstr "Objek '%s' tidak mendukung '%q'" #: py/obj.c #, c-format msgid "'%s' object does not support item assignment" -msgstr "" +msgstr "Objek '%s' tidak mendukung penetapan item" #: py/obj.c #, c-format msgid "'%s' object does not support item deletion" -msgstr "" +msgstr "Objek '%s' tidak mendukung penghapusan item" #: py/runtime.c msgid "'%s' object has no attribute '%q'" -msgstr "" +msgstr "Objek '%s' tidak memiliki atribut '%q'" #: py/runtime.c #, c-format msgid "'%s' object is not an iterator" -msgstr "" +msgstr "Objek '%s' bukan iterator" #: py/objtype.c py/runtime.c #, c-format msgid "'%s' object is not callable" -msgstr "" +msgstr "Objek '%s' tidak dapat dipanggil" #: py/runtime.c #, c-format msgid "'%s' object is not iterable" -msgstr "" +msgstr "'%s' objek tidak dapat diulang" #: py/obj.c #, c-format @@ -200,11 +207,11 @@ msgstr "" #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" -msgstr "" +msgstr "'=' perataan tidak diizinkan dalam penentu format string" #: shared-module/struct/__init__.c msgid "'S' and 'O' are not supported format types" -msgstr "" +msgstr "'S' dan 'O' bukan tipe format yang didukung" #: py/compile.c msgid "'align' requires 1 argument" @@ -212,7 +219,7 @@ msgstr "'align' membutuhkan 1 argumen" #: py/compile.c msgid "'async for' or 'async with' outside async function" -msgstr "" +msgstr "'async for' atau 'async with' di luar fungsi async" #: py/compile.c msgid "'await' outside function" @@ -252,7 +259,7 @@ msgstr "*x harus menjadi target assignment" #: py/obj.c msgid ", in %q\n" -msgstr "" +msgstr ", dalam %q\n" #: py/objcomplex.c msgid "0.0 to a complex power" @@ -260,7 +267,7 @@ msgstr "" #: py/modbuiltins.c msgid "3-arg pow() not supported" -msgstr "" +msgstr "pow() 3-arg tidak didukung" #: ports/atmel-samd/common-hal/countio/Counter.c #: ports/atmel-samd/common-hal/rotaryio/IncrementalEncoder.c @@ -268,13 +275,13 @@ msgid "A hardware interrupt channel is already in use" msgstr "Sebuah channel hardware interrupt sedang digunakan" #: shared-bindings/_bleio/Address.c -#, fuzzy, c-format +#, c-format msgid "Address must be %d bytes long" -msgstr "buffers harus mempunyai panjang yang sama" +msgstr "Alamat harus sepanjang %d byte" #: shared-bindings/_bleio/Address.c msgid "Address type out of range" -msgstr "" +msgstr "Jenis alamat di luar batas" #: ports/nrf/common-hal/busio/I2C.c msgid "All I2C peripherals are in use" @@ -285,9 +292,8 @@ msgid "All SPI peripherals are in use" msgstr "Semua perangkat SPI sedang digunakan" #: ports/nrf/common-hal/busio/UART.c -#, fuzzy msgid "All UART peripherals are in use" -msgstr "Semua perangkat I2C sedang digunakan" +msgstr "Semua perangkat UART sedang digunakan" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" @@ -319,7 +325,7 @@ msgstr "" #: ports/cxd56/common-hal/analogio/AnalogIn.c msgid "AnalogIn not supported on given pin" -msgstr "" +msgstr "AnalogIn tidak didukung pada pin yang diberikan" #: ports/cxd56/common-hal/analogio/AnalogOut.c #: ports/mimxrt10xx/common-hal/analogio/AnalogOut.c @@ -329,7 +335,7 @@ msgstr "fungsionalitas AnalogOut tidak didukung" #: shared-bindings/analogio/AnalogOut.c msgid "AnalogOut is only 16 bits. Value must be less than 65536." -msgstr "" +msgstr "AnalogOut hanya 16 bit. Nilai harus kurang dari 65536." #: ports/atmel-samd/common-hal/analogio/AnalogOut.c msgid "AnalogOut not supported on given pin" @@ -342,19 +348,19 @@ msgstr "Send yang lain sudah aktif" #: shared-bindings/pulseio/PulseOut.c msgid "Array must contain halfwords (type 'H')" -msgstr "" +msgstr "Array harus mengandung halfwords (ketik 'H')" #: shared-bindings/nvm/ByteArray.c msgid "Array values should be single bytes." -msgstr "" +msgstr "Nilai array harus berupa byte tunggal." #: shared-bindings/microcontroller/Pin.c msgid "At most %d %q may be specified (not %d)" -msgstr "" +msgstr "Paling banyak %d %q dapat ditentukan (bukan %d)" #: supervisor/shared/safe_mode.c msgid "Attempted heap allocation when MicroPython VM not running." -msgstr "" +msgstr "Mencoba alokasi heap ketika MicroPython VM tidak berjalan." #: main.c msgid "Auto-reload is off.\n" @@ -371,7 +377,7 @@ msgstr "" #: shared-module/displayio/Display.c #: shared-module/framebufferio/FramebufferDisplay.c msgid "Below minimum frame rate" -msgstr "" +msgstr "Di bawah frame rate minimum" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c msgid "Bit clock and word select must share a clock unit" @@ -379,7 +385,7 @@ msgstr "Bit clock dan word harus memiliki kesamaan pada clock unit" #: shared-bindings/audiobusio/PDMIn.c msgid "Bit depth must be multiple of 8." -msgstr "" +msgstr "Kedalaman bit harus kelipatan 8." #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "Both RX and TX required for flow control" @@ -393,90 +399,89 @@ msgstr "Kedua pin harus mendukung hardware interrut" #: shared-bindings/framebufferio/FramebufferDisplay.c #: shared-bindings/rgbmatrix/RGBMatrix.c msgid "Brightness must be 0-1.0" -msgstr "" +msgstr "Brightness harus di antara 0-1.0" #: shared-bindings/supervisor/__init__.c msgid "Brightness must be between 0 and 255" -msgstr "" +msgstr "Brightness harus di antara 0 dan 255" #: shared-bindings/displayio/Display.c #: shared-bindings/framebufferio/FramebufferDisplay.c msgid "Brightness not adjustable" -msgstr "" +msgstr "Brightness tidak bisa disesuaikan" #: shared-bindings/_bleio/UUID.c #, c-format msgid "Buffer + offset too small %d %d %d" -msgstr "" +msgstr "Buffer + offset terlalu kecil %d %d %d" #: shared-module/usb_hid/Device.c #, c-format msgid "Buffer incorrect size. Should be %d bytes." -msgstr "" +msgstr "Ukuran buffer salah. Seharusnya %d byte." #: shared-bindings/displayio/Display.c #: shared-bindings/framebufferio/FramebufferDisplay.c msgid "Buffer is not a bytearray." -msgstr "" +msgstr "Buffer bukan bytearray." #: shared-bindings/displayio/Display.c #: shared-bindings/framebufferio/FramebufferDisplay.c msgid "Buffer is too small" -msgstr "" +msgstr "Buffer terlalu kecil" #: ports/nrf/common-hal/audiopwmio/PWMAudioOut.c #, c-format msgid "Buffer length %d too big. It must be less than %d" -msgstr "" +msgstr "Panjang buffer %d terlalu besar. Itu harus kurang dari %d" #: ports/atmel-samd/common-hal/sdioio/SDCard.c #: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" -msgstr "" +msgstr "Panjang buffer harus kelipatan 512" #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" -msgstr "" +msgstr "Buffer harus memiliki panjang setidaknya 1" #: ports/nrf/common-hal/_bleio/PacketBuffer.c msgid "Buffer too large and unable to allocate" -msgstr "" +msgstr "Buffer terlalu besar dan tidak dapat dialokasikan" #: shared-bindings/_bleio/PacketBuffer.c #, c-format msgid "Buffer too short by %d bytes" -msgstr "" +msgstr "Buffer terlalu pendek untuk %d byte" #: ports/atmel-samd/common-hal/displayio/ParallelBus.c #: ports/nrf/common-hal/displayio/ParallelBus.c -#, fuzzy, c-format +#, c-format msgid "Bus pin %d is already in use" -msgstr "DAC sudah digunakan" +msgstr "Pin bus %d sudah digunakan" #: shared-bindings/_bleio/UUID.c -#, fuzzy msgid "Byte buffer must be 16 bytes." -msgstr "buffers harus mempunyai panjang yang sama" +msgstr "Byte buffer harus 16 byte." #: shared-bindings/nvm/ByteArray.c msgid "Bytes must be between 0 and 255." -msgstr "" +msgstr "Bytes harus di antara 0 dan 255." #: shared-bindings/aesio/aes.c msgid "CBC blocks must be multiples of 16 bytes" -msgstr "" +msgstr "Blok CBC harus merupakan kelipatan 16 byte" #: py/objtype.c msgid "Call super().__init__() before accessing native object." -msgstr "" +msgstr "Panggil super().__init__() sebelum mengakses objek asli." #: ports/nrf/common-hal/_bleio/Characteristic.c msgid "Can't set CCCD on local Characteristic" -msgstr "" +msgstr "Tidak dapat mengatur CCCD pada Karakteristik lokal" #: shared-bindings/displayio/Bitmap.c shared-bindings/pulseio/PulseIn.c msgid "Cannot delete values" -msgstr "" +msgstr "Tidak dapat menghapus nilai" #: ports/atmel-samd/common-hal/digitalio/DigitalInOut.c #: ports/mimxrt10xx/common-hal/digitalio/DigitalInOut.c @@ -485,9 +490,8 @@ msgid "Cannot get pull while in output mode" msgstr "Tidak bisa mendapatkan pull pada saat mode output" #: ports/nrf/common-hal/microcontroller/Processor.c -#, fuzzy msgid "Cannot get temperature" -msgstr "Tidak bisa mendapatkan temperatur. status: 0x%02x" +msgstr "Tidak bisa mendapatkan suhu" #: shared-bindings/_bleio/Adapter.c msgid "Cannot have scan responses for extended, connectable advertisements." @@ -501,15 +505,15 @@ msgstr "" #: shared-module/bitbangio/SPI.c msgid "Cannot read without MISO pin." -msgstr "" +msgstr "Tidak dapat membaca tanpa pin MISO." #: shared-bindings/audiobusio/PDMIn.c msgid "Cannot record to a file" -msgstr "" +msgstr "Tidak dapat merekam ke file" #: shared-module/storage/__init__.c msgid "Cannot remount '/' when USB is active." -msgstr "" +msgstr "Tidak dapat memasang kembali '/' ketika USB aktif." #: ports/atmel-samd/common-hal/microcontroller/__init__.c #: ports/cxd56/common-hal/microcontroller/__init__.c @@ -521,11 +525,11 @@ msgstr "" #: shared-bindings/digitalio/DigitalInOut.c msgid "Cannot set value when direction is input." -msgstr "" +msgstr "Tidak dapat menetapkan nilai saat arah input." #: ports/mimxrt10xx/common-hal/busio/UART.c msgid "Cannot specify RTS or CTS in RS485 mode" -msgstr "" +msgstr "Tidak dapat menentukan RTS atau CTS dalam mode RS485" #: py/objslice.c msgid "Cannot subclass slice" From 01b2682842f47afbe27bbfcd0f00db96f764fea2 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Sat, 4 Jul 2020 02:42:15 +0000 Subject: [PATCH 23/73] Translated using Weblate (Indonesian) Currently translated at 29.1% (227 of 778 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/id/ --- locale/ID.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 390bfcd944..a0c255b233 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-02 15:29+0200\n" -"PO-Revision-Date: 2020-07-04 02:34+0000\n" -"Last-Translator: oon arfiandwi \n" +"PO-Revision-Date: 2020-07-04 02:45+0000\n" +"Last-Translator: Jeff Epler \n" "Language-Team: LANGUAGE \n" "Language: ID\n" "MIME-Version: 1.0\n" @@ -46,11 +46,11 @@ msgstr "" #: py/obj.c msgid " File \"%q\"" -msgstr "  File \"% q\"" +msgstr " File \"%q\"" #: py/obj.c msgid " File \"%q\", line %d" -msgstr "  File \"% q\", baris% d" +msgstr " File \"%q\", baris %d" #: main.c msgid " output:\n" From 36ef3476de945071da9c1274e5b4d8bcdcc13d13 Mon Sep 17 00:00:00 2001 From: ansonhe97 Date: Sat, 4 Jul 2020 11:21:58 +0800 Subject: [PATCH 24/73] Fix depreciate terminology --- ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c b/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c index 6668461f9b..254d730a89 100644 --- a/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c +++ b/ports/atmel-samd/boards/seeeduino_wio_terminal/pins.c @@ -36,7 +36,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PB02) }, { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PB03) }, { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PB00) }, - { MP_ROM_QSTR(MP_QSTR_SS), MP_ROM_PTR(&pin_PB01) }, + { MP_ROM_QSTR(MP_QSTR_CS), MP_ROM_PTR(&pin_PB01) }, // I2C pins { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA16) }, @@ -49,7 +49,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_TFT_MISO), MP_ROM_PTR(&pin_PB18) }, { MP_OBJ_NEW_QSTR(MP_QSTR_TFT_MOSI), MP_ROM_PTR(&pin_PB19) }, { MP_OBJ_NEW_QSTR(MP_QSTR_TFT_SCK), MP_ROM_PTR(&pin_PB20) }, - { MP_ROM_QSTR(MP_QSTR_TFT_SS), MP_ROM_PTR(&pin_PB21) }, + { MP_ROM_QSTR(MP_QSTR_TFT_CS), MP_ROM_PTR(&pin_PB21) }, { MP_ROM_QSTR(MP_QSTR_TFT_DC), MP_ROM_PTR(&pin_PC06) }, { MP_ROM_QSTR(MP_QSTR_TFT_BACKLIGHT), MP_ROM_PTR(&pin_PC05) }, { MP_ROM_QSTR(MP_QSTR_TFT_RESET), MP_ROM_PTR(&pin_PC07) }, @@ -58,7 +58,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_PC18) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_PC16) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SD_SCK), MP_ROM_PTR(&pin_PC17) }, - { MP_ROM_QSTR(MP_QSTR_SD_SS), MP_ROM_PTR(&pin_PC19) }, + { MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_PC19) }, { MP_ROM_QSTR(MP_QSTR_SD_DET), MP_ROM_PTR(&pin_PC21) }, // Switch From 94d90742dd02a7d4350a5f712baa81a3ee105fa9 Mon Sep 17 00:00:00 2001 From: DavePutz Date: Sat, 4 Jul 2020 21:15:38 -0500 Subject: [PATCH 25/73] Implementation of RTC continuous synchronization during pulsein Flags and code to implement RTC continuous synchronization during pulsein --- ports/atmel-samd/common-hal/pulseio/PulseIn.c | 10 ++++++++++ ports/atmel-samd/common-hal/pulseio/PulseIn.h | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/ports/atmel-samd/common-hal/pulseio/PulseIn.c b/ports/atmel-samd/common-hal/pulseio/PulseIn.c index 7ea20321b2..b825579dbe 100644 --- a/ports/atmel-samd/common-hal/pulseio/PulseIn.c +++ b/ports/atmel-samd/common-hal/pulseio/PulseIn.c @@ -125,6 +125,9 @@ void pulsein_interrupt_handler(uint8_t channel) { } void pulsein_reset() { +#ifdef SAMD21 + rtc_end_pulsein(); +#endif refcount = 0; pulsein_tc_index = 0xff; overflow_count = 0; @@ -221,6 +224,10 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t* self, // Set config will enable the EIC. pulsein_set_config(self, true); +#ifdef SAMD21 + rtc_start_pulsein(); +#endif + } bool common_hal_pulseio_pulsein_deinited(pulseio_pulsein_obj_t* self) { @@ -231,6 +238,9 @@ void common_hal_pulseio_pulsein_deinit(pulseio_pulsein_obj_t* self) { if (common_hal_pulseio_pulsein_deinited(self)) { return; } +#ifdef SAMD21 + rtc_end_pulsein(); +#endif set_eic_handler(self->channel, EIC_HANDLER_NO_INTERRUPT); turn_off_eic_channel(self->channel); reset_pin_number(self->pin); diff --git a/ports/atmel-samd/common-hal/pulseio/PulseIn.h b/ports/atmel-samd/common-hal/pulseio/PulseIn.h index 89b61a83ac..99358178f2 100644 --- a/ports/atmel-samd/common-hal/pulseio/PulseIn.h +++ b/ports/atmel-samd/common-hal/pulseio/PulseIn.h @@ -50,5 +50,11 @@ void pulsein_reset(void); void pulsein_interrupt_handler(uint8_t channel); void pulsein_timer_interrupt_handler(uint8_t index); +#ifdef SAMD21 +void rtc_set_continuous(void); +void rtc_start_pulsein(void); +void rtc_end_pulsein(void); +#endif + #endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PULSEIO_PULSEIN_H From ac33c3fe2c8f8bd866b205ecb844b2f1b9fffcdd Mon Sep 17 00:00:00 2001 From: DavePutz Date: Sat, 4 Jul 2020 21:17:19 -0500 Subject: [PATCH 26/73] Implementation of continuous synchronization of RTC during pulsein Flags and code to implement continuous synchronization of RTC during pulsein --- ports/atmel-samd/supervisor/port.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index 48bd3211b5..05ce0eb09b 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -91,6 +91,23 @@ #if CIRCUITPY_PEW #include "common-hal/_pew/PewPew.h" #endif +#ifdef SAMD21 +volatile bool hold_interrupt = false; + +void rtc_start_pulsein(void) { + rtc_set_continuous(); + hold_interrupt = true; +} +void rtc_end_pulsein(void) { + hold_interrupt = false; +} + +void rtc_set_continuous(void) { + while (RTC->MODE0.STATUS.bit.SYNCBUSY); + RTC->MODE0.READREQ.reg = RTC_READREQ_RREQ | RTC_READREQ_RCONT | 0x0010; + while (RTC->MODE0.STATUS.bit.SYNCBUSY); +} +#endif extern volatile bool mp_msc_enabled; @@ -489,6 +506,11 @@ void port_interrupt_after_ticks(uint32_t ticks) { // We'll interrupt sooner with an overflow. return; } +#ifdef SAMD21 + if (hold_interrupt == true) { + return; + } +#endif RTC->MODE0.COMP[0].reg = current_ticks + (ticks << 4); RTC->MODE0.INTFLAG.reg = RTC_MODE0_INTFLAG_CMP0; RTC->MODE0.INTENSET.reg = RTC_MODE0_INTENSET_CMP0; From d1c9bb30e2983f6e2728b4eb17579bd956680626 Mon Sep 17 00:00:00 2001 From: Tyler Crumpton Date: Mon, 6 Jul 2020 09:56:52 -0500 Subject: [PATCH 27/73] Fix minor typo in MicroPython libraries page --- docs/library/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/library/index.rst b/docs/library/index.rst index 6c2e576e7d..f847ead0af 100644 --- a/docs/library/index.rst +++ b/docs/library/index.rst @@ -70,7 +70,7 @@ CircuitPython/MicroPython-specific libraries Functionality specific to the CircuitPython/MicroPython implementation is available in the following libraries. These libraries may change signficantly or be removed in future -versions of CircuitPtyon. +versions of CircuitPython. .. toctree:: :maxdepth: 1 From 97355f8fb78c277df3940bf1e4385311d32f2662 Mon Sep 17 00:00:00 2001 From: Kamil Tomaszewski Date: Tue, 30 Jun 2020 14:50:09 +0200 Subject: [PATCH 28/73] spresense: update SDK to 2.0.1 --- ports/cxd56/Makefile | 20 +- ports/cxd56/README.md | 4 +- ports/cxd56/common-hal/pulseio/PWMOut.h | 2 +- ports/cxd56/configs/circuitpython/defconfig | 171 ++++++ ports/cxd56/spresense-exported-sdk | 2 +- ports/cxd56/tools/flash_writer.py | 580 +++++++++++++++++++ ports/cxd56/tools/xmodem.py | 590 ++++++++++++++++++++ 7 files changed, 1358 insertions(+), 11 deletions(-) create mode 100644 ports/cxd56/configs/circuitpython/defconfig create mode 100755 ports/cxd56/tools/flash_writer.py create mode 100644 ports/cxd56/tools/xmodem.py diff --git a/ports/cxd56/Makefile b/ports/cxd56/Makefile index 507d763312..3766d42228 100644 --- a/ports/cxd56/Makefile +++ b/ports/cxd56/Makefile @@ -62,6 +62,13 @@ SPRESENSE_SDK = spresense-exported-sdk FIRMWARE = $(SPRESENSE_SDK)/firmware +BOOTLOADER_FILES += \ + $(FIRMWARE)/AESM.espk \ + $(FIRMWARE)/dnnrt-mp.espk \ + $(FIRMWARE)/gnssfw.espk \ + $(FIRMWARE)/loader.espk \ + $(FIRMWARE)/sysutil.spk \ + # Platforms are: Linux, Darwin, MSYS, CYGWIN PLATFORM := $(firstword $(subst _, ,$(shell uname -s 2>/dev/null))) @@ -91,8 +98,7 @@ INC += \ -I$(SPRESENSE_SDK)/nuttx/arch \ -I$(SPRESENSE_SDK)/nuttx/arch/chip \ -I$(SPRESENSE_SDK)/nuttx/arch/os \ - -I$(SPRESENSE_SDK)/sdk/bsp/include \ - -I$(SPRESENSE_SDK)/sdk/bsp/include/sdk \ + -I$(SPRESENSE_SDK)/sdk/include \ CFLAGS += \ $(INC) \ @@ -125,7 +131,7 @@ LDFLAGS = \ --entry=__start \ -nostartfiles \ -nodefaultlibs \ - -T$(SPRESENSE_SDK)/nuttx/build/ramconfig.ld \ + -T$(SPRESENSE_SDK)/nuttx/scripts/ramconfig.ld \ --gc-sections \ -Map=$(BUILD)/output.map \ -o $(BUILD)/firmware.elf \ @@ -133,8 +139,8 @@ LDFLAGS = \ -u spresense_main \ -u board_timerhook \ $(BUILD)/libmpy.a \ - $(SPRESENSE_SDK)/sdk/libs/libapps.a \ - $(SPRESENSE_SDK)/sdk/libs/libsdk.a \ + $(SPRESENSE_SDK)/nuttx/libs/libapps.a \ + $(SPRESENSE_SDK)/nuttx/libs/libnuttx.a \ $(LIBM) \ $(LIBGCC) \ --end-group \ @@ -213,11 +219,11 @@ $(BUILD)/firmware.spk: $(BUILD)/firmware.elf $(MKSPK) flash: $(BUILD)/firmware.spk $(ECHO) "Writing $< to the board" - $(SPRESENSE_SDK)/sdk/tools/flash.sh -c $(SERIAL) $(BUILD)/firmware.spk + tools/flash_writer.py -s -c $(SERIAL) -d -b 115200 -n $(BUILD)/firmware.spk flash-bootloader: $(SPRESENSE_SDK) $(FIRMWARE) $(ECHO) "Writing loader to the board" - $(SPRESENSE_SDK)/sdk/tools/flash.sh -l $(FIRMWARE) -c $(SERIAL) + tools/flash_writer.py -s -c $(SERIAL) -d -b 115200 -n $(BOOTLOADER_FILES) include $(TOP)/py/mkrules.mk diff --git a/ports/cxd56/README.md b/ports/cxd56/README.md index ec284e7421..7fa439aacb 100644 --- a/ports/cxd56/README.md +++ b/ports/cxd56/README.md @@ -16,7 +16,7 @@ Board features: * Spresense is powered by Sony's CXD5602 microcontroller (ARM® Cortex®-M4F × 6 cores), with a clock speed of 156 MHz. -Currently, Spresense port does not support GNSS, Audio and Multicore. +Currently, Spresense port does not support Audio and Multicore. Refer to [developer.sony.com/develop/spresense/](https://developer.sony.com/develop/spresense/) for further information about this board. @@ -75,7 +75,7 @@ Bootloader information: * You have to accept the End User License Agreement to be able to download and use the Spresense bootloader binary. -Download the spresense binaries zip archive from: [Spresense firmware v1-4-000](https://developer.sony.com/file/download/download-spresense-firmware-v1-4-000) +Download the spresense binaries zip archive from: [Spresense firmware v2-0-000](https://developer.sony.com/file/download/download-spresense-firmware-v2-0-000) Extract spresense binaries in your PC to ports/spresense/spresense-exported-sdk/firmware/ diff --git a/ports/cxd56/common-hal/pulseio/PWMOut.h b/ports/cxd56/common-hal/pulseio/PWMOut.h index 57fc4181f0..694acc4e0c 100644 --- a/ports/cxd56/common-hal/pulseio/PWMOut.h +++ b/ports/cxd56/common-hal/pulseio/PWMOut.h @@ -27,7 +27,7 @@ #ifndef MICROPY_INCLUDED_CXD56_COMMON_HAL_PULSEIO_PWMOUT_H #define MICROPY_INCLUDED_CXD56_COMMON_HAL_PULSEIO_PWMOUT_H -#include +#include #include "common-hal/microcontroller/Pin.h" diff --git a/ports/cxd56/configs/circuitpython/defconfig b/ports/cxd56/configs/circuitpython/defconfig new file mode 100644 index 0000000000..268f7a68e9 --- /dev/null +++ b/ports/cxd56/configs/circuitpython/defconfig @@ -0,0 +1,171 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +# CONFIG_ARCH_LEDS is not set +# CONFIG_CXD56_I2C0_SCUSEQ is not set +# CONFIG_CXD56_SFC is not set +# CONFIG_CXD56_SPI3_SCUSEQ is not set +# CONFIG_MMCSD_MMCSUPPORT is not set +# CONFIG_MMCSD_SPI is not set +# CONFIG_MTD_SMART_WEAR_LEVEL is not set +# CONFIG_NET_IPv4 is not set +# CONFIG_NXFONTS_PACKEDMSFIRST is not set +# CONFIG_STANDARD_SERIAL is not set +CONFIG_ARCH="arm" +CONFIG_ARCH_BOARD="spresense" +CONFIG_ARCH_BOARD_SPRESENSE=y +CONFIG_ARCH_CHIP="cxd56xx" +CONFIG_ARCH_CHIP_CXD56XX=y +CONFIG_ARCH_INTERRUPTSTACK=2048 +CONFIG_ARCH_MATH_H=y +CONFIG_ARCH_STACKDUMP=y +CONFIG_ARMV7M_USEBASEPRI=y +CONFIG_ASMP=y +CONFIG_AUDIO=y +CONFIG_AUDIOUTILS_DSP_MOUNTPT="/mnt/sd0/BIN" +CONFIG_AUDIOUTILS_MANAGER=y +CONFIG_AUDIOUTILS_PLAYER=y +CONFIG_AUDIOUTILS_PLAYLIST=y +CONFIG_AUDIOUTILS_RECORDER=y +CONFIG_BOARDCTL_IOCTL=y +CONFIG_BOARDCTL_POWEROFF=y +CONFIG_BOARDCTL_RESET=y +CONFIG_BOARDCTL_UNIQUEID=y +CONFIG_BOARDCTL_UNIQUEID_SIZE=5 +CONFIG_BOARDCTL_USBDEVCTRL=y +CONFIG_BOARD_CRASHDUMP=y +CONFIG_BOARD_LATE_INITIALIZE=y +CONFIG_BOARD_LOOPSPERMSEC=5434 +CONFIG_BOOT_RUNFROMISRAM=y +CONFIG_BUILTIN=y +CONFIG_CLOCK_MONOTONIC=y +CONFIG_CXD56_ADC=y +CONFIG_CXD56_AUDIO=y +CONFIG_CXD56_BINARY=y +CONFIG_CXD56_CHARGER=y +CONFIG_CXD56_CISIF=y +CONFIG_CXD56_GAUGE=y +CONFIG_CXD56_GNSS=y +CONFIG_CXD56_HPADC0=y +CONFIG_CXD56_HPADC1=y +CONFIG_CXD56_I2C0=y +CONFIG_CXD56_I2C2=y +CONFIG_CXD56_I2C=y +CONFIG_CXD56_I2C_DRIVER=y +CONFIG_CXD56_IMAGEPROC=y +CONFIG_CXD56_LPADC=y +CONFIG_CXD56_PWM0=y +CONFIG_CXD56_PWM1=y +CONFIG_CXD56_PWM2=y +CONFIG_CXD56_PWM3=y +CONFIG_CXD56_PWM=y +CONFIG_CXD56_SDIO=y +CONFIG_CXD56_SPI3=y +CONFIG_CXD56_SPI5=y +CONFIG_CXD56_SPI=y +CONFIG_CXD56_UART2=y +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DNN_RT=y +CONFIG_DNN_RT_MP=y +CONFIG_DRIVERS_VIDEO=y +CONFIG_EXTERNALS_CMSIS=y +CONFIG_FAT_LCNAMES=y +CONFIG_FAT_LFN=y +CONFIG_FAT_MAXFNAME=64 +CONFIG_FS_FAT=y +CONFIG_FS_PROCFS=y +CONFIG_FS_PROCFS_REGISTER=y +CONFIG_FS_ROMFS=y +CONFIG_FS_SMARTFS=y +CONFIG_HAVE_CXX=y +CONFIG_HAVE_CXXINITIALIZE=y +CONFIG_LCD=y +CONFIG_LCD_NOGETRUN=y +CONFIG_LIBC_FLOATINGPOINT=y +CONFIG_LIBC_IPv4_ADDRCONV=y +CONFIG_LIBC_IPv6_ADDRCONV=y +CONFIG_LIB_KBDCODEC=y +CONFIG_MAX_WDOGPARMS=2 +CONFIG_MEMUTILS=y +CONFIG_MMCSD=y +CONFIG_MMCSD_SDIO=y +CONFIG_MTD=y +CONFIG_MTD_BYTE_WRITE=y +CONFIG_MTD_SMART=y +CONFIG_MTD_SMART_ENABLE_CRC=y +CONFIG_MTD_SMART_FSCK=y +CONFIG_MTD_SMART_SECTOR_SIZE=4096 +CONFIG_NAME_MAX=64 +CONFIG_NET=y +CONFIG_NETDEVICES=y +CONFIG_NETDEV_LATEINIT=y +CONFIG_NET_SOCKOPTS=y +CONFIG_NET_TCP_NO_STACK=y +CONFIG_NET_UDP_NO_STACK=y +CONFIG_NET_USRSOCK=y +CONFIG_NET_USRSOCK_TCP=y +CONFIG_NET_USRSOCK_UDP=y +CONFIG_NFILE_STREAMS=8 +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_DISABLE_LOSMART=y +CONFIG_NSH_LINELEN=160 +CONFIG_NSH_MAXARGUMENTS=14 +CONFIG_NSH_READLINE=y +CONFIG_PIPES=y +CONFIG_PREALLOC_MQ_MSGS=4 +CONFIG_PREALLOC_TIMERS=4 +CONFIG_PREALLOC_WDOGS=16 +CONFIG_PWM=y +CONFIG_RAM_SIZE=1572864 +CONFIG_RAM_START=0x0d000000 +CONFIG_READLINE_CMD_HISTORY=y +CONFIG_READLINE_CMD_HISTORY_LINELEN=160 +CONFIG_READLINE_TABCOMPLETION=y +CONFIG_RR_INTERVAL=200 +CONFIG_RTC=y +CONFIG_RTC_ALARM=y +CONFIG_RTC_DRIVER=y +CONFIG_RTC_FREQUENCY=32768 +CONFIG_RTC_HIRES=y +CONFIG_SCHED_CHILD_STATUS=y +CONFIG_SCHED_HAVE_PARENT=y +CONFIG_SCHED_HPWORK=y +CONFIG_SCHED_LPNTHREADS=3 +CONFIG_SCHED_LPWORK=y +CONFIG_SCHED_WAITPID=y +CONFIG_SDCLONE_DISABLE=y +CONFIG_SDIO_MUXBUS=y +CONFIG_SDK_AUDIO=y +CONFIG_SERIAL_TERMIOS=y +CONFIG_SMARTFS_ALIGNED_ACCESS=y +CONFIG_SMARTFS_MAXNAMLEN=30 +CONFIG_SMARTFS_MULTI_ROOT_DIRS=y +CONFIG_SPECIFIC_DRIVERS=y +CONFIG_SPI=y +CONFIG_SPRESENSE_EXTENSION=y +CONFIG_START_DAY=6 +CONFIG_START_MONTH=12 +CONFIG_START_YEAR=2011 +CONFIG_SYSTEMTICK_HOOK=y +CONFIG_SYSTEM_CLE=y +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_NSH_CXXINITIALIZE=y +CONFIG_UART1_RXBUFSIZE=1024 +CONFIG_UART1_SERIAL_CONSOLE=y +CONFIG_UART1_TXBUFSIZE=1024 +CONFIG_UART2_IFLOWCONTROL=y +CONFIG_UART2_OFLOWCONTROL=y +CONFIG_USBDEV=y +CONFIG_USBDEV_DMA=y +CONFIG_USBDEV_DUALSPEED=y +CONFIG_USEC_PER_TICK=1000 +CONFIG_USERMAIN_STACKSIZE=1064960 +CONFIG_USER_ENTRYPOINT="spresense_main" +CONFIG_VIDEO_ISX012=y +CONFIG_VIDEO_STREAM=y diff --git a/ports/cxd56/spresense-exported-sdk b/ports/cxd56/spresense-exported-sdk index 7f6568c7f4..c991d439fa 160000 --- a/ports/cxd56/spresense-exported-sdk +++ b/ports/cxd56/spresense-exported-sdk @@ -1 +1 @@ -Subproject commit 7f6568c7f4898cdb24a2f06040784a836050686e +Subproject commit c991d439fac9c23cfcac0da16fe8055f818d40a4 diff --git a/ports/cxd56/tools/flash_writer.py b/ports/cxd56/tools/flash_writer.py new file mode 100755 index 0000000000..840f10c32f --- /dev/null +++ b/ports/cxd56/tools/flash_writer.py @@ -0,0 +1,580 @@ +#! /usr/bin/env python3 + +# Copyright (C) 2018 Sony Semiconductor Solutions Corp. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. Neither the name NuttX nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED +# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# + +import time +import sys +import os +import struct +import glob +import fnmatch +import errno +import telnetlib +import argparse +import shutil +import subprocess +import re +import xmodem + +import_serial_module = True + +# When SDK release, plase set SDK_RELEASE as True. +SDK_RELEASE = False + +if SDK_RELEASE : + PRINT_RAW_COMMAND = False + REBOOT_AT_END = True +else : + PRINT_RAW_COMMAND = True + REBOOT_AT_END = True + +try: + import serial +except: + import_serial_module = False + +# supported environment various +# CXD56_PORT +# CXD56_TELNETSRV_PORT +# CXD56_TELNETSRV_IP + +PROTOCOL_SERIAL = 0 +PROTOCOL_TELNET = 1 + +MAX_DOT_COUNT = 70 + +# configure parameters and default value +class ConfigArgs: + PROTOCOL_TYPE = None + SERIAL_PORT = "COM1" + SERVER_PORT = 4569 + SERVER_IP = "localhost" + EOL = bytes([10]) + WAIT_RESET = True + AUTO_RESET = False + DTR_RESET = False + XMODEM_BAUD = 0 + NO_SET_BOOTABLE = False + PACKAGE_NAME = [] + FILE_NAME = [] + ERASE_NAME = [] + PKGSYS_NAME = [] + PKGAPP_NAME = [] + PKGUPD_NAME = [] + +ROM_MSG = [b"Welcome to nash"] +XMDM_MSG = "Waiting for XMODEM (CRC or 1K) transfer. Ctrl-X to cancel." + +class ConfigArgsLoader(): + def __init__(self): + self.parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter) + self.parser.add_argument("package_name", help="the name of the package to install", nargs='*') + self.parser.add_argument("-f", "--file", dest="file_name", help="save file", action='append') + self.parser.add_argument("-e", "--erase", dest="erase_name", help="erase file", action='append') + + self.parser.add_argument("-S", "--sys", dest="pkgsys_name", help="the name of the system package to install", action='append') + self.parser.add_argument("-A", "--app", dest="pkgapp_name", help="the name of the application package to install", action='append') + self.parser.add_argument("-U", "--upd", dest="pkgupd_name", help="the name of the updater package to install", action='append') + + self.parser.add_argument("-a", "--auto-reset", dest="auto_reset", + action="store_true", default=None, + help="try to auto reset develop board if possible") + self.parser.add_argument("-d", "--dtr-reset", dest="dtr_reset", + action="store_true", default=None, + help="try to auto reset develop board if possible") + self.parser.add_argument("-n", "--no-set-bootable", dest="no_set_bootable", + action="store_true", default=None, + help="not to set bootable") + + group = self.parser.add_argument_group() + group.add_argument("-i", "--server-ip", dest="server_ip", + help="the ip address connected to the telnet server") + group.add_argument("-p", "--server-port", dest="server_port", type=int, + help="the port connected to the telnet server") + + group = self.parser.add_argument_group() + group.add_argument("-c", "--serial-port", dest="serial_port", help="the serial port") + group.add_argument("-b", "--xmodem-baudrate", dest="xmodem_baud", help="Use the faster baudrate in xmodem") + + mutually_group = self.parser.add_mutually_exclusive_group() + mutually_group.add_argument("-t", "--telnet-protocol", dest="telnet_protocol", + action="store_true", default=None, + help="use the telnet protocol for binary transmission") + mutually_group.add_argument("-s", "--serial-protocol", dest="serial_protocol", + action="store_true", default=None, + help="use the serial port for binary transmission, default options") + + mutually_group2 = self.parser.add_mutually_exclusive_group() + mutually_group2.add_argument("-F", "--force-wait-reset", dest="wait_reset", + action="store_true", default=None, + help="force wait for pressing RESET button") + mutually_group2.add_argument("-N", "--no-wait-reset", dest="wait_reset", + action="store_false", default=None, + help="if possible, skip to wait for pressing RESET button") + + def update_config(self): + args = self.parser.parse_args() + + ConfigArgs.PACKAGE_NAME = args.package_name + ConfigArgs.FILE_NAME = args.file_name + ConfigArgs.ERASE_NAME = args.erase_name + ConfigArgs.PKGSYS_NAME = args.pkgsys_name + ConfigArgs.PKGAPP_NAME = args.pkgapp_name + ConfigArgs.PKGUPD_NAME = args.pkgupd_name + + # Get serial port or telnet server ip etc + if args.serial_protocol == True: + ConfigArgs.PROTOCOL_TYPE = PROTOCOL_SERIAL + elif args.telnet_protocol == True: + ConfigArgs.PROTOCOL_TYPE = PROTOCOL_TELNET + + if ConfigArgs.PROTOCOL_TYPE == None: + proto = os.environ.get("CXD56_PROTOCOL") + if proto is not None: + if 's' in proto: + ConfigArgs.PROTOCOL_TYPE = PROTOCOL_SERIAL + elif 't' in proto: + ConfigArgs.PROTOCOL_TYPE = PROTOCOL_TELNET + + if ConfigArgs.PROTOCOL_TYPE == None: + ConfigArgs.PROTOCOL_TYPE = PROTOCOL_SERIAL + + if ConfigArgs.PROTOCOL_TYPE == PROTOCOL_SERIAL: + if args.serial_port is not None: + ConfigArgs.SERIAL_PORT = args.serial_port + else: + # Get serial port from the environment + port = os.environ.get("CXD56_PORT") + if port is not None: + ConfigArgs.SERIAL_PORT = port + else: + print("CXD56_PORT is not set, Use " + ConfigArgs.SERIAL_PORT + ".") + else: + ConfigArgs.PROTOCOL_TYPE = PROTOCOL_TELNET + if args.server_port is not None: + ConfigArgs.SERVER_PORT = args.server_port + else: + port = os.environ.get("CXD56_TELNETSRV_PORT") + if port is not None: + ConfigArgs.SERVER_PORT = port + else: + print("CXD56_TELNETSRV_PORT is not set, Use " + str(ConfigArgs.SERVER_PORT) + ".") + if args.server_ip is not None: + ConfigArgs.SERVER_IP = args.server_ip + else: + ip = os.environ.get("CXD56_TELNETSRV_IP") + if ip is not None: + ConfigArgs.SERVER_IP = ip + else: + print("CXD56_TELNETSRV_IP is not set, Use " + ConfigArgs.SERVER_IP + ".") + + if args.xmodem_baud is not None: + ConfigArgs.XMODEM_BAUD = args.xmodem_baud + + if args.auto_reset is not None: + ConfigArgs.AUTO_RESET = args.auto_reset + + if args.dtr_reset is not None: + ConfigArgs.DTR_RESET = args.dtr_reset + + if args.no_set_bootable is not None: + ConfigArgs.NO_SET_BOOTABLE = args.no_set_bootable + + if args.wait_reset is not None: + ConfigArgs.WAIT_RESET = args.wait_reset + +class TelnetDev: + def __init__(self): + srv_ipaddr = ConfigArgs.SERVER_IP + srv_port = ConfigArgs.SERVER_PORT + self.recvbuf = b''; + try: + self.telnet = telnetlib.Telnet(host=srv_ipaddr, port=srv_port, timeout=10) + # There is a ack to be sent after connecting to the telnet server. + self.telnet.write(b"\xff") + except Exception as e: + print("Cannot connect to the server %s:%d" % (srv_ipaddr, srv_port)) + sys.exit(e.args[0]) + + def readline(self, size=None): + res = b'' + ch = b'' + while ch != ConfigArgs.EOL: + ch = self.getc_raw(1, timeout=0.1) + if ch == b'': + return res + res += ch + return res + + def getc_raw(self, size, timeout=1): + res = b'' + tm = time.monotonic() + while size > 0: + while self.recvbuf == b'': + self.recvbuf = self.telnet.read_eager() + if self.recvbuf == b'': + if (time.monotonic() - tm) > timeout: + return res + time.sleep(0.1) + res += self.recvbuf[0:1] + self.recvbuf = self.recvbuf[1:] + size -= 1 + return res + + def write(self, buffer): + self.telnet.write(buffer) + + def discard_inputs(self, timeout=1.0): + while True: + ch = self.getc_raw(1, timeout=timeout) + if ch == b'': + break + + def getc(self, size, timeout=1): + c = self.getc_raw(size, timeout) + return c + + def putc(self, buffer, timeout=1): + self.telnet.write(buffer) + self.show_progress(len(buffer)) + + def reboot(self): + # no-op + pass + + def set_file_size(self, filesize): + self.bytes_transfered = 0 + self.filesize = filesize + self.count = 0 + + def show_progress(self, sendsize): + if PRINT_RAW_COMMAND: + if self.count < MAX_DOT_COUNT: + self.bytes_transfered = self.bytes_transfered + sendsize + cur_count = int(self.bytes_transfered * MAX_DOT_COUNT / self.filesize) + if MAX_DOT_COUNT < cur_count: + cur_count = MAX_DOT_COUNT + for idx in range(cur_count - self.count): + print('#',end='') + sys.stdout.flush() + self.count = cur_count + if self.count == MAX_DOT_COUNT: + print("\n") + +class SerialDev: + def __init__(self): + if import_serial_module is False: + print("Cannot import serial module, maybe it's not install yet.") + print("\n", end="") + print("Please install python-setuptool by Cygwin installer.") + print("After that use easy_intall command to install serial module") + print(" $ cd tool/") + print(" $ python3 -m easy_install pyserial-2.7.tar.gz") + quit() + else: + port = ConfigArgs.SERIAL_PORT + try: + self.serial = serial.Serial(port, baudrate=115200, + parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, + bytesize=serial.EIGHTBITS, timeout=0.1) + except Exception as e: + print("Cannot open port : " + port) + sys.exit(e.args[0]) + + def readline(self, size=None): + return self.serial.readline(size) + + def write(self, buffer): + self.serial.write(buffer) + self.serial.flush() + + def discard_inputs(self, timeout=1.0): + time.sleep(timeout) + self.serial.flushInput() + + def getc(self, size, timeout=1): + self.serial.timeout = timeout + c = self.serial.read(size) + self.serial.timeout = 0.1 + return c + + def putc(self, buffer, timeout=1): + self.serial.timeout = timeout + self.serial.write(buffer) + self.serial.flush() + self.serial.timeout = 0.1 + self.show_progress(len(buffer)) + + # Note: windows platform dependent code + def putc_win(self, buffer, timeout=1): + self.serial.write(buffer) + self.show_progress(len(buffer)) + while True: + if self.serial.out_waiting == 0: + break + + def setBaudrate(self, baudrate): +# self.serial.setBaudrate(baudrate) + self.serial.baudrate = baudrate + + def reboot(self): + # Target Reset by DTR + self.serial.setDTR(False) + self.serial.setDTR(True) + self.serial.setDTR(False) + + def set_file_size(self, filesize): + self.bytes_transfered = 0 + self.filesize = filesize + self.count = 0 + + def show_progress(self, sendsize): + if PRINT_RAW_COMMAND: + if self.count < MAX_DOT_COUNT: + self.bytes_transfered = self.bytes_transfered + sendsize + cur_count = int(self.bytes_transfered * MAX_DOT_COUNT / self.filesize) + if MAX_DOT_COUNT < cur_count: + cur_count = MAX_DOT_COUNT + for idx in range(cur_count - self.count): + print('#',end='') + sys.stdout.flush() + self.count = cur_count + if self.count == MAX_DOT_COUNT: + print("\n") + +class FlashWriter: + def __init__(self, protocol_sel=PROTOCOL_SERIAL): + if protocol_sel == PROTOCOL_TELNET: + self.serial = TelnetDev() + else: + self.serial = SerialDev() + + def cancel_autoboot(self) : + boot_msg = '' + self.serial.reboot() # Target reboot before send 'r' + while boot_msg == '' : + rx = self.serial.readline().strip() + self.serial.write(b"r") # Send "r" key to avoid auto boot + for msg in ROM_MSG : + if msg in rx : + boot_msg = msg + break + while True : + rx = self.serial.readline().decode(errors="replace").strip() + if "updater" in rx : + # Workaround : Sometime first character is dropped. + # Send line feed as air shot before actual command. + self.serial.write(b"\n") # Send line feed + self.serial.discard_inputs()# Clear input buffer to sync + return boot_msg.decode(errors="ignore") + + def recv(self): + rx = self.serial.readline() + if PRINT_RAW_COMMAND : + serial_line = rx.decode(errors="replace") + if serial_line.strip() != "" and not serial_line.startswith(XMDM_MSG): + print(serial_line, end="") + return rx + + def wait(self, string): + while True: + rx = self.recv() + if string.encode() in rx: + time.sleep(0.1) + break + + def wait_for_prompt(self): + prompt_pat = re.compile(b"updater") + while True: + rx = self.recv() + if prompt_pat.search(rx): + time.sleep(0.1) + break + + def send(self, string): + self.serial.write(str(string).encode() + b"\n") + rx = self.serial.readline() + if PRINT_RAW_COMMAND : + print(rx.decode(errors="replace"), end="") + + def read_output(self, prompt_text) : + output = [] + while True : + rx = self.serial.readline() + if prompt_text.encode() in rx : + time.sleep(0.1) + break + if rx != "" : + output.append(rx.decode(errors="ignore").rstrip()) + return output + + def install_files(self, files, command) : + if ConfigArgs.XMODEM_BAUD: + command += " -b " + ConfigArgs.XMODEM_BAUD + if os.name == 'nt': + modem = xmodem.XMODEM(self.serial.getc, self.serial.putc_win, 'xmodem1k') + else: + modem = xmodem.XMODEM(self.serial.getc, self.serial.putc, 'xmodem1k') + for file in files: + with open(file, "rb") as bin : + self.send(command) + print("Install " + file) + self.wait(XMDM_MSG) + print("|0%" + + "-" * (int(MAX_DOT_COUNT / 2) - 6) + + "50%" + + "-" * (MAX_DOT_COUNT - int(MAX_DOT_COUNT / 2) - 5) + + "100%|") + if ConfigArgs.XMODEM_BAUD: + self.serial.setBaudrate(ConfigArgs.XMODEM_BAUD) + self.serial.discard_inputs() # Clear input buffer to sync + self.serial.set_file_size(os.path.getsize(file)) + modem.send(bin) + if ConfigArgs.XMODEM_BAUD: + self.serial.setBaudrate(115200) + self.wait_for_prompt() + + def save_files(self, files) : + if ConfigArgs.XMODEM_BAUD: + command = "save_file -b " + ConfigArgs.XMODEM_BAUD + " -x " + else: + command = "save_file -x " + if os.name == 'nt': + modem = xmodem.XMODEM(self.serial.getc, self.serial.putc_win, 'xmodem1k') + else: + modem = xmodem.XMODEM(self.serial.getc, self.serial.putc, 'xmodem1k') + for file in files: + with open(file, "rb") as bin : + self.send(command + os.path.basename(file)) + print("Save " + file) + self.wait(XMDM_MSG) + if ConfigArgs.XMODEM_BAUD: + self.serial.setBaudrate(ConfigArgs.XMODEM_BAUD) + self.serial.discard_inputs() # Clear input buffer to sync + self.serial.set_file_size(os.path.getsize(file)) + modem.send(bin) + if ConfigArgs.XMODEM_BAUD: + self.serial.setBaudrate(115200) + self.wait_for_prompt() + self.send("chmod d+rw " + os.path.basename(file)) + self.wait_for_prompt() + + def delete_files(self, files) : + for file in files : + self.delete_binary(file) + + def delete_binary(self, bin_name) : + self.send("rm " + bin_name) + self.wait_for_prompt() + +def main(): + try: + config_loader = ConfigArgsLoader() + config_loader.update_config() + except: + return errno.EINVAL + + # Wait to reset the board + writer = FlashWriter(ConfigArgs.PROTOCOL_TYPE) + + do_wait_reset = True + if ConfigArgs.AUTO_RESET: + if subprocess.call("cd " + sys.path[0] + "; ./reset_board.sh", shell=True) == 0: + print("auto reset board sucess!!") + do_wait_reset = False + bootrom_msg = writer.cancel_autoboot() + + if ConfigArgs.DTR_RESET: + do_wait_reset = False + bootrom_msg = writer.cancel_autoboot() + + if ConfigArgs.WAIT_RESET == False and do_wait_reset == True: + rx = writer.recv() + time.sleep(1) + for i in range(3): + writer.send("") + rx = writer.recv() + if "updater".encode() in rx: + # No need to wait for reset + do_wait_reset = False + break + time.sleep(1) + + if do_wait_reset: + # Wait to reset the board + print('Please press RESET button on target board') + sys.stdout.flush() + bootrom_msg = writer.cancel_autoboot() + + # Remove files + if ConfigArgs.ERASE_NAME : + print(">>> Remove exisiting files ...") + writer.delete_files(ConfigArgs.ERASE_NAME) + + # Install files + if ConfigArgs.PACKAGE_NAME or ConfigArgs.PKGSYS_NAME or ConfigArgs.PKGAPP_NAME or ConfigArgs.PKGUPD_NAME: + print(">>> Install files ...") + if ConfigArgs.PACKAGE_NAME : + writer.install_files(ConfigArgs.PACKAGE_NAME, "install") + if ConfigArgs.PKGSYS_NAME : + writer.install_files(ConfigArgs.PKGSYS_NAME, "install") + if ConfigArgs.PKGAPP_NAME : + writer.install_files(ConfigArgs.PKGAPP_NAME, "install") + if ConfigArgs.PKGUPD_NAME : + writer.install_files(ConfigArgs.PKGUPD_NAME, "install -k updater.key") + + # Save files + if ConfigArgs.FILE_NAME : + print(">>> Save files ...") + writer.save_files(ConfigArgs.FILE_NAME) + + # Set auto boot + if not ConfigArgs.NO_SET_BOOTABLE: + print(">>> Save Configuration to FlashROM ...") + writer.send("set bootable M0P") + writer.wait_for_prompt() + + # Sync all cached data to flash + writer.send("sync") + writer.wait_for_prompt() + + if REBOOT_AT_END : + print("Restarting the board ...") + writer.send("reboot") + + return 0 + +if __name__ == "__main__": + try: + sys.exit(main()) + except KeyboardInterrupt: + print("Canceled by keyboard interrupt.") + pass diff --git a/ports/cxd56/tools/xmodem.py b/ports/cxd56/tools/xmodem.py new file mode 100644 index 0000000000..c934300560 --- /dev/null +++ b/ports/cxd56/tools/xmodem.py @@ -0,0 +1,590 @@ +''' +=============================== + XMODEM file transfer protocol +=============================== + +.. $Id$ + +This is a literal implementation of XMODEM.TXT_, XMODEM1K.TXT_ and +XMODMCRC.TXT_, support for YMODEM and ZMODEM is pending. YMODEM should +be fairly easy to implement as it is a hack on top of the XMODEM +protocol using sequence bytes ``0x00`` for sending file names (and some +meta data). + +.. _XMODEM.TXT: doc/XMODEM.TXT +.. _XMODEM1K.TXT: doc/XMODEM1K.TXT +.. _XMODMCRC.TXT: doc/XMODMCRC.TXT + +Data flow example including error recovery +========================================== + +Here is a sample of the data flow, sending a 3-block message. +It includes the two most common line hits - a garbaged block, +and an ``ACK`` reply getting garbaged. ``CRC`` or ``CSUM`` represents +the checksum bytes. + +XMODEM 128 byte blocks +---------------------- + +:: + + SENDER RECEIVER + + <-- NAK + SOH 01 FE Data[128] CSUM --> + <-- ACK + SOH 02 FD Data[128] CSUM --> + <-- ACK + SOH 03 FC Data[128] CSUM --> + <-- ACK + SOH 04 FB Data[128] CSUM --> + <-- ACK + SOH 05 FA Data[100] CPMEOF[28] CSUM --> + <-- ACK + EOT --> + <-- ACK + +XMODEM-1k blocks, CRC mode +-------------------------- + +:: + + SENDER RECEIVER + + <-- C + STX 01 FE Data[1024] CRC CRC --> + <-- ACK + STX 02 FD Data[1024] CRC CRC --> + <-- ACK + STX 03 FC Data[1000] CPMEOF[24] CRC CRC --> + <-- ACK + EOT --> + <-- ACK + +Mixed 1024 and 128 byte Blocks +------------------------------ + +:: + + SENDER RECEIVER + + <-- C + STX 01 FE Data[1024] CRC CRC --> + <-- ACK + STX 02 FD Data[1024] CRC CRC --> + <-- ACK + SOH 03 FC Data[128] CRC CRC --> + <-- ACK + SOH 04 FB Data[100] CPMEOF[28] CRC CRC --> + <-- ACK + EOT --> + <-- ACK + +YMODEM Batch Transmission Session (1 file) +------------------------------------------ + +:: + + SENDER RECEIVER + <-- C (command:rb) + SOH 00 FF foo.c NUL[123] CRC CRC --> + <-- ACK + <-- C + SOH 01 FE Data[128] CRC CRC --> + <-- ACK + SOH 02 FC Data[128] CRC CRC --> + <-- ACK + SOH 03 FB Data[100] CPMEOF[28] CRC CRC --> + <-- ACK + EOT --> + <-- NAK + EOT --> + <-- ACK + <-- C + SOH 00 FF NUL[128] CRC CRC --> + <-- ACK + + +''' + +__author__ = 'Wijnand Modderman ' +__copyright__ = ['Copyright (c) 2010 Wijnand Modderman', + 'Copyright (c) 1981 Chuck Forsberg'] +__license__ = 'MIT' +__version__ = '0.3.2' + +import logging +import time +import sys +from functools import partial +import collections + +# Loggerr +log = logging.getLogger('xmodem') + +# Protocol bytes +SOH = bytes([0x01]) +STX = bytes([0x02]) +EOT = bytes([0x04]) +ACK = bytes([0x06]) +DLE = bytes([0x10]) +NAK = bytes([0x15]) +CAN = bytes([0x18]) +CRC = bytes([0x43]) # C + + +class XMODEM(object): + ''' + XMODEM Protocol handler, expects an object to read from and an object to + write to. + + >>> def getc(size, timeout=1): + ... return data or None + ... + >>> def putc(data, timeout=1): + ... return size or None + ... + >>> modem = XMODEM(getc, putc) + + + :param getc: Function to retreive bytes from a stream + :type getc: callable + :param putc: Function to transmit bytes to a stream + :type putc: callable + :param mode: XMODEM protocol mode + :type mode: string + :param pad: Padding character to make the packets match the packet size + :type pad: char + + ''' + + # crctab calculated by Mark G. Mendel, Network Systems Corporation + crctable = [ + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0, + ] + + def __init__(self, getc, putc, mode='xmodem', pad=b'\x1a'): + self.getc = getc + self.putc = putc + self.mode = mode + self.pad = pad + + def abort(self, count=2, timeout=60): + ''' + Send an abort sequence using CAN bytes. + ''' + for counter in range(0, count): + self.putc(CAN, timeout) + + def send(self, stream, retry=32, timeout=360, quiet=0, callback=None): + ''' + Send a stream via the XMODEM protocol. + + >>> stream = file('/etc/issue', 'rb') + >>> print modem.send(stream) + True + + Returns ``True`` upon succesful transmission or ``False`` in case of + failure. + + :param stream: The stream object to send data from. + :type stream: stream (file, etc.) + :param retry: The maximum number of times to try to resend a failed + packet before failing. + :type retry: int + :param timeout: The number of seconds to wait for a response before + timing out. + :type timeout: int + :param quiet: If 0, it prints info to stderr. If 1, it does not print any info. + :type quiet: int + :param callback: Reference to a callback function that has the + following signature. This is useful for + getting status updates while a xmodem + transfer is underway. + Expected callback signature: + def callback(total_packets, success_count, error_count) + :type callback: callable + ''' + + # initialize protocol + try: + packet_size = dict( + xmodem = 128, + xmodem1k = 1024, + )[self.mode] + except AttributeError: + raise ValueError("An invalid mode was supplied") + + error_count = 0 + crc_mode = 0 + cancel = 0 + while True: + char = self.getc(1) + if char: + if char == NAK: + crc_mode = 0 + break + elif char == CRC: + crc_mode = 1 + break + elif char == CAN: + if not quiet: + print('received CAN', file=sys.stderr) + if cancel: + return False + else: + cancel = 1 + else: + log.error('send ERROR expected NAK/CRC, got %s' % \ + (ord(char),)) + + error_count += 1 + if error_count >= retry: + self.abort(timeout=timeout) + return False + + # send data + error_count = 0 + success_count = 0 + total_packets = 0 + sequence = 1 + while True: + data = stream.read(packet_size) + if not data: + log.info('sending EOT') + # end of stream + break + total_packets += 1 + data = data.ljust(packet_size, self.pad) + if crc_mode: + crc = self.calc_crc(data) + else: + crc = self.calc_checksum(data) + + # emit packet + while True: + if packet_size == 128: + self.putc(SOH) + else: # packet_size == 1024 + self.putc(STX) + self.putc(bytes([sequence])) + self.putc(bytes([0xff - sequence])) + self.putc(data) + if crc_mode: + self.putc(bytes([crc >> 8])) + self.putc(bytes([crc & 0xff])) + else: + self.putc(bytes([crc])) + + char = self.getc(1, timeout) + if char == ACK: + success_count += 1 + if isinstance(callback, collections.Callable): + callback(total_packets, success_count, error_count) + break + if char == NAK: + error_count += 1 + if isinstance(callback, collections.Callable): + callback(total_packets, success_count, error_count) + if error_count >= retry: + # excessive amounts of retransmissions requested, + # abort transfer + self.abort(timeout=timeout) + log.warning('excessive NAKs, transfer aborted') + return False + + # return to loop and resend + continue + else: + log.error('Not ACK, Not NAK') + error_count += 1 + if isinstance(callback, collections.Callable): + callback(total_packets, success_count, error_count) + if error_count >= retry: + # excessive amounts of retransmissions requested, + # abort transfer + self.abort(timeout=timeout) + log.warning('excessive protocol errors, transfer aborted') + return False + + # return to loop and resend + continue + + # protocol error + self.abort(timeout=timeout) + log.error('protocol error') + return False + + # keep track of sequence + sequence = (sequence + 1) % 0x100 + + while True: + # end of transmission + self.putc(EOT) + + #An ACK should be returned + char = self.getc(1, timeout) + if char == ACK: + break + else: + error_count += 1 + if error_count >= retry: + self.abort(timeout=timeout) + log.warning('EOT was not ACKd, transfer aborted') + return False + + return True + + def recv(self, stream, crc_mode=1, retry=16, timeout=60, delay=1, quiet=0): + ''' + Receive a stream via the XMODEM protocol. + + >>> stream = file('/etc/issue', 'wb') + >>> print modem.recv(stream) + 2342 + + Returns the number of bytes received on success or ``None`` in case of + failure. + ''' + + # initiate protocol + error_count = 0 + char = 0 + cancel = 0 + while True: + # first try CRC mode, if this fails, + # fall back to checksum mode + if error_count >= retry: + self.abort(timeout=timeout) + return None + elif crc_mode and error_count < (retry / 2): + if not self.putc(CRC): + time.sleep(delay) + error_count += 1 + else: + crc_mode = 0 + if not self.putc(NAK): + time.sleep(delay) + error_count += 1 + + char = self.getc(1, timeout) + if not char: + error_count += 1 + continue + elif char == SOH: + #crc_mode = 0 + break + elif char == STX: + break + elif char == CAN: + if cancel: + return None + else: + cancel = 1 + else: + error_count += 1 + + # read data + error_count = 0 + income_size = 0 + packet_size = 128 + sequence = 1 + cancel = 0 + while True: + while True: + if char == SOH: + packet_size = 128 + break + elif char == STX: + packet_size = 1024 + break + elif char == EOT: + # We received an EOT, so send an ACK and return the received + # data length + self.putc(ACK) + return income_size + elif char == CAN: + # cancel at two consecutive cancels + if cancel: + return None + else: + cancel = 1 + else: + if not quiet: + print('recv ERROR expected SOH/EOT, got', ord(char), file=sys.stderr) + error_count += 1 + if error_count >= retry: + self.abort() + return None + # read sequence + error_count = 0 + cancel = 0 + seq1 = ord(self.getc(1)) + seq2 = 0xff - ord(self.getc(1)) + if seq1 == sequence and seq2 == sequence: + # sequence is ok, read packet + # packet_size + checksum + data = self.getc(packet_size + 1 + crc_mode, timeout) + if crc_mode: + csum = (ord(data[-2]) << 8) + ord(data[-1]) + data = data[:-2] + log.debug('CRC (%04x <> %04x)' % \ + (csum, self.calc_crc(data))) + valid = csum == self.calc_crc(data) + else: + csum = data[-1] + data = data[:-1] + log.debug('checksum (checksum(%02x <> %02x)' % \ + (ord(csum), self.calc_checksum(data))) + valid = ord(csum) == self.calc_checksum(data) + + # valid data, append chunk + if valid: + income_size += len(data) + stream.write(data) + self.putc(ACK) + sequence = (sequence + 1) % 0x100 + char = self.getc(1, timeout) + continue + else: + # consume data + self.getc(packet_size + 1 + crc_mode) + self.debug('expecting sequence %d, got %d/%d' % \ + (sequence, seq1, seq2)) + + # something went wrong, request retransmission + self.putc(NAK) + + def calc_checksum(self, data, checksum=0): + ''' + Calculate the checksum for a given block of data, can also be used to + update a checksum. + + >>> csum = modem.calc_checksum('hello') + >>> csum = modem.calc_checksum('world', csum) + >>> hex(csum) + '0x3c' + + ''' + return (sum(map(ord, data)) + checksum) % 256 + + def calc_crc(self, data, crc=0): + ''' + Calculate the Cyclic Redundancy Check for a given block of data, can + also be used to update a CRC. + + >>> crc = modem.calc_crc('hello') + >>> crc = modem.calc_crc('world', crc) + >>> hex(crc) + '0xd5e3' + + ''' + for char in data: + crc = (crc << 8) ^ self.crctable[((crc >> 8) ^ int(char)) & 0xff] + return crc & 0xffff + + +XMODEM1k = partial(XMODEM, mode='xmodem1k') + + +def run(): + import optparse + import subprocess + + parser = optparse.OptionParser(usage='%prog [] filename filename') + parser.add_option('-m', '--mode', default='xmodem', + help='XMODEM mode (xmodem, xmodem1k)') + + options, args = parser.parse_args() + if len(args) != 3: + parser.error('invalid arguments') + return 1 + + elif args[0] not in ('send', 'recv'): + parser.error('invalid mode') + return 1 + + def _func(so, si): + import select + import subprocess + + print('si', si) + print('so', so) + + def getc(size, timeout=3): + w,t,f = select.select([so], [], [], timeout) + if w: + data = so.read(size) + else: + data = None + + print('getc(', repr(data), ')') + return data + + def putc(data, timeout=3): + w,t,f = select.select([], [si], [], timeout) + if t: + si.write(data) + si.flush() + size = len(data) + else: + size = None + + print('putc(', repr(data), repr(size), ')') + return size + + return getc, putc + + def _pipe(*command): + pipe = subprocess.Popen(command, + stdout=subprocess.PIPE, stdin=subprocess.PIPE) + return pipe.stdout, pipe.stdin + + if args[0] == 'recv': + import io + getc, putc = _func(*_pipe('sz', '--xmodem', args[2])) + stream = open(args[1], 'wb') + xmodem = XMODEM(getc, putc, mode=options.mode) + status = xmodem.recv(stream, retry=8) + stream.close() + + elif args[0] == 'send': + getc, putc = _func(*_pipe('rz', '--xmodem', args[2])) + stream = open(args[1], 'rb') + xmodem = XMODEM(getc, putc, mode=options.mode) + status = xmodem.send(stream, retry=8) + stream.close() + +if __name__ == '__main__': + sys.exit(run()) From 2f80460a2f81dd036dd4aa158f935884a3b71cd0 Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Thu, 2 Jul 2020 22:57:58 +0200 Subject: [PATCH 29/73] Fluff M0: additional pins on version 1.3 of the board --- ports/atmel-samd/boards/fluff_m0/pins.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ports/atmel-samd/boards/fluff_m0/pins.c b/ports/atmel-samd/boards/fluff_m0/pins.c index d80d46b895..ac7811328b 100644 --- a/ports/atmel-samd/boards/fluff_m0/pins.c +++ b/ports/atmel-samd/boards/fluff_m0/pins.c @@ -30,6 +30,8 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) }, { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) }, { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA17) }, + { MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_PA27) }, + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PA28) }, { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, From 9dbb6fdb38c2089ad80666bc75986201d15b46a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Elio=20Petten=C3=B2?= Date: Wed, 3 Jun 2020 23:25:19 +0100 Subject: [PATCH 30/73] Add a `.mailmap` file to collate together multiple author entries. This reduces the 484 separate authors into 405, removing some obviously invalid addresses on the way. --- .mailmap | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 .mailmap diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000000..f9d7f47a16 --- /dev/null +++ b/.mailmap @@ -0,0 +1,112 @@ +# SPDX-FileCopyrightText: 2020 Diego Elio Pettenò +# +# SPDX-License-Identifier: Unlicense + +Alexander Steffen +Alexander Steffen +Alexander Steffen +Benjamin Vernoux +Brent Rubell +Brent Rubell +Brent Rubell +Carlos +Chris Packham +Chris Packham +Damiano Mazzella +Damien George +Dan Halbert +Dan Halbert +Daniel Pollard +Daniel Pollard +Daniel Tralamazza +Daniel Tralamazza +David Glaude +David Glaude +George Waters +George Waters +Ha Thach +Henrik Sölver +Ilya Dmitrichenko +Ilya Dmitrichenko +Jason Pecor <14111408+jpecor@users.noreply.github.com> +Jeff Epler +Jeff Epler +Jeff Epler +Jeff Epler +Jerry Needell +Joe Bakalor +Josh Klar +Josh Klar +Juan Biondi +Juan Biondi +KalbeAbbas +KalbeAbbas +Kamil Tomaszewski +Kamil Tomaszewski <46525824+kamtom480@users.noreply.github.com> +Kattni +Kattni Rembor +Kenny +Kenny <3454741+WarriorOfWire@users.noreply.github.com> +Kevin Townsend +Kevin Townsend +Krzysztof Blazewicz +Krzysztof Blazewicz +Li Weiwei +Li Weiwei +Limor "Ladyada" Fried +Limor "Ladyada" Fried +Lucian Copeland +Lucian Copeland +Mark Olsson +Mark Olsson +Matt Land +Matt Land +Matt Wozniski +Matt Wozniski +Melissa LeBlanc-Williams +Melissa LeBlanc-Williams +Metallicow +Metallicow +Peter Hinch +Peter Hinch +Radomir Dopieralski +Radomir Dopieralski +Rafa Gould +Rafa Gould <50337143+rafa-gould@users.noreply.github.com> +Ryan Shaw +Ryan Shaw +Sabas +Sabas +Sabas +Scott Shawcroft +Scott Shawcroft +Scott Shawcroft +Scott Shawcroft +Scott Shawcroft +Sebastian Plamauer +Sebastian Plamauer +Senuros +Senuros +Stewart Colborne +Stewart Colborne +TG-Techie +TG-Techie <39284876+TG-Techie@users.noreply.github.com> +Thea Flowers +Thea Flowers +Tobias Badertscher +Tobias Badertscher +danicampora +danicampora +dherrada +dherrada <33632497+dherrada@users.noreply.github.com> +dherrada <=> +glennrub +retoc +retoc +siddacious +siddacious +siddacious +sommersoft +sommersoft +stijn +stijn From f4a1cfb11667e6ded52249f6a59895cddea9b7a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Elio=20Petten=C3=B2?= Date: Wed, 3 Jun 2020 23:27:48 +0100 Subject: [PATCH 31/73] Add LICENSES as identified by REUSE tooling. --- LICENSES/BSD-3-Clause.txt | 26 +++ LICENSES/CC-BY-4.0.txt | 324 ++++++++++++++++++++++++++++++++++++++ LICENSES/MIT.txt | 19 +++ LICENSES/Unlicense.txt | 20 +++ 4 files changed, 389 insertions(+) create mode 100644 LICENSES/BSD-3-Clause.txt create mode 100644 LICENSES/CC-BY-4.0.txt create mode 100644 LICENSES/MIT.txt create mode 100644 LICENSES/Unlicense.txt diff --git a/LICENSES/BSD-3-Clause.txt b/LICENSES/BSD-3-Clause.txt new file mode 100644 index 0000000000..0741db789e --- /dev/null +++ b/LICENSES/BSD-3-Clause.txt @@ -0,0 +1,26 @@ +Copyright (c) . All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, +this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSES/CC-BY-4.0.txt b/LICENSES/CC-BY-4.0.txt new file mode 100644 index 0000000000..3f92dfc5fd --- /dev/null +++ b/LICENSES/CC-BY-4.0.txt @@ -0,0 +1,324 @@ +Creative Commons Attribution 4.0 International Creative Commons Corporation +("Creative Commons") is not a law firm and does not provide legal services +or legal advice. Distribution of Creative Commons public licenses does not +create a lawyer-client or other relationship. Creative Commons makes its licenses +and related information available on an "as-is" basis. Creative Commons gives +no warranties regarding its licenses, any material licensed under their terms +and conditions, or any related information. Creative Commons disclaims all +liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions +that creators and other rights holders may use to share original works of +authorship and other material subject to copyright and certain other rights +specified in the public license below. The following considerations are for +informational purposes only, are not exhaustive, and do not form part of our +licenses. + +Considerations for licensors: Our public licenses are intended for use by +those authorized to give the public permission to use material in ways otherwise +restricted by copyright and certain other rights. Our licenses are irrevocable. +Licensors should read and understand the terms and conditions of the license +they choose before applying it. Licensors should also secure all rights necessary +before applying our licenses so that the public can reuse the material as +expected. Licensors should clearly mark any material not subject to the license. +This includes other CC-licensed material, or material used under an exception +or limitation to copyright. More considerations for licensors : wiki.creativecommons.org/Considerations_for_licensors + +Considerations for the public: By using one of our public licenses, a licensor +grants the public permission to use the licensed material under specified +terms and conditions. If the licensor's permission is not necessary for any +reason–for example, because of any applicable exception or limitation to copyright–then +that use is not regulated by the license. Our licenses grant only permissions +under copyright and certain other rights that a licensor has authority to +grant. Use of the licensed material may still be restricted for other reasons, +including because others have copyright or other rights in the material. A +licensor may make special requests, such as asking that all changes be marked +or described. Although not required by our licenses, you are encouraged to +respect those requests where reasonable. More considerations for the public +: wiki.creativecommons.org/Considerations_for_licensees Creative Commons Attribution +4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to +be bound by the terms and conditions of this Creative Commons Attribution +4.0 International Public License ("Public License"). To the extent this Public +License may be interpreted as a contract, You are granted the Licensed Rights +in consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the Licensor +receives from making the Licensed Material available under these terms and +conditions. + +Section 1 – Definitions. + +a. Adapted Material means material subject to Copyright and Similar Rights +that is derived from or based upon the Licensed Material and in which the +Licensed Material is translated, altered, arranged, transformed, or otherwise +modified in a manner requiring permission under the Copyright and Similar +Rights held by the Licensor. For purposes of this Public License, where the +Licensed Material is a musical work, performance, or sound recording, Adapted +Material is always produced where the Licensed Material is synched in timed +relation with a moving image. + +b. Adapter's License means the license You apply to Your Copyright and Similar +Rights in Your contributions to Adapted Material in accordance with the terms +and conditions of this Public License. + +c. Copyright and Similar Rights means copyright and/or similar rights closely +related to copyright including, without limitation, performance, broadcast, +sound recording, and Sui Generis Database Rights, without regard to how the +rights are labeled or categorized. For purposes of this Public License, the +rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + +d. Effective Technological Measures means those measures that, in the absence +of proper authority, may not be circumvented under laws fulfilling obligations +under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, +and/or similar international agreements. + +e. Exceptions and Limitations means fair use, fair dealing, and/or any other +exception or limitation to Copyright and Similar Rights that applies to Your +use of the Licensed Material. + +f. Licensed Material means the artistic or literary work, database, or other +material to which the Licensor applied this Public License. + +g. Licensed Rights means the rights granted to You subject to the terms and +conditions of this Public License, which are limited to all Copyright and +Similar Rights that apply to Your use of the Licensed Material and that the +Licensor has authority to license. + +h. Licensor means the individual(s) or entity(ies) granting rights under this +Public License. + +i. Share means to provide material to the public by any means or process that +requires permission under the Licensed Rights, such as reproduction, public +display, public performance, distribution, dissemination, communication, or +importation, and to make material available to the public including in ways +that members of the public may access the material from a place and at a time +individually chosen by them. + +j. Sui Generis Database Rights means rights other than copyright resulting +from Directive 96/9/EC of the European Parliament and of the Council of 11 +March 1996 on the legal protection of databases, as amended and/or succeeded, +as well as other essentially equivalent rights anywhere in the world. + +k. You means the individual or entity exercising the Licensed Rights under +this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + +1. Subject to the terms and conditions of this Public License, the Licensor +hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, +irrevocable license to exercise the Licensed Rights in the Licensed Material +to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + +2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions +and Limitations apply to Your use, this Public License does not apply, and +You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + +4. Media and formats; technical modifications allowed. The Licensor authorizes +You to exercise the Licensed Rights in all media and formats whether now known +or hereafter created, and to make technical modifications necessary to do +so. The Licensor waives and/or agrees not to assert any right or authority +to forbid You from making technical modifications necessary to exercise the +Licensed Rights, including technical modifications necessary to circumvent +Effective Technological Measures. For purposes of this Public License, simply +making modifications authorized by this Section 2(a)(4) never produces Adapted +Material. + + 5. Downstream recipients. + +A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed +Material automatically receives an offer from the Licensor to exercise the +Licensed Rights under the terms and conditions of this Public License. + +B. No downstream restrictions. You may not offer or impose any additional +or different terms or conditions on, or apply any Effective Technological +Measures to, the Licensed Material if doing so restricts exercise of the Licensed +Rights by any recipient of the Licensed Material. + +6. No endorsement. Nothing in this Public License constitutes or may be construed +as permission to assert or imply that You are, or that Your use of the Licensed +Material is, connected with, or sponsored, endorsed, or granted official status +by, the Licensor or others designated to receive attribution as provided in +Section 3(a)(1)(A)(i). + + b. Other rights. + +1. Moral rights, such as the right of integrity, are not licensed under this +Public License, nor are publicity, privacy, and/or other similar personality +rights; however, to the extent possible, the Licensor waives and/or agrees +not to assert any such rights held by the Licensor to the limited extent necessary +to allow You to exercise the Licensed Rights, but not otherwise. + +2. Patent and trademark rights are not licensed under this Public License. + +3. To the extent possible, the Licensor waives any right to collect royalties +from You for the exercise of the Licensed Rights, whether directly or through +a collecting society under any voluntary or waivable statutory or compulsory +licensing scheme. In all other cases the Licensor expressly reserves any right +to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following +conditions. + + a. Attribution. + +1. If You Share the Licensed Material (including in modified form), You must: + +A. retain the following if it is supplied by the Licensor with the Licensed +Material: + +i. identification of the creator(s) of the Licensed Material and any others +designated to receive attribution, in any reasonable manner requested by the +Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + +v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + +B. indicate if You modified the Licensed Material and retain an indication +of any previous modifications; and + +C. indicate the Licensed Material is licensed under this Public License, and +include the text of, or the URI or hyperlink to, this Public License. + +2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner +based on the medium, means, and context in which You Share the Licensed Material. +For example, it may be reasonable to satisfy the conditions by providing a +URI or hyperlink to a resource that includes the required information. + +3. If requested by the Licensor, You must remove any of the information required +by Section 3(a)(1)(A) to the extent reasonably practicable. + +4. If You Share Adapted Material You produce, the Adapter's License You apply +must not prevent recipients of the Adapted Material from complying with this +Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to +Your use of the Licensed Material: + +a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, +reuse, reproduce, and Share all or a substantial portion of the contents of +the database; + +b. if You include all or a substantial portion of the database contents in +a database in which You have Sui Generis Database Rights, then the database +in which You have Sui Generis Database Rights (but not its individual contents) +is Adapted Material; and + +c. You must comply with the conditions in Section 3(a) if You Share all or +a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not replace +Your obligations under this Public License where the Licensed Rights include +other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + +a. Unless otherwise separately undertaken by the Licensor, to the extent possible, +the Licensor offers the Licensed Material as-is and as-available, and makes +no representations or warranties of any kind concerning the Licensed Material, +whether express, implied, statutory, or other. This includes, without limitation, +warranties of title, merchantability, fitness for a particular purpose, non-infringement, +absence of latent or other defects, accuracy, or the presence or absence of +errors, whether or not known or discoverable. Where disclaimers of warranties +are not allowed in full or in part, this disclaimer may not apply to You. + +b. To the extent possible, in no event will the Licensor be liable to You +on any legal theory (including, without limitation, negligence) or otherwise +for any direct, special, indirect, incidental, consequential, punitive, exemplary, +or other losses, costs, expenses, or damages arising out of this Public License +or use of the Licensed Material, even if the Licensor has been advised of +the possibility of such losses, costs, expenses, or damages. Where a limitation +of liability is not allowed in full or in part, this limitation may not apply +to You. + +c. The disclaimer of warranties and limitation of liability provided above +shall be interpreted in a manner that, to the extent possible, most closely +approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + +a. This Public License applies for the term of the Copyright and Similar Rights +licensed here. However, if You fail to comply with this Public License, then +Your rights under this Public License terminate automatically. + +b. Where Your right to use the Licensed Material has terminated under Section +6(a), it reinstates: + +1. automatically as of the date the violation is cured, provided it is cured +within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + +c. For the avoidance of doubt, this Section 6(b) does not affect any right +the Licensor may have to seek remedies for Your violations of this Public +License. + +d. For the avoidance of doubt, the Licensor may also offer the Licensed Material +under separate terms or conditions or stop distributing the Licensed Material +at any time; however, doing so will not terminate this Public License. + + e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + +a. The Licensor shall not be bound by any additional or different terms or +conditions communicated by You unless expressly agreed. + +b. Any arrangements, understandings, or agreements regarding the Licensed +Material not stated herein are separate from and independent of the terms +and conditions of this Public License. + +Section 8 – Interpretation. + +a. For the avoidance of doubt, this Public License does not, and shall not +be interpreted to, reduce, limit, restrict, or impose conditions on any use +of the Licensed Material that could lawfully be made without permission under +this Public License. + +b. To the extent possible, if any provision of this Public License is deemed +unenforceable, it shall be automatically reformed to the minimum extent necessary +to make it enforceable. If the provision cannot be reformed, it shall be severed +from this Public License without affecting the enforceability of the remaining +terms and conditions. + +c. No term or condition of this Public License will be waived and no failure +to comply consented to unless expressly agreed to by the Licensor. + +d. Nothing in this Public License constitutes or may be interpreted as a limitation +upon, or waiver of, any privileges and immunities that apply to the Licensor +or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative +Commons may elect to apply one of its public licenses to material it publishes +and in those instances will be considered the "Licensor." The text of the +Creative Commons public licenses is dedicated to the public domain under the +CC0 Public Domain Dedication. Except for the limited purpose of indicating +that material is shared under a Creative Commons public license or as otherwise +permitted by the Creative Commons policies published at creativecommons.org/policies, +Creative Commons does not authorize the use of the trademark "Creative Commons" +or any other trademark or logo of Creative Commons without its prior written +consent including, without limitation, in connection with any unauthorized +modifications to any of its public licenses or any other arrangements, understandings, +or agreements concerning use of licensed material. For the avoidance of doubt, +this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt new file mode 100644 index 0000000000..204b93da48 --- /dev/null +++ b/LICENSES/MIT.txt @@ -0,0 +1,19 @@ +MIT License Copyright (c) + +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 (including the next +paragraph) 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. diff --git a/LICENSES/Unlicense.txt b/LICENSES/Unlicense.txt new file mode 100644 index 0000000000..24a8f90199 --- /dev/null +++ b/LICENSES/Unlicense.txt @@ -0,0 +1,20 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or distribute +this software, either in source code form or as a compiled binary, for any +purpose, commercial or non-commercial, and by any means. + +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and +to the detriment of our heirs and successors. We intend this dedication to +be an overt act of relinquishment in perpetuity of all present and future +rights to this software under copyright law. + +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 +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. For more information, +please refer to From eed7e84d94efe038f8af13bbfcb889bb9cc2f363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Elio=20Petten=C3=B2?= Date: Thu, 4 Jun 2020 08:49:24 +0100 Subject: [PATCH 32/73] Add an explicit SPDX license file for ter-u12n. While the .bdf file already includes copyright information, this makes it visible as part of REUSE SPDX identification. --- LICENSES/OFL-1.1.txt | 90 ++++++++++++++++++++++++++++++++ tools/fonts/ter-u12n.bdf.license | 3 ++ 2 files changed, 93 insertions(+) create mode 100644 LICENSES/OFL-1.1.txt create mode 100644 tools/fonts/ter-u12n.bdf.license diff --git a/LICENSES/OFL-1.1.txt b/LICENSES/OFL-1.1.txt new file mode 100644 index 0000000000..084c9628a6 --- /dev/null +++ b/LICENSES/OFL-1.1.txt @@ -0,0 +1,90 @@ +Copyright (c) , (), + +with Reserved Font Name . This Font Software is licensed +under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL +SIL OPEN FONT LICENSE + +Version 1.1 - 26 February 2007 + +PREAMBLE + +The goals of the Open Font License (OFL) are to stimulate worldwide development +of collaborative font projects, to support the font creation efforts of academic +and linguistic communities, and to provide a free and open framework in which +fonts may be shared and improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and redistributed +freely as long as they are not sold by themselves. The fonts, including any +derivative works, can be bundled, embedded, redistributed and/or sold with +any software provided that any reserved names are not used by derivative works. +The fonts and derivatives, however, cannot be released under any other type +of license. The requirement for fonts to remain under this license does not +apply to any document created using the fonts or their derivatives. + +DEFINITIONS + +"Font Software" refers to the set of files released by the Copyright Holder(s) +under this license and clearly marked as such. This may include source files, +build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the copyright +statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or +substituting — in part or in whole — any of the components of the Original +Version, by changing formats or by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer or +other person who contributed to the Font Software. + +PERMISSION & CONDITIONS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the Font Software, to use, study, copy, merge, embed, modify, redistribute, +and sell modified and unmodified copies of the Font Software, subject to the +following conditions: + +1) Neither the Font Software nor any of its individual components, in Original +or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, redistributed +and/or sold with any software, provided that each copy contains the above +copyright notice and this license. These can be included either as stand-alone +text files, human-readable headers or in the appropriate machine-readable +metadata fields within text or binary files as long as those fields can be +easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) +unless explicit written permission is granted by the corresponding Copyright +Holder. This restriction only applies to the primary font name as presented +to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software +shall not be used to promote, endorse or advertise any Modified Version, except +to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) +or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be +distributed entirely under this license, and must not be distributed under +any other license. The requirement for fonts to remain under this license +does not apply to any document created using the Font Software. + +TERMINATION + +This license becomes null and void if any of the above conditions are not met. + +DISCLAIMER + +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, +TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE +FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, +INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT +SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/tools/fonts/ter-u12n.bdf.license b/tools/fonts/ter-u12n.bdf.license new file mode 100644 index 0000000000..a40e8711de --- /dev/null +++ b/tools/fonts/ter-u12n.bdf.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Dimitar Toshkov Zhekov + +SPDX-License-Identifier: OFL-1.1 From d7e57259f9d6c73dfba46a4710625bde4e50979a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Elio=20Petten=C3=B2?= Date: Thu, 4 Jun 2020 08:59:49 +0100 Subject: [PATCH 33/73] Add copyright and license information to translations. Since these have multiple copyright lines already, preserve those in addition to the generic 'contributors' line, but make them appear as SPDX lines. --- locale/ID.po | 7 +++---- locale/circuitpython.pot | 8 +++----- locale/cs.po | 7 +++---- locale/de_DE.po | 7 +++---- locale/en_US.po | 7 +++---- locale/en_x_pirate.po | 7 +++---- locale/es.po | 12 +++++++----- locale/fil.po | 7 +++---- locale/fr.po | 10 +++++----- locale/it_IT.po | 9 ++++----- locale/ko.po | 9 ++++----- locale/nl.po | 7 +++---- locale/pl.po | 8 ++++---- locale/pt_BR.po | 7 +++---- locale/sv.po | 7 +++---- locale/zh_Latn_pinyin.po | 8 ++++---- 16 files changed, 58 insertions(+), 69 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index a0c255b233..11834ec133 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -1,8 +1,7 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 6e32ebab98..5abccd4bef 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -1,9 +1,7 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # -#, fuzzy +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/cs.po b/locale/cs.po index dfe1cfa384..bc4e3df05b 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -1,8 +1,7 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/de_DE.po b/locale/de_DE.po index f2d9258566..13afa135d5 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -1,8 +1,7 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: \n" diff --git a/locale/en_US.po b/locale/en_US.po index c89772779e..de9fa6347d 100644 --- a/locale/en_US.po +++ b/locale/en_US.po @@ -1,8 +1,7 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: \n" diff --git a/locale/en_x_pirate.po b/locale/en_x_pirate.po index 16f2b3669a..40b0b314c4 100644 --- a/locale/en_x_pirate.po +++ b/locale/en_x_pirate.po @@ -1,8 +1,7 @@ -# Pirate (English) Translation -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: \n" diff --git a/locale/es.po b/locale/es.po index 423d673617..b3963e98b4 100644 --- a/locale/es.po +++ b/locale/es.po @@ -1,8 +1,10 @@ -# Spanish translation. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# Carlos Diaz , 2018. -# Juan Biondi , 2018. +# SPDX-FileCopyrightText: 2018 Carlos Diaz +# SPDX-FileCopyrightText: 2018 Juan Biondi +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT +#, fuzzy + msgid "" msgstr "" "Project-Id-Version: \n" diff --git a/locale/fil.po b/locale/fil.po index 3489316130..b5058c8722 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -1,8 +1,7 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: \n" diff --git a/locale/fr.po b/locale/fr.po index 2db7f47222..d292fad249 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -1,9 +1,9 @@ -# French translation. -# Copyright (C) 2018 -# This file is distributed under the same license as the PACKAGE package. -# Pierrick Couturier , 2018. -# Olivier Deveault +# SPDX-FileCopyrightText: 2018 Pierrick Couturier +# SPDX-FileCopyrightText: 2018 Olivier Deveault +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: 0.1\n" diff --git a/locale/it_IT.po b/locale/it_IT.po index bd49e2388b..6bc322a537 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -1,9 +1,8 @@ -# Italian translation. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# Enrico Paganin , 2018 +# SPDX-FileCopyrightText: 2018 Enrico Paganin +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # -#, fuzzy +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/ko.po b/locale/ko.po index 4bd56cde1e..c0dffe1d5d 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -1,9 +1,8 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# 글라파, 2019. +# SPDX-FileCopyrightText: 2019 글라파 +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # -#, fuzzy +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/nl.po b/locale/nl.po index 34e9c835a2..69d739a22f 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -1,8 +1,7 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/pl.po b/locale/pl.po index 7724481314..b100ffae08 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -1,8 +1,8 @@ -# Adafruit CircuitPython Polish Translation -# Copyright (C) 2019 -# This file is distributed under the same license as the CircuitPython package. -# Radomir Dopieralski , 2019. +# SPDX-FileCopyrightText: 2019 Radomir Dopieralski +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: \n" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index f25d2d86e6..d6e2e83f5d 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -1,8 +1,7 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/sv.po b/locale/sv.po index 3ec91c19ee..a8579794a4 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -1,8 +1,7 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index db41adb536..e8898d79e1 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -1,8 +1,8 @@ -# Adafruit CircuitPython Chinese Hanyu Pinyin Translation -# Copyright (C) 2019 -# This file is distributed under the same license as the CircuitPython package. -# @hexthat#2155, 2019. +# SPDX-FileCopyrightText: 2019 @hexthat#2155 +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # +# SPDX-License-Identifier: MIT + msgid "" msgstr "" "Project-Id-Version: circuitpython-cn\n" From 34b4993d63a6b576f29d624385c681f679b4124c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Elio=20Petten=C3=B2?= Date: Wed, 3 Jun 2020 23:40:05 +0100 Subject: [PATCH 34/73] Add license to some obvious files. --- .gitattributes | 4 +++ .github/workflows/build.yml | 4 +++ .github/workflows/create_website_pr.yml | 4 +++ .gitignore | 4 +++ .gitmodules | 4 +++ .readthedocs.yml | 4 +++ .rosie.yml | 4 +++ ACKNOWLEDGEMENTS.license | 3 ++ BUILDING.md | 5 +++ CONTRIBUTING.md | 6 ++++ Makefile | 4 +++ conf.py | 4 +++ docs/shared_bindings_matrix.py | 2 +- docs/static/favicon.ico.license | 3 ++ drivers/bus/qspi.h | 2 +- drivers/bus/softqspi.c | 2 +- drivers/bus/softspi.c | 2 +- drivers/bus/spi.h | 2 +- extmod/font_petme128_8x8.h | 30 +++------------- extmod/machine_mem.c | 29 +++------------ extmod/machine_mem.h | 30 +++------------- extmod/machine_pinbase.c | 29 +++------------ extmod/machine_pinbase.h | 30 +++------------- extmod/machine_pulse.c | 29 +++------------ extmod/machine_pulse.h | 30 +++------------- extmod/machine_signal.c | 29 +++------------ extmod/machine_signal.h | 30 +++------------- extmod/misc.h | 32 ++++------------- extmod/modbtree.c | 29 +++------------ extmod/modframebuf.c | 29 +++------------ extmod/modlwip.c | 33 ++++------------- extmod/modonewire.c | 29 +++------------ extmod/modubinascii.c | 29 +++------------ extmod/modubinascii.h | 30 +++------------- extmod/moductypes.c | 29 +++------------ extmod/moduhashlib.c | 29 +++------------ extmod/moduheapq.c | 29 +++------------ extmod/modujson.c | 29 +++------------ extmod/modurandom.c | 29 +++------------ extmod/modure.c | 29 +++------------ extmod/moduselect.c | 29 +++------------ extmod/modussl_axtls.c | 29 +++------------ extmod/modussl_mbedtls.c | 29 +++------------ extmod/modutimeq.c | 31 +++------------- extmod/moduzlib.c | 29 +++------------ extmod/modwebrepl.c | 29 +++------------ extmod/modwebsocket.c | 29 +++------------ extmod/modwebsocket.h | 4 +++ extmod/uos_dupterm.c | 31 +++------------- extmod/utime_mphal.c | 31 +++------------- extmod/utime_mphal.h | 32 ++++------------- extmod/vfs.c | 29 +++------------ extmod/vfs.h | 30 +++------------- extmod/vfs_fat.c | 31 +++------------- extmod/vfs_fat.h | 30 +++------------- extmod/vfs_fat_diskio.c | 32 +++-------------- extmod/vfs_fat_file.c | 29 +++------------ extmod/vfs_posix.c | 29 +++------------ extmod/vfs_posix.h | 30 +++------------- extmod/vfs_posix_file.c | 29 +++------------ extmod/vfs_reader.c | 29 +++------------ extmod/virtpin.c | 29 +++------------ extmod/virtpin.h | 30 +++------------- lib/libc/string0.c | 2 +- lib/libm/math.c | 2 +- lib/mp-readline/readline.c | 2 +- lib/mp-readline/readline.h | 2 +- lib/netutils/netutils.c | 2 +- lib/netutils/netutils.h | 2 +- lib/oofatfs/ffconf.h | 2 +- lib/timeutils/timeutils.c | 2 +- lib/timeutils/timeutils.h | 2 +- lib/utils/interrupt_char.c | 2 +- lib/utils/interrupt_char.h | 2 +- lib/utils/printf.c | 2 +- lib/utils/pyexec.c | 2 +- lib/utils/pyexec.h | 2 +- lib/utils/sys_stdio_mphal.c | 2 +- ...CircuitPython_Repo_header_logo.png.license | 3 ++ logo/adafruit_blinka_angles-back.svg.license | 3 ++ logo/adafruit_blinka_angles-front.svg.license | 3 ++ logo/adafruit_blinka_angles-left.svg.license | 3 ++ logo/adafruit_blinka_angles-right.svg.license | 3 ++ logo/adafruit_blinka_computer.svg.license | 3 ++ ..._circuit_python_ourboros_color.svg.license | 3 ++ ...it_python_ouroboros_logo_final.svg.license | 3 ++ ...t_circuit_python_sitting_color.svg.license | 3 ++ ...thon_stacked_lockup_logo_final.svg.license | 3 ++ logo/awesome_circuitpython.svg.license | 3 ++ logo/blinka_colorform-cooking.png.license | 3 ++ logo/blinka_colorform-cooking.svg.license | 3 ++ ...linka_colorform-first-birthday.svg.license | 3 ++ logo/blinka_colorform-painting.svg.license | 3 ++ logo/blinka_colorform-reading.svg.license | 3 ++ logo/blinka_colorform-singing.svg.license | 3 ++ logo/blinka_colorform-telescope.svg.license | 3 ++ logo/blinka_colorform-test_tubes.svg.license | 3 ++ mpy-cross/.gitignore | 4 +++ mpy-cross/Makefile | 4 +++ mpy-cross/Makefile.fuzz | 3 ++ mpy-cross/Makefile.static | 4 +++ mpy-cross/Makefile.static-mingw | 4 +++ mpy-cross/Makefile.static-raspbian | 4 +++ mpy-cross/README.md | 6 ++++ mpy-cross/fmode.c | 29 +++------------ mpy-cross/fmode.h | 30 +++------------- mpy-cross/gccollect.c | 29 +++------------ mpy-cross/main.c | 29 +++------------ mpy-cross/mpconfigport.h | 29 +++------------ mpy-cross/mphalport.h | 4 +++ mpy-cross/mpy-cross.mk | 4 +++ mpy-cross/qstrdefsport.h | 4 +++ ports/atmel-samd/Makefile | 2 +- .../common-hal/analogio/AnalogOut.c | 2 +- ports/atmel-samd/common-hal/board/__init__.c | 2 +- ports/atmel-samd/common-hal/busio/UART.c | 2 +- ports/atmel-samd/common-hal/pulseio/PWMOut.c | 2 +- .../atmel-samd/common-hal/pulseio/PulseOut.c | 2 +- ports/atmel-samd/fatfs_port.c | 2 +- ports/atmel-samd/supervisor/internal_flash.c | 2 +- ports/atmel-samd/supervisor/internal_flash.h | 2 +- ports/atmel-samd/tools/gen_pin_name_table.py | 2 +- ports/esp32s2/Makefile | 2 +- ports/esp32s2/fatfs_port.c | 2 +- ports/esp32s2/supervisor/internal_flash.c | 2 +- ports/esp32s2/supervisor/internal_flash.h | 2 +- ports/litex/Makefile | 2 +- ports/litex/fatfs_port.c | 2 +- ports/litex/supervisor/internal_flash.c | 2 +- ports/litex/supervisor/internal_flash.h | 2 +- ports/mimxrt10xx/Makefile | 4 +-- .../common-hal/analogio/AnalogOut.c | 2 +- ports/mimxrt10xx/common-hal/board/__init__.c | 2 +- ports/mimxrt10xx/common-hal/busio/UART.c | 2 +- ports/mimxrt10xx/common-hal/pulseio/PWMOut.c | 2 +- .../mimxrt10xx/common-hal/pulseio/PulseOut.c | 2 +- ports/mimxrt10xx/fatfs_port.c | 2 +- ports/mimxrt10xx/supervisor/internal_flash.c | 2 +- ports/mimxrt10xx/supervisor/internal_flash.h | 2 +- ports/nrf/Makefile | 2 +- ports/nrf/examples/ubluepy_temp.py | 2 +- ports/nrf/fatfs_port.c | 2 +- ports/nrf/peripherals/nrf/nvm.c | 2 +- ports/nrf/peripherals/nrf/nvm.h | 2 +- ports/nrf/supervisor/internal_flash.c | 2 +- ports/nrf/supervisor/internal_flash.h | 2 +- ports/stm/Makefile | 4 +-- ports/stm/common-hal/analogio/AnalogOut.c | 2 +- ports/stm/fatfs_port.c | 2 +- ports/stm/supervisor/internal_flash.c | 2 +- ports/stm/supervisor/internal_flash.h | 2 +- ports/stm/tools/parse_af_csv.py | 2 +- ports/stm/tools/parse_pins_csv.py | 2 +- ports/unix/fdfile.h | 2 +- ports/unix/file.c | 2 +- ports/unix/gccollect.c | 2 +- ports/unix/input.c | 2 +- ports/unix/main.c | 2 +- ports/unix/modffi.c | 2 +- ports/unix/modmachine.c | 2 +- ports/unix/modos.c | 2 +- ports/unix/modtime.c | 2 +- ports/unix/moduos_vfs.c | 2 +- ports/unix/moduselect.c | 2 +- ports/unix/modusocket.c | 2 +- ports/unix/mpconfigport.h | 2 +- ports/unix/mpconfigport_coverage.h | 2 +- ports/unix/mpconfigport_fast.h | 2 +- ports/unix/mpconfigport_freedos.h | 2 +- ports/unix/mpconfigport_minimal.h | 2 +- ports/unix/mpconfigport_nanbox.h | 2 +- ports/unix/mphalport.h | 2 +- ports/unix/mpthreadport.c | 2 +- ports/unix/mpthreadport.h | 2 +- ports/unix/qstrdefsport.h | 2 +- ports/unix/unix_mphal.c | 2 +- py/argcheck.c | 2 +- py/asmarm.c | 2 +- py/asmarm.h | 2 +- py/asmbase.c | 2 +- py/asmbase.h | 2 +- py/asmthumb.c | 2 +- py/asmthumb.h | 2 +- py/asmx64.c | 2 +- py/asmx64.h | 2 +- py/asmx86.c | 2 +- py/asmx86.h | 2 +- py/asmxtensa.c | 2 +- py/asmxtensa.h | 2 +- py/bc.c | 2 +- py/bc.h | 2 +- py/bc0.h | 2 +- py/binary.c | 2 +- py/binary.h | 2 +- py/builtin.h | 2 +- py/builtinevex.c | 2 +- py/builtinhelp.c | 2 +- py/builtinimport.c | 2 +- py/circuitpy_defns.mk | 2 +- py/circuitpy_mpconfig.mk | 2 +- py/compile.c | 2 +- py/compile.h | 2 +- py/emit.h | 2 +- py/emitbc.c | 2 +- py/emitcommon.c | 2 +- py/emitglue.c | 2 +- py/emitglue.h | 2 +- py/emitinlinethumb.c | 2 +- py/emitinlinextensa.c | 2 +- py/emitnative.c | 2 +- py/formatfloat.c | 2 +- py/formatfloat.h | 2 +- py/frozenmod.c | 2 +- py/frozenmod.h | 2 +- py/gc.c | 2 +- py/gc.h | 2 +- py/grammar.h | 2 +- py/ioctl.h | 2 +- py/lexer.c | 2 +- py/lexer.h | 2 +- py/malloc.c | 2 +- py/map.c | 2 +- py/misc.h | 2 +- py/modarray.c | 2 +- py/modbuiltins.c | 2 +- py/modcmath.c | 2 +- py/modcollections.c | 2 +- py/modgc.c | 2 +- py/modio.c | 2 +- py/modmath.c | 2 +- py/modmicropython.c | 2 +- py/modstruct.c | 2 +- py/modsys.c | 2 +- py/modthread.c | 2 +- py/moduerrno.c | 2 +- py/mpconfig.h | 2 +- py/mperrno.h | 2 +- py/mphal.h | 2 +- py/mpprint.c | 2 +- py/mpprint.h | 2 +- py/mpstate.c | 2 +- py/mpstate.h | 2 +- py/mpthread.h | 2 +- py/mpz.c | 2 +- py/mpz.h | 2 +- py/nativeglue.c | 2 +- py/nlr.c | 2 +- py/nlr.h | 2 +- py/nlrsetjmp.c | 2 +- py/nlrthumb.c | 2 +- py/nlrx64.c | 2 +- py/nlrx86.c | 2 +- py/nlrxtensa.c | 2 +- py/obj.c | 2 +- py/obj.h | 2 +- py/objarray.c | 2 +- py/objarray.h | 2 +- py/objattrtuple.c | 2 +- py/objbool.c | 2 +- py/objboundmeth.c | 2 +- py/objcell.c | 2 +- py/objclosure.c | 2 +- py/objcomplex.c | 2 +- py/objdict.c | 2 +- py/objenumerate.c | 2 +- py/objexcept.c | 2 +- py/objexcept.h | 2 +- py/objfilter.c | 2 +- py/objfloat.c | 2 +- py/objfun.c | 2 +- py/objfun.h | 2 +- py/objgenerator.c | 2 +- py/objgenerator.h | 2 +- py/objgetitemiter.c | 2 +- py/objint.c | 2 +- py/objint.h | 2 +- py/objint_longlong.c | 2 +- py/objint_mpz.c | 2 +- py/objlist.c | 2 +- py/objlist.h | 2 +- py/objmap.c | 2 +- py/objmodule.c | 2 +- py/objmodule.h | 2 +- py/objnamedtuple.c | 2 +- py/objnamedtuple.h | 2 +- py/objnone.c | 2 +- py/objobject.c | 2 +- py/objproperty.c | 2 +- py/objproperty.h | 2 +- py/objrange.c | 2 +- py/objreversed.c | 2 +- py/objset.c | 2 +- py/objsingleton.c | 2 +- py/objslice.c | 2 +- py/objstr.c | 2 +- py/objstr.h | 2 +- py/objstringio.c | 2 +- py/objstringio.h | 2 +- py/objstrunicode.c | 2 +- py/objtuple.c | 2 +- py/objtuple.h | 2 +- py/objtype.c | 2 +- py/objtype.h | 2 +- py/objzip.c | 2 +- py/opmethods.c | 2 +- py/parse.c | 2 +- py/parse.h | 2 +- py/parsenum.c | 2 +- py/parsenum.h | 2 +- py/parsenumbase.c | 2 +- py/parsenumbase.h | 2 +- py/persistentcode.c | 2 +- py/persistentcode.h | 2 +- py/pystack.c | 2 +- py/pystack.h | 2 +- py/qstr.c | 2 +- py/qstr.h | 2 +- py/qstrdefs.h | 2 +- py/reader.c | 2 +- py/reader.h | 2 +- py/repl.c | 2 +- py/repl.h | 2 +- py/runtime.c | 2 +- py/runtime.h | 2 +- py/runtime0.h | 2 +- py/scheduler.c | 2 +- py/scope.c | 2 +- py/scope.h | 2 +- py/sequence.c | 2 +- py/showbc.c | 2 +- py/smallint.c | 2 +- py/smallint.h | 2 +- py/stream.c | 2 +- py/stream.h | 2 +- py/unicode.c | 2 +- py/unicode.h | 2 +- py/vm.c | 2 +- py/vmentrytable.h | 2 +- py/vstr.c | 2 +- py/warning.c | 2 +- setup.py | 4 +++ shared-bindings/analogio/AnalogIn.c | 2 +- shared-bindings/analogio/AnalogIn.h | 2 +- shared-bindings/analogio/AnalogOut.c | 2 +- shared-bindings/analogio/AnalogOut.h | 2 +- shared-bindings/digitalio/DigitalInOut.c | 2 +- shared-bindings/digitalio/DigitalInOut.h | 2 +- shared-bindings/gnss/GNSS.c | 28 ++------------- shared-bindings/gnss/GNSS.h | 28 ++------------- shared-bindings/gnss/PositionFix.c | 28 ++------------- shared-bindings/gnss/PositionFix.h | 28 ++------------- shared-bindings/gnss/SatelliteSystem.c | 28 ++------------- shared-bindings/gnss/SatelliteSystem.h | 28 ++------------- shared-bindings/gnss/__init__.c | 28 ++------------- shared-bindings/math/__init__.c | 2 +- shared-bindings/network/__init__.c | 2 +- shared-bindings/network/__init__.h | 2 +- shared-bindings/os/__init__.c | 2 +- shared-bindings/pulseio/PWMOut.c | 2 +- shared-bindings/pulseio/PWMOut.h | 2 +- shared-bindings/pulseio/PulseOut.h | 2 +- shared-bindings/rtc/RTC.c | 2 +- shared-bindings/rtc/__init__.c | 2 +- shared-bindings/socket/__init__.c | 2 +- shared-bindings/storage/__init__.c | 2 +- shared-bindings/struct/__init__.c | 2 +- shared-bindings/time/__init__.c | 2 +- shared-bindings/touchio/TouchIn.c | 2 +- shared-bindings/touchio/TouchIn.h | 2 +- shared-bindings/wiznet/__init__.c | 2 +- shared-bindings/wiznet/wiznet5k.c | 2 +- shared-module/bitbangio/I2C.c | 2 +- shared-module/bitbangio/SPI.c | 2 +- shared-module/network/__init__.h | 2 +- shared-module/os/__init__.c | 2 +- shared-module/storage/__init__.c | 2 +- shared-module/wiznet/wiznet5k.c | 2 +- shared-module/wiznet/wiznet5k.h | 2 +- supervisor/flash.h | 2 +- .../shared/external_flash/common_commands.h | 2 +- supervisor/stub/internal_flash.c | 2 +- tests/skip_if.py | 23 ++---------- tests/thread/mutate_bytearray.py | 4 ++- tests/thread/mutate_dict.py | 4 ++- tests/thread/mutate_instance.py | 4 ++- tests/thread/mutate_list.py | 4 ++- tests/thread/mutate_set.py | 4 ++- tests/thread/stress_aes.py | 4 ++- tests/thread/stress_heap.py | 4 ++- tests/thread/stress_recurse.py | 4 ++- tests/thread/thread_exc1.py | 4 ++- tests/thread/thread_exit1.py | 4 ++- tests/thread/thread_exit2.py | 4 ++- tests/thread/thread_gc1.py | 4 ++- tests/thread/thread_ident1.py | 4 ++- tests/thread/thread_lock1.py | 4 ++- tests/thread/thread_lock2.py | 4 ++- tests/thread/thread_lock3.py | 4 ++- tests/thread/thread_lock4.py | 4 ++- tests/thread/thread_qstr1.py | 4 ++- tests/thread/thread_shared1.py | 4 ++- tests/thread/thread_shared2.py | 4 ++- tests/thread/thread_sleep1.py | 4 ++- tests/thread/thread_stacksize1.py | 4 ++- tests/thread/thread_start1.py | 4 ++- tests/thread/thread_start2.py | 4 ++- tools/analyze_heap_dump.py | 4 +++ tools/analyze_mpy.py | 4 +++ tools/bootstrap_upip.sh | 4 +++ tools/build-stm-latest.sh | 4 +++ tools/build_board_info.py | 4 +++ tools/build_memory_info.py | 27 +++----------- tools/build_release_files.py | 4 +++ tools/chart_code_size.py | 4 +++ tools/check_code_size.sh | 5 +++ tools/check_translations.py | 4 +++ tools/ci_new_boards_check.py | 4 +++ tools/codestats.sh | 5 +++ tools/convert_release_notes.py | 4 +++ tools/cpboard.py | 35 ++++--------------- tools/dfu.py | 4 +++ tools/extract_pyi.py | 4 +++ tools/file2h.py | 4 +++ tools/fixup_translations.py | 4 +++ tools/gc_activity.py | 4 +++ tools/gc_activity_between_collects.py | 4 +++ tools/gen-changelog.sh | 4 +++ tools/gen_display_resources.py | 4 +++ tools/gen_ld_files.py | 5 +++ tools/gen_usb_descriptor.py | 4 +++ tools/gendoc.py | 4 +++ tools/git-checkout-latest-tag.sh | 5 +++ tools/hid_report_descriptors.py | 23 ++---------- tools/insert-usb-ids.py | 4 +++ tools/join_bins.py | 4 +++ tools/make-frozen.py | 5 +++ tools/mpy-tool.py | 27 +++----------- tools/mpy_bin2res.py | 5 +++ tools/mpy_cross_all.py | 5 +++ tools/preprocess_frozen_modules.py | 5 +++ tools/print_status.py | 4 +++ tools/pyboard.py | 29 +++------------ tools/pydfu.py | 9 ++--- tools/tinytest-codegen.py | 4 +++ tools/upip.py | 10 +++--- tools/upip_utarfile.py | 4 +++ 446 files changed, 928 insertions(+), 1865 deletions(-) create mode 100644 ACKNOWLEDGEMENTS.license create mode 100644 docs/static/favicon.ico.license create mode 100644 logo/CircuitPython_Repo_header_logo.png.license create mode 100644 logo/adafruit_blinka_angles-back.svg.license create mode 100644 logo/adafruit_blinka_angles-front.svg.license create mode 100644 logo/adafruit_blinka_angles-left.svg.license create mode 100644 logo/adafruit_blinka_angles-right.svg.license create mode 100644 logo/adafruit_blinka_computer.svg.license create mode 100644 logo/adafruit_circuit_python_ourboros_color.svg.license create mode 100644 logo/adafruit_circuit_python_ouroboros_logo_final.svg.license create mode 100644 logo/adafruit_circuit_python_sitting_color.svg.license create mode 100644 logo/adafruit_circuit_python_stacked_lockup_logo_final.svg.license create mode 100644 logo/awesome_circuitpython.svg.license create mode 100644 logo/blinka_colorform-cooking.png.license create mode 100644 logo/blinka_colorform-cooking.svg.license create mode 100644 logo/blinka_colorform-first-birthday.svg.license create mode 100644 logo/blinka_colorform-painting.svg.license create mode 100644 logo/blinka_colorform-reading.svg.license create mode 100644 logo/blinka_colorform-singing.svg.license create mode 100644 logo/blinka_colorform-telescope.svg.license create mode 100644 logo/blinka_colorform-test_tubes.svg.license diff --git a/.gitattributes b/.gitattributes index 7d1fdfe33e..5ebde95f07 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # Per default everything gets normalized and gets LF line endings on checkout. * text eol=lf diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fa7dd9dd25..b022dc2474 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + name: Build CI on: diff --git a/.github/workflows/create_website_pr.yml b/.github/workflows/create_website_pr.yml index 9907c08ae6..71959ffdcd 100644 --- a/.github/workflows/create_website_pr.yml +++ b/.github/workflows/create_website_pr.yml @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + name: Update CircuitPython.org on: diff --git a/.gitignore b/.gitignore index 8a773970d3..475a1183ff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # Compiled Sources ################### *.o diff --git a/.gitmodules b/.gitmodules index a990aed2ab..f09a1e4c68 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + [submodule "lib/axtls"] path = lib/axtls url = https://github.com/pfalcon/axtls diff --git a/.readthedocs.yml b/.readthedocs.yml index 6ff5f2422d..4030bc3178 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # .readthedocs.yml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details diff --git a/.rosie.yml b/.rosie.yml index 3f7f9bb1d7..52a8802de2 100644 --- a/.rosie.yml +++ b/.rosie.yml @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # This configuration file tells Rosie where to find prebuilt .bin files (Travis # builds them) and where to find the tests. diff --git a/ACKNOWLEDGEMENTS.license b/ACKNOWLEDGEMENTS.license new file mode 100644 index 0000000000..d25be17638 --- /dev/null +++ b/ACKNOWLEDGEMENTS.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) + +SPDX-License-Identifier: MIT diff --git a/BUILDING.md b/BUILDING.md index bc60026785..10d7d8f4af 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -1,3 +1,8 @@ + # Building CircuitPython diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0d85926310..29db397932 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,9 @@ + + # Contributing Please note that this project is released with a [Contributor Code of Conduct](https://github.com/adafruit/circuitpython/blob/main/CODE_OF_CONDUCT.md). diff --git a/Makefile b/Makefile index d45dae8b90..74d3d88c77 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # Top-level Makefile for documentation builds and miscellaneous tasks. # diff --git a/conf.py b/conf.py index 43f689648d..37e611dbb8 100644 --- a/conf.py +++ b/conf.py @@ -13,6 +13,10 @@ # All configuration values have a default; values that are commented out # serve to show the default. +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import json import logging import os diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index 4abf5b8859..7b96c14f29 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -1,6 +1,6 @@ # The MIT License (MIT) # -# Copyright (c) 2019 Michael Schroeder +# SPDX-FileCopyrightText: Copyright (c) 2019 Michael Schroeder # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal diff --git a/docs/static/favicon.ico.license b/docs/static/favicon.ico.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/docs/static/favicon.ico.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/drivers/bus/qspi.h b/drivers/bus/qspi.h index 31c9d14fca..81587b08b3 100644 --- a/drivers/bus/qspi.h +++ b/drivers/bus/qspi.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2017-2018 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2017-2018 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/drivers/bus/softqspi.c b/drivers/bus/softqspi.c index 10c5992466..87f7c8ae8c 100644 --- a/drivers/bus/softqspi.c +++ b/drivers/bus/softqspi.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2017-2018 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2017-2018 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/drivers/bus/softspi.c b/drivers/bus/softspi.c index bc12d89d3b..feb8e00d38 100644 --- a/drivers/bus/softspi.c +++ b/drivers/bus/softspi.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016-2018 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016-2018 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/drivers/bus/spi.h b/drivers/bus/spi.h index 6d1b9c2f83..5d150cd38f 100644 --- a/drivers/bus/spi.h +++ b/drivers/bus/spi.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016-2018 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016-2018 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/extmod/font_petme128_8x8.h b/extmod/font_petme128_8x8.h index 9963698b17..632397dfe3 100644 --- a/extmod/font_petme128_8x8.h +++ b/extmod/font_petme128_8x8.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013, 2014 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_STM32_FONT_PETME128_8X8_H #define MICROPY_INCLUDED_STM32_FONT_PETME128_8X8_H diff --git a/extmod/machine_mem.c b/extmod/machine_mem.c index e0649290ef..6c6e110631 100644 --- a/extmod/machine_mem.c +++ b/extmod/machine_mem.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013, 2014 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George +// +// SPDX-License-Identifier: MIT #include "py/runtime.h" #include "extmod/machine_mem.h" diff --git a/extmod/machine_mem.h b/extmod/machine_mem.h index a48a52c820..735887c60e 100644 --- a/extmod/machine_mem.h +++ b/extmod/machine_mem.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2015 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2015 Damien P. George +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_MACHINE_MEM_H #define MICROPY_INCLUDED_EXTMOD_MACHINE_MEM_H diff --git a/extmod/machine_pinbase.c b/extmod/machine_pinbase.c index 6cd14c187e..a5e33c5602 100644 --- a/extmod/machine_pinbase.c +++ b/extmod/machine_pinbase.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include "py/mpconfig.h" #if MICROPY_PY_MACHINE diff --git a/extmod/machine_pinbase.h b/extmod/machine_pinbase.h index c96abbc46c..b747563a1e 100644 --- a/extmod/machine_pinbase.h +++ b/extmod/machine_pinbase.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_MACHINE_PINBASE_H #define MICROPY_INCLUDED_EXTMOD_MACHINE_PINBASE_H diff --git a/extmod/machine_pulse.c b/extmod/machine_pulse.c index 5f837479dd..eaee12b367 100644 --- a/extmod/machine_pulse.c +++ b/extmod/machine_pulse.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George +// +// SPDX-License-Identifier: MIT #include "py/runtime.h" #include "py/mperrno.h" diff --git a/extmod/machine_pulse.h b/extmod/machine_pulse.h index e303dca02e..a9b0ebc1b4 100644 --- a/extmod/machine_pulse.h +++ b/extmod/machine_pulse.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_MACHINE_PULSE_H #define MICROPY_INCLUDED_EXTMOD_MACHINE_PULSE_H diff --git a/extmod/machine_signal.c b/extmod/machine_signal.c index 50501e34fe..a215fc3889 100644 --- a/extmod/machine_signal.c +++ b/extmod/machine_signal.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2017 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2017 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include "py/mpconfig.h" #if MICROPY_PY_MACHINE diff --git a/extmod/machine_signal.h b/extmod/machine_signal.h index df1c3e2e90..17ffe5563f 100644 --- a/extmod/machine_signal.h +++ b/extmod/machine_signal.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2017 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2017 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_MACHINE_SIGNAL_H #define MICROPY_INCLUDED_EXTMOD_MACHINE_SIGNAL_H diff --git a/extmod/misc.h b/extmod/misc.h index d6f6d859c6..3e12e56719 100644 --- a/extmod/misc.h +++ b/extmod/misc.h @@ -1,29 +1,9 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014-2016 Damien P. George - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2014-2016 Damien P. George +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_MISC_H #define MICROPY_INCLUDED_EXTMOD_MISC_H diff --git a/extmod/modbtree.c b/extmod/modbtree.c index 7cfa9c6afb..9f5261b1b7 100644 --- a/extmod/modbtree.c +++ b/extmod/modbtree.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/modframebuf.c b/extmod/modframebuf.c index c59d1592ba..07a50a2f4c 100644 --- a/extmod/modframebuf.c +++ b/extmod/modframebuf.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/modlwip.c b/extmod/modlwip.c index 776b81ee51..20cc3a6594 100644 --- a/extmod/modlwip.c +++ b/extmod/modlwip.c @@ -1,30 +1,9 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013, 2014 Damien P. George - * Copyright (c) 2015 Galen Hazelwood - * Copyright (c) 2015-2017 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2015 Galen Hazelwood +// Copyright (c) 2015-2017 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/modonewire.c b/extmod/modonewire.c index 53c9456c20..1b085a0555 100644 --- a/extmod/modonewire.c +++ b/extmod/modonewire.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2015-2017 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2015-2017 Damien P. George +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/modubinascii.c b/extmod/modubinascii.c index 0f64b27151..32c36eea6d 100644 --- a/extmod/modubinascii.c +++ b/extmod/modubinascii.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2014 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/modubinascii.h b/extmod/modubinascii.h index fb31692678..eb47e286bf 100644 --- a/extmod/modubinascii.h +++ b/extmod/modubinascii.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2014 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_MODUBINASCII_H #define MICROPY_INCLUDED_EXTMOD_MODUBINASCII_H diff --git a/extmod/moductypes.c b/extmod/moductypes.c index 451dc29ed9..a384f1e2c2 100644 --- a/extmod/moductypes.c +++ b/extmod/moductypes.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2014 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/moduhashlib.c b/extmod/moduhashlib.c index 970c63da82..95485de138 100644 --- a/extmod/moduhashlib.c +++ b/extmod/moduhashlib.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2014 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/moduheapq.c b/extmod/moduheapq.c index db17e8ca21..bc4b97ff5b 100644 --- a/extmod/moduheapq.c +++ b/extmod/moduheapq.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George +// +// SPDX-License-Identifier: MIT #include "py/objlist.h" #include "py/runtime.h" diff --git a/extmod/modujson.c b/extmod/modujson.c index 0f93ccb110..5e90839582 100644 --- a/extmod/modujson.c +++ b/extmod/modujson.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014-2016 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2014-2016 Damien P. George +// +// SPDX-License-Identifier: MIT #include diff --git a/extmod/modurandom.c b/extmod/modurandom.c index 1512a3fd4a..a60250efc8 100644 --- a/extmod/modurandom.c +++ b/extmod/modurandom.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/modure.c b/extmod/modure.c index 125afef4d3..a20f3ee429 100644 --- a/extmod/modure.c +++ b/extmod/modure.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2014 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/moduselect.c b/extmod/moduselect.c index 6c9d18e50b..97b14a5f25 100644 --- a/extmod/moduselect.c +++ b/extmod/moduselect.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George +// +// SPDX-License-Identifier: MIT #include "py/mpconfig.h" #if MICROPY_PY_USELECT diff --git a/extmod/modussl_axtls.c b/extmod/modussl_axtls.c index 032dea09fd..7cc2bb3e25 100644 --- a/extmod/modussl_axtls.c +++ b/extmod/modussl_axtls.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2015-2017 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2015-2017 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/modussl_mbedtls.c b/extmod/modussl_mbedtls.c index 9abdeb966e..990523173d 100644 --- a/extmod/modussl_mbedtls.c +++ b/extmod/modussl_mbedtls.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Linaro Ltd. - * - * 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. - */ +// Copyright (c) 2016 Linaro Ltd. +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include "py/mpconfig.h" #if MICROPY_PY_USSL && MICROPY_SSL_MBEDTLS diff --git a/extmod/modutimeq.c b/extmod/modutimeq.c index 99b51016d8..bb2b6b335d 100644 --- a/extmod/modutimeq.c +++ b/extmod/modutimeq.c @@ -1,29 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014 Damien P. George - * Copyright (c) 2016-2017 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016-2017 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George +// +// SPDX-License-Identifier: MIT #include diff --git a/extmod/moduzlib.c b/extmod/moduzlib.c index 3a081bc452..8422e75983 100644 --- a/extmod/moduzlib.c +++ b/extmod/moduzlib.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014-2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2014-2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/modwebrepl.c b/extmod/modwebrepl.c index fb4d97358d..5b3c6150a7 100644 --- a/extmod/modwebrepl.c +++ b/extmod/modwebrepl.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/modwebsocket.c b/extmod/modwebsocket.c index 496e4b5bb3..581af6b588 100644 --- a/extmod/modwebsocket.c +++ b/extmod/modwebsocket.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/modwebsocket.h b/extmod/modwebsocket.h index 2720147dfd..46aa0408b6 100644 --- a/extmod/modwebsocket.h +++ b/extmod/modwebsocket.h @@ -1,3 +1,7 @@ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_MODWEBSOCKET_H #define MICROPY_INCLUDED_EXTMOD_MODWEBSOCKET_H diff --git a/extmod/uos_dupterm.c b/extmod/uos_dupterm.c index 781ec0d46b..bd2dc639c8 100644 --- a/extmod/uos_dupterm.c +++ b/extmod/uos_dupterm.c @@ -1,29 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Paul Sokolovsky - * Copyright (c) 2017 Damien P. George - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2017 Damien P. George +// +// SPDX-License-Identifier: MIT #include #include "py/mpconfig.h" diff --git a/extmod/utime_mphal.c b/extmod/utime_mphal.c index 0fe3a3ba1d..ebbc9ac263 100644 --- a/extmod/utime_mphal.c +++ b/extmod/utime_mphal.c @@ -1,29 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013-2016 Damien P. George - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George +// +// SPDX-License-Identifier: MIT #include "py/mpconfig.h" #if MICROPY_PY_UTIME_MP_HAL diff --git a/extmod/utime_mphal.h b/extmod/utime_mphal.h index 88a9ed4d37..20b4093d31 100644 --- a/extmod/utime_mphal.h +++ b/extmod/utime_mphal.h @@ -1,29 +1,9 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013-2016 Damien P. George - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_UTIME_MPHAL_H #define MICROPY_INCLUDED_EXTMOD_UTIME_MPHAL_H diff --git a/extmod/vfs.c b/extmod/vfs.c index 2bb4057e7e..c9c1fe3c31 100644 --- a/extmod/vfs.c +++ b/extmod/vfs.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2017 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2017 Damien P. George +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/vfs.h b/extmod/vfs.h index 6c0692365f..85958d80d9 100644 --- a/extmod/vfs.h +++ b/extmod/vfs.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2017 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2017 Damien P. George +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_VFS_H #define MICROPY_INCLUDED_EXTMOD_VFS_H diff --git a/extmod/vfs_fat.c b/extmod/vfs_fat.c index 9cb4d98426..b8f43ee295 100644 --- a/extmod/vfs_fat.c +++ b/extmod/vfs_fat.c @@ -1,29 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2014 Damien P. George - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George +// +// SPDX-License-Identifier: MIT #include "py/mpconfig.h" #if MICROPY_VFS_FAT diff --git a/extmod/vfs_fat.h b/extmod/vfs_fat.h index 08b03d0d18..41f8365ec5 100644 --- a/extmod/vfs_fat.h +++ b/extmod/vfs_fat.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013, 2014 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_VFS_FAT_H #define MICROPY_INCLUDED_EXTMOD_VFS_FAT_H diff --git a/extmod/vfs_fat_diskio.c b/extmod/vfs_fat_diskio.c index 0e442d8fa9..ac8924394a 100644 --- a/extmod/vfs_fat_diskio.c +++ b/extmod/vfs_fat_diskio.c @@ -1,31 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * Original template for this file comes from: - * Low level disk I/O module skeleton for FatFs, (C)ChaN, 2013 - * - * The MIT License (MIT) - * - * Copyright (c) 2013, 2014 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George +// +// SPDX-License-Identifier: MIT #include "py/mpconfig.h" #if MICROPY_VFS && MICROPY_VFS_FAT diff --git a/extmod/vfs_fat_file.c b/extmod/vfs_fat_file.c index 422f057a85..0642f4a9ce 100644 --- a/extmod/vfs_fat_file.c +++ b/extmod/vfs_fat_file.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013, 2014 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George +// +// SPDX-License-Identifier: MIT #include "py/mpconfig.h" #if MICROPY_VFS && MICROPY_VFS_FAT diff --git a/extmod/vfs_posix.c b/extmod/vfs_posix.c index 56a5de303d..8d81d51751 100644 --- a/extmod/vfs_posix.c +++ b/extmod/vfs_posix.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2017-2018 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2017-2018 Damien P. George +// +// SPDX-License-Identifier: MIT #include "py/runtime.h" #include "py/mperrno.h" diff --git a/extmod/vfs_posix.h b/extmod/vfs_posix.h index 32299b8269..4540baedf0 100644 --- a/extmod/vfs_posix.h +++ b/extmod/vfs_posix.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2018 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2018 Damien P. George +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_VFS_POSIX_H #define MICROPY_INCLUDED_EXTMOD_VFS_POSIX_H diff --git a/extmod/vfs_posix_file.c b/extmod/vfs_posix_file.c index be455fa281..eefc1d905a 100644 --- a/extmod/vfs_posix_file.c +++ b/extmod/vfs_posix_file.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013-2018 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2013-2018 Damien P. George +// +// SPDX-License-Identifier: MIT #include "py/runtime.h" #include "py/stream.h" diff --git a/extmod/vfs_reader.c b/extmod/vfs_reader.c index e1ee45a3c7..a700611860 100644 --- a/extmod/vfs_reader.c +++ b/extmod/vfs_reader.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013-2017 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George +// +// SPDX-License-Identifier: MIT #include #include diff --git a/extmod/virtpin.c b/extmod/virtpin.c index 559f992650..fb993946a2 100644 --- a/extmod/virtpin.c +++ b/extmod/virtpin.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include "extmod/virtpin.h" #include "py/proto.h" diff --git a/extmod/virtpin.h b/extmod/virtpin.h index 591249e48d..9b43406bd1 100644 --- a/extmod/virtpin.h +++ b/extmod/virtpin.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2016 Paul Sokolovsky - * - * 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. - */ +// Copyright (c) 2016 Paul Sokolovsky +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_EXTMOD_VIRTPIN_H #define MICROPY_INCLUDED_EXTMOD_VIRTPIN_H diff --git a/lib/libc/string0.c b/lib/libc/string0.c index a2f936237d..18bd993618 100644 --- a/lib/libc/string0.c +++ b/lib/libc/string0.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/lib/libm/math.c b/lib/libm/math.c index 0e53563bcb..670d95ed2d 100644 --- a/lib/libm/math.c +++ b/lib/libm/math.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/lib/mp-readline/readline.c b/lib/mp-readline/readline.c index 0edaebbfae..432413d501 100644 --- a/lib/mp-readline/readline.c +++ b/lib/mp-readline/readline.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/lib/mp-readline/readline.h b/lib/mp-readline/readline.h index 17d4ec60ed..9168edafa0 100644 --- a/lib/mp-readline/readline.h +++ b/lib/mp-readline/readline.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/lib/netutils/netutils.c b/lib/netutils/netutils.c index 03418d7e66..4385f5a5e5 100644 --- a/lib/netutils/netutils.c +++ b/lib/netutils/netutils.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2015 Daniel Campora * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/lib/netutils/netutils.h b/lib/netutils/netutils.h index 4befc90db0..98e1d24932 100644 --- a/lib/netutils/netutils.h +++ b/lib/netutils/netutils.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2015 Daniel Campora * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/lib/oofatfs/ffconf.h b/lib/oofatfs/ffconf.h index 214311b4c2..d8485a293a 100644 --- a/lib/oofatfs/ffconf.h +++ b/lib/oofatfs/ffconf.h @@ -6,7 +6,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/lib/timeutils/timeutils.c b/lib/timeutils/timeutils.c index b93a85dee9..fdd3426ad4 100644 --- a/lib/timeutils/timeutils.c +++ b/lib/timeutils/timeutils.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2015 Daniel Campora * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/lib/timeutils/timeutils.h b/lib/timeutils/timeutils.h index 0ca6bb1679..4ba8c7fdac 100644 --- a/lib/timeutils/timeutils.h +++ b/lib/timeutils/timeutils.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2015 Daniel Campora * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/lib/utils/interrupt_char.c b/lib/utils/interrupt_char.c index da7f702544..7410ac1e5d 100644 --- a/lib/utils/interrupt_char.c +++ b/lib/utils/interrupt_char.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/lib/utils/interrupt_char.h b/lib/utils/interrupt_char.h index e0b1db5298..0e5e2fc0c6 100644 --- a/lib/utils/interrupt_char.h +++ b/lib/utils/interrupt_char.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/lib/utils/printf.c b/lib/utils/printf.c index 3a4cc25494..e95d778fd2 100644 --- a/lib/utils/printf.c +++ b/lib/utils/printf.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/lib/utils/pyexec.c b/lib/utils/pyexec.c index c8e369e791..8e99bc2099 100755 --- a/lib/utils/pyexec.c +++ b/lib/utils/pyexec.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/lib/utils/pyexec.h b/lib/utils/pyexec.h index bde516c593..cef72a76c7 100644 --- a/lib/utils/pyexec.h +++ b/lib/utils/pyexec.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/lib/utils/sys_stdio_mphal.c b/lib/utils/sys_stdio_mphal.c index c1607dfe8c..3a11fa66c9 100644 --- a/lib/utils/sys_stdio_mphal.c +++ b/lib/utils/sys_stdio_mphal.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/logo/CircuitPython_Repo_header_logo.png.license b/logo/CircuitPython_Repo_header_logo.png.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/CircuitPython_Repo_header_logo.png.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/adafruit_blinka_angles-back.svg.license b/logo/adafruit_blinka_angles-back.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/adafruit_blinka_angles-back.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/adafruit_blinka_angles-front.svg.license b/logo/adafruit_blinka_angles-front.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/adafruit_blinka_angles-front.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/adafruit_blinka_angles-left.svg.license b/logo/adafruit_blinka_angles-left.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/adafruit_blinka_angles-left.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/adafruit_blinka_angles-right.svg.license b/logo/adafruit_blinka_angles-right.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/adafruit_blinka_angles-right.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/adafruit_blinka_computer.svg.license b/logo/adafruit_blinka_computer.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/adafruit_blinka_computer.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/adafruit_circuit_python_ourboros_color.svg.license b/logo/adafruit_circuit_python_ourboros_color.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/adafruit_circuit_python_ourboros_color.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/adafruit_circuit_python_ouroboros_logo_final.svg.license b/logo/adafruit_circuit_python_ouroboros_logo_final.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/adafruit_circuit_python_ouroboros_logo_final.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/adafruit_circuit_python_sitting_color.svg.license b/logo/adafruit_circuit_python_sitting_color.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/adafruit_circuit_python_sitting_color.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/adafruit_circuit_python_stacked_lockup_logo_final.svg.license b/logo/adafruit_circuit_python_stacked_lockup_logo_final.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/adafruit_circuit_python_stacked_lockup_logo_final.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/awesome_circuitpython.svg.license b/logo/awesome_circuitpython.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/awesome_circuitpython.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/blinka_colorform-cooking.png.license b/logo/blinka_colorform-cooking.png.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/blinka_colorform-cooking.png.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/blinka_colorform-cooking.svg.license b/logo/blinka_colorform-cooking.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/blinka_colorform-cooking.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/blinka_colorform-first-birthday.svg.license b/logo/blinka_colorform-first-birthday.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/blinka_colorform-first-birthday.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/blinka_colorform-painting.svg.license b/logo/blinka_colorform-painting.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/blinka_colorform-painting.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/blinka_colorform-reading.svg.license b/logo/blinka_colorform-reading.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/blinka_colorform-reading.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/blinka_colorform-singing.svg.license b/logo/blinka_colorform-singing.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/blinka_colorform-singing.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/blinka_colorform-telescope.svg.license b/logo/blinka_colorform-telescope.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/blinka_colorform-telescope.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/logo/blinka_colorform-test_tubes.svg.license b/logo/blinka_colorform-test_tubes.svg.license new file mode 100644 index 0000000000..86a3fbfe83 --- /dev/null +++ b/logo/blinka_colorform-test_tubes.svg.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2018 Phillip Torrone for Adafruit Industries + +SPDX-License-Identifier: CC-BY-4.0 diff --git a/mpy-cross/.gitignore b/mpy-cross/.gitignore index 80d7acd423..6daeea5040 100644 --- a/mpy-cross/.gitignore +++ b/mpy-cross/.gitignore @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + /build-* /mpy-cross /mpy-cross.static diff --git a/mpy-cross/Makefile b/mpy-cross/Makefile index 072304faa0..3ff379ed36 100644 --- a/mpy-cross/Makefile +++ b/mpy-cross/Makefile @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # The following is a temporary hack to forefully undefine vars that might have # be defined by a calling Makefile (from recursive make). # TODO: Find a better way to be able to call this Makefile recursively. diff --git a/mpy-cross/Makefile.fuzz b/mpy-cross/Makefile.fuzz index ca59788f4c..0fbbe9b647 100644 --- a/mpy-cross/Makefile.fuzz +++ b/mpy-cross/Makefile.fuzz @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT PROG=mpy-cross.fuzz BUILD=build-static diff --git a/mpy-cross/Makefile.static b/mpy-cross/Makefile.static index ca0925f758..ac2a8079bb 100644 --- a/mpy-cross/Makefile.static +++ b/mpy-cross/Makefile.static @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + PROG=mpy-cross.static BUILD=build-static STATIC_BUILD=1 diff --git a/mpy-cross/Makefile.static-mingw b/mpy-cross/Makefile.static-mingw index a176e80e6e..f5bc861779 100644 --- a/mpy-cross/Makefile.static-mingw +++ b/mpy-cross/Makefile.static-mingw @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + PROG=mpy-cross.static.exe CROSS_COMPILE = x86_64-w64-mingw32- BUILD=build-static-mingw diff --git a/mpy-cross/Makefile.static-raspbian b/mpy-cross/Makefile.static-raspbian index 9129f555e7..f895f998b5 100644 --- a/mpy-cross/Makefile.static-raspbian +++ b/mpy-cross/Makefile.static-raspbian @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + PROG=mpy-cross.static-raspbian BUILD=build-static-raspbian STATIC_BUILD=1 diff --git a/mpy-cross/README.md b/mpy-cross/README.md index e35b28b696..3d1ace394c 100644 --- a/mpy-cross/README.md +++ b/mpy-cross/README.md @@ -1,3 +1,9 @@ + + MicroPython cross compiler ========================== diff --git a/mpy-cross/fmode.c b/mpy-cross/fmode.c index 33ba24ed1f..b1fa3fc857 100644 --- a/mpy-cross/fmode.c +++ b/mpy-cross/fmode.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013-2016 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include "fmode.h" #include "py/mpconfig.h" diff --git a/mpy-cross/fmode.h b/mpy-cross/fmode.h index c661c84d0c..05b4a46b21 100644 --- a/mpy-cross/fmode.h +++ b/mpy-cross/fmode.h @@ -1,28 +1,8 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013-2016 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT + #ifndef MICROPY_INCLUDED_WINDOWS_FMODE_H #define MICROPY_INCLUDED_WINDOWS_FMODE_H diff --git a/mpy-cross/gccollect.c b/mpy-cross/gccollect.c index 75891a2fb5..2216fad311 100644 --- a/mpy-cross/gccollect.c +++ b/mpy-cross/gccollect.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013-2014 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: Copyright (c) 2013-2014 Damien P. George +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include diff --git a/mpy-cross/main.c b/mpy-cross/main.c index 7c232385b8..7a1012b8fc 100644 --- a/mpy-cross/main.c +++ b/mpy-cross/main.c @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013-2016 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT #include #include diff --git a/mpy-cross/mpconfigport.h b/mpy-cross/mpconfigport.h index 1a8b4880da..0b07a5b442 100644 --- a/mpy-cross/mpconfigport.h +++ b/mpy-cross/mpconfigport.h @@ -1,28 +1,7 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright (c) 2013-2015 Damien P. George - * - * 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. - */ +// SPDX-FileCopyrightText: Copyright (c) 2013-2015 Damien P. George +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT // options to control how MicroPython is built diff --git a/mpy-cross/mphalport.h b/mpy-cross/mphalport.h index 4bd8276f34..245b99c4c3 100644 --- a/mpy-cross/mphalport.h +++ b/mpy-cross/mphalport.h @@ -1 +1,5 @@ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT + // empty file diff --git a/mpy-cross/mpy-cross.mk b/mpy-cross/mpy-cross.mk index de96305cbf..c813dae9eb 100644 --- a/mpy-cross/mpy-cross.mk +++ b/mpy-cross/mpy-cross.mk @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + include ../py/mkenv.mk # define main target diff --git a/mpy-cross/qstrdefsport.h b/mpy-cross/qstrdefsport.h index 3ba897069b..36d4b9ccf4 100644 --- a/mpy-cross/qstrdefsport.h +++ b/mpy-cross/qstrdefsport.h @@ -1 +1,5 @@ +// SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +// +// SPDX-License-Identifier: MIT + // qstrs specific to this port diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile index c308105a32..eedcc94a92 100644 --- a/ports/atmel-samd/Makefile +++ b/ports/atmel-samd/Makefile @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2019 Dan Halbert for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2019 Dan Halbert 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 diff --git a/ports/atmel-samd/common-hal/analogio/AnalogOut.c b/ports/atmel-samd/common-hal/analogio/AnalogOut.c index e69a240717..fac4c6bfcb 100644 --- a/ports/atmel-samd/common-hal/analogio/AnalogOut.c +++ b/ports/atmel-samd/common-hal/analogio/AnalogOut.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/atmel-samd/common-hal/board/__init__.c b/ports/atmel-samd/common-hal/board/__init__.c index 634760335e..92a1721383 100644 --- a/ports/atmel-samd/common-hal/board/__init__.c +++ b/ports/atmel-samd/common-hal/board/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/atmel-samd/common-hal/busio/UART.c b/ports/atmel-samd/common-hal/busio/UART.c index 8aebd49523..9557c3b5f1 100644 --- a/ports/atmel-samd/common-hal/busio/UART.c +++ b/ports/atmel-samd/common-hal/busio/UART.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/atmel-samd/common-hal/pulseio/PWMOut.c b/ports/atmel-samd/common-hal/pulseio/PWMOut.c index 752f6c214b..e33437dada 100644 --- a/ports/atmel-samd/common-hal/pulseio/PWMOut.c +++ b/ports/atmel-samd/common-hal/pulseio/PWMOut.c @@ -4,7 +4,7 @@ * The MIT License (MIT) * * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/atmel-samd/common-hal/pulseio/PulseOut.c b/ports/atmel-samd/common-hal/pulseio/PulseOut.c index 5c829f84db..e9b2137cb0 100644 --- a/ports/atmel-samd/common-hal/pulseio/PulseOut.c +++ b/ports/atmel-samd/common-hal/pulseio/PulseOut.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/atmel-samd/fatfs_port.c b/ports/atmel-samd/fatfs_port.c index c4ce18c2a7..c65a73a428 100644 --- a/ports/atmel-samd/fatfs_port.c +++ b/ports/atmel-samd/fatfs_port.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/atmel-samd/supervisor/internal_flash.c b/ports/atmel-samd/supervisor/internal_flash.c index 091959c4e6..ecb59f836e 100644 --- a/ports/atmel-samd/supervisor/internal_flash.c +++ b/ports/atmel-samd/supervisor/internal_flash.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/atmel-samd/supervisor/internal_flash.h b/ports/atmel-samd/supervisor/internal_flash.h index df8b495ccb..1199e3b9c4 100644 --- a/ports/atmel-samd/supervisor/internal_flash.h +++ b/ports/atmel-samd/supervisor/internal_flash.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/atmel-samd/tools/gen_pin_name_table.py b/ports/atmel-samd/tools/gen_pin_name_table.py index ded64e5f69..4e25c39fd9 100644 --- a/ports/atmel-samd/tools/gen_pin_name_table.py +++ b/ports/atmel-samd/tools/gen_pin_name_table.py @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2017 Scott Shawcroft for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2017 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 diff --git a/ports/esp32s2/Makefile b/ports/esp32s2/Makefile index 3e69e66393..b296976885 100644 --- a/ports/esp32s2/Makefile +++ b/ports/esp32s2/Makefile @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2020 Scott Shawcroft for Adafruit Industries +# SPDX-FileCopyrightText: 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 diff --git a/ports/esp32s2/fatfs_port.c b/ports/esp32s2/fatfs_port.c index 13ac21fb1b..8bdc047c12 100644 --- a/ports/esp32s2/fatfs_port.c +++ b/ports/esp32s2/fatfs_port.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/esp32s2/supervisor/internal_flash.c b/ports/esp32s2/supervisor/internal_flash.c index 5cf77c8010..26774efac8 100644 --- a/ports/esp32s2/supervisor/internal_flash.c +++ b/ports/esp32s2/supervisor/internal_flash.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2019 Lucian Copeland for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/esp32s2/supervisor/internal_flash.h b/ports/esp32s2/supervisor/internal_flash.h index e06ef2d160..02d5190030 100644 --- a/ports/esp32s2/supervisor/internal_flash.h +++ b/ports/esp32s2/supervisor/internal_flash.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2019 Lucian Copeland for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/litex/Makefile b/ports/litex/Makefile index d75a4da288..29149942c9 100644 --- a/ports/litex/Makefile +++ b/ports/litex/Makefile @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2019 Scott Shawcroft for Adafruit Industries +# SPDX-FileCopyrightText: 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 diff --git a/ports/litex/fatfs_port.c b/ports/litex/fatfs_port.c index 13ac21fb1b..8bdc047c12 100644 --- a/ports/litex/fatfs_port.c +++ b/ports/litex/fatfs_port.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/litex/supervisor/internal_flash.c b/ports/litex/supervisor/internal_flash.c index cf777a8acc..9b1dea6852 100644 --- a/ports/litex/supervisor/internal_flash.c +++ b/ports/litex/supervisor/internal_flash.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2019 Lucian Copeland for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/litex/supervisor/internal_flash.h b/ports/litex/supervisor/internal_flash.h index 41a69e2abe..1498207d3e 100644 --- a/ports/litex/supervisor/internal_flash.h +++ b/ports/litex/supervisor/internal_flash.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2019 Lucian Copeland for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/mimxrt10xx/Makefile b/ports/mimxrt10xx/Makefile index 78cab0188e..d82b625e74 100644 --- a/ports/mimxrt10xx/Makefile +++ b/ports/mimxrt10xx/Makefile @@ -2,8 +2,8 @@ # # The MIT License (MIT) # -# Copyright (c) 2019 Dan Halbert for Adafruit Industries -# Copyright (c) 2019 Artur Pacholec +# SPDX-FileCopyrightText: Copyright (c) 2019 Dan Halbert for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2019 Artur Pacholec # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal diff --git a/ports/mimxrt10xx/common-hal/analogio/AnalogOut.c b/ports/mimxrt10xx/common-hal/analogio/AnalogOut.c index 3d072627a4..6bdbeff7c2 100644 --- a/ports/mimxrt10xx/common-hal/analogio/AnalogOut.c +++ b/ports/mimxrt10xx/common-hal/analogio/AnalogOut.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2019 Artur Pacholec * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/mimxrt10xx/common-hal/board/__init__.c b/ports/mimxrt10xx/common-hal/board/__init__.c index e86251480e..4967e1a76a 100644 --- a/ports/mimxrt10xx/common-hal/board/__init__.c +++ b/ports/mimxrt10xx/common-hal/board/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2019 Artur Pacholec * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/mimxrt10xx/common-hal/busio/UART.c b/ports/mimxrt10xx/common-hal/busio/UART.c index 4ca2f8e497..db5582d150 100644 --- a/ports/mimxrt10xx/common-hal/busio/UART.c +++ b/ports/mimxrt10xx/common-hal/busio/UART.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * Copyright (c) 2019 Artur Pacholec * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/mimxrt10xx/common-hal/pulseio/PWMOut.c b/ports/mimxrt10xx/common-hal/pulseio/PWMOut.c index c75b75316a..50dd477ea6 100644 --- a/ports/mimxrt10xx/common-hal/pulseio/PWMOut.c +++ b/ports/mimxrt10xx/common-hal/pulseio/PWMOut.c @@ -4,7 +4,7 @@ * The MIT License (MIT) * * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * Copyright (c) 2019 Artur Pacholec * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/mimxrt10xx/common-hal/pulseio/PulseOut.c b/ports/mimxrt10xx/common-hal/pulseio/PulseOut.c index a49cfa7af7..ffa885688a 100644 --- a/ports/mimxrt10xx/common-hal/pulseio/PulseOut.c +++ b/ports/mimxrt10xx/common-hal/pulseio/PulseOut.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * Copyright (c) 2019 Artur Pacholec * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/mimxrt10xx/fatfs_port.c b/ports/mimxrt10xx/fatfs_port.c index c4ce18c2a7..c65a73a428 100644 --- a/ports/mimxrt10xx/fatfs_port.c +++ b/ports/mimxrt10xx/fatfs_port.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/mimxrt10xx/supervisor/internal_flash.c b/ports/mimxrt10xx/supervisor/internal_flash.c index 9abd15e60e..09f44ccedf 100644 --- a/ports/mimxrt10xx/supervisor/internal_flash.c +++ b/ports/mimxrt10xx/supervisor/internal_flash.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2019 Artur Pacholec * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/mimxrt10xx/supervisor/internal_flash.h b/ports/mimxrt10xx/supervisor/internal_flash.h index dfbfe1d4b4..daee66620c 100644 --- a/ports/mimxrt10xx/supervisor/internal_flash.h +++ b/ports/mimxrt10xx/supervisor/internal_flash.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile index 5b81fa9a74..e1d86f7bc1 100755 --- a/ports/nrf/Makefile +++ b/ports/nrf/Makefile @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2019 Dan Halbert for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2019 Dan Halbert 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 diff --git a/ports/nrf/examples/ubluepy_temp.py b/ports/nrf/examples/ubluepy_temp.py index 118407af5e..405f77c4b0 100644 --- a/ports/nrf/examples/ubluepy_temp.py +++ b/ports/nrf/examples/ubluepy_temp.py @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2017 Glenn Ruben Bakke +# SPDX-FileCopyrightText: Copyright (c) 2017 Glenn Ruben Bakke # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal diff --git a/ports/nrf/fatfs_port.c b/ports/nrf/fatfs_port.c index cb1bfa8347..2b741f993a 100644 --- a/ports/nrf/fatfs_port.c +++ b/ports/nrf/fatfs_port.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/nrf/peripherals/nrf/nvm.c b/ports/nrf/peripherals/nrf/nvm.c index dc50e2eefa..ce47d73c77 100644 --- a/ports/nrf/peripherals/nrf/nvm.c +++ b/ports/nrf/peripherals/nrf/nvm.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2019 Nick Moore for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/nrf/peripherals/nrf/nvm.h b/ports/nrf/peripherals/nrf/nvm.h index 8ba95773d6..9e144d802a 100644 --- a/ports/nrf/peripherals/nrf/nvm.h +++ b/ports/nrf/peripherals/nrf/nvm.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2019 Nick Moore for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/nrf/supervisor/internal_flash.c b/ports/nrf/supervisor/internal_flash.c index 737bab2036..93de0b2c49 100644 --- a/ports/nrf/supervisor/internal_flash.c +++ b/ports/nrf/supervisor/internal_flash.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/nrf/supervisor/internal_flash.h b/ports/nrf/supervisor/internal_flash.h index 024a53ebba..81da690217 100644 --- a/ports/nrf/supervisor/internal_flash.h +++ b/ports/nrf/supervisor/internal_flash.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/stm/Makefile b/ports/stm/Makefile index a982de765b..e2dc2346e2 100755 --- a/ports/stm/Makefile +++ b/ports/stm/Makefile @@ -2,8 +2,8 @@ # # The MIT License (MIT) # -# Copyright (c) 2019 Dan Halbert for Adafruit Industries -# Copyright (c) 2019 Lucian Copeland for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2019 Dan Halbert for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2019 Lucian Copeland 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 diff --git a/ports/stm/common-hal/analogio/AnalogOut.c b/ports/stm/common-hal/analogio/AnalogOut.c index 2ea969f503..a505b2bf0f 100644 --- a/ports/stm/common-hal/analogio/AnalogOut.c +++ b/ports/stm/common-hal/analogio/AnalogOut.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2019, Lucian Copeland for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/stm/fatfs_port.c b/ports/stm/fatfs_port.c index 6a17f627bd..631f7f0982 100644 --- a/ports/stm/fatfs_port.c +++ b/ports/stm/fatfs_port.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/stm/supervisor/internal_flash.c b/ports/stm/supervisor/internal_flash.c index d37a54f60f..864403c366 100644 --- a/ports/stm/supervisor/internal_flash.c +++ b/ports/stm/supervisor/internal_flash.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2020 Lucian Copeland for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/stm/supervisor/internal_flash.h b/ports/stm/supervisor/internal_flash.h index 13ade4e6e7..ad5cba62d8 100644 --- a/ports/stm/supervisor/internal_flash.h +++ b/ports/stm/supervisor/internal_flash.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2020 Lucian Copeland for Adafruit Industries * Copyright (c) 2020 Mark Olsson * diff --git a/ports/stm/tools/parse_af_csv.py b/ports/stm/tools/parse_af_csv.py index 4e97252602..984696be0d 100644 --- a/ports/stm/tools/parse_af_csv.py +++ b/ports/stm/tools/parse_af_csv.py @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2020 Lucian Copeland for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2020 Lucian Copeland 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 diff --git a/ports/stm/tools/parse_pins_csv.py b/ports/stm/tools/parse_pins_csv.py index 4ab3fc25c9..68f6db586e 100644 --- a/ports/stm/tools/parse_pins_csv.py +++ b/ports/stm/tools/parse_pins_csv.py @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2020 Lucian Copeland for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2020 Lucian Copeland 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 diff --git a/ports/unix/fdfile.h b/ports/unix/fdfile.h index 69a9b6be41..d7da673be9 100644 --- a/ports/unix/fdfile.h +++ b/ports/unix/fdfile.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2016 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/unix/file.c b/ports/unix/file.c index e5c73d26c2..e4f62e3d5a 100644 --- a/ports/unix/file.c +++ b/ports/unix/file.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/gccollect.c b/ports/unix/gccollect.c index 02f6fc91a8..7cd74ec134 100644 --- a/ports/unix/gccollect.c +++ b/ports/unix/gccollect.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/input.c b/ports/unix/input.c index 7d60b46cc7..b661ce3e24 100644 --- a/ports/unix/input.c +++ b/ports/unix/input.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/main.c b/ports/unix/main.c index d1187ae905..5a3cbaf477 100644 --- a/ports/unix/main.c +++ b/ports/unix/main.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/modffi.c b/ports/unix/modffi.c index 03dc9e4ec6..c750f2eb77 100644 --- a/ports/unix/modffi.c +++ b/ports/unix/modffi.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/unix/modmachine.c b/ports/unix/modmachine.c index b2bca12063..61697cfb6f 100644 --- a/ports/unix/modmachine.c +++ b/ports/unix/modmachine.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/modos.c b/ports/unix/modos.c index d99d0d62c9..252b19a50c 100644 --- a/ports/unix/modos.c +++ b/ports/unix/modos.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/unix/modtime.c b/ports/unix/modtime.c index a8f6ed5c6e..cc9b4a3371 100644 --- a/ports/unix/modtime.c +++ b/ports/unix/modtime.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/moduos_vfs.c b/ports/unix/moduos_vfs.c index e9ac8e1f88..b45d4485b5 100644 --- a/ports/unix/moduos_vfs.c +++ b/ports/unix/moduos_vfs.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/moduselect.c b/ports/unix/moduselect.c index 1ea7dc19a5..dbda5e1107 100644 --- a/ports/unix/moduselect.c +++ b/ports/unix/moduselect.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * Copyright (c) 2015-2017 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/unix/modusocket.c b/ports/unix/modusocket.c index 95da276ed9..90651a19ea 100644 --- a/ports/unix/modusocket.c +++ b/ports/unix/modusocket.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/ports/unix/mpconfigport.h b/ports/unix/mpconfigport.h index 3ac7ceaf21..3ae4ff7866 100644 --- a/ports/unix/mpconfigport.h +++ b/ports/unix/mpconfigport.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/mpconfigport_coverage.h b/ports/unix/mpconfigport_coverage.h index 97c05cfee4..51015a5872 100644 --- a/ports/unix/mpconfigport_coverage.h +++ b/ports/unix/mpconfigport_coverage.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/mpconfigport_fast.h b/ports/unix/mpconfigport_fast.h index 442159eb4f..76e02c1b0a 100644 --- a/ports/unix/mpconfigport_fast.h +++ b/ports/unix/mpconfigport_fast.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/mpconfigport_freedos.h b/ports/unix/mpconfigport_freedos.h index 09c85ab1e3..19c73b7623 100644 --- a/ports/unix/mpconfigport_freedos.h +++ b/ports/unix/mpconfigport_freedos.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/mpconfigport_minimal.h b/ports/unix/mpconfigport_minimal.h index ef7a1a09a0..1a13d5725b 100644 --- a/ports/unix/mpconfigport_minimal.h +++ b/ports/unix/mpconfigport_minimal.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/mpconfigport_nanbox.h b/ports/unix/mpconfigport_nanbox.h index 7da2cf7b80..fa41407cfb 100644 --- a/ports/unix/mpconfigport_nanbox.h +++ b/ports/unix/mpconfigport_nanbox.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/mphalport.h b/ports/unix/mphalport.h index ff7a51567c..6f2880d4ef 100644 --- a/ports/unix/mphalport.h +++ b/ports/unix/mphalport.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/mpthreadport.c b/ports/unix/mpthreadport.c index baca0a2b1e..3641745bc6 100644 --- a/ports/unix/mpthreadport.c +++ b/ports/unix/mpthreadport.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/mpthreadport.h b/ports/unix/mpthreadport.h index b158ed5bcc..bd712ebee0 100644 --- a/ports/unix/mpthreadport.h +++ b/ports/unix/mpthreadport.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/qstrdefsport.h b/ports/unix/qstrdefsport.h index ebfaa6ccab..873e832720 100644 --- a/ports/unix/qstrdefsport.h +++ b/ports/unix/qstrdefsport.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ports/unix/unix_mphal.c b/ports/unix/unix_mphal.c index f27c62fd1d..e9494d7ff2 100644 --- a/ports/unix/unix_mphal.c +++ b/ports/unix/unix_mphal.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/argcheck.c b/py/argcheck.c index a8df206e28..9341c02a6c 100644 --- a/py/argcheck.c +++ b/py/argcheck.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmarm.c b/py/asmarm.c index 1a8923bc23..11e498b2c7 100644 --- a/py/asmarm.c +++ b/py/asmarm.c @@ -4,7 +4,7 @@ * The MIT License (MIT) * * Copyright (c) 2014 Fabian Vogt - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmarm.h b/py/asmarm.h index 5603030912..f63106a9b6 100644 --- a/py/asmarm.h +++ b/py/asmarm.h @@ -4,7 +4,7 @@ * The MIT License (MIT) * * Copyright (c) 2014 Fabian Vogt - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmbase.c b/py/asmbase.c index 4c84c3b255..4d080f095e 100644 --- a/py/asmbase.c +++ b/py/asmbase.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmbase.h b/py/asmbase.h index d2b4038931..3b2f59d159 100644 --- a/py/asmbase.h +++ b/py/asmbase.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmthumb.c b/py/asmthumb.c index c5b45f2f51..3cf47c5b15 100644 --- a/py/asmthumb.c +++ b/py/asmthumb.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmthumb.h b/py/asmthumb.h index b7e2acc048..32219eb55a 100644 --- a/py/asmthumb.h +++ b/py/asmthumb.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmx64.c b/py/asmx64.c index c900a08d1f..8706b806e5 100644 --- a/py/asmx64.c +++ b/py/asmx64.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmx64.h b/py/asmx64.h index ed0b785fb2..113d925119 100644 --- a/py/asmx64.h +++ b/py/asmx64.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmx86.c b/py/asmx86.c index 3938baaacb..8a08c68a03 100644 --- a/py/asmx86.c +++ b/py/asmx86.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmx86.h b/py/asmx86.h index 0908b8c711..05902350fc 100644 --- a/py/asmx86.h +++ b/py/asmx86.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmxtensa.c b/py/asmxtensa.c index 00448dfc59..98b49ecb5e 100644 --- a/py/asmxtensa.c +++ b/py/asmxtensa.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/asmxtensa.h b/py/asmxtensa.h index ef80f700a3..d43824338d 100644 --- a/py/asmxtensa.h +++ b/py/asmxtensa.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/bc.c b/py/bc.c index 69b4cb238b..6406713385 100644 --- a/py/bc.c +++ b/py/bc.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/bc.h b/py/bc.h index ebfdeaac1d..b71325f92b 100644 --- a/py/bc.h +++ b/py/bc.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/bc0.h b/py/bc0.h index 70acfb0cac..a031bcc88b 100644 --- a/py/bc0.h +++ b/py/bc0.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/binary.c b/py/binary.c index 2ec12fa931..cd0f1aa4df 100644 --- a/py/binary.c +++ b/py/binary.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/binary.h b/py/binary.h index 0dae6a29e6..6c70d93339 100644 --- a/py/binary.h +++ b/py/binary.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/builtin.h b/py/builtin.h index 6e0d5d9bef..2275691fc8 100644 --- a/py/builtin.h +++ b/py/builtin.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/builtinevex.c b/py/builtinevex.c index cb046b4076..ade12d39d0 100644 --- a/py/builtinevex.c +++ b/py/builtinevex.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/builtinhelp.c b/py/builtinhelp.c index 01c0bc84e0..d12e088d60 100644 --- a/py/builtinhelp.c +++ b/py/builtinhelp.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/builtinimport.c b/py/builtinimport.c index 2be779c6c0..597819f55c 100644 --- a/py/builtinimport.c +++ b/py/builtinimport.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/circuitpy_defns.mk b/py/circuitpy_defns.mk index 32d3640069..815ee2e62b 100644 --- a/py/circuitpy_defns.mk +++ b/py/circuitpy_defns.mk @@ -2,7 +2,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2019 Dan Halbert for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2019 Dan Halbert 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 diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 302368f74a..075981e30f 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -3,7 +3,7 @@ # # The MIT License (MIT) # -# Copyright (c) 2019 Dan Halbert for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2019 Dan Halbert 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 diff --git a/py/compile.c b/py/compile.c index d5fae02994..4708110056 100644 --- a/py/compile.c +++ b/py/compile.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/compile.h b/py/compile.h index 3297e83aeb..0f8d023a25 100644 --- a/py/compile.h +++ b/py/compile.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/emit.h b/py/emit.h index aa98efa774..30543d2a3c 100644 --- a/py/emit.h +++ b/py/emit.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/emitbc.c b/py/emitbc.c index f3951e9cb5..f45dcb9167 100644 --- a/py/emitbc.c +++ b/py/emitbc.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/emitcommon.c b/py/emitcommon.c index 89cc2c9597..88c9803a6e 100644 --- a/py/emitcommon.c +++ b/py/emitcommon.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/emitglue.c b/py/emitglue.c index 7708689dd4..3a3174b0f8 100644 --- a/py/emitglue.c +++ b/py/emitglue.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/emitglue.h b/py/emitglue.h index 0830a0d5c8..2ddcc3e53e 100644 --- a/py/emitglue.h +++ b/py/emitglue.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/emitinlinethumb.c b/py/emitinlinethumb.c index 7f0ec66590..47ed14321e 100644 --- a/py/emitinlinethumb.c +++ b/py/emitinlinethumb.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/emitinlinextensa.c b/py/emitinlinextensa.c index 9cd65824be..ae84aae2e3 100644 --- a/py/emitinlinextensa.c +++ b/py/emitinlinextensa.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/emitnative.c b/py/emitnative.c index 60f31d15f5..51919e389b 100644 --- a/py/emitnative.c +++ b/py/emitnative.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/formatfloat.c b/py/formatfloat.c index dc7fc1d1fd..166a98a2e6 100644 --- a/py/formatfloat.c +++ b/py/formatfloat.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/formatfloat.h b/py/formatfloat.h index 9a1643b4dd..c433cb8057 100644 --- a/py/formatfloat.h +++ b/py/formatfloat.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/frozenmod.c b/py/frozenmod.c index a9143b582a..0e040a44fd 100644 --- a/py/frozenmod.c +++ b/py/frozenmod.c @@ -4,7 +4,7 @@ * The MIT License (MIT) * * Copyright (c) 2015 Paul Sokolovsky - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/frozenmod.h b/py/frozenmod.h index 1e50f3807a..3ba1b590d7 100644 --- a/py/frozenmod.h +++ b/py/frozenmod.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/gc.c b/py/gc.c index 271bc94624..2f3f63522e 100755 --- a/py/gc.c +++ b/py/gc.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/gc.h b/py/gc.h index 2a0811f4ed..b7c2889d5c 100644 --- a/py/gc.h +++ b/py/gc.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/grammar.h b/py/grammar.h index 5a5b682acc..28f7850398 100644 --- a/py/grammar.h +++ b/py/grammar.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/ioctl.h b/py/ioctl.h index ced4275900..8c84835cc1 100644 --- a/py/ioctl.h +++ b/py/ioctl.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/lexer.c b/py/lexer.c index 00cd59bcae..de121f87a2 100644 --- a/py/lexer.c +++ b/py/lexer.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/lexer.h b/py/lexer.h index a3eaa2a7e6..74195fe030 100644 --- a/py/lexer.h +++ b/py/lexer.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/malloc.c b/py/malloc.c index f190582ab2..8d5141ee04 100644 --- a/py/malloc.c +++ b/py/malloc.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/map.c b/py/map.c index 57c11dbc97..69eed9d3b9 100644 --- a/py/map.c +++ b/py/map.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/misc.h b/py/misc.h index 673568f226..944c0a7164 100644 --- a/py/misc.h +++ b/py/misc.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/modarray.c b/py/modarray.c index c0cdca9286..75bc5169f8 100644 --- a/py/modarray.c +++ b/py/modarray.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/modbuiltins.c b/py/modbuiltins.c index e764f1987e..905c3471f1 100644 --- a/py/modbuiltins.c +++ b/py/modbuiltins.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/modcmath.c b/py/modcmath.c index 70fd542af9..d6b364733d 100644 --- a/py/modcmath.c +++ b/py/modcmath.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/modcollections.c b/py/modcollections.c index 91e7355281..9634c5ce73 100644 --- a/py/modcollections.c +++ b/py/modcollections.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/modgc.c b/py/modgc.c index 55e73defce..b01876422a 100644 --- a/py/modgc.c +++ b/py/modgc.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/modio.c b/py/modio.c index 17840a6d87..4bcc3971eb 100644 --- a/py/modio.c +++ b/py/modio.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/modmath.c b/py/modmath.c index 9d75ea2d52..ec520bb6f2 100644 --- a/py/modmath.c +++ b/py/modmath.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/modmicropython.c b/py/modmicropython.c index a45d44653a..7e29825ae4 100644 --- a/py/modmicropython.c +++ b/py/modmicropython.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/modstruct.c b/py/modstruct.c index a238d3935a..fe766a4deb 100644 --- a/py/modstruct.c +++ b/py/modstruct.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/modsys.c b/py/modsys.c index 68e048d91d..a1d2cf831c 100644 --- a/py/modsys.c +++ b/py/modsys.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014-2017 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/modthread.c b/py/modthread.c index 1c00f6397e..250756ef27 100644 --- a/py/modthread.c +++ b/py/modthread.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/moduerrno.c b/py/moduerrno.c index 3be5adba1e..3928f8cd89 100644 --- a/py/moduerrno.c +++ b/py/moduerrno.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/mpconfig.h b/py/mpconfig.h index 513f04f6ef..034d39d409 100755 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/mperrno.h b/py/mperrno.h index 911a9b4131..e339fde852 100644 --- a/py/mperrno.h +++ b/py/mperrno.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/mphal.h b/py/mphal.h index 92de01d08b..c242dd2452 100644 --- a/py/mphal.h +++ b/py/mphal.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/mpprint.c b/py/mpprint.c index c2e65301c9..e814d2ebe5 100644 --- a/py/mpprint.c +++ b/py/mpprint.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/mpprint.h b/py/mpprint.h index 07462bddcc..0d12b9a3d0 100644 --- a/py/mpprint.h +++ b/py/mpprint.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/mpstate.c b/py/mpstate.c index 32f1d60a59..b3957cc09a 100644 --- a/py/mpstate.c +++ b/py/mpstate.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/mpstate.h b/py/mpstate.h index a5815776a4..32f353528c 100644 --- a/py/mpstate.h +++ b/py/mpstate.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/mpthread.h b/py/mpthread.h index 602df830c4..3a6983e9d0 100644 --- a/py/mpthread.h +++ b/py/mpthread.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/mpz.c b/py/mpz.c index 8687092d02..7800cdcc45 100644 --- a/py/mpz.c +++ b/py/mpz.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/mpz.h b/py/mpz.h index 3c36cac66b..e412f5cce1 100644 --- a/py/mpz.h +++ b/py/mpz.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/nativeglue.c b/py/nativeglue.c index b87da6931e..9ac8060097 100644 --- a/py/nativeglue.c +++ b/py/nativeglue.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/nlr.c b/py/nlr.c index 1bfd9c19b0..95d833177d 100644 --- a/py/nlr.c +++ b/py/nlr.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/nlr.h b/py/nlr.h index 1b95002d3b..aed24e277a 100644 --- a/py/nlr.h +++ b/py/nlr.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/nlrsetjmp.c b/py/nlrsetjmp.c index 960dd86f52..a93595dc83 100644 --- a/py/nlrsetjmp.c +++ b/py/nlrsetjmp.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/nlrthumb.c b/py/nlrthumb.c index 056aa358e7..464995fa88 100644 --- a/py/nlrthumb.c +++ b/py/nlrthumb.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/nlrx64.c b/py/nlrx64.c index 569ad84fb0..246d6a95b8 100644 --- a/py/nlrx64.c +++ b/py/nlrx64.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/nlrx86.c b/py/nlrx86.c index 6fbbe44327..18306253d7 100644 --- a/py/nlrx86.c +++ b/py/nlrx86.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/nlrxtensa.c b/py/nlrxtensa.c index 5640350043..e04535ff83 100644 --- a/py/nlrxtensa.c +++ b/py/nlrxtensa.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/obj.c b/py/obj.c index 4fa2032dc7..7644b5de8e 100644 --- a/py/obj.c +++ b/py/obj.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/obj.h b/py/obj.h index fa315d12f7..8536e33335 100644 --- a/py/obj.h +++ b/py/obj.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objarray.c b/py/objarray.c index fccb966a2b..7dfdc5b121 100644 --- a/py/objarray.c +++ b/py/objarray.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objarray.h b/py/objarray.h index 0dad705711..7ad5328f0e 100644 --- a/py/objarray.h +++ b/py/objarray.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objattrtuple.c b/py/objattrtuple.c index 3cc298d4e9..ac9b808a20 100644 --- a/py/objattrtuple.c +++ b/py/objattrtuple.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objbool.c b/py/objbool.c index cd7d7100c9..5e8f630ff1 100644 --- a/py/objbool.c +++ b/py/objbool.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objboundmeth.c b/py/objboundmeth.c index a05680d410..5bf25567f0 100644 --- a/py/objboundmeth.c +++ b/py/objboundmeth.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objcell.c b/py/objcell.c index 111906412e..25fe5232a1 100644 --- a/py/objcell.c +++ b/py/objcell.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objclosure.c b/py/objclosure.c index 4eb9eb8b84..6f6772ff1c 100644 --- a/py/objclosure.c +++ b/py/objclosure.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objcomplex.c b/py/objcomplex.c index b38e2c5fa6..43e0690d38 100644 --- a/py/objcomplex.c +++ b/py/objcomplex.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objdict.c b/py/objdict.c index 3ec3cbe80a..39169fe1ad 100644 --- a/py/objdict.c +++ b/py/objdict.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objenumerate.c b/py/objenumerate.c index 818725d856..dee7fc760d 100644 --- a/py/objenumerate.c +++ b/py/objenumerate.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objexcept.c b/py/objexcept.c index 796be122fe..e3b953543e 100644 --- a/py/objexcept.c +++ b/py/objexcept.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objexcept.h b/py/objexcept.h index 7c30762248..c19658427a 100644 --- a/py/objexcept.h +++ b/py/objexcept.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objfilter.c b/py/objfilter.c index af95326e60..0e02f4b5ef 100644 --- a/py/objfilter.c +++ b/py/objfilter.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objfloat.c b/py/objfloat.c index f544ade053..59f1eb2f69 100644 --- a/py/objfloat.c +++ b/py/objfloat.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objfun.c b/py/objfun.c index c586a290ac..933044ef71 100644 --- a/py/objfun.c +++ b/py/objfun.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objfun.h b/py/objfun.h index fbb3516261..457c3cf48c 100644 --- a/py/objfun.h +++ b/py/objfun.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objgenerator.c b/py/objgenerator.c index 01d42ba94f..6ffcfae46a 100644 --- a/py/objgenerator.c +++ b/py/objgenerator.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014-2017 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objgenerator.h b/py/objgenerator.h index 80bf9cd860..4b7f8c1ac5 100644 --- a/py/objgenerator.h +++ b/py/objgenerator.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objgetitemiter.c b/py/objgetitemiter.c index ec41c2c5b1..44e8fe8894 100644 --- a/py/objgetitemiter.c +++ b/py/objgetitemiter.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objint.c b/py/objint.c index b78c9f25b1..82f5aadd18 100644 --- a/py/objint.c +++ b/py/objint.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objint.h b/py/objint.h index e8c9bc3e06..bba9ff50a5 100644 --- a/py/objint.h +++ b/py/objint.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objint_longlong.c b/py/objint_longlong.c index ce02fa1755..1890496305 100644 --- a/py/objint_longlong.c +++ b/py/objint_longlong.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objint_mpz.c b/py/objint_mpz.c index 95e4d7e176..90060114ed 100644 --- a/py/objint_mpz.c +++ b/py/objint_mpz.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objlist.c b/py/objlist.c index 608ea9f6ca..9242020d45 100644 --- a/py/objlist.c +++ b/py/objlist.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objlist.h b/py/objlist.h index a43663db76..f02030557b 100644 --- a/py/objlist.h +++ b/py/objlist.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objmap.c b/py/objmap.c index cf71f99eeb..5cf975f492 100644 --- a/py/objmap.c +++ b/py/objmap.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objmodule.c b/py/objmodule.c index b6a8a084e9..757aece046 100644 --- a/py/objmodule.c +++ b/py/objmodule.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objmodule.h b/py/objmodule.h index b7702ec50b..0b9b2d130d 100644 --- a/py/objmodule.h +++ b/py/objmodule.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objnamedtuple.c b/py/objnamedtuple.c index 84dcf79097..6c36909e75 100644 --- a/py/objnamedtuple.c +++ b/py/objnamedtuple.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objnamedtuple.h b/py/objnamedtuple.h index 0ea0d28622..9f290c3ec4 100644 --- a/py/objnamedtuple.h +++ b/py/objnamedtuple.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objnone.c b/py/objnone.c index da1031835c..b1fbd48f75 100644 --- a/py/objnone.c +++ b/py/objnone.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objobject.c b/py/objobject.c index a42edde3c6..8983cd9ad3 100644 --- a/py/objobject.c +++ b/py/objobject.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objproperty.c b/py/objproperty.c index ddf484af2b..e909533c45 100644 --- a/py/objproperty.c +++ b/py/objproperty.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objproperty.h b/py/objproperty.h index f95c1083c0..f3ade89d92 100644 --- a/py/objproperty.h +++ b/py/objproperty.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objrange.c b/py/objrange.c index 30d55c56cd..7af9f37a11 100644 --- a/py/objrange.c +++ b/py/objrange.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objreversed.c b/py/objreversed.c index 4937d08189..63d122b5db 100644 --- a/py/objreversed.c +++ b/py/objreversed.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objset.c b/py/objset.c index 5d1608c7ea..d986c6ddaf 100644 --- a/py/objset.c +++ b/py/objset.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objsingleton.c b/py/objsingleton.c index 67535391ea..1c27573343 100644 --- a/py/objsingleton.c +++ b/py/objsingleton.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objslice.c b/py/objslice.c index cbbee326e9..40d4d3c760 100644 --- a/py/objslice.c +++ b/py/objslice.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objstr.c b/py/objstr.c index a60f507e99..5e0c6fdfaa 100644 --- a/py/objstr.c +++ b/py/objstr.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objstr.h b/py/objstr.h index 61a11d0bd6..4b5e2054e0 100644 --- a/py/objstr.h +++ b/py/objstr.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objstringio.c b/py/objstringio.c index 178e6446cc..eb40e51543 100644 --- a/py/objstringio.c +++ b/py/objstringio.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objstringio.h b/py/objstringio.h index 56738f4e45..38778f03ae 100644 --- a/py/objstringio.h +++ b/py/objstringio.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objstrunicode.c b/py/objstrunicode.c index 30000a51e7..351a67e913 100644 --- a/py/objstrunicode.c +++ b/py/objstrunicode.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objtuple.c b/py/objtuple.c index 0a2ed6f4c3..d34a7f7624 100644 --- a/py/objtuple.c +++ b/py/objtuple.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objtuple.h b/py/objtuple.h index 7f20ab7b6f..d2e87e9949 100644 --- a/py/objtuple.h +++ b/py/objtuple.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objtype.c b/py/objtype.c index ad68b85d2a..fd51ce36b8 100644 --- a/py/objtype.c +++ b/py/objtype.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2018 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2018 Damien P. George * Copyright (c) 2014-2016 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/objtype.h b/py/objtype.h index a32c874967..a44622ffeb 100644 --- a/py/objtype.h +++ b/py/objtype.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/objzip.c b/py/objzip.c index ce9afd55de..885e464418 100644 --- a/py/objzip.c +++ b/py/objzip.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/opmethods.c b/py/opmethods.c index 247fa5bbc8..07d1e340de 100644 --- a/py/opmethods.c +++ b/py/opmethods.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/parse.c b/py/parse.c index b8cfda2cb5..28621cf898 100644 --- a/py/parse.c +++ b/py/parse.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/parse.h b/py/parse.h index 9a1a2b4dd4..946b41eac3 100644 --- a/py/parse.h +++ b/py/parse.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/parsenum.c b/py/parsenum.c index 6ef309b475..da63825e4b 100644 --- a/py/parsenum.c +++ b/py/parsenum.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/parsenum.h b/py/parsenum.h index a5bed731d2..a91ca532da 100644 --- a/py/parsenum.h +++ b/py/parsenum.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/parsenumbase.c b/py/parsenumbase.c index ba10591226..e4ac6d00ed 100644 --- a/py/parsenumbase.c +++ b/py/parsenumbase.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/parsenumbase.h b/py/parsenumbase.h index 3a525f993c..43dcc2353a 100644 --- a/py/parsenumbase.h +++ b/py/parsenumbase.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/persistentcode.c b/py/persistentcode.c index eb69bd4079..9b438453ad 100644 --- a/py/persistentcode.c +++ b/py/persistentcode.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/persistentcode.h b/py/persistentcode.h index d04e0b6330..cbb300e4b3 100644 --- a/py/persistentcode.h +++ b/py/persistentcode.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/pystack.c b/py/pystack.c index 552e59d537..f79ea92101 100644 --- a/py/pystack.c +++ b/py/pystack.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/pystack.h b/py/pystack.h index 82ac3743d1..3fbcdeeb8a 100644 --- a/py/pystack.h +++ b/py/pystack.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/qstr.c b/py/qstr.c index bb80244355..17d8517c93 100755 --- a/py/qstr.c +++ b/py/qstr.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/qstr.h b/py/qstr.h index 39b904fb18..070a3cd4f8 100644 --- a/py/qstr.h +++ b/py/qstr.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/qstrdefs.h b/py/qstrdefs.h index a609058120..b682671970 100644 --- a/py/qstrdefs.h +++ b/py/qstrdefs.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/reader.c b/py/reader.c index 80364104bb..1b0bbf094a 100644 --- a/py/reader.c +++ b/py/reader.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/reader.h b/py/reader.h index 8511c72ce5..6d8565d7b7 100644 --- a/py/reader.h +++ b/py/reader.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/repl.c b/py/repl.c index aa91c3f12e..785c0fb538 100644 --- a/py/repl.c +++ b/py/repl.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013-2015 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013-2015 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/repl.h b/py/repl.h index a7a4136cad..89b64c45f0 100644 --- a/py/repl.h +++ b/py/repl.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/runtime.c b/py/runtime.c index 59dcbc7a1c..91ead1fba9 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/runtime.h b/py/runtime.h index f811035571..d3a82333e7 100644 --- a/py/runtime.h +++ b/py/runtime.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/runtime0.h b/py/runtime0.h index 16434b315a..a8089ea646 100644 --- a/py/runtime0.h +++ b/py/runtime0.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/scheduler.c b/py/scheduler.c index 30851a4d2b..fea7e0153d 100644 --- a/py/scheduler.c +++ b/py/scheduler.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2017 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2017 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/scope.c b/py/scope.c index 1a6ae7b8ad..98f39d4c6d 100644 --- a/py/scope.c +++ b/py/scope.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/scope.h b/py/scope.h index e3b6a57c79..c92a39e5e6 100644 --- a/py/scope.h +++ b/py/scope.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/sequence.c b/py/sequence.c index 0e668ea2a1..e6421fde5e 100644 --- a/py/sequence.c +++ b/py/sequence.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/showbc.c b/py/showbc.c index e71d8a2536..5a8e660fc4 100644 --- a/py/showbc.c +++ b/py/showbc.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/smallint.c b/py/smallint.c index aa542ca7bf..9124b76c13 100644 --- a/py/smallint.c +++ b/py/smallint.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/smallint.h b/py/smallint.h index 6a3c75236c..c58584413f 100644 --- a/py/smallint.h +++ b/py/smallint.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/stream.c b/py/stream.c index 2ff2b76a61..ae702bb1b6 100644 --- a/py/stream.c +++ b/py/stream.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/stream.h b/py/stream.h index dc9fc84c96..be6b23d40d 100644 --- a/py/stream.h +++ b/py/stream.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/unicode.c b/py/unicode.c index 935dc9012e..a17dbf969b 100644 --- a/py/unicode.c +++ b/py/unicode.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/unicode.h b/py/unicode.h index c1fb517894..78e7a7ab7e 100644 --- a/py/unicode.h +++ b/py/unicode.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/vm.c b/py/vm.c index 4f0340681e..9b3354b096 100644 --- a/py/vm.c +++ b/py/vm.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/py/vmentrytable.h b/py/vmentrytable.h index 31a96dbec4..e01199eee2 100644 --- a/py/vmentrytable.h +++ b/py/vmentrytable.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/vstr.c b/py/vstr.c index 91cd7f584f..ccc567d100 100644 --- a/py/vstr.c +++ b/py/vstr.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/py/warning.c b/py/warning.c index 12d0f9c99b..d516eabddf 100644 --- a/py/warning.c +++ b/py/warning.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/setup.py b/setup.py index 769bc66e1d..d2989d068d 100644 --- a/setup.py +++ b/setup.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + from datetime import datetime from setuptools import setup from pathlib import Path diff --git a/shared-bindings/analogio/AnalogIn.c b/shared-bindings/analogio/AnalogIn.c index 400784b390..2aadf1c764 100644 --- a/shared-bindings/analogio/AnalogIn.c +++ b/shared-bindings/analogio/AnalogIn.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/analogio/AnalogIn.h b/shared-bindings/analogio/AnalogIn.h index 4aa7fca233..32f11e08f5 100644 --- a/shared-bindings/analogio/AnalogIn.h +++ b/shared-bindings/analogio/AnalogIn.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/analogio/AnalogOut.c b/shared-bindings/analogio/AnalogOut.c index a8edcc0ae1..62b73c5b13 100644 --- a/shared-bindings/analogio/AnalogOut.c +++ b/shared-bindings/analogio/AnalogOut.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/analogio/AnalogOut.h b/shared-bindings/analogio/AnalogOut.h index 6fe5d9b193..e4e94548b8 100644 --- a/shared-bindings/analogio/AnalogOut.h +++ b/shared-bindings/analogio/AnalogOut.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/digitalio/DigitalInOut.c b/shared-bindings/digitalio/DigitalInOut.c index eaf2c18101..0ef527f768 100644 --- a/shared-bindings/digitalio/DigitalInOut.c +++ b/shared-bindings/digitalio/DigitalInOut.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/digitalio/DigitalInOut.h b/shared-bindings/digitalio/DigitalInOut.h index dd6f088ab4..3d1f9c7cb3 100644 --- a/shared-bindings/digitalio/DigitalInOut.h +++ b/shared-bindings/digitalio/DigitalInOut.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/gnss/GNSS.c b/shared-bindings/gnss/GNSS.c index 929e02ab81..1867665911 100644 --- a/shared-bindings/gnss/GNSS.c +++ b/shared-bindings/gnss/GNSS.c @@ -1,28 +1,6 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright 2020 Sony Semiconductor Solutions Corporation - * - * 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. - */ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT #include "shared-bindings/gnss/GNSS.h" #include "shared-bindings/time/__init__.h" diff --git a/shared-bindings/gnss/GNSS.h b/shared-bindings/gnss/GNSS.h index 61ae35b12a..60069a90a9 100644 --- a/shared-bindings/gnss/GNSS.h +++ b/shared-bindings/gnss/GNSS.h @@ -1,28 +1,6 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright 2020 Sony Semiconductor Solutions Corporation - * - * 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. - */ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT #ifndef MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_GNSS_H #define MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_GNSS_H diff --git a/shared-bindings/gnss/PositionFix.c b/shared-bindings/gnss/PositionFix.c index 106a28c347..262ebf3190 100644 --- a/shared-bindings/gnss/PositionFix.c +++ b/shared-bindings/gnss/PositionFix.c @@ -1,28 +1,6 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright 2020 Sony Semiconductor Solutions Corporation - * - * 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. - */ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT #include "shared-bindings/gnss/PositionFix.h" diff --git a/shared-bindings/gnss/PositionFix.h b/shared-bindings/gnss/PositionFix.h index 64497cb59b..34090872cc 100644 --- a/shared-bindings/gnss/PositionFix.h +++ b/shared-bindings/gnss/PositionFix.h @@ -1,28 +1,6 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright 2020 Sony Semiconductor Solutions Corporation - * - * 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. - */ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT #ifndef MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_POSITIONFIX_H #define MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_POSITIONFIX_H diff --git a/shared-bindings/gnss/SatelliteSystem.c b/shared-bindings/gnss/SatelliteSystem.c index badc02b964..8739fbc029 100644 --- a/shared-bindings/gnss/SatelliteSystem.c +++ b/shared-bindings/gnss/SatelliteSystem.c @@ -1,28 +1,6 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright 2020 Sony Semiconductor Solutions Corporation - * - * 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. - */ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT #include "shared-bindings/gnss/SatelliteSystem.h" diff --git a/shared-bindings/gnss/SatelliteSystem.h b/shared-bindings/gnss/SatelliteSystem.h index 484e861abd..17f1550028 100644 --- a/shared-bindings/gnss/SatelliteSystem.h +++ b/shared-bindings/gnss/SatelliteSystem.h @@ -1,28 +1,6 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright 2020 Sony Semiconductor Solutions Corporation - * - * 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. - */ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT #ifndef MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_SATELLITESYSTEM_H #define MICROPY_INCLUDED_SHARED_BINDINGS_GNSS_SATELLITESYSTEM_H diff --git a/shared-bindings/gnss/__init__.c b/shared-bindings/gnss/__init__.c index b3cf722f11..4b0d312ae6 100644 --- a/shared-bindings/gnss/__init__.c +++ b/shared-bindings/gnss/__init__.c @@ -1,28 +1,6 @@ -/* - * This file is part of the MicroPython project, http://micropython.org/ - * - * The MIT License (MIT) - * - * Copyright 2020 Sony Semiconductor Solutions Corporation - * - * 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. - */ +// SPDX-FileCopyrightText: Sony Semiconductor Solutions Corporation +// +// SPDX-License-Identifier: MIT #include "py/obj.h" #include "py/runtime.h" diff --git a/shared-bindings/math/__init__.c b/shared-bindings/math/__init__.c index 8226a08ecb..ad2e1877d7 100644 --- a/shared-bindings/math/__init__.c +++ b/shared-bindings/math/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2017 Michael McWethy * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/shared-bindings/network/__init__.c b/shared-bindings/network/__init__.c index 6af86688eb..58aa13473e 100644 --- a/shared-bindings/network/__init__.c +++ b/shared-bindings/network/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/network/__init__.h b/shared-bindings/network/__init__.h index 4fe5e75a37..b579aa57a3 100644 --- a/shared-bindings/network/__init__.h +++ b/shared-bindings/network/__init__.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/os/__init__.c b/shared-bindings/os/__init__.c index 4e991d089d..a247d6d845 100644 --- a/shared-bindings/os/__init__.c +++ b/shared-bindings/os/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2015 Josef Gajdusek * Copyright (c) 2016 Scott Shawcroft for Adafruit Industries * diff --git a/shared-bindings/pulseio/PWMOut.c b/shared-bindings/pulseio/PWMOut.c index 7970c02f34..a51789053f 100644 --- a/shared-bindings/pulseio/PWMOut.c +++ b/shared-bindings/pulseio/PWMOut.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/pulseio/PWMOut.h b/shared-bindings/pulseio/PWMOut.h index c01e0c9261..c72278e0e0 100644 --- a/shared-bindings/pulseio/PWMOut.h +++ b/shared-bindings/pulseio/PWMOut.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/pulseio/PulseOut.h b/shared-bindings/pulseio/PulseOut.h index 2cf78d3f29..390910ff62 100644 --- a/shared-bindings/pulseio/PulseOut.h +++ b/shared-bindings/pulseio/PulseOut.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/rtc/RTC.c b/shared-bindings/rtc/RTC.c index 58fe308f53..7debb70c18 100644 --- a/shared-bindings/rtc/RTC.c +++ b/shared-bindings/rtc/RTC.c @@ -4,7 +4,7 @@ * The MIT License (MIT) * * Copyright (c) 2018 Noralf Trønnes - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/rtc/__init__.c b/shared-bindings/rtc/__init__.c index b204d511c9..9f8d37fdd1 100644 --- a/shared-bindings/rtc/__init__.c +++ b/shared-bindings/rtc/__init__.c @@ -4,7 +4,7 @@ * The MIT License (MIT) * * Copyright (c) 2018 Noralf Trønnes - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/socket/__init__.c b/shared-bindings/socket/__init__.c index 19c4850cde..0ded0218bb 100644 --- a/shared-bindings/socket/__init__.c +++ b/shared-bindings/socket/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * 2018 Nick Moore for Adafruit Industries * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/shared-bindings/storage/__init__.c b/shared-bindings/storage/__init__.c index 3abc5512c9..725329ad5b 100644 --- a/shared-bindings/storage/__init__.c +++ b/shared-bindings/storage/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2015 Josef Gajdusek * Copyright (c) 2016 Scott Shawcroft for Adafruit Industries * diff --git a/shared-bindings/struct/__init__.c b/shared-bindings/struct/__init__.c index 256b385c8e..26c0ff3aff 100644 --- a/shared-bindings/struct/__init__.c +++ b/shared-bindings/struct/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2014 Paul Sokolovsky * Copyright (c) 2017 Michael McWethy * diff --git a/shared-bindings/time/__init__.c b/shared-bindings/time/__init__.c index 531980effc..2f8a1c3e2c 100644 --- a/shared-bindings/time/__init__.c +++ b/shared-bindings/time/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2015 Josef Gajdusek * Copyright (c) 2016 Scott Shawcroft for Adafruit Industries * diff --git a/shared-bindings/touchio/TouchIn.c b/shared-bindings/touchio/TouchIn.c index 4c1d534eaa..54e5ac4a5e 100644 --- a/shared-bindings/touchio/TouchIn.c +++ b/shared-bindings/touchio/TouchIn.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/touchio/TouchIn.h b/shared-bindings/touchio/TouchIn.h index e04e79c0b6..42f9da46d5 100644 --- a/shared-bindings/touchio/TouchIn.h +++ b/shared-bindings/touchio/TouchIn.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/wiznet/__init__.c b/shared-bindings/wiznet/__init__.c index 0d3f1e4cd6..bc7ff150fe 100644 --- a/shared-bindings/wiznet/__init__.c +++ b/shared-bindings/wiznet/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-bindings/wiznet/wiznet5k.c b/shared-bindings/wiznet/wiznet5k.c index 2f49dffea9..b3f372f41a 100644 --- a/shared-bindings/wiznet/wiznet5k.c +++ b/shared-bindings/wiznet/wiznet5k.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-module/bitbangio/I2C.c b/shared-module/bitbangio/I2C.c index 5a9ac9a991..d44aec0e75 100644 --- a/shared-module/bitbangio/I2C.c +++ b/shared-module/bitbangio/I2C.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2016 Damien P. George, Scott Shawcroft + * SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George, Scott Shawcroft * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-module/bitbangio/SPI.c b/shared-module/bitbangio/SPI.c index e0ff1184fe..f3fe16029a 100644 --- a/shared-module/bitbangio/SPI.c +++ b/shared-module/bitbangio/SPI.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-module/network/__init__.h b/shared-module/network/__init__.h index f4eb05bb51..280cfe6c81 100644 --- a/shared-module/network/__init__.h +++ b/shared-module/network/__init__.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2018 Nick Moore * * Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/shared-module/os/__init__.c b/shared-module/os/__init__.c index 8060eec4f3..39cf40fda3 100644 --- a/shared-module/os/__init__.c +++ b/shared-module/os/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2015 Josef Gajdusek * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries * diff --git a/shared-module/storage/__init__.c b/shared-module/storage/__init__.c index c3d4b50c8e..aa3bcc6867 100644 --- a/shared-module/storage/__init__.c +++ b/shared-module/storage/__init__.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * Copyright (c) 2015 Josef Gajdusek * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries * diff --git a/shared-module/wiznet/wiznet5k.c b/shared-module/wiznet/wiznet5k.c index a603a55937..8ccb4ff8d2 100644 --- a/shared-module/wiznet/wiznet5k.c +++ b/shared-module/wiznet/wiznet5k.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/shared-module/wiznet/wiznet5k.h b/shared-module/wiznet/wiznet5k.h index 19823ae550..4597a30160 100644 --- a/shared-module/wiznet/wiznet5k.h +++ b/shared-module/wiznet/wiznet5k.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/supervisor/flash.h b/supervisor/flash.h index a8a77bf040..cd69cbfa9b 100644 --- a/supervisor/flash.h +++ b/supervisor/flash.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/supervisor/shared/external_flash/common_commands.h b/supervisor/shared/external_flash/common_commands.h index 2eaa848331..37efd8ceb1 100644 --- a/supervisor/shared/external_flash/common_commands.h +++ b/supervisor/shared/external_flash/common_commands.h @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/supervisor/stub/internal_flash.c b/supervisor/stub/internal_flash.c index 5a82f81f77..3a4ba935de 100644 --- a/supervisor/stub/internal_flash.c +++ b/supervisor/stub/internal_flash.c @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (c) 2013, 2014 Damien P. George + * SPDX-FileCopyrightText: Copyright (c) 2013, 2014 Damien P. George * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/tests/skip_if.py b/tests/skip_if.py index 7d6c5b2075..a8f50c4656 100644 --- a/tests/skip_if.py +++ b/tests/skip_if.py @@ -1,24 +1,7 @@ -# The MIT License (MIT) +# SPDX-FileCopyrightText: Copyright (c) 2017 Scott Shawcroft for Adafruit Industries +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # -# Copyright (c) 2017 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. +# SPDX-License-Identifier: MIT # This must be on one line so its skipped when built into tests. """This file provides helpers to detect particular running conditions and skip the test when appropriate.""" diff --git a/tests/thread/mutate_bytearray.py b/tests/thread/mutate_bytearray.py index f91b2d5807..5015c3f9cf 100644 --- a/tests/thread/mutate_bytearray.py +++ b/tests/thread/mutate_bytearray.py @@ -1,6 +1,8 @@ # test concurrent mutating access to a shared bytearray object # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/mutate_dict.py b/tests/thread/mutate_dict.py index c57d332d51..563fce39de 100644 --- a/tests/thread/mutate_dict.py +++ b/tests/thread/mutate_dict.py @@ -1,6 +1,8 @@ # test concurrent mutating access to a shared dict object # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/mutate_instance.py b/tests/thread/mutate_instance.py index a1ae428b54..2ecfbe1092 100644 --- a/tests/thread/mutate_instance.py +++ b/tests/thread/mutate_instance.py @@ -1,6 +1,8 @@ # test concurrent mutating access to a shared user instance # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/mutate_list.py b/tests/thread/mutate_list.py index 764a9bd99e..d70e8a8a38 100644 --- a/tests/thread/mutate_list.py +++ b/tests/thread/mutate_list.py @@ -1,6 +1,8 @@ # test concurrent mutating access to a shared list object # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/mutate_set.py b/tests/thread/mutate_set.py index 5492d86313..c4529f3562 100644 --- a/tests/thread/mutate_set.py +++ b/tests/thread/mutate_set.py @@ -1,6 +1,8 @@ # test concurrent mutating access to a shared set object # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/stress_aes.py b/tests/thread/stress_aes.py index df75e616c6..ebf7af371b 100644 --- a/tests/thread/stress_aes.py +++ b/tests/thread/stress_aes.py @@ -11,7 +11,9 @@ # aggressive by changing the amount of data to encrypt, the number of loops and # the number of threads. # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT ################################################################## # discrete arithmetic routines, mostly from a precomputed table diff --git a/tests/thread/stress_heap.py b/tests/thread/stress_heap.py index 5482a9ac6f..206cf1a860 100644 --- a/tests/thread/stress_heap.py +++ b/tests/thread/stress_heap.py @@ -1,7 +1,9 @@ # stress test for the heap by allocating lots of objects within threads # allocates about 5mb on the heap # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT try: import utime as time diff --git a/tests/thread/stress_recurse.py b/tests/thread/stress_recurse.py index 68367c4dd7..8edee246ad 100644 --- a/tests/thread/stress_recurse.py +++ b/tests/thread/stress_recurse.py @@ -1,6 +1,8 @@ # test hitting the function recursion limit within a thread # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/thread_exc1.py b/tests/thread/thread_exc1.py index 10fb94b4fb..e00a16bd26 100644 --- a/tests/thread/thread_exc1.py +++ b/tests/thread/thread_exc1.py @@ -1,6 +1,8 @@ # test raising and catching an exception within a thread # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/thread_exit1.py b/tests/thread/thread_exit1.py index 88cdd165c7..ad7b01d89b 100644 --- a/tests/thread/thread_exit1.py +++ b/tests/thread/thread_exit1.py @@ -1,6 +1,8 @@ # test _thread.exit() function # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT try: import utime as time diff --git a/tests/thread/thread_exit2.py b/tests/thread/thread_exit2.py index 368a11bba4..6bff8a1736 100644 --- a/tests/thread/thread_exit2.py +++ b/tests/thread/thread_exit2.py @@ -1,6 +1,8 @@ # test raising SystemExit to finish a thread # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT try: import utime as time diff --git a/tests/thread/thread_gc1.py b/tests/thread/thread_gc1.py index 8dcbf7e07a..2ea1891615 100644 --- a/tests/thread/thread_gc1.py +++ b/tests/thread/thread_gc1.py @@ -1,6 +1,8 @@ # test that we can run the garbage collector within threads # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import gc import _thread diff --git a/tests/thread/thread_ident1.py b/tests/thread/thread_ident1.py index 217fce73b1..9a6f89ff5f 100644 --- a/tests/thread/thread_ident1.py +++ b/tests/thread/thread_ident1.py @@ -1,6 +1,8 @@ # test _thread.get_ident() function # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/thread_lock1.py b/tests/thread/thread_lock1.py index ba5c7dff06..c2d7c9d1ed 100644 --- a/tests/thread/thread_lock1.py +++ b/tests/thread/thread_lock1.py @@ -1,6 +1,8 @@ # test _thread lock object using a single thread # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/thread_lock2.py b/tests/thread/thread_lock2.py index 405f10b0b6..4ef912dff5 100644 --- a/tests/thread/thread_lock2.py +++ b/tests/thread/thread_lock2.py @@ -1,6 +1,8 @@ # test _thread lock objects with multiple threads # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT try: import utime as time diff --git a/tests/thread/thread_lock3.py b/tests/thread/thread_lock3.py index 607898dad8..35808d99cb 100644 --- a/tests/thread/thread_lock3.py +++ b/tests/thread/thread_lock3.py @@ -1,6 +1,8 @@ # test thread coordination using a lock object # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/thread_lock4.py b/tests/thread/thread_lock4.py index 2f9d42d6b5..440f3e90c6 100644 --- a/tests/thread/thread_lock4.py +++ b/tests/thread/thread_lock4.py @@ -1,6 +1,8 @@ # test using lock to coordinate access to global mutable objects # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT try: import utime as time diff --git a/tests/thread/thread_qstr1.py b/tests/thread/thread_qstr1.py index f4136d9646..dccfb7f517 100644 --- a/tests/thread/thread_qstr1.py +++ b/tests/thread/thread_qstr1.py @@ -1,6 +1,8 @@ # test concurrent interning of strings # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT try: import utime as time diff --git a/tests/thread/thread_shared1.py b/tests/thread/thread_shared1.py index 13c6651cc4..de339ad7f8 100644 --- a/tests/thread/thread_shared1.py +++ b/tests/thread/thread_shared1.py @@ -1,6 +1,8 @@ # test capability for threads to access a shared immutable data structure # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/thread_shared2.py b/tests/thread/thread_shared2.py index e4bfe78022..2c749e6883 100644 --- a/tests/thread/thread_shared2.py +++ b/tests/thread/thread_shared2.py @@ -1,7 +1,9 @@ # test capability for threads to access a shared mutable data structure # (without contention because they access different parts of the structure) # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import _thread diff --git a/tests/thread/thread_sleep1.py b/tests/thread/thread_sleep1.py index 032ec17543..d5aa99f977 100644 --- a/tests/thread/thread_sleep1.py +++ b/tests/thread/thread_sleep1.py @@ -1,6 +1,8 @@ # test threads sleeping # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT try: import utime diff --git a/tests/thread/thread_stacksize1.py b/tests/thread/thread_stacksize1.py index 62b6e5e40d..e7189fafbc 100644 --- a/tests/thread/thread_stacksize1.py +++ b/tests/thread/thread_stacksize1.py @@ -1,6 +1,8 @@ # test setting the thread stack size # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT import sys import _thread diff --git a/tests/thread/thread_start1.py b/tests/thread/thread_start1.py index d23a74aa21..94df6dc625 100644 --- a/tests/thread/thread_start1.py +++ b/tests/thread/thread_start1.py @@ -1,6 +1,8 @@ # test basic capability to start a new thread # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT try: import utime as time diff --git a/tests/thread/thread_start2.py b/tests/thread/thread_start2.py index d0913e37cd..9412bb6183 100644 --- a/tests/thread/thread_start2.py +++ b/tests/thread/thread_start2.py @@ -1,6 +1,8 @@ # test capability to start a thread with keyword args # -# MIT license; Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George on behalf of Pycom Ltd +# +# SPDX-License-Identifier: MIT try: import utime as time diff --git a/tools/analyze_heap_dump.py b/tools/analyze_heap_dump.py index b8f2bd0112..887871db7a 100755 --- a/tools/analyze_heap_dump.py +++ b/tools/analyze_heap_dump.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # This script renders a graph of the MicroPython heap at the given point it was dumped. # It takes three files, the binary dump of ram, the binary for CircuitPython and the linker map file. diff --git a/tools/analyze_mpy.py b/tools/analyze_mpy.py index 376207a24e..a2f541d0f4 100644 --- a/tools/analyze_mpy.py +++ b/tools/analyze_mpy.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import sys import binascii import io diff --git a/tools/bootstrap_upip.sh b/tools/bootstrap_upip.sh index 2891775d7d..8b9d199fa9 100755 --- a/tools/bootstrap_upip.sh +++ b/tools/bootstrap_upip.sh @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # This script performs bootstrap installation of upip package manager from PyPI # All the other packages can be installed using it. diff --git a/tools/build-stm-latest.sh b/tools/build-stm-latest.sh index 07cb168daa..bfee1b1922 100755 --- a/tools/build-stm-latest.sh +++ b/tools/build-stm-latest.sh @@ -1,5 +1,9 @@ #!/bin/bash +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # function for building firmware function do_build() { descr=$1 diff --git a/tools/build_board_info.py b/tools/build_board_info.py index bbafe19f6a..6ed8b8c167 100644 --- a/tools/build_board_info.py +++ b/tools/build_board_info.py @@ -1,5 +1,9 @@ #!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import json import os import subprocess diff --git a/tools/build_memory_info.py b/tools/build_memory_info.py index 808b70bd22..26697b9740 100644 --- a/tools/build_memory_info.py +++ b/tools/build_memory_info.py @@ -1,28 +1,9 @@ #!/usr/bin/env python3 + +# SPDX-FileCopyrightText: Copyright (c) 2017 Scott Shawcroft for Adafruit Industries +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # -# This file is part of the MicroPython project, http://micropython.org/ -# -# The MIT License (MIT) -# -# Copyright (c) 2017 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. +# SPDX-License-Identifier: MIT import re import sys diff --git a/tools/build_release_files.py b/tools/build_release_files.py index 09133e51fa..3563dd99f1 100755 --- a/tools/build_release_files.py +++ b/tools/build_release_files.py @@ -1,5 +1,9 @@ #! /usr/bin/env python3 +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import os import sys import subprocess diff --git a/tools/chart_code_size.py b/tools/chart_code_size.py index 0b55787fa4..f75269130f 100644 --- a/tools/chart_code_size.py +++ b/tools/chart_code_size.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # This script renders a graph of the CircuitPython rom image. # It takes the single elf file and uses objdump to get its contents. diff --git a/tools/check_code_size.sh b/tools/check_code_size.sh index 2925ff1689..bdf1b5ad9b 100755 --- a/tools/check_code_size.sh +++ b/tools/check_code_size.sh @@ -1,4 +1,9 @@ #!/bin/bash + +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # # This script check that changes don't lead to code size regressions. # (Size of the language core (== minimal port should not grow)). diff --git a/tools/check_translations.py b/tools/check_translations.py index 7c008d3da7..95776a5449 100644 --- a/tools/check_translations.py +++ b/tools/check_translations.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # Validate that all entries in the .pot are in every .po. Only the .pot is updated so we can detect # if a translation was added to the source but isn't in a .po. This ensures translators can grab # complete files to work on. diff --git a/tools/ci_new_boards_check.py b/tools/ci_new_boards_check.py index 8bb8876fbc..86010bad3e 100644 --- a/tools/ci_new_boards_check.py +++ b/tools/ci_new_boards_check.py @@ -1,5 +1,9 @@ #! /usr/bin/env python3 +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import sys import os import json diff --git a/tools/codestats.sh b/tools/codestats.sh index 5f7625c450..c0dd747dc6 100755 --- a/tools/codestats.sh +++ b/tools/codestats.sh @@ -1,4 +1,9 @@ #!/bin/sh + +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # # This script generates statistics (build size, speed) for successive # revisions of the code. It checks out git commits one an a time, compiles diff --git a/tools/convert_release_notes.py b/tools/convert_release_notes.py index 6491841029..4b16f005ec 100644 --- a/tools/convert_release_notes.py +++ b/tools/convert_release_notes.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import sys import mistune diff --git a/tools/cpboard.py b/tools/cpboard.py index 7769cb4f46..464be4ba44 100644 --- a/tools/cpboard.py +++ b/tools/cpboard.py @@ -1,33 +1,12 @@ #!/usr/bin/env python3 + +# SPDX-FileCopyrightText: Copyright (c) 2014-2016 Damien P. George +# SPDX-FileCopyrightText: Copyright (c) 2017 Paul Sokolovsky +# SPDX-FileCopyrightText: Copyright (c) 2017 Scott Shawcroft for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2018 Noralf Trønnes +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # -# This file is part of the MicroPython project, http://micropython.org/ -# -# The MIT License (MIT) -# -# Copyright (c) 2017 Scott Shawcroft for Adafruit Industries -# Copyright (c) 2018 Noralf Trønnes -# -# Parts taken from pyboard.py: -# Copyright (c) 2014-2016 Damien P. George -# Copyright (c) 2017 Paul Sokolovsky -# -# 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. +# SPDX-License-Identifier: MIT import os import re diff --git a/tools/dfu.py b/tools/dfu.py index dd6019235b..489465f0cf 100644 --- a/tools/dfu.py +++ b/tools/dfu.py @@ -1,5 +1,9 @@ #!/usr/bin/python +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # Written by Antonio Galea - 2010/11/18 # Updated for DFU 1.1 by Sean Cross - 2020/03/31 # Distributed under Gnu LGPL 3.0 diff --git a/tools/extract_pyi.py b/tools/extract_pyi.py index d749d202b3..b9366f6bab 100644 --- a/tools/extract_pyi.py +++ b/tools/extract_pyi.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import os import sys import astroid diff --git a/tools/file2h.py b/tools/file2h.py index 2a04ae22b9..706dd4dd23 100644 --- a/tools/file2h.py +++ b/tools/file2h.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # Reads in a text file, and performs the necessary escapes so that it # can be #included as a static string like: # static const char string_from_textfile[] = diff --git a/tools/fixup_translations.py b/tools/fixup_translations.py index 6db7f1cc5c..0362923e88 100644 --- a/tools/fixup_translations.py +++ b/tools/fixup_translations.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # Validate that all entries in the .pot are in every .po. Only the .pot is updated so we can detect # if a translation was added to the source but isn't in a .po. This ensures translators can grab # complete files to work on. diff --git a/tools/gc_activity.py b/tools/gc_activity.py index 8d172ea3ab..cc9a218361 100644 --- a/tools/gc_activity.py +++ b/tools/gc_activity.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import sys import json diff --git a/tools/gc_activity_between_collects.py b/tools/gc_activity_between_collects.py index c02c479f9a..f906cf5c7e 100644 --- a/tools/gc_activity_between_collects.py +++ b/tools/gc_activity_between_collects.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import sys import json diff --git a/tools/gen-changelog.sh b/tools/gen-changelog.sh index 6eca1b4b11..b29606b0c7 100755 --- a/tools/gen-changelog.sh +++ b/tools/gen-changelog.sh @@ -1,5 +1,9 @@ #!/bin/sh +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + echo "MicroPython change log" for t in $(git tag | grep -v v1.0-rc1 | sort -rV); do diff --git a/tools/gen_display_resources.py b/tools/gen_display_resources.py index c08daf4776..478a2f22f9 100644 --- a/tools/gen_display_resources.py +++ b/tools/gen_display_resources.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import argparse import os diff --git a/tools/gen_ld_files.py b/tools/gen_ld_files.py index c2ac812bc9..1fea1a7efa 100755 --- a/tools/gen_ld_files.py +++ b/tools/gen_ld_files.py @@ -1,4 +1,9 @@ #! /usr/bin/env python3 + +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import argparse import os diff --git a/tools/gen_usb_descriptor.py b/tools/gen_usb_descriptor.py index 5e25528f90..9a8423c323 100644 --- a/tools/gen_usb_descriptor.py +++ b/tools/gen_usb_descriptor.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import argparse import os diff --git a/tools/gendoc.py b/tools/gendoc.py index 61844d203f..85411cb410 100644 --- a/tools/gendoc.py +++ b/tools/gendoc.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + """ Generate documentation for pyboard API from C files. """ diff --git a/tools/git-checkout-latest-tag.sh b/tools/git-checkout-latest-tag.sh index f6242a946d..69fa2ced4f 100755 --- a/tools/git-checkout-latest-tag.sh +++ b/tools/git-checkout-latest-tag.sh @@ -1,3 +1,8 @@ #!/bin/bash + +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + git fetch --tags git checkout $(git describe --tags `git rev-list --tags --max-count=1`) diff --git a/tools/hid_report_descriptors.py b/tools/hid_report_descriptors.py index 07ed26744f..e13e0dbdd1 100644 --- a/tools/hid_report_descriptors.py +++ b/tools/hid_report_descriptors.py @@ -1,24 +1,7 @@ -# The MIT License (MIT) +# SPDX-FileCopyrightText: Copyright (c) 2018 Dan Halbert for Adafruit Industries +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # -# Copyright (c) 2018 Dan Halbert 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. +# SPDX-License-Identifier: MIT import struct diff --git a/tools/insert-usb-ids.py b/tools/insert-usb-ids.py index cdccd3be97..bf74ceeab5 100644 --- a/tools/insert-usb-ids.py +++ b/tools/insert-usb-ids.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # Reads the USB VID and PID from the file specified by sys.argv[1] and then # inserts those values into the template file specified by sys.argv[2], # printing the result to stdout diff --git a/tools/join_bins.py b/tools/join_bins.py index cb73aaabb8..a370f86e44 100644 --- a/tools/join_bins.py +++ b/tools/join_bins.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import sys output_filename = sys.argv[1] diff --git a/tools/make-frozen.py b/tools/make-frozen.py index 1051b520e4..ad23b9d595 100755 --- a/tools/make-frozen.py +++ b/tools/make-frozen.py @@ -1,4 +1,9 @@ #!/usr/bin/env python + +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # # Create frozen modules structure for MicroPython. # diff --git a/tools/mpy-tool.py b/tools/mpy-tool.py index 5ce24061bc..95090466c4 100755 --- a/tools/mpy-tool.py +++ b/tools/mpy-tool.py @@ -1,28 +1,9 @@ #!/usr/bin/env python3 + +# SPDX-FileCopyrightText: Copyright (c) 2016 Damien P. George +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # -# This file is part of the MicroPython project, http://micropython.org/ -# -# The MIT License (MIT) -# -# Copyright (c) 2016 Damien P. George -# -# 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. +# SPDX-License-Identifier: MIT # Python 2/3 compatibility code from __future__ import print_function diff --git a/tools/mpy_bin2res.py b/tools/mpy_bin2res.py index 0c89e7e92b..8d67b71baa 100755 --- a/tools/mpy_bin2res.py +++ b/tools/mpy_bin2res.py @@ -1,4 +1,9 @@ #!/usr/bin/env python3 + +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + # # This tool converts binary resource files passed on the command line # into a Python source file containing data from these files, which can diff --git a/tools/mpy_cross_all.py b/tools/mpy_cross_all.py index 2bda71e9bc..5d9f8bc0ba 100755 --- a/tools/mpy_cross_all.py +++ b/tools/mpy_cross_all.py @@ -1,4 +1,9 @@ #!/usr/bin/env python3 + +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import argparse import os import os.path diff --git a/tools/preprocess_frozen_modules.py b/tools/preprocess_frozen_modules.py index 7ae20c4d61..b75a2e7238 100755 --- a/tools/preprocess_frozen_modules.py +++ b/tools/preprocess_frozen_modules.py @@ -1,4 +1,9 @@ #!/usr/bin/env python3 + +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import argparse import os import os.path diff --git a/tools/print_status.py b/tools/print_status.py index ed563fd68b..9a8b311dc2 100755 --- a/tools/print_status.py +++ b/tools/print_status.py @@ -1,5 +1,9 @@ #!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import sys if len(sys.argv) != 2: print("""\ diff --git a/tools/pyboard.py b/tools/pyboard.py index bb5642bd78..ddf6bb6c40 100755 --- a/tools/pyboard.py +++ b/tools/pyboard.py @@ -1,29 +1,10 @@ #!/usr/bin/env python + +# SPDX-FileCopyrightText: Copyright (c) 2014-2016 Damien P. George +# SPDX-FileCopyrightText: Copyright (c) 2017 Paul Sokolovsky +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # -# This file is part of the MicroPython project, http://micropython.org/ -# -# The MIT License (MIT) -# -# Copyright (c) 2014-2016 Damien P. George -# Copyright (c) 2017 Paul Sokolovsky -# -# 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. +# SPDX-License-Identifier: MIT """ pyboard interface diff --git a/tools/pydfu.py b/tools/pydfu.py index a7adda37cc..a6210c603a 100755 --- a/tools/pydfu.py +++ b/tools/pydfu.py @@ -1,8 +1,9 @@ #!/usr/bin/env python -# This file is part of the OpenMV project. -# Copyright (c) 2013/2014 Ibrahim Abdelkader -# This work is licensed under the MIT license, see the file LICENSE for -# details. + +# SPDX-FileCopyrightText: Copyright (c) 2013/2014 Ibrahim Abdelkader +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT """This module implements enough functionality to program the STM32F4xx over DFU, without requiring dfu-util. diff --git a/tools/tinytest-codegen.py b/tools/tinytest-codegen.py index 7a48f8a9a7..74b1878f95 100755 --- a/tools/tinytest-codegen.py +++ b/tools/tinytest-codegen.py @@ -1,5 +1,9 @@ #!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import os, sys from glob import glob from re import sub diff --git a/tools/upip.py b/tools/upip.py index a400c31743..27fbae272f 100644 --- a/tools/upip.py +++ b/tools/upip.py @@ -1,10 +1,10 @@ -# # upip - Package manager for MicroPython + +# SPDX-FileCopyrightText: Copyright (c) 2015-2018 Paul Sokolovsky +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # -# Copyright (c) 2015-2018 Paul Sokolovsky -# -# Licensed under the MIT license. -# +# SPDX-License-Identifier: MIT + import sys import gc import uos as os diff --git a/tools/upip_utarfile.py b/tools/upip_utarfile.py index 460ca2cd44..44d6364524 100644 --- a/tools/upip_utarfile.py +++ b/tools/upip_utarfile.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) +# +# SPDX-License-Identifier: MIT + import uctypes # http://www.gnu.org/software/tar/manual/html_node/Standard.html From ab4a453006f3110fb4836708cb88521f126884df Mon Sep 17 00:00:00 2001 From: DavePutz Date: Mon, 6 Jul 2020 21:40:38 -0500 Subject: [PATCH 35/73] Made requested changes --- ports/atmel-samd/supervisor/port.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index 05ce0eb09b..9a09c7afad 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -507,7 +507,7 @@ void port_interrupt_after_ticks(uint32_t ticks) { return; } #ifdef SAMD21 - if (hold_interrupt == true) { + if (hold_interrupt) { return; } #endif @@ -525,7 +525,7 @@ void port_sleep_until_interrupt(void) { } #endif common_hal_mcu_disable_interrupts(); - if (!tud_task_event_ready()) { + if (!tud_task_event_ready() && !hold_interrupt) { __DSB(); __WFI(); } From 1b3cb17abdc943af3ccbe2b6fd1182bbda3597b2 Mon Sep 17 00:00:00 2001 From: DavePutz Date: Mon, 6 Jul 2020 21:47:11 -0500 Subject: [PATCH 36/73] Corrected file for SAMD51 build --- ports/atmel-samd/supervisor/port.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index 9a09c7afad..af107de421 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -91,8 +91,8 @@ #if CIRCUITPY_PEW #include "common-hal/_pew/PewPew.h" #endif -#ifdef SAMD21 volatile bool hold_interrupt = false; +#ifdef SAMD21 void rtc_start_pulsein(void) { rtc_set_continuous(); From 0932b64ae7ea75d2ecc3c363ed6a9507fc4cc3a6 Mon Sep 17 00:00:00 2001 From: DavePutz Date: Mon, 6 Jul 2020 23:25:33 -0500 Subject: [PATCH 37/73] Correct for SAMD51 build --- ports/atmel-samd/supervisor/port.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index af107de421..e892e6cde5 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -93,11 +93,11 @@ #endif volatile bool hold_interrupt = false; #ifdef SAMD21 - void rtc_start_pulsein(void) { rtc_set_continuous(); hold_interrupt = true; } + void rtc_end_pulsein(void) { hold_interrupt = false; } From d73d7488b7e001f8f6ba138648b49a6969a71f6a Mon Sep 17 00:00:00 2001 From: oon arfiandwi Date: Mon, 6 Jul 2020 04:06:24 +0000 Subject: [PATCH 38/73] Translated using Weblate (Indonesian) Currently translated at 43.0% (335 of 778 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/id/ --- locale/ID.po | 223 +++++++++++++++++++++++++++------------------------ 1 file changed, 116 insertions(+), 107 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index a0c255b233..aab5f82810 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-02 15:29+0200\n" -"PO-Revision-Date: 2020-07-04 02:45+0000\n" -"Last-Translator: Jeff Epler \n" +"PO-Revision-Date: 2020-07-06 18:10+0000\n" +"Last-Translator: oon arfiandwi \n" "Language-Team: LANGUAGE \n" "Language: ID\n" "MIME-Version: 1.0\n" @@ -203,7 +203,7 @@ msgstr "'%s' objek tidak dapat diulang" #: py/obj.c #, c-format msgid "'%s' object is not subscriptable" -msgstr "" +msgstr "Objek '%s' tidak dapat disubkripsikan" #: py/objstr.c msgid "'=' alignment not allowed in string format specifier" @@ -263,7 +263,7 @@ msgstr ", dalam %q\n" #: py/objcomplex.c msgid "0.0 to a complex power" -msgstr "" +msgstr "0.0 ke kompleks berpangkat" #: py/modbuiltins.c msgid "3-arg pow() not supported" @@ -321,7 +321,7 @@ msgstr "Semua timer sedang digunakan" #: ports/nrf/common-hal/_bleio/Adapter.c msgid "Already advertising." -msgstr "" +msgstr "Sudah disebarkan." #: ports/cxd56/common-hal/analogio/AnalogIn.c msgid "AnalogIn not supported on given pin" @@ -399,7 +399,7 @@ msgstr "Kedua pin harus mendukung hardware interrut" #: shared-bindings/framebufferio/FramebufferDisplay.c #: shared-bindings/rgbmatrix/RGBMatrix.c msgid "Brightness must be 0-1.0" -msgstr "Brightness harus di antara 0-1.0" +msgstr "Kecerahan harus di antara 0-1.0" #: shared-bindings/supervisor/__init__.c msgid "Brightness must be between 0 and 255" @@ -442,7 +442,7 @@ msgstr "Panjang buffer harus kelipatan 512" #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" -msgstr "Buffer harus memiliki panjang setidaknya 1" +msgstr "Penyangga harus memiliki panjang setidaknya 1" #: ports/nrf/common-hal/_bleio/PacketBuffer.c msgid "Buffer too large and unable to allocate" @@ -496,6 +496,8 @@ msgstr "Tidak bisa mendapatkan suhu" #: shared-bindings/_bleio/Adapter.c msgid "Cannot have scan responses for extended, connectable advertisements." msgstr "" +"Tidak dapat memiliki respon pindaian untuk penyebaran yang terhubung dan " +"diperluas." #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "Cannot output both channels on the same pin" @@ -533,11 +535,11 @@ msgstr "Tidak dapat menentukan RTS atau CTS dalam mode RS485" #: py/objslice.c msgid "Cannot subclass slice" -msgstr "" +msgstr "Tidak dapat membuat subkelas dari irisan" #: shared-module/bitbangio/SPI.c msgid "Cannot transfer without MOSI and MISO pins." -msgstr "" +msgstr "Tidak dapat transfer tanpa pin MOSI dan MISO." #: extmod/moductypes.c msgid "Cannot unambiguously get sizeof scalar" @@ -546,32 +548,36 @@ msgstr "tidak dapat mendapatkan ukuran scalar secara tidak ambigu" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "" +"Tidak dapat membuat variasi frekuensi pada penghitung waktu yang sudah " +"digunakan" #: shared-module/bitbangio/SPI.c msgid "Cannot write without MOSI pin." -msgstr "" +msgstr "Tidak dapat menulis tanpa pin MOSI." #: shared-bindings/_bleio/CharacteristicBuffer.c msgid "CharacteristicBuffer writing not provided" -msgstr "" +msgstr "Menulis CharacteristicBuffer tidak tersedia" #: supervisor/shared/safe_mode.c msgid "CircuitPython core code crashed hard. Whoops!\n" -msgstr "" +msgstr "Kode inti CircuitPython mengalami crash. Aduh!\n" #: supervisor/shared/safe_mode.c msgid "" "CircuitPython is in safe mode because you pressed the reset button during " "boot. Press again to exit safe mode.\n" msgstr "" +"CircuitPython dalam mode aman karena Anda menekan tombol reset saat boot. " +"Tekan lagi untuk keluar dari mode aman.\n" #: shared-module/bitbangio/SPI.c msgid "Clock pin init failed." -msgstr "" +msgstr "Init pin clock gagal." #: shared-module/bitbangio/I2C.c msgid "Clock stretch too long" -msgstr "" +msgstr "Peregangan clock terlalu panjang" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c msgid "Clock unit in use" @@ -579,26 +585,27 @@ msgstr "Clock unit sedang digunakan" #: shared-bindings/_pew/PewPew.c msgid "Column entry must be digitalio.DigitalInOut" -msgstr "" +msgstr "Entri kolom harus digitalio.DigitalInOut" #: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c #: shared-bindings/displayio/ParallelBus.c msgid "Command must be an int between 0 and 255" -msgstr "" +msgstr "Perintah harus berupa int di antara 0 dan 255" #: shared-bindings/_bleio/Connection.c msgid "" "Connection has been disconnected and can no longer be used. Create a new " "connection." msgstr "" +"Koneksi telah terputus dan tidak dapat lagi digunakan. Buat koneksi baru." #: py/persistentcode.c msgid "Corrupt .mpy file" -msgstr "" +msgstr "File .mpy rusak" #: py/emitglue.c msgid "Corrupt raw code" -msgstr "" +msgstr "Kode raw rusak" #: ports/cxd56/common-hal/gnss/GNSS.c msgid "Could not initialize GNSS" @@ -614,61 +621,61 @@ msgstr "Tidak dapat menginisialisasi UART" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not initialize channel" -msgstr "" +msgstr "Tidak dapat menginisialisasi kanal" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not initialize timer" -msgstr "" +msgstr "Tidak dapat menginisialisasi timer" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not re-init channel" -msgstr "" +msgstr "Tidak dapat menginisialisasi ulang kanal" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not re-init timer" -msgstr "" +msgstr "Tidak dapat menginisialisasi ulang timer" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not restart PWM" -msgstr "" +msgstr "Tidak dapat memulai ulang PWM" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Could not start PWM" -msgstr "" +msgstr "Tidak dapat memulai PWM" #: ports/stm/common-hal/busio/UART.c msgid "Could not start interrupt, RX busy" -msgstr "" +msgstr "Tidak dapat memulai interupsi, RX sibuk" #: shared-module/audiomp3/MP3Decoder.c msgid "Couldn't allocate decoder" -msgstr "" +msgstr "Tidak dapat mengalokasikan dekoder" #: shared-module/audiocore/WaveFile.c shared-module/audiomixer/Mixer.c #: shared-module/audiomp3/MP3Decoder.c msgid "Couldn't allocate first buffer" -msgstr "" +msgstr "Tidak dapat mengalokasikan penyangga pertama" #: shared-module/audiomp3/MP3Decoder.c msgid "Couldn't allocate input buffer" -msgstr "" +msgstr "Tidak dapat mengalokasikan penyangga masukan" #: shared-module/audiocore/WaveFile.c shared-module/audiomixer/Mixer.c #: shared-module/audiomp3/MP3Decoder.c msgid "Couldn't allocate second buffer" -msgstr "" +msgstr "Tidak dapat mengalokasikan penyangga kedua" #: supervisor/shared/safe_mode.c msgid "Crash into the HardFault_Handler." -msgstr "" +msgstr "Gagal ke HardFault_Handler." #: ports/stm/common-hal/analogio/AnalogOut.c msgid "DAC Channel Init Error" -msgstr "" +msgstr "Terjadi kesalahan saat menginisialisasi kanal DAC" #: ports/stm/common-hal/analogio/AnalogOut.c msgid "DAC Device Init Error" -msgstr "" +msgstr "Terjadi kesalahan saat menginisialisasi perangkat DAC" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "DAC already in use" @@ -677,11 +684,11 @@ msgstr "DAC sudah digunakan" #: ports/atmel-samd/common-hal/displayio/ParallelBus.c #: ports/nrf/common-hal/displayio/ParallelBus.c msgid "Data 0 pin must be byte aligned" -msgstr "" +msgstr "Data 0 pin harus byte disejajarkan" #: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" -msgstr "" +msgstr "Potongan data harus mengikuti fmt chunk" #: ports/nrf/common-hal/_bleio/Adapter.c #, fuzzy @@ -690,34 +697,34 @@ msgstr "Tidak bisa menyesuaikan data ke dalam paket advertisment" #: shared-bindings/audiobusio/PDMIn.c msgid "Destination capacity is smaller than destination_length." -msgstr "" +msgstr "Kapasitas tujuan lebih kecil dari destination_length." #: ports/nrf/common-hal/audiobusio/I2SOut.c msgid "Device in use" -msgstr "" +msgstr "Perangkat sedang digunakan" #: ports/cxd56/common-hal/digitalio/DigitalInOut.c msgid "DigitalInOut not supported on given pin" -msgstr "" +msgstr "DigitalInOut tidak didukung pada pin yang diberikan" #: shared-bindings/displayio/Display.c #: shared-bindings/framebufferio/FramebufferDisplay.c msgid "Display must have a 16 bit colorspace." -msgstr "" +msgstr "Tampilan harus memiliki ruang warna 16 bit." #: shared-bindings/displayio/Display.c #: shared-bindings/displayio/EPaperDisplay.c #: shared-bindings/framebufferio/FramebufferDisplay.c msgid "Display rotation must be in 90 degree increments" -msgstr "" +msgstr "Rotasi tampilan harus dalam kelipatan 90 derajat" #: shared-bindings/digitalio/DigitalInOut.c msgid "Drive mode not used when direction is input." -msgstr "" +msgstr "Mode kendara tidak digunakan saat arah input." #: shared-bindings/aesio/aes.c msgid "ECB only operates on 16 bytes at a time" -msgstr "" +msgstr "ECB hanya beroperasi pada 16 byte di satu waktu" #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c #: ports/atmel-samd/common-hal/ps2io/Ps2.c @@ -735,42 +742,42 @@ msgstr "Error pada regex" #: shared-bindings/neopixel_write/__init__.c shared-bindings/pulseio/PulseOut.c #: shared-bindings/terminalio/Terminal.c msgid "Expected a %q" -msgstr "" +msgstr "Diharapkan %q" #: shared-bindings/_bleio/CharacteristicBuffer.c #: shared-bindings/_bleio/Descriptor.c shared-bindings/_bleio/PacketBuffer.c msgid "Expected a Characteristic" -msgstr "" +msgstr "Diharapkan sebuah Karakteristik" #: shared-bindings/_bleio/Characteristic.c msgid "Expected a Service" -msgstr "" +msgstr "Diharapkan sebuah Layanan" #: shared-bindings/_bleio/Characteristic.c shared-bindings/_bleio/Descriptor.c #: shared-bindings/_bleio/Service.c msgid "Expected a UUID" -msgstr "" +msgstr "Diharapkan sebuah UUID" #: shared-bindings/_bleio/Adapter.c msgid "Expected an Address" -msgstr "" +msgstr "Diharapkan sebuah Alamat" #: shared-module/_pixelbuf/PixelBuf.c #, c-format msgid "Expected tuple of length %d, got %d" -msgstr "" +msgstr "Diharapkan tuple dengan panjang %d, didapatkan %d" #: ports/nrf/common-hal/_bleio/Adapter.c msgid "Extended advertisements with scan response not supported." -msgstr "" +msgstr "Penyebaran yang diperluas dengan respon pindai tidak didukung." #: extmod/ulab/code/fft.c msgid "FFT is defined for ndarrays only" -msgstr "" +msgstr "FFT didefinisikan hanya untuk ndarrays" #: shared-bindings/ps2io/Ps2.c msgid "Failed sending command." -msgstr "" +msgstr "Gagal mengirim perintah." #: ports/nrf/sd_mutex.c #, fuzzy, c-format @@ -792,15 +799,15 @@ msgstr "Gagal untuk megalokasikan buffer RX dari %d byte" #: ports/nrf/common-hal/_bleio/Adapter.c msgid "Failed to connect: internal error" -msgstr "" +msgstr "Gagal terhubung: kesalahan internal" #: ports/nrf/common-hal/_bleio/Adapter.c msgid "Failed to connect: timeout" -msgstr "" +msgstr "Gagal terhubung: habis waktu" #: shared-module/audiomp3/MP3Decoder.c msgid "Failed to parse MP3 file" -msgstr "" +msgstr "Gagal mengurai file MP3" #: ports/nrf/sd_mutex.c #, fuzzy, c-format @@ -809,43 +816,43 @@ msgstr "Gagal untuk melepaskan mutex, status: 0x%08lX" #: supervisor/shared/safe_mode.c msgid "Failed to write internal flash." -msgstr "" +msgstr "Gagal menulis flash internal." #: py/moduerrno.c msgid "File exists" -msgstr "" +msgstr "File sudah ada" #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." -msgstr "" +msgstr "Frekuensi yang ditangkap berada di atas kemampuan. Penangkapan Ditunda." #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Frequency must match existing PWMOut using this timer" -msgstr "" +msgstr "Frekuensi harus cocok dengan PWMOut yang ada menggunakan timer ini" #: shared-bindings/bitbangio/I2C.c shared-bindings/bitbangio/SPI.c #: shared-bindings/busio/I2C.c shared-bindings/busio/SPI.c msgid "Function requires lock" -msgstr "" +msgstr "Fungsinya membutuhkan kunci" #: shared-bindings/displayio/Display.c #: shared-bindings/displayio/EPaperDisplay.c #: shared-bindings/framebufferio/FramebufferDisplay.c msgid "Group already used" -msgstr "" +msgstr "Grup sudah digunakan" #: shared-module/displayio/Group.c msgid "Group full" -msgstr "" +msgstr "Grup penuh" #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c #: ports/stm/common-hal/busio/SPI.c msgid "Hardware busy, try alternative pins" -msgstr "" +msgstr "Perangkat keras sibuk, coba pin alternatif" #: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c msgid "Hardware in use, try alternative pins" -msgstr "" +msgstr "Perangkat keras sedang digunakan, coba pin alternatif" #: extmod/vfs_posix_file.c py/objstringio.c msgid "I/O operation on closed file" @@ -853,43 +860,45 @@ msgstr "operasi I/O pada file tertutup" #: ports/stm/common-hal/busio/I2C.c msgid "I2C Init Error" -msgstr "" +msgstr "Gagal Inisialisasi I2C" #: shared-bindings/aesio/aes.c #, c-format msgid "IV must be %d bytes long" -msgstr "" +msgstr "Panjang IV harus %d byte" #: py/persistentcode.c msgid "" "Incompatible .mpy file. Please update all .mpy files. See http://adafru.it/" "mpy-update for more info." msgstr "" +"File .mpy tidak kompatibel. Perbarui semua file .mpy. Lihat http://adafru.it/" +"mpy-update untuk info lebih lanjut." #: shared-bindings/_pew/PewPew.c msgid "Incorrect buffer size" -msgstr "" +msgstr "Ukuran penyangga salah" #: py/moduerrno.c msgid "Input/output error" -msgstr "" +msgstr "Kesalahan input/output" #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" -msgstr "" +msgstr "Otentikasi tidak cukup" #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient encryption" -msgstr "" +msgstr "Enkripsi tidak cukup" #: ports/stm/common-hal/busio/UART.c msgid "Internal define error" -msgstr "" +msgstr "Kesalahan definisi internal" #: shared-module/rgbmatrix/RGBMatrix.c #, c-format msgid "Internal error #%d" -msgstr "" +msgstr "Kesalahan internal #%d" #: shared-bindings/sdioio/SDCard.c msgid "Invalid %q" @@ -902,19 +911,19 @@ msgstr "%q pada tidak valid" #: ports/stm/common-hal/analogio/AnalogIn.c msgid "Invalid ADC Unit value" -msgstr "" +msgstr "Nilai Unit ADC tidak valid" #: shared-module/displayio/OnDiskBitmap.c msgid "Invalid BMP file" -msgstr "" +msgstr "File BMP tidak valid" #: ports/stm/common-hal/analogio/AnalogOut.c msgid "Invalid DAC pin supplied" -msgstr "" +msgstr "Pin DAC yang diberikan tidak valid" #: ports/stm/common-hal/busio/I2C.c msgid "Invalid I2C pin selection" -msgstr "" +msgstr "Pilihan pin I2C tidak valid" #: ports/atmel-samd/common-hal/pulseio/PWMOut.c #: ports/cxd56/common-hal/pulseio/PWMOut.c @@ -924,19 +933,19 @@ msgstr "Frekuensi PWM tidak valid" #: ports/stm/common-hal/busio/SPI.c msgid "Invalid SPI pin selection" -msgstr "" +msgstr "Pilihan pin SPI tidak valid" #: ports/stm/common-hal/busio/UART.c msgid "Invalid UART pin selection" -msgstr "" +msgstr "Pilihan pin UART tidak valid" #: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c msgid "Invalid argument" -msgstr "" +msgstr "Argumen tidak valid" #: shared-module/displayio/Bitmap.c msgid "Invalid bits per value" -msgstr "" +msgstr "Bit per nilai tidak valid" #: ports/nrf/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c msgid "Invalid buffer size" @@ -944,44 +953,44 @@ msgstr "Ukuran buffer tidak valid" #: shared-bindings/_pixelbuf/PixelBuf.c msgid "Invalid byteorder string" -msgstr "" +msgstr "String byteorder tidak valid" #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Invalid capture period. Valid range: 1 - 500" -msgstr "" +msgstr "Periode penangkapan tidak valid. Kisaran yang valid: 1 - 500" #: shared-bindings/audiomixer/Mixer.c msgid "Invalid channel count" -msgstr "" +msgstr "Jumlah kanal tidak valid" #: shared-bindings/digitalio/DigitalInOut.c msgid "Invalid direction." -msgstr "" +msgstr "Arah tidak valid." #: shared-module/audiocore/WaveFile.c msgid "Invalid file" -msgstr "" +msgstr "File tidak valid" #: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" -msgstr "" +msgstr "Ukuran potongan format tidak valid" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Invalid frequency supplied" -msgstr "" +msgstr "Frekuensi yang diberikan tidak valid" #: supervisor/shared/safe_mode.c msgid "Invalid memory access." -msgstr "" +msgstr "Akses memori tidak valid." #: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c msgid "Invalid number of bits" -msgstr "" +msgstr "Jumlah bit tidak valid" #: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c #: shared-bindings/displayio/FourWire.c msgid "Invalid phase" -msgstr "" +msgstr "Fase tidak valid" #: ports/atmel-samd/common-hal/audioio/AudioOut.c #: ports/atmel-samd/common-hal/touchio/TouchIn.c @@ -1011,44 +1020,44 @@ msgstr "Pin-pin tidak valid" #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Invalid pins for PWMOut" -msgstr "" +msgstr "Pin untuk PWMOut tidak valid" #: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c #: shared-bindings/displayio/FourWire.c msgid "Invalid polarity" -msgstr "" +msgstr "Polaritas tidak valid" #: shared-bindings/_bleio/Characteristic.c msgid "Invalid properties" -msgstr "" +msgstr "Properti tidak valid" #: shared-bindings/microcontroller/__init__.c msgid "Invalid run mode." -msgstr "" +msgstr "Mode operasi tidak valid." #: shared-module/_bleio/Attribute.c msgid "Invalid security_mode" -msgstr "" +msgstr "security_mode tidak valid" #: shared-bindings/audiomixer/Mixer.c msgid "Invalid voice" -msgstr "" +msgstr "Suara tidak valid" #: shared-bindings/audiomixer/Mixer.c msgid "Invalid voice count" -msgstr "" +msgstr "Hitungan suara tidak valid" #: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" -msgstr "" +msgstr "File wave tidak valid" #: ports/stm/common-hal/busio/UART.c msgid "Invalid word/bit length" -msgstr "" +msgstr "Panjang kata/bit tidak valid" #: shared-bindings/aesio/aes.c msgid "Key must be 16, 24, or 32 bytes long" -msgstr "" +msgstr "Panjang kunci harus 16, 24, atau 32 byte" #: py/compile.c msgid "LHS of keyword arg must be an id" @@ -1056,40 +1065,40 @@ msgstr "LHS dari keyword arg harus menjadi sebuah id" #: shared-module/displayio/Group.c msgid "Layer already in a group." -msgstr "" +msgstr "Layer sudah ada dalam grup." #: shared-module/displayio/Group.c msgid "Layer must be a Group or TileGrid subclass." -msgstr "" +msgstr "Layer harus sebuah Grup atau subklas dari TileGrid." #: py/objslice.c msgid "Length must be an int" -msgstr "" +msgstr "Panjang harus berupa int" #: py/objslice.c msgid "Length must be non-negative" -msgstr "" +msgstr "Panjangnya harus non-negatif" #: shared-module/bitbangio/SPI.c msgid "MISO pin init failed." -msgstr "" +msgstr "Pin MISO gagal inisialisasi." #: shared-module/bitbangio/SPI.c msgid "MOSI pin init failed." -msgstr "" +msgstr "Pin MOSI gagal inisialisasi." #: shared-module/displayio/Shape.c #, c-format msgid "Maximum x value when mirrored is %d" -msgstr "" +msgstr "Nilai x maksimum ketika dicerminkan adalah %d" #: supervisor/shared/safe_mode.c msgid "MicroPython NLR jump failed. Likely memory corruption." -msgstr "" +msgstr "Lompatan NLR MicroPython gagal. Kemungkinan kerusakan memori." #: supervisor/shared/safe_mode.c msgid "MicroPython fatal error." -msgstr "" +msgstr "Kesalahan fatal MicroPython." #: shared-bindings/audiobusio/PDMIn.c msgid "Microphone startup delay must be in range 0.0 to 1.0" From cceab2af659b42c9762a50c4e1d8b843850eaf74 Mon Sep 17 00:00:00 2001 From: Alvaro Figueroa Date: Tue, 7 Jul 2020 04:23:02 +0000 Subject: [PATCH 39/73] Translated using Weblate (Spanish) Currently translated at 100.0% (778 of 778 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/es/ --- locale/es.po | 218 ++++++++++++++++++++++++++------------------------- 1 file changed, 113 insertions(+), 105 deletions(-) diff --git a/locale/es.po b/locale/es.po index 423d673617..2778c53315 100644 --- a/locale/es.po +++ b/locale/es.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-02 15:29+0200\n" -"PO-Revision-Date: 2020-06-29 13:13+0000\n" +"PO-Revision-Date: 2020-07-07 15:59+0000\n" "Last-Translator: Alvaro Figueroa \n" "Language-Team: \n" "Language: es\n" @@ -69,7 +69,7 @@ msgstr "" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q failure: %d" -msgstr "" +msgstr "%q fallo: %d" #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -100,7 +100,7 @@ msgstr "%q debe ser una tupla de longitud 2" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q pin invalid" -msgstr "" +msgstr "pin inválido %q" #: shared-bindings/fontio/BuiltinFont.c msgid "%q should be an int" @@ -220,7 +220,7 @@ msgstr "'align' requiere 1 argumento" #: py/compile.c msgid "'async for' or 'async with' outside async function" -msgstr "" +msgstr "'async for' o 'async with' fuera de la función async" #: py/compile.c msgid "'await' outside function" @@ -364,6 +364,8 @@ msgstr "Como máximo %d %q se puede especificar (no %d)" #: supervisor/shared/safe_mode.c msgid "Attempted heap allocation when MicroPython VM not running." msgstr "" +"Se intentó asignación del montículo, sin que la VM de MicroPython esté " +"ejecutando." #: main.c msgid "Auto-reload is off.\n" @@ -416,7 +418,7 @@ msgstr "El brillo no se puede ajustar" #: shared-bindings/_bleio/UUID.c #, c-format msgid "Buffer + offset too small %d %d %d" -msgstr "" +msgstr "Búfer + compensado muy pequeños %d %d %d" #: shared-module/usb_hid/Device.c #, c-format @@ -441,7 +443,7 @@ msgstr "La longitud del buffer %d es muy grande. Debe ser menor a %d" #: ports/atmel-samd/common-hal/sdioio/SDCard.c #: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" -msgstr "" +msgstr "El tamaño del búfer debe ser múltiplo de 512" #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" @@ -464,7 +466,7 @@ msgstr "Bus pin %d ya está siendo utilizado" #: shared-bindings/_bleio/UUID.c msgid "Byte buffer must be 16 bytes." -msgstr "Byte buffer debe de ser 16 bytes" +msgstr "Búfer Byte debe de ser 16 bytes." #: shared-bindings/nvm/ByteArray.c msgid "Bytes must be between 0 and 255." @@ -480,7 +482,7 @@ msgstr "Llame a super().__ init __() antes de acceder al objeto nativo." #: ports/nrf/common-hal/_bleio/Characteristic.c msgid "Can't set CCCD on local Characteristic" -msgstr "" +msgstr "No se puede configurar CCCD en la característica local" #: shared-bindings/displayio/Bitmap.c shared-bindings/pulseio/PulseIn.c msgid "Cannot delete values" @@ -494,11 +496,13 @@ msgstr "No puede ser pull mientras este en modo de salida" #: ports/nrf/common-hal/microcontroller/Processor.c msgid "Cannot get temperature" -msgstr "No se puede obtener la temperatura." +msgstr "No se puede obtener la temperatura" #: shared-bindings/_bleio/Adapter.c msgid "Cannot have scan responses for extended, connectable advertisements." msgstr "" +"No se pueden obtener respuestas de exploración para anuncios extendidos y " +"conectables." #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "Cannot output both channels on the same pin" @@ -568,7 +572,7 @@ msgstr "" #: shared-module/bitbangio/SPI.c msgid "Clock pin init failed." -msgstr "Clock pin init fallido" +msgstr "Iniciado de pin de reloj fallido." #: shared-module/bitbangio/I2C.c msgid "Clock stretch too long" @@ -585,7 +589,7 @@ msgstr "Entrada de columna debe ser digitalio.DigitalInOut" #: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c #: shared-bindings/displayio/ParallelBus.c msgid "Command must be an int between 0 and 255" -msgstr "Command debe estar entre 0 y 255." +msgstr "Command debe ser un int entre 0 y 255" #: shared-bindings/_bleio/Connection.c msgid "" @@ -609,7 +613,7 @@ msgstr "No se pudo inicializar el GNSS" #: ports/cxd56/common-hal/sdioio/SDCard.c msgid "Could not initialize SDCard" -msgstr "" +msgstr "No se pudo inicializar SDCard" #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" @@ -663,7 +667,7 @@ msgstr "No se pudo asignar el segundo buffer" #: supervisor/shared/safe_mode.c msgid "Crash into the HardFault_Handler." -msgstr "" +msgstr "Choque contra el HardFault_Handler." #: ports/stm/common-hal/analogio/AnalogOut.c msgid "DAC Channel Init Error" @@ -768,16 +772,16 @@ msgstr "No se admiten anuncios extendidos con respuesta de escaneo." #: extmod/ulab/code/fft.c msgid "FFT is defined for ndarrays only" -msgstr "" +msgstr "FFT se define solo para ndarrays" #: shared-bindings/ps2io/Ps2.c msgid "Failed sending command." msgstr "Fallo enviando comando" #: ports/nrf/sd_mutex.c -#, fuzzy, c-format +#, c-format msgid "Failed to acquire mutex, err 0x%04x" -msgstr "No se puede adquirir el mutex, status: 0x%08lX" +msgstr "No se puede adquirir el mutex, error 0x%04x" #: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c msgid "Failed to allocate RX buffer" @@ -889,7 +893,7 @@ msgstr "Cifrado insuficiente" #: ports/stm/common-hal/busio/UART.c msgid "Internal define error" -msgstr "" +msgstr "Error interno de definición" #: shared-module/rgbmatrix/RGBMatrix.c #, c-format @@ -898,7 +902,7 @@ msgstr "Error interno #%d" #: shared-bindings/sdioio/SDCard.c msgid "Invalid %q" -msgstr "" +msgstr "%q inválido" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c @@ -1033,7 +1037,7 @@ msgstr "Modo de ejecución inválido." #: shared-module/_bleio/Attribute.c msgid "Invalid security_mode" -msgstr "" +msgstr "Modo de seguridad no válido" #: shared-bindings/audiomixer/Mixer.c msgid "Invalid voice" @@ -1090,7 +1094,7 @@ msgstr "Valor máximo de x cuando se refleja es %d" #: supervisor/shared/safe_mode.c msgid "MicroPython NLR jump failed. Likely memory corruption." -msgstr "" +msgstr "MicroPython NLR jump falló. Probable corrupción de la memoria." #: supervisor/shared/safe_mode.c msgid "MicroPython fatal error." @@ -1115,7 +1119,7 @@ msgstr "Debe proporcionar un pin MISO o MOSI" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" -msgstr "" +msgstr "Debe usar un múltiplo de 6 pines rgb, no %d" #: py/parse.c msgid "Name too long" @@ -1123,7 +1127,7 @@ msgstr "Nombre muy largo" #: ports/nrf/common-hal/_bleio/Characteristic.c msgid "No CCCD for this Characteristic" -msgstr "" +msgstr "No hay CCCD para esta característica" #: ports/atmel-samd/common-hal/analogio/AnalogOut.c #: ports/stm/common-hal/analogio/AnalogOut.c @@ -1214,7 +1218,7 @@ msgstr "No hay temporizador disponible" #: supervisor/shared/safe_mode.c msgid "Nordic Soft Device failure assertion." -msgstr "" +msgstr "fallo de aserción de dispositivo Nordic Soft." #: ports/nrf/common-hal/_bleio/__init__.c #: shared-bindings/_bleio/CharacteristicBuffer.c @@ -1255,6 +1259,8 @@ msgid "" "Only monochrome, indexed 4bpp or 8bpp, and 16bpp or greater BMPs supported: " "%d bpp given" msgstr "" +"Solo se admiten BMP monocromáticos, indexados de 4 bpp u 8 bpp y 16 bpp o " +"más: %d bpp proporcionados" #: shared-bindings/audiobusio/PDMIn.c msgid "Oversample must be multiple of 8." @@ -1325,7 +1331,7 @@ msgstr "Pop de un buffer Ps2 vacio" #: shared-bindings/_bleio/Adapter.c msgid "Prefix buffer must be on the heap" -msgstr "" +msgstr "El búfer de prefijo debe estar en el montículo" #: main.c msgid "Press any key to enter the REPL. Use CTRL-D to reload." @@ -1412,7 +1418,7 @@ msgstr "Ejecutando en modo seguro! No se esta ejecutando el código guardado.\n" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" -msgstr "" +msgstr "Sin capacidad para formato CSD para tarjeta SD" #: ports/atmel-samd/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/I2C.c ports/nrf/common-hal/busio/I2C.c @@ -1484,7 +1490,7 @@ msgstr "Suministre al menos un pin UART" #: shared-bindings/gnss/GNSS.c msgid "System entry must be gnss.SatelliteSystem" -msgstr "" +msgstr "La entrada del sistema debe ser gnss.SatelliteSystem" #: ports/stm/common-hal/microcontroller/Processor.c msgid "Temperature read timed out" @@ -1495,6 +1501,8 @@ msgid "" "The CircuitPython heap was corrupted because the stack was too small.\n" "Please increase the stack size if you know how, or if not:" msgstr "" +"El montículo de CircuitPython se dañó porque la pila era demasiado pequeña.\n" +"Aumente el tamaño de la pila si sabe cómo, o si no:" #: supervisor/shared/safe_mode.c msgid "" @@ -1654,7 +1662,7 @@ msgstr "Tipo de uuid nrfx inesperado" #: ports/nrf/common-hal/_bleio/__init__.c #, c-format msgid "Unknown gatt error: 0x%04x" -msgstr "" +msgstr "Error de gatt desconocido: 0x%04x" #: supervisor/shared/safe_mode.c msgid "Unknown reason." @@ -1729,22 +1737,25 @@ msgstr "ADVERTENCIA: El nombre de archivo de tu código tiene dos extensiones\n" #: shared-bindings/watchdog/WatchDogTimer.c msgid "WatchDogTimer cannot be deinitialized once mode is set to RESET" msgstr "" +"WatchDogTimer no se puede desinicializar luego de definirse en modo RESET" #: shared-bindings/watchdog/WatchDogTimer.c msgid "WatchDogTimer is not currently running" -msgstr "" +msgstr "WatchDogTimer no se está ejecutando en este momento" #: shared-bindings/watchdog/WatchDogTimer.c msgid "WatchDogTimer.mode cannot be changed once set to WatchDogMode.RESET" msgstr "" +"WatchDogTimer.mode no se puede modificar luego de configurar WatchDogMode." +"RESET" #: shared-bindings/watchdog/WatchDogTimer.c msgid "WatchDogTimer.timeout must be greater than 0" -msgstr "" +msgstr "WatchDogTimer.timeout debe ser mayor a 0" #: supervisor/shared/safe_mode.c msgid "Watchdog timer expired." -msgstr "" +msgstr "Temporizador de perro guardián expirado." #: py/builtinhelp.c #, c-format @@ -1764,7 +1775,7 @@ msgstr "" #: ports/nrf/common-hal/_bleio/PacketBuffer.c msgid "Writes not supported on Characteristic" -msgstr "" +msgstr "Escrituras no admitidas en la característica" #: supervisor/shared/safe_mode.c msgid "You are in safe mode: something unanticipated happened.\n" @@ -2056,7 +2067,7 @@ msgstr "" #: shared-module/sdcardio/SDCard.c msgid "can't set 512 block size" -msgstr "" +msgstr "no se puede definir un tamaño de bloque de 512" #: py/objnamedtuple.c msgid "can't set attribute" @@ -2110,7 +2121,7 @@ msgstr "no se puede reformar el arreglo (forma de entrada/salida incompatible)" #: py/emitnative.c msgid "casting" -msgstr "" +msgstr "convirtiendo tipo" #: shared-bindings/_stage/Text.c msgid "chars buffer too small" @@ -2170,27 +2181,27 @@ msgstr "conversión a objeto" #: extmod/ulab/code/filter.c msgid "convolve arguments must be linear arrays" -msgstr "" +msgstr "los argumentos para convolve deben ser arreglos lineares" #: extmod/ulab/code/filter.c msgid "convolve arguments must be ndarrays" -msgstr "" +msgstr "los argumentos para convolve deben ser ndarrays" #: extmod/ulab/code/filter.c msgid "convolve arguments must not be empty" -msgstr "" +msgstr "los argumentos para convolve no deben estar vacíos" #: extmod/ulab/code/ndarray.c msgid "could not broadast input array from shape" -msgstr "" +msgstr "no se pudo anunciar la matriz de entrada desde la forma" #: extmod/ulab/code/poly.c msgid "could not invert Vandermonde matrix" -msgstr "" +msgstr "no se pudo invertir la matriz de Vandermonde" #: shared-module/sdcardio/SDCard.c msgid "couldn't determine SD card version" -msgstr "" +msgstr "no se pudo determinar la versión de la tarjeta SD" #: extmod/ulab/code/approx.c msgid "data must be iterable" @@ -2202,7 +2213,7 @@ msgstr "los datos deben ser de igual tamaño" #: extmod/ulab/code/numerical.c msgid "ddof must be smaller than length of data set" -msgstr "" +msgstr "ddof debe ser menor que la longitud del conjunto de datos" #: py/parsenum.c msgid "decimal numbers not supported" @@ -2233,7 +2244,7 @@ msgstr "la secuencia de actualizacion del dict tiene una longitud incorrecta" #: extmod/ulab/code/numerical.c msgid "diff argument must be an ndarray" -msgstr "" +msgstr "El argumento diff debe ser un ndarray" #: py/modmath.c py/objfloat.c py/objint_longlong.c py/objint_mpz.c py/runtime.c #: shared-bindings/math/__init__.c @@ -2307,23 +2318,23 @@ msgstr "argumento posicional adicional dado" #: py/parse.c msgid "f-string expression part cannot include a '#'" -msgstr "" +msgstr "La parte de expresión f-string no puede incluir un '#'" #: py/parse.c msgid "f-string expression part cannot include a backslash" -msgstr "" +msgstr "La parte de expresión f-string no puede incluir una barra invertida" #: py/parse.c msgid "f-string: empty expression not allowed" -msgstr "" +msgstr "cadena-f: expresión vacía no permitida" #: py/parse.c msgid "f-string: expecting '}'" -msgstr "" +msgstr "f-string: esperando '}'" #: py/parse.c msgid "f-string: single '}' is not allowed" -msgstr "" +msgstr "cadena-f: solo '}' no está permitido" #: shared-bindings/audiocore/WaveFile.c shared-bindings/audiomp3/MP3Decoder.c #: shared-bindings/displayio/OnDiskBitmap.c @@ -2356,11 +2367,11 @@ msgstr "primer argumento para super() debe ser de tipo" #: extmod/ulab/code/ndarray.c msgid "flattening order must be either 'C', or 'F'" -msgstr "" +msgstr "el orden de aplanamiento debe ser 'C' o 'F'" #: extmod/ulab/code/numerical.c msgid "flip argument must be an ndarray" -msgstr "" +msgstr "el argumento invertido debe ser un ndarray" #: py/objint.c msgid "float too big" @@ -2393,7 +2404,7 @@ msgstr "la función tiene múltiples valores para el argumento '%q'" #: extmod/ulab/code/approx.c msgid "function has the same sign at the ends of interval" -msgstr "" +msgstr "la función tiene el mismo signo a extremos del intervalo" #: extmod/ulab/code/compare.c msgid "function is implemented for scalars and ndarrays only" @@ -2531,7 +2542,7 @@ msgstr "Entero requerido" #: extmod/ulab/code/approx.c msgid "interp is defined for 1D arrays of equal length" -msgstr "" +msgstr "interp está definido para arreglos de 1D del mismo tamaño" #: shared-bindings/_bleio/Adapter.c #, c-format @@ -2656,7 +2667,7 @@ msgstr "long int no soportado en esta compilación" #: py/parse.c msgid "malformed f-string" -msgstr "" +msgstr "cadena-f mal formada" #: shared-bindings/_stage/Layer.c msgid "map buffer too small" @@ -2668,17 +2679,17 @@ msgstr "error de dominio matemático" #: extmod/ulab/code/linalg.c msgid "matrix dimensions do not match" -msgstr "" +msgstr "las dimensiones de la matriz no coinciden" #: extmod/ulab/code/linalg.c msgid "matrix is not positive definite" -msgstr "" +msgstr "matrix no es definida positiva" #: ports/nrf/common-hal/_bleio/Characteristic.c #: ports/nrf/common-hal/_bleio/Descriptor.c #, c-format msgid "max_length must be 0-%d when fixed_length is %s" -msgstr "" +msgstr "max_length debe ser 0-%d cuando fixed_length es %s" #: py/runtime.c msgid "maximum recursion depth exceeded" @@ -2699,7 +2710,7 @@ msgstr "módulo no encontrado" #: extmod/ulab/code/poly.c msgid "more degrees of freedom than data points" -msgstr "" +msgstr "más grados de libertad que los puntos de datos" #: py/compile.c msgid "multiple *x in assignment" @@ -2723,7 +2734,7 @@ msgstr "debe utilizar argumento de palabra clave para la función clave" #: extmod/ulab/code/numerical.c msgid "n must be between 0, and 9" -msgstr "" +msgstr "n debe estar entre 0 y 9" #: py/runtime.c msgid "name '%q' is not defined" @@ -2756,7 +2767,7 @@ msgstr "cuenta de corrimientos negativo" #: shared-module/sdcardio/SDCard.c msgid "no SD card" -msgstr "" +msgstr "no hay tarjeta SD" #: py/vm.c msgid "no active exception to reraise" @@ -2777,11 +2788,11 @@ msgstr "ningún módulo se llama '%q'" #: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c #: shared-bindings/displayio/ParallelBus.c msgid "no reset pin available" -msgstr "" +msgstr "no hay pin de reinicio disponible" #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" -msgstr "" +msgstr "no hay respuesta de la tarjeta SD" #: py/runtime.c msgid "no such attribute" @@ -2789,7 +2800,7 @@ msgstr "no hay tal atributo" #: ports/nrf/common-hal/_bleio/Connection.c msgid "non-UUID found in service_uuids_whitelist" -msgstr "" +msgstr "no UUID encontrado en service_uuids_whitelist" #: py/compile.c msgid "non-default argument follows default argument" @@ -2824,11 +2835,11 @@ msgstr "no suficientes argumentos para format string" #: extmod/ulab/code/poly.c msgid "number of arguments must be 2, or 3" -msgstr "" +msgstr "el número de argumentos debe ser 2 o 3" #: extmod/ulab/code/create.c msgid "number of points must be at least 2" -msgstr "" +msgstr "el número de puntos debe ser al menos 2" #: py/obj.c #, c-format @@ -2881,17 +2892,16 @@ msgid "odd-length string" msgstr "string de longitud impar" #: py/objstr.c py/objstrunicode.c -#, fuzzy msgid "offset out of bounds" -msgstr "address fuera de límites" +msgstr "offset fuera de límites" #: ports/nrf/common-hal/audiobusio/PDMIn.c msgid "only bit_depth=16 is supported" -msgstr "" +msgstr "solo se admite bit_depth=16" #: ports/nrf/common-hal/audiobusio/PDMIn.c msgid "only sample_rate=16000 is supported" -msgstr "" +msgstr "solo se admite sample_rate=16000" #: py/objarray.c py/objstr.c py/objstrunicode.c py/objtuple.c #: shared-bindings/nvm/ByteArray.c @@ -2901,15 +2911,15 @@ msgstr "solo se admiten segmentos con step=1 (alias None)" #: extmod/ulab/code/compare.c extmod/ulab/code/ndarray.c #: extmod/ulab/code/vectorise.c msgid "operands could not be broadcast together" -msgstr "" +msgstr "los operandos no se pueden transmitir juntos" #: extmod/ulab/code/numerical.c msgid "operation is not implemented on ndarrays" -msgstr "" +msgstr "la operación no está implementada para ndarrays" #: extmod/ulab/code/ndarray.c msgid "operation is not supported for given type" -msgstr "" +msgstr "la operación no es compatible para un tipo dado" #: py/modbuiltins.c msgid "ord expects a character" @@ -2958,7 +2968,7 @@ msgstr "pixel_shader debe ser displayio.Palette o displayio.ColorConverter" #: shared-module/vectorio/Polygon.c msgid "polygon can only be registered in one parent" -msgstr "" +msgstr "el polígono solo se puede registrar en uno de los padres" #: ports/atmel-samd/common-hal/pulseio/PulseIn.c #: ports/cxd56/common-hal/pulseio/PulseIn.c @@ -2993,11 +3003,11 @@ msgstr "desbordamiento de cola(queue)" #: py/parse.c msgid "raw f-strings are not implemented" -msgstr "" +msgstr "no está implementado cadenas-f sin procesar" #: extmod/ulab/code/fft.c msgid "real and imaginary parts must be of equal length" -msgstr "" +msgstr "las partes reales e imaginarias deben ser de igual longitud" #: py/builtinimport.c msgid "relative import" @@ -3019,16 +3029,16 @@ msgstr "retorno esperado '%q' pero se obtuvo '%q'" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "rgb_pins[%d] duplicates another pin assignment" -msgstr "" +msgstr "rgb_pins[%d] duplica otra asignación de pin" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "rgb_pins[%d] is not on the same port as clock" -msgstr "" +msgstr "rgb_pins[%d] no está en el mismo puerto que el reloj" #: extmod/ulab/code/ndarray.c msgid "right hand side must be an ndarray, or a scalar" -msgstr "" +msgstr "el lado derecho debe ser un ndarray o escalar" #: py/objstr.c msgid "rsplit(None,n)" @@ -3048,7 +3058,7 @@ msgstr "frecuencia de muestreo fuera de rango" #: py/modmicropython.c msgid "schedule stack full" -msgstr "" +msgstr "pila de horario llena" #: lib/utils/pyexec.c py/builtinimport.c msgid "script compilation not supported" @@ -3056,7 +3066,7 @@ msgstr "script de compilación no soportado" #: extmod/ulab/code/ndarray.c msgid "shape must be a 2-tuple" -msgstr "" +msgstr "la forma debe ser una tupla de 2" #: py/objstr.c msgid "sign not allowed in string format specifier" @@ -3072,7 +3082,7 @@ msgstr "un solo '}' encontrado en format string" #: extmod/ulab/code/linalg.c msgid "size is defined for ndarrays only" -msgstr "" +msgstr "el tamaño se define solo para ndarrays" #: shared-bindings/time/__init__.c msgid "sleep length must be non-negative" @@ -3080,7 +3090,7 @@ msgstr "la longitud de sleep no puede ser negativa" #: extmod/ulab/code/ndarray.c msgid "slice step can't be zero" -msgstr "" +msgstr "el tamaño de la división no puede ser cero" #: py/objslice.c py/sequence.c msgid "slice step cannot be zero" @@ -3096,28 +3106,27 @@ msgstr "reinicio suave\n" #: extmod/ulab/code/numerical.c msgid "sort argument must be an ndarray" -msgstr "" +msgstr "argumento de ordenado debe ser un ndarray" #: extmod/ulab/code/filter.c msgid "sos array must be of shape (n_section, 6)" -msgstr "" +msgstr "el arreglo sos debe de forma (n_section, 6)" #: extmod/ulab/code/filter.c msgid "sos[:, 3] should be all ones" -msgstr "" +msgstr "sos[:, 3] deberían ser todos unos" #: extmod/ulab/code/filter.c msgid "sosfilt requires iterable arguments" -msgstr "" +msgstr "sosfilt requiere argumentos iterables" #: py/objstr.c msgid "start/end indices" msgstr "índices inicio/final" #: shared-bindings/displayio/Shape.c -#, fuzzy msgid "start_x should be an int" -msgstr "y deberia ser un int" +msgstr "start_x deberia ser un int" #: shared-bindings/random/__init__.c msgid "step must be non-zero" @@ -3187,10 +3196,11 @@ msgstr "time.struct_time() toma un sequencio 9" #: ports/nrf/common-hal/watchdog/WatchDogTimer.c msgid "timeout duration exceeded the maximum supported value" msgstr "" +"la duración de tiempo de espera ha excedido la capacidad máxima del valor" #: shared-bindings/busio/UART.c msgid "timeout must be 0.0-100.0 seconds" -msgstr "" +msgstr "el tiempo de espera debe ser 0.0-100.0 segundos" #: shared-bindings/_bleio/CharacteristicBuffer.c msgid "timeout must be >= 0.0" @@ -3198,11 +3208,11 @@ msgstr "tiempo muerto debe ser >= 0.0" #: shared-module/sdcardio/SDCard.c msgid "timeout waiting for v1 card" -msgstr "" +msgstr "tiempo de espera agotado esperando por tarjeta v1" #: shared-module/sdcardio/SDCard.c msgid "timeout waiting for v2 card" -msgstr "" +msgstr "tiempo de espera agotado esperando a tarjeta v2" #: shared-bindings/time/__init__.c msgid "timestamp out of range for platform time_t" @@ -3214,7 +3224,7 @@ msgstr "demasiados argumentos provistos con el formato dado" #: extmod/ulab/code/ndarray.c msgid "too many indices" -msgstr "" +msgstr "demasiados índices" #: py/runtime.c #, c-format @@ -3343,31 +3353,31 @@ msgstr "tipos no soportados para %q: '%s', '%s'" #: py/objint.c #, c-format msgid "value must fit in %d byte(s)" -msgstr "" +msgstr "el valor debe caber en %d byte(s)" #: shared-bindings/displayio/Bitmap.c msgid "value_count must be > 0" -msgstr "" +msgstr "value_count debe ser > 0" #: shared-bindings/watchdog/WatchDogTimer.c msgid "watchdog timeout must be greater than 0" -msgstr "" +msgstr "el tiempo de espera del perro guardián debe ser mayor a 0" #: shared-bindings/_bleio/Adapter.c msgid "window must be <= interval" -msgstr "" +msgstr "la ventana debe ser <= intervalo" #: extmod/ulab/code/linalg.c msgid "wrong argument type" -msgstr "" +msgstr "tipo de argumento incorrecto" #: extmod/ulab/code/ndarray.c msgid "wrong index type" -msgstr "" +msgstr "tipo de índice incorrecto" #: extmod/ulab/code/vectorise.c msgid "wrong input type" -msgstr "" +msgstr "tipo de entrada incorrecta" #: py/objstr.c msgid "wrong number of arguments" @@ -3379,25 +3389,23 @@ msgstr "numero erroneo de valores a descomprimir" #: extmod/ulab/code/ndarray.c msgid "wrong operand type" -msgstr "" +msgstr "tipo de operando incorrecto" #: extmod/ulab/code/vectorise.c msgid "wrong output type" -msgstr "" +msgstr "tipo de salida incorrecta" #: shared-module/displayio/Shape.c -#, fuzzy msgid "x value out of bounds" -msgstr "address fuera de límites" +msgstr "valor x fuera de límites" #: shared-bindings/displayio/Shape.c msgid "y should be an int" msgstr "y deberia ser un int" #: shared-module/displayio/Shape.c -#, fuzzy msgid "y value out of bounds" -msgstr "address fuera de límites" +msgstr "valor y fuera de límites" #: py/objrange.c msgid "zero step" @@ -3405,15 +3413,15 @@ msgstr "paso cero" #: extmod/ulab/code/filter.c msgid "zi must be an ndarray" -msgstr "" +msgstr "zi debe ser un ndarray" #: extmod/ulab/code/filter.c msgid "zi must be of float type" -msgstr "" +msgstr "zi debe ser de tipo flotante" #: extmod/ulab/code/filter.c msgid "zi must be of shape (n_section, 2)" -msgstr "" +msgstr "zi debe ser una forma (n_section,2)" #~ msgid "AP required" #~ msgstr "AP requerido" From b5af05cd31988cb89435b724fa8d684ce95d0f34 Mon Sep 17 00:00:00 2001 From: Arudinne Date: Tue, 7 Jul 2020 12:27:23 -0500 Subject: [PATCH 40/73] new file: ports/nrf/boards/raytac_mdbt50q-db-40/board.c new file: ports/nrf/boards/raytac_mdbt50q-db-40/bootloader/6.0.0/pca10056_bootloader_6.0.0_s140.zip new file: ports/nrf/boards/raytac_mdbt50q-db-40/mpconfigboard.h new file: ports/nrf/boards/raytac_mdbt50q-db-40/mpconfigboard.mk new file: ports/nrf/boards/raytac_mdbt50q-db-40/pins.c --- ports/nrf/boards/raytac_mdbt50q-db-40/board.c | 38 +++++++++ .../6.0.0/pca10056_bootloader_6.0.0_s140.zip | Bin 0 -> 174550 bytes .../raytac_mdbt50q-db-40/mpconfigboard.h | 30 +++++++ .../raytac_mdbt50q-db-40/mpconfigboard.mk | 8 ++ ports/nrf/boards/raytac_mdbt50q-db-40/pins.c | 80 ++++++++++++++++++ 5 files changed, 156 insertions(+) create mode 100644 ports/nrf/boards/raytac_mdbt50q-db-40/board.c create mode 100644 ports/nrf/boards/raytac_mdbt50q-db-40/bootloader/6.0.0/pca10056_bootloader_6.0.0_s140.zip create mode 100644 ports/nrf/boards/raytac_mdbt50q-db-40/mpconfigboard.h create mode 100644 ports/nrf/boards/raytac_mdbt50q-db-40/mpconfigboard.mk create mode 100644 ports/nrf/boards/raytac_mdbt50q-db-40/pins.c diff --git a/ports/nrf/boards/raytac_mdbt50q-db-40/board.c b/ports/nrf/boards/raytac_mdbt50q-db-40/board.c new file mode 100644 index 0000000000..4421970eef --- /dev/null +++ b/ports/nrf/boards/raytac_mdbt50q-db-40/board.c @@ -0,0 +1,38 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 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 "boards/board.h" + +void board_init(void) { +} + +bool board_requests_safe_mode(void) { + return false; +} + +void reset_board(void) { + +} diff --git a/ports/nrf/boards/raytac_mdbt50q-db-40/bootloader/6.0.0/pca10056_bootloader_6.0.0_s140.zip b/ports/nrf/boards/raytac_mdbt50q-db-40/bootloader/6.0.0/pca10056_bootloader_6.0.0_s140.zip new file mode 100644 index 0000000000000000000000000000000000000000..691f4a1ab3cce19e13c954eb71a4d1feff592c27 GIT binary patch literal 174550 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 Date: Tue, 7 Jul 2020 13:01:21 -0500 Subject: [PATCH 41/73] modified: .github/workflows/build.yml --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fa7dd9dd25..68dbb04c76 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -236,6 +236,7 @@ jobs: - "pyportal" - "pyportal_titano" - "pyruler" + - "raytac_mdbt50q-db-40" - "robohatmm1_m4" - "sam32" - "same54_xplained" From dc2f729d193e18238306d810e822ae47befe6c2d Mon Sep 17 00:00:00 2001 From: Arudinne Date: Tue, 7 Jul 2020 14:37:08 -0500 Subject: [PATCH 42/73] modified: ports/nrf/boards/raytac_mdbt50q-db-40/mpconfigboard.mk modified: ports/nrf/boards/raytac_mdbt50q-db-40/pins.c --- ports/nrf/boards/raytac_mdbt50q-db-40/mpconfigboard.mk | 2 +- ports/nrf/boards/raytac_mdbt50q-db-40/pins.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/nrf/boards/raytac_mdbt50q-db-40/mpconfigboard.mk b/ports/nrf/boards/raytac_mdbt50q-db-40/mpconfigboard.mk index ec39f6fd81..f49618e776 100644 --- a/ports/nrf/boards/raytac_mdbt50q-db-40/mpconfigboard.mk +++ b/ports/nrf/boards/raytac_mdbt50q-db-40/mpconfigboard.mk @@ -1,5 +1,5 @@ USB_VID = 0x239A -USB_PID = 0x802A +USB_PID = 0x80BC USB_PRODUCT = "MDBT50Q-DB-40" USB_MANUFACTURER = "Raytac Corporation" diff --git a/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c b/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c index 33693697a1..f6a6ed5ed4 100644 --- a/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c +++ b/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c @@ -30,8 +30,8 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_P0_28), MP_ROM_PTR(&pin_P0_28) }, { MP_ROM_QSTR(MP_QSTR_P0_29), MP_ROM_PTR(&pin_P0_29) }, { MP_ROM_QSTR(MP_QSTR_P0_30), MP_ROM_PTR(&pin_P0_30) }, - { MP_ROM_QSTR(MP_QSTR_P0_31), MP_ROM_PTR(&pin_P0_31) }, + { MP_ROM_QSTR(MP_QSTR_P0_31), MP_ROM_PTR(&pin_P0_31) }, { MP_ROM_QSTR(MP_QSTR_P1_00), MP_ROM_PTR(&pin_P1_00) }, { MP_ROM_QSTR(MP_QSTR_P1_01), MP_ROM_PTR(&pin_P1_01) }, { MP_ROM_QSTR(MP_QSTR_P1_02), MP_ROM_PTR(&pin_P1_02) }, From 57ab4f1329f61844409735189a482359d7d4b7a7 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 24 Jun 2020 11:28:28 -0500 Subject: [PATCH 43/73] stm: SPI: revamp pin search code I discussed with Hierophect on Discord about how to "de-nest" the code for configuring SPI objects on STM, because the problems with one nesting level per pin becomes unmanageable with the up to 10 pins of SDIO. This code (which is only compile-tested so far) demonstrates the concept we discussed. The SCK pin is always required. Loop over all possibilities of the SCK pin. When we are considering a particular item in the mcu_spi_sck_list we have now become committed to using a particular periph_index. If all the other pins can be satisfied by that periph_index, then we have a working combination. Once we have a working combination that is not reserved, we can return that combination. On reaching the end, we have checked all the possible possibilities and can give the same errors as before: One if there was a possibility that worked but was reserved; and another if no possibility worked. --- ports/stm/common-hal/busio/SPI.c | 148 +++++++++++++------------------ 1 file changed, 61 insertions(+), 87 deletions(-) diff --git a/ports/stm/common-hal/busio/SPI.c b/ports/stm/common-hal/busio/SPI.c index c76705cd85..d4dd6cb3fc 100644 --- a/ports/stm/common-hal/busio/SPI.c +++ b/ports/stm/common-hal/busio/SPI.c @@ -107,105 +107,79 @@ void spi_reset(void) { spi_clock_disable(ALL_CLOCKS & ~(never_reset_mask)); } -void common_hal_busio_spi_construct(busio_spi_obj_t *self, +STATIC const mcu_periph_obj_t *find_pin_function(const mcu_periph_obj_t *table, size_t sz, const mcu_pin_obj_t *pin, int periph_index) { + for(size_t i = 0; iperiph_index && pin == table->pin ) { + return table; + } + } + return NULL; +} + +//match pins to SPI objects +STATIC int check_pins(busio_spi_obj_t *self, const mcu_pin_obj_t * sck, const mcu_pin_obj_t * mosi, const mcu_pin_obj_t * miso) { - - //match pins to SPI objects - SPI_TypeDef * SPIx; + bool spi_taken = false; uint8_t sck_len = MP_ARRAY_SIZE(mcu_spi_sck_list); uint8_t mosi_len = MP_ARRAY_SIZE(mcu_spi_mosi_list); uint8_t miso_len = MP_ARRAY_SIZE(mcu_spi_miso_list); - bool spi_taken = false; //SCK is not optional. MOSI and MISO are - for (uint i = 0; i < sck_len; i++) { - if (mcu_spi_sck_list[i].pin == sck) { - //if both MOSI and MISO exist, loop search normally - if ((mosi != NULL) && (miso != NULL)) { - //MOSI - for (uint j = 0; j < mosi_len; j++) { - if (mcu_spi_mosi_list[j].pin == mosi) { - //MISO - for (uint k = 0; k < miso_len; k++) { - if ((mcu_spi_miso_list[k].pin == miso) //everything needs the same index - && (mcu_spi_sck_list[i].periph_index == mcu_spi_mosi_list[j].periph_index) - && (mcu_spi_sck_list[i].periph_index == mcu_spi_miso_list[k].periph_index)) { - //keep looking if the SPI is taken, edge case - if (reserved_spi[mcu_spi_sck_list[i].periph_index - 1]) { - spi_taken = true; - continue; - } - //store pins if not - self->sck = &mcu_spi_sck_list[i]; - self->mosi = &mcu_spi_mosi_list[j]; - self->miso = &mcu_spi_miso_list[k]; - break; - } - } - if (self->sck != NULL) { - break; // Multi-level break to pick lowest peripheral - } - } - } - if (self->sck != NULL) { - break; - } - // if just MISO, reduce search - } else if (miso != NULL) { - for (uint j = 0; j < miso_len; j++) { - if ((mcu_spi_miso_list[j].pin == miso) //only SCK and MISO need the same index - && (mcu_spi_sck_list[i].periph_index == mcu_spi_miso_list[j].periph_index)) { - if (reserved_spi[mcu_spi_sck_list[i].periph_index - 1]) { - spi_taken = true; - continue; - } - self->sck = &mcu_spi_sck_list[i]; - self->mosi = NULL; - self->miso = &mcu_spi_miso_list[j]; - break; - } - } - if (self->sck != NULL) { - break; - } - // if just MOSI, reduce search - } else if (mosi != NULL) { - for (uint j = 0; j < mosi_len; j++) { - if ((mcu_spi_mosi_list[j].pin == mosi) //only SCK and MOSI need the same index - && (mcu_spi_sck_list[i].periph_index == mcu_spi_mosi_list[j].periph_index)) { - if (reserved_spi[mcu_spi_sck_list[i].periph_index - 1]) { - spi_taken = true; - continue; - } - self->sck = &mcu_spi_sck_list[i]; - self->mosi = &mcu_spi_mosi_list[j]; - self->miso = NULL; - break; - } - } - if (self->sck != NULL) { - break; - } - } else { - //throw an error immediately - mp_raise_ValueError(translate("Must provide MISO or MOSI pin")); - } - } + if (!sck) { + mp_raise_ValueError(translate("Must provide SCK pin")); } - //handle typedef selection, errors - if (self->sck != NULL && (self->mosi != NULL || self->miso != NULL)) { - SPIx = mcu_spi_banks[self->sck->periph_index - 1]; - } else { - if (spi_taken) { - mp_raise_ValueError(translate("Hardware busy, try alternative pins")); - } else { - mp_raise_ValueError(translate("Invalid SPI pin selection")); - } + if (!miso && !mosi) { + mp_raise_ValueError(translate("Must provide MISO or MOSI pin")); } + // Loop over each possibility for SCK. Check whether MISO and/or MOSI can be used on the same peripheral + for (uint i = 0; i < sck_len; i++) { + const mcu_periph_obj_t *mcu_spi_sck = &mcu_spi_sck_list[i]; + if (mcu_spi_sck->pin != sck) { + continue; + } + + int periph_index = mcu_spi_sck->periph_index; + + const mcu_periph_obj_t *mcu_spi_miso = NULL; + if (miso && !(mcu_spi_miso = find_pin_function(mcu_spi_miso_list, miso_len, miso, periph_index))) { + continue; + } + + const mcu_periph_obj_t *mcu_spi_mosi = NULL; + if (mosi && !(mcu_spi_mosi = find_pin_function(mcu_spi_mosi_list, mosi_len, mosi, periph_index))) { + continue; + } + + if (reserved_spi[periph_index-1]) { + spi_taken = true; + continue; + } + + self->sck = mcu_spi_sck; + self->mosi = mcu_spi_mosi; + self->miso = mcu_spi_miso; + + return periph_index; + } + + if (spi_taken) { + mp_raise_ValueError(translate("Hardware busy, try alternative pins")); + } else { + mp_raise_ValueError(translate("Invalid SPI pin selection")); + } +} + +void common_hal_busio_spi_construct(busio_spi_obj_t *self, + const mcu_pin_obj_t * sck, const mcu_pin_obj_t * mosi, + const mcu_pin_obj_t * miso) { + + int periph_index = check_pins(self, sck, mosi, miso); + SPI_TypeDef * SPIx = mcu_spi_banks[periph_index - 1]; + //Start GPIO for each pin GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = pin_mask(sck->number); From 5a9aac472a42b39a34e906a4260dd842f388d9f2 Mon Sep 17 00:00:00 2001 From: Arudinne Date: Tue, 7 Jul 2020 14:37:59 -0500 Subject: [PATCH 44/73] modified: ports/nrf/boards/raytac_mdbt50q-db-40/pins.c --- ports/nrf/boards/raytac_mdbt50q-db-40/pins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c b/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c index f6a6ed5ed4..33693697a1 100644 --- a/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c +++ b/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c @@ -30,8 +30,8 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_P0_28), MP_ROM_PTR(&pin_P0_28) }, { MP_ROM_QSTR(MP_QSTR_P0_29), MP_ROM_PTR(&pin_P0_29) }, { MP_ROM_QSTR(MP_QSTR_P0_30), MP_ROM_PTR(&pin_P0_30) }, - { MP_ROM_QSTR(MP_QSTR_P0_31), MP_ROM_PTR(&pin_P0_31) }, + { MP_ROM_QSTR(MP_QSTR_P1_00), MP_ROM_PTR(&pin_P1_00) }, { MP_ROM_QSTR(MP_QSTR_P1_01), MP_ROM_PTR(&pin_P1_01) }, { MP_ROM_QSTR(MP_QSTR_P1_02), MP_ROM_PTR(&pin_P1_02) }, From 959b4da9bbaf48e10707b1a5859f7cc4c5ee0b84 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 7 Jul 2020 14:38:34 -0500 Subject: [PATCH 45/73] make translate --- locale/circuitpython.pot | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 6e32ebab98..f3c9d04113 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1092,6 +1092,10 @@ msgstr "" msgid "Must provide MISO or MOSI pin" msgstr "" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" From 768149fb014b81e42c17102335ed539f00f51a7c Mon Sep 17 00:00:00 2001 From: Arudinne Date: Wed, 8 Jul 2020 10:36:41 -0500 Subject: [PATCH 46/73] modified: ports/nrf/boards/raytac_mdbt50q-db-40/pins.c --- ports/nrf/boards/raytac_mdbt50q-db-40/pins.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c b/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c index 33693697a1..426498cc20 100644 --- a/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c +++ b/ports/nrf/boards/raytac_mdbt50q-db-40/pins.c @@ -48,7 +48,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_P1_13), MP_ROM_PTR(&pin_P1_13) }, { MP_ROM_QSTR(MP_QSTR_P1_14), MP_ROM_PTR(&pin_P1_14) }, { MP_ROM_QSTR(MP_QSTR_P1_15), MP_ROM_PTR(&pin_P1_15) }, - + { MP_ROM_QSTR(MP_QSTR_AIN_0), MP_ROM_PTR(&pin_P0_02) }, { MP_ROM_QSTR(MP_QSTR_AIN_1), MP_ROM_PTR(&pin_P0_03) }, { MP_ROM_QSTR(MP_QSTR_AIN_2), MP_ROM_PTR(&pin_P0_04) }, @@ -60,17 +60,17 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_NFC_1), MP_ROM_PTR(&pin_P0_09) }, { MP_ROM_QSTR(MP_QSTR_NFC_2), MP_ROM_PTR(&pin_P0_10) }, - + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P0_06) }, { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P0_08) }, { MP_ROM_QSTR(MP_QSTR_CTS), MP_ROM_PTR(&pin_P0_07) }, { MP_ROM_QSTR(MP_QSTR_RTS), MP_ROM_PTR(&pin_P0_05) }, - + { MP_ROM_QSTR(MP_QSTR_LED_R), MP_ROM_PTR(&pin_P0_14) }, { MP_ROM_QSTR(MP_QSTR_LED_G), MP_ROM_PTR(&pin_P0_13) }, { MP_ROM_QSTR(MP_QSTR_LED_B), MP_ROM_PTR(&pin_P0_15) }, { MP_ROM_QSTR(MP_QSTR_LED_4), MP_ROM_PTR(&pin_P0_16) }, - + { MP_ROM_QSTR(MP_QSTR_SW1), MP_ROM_PTR(&pin_P0_11) }, { MP_ROM_QSTR(MP_QSTR_SW2), MP_ROM_PTR(&pin_P0_12) }, { MP_ROM_QSTR(MP_QSTR_SW3), MP_ROM_PTR(&pin_P0_24) }, From 83a27edd20de293927e8070da8585b11cb2f8ef7 Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Wed, 8 Jul 2020 19:59:53 +0200 Subject: [PATCH 47/73] SAMD: make the brownout detection level configurable per board Not all boards have external flash or other components that make them require 2.7V -- sometimes we can get considerably longer battery life by decreasing this requirement. In particular, pewpew10 and pewpew_m4 are powered directly from battery, with no LDO, and should work fine down to 1.6V. --- ports/atmel-samd/boards/pewpew10/mpconfigboard.h | 2 ++ ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h | 3 +++ ports/atmel-samd/mpconfigport.h | 10 ++++++++++ ports/atmel-samd/supervisor/port.c | 6 +++--- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ports/atmel-samd/boards/pewpew10/mpconfigboard.h b/ports/atmel-samd/boards/pewpew10/mpconfigboard.h index 6b3b4aa15c..940e250b46 100644 --- a/ports/atmel-samd/boards/pewpew10/mpconfigboard.h +++ b/ports/atmel-samd/boards/pewpew10/mpconfigboard.h @@ -43,3 +43,5 @@ #define DEFAULT_UART_BUS_RX (&pin_PA01) #define DEFAULT_UART_BUS_TX (&pin_PA00) + +#define BOARD_BROWNOUT_LEVEL (6) diff --git a/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h b/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h index 60cd8d754f..7da5cf14c1 100644 --- a/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h +++ b/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h @@ -40,3 +40,6 @@ #define IGNORE_PIN_PB09 1 #define IGNORE_PIN_PB10 1 #define IGNORE_PIN_PB11 1 + +#define BOARD_BROWNOUT_LEVEL (6) +// 1.6V diff --git a/ports/atmel-samd/mpconfigport.h b/ports/atmel-samd/mpconfigport.h index 354097ce41..3a5d4e1a2f 100644 --- a/ports/atmel-samd/mpconfigport.h +++ b/ports/atmel-samd/mpconfigport.h @@ -112,6 +112,11 @@ #define CIRCUITPY_DEFAULT_STACK_SIZE 4096 #endif +#ifndef BOARD_BROWNOUT_LEVEL ( +#define BOARD_BROWNLOUT_LEVEL (39) +// 2.77V with hysteresis off. Table 37.20 in datasheet. +#endif + // Smallest unit of flash that can be erased. #define FLASH_ERASE_SIZE NVMCTRL_ROW_SIZE @@ -129,6 +134,11 @@ #define CIRCUITPY_DEFAULT_STACK_SIZE (24*1024) #endif +#ifndef BOARD_BROWNOUT_LEVEL ( +#define BOARD_BROWNLOUT_LEVEL (200) +// 2.7V: 1.5V + LEVEL * 6mV. +#endif + // Smallest unit of flash that can be erased. #define FLASH_ERASE_SIZE NVMCTRL_BLOCK_SIZE diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index e892e6cde5..5b085dc81b 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -206,11 +206,11 @@ static void rtc_init(void) { safe_mode_t port_init(void) { #if defined(SAMD21) - // Set brownout detection to ~2.7V. Default from factory is 1.7V, + // Set brownout detection. Default from factory is 1.7V, // which is too low for proper operation of external SPI flash chips (they are 2.7-3.6V). // Disable while changing level. SYSCTRL->BOD33.bit.ENABLE = 0; - SYSCTRL->BOD33.bit.LEVEL = 39; // 2.77V with hysteresis off. Table 37.20 in datasheet. + SYSCTRL->BOD33.bit.LEVEL = BOARD_BROWNOUT_LEVEL; SYSCTRL->BOD33.bit.ENABLE = 1; #ifdef ENABLE_MICRO_TRACE_BUFFER @@ -229,7 +229,7 @@ safe_mode_t port_init(void) { // which is too low for proper operation of external SPI flash chips (they are 2.7-3.6V). // Disable while changing level. SUPC->BOD33.bit.ENABLE = 0; - SUPC->BOD33.bit.LEVEL = 200; // 2.7V: 1.5V + LEVEL * 6mV. + SUPC->BOD33.bit.LEVEL = BOARD_BROWNOUT_LEVEL; SUPC->BOD33.bit.ENABLE = 1; // MPU (Memory Protection Unit) setup. From 6d97f6fcccbf08a95242dfb5202a4e95825ee3f3 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 8 Jul 2020 20:31:35 -0500 Subject: [PATCH 48/73] audioio: Remove compatibility code These items were aliased from audiocore to audioio for compatibility with 4.x, but according to our deprecation schedule can be removed in 6.0. --- py/circuitpy_mpconfig.mk | 3 --- shared-bindings/audioio/__init__.c | 16 ---------------- 2 files changed, 19 deletions(-) diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 302368f74a..84fb926b5e 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -45,9 +45,6 @@ CFLAGS += -DCIRCUITPY_AUDIOBUSIO=$(CIRCUITPY_AUDIOBUSIO) CIRCUITPY_AUDIOIO ?= $(CIRCUITPY_FULL_BUILD) CFLAGS += -DCIRCUITPY_AUDIOIO=$(CIRCUITPY_AUDIOIO) -CIRCUITPY_AUDIOIO_COMPAT ?= $(CIRCUITPY_AUDIOIO) -CFLAGS += -DCIRCUITPY_AUDIOIO_COMPAT=$(CIRCUITPY_AUDIOIO_COMPAT) - CIRCUITPY_AUDIOPWMIO ?= 0 CFLAGS += -DCIRCUITPY_AUDIOPWMIO=$(CIRCUITPY_AUDIOPWMIO) diff --git a/shared-bindings/audioio/__init__.c b/shared-bindings/audioio/__init__.c index 7ec927834f..a9c58e8645 100644 --- a/shared-bindings/audioio/__init__.c +++ b/shared-bindings/audioio/__init__.c @@ -33,15 +33,6 @@ #include "shared-bindings/audioio/__init__.h" #include "shared-bindings/audioio/AudioOut.h" -#if CIRCUITPY_AUDIOIO_COMPAT -#include "shared-bindings/audiomixer/Mixer.h" -#include "shared-bindings/audiocore/RawSample.h" -#include "shared-bindings/audiocore/WaveFile.h" -#endif -#if CIRCUITPY_AUDIOMIXER -#include "shared-bindings/audiomixer/Mixer.h" -#endif - //| """Support for audio output //| //| The `audioio` module contains classes to provide access to audio IO. @@ -62,13 +53,6 @@ STATIC const mp_rom_map_elem_t audioio_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_audioio) }, { MP_ROM_QSTR(MP_QSTR_AudioOut), MP_ROM_PTR(&audioio_audioout_type) }, -#if CIRCUITPY_AUDIOIO_COMPAT - #if CIRCUITPY_AUDIOMIXER - { MP_ROM_QSTR(MP_QSTR_Mixer), MP_ROM_PTR(&audiomixer_mixer_type) }, - #endif - { MP_ROM_QSTR(MP_QSTR_RawSample), MP_ROM_PTR(&audioio_rawsample_type) }, - { MP_ROM_QSTR(MP_QSTR_WaveFile), MP_ROM_PTR(&audioio_wavefile_type) }, -#endif }; STATIC MP_DEFINE_CONST_DICT(audioio_module_globals, audioio_module_globals_table); From bb5cdcf9548d2a25a2aabf70e592f624c98bbec5 Mon Sep 17 00:00:00 2001 From: arms22 Date: Thu, 9 Jul 2020 11:26:45 +0900 Subject: [PATCH 49/73] Add new board BLE-SS dev board Multi Sensor --- .github/workflows/build.yml | 1 + .../bless_dev_board_multi_sensor/board.c | 12 +++++ .../mpconfigboard.h | 17 +++++++ .../mpconfigboard.mk | 8 ++++ .../bless_dev_board_multi_sensor/pins.c | 45 +++++++++++++++++++ 5 files changed, 83 insertions(+) create mode 100644 ports/nrf/boards/bless_dev_board_multi_sensor/board.c create mode 100644 ports/nrf/boards/bless_dev_board_multi_sensor/mpconfigboard.h create mode 100644 ports/nrf/boards/bless_dev_board_multi_sensor/mpconfigboard.mk create mode 100644 ports/nrf/boards/bless_dev_board_multi_sensor/pins.c diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fa3aee4a5d..adefa8b132 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -142,6 +142,7 @@ jobs: - "arduino_zero" - "bast_pro_mini_m0" - "bdmicro_vina_m0" + - "bless_dev_board_multi_sensor" - "capablerobot_usbhub" - "catwan_usbstick" - "circuitbrains_basic_m0" diff --git a/ports/nrf/boards/bless_dev_board_multi_sensor/board.c b/ports/nrf/boards/bless_dev_board_multi_sensor/board.c new file mode 100644 index 0000000000..71b9a06577 --- /dev/null +++ b/ports/nrf/boards/bless_dev_board_multi_sensor/board.c @@ -0,0 +1,12 @@ +#include "boards/board.h" + +void board_init(void) { +} + +bool board_requests_safe_mode(void) { + return false; +} + +void reset_board(void) { + +} diff --git a/ports/nrf/boards/bless_dev_board_multi_sensor/mpconfigboard.h b/ports/nrf/boards/bless_dev_board_multi_sensor/mpconfigboard.h new file mode 100644 index 0000000000..7fffd86ccd --- /dev/null +++ b/ports/nrf/boards/bless_dev_board_multi_sensor/mpconfigboard.h @@ -0,0 +1,17 @@ +#include "nrfx/hal/nrf_gpio.h" + +#define MICROPY_HW_BOARD_NAME "BLE-SS dev board Multi Sensor" +#define MICROPY_HW_MCU_NAME "nRF52840" +#define MICROPY_HW_LED_STATUS (&pin_P0_07) + +#define DEFAULT_I2C_BUS_SCL (&pin_P0_26) +#define DEFAULT_I2C_BUS_SDA (&pin_P0_24) + +#define DEFAULT_SPI_BUS_SCK (&pin_P0_13) /* n.c */ +#define DEFAULT_SPI_BUS_MOSI (&pin_P0_14) /* n.c */ +#define DEFAULT_SPI_BUS_MISO (&pin_P0_15) /* n.c */ + +#define DEFAULT_UART_BUS_RX (&pin_P0_02) /* TP7 */ +#define DEFAULT_UART_BUS_TX (&pin_P0_03) /* TP6 */ + +/* Note: Flash chip is not provided. */ diff --git a/ports/nrf/boards/bless_dev_board_multi_sensor/mpconfigboard.mk b/ports/nrf/boards/bless_dev_board_multi_sensor/mpconfigboard.mk new file mode 100644 index 0000000000..90b0908505 --- /dev/null +++ b/ports/nrf/boards/bless_dev_board_multi_sensor/mpconfigboard.mk @@ -0,0 +1,8 @@ +USB_VID = 0x2786 +USB_PID = 0x9207 +USB_PRODUCT = "BLE-SS dev board Multi Sensor" +USB_MANUFACTURER = "Switch Science, Inc." + +MCU_CHIP = nrf52840 + +INTERNAL_FLASH_FILESYSTEM = 1 diff --git a/ports/nrf/boards/bless_dev_board_multi_sensor/pins.c b/ports/nrf/boards/bless_dev_board_multi_sensor/pins.c new file mode 100644 index 0000000000..c6010a8c33 --- /dev/null +++ b/ports/nrf/boards/bless_dev_board_multi_sensor/pins.c @@ -0,0 +1,45 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_P0_02) }, // TP7 + { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P0_03) }, // TP6 + { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_P0_04) }, // LED1 + { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_P0_05) }, // U2-BMX055-INT1 + { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_P0_06) }, // U2-BMX055-DRDYM + { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_P0_07) }, // LED2 + { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_P0_08) }, // U4-HDC2010-DRDY/INT + { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_P0_09) }, // TP1 + { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_P0_10) }, // U3-LPS22HB-INT_DRDY + { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_P0_12) }, // S2 + { MP_ROM_QSTR(MP_QSTR_D23), MP_ROM_PTR(&pin_P0_23) }, // BZ1 + { MP_ROM_QSTR(MP_QSTR_D28), MP_ROM_PTR(&pin_P0_28) }, // U2-BMX055-INT4 + { MP_ROM_QSTR(MP_QSTR_D29), MP_ROM_PTR(&pin_P0_29) }, // U2-BMX055-INT3 + { MP_ROM_QSTR(MP_QSTR_D30), MP_ROM_PTR(&pin_P0_30) }, // U2-BMX055-INT5 + { MP_ROM_QSTR(MP_QSTR_D31), MP_ROM_PTR(&pin_P0_31) }, // S1 + + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_02) }, // A0/TP7 + { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_P0_03) }, // A1/TP6 + + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P0_24) }, // 24 - SDA + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P0_26) }, // 26 - SCL + + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P0_13) }, // 13 - MISO (n.c) + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P0_14) }, // 14 - MOSI (n.c) + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P0_15) }, // 15 - SCK (n.c) + + { MP_ROM_QSTR(MP_QSTR_LED1), MP_ROM_PTR(&pin_P0_07) }, // 4 - LED1 + { MP_ROM_QSTR(MP_QSTR_LED2), MP_ROM_PTR(&pin_P0_04) }, // 7 - LED2 + + { MP_ROM_QSTR(MP_QSTR_BUTTON1), MP_ROM_PTR(&pin_P0_31) }, // 31 - S1 + { MP_ROM_QSTR(MP_QSTR_BUTTON2), MP_ROM_PTR(&pin_P0_12) }, // 12 - S2 + + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P0_02) }, // 2 - UART RX + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P0_03) }, // 3 - UART TX + + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_QWIIC), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, +}; + +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From e81d22cd67c16f95879d8af9a4034d2566922631 Mon Sep 17 00:00:00 2001 From: Yihui Xiong Date: Thu, 9 Jul 2020 10:01:04 +0000 Subject: [PATCH 50/73] add makerdiary nrf52840 m.2 devkit Signed-off-by: Yihui Xiong --- .../makerdiary_nrf52840_m2_devkit/README.md | 8 ++ .../makerdiary_nrf52840_m2_devkit/board.c | 103 ++++++++++++++++ .../mpconfigboard.h | 52 +++++++++ .../mpconfigboard.mk | 12 ++ .../makerdiary_nrf52840_m2_devkit/pins.c | 110 ++++++++++++++++++ 5 files changed, 285 insertions(+) create mode 100644 ports/nrf/boards/makerdiary_nrf52840_m2_devkit/README.md create mode 100644 ports/nrf/boards/makerdiary_nrf52840_m2_devkit/board.c create mode 100644 ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h create mode 100644 ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.mk create mode 100644 ports/nrf/boards/makerdiary_nrf52840_m2_devkit/pins.c diff --git a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/README.md b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/README.md new file mode 100644 index 0000000000..b75385414b --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/README.md @@ -0,0 +1,8 @@ +# Makerdiary nRF52840 M.2 Developer Kit + +The devkit is a versatile IoT prototyping platform, +including the nRF52840 M.2 Module and M.2 Dock. You can use the developer kit +to prototype your IoT products and then scale to production faster using the +nRF52840 M.2 Module combined with your custom PCB hardware. + +Refer to https://github.com/makerdiary/nrf52840-m2-devkit for more details. diff --git a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/board.c b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/board.c new file mode 100644 index 0000000000..e7f946f4d0 --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/board.c @@ -0,0 +1,103 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries + * Copyright (c) 2020 Yihui Xiong for Makerdiary + * + * 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 "boards/board.h" +#include "mpconfigboard.h" + +#include "shared-bindings/busio/SPI.h" +#include "shared-bindings/displayio/FourWire.h" +#include "shared-module/displayio/__init__.h" +#include "shared-module/displayio/mipi_constants.h" + +displayio_fourwire_obj_t board_display_obj; + +#define DELAY 0x80 + +uint8_t display_init_sequence[] = { + 0x01, 0 | DELAY, 150, // SWRESET + 0x11, 0 | DELAY, 255, // SLPOUT + 0x36, 1, 0b10100000, // _MADCTL for rotation 0 + 0x3a, 1, 0x55, // COLMOD - 16bit color + 0x21, 0 | DELAY, 10, // _INVON + 0x13, 0 | DELAY, 10, // _NORON + 0x29, 0 | DELAY, 255, // _DISPON +}; + +void board_init(void) { + busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus; + common_hal_busio_spi_construct(spi, &pin_P0_11, &pin_P0_12, NULL); + common_hal_busio_spi_never_reset(spi); + + displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus; + bus->base.type = &displayio_fourwire_type; + common_hal_displayio_fourwire_construct(bus, + spi, + &pin_P0_08, // TFT_DC Command or data + &pin_P0_06, // TFT_CS Chip select + &pin_P1_09, // TFT_RST Reset + 60000000, // Baudrate + 0, // Polarity + 0); // Phase + + displayio_display_obj_t* display = &displays[0].display; + display->base.type = &displayio_display_type; + common_hal_displayio_display_construct(display, + bus, + 240, // Width (after rotation) + 240, // Height (after rotation) + 80, // column start + 0, // row start + 0, // rotation + 16, // Color depth + false, // Grayscale + false, // Pixels in a byte share a row. Only used for depth < 8 + 1, // bytes per cell. Only valid for depths < 8 + false, // reverse_pixels_in_byte. Only valid for depths < 8 + true, // reverse_pixels_in_word + MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command + MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command + MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command + 37, // set vertical scroll command + display_init_sequence, + sizeof(display_init_sequence), + &pin_P0_20, // backlight pin + NO_BRIGHTNESS_COMMAND, + 1.0f, // brightness (ignored) + true, // auto_brightness + false, // single_byte_bounds + false, // data_as_commands + true, // auto_refresh + 60, // native_frames_per_second + true); // backlight_on_high +} + +bool board_requests_safe_mode(void) { + return false; +} + +void reset_board(void) { +} diff --git a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h new file mode 100644 index 0000000000..a3fb7643f9 --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h @@ -0,0 +1,52 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Glenn Ruben Bakke + * Copyright (c) 2018 Dan Halbert 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 "nrfx/hal/nrf_gpio.h" + +#define MAKERDIARYNRF52840M2DEVKIT + +#define MICROPY_HW_BOARD_NAME "Makerdiary nRF52840 M.2 Developer Kit" +#define MICROPY_HW_MCU_NAME "nRF52840" + +#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(1, 10) +#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(1, 14) +#define MICROPY_QSPI_DATA2 NRF_GPIO_PIN_MAP(1, 15) +#define MICROPY_QSPI_DATA3 NRF_GPIO_PIN_MAP(1, 12) +#define MICROPY_QSPI_SCK NRF_GPIO_PIN_MAP(1, 11) +#define MICROPY_QSPI_CS NRF_GPIO_PIN_MAP(1, 13) + +#define BOARD_HAS_CRYSTAL 1 + +#define DEFAULT_UART_BUS_RX (&pin_P0_15) +#define DEFAULT_UART_BUS_TX (&pin_P0_16) + +#define DEFAULT_I2C_BUS_SCL (&pin_P1_06) +#define DEFAULT_I2C_BUS_SDA (&pin_P1_05) + +#define DEFAULT_SPI_BUS_SCK (&pin_P0_11) +#define DEFAULT_SPI_BUS_MOSI (&pin_P0_12) +#define DEFAULT_SPI_BUS_MISO (&pin_P1_08) diff --git a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.mk b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.mk new file mode 100644 index 0000000000..bc5fa3c120 --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.mk @@ -0,0 +1,12 @@ +USB_VID = 0x1915 +USB_PID = 0xb001 +USB_PRODUCT = "nRF52840 M.2 Developer Kit" +USB_MANUFACTURER = "Makerdiary" + +MCU_CHIP = nrf52840 + +QSPI_FLASH_FILESYSTEM = 1 +EXTERNAL_FLASH_DEVICE_COUNT = 1 +EXTERNAL_FLASH_DEVICES = "MX25R6435F" + +CIRCUITPY_ENABLE_MPY_NATIVE = 1 diff --git a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/pins.c b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/pins.c new file mode 100644 index 0000000000..1032555dca --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/pins.c @@ -0,0 +1,110 @@ +#include "shared-bindings/board/__init__.h" + +#include "boards/board.h" +#include "shared-module/displayio/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR_AIN0), MP_ROM_PTR(&pin_P0_02) }, + { MP_ROM_QSTR(MP_QSTR_AIN1), MP_ROM_PTR(&pin_P0_03) }, + { MP_ROM_QSTR(MP_QSTR_AIN2), MP_ROM_PTR(&pin_P0_04) }, + { MP_ROM_QSTR(MP_QSTR_AIN3), MP_ROM_PTR(&pin_P0_05) }, + { MP_ROM_QSTR(MP_QSTR_AIN4), MP_ROM_PTR(&pin_P0_28) }, + { MP_ROM_QSTR(MP_QSTR_AIN5), MP_ROM_PTR(&pin_P0_29) }, + { MP_ROM_QSTR(MP_QSTR_AIN6), MP_ROM_PTR(&pin_P0_30) }, + { MP_ROM_QSTR(MP_QSTR_AIN7), MP_ROM_PTR(&pin_P0_31) }, + + { MP_ROM_QSTR(MP_QSTR_AREF), MP_ROM_PTR(&pin_P0_04) }, + { MP_ROM_QSTR(MP_QSTR_VDIV), MP_ROM_PTR(&pin_P0_05) }, + + { MP_ROM_QSTR(MP_QSTR_NFC1), MP_ROM_PTR(&pin_P0_09) }, + { MP_ROM_QSTR(MP_QSTR_NFC2), MP_ROM_PTR(&pin_P0_10) }, + + { MP_ROM_QSTR(MP_QSTR_P2), MP_ROM_PTR(&pin_P0_02) }, + { MP_ROM_QSTR(MP_QSTR_P3), MP_ROM_PTR(&pin_P0_03) }, + { MP_ROM_QSTR(MP_QSTR_P4), MP_ROM_PTR(&pin_P0_04) }, + { MP_ROM_QSTR(MP_QSTR_P5), MP_ROM_PTR(&pin_P0_05) }, + { MP_ROM_QSTR(MP_QSTR_P6), MP_ROM_PTR(&pin_P0_06) }, + { MP_ROM_QSTR(MP_QSTR_P7), MP_ROM_PTR(&pin_P0_07) }, + { MP_ROM_QSTR(MP_QSTR_P8), MP_ROM_PTR(&pin_P0_08) }, + { MP_ROM_QSTR(MP_QSTR_P9), MP_ROM_PTR(&pin_P0_09) }, + { MP_ROM_QSTR(MP_QSTR_P10), MP_ROM_PTR(&pin_P0_10) }, + { MP_ROM_QSTR(MP_QSTR_P11), MP_ROM_PTR(&pin_P0_11) }, + { MP_ROM_QSTR(MP_QSTR_P12), MP_ROM_PTR(&pin_P0_12) }, + { MP_ROM_QSTR(MP_QSTR_P13), MP_ROM_PTR(&pin_P0_13) }, + { MP_ROM_QSTR(MP_QSTR_P14), MP_ROM_PTR(&pin_P0_14) }, + { MP_ROM_QSTR(MP_QSTR_P15), MP_ROM_PTR(&pin_P0_15) }, + { MP_ROM_QSTR(MP_QSTR_P16), MP_ROM_PTR(&pin_P0_16) }, + { MP_ROM_QSTR(MP_QSTR_P17), MP_ROM_PTR(&pin_P0_17) }, + { MP_ROM_QSTR(MP_QSTR_P18), MP_ROM_PTR(&pin_P0_18) }, + { MP_ROM_QSTR(MP_QSTR_P19), MP_ROM_PTR(&pin_P0_19) }, + { MP_ROM_QSTR(MP_QSTR_P20), MP_ROM_PTR(&pin_P0_20) }, + { MP_ROM_QSTR(MP_QSTR_P21), MP_ROM_PTR(&pin_P0_21) }, + { MP_ROM_QSTR(MP_QSTR_P25), MP_ROM_PTR(&pin_P0_25) }, + { MP_ROM_QSTR(MP_QSTR_P26), MP_ROM_PTR(&pin_P0_26) }, + { MP_ROM_QSTR(MP_QSTR_P27), MP_ROM_PTR(&pin_P0_27) }, + { MP_ROM_QSTR(MP_QSTR_P28), MP_ROM_PTR(&pin_P0_28) }, + { MP_ROM_QSTR(MP_QSTR_P29), MP_ROM_PTR(&pin_P0_29) }, + { MP_ROM_QSTR(MP_QSTR_P30), MP_ROM_PTR(&pin_P0_30) }, + { MP_ROM_QSTR(MP_QSTR_P31), MP_ROM_PTR(&pin_P0_31) }, + + { MP_ROM_QSTR(MP_QSTR_P1_0), MP_ROM_PTR(&pin_P1_00) }, + { MP_ROM_QSTR(MP_QSTR_P1_1), MP_ROM_PTR(&pin_P1_01) }, + { MP_ROM_QSTR(MP_QSTR_P1_2), MP_ROM_PTR(&pin_P1_02) }, + { MP_ROM_QSTR(MP_QSTR_P1_3), MP_ROM_PTR(&pin_P1_03) }, + { MP_ROM_QSTR(MP_QSTR_P1_4), MP_ROM_PTR(&pin_P1_04) }, + { MP_ROM_QSTR(MP_QSTR_P1_5), MP_ROM_PTR(&pin_P1_05) }, + { MP_ROM_QSTR(MP_QSTR_P1_6), MP_ROM_PTR(&pin_P1_06) }, + { MP_ROM_QSTR(MP_QSTR_P1_7), MP_ROM_PTR(&pin_P1_07) }, + { MP_ROM_QSTR(MP_QSTR_P1_8), MP_ROM_PTR(&pin_P1_08) }, + { MP_ROM_QSTR(MP_QSTR_P1_9), MP_ROM_PTR(&pin_P1_09) }, + + { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_P0_15) }, + { MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_P0_16) }, + { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_P0_19) }, + { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P0_20) }, + { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_P0_21) }, + { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_P0_22) }, + { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_P0_23) }, + { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_P0_24) }, + { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_P1_00) }, + { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_P1_01) }, + { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_P1_02) }, + { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_P1_03) }, + { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_P1_04) }, + { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_P1_07) }, + { MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_P1_05) }, + { MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_P1_06) }, + + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_02) }, + { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_P0_03) }, + { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_P0_28) }, + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_P0_27) }, + { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_P0_26) }, + { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_P0_04) }, + + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P0_11) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P0_12) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P1_08) }, + + { MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_P0_08) }, + { MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_P0_06) }, + { MP_ROM_QSTR(MP_QSTR_LCD_BL), MP_ROM_PTR(&pin_P0_20) }, + { MP_ROM_QSTR(MP_QSTR_LCD_RST), MP_ROM_PTR(&pin_P1_09) }, + + { MP_ROM_QSTR(MP_QSTR_TXD), MP_ROM_PTR(&pin_P0_16) }, + { MP_ROM_QSTR(MP_QSTR_RXD), MP_ROM_PTR(&pin_P0_15) }, + + { MP_ROM_QSTR(MP_QSTR_LED_R), MP_ROM_PTR(&pin_P0_30) }, + { MP_ROM_QSTR(MP_QSTR_LED_G), MP_ROM_PTR(&pin_P0_29) }, + { MP_ROM_QSTR(MP_QSTR_LED_B), MP_ROM_PTR(&pin_P0_31) }, + + { MP_ROM_QSTR(MP_QSTR_USR_BTN), MP_ROM_PTR(&pin_P0_19) }, + + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + + { MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)} +}; + +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From 96f6ce222ce057df1a1f97a8d2be51232548d26f Mon Sep 17 00:00:00 2001 From: Yihui Xiong Date: Thu, 9 Jul 2020 10:02:27 +0000 Subject: [PATCH 51/73] add makerdiary m60 keyboard Signed-off-by: Yihui Xiong --- .../boards/makerdiary_m60_keyboard/README.md | 4 ++ .../boards/makerdiary_m60_keyboard/board.c | 38 +++++++++++++++ .../makerdiary_m60_keyboard/mpconfigboard.h | 48 +++++++++++++++++++ .../makerdiary_m60_keyboard/mpconfigboard.mk | 13 +++++ .../nrf/boards/makerdiary_m60_keyboard/pins.c | 41 ++++++++++++++++ 5 files changed, 144 insertions(+) create mode 100644 ports/nrf/boards/makerdiary_m60_keyboard/README.md create mode 100644 ports/nrf/boards/makerdiary_m60_keyboard/board.c create mode 100644 ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h create mode 100644 ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk create mode 100644 ports/nrf/boards/makerdiary_m60_keyboard/pins.c diff --git a/ports/nrf/boards/makerdiary_m60_keyboard/README.md b/ports/nrf/boards/makerdiary_m60_keyboard/README.md new file mode 100644 index 0000000000..04486ba210 --- /dev/null +++ b/ports/nrf/boards/makerdiary_m60_keyboard/README.md @@ -0,0 +1,4 @@ +# Makerdiary M60 Keyboard + +M60 is a USB & BLE, modular, hot-swappable, 60% keyboard powered by Python. +Refer to https://makerdiary.com/m60 for more details. diff --git a/ports/nrf/boards/makerdiary_m60_keyboard/board.c b/ports/nrf/boards/makerdiary_m60_keyboard/board.c new file mode 100644 index 0000000000..4421970eef --- /dev/null +++ b/ports/nrf/boards/makerdiary_m60_keyboard/board.c @@ -0,0 +1,38 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 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 "boards/board.h" + +void board_init(void) { +} + +bool board_requests_safe_mode(void) { + return false; +} + +void reset_board(void) { + +} diff --git a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h new file mode 100644 index 0000000000..c59a5fdb28 --- /dev/null +++ b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h @@ -0,0 +1,48 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Glenn Ruben Bakke + * Copyright (c) 2018 Dan Halbert 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 "nrfx/hal/nrf_gpio.h" + +#define MAKERDIARYM60KEYBOARD + +#define MICROPY_HW_BOARD_NAME "Makerdiary M60 Keyboard" +#define MICROPY_HW_MCU_NAME "nRF52840" + +#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(1, 10) +#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(1, 14) +#define MICROPY_QSPI_DATA2 NRF_GPIO_PIN_MAP(1, 15) +#define MICROPY_QSPI_DATA3 NRF_GPIO_PIN_MAP(1, 12) +#define MICROPY_QSPI_SCK NRF_GPIO_PIN_MAP(1, 11) +#define MICROPY_QSPI_CS NRF_GPIO_PIN_MAP(1, 13) + +#define BOARD_HAS_CRYSTAL 1 + +// #define DEFAULT_UART_BUS_RX (&pin_P0_15) +// #define DEFAULT_UART_BUS_TX (&pin_P0_16) + +#define DEFAULT_I2C_BUS_SCL (&pin_P1_06) +#define DEFAULT_I2C_BUS_SDA (&pin_P1_05) diff --git a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk new file mode 100644 index 0000000000..59eba13343 --- /dev/null +++ b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk @@ -0,0 +1,13 @@ +USB_VID = 0x1915 +USB_PID = 0xb001 +USB_PRODUCT = "M60 Keyboard" +USB_MANUFACTURER = "Makerdiary" + +MCU_CHIP = nrf52840 + +QSPI_FLASH_FILESYSTEM = 1 +EXTERNAL_FLASH_DEVICE_COUNT = 1 +EXTERNAL_FLASH_DEVICES = "MX25R6435F" + +CIRCUITPY_ENABLE_MPY_NATIVE = 1 + diff --git a/ports/nrf/boards/makerdiary_m60_keyboard/pins.c b/ports/nrf/boards/makerdiary_m60_keyboard/pins.c new file mode 100644 index 0000000000..63c3ad1711 --- /dev/null +++ b/ports/nrf/boards/makerdiary_m60_keyboard/pins.c @@ -0,0 +1,41 @@ +#include "shared-bindings/board/__init__.h" + +#include "boards/board.h" +#include "shared-module/displayio/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR_R1), MP_ROM_PTR(&pin_P0_05) }, + { MP_ROM_QSTR(MP_QSTR_R2), MP_ROM_PTR(&pin_P0_06) }, + { MP_ROM_QSTR(MP_QSTR_R3), MP_ROM_PTR(&pin_P0_07) }, + { MP_ROM_QSTR(MP_QSTR_R4), MP_ROM_PTR(&pin_P0_08) }, + { MP_ROM_QSTR(MP_QSTR_R5), MP_ROM_PTR(&pin_P1_09) }, + { MP_ROM_QSTR(MP_QSTR_R6), MP_ROM_PTR(&pin_P1_08) }, + { MP_ROM_QSTR(MP_QSTR_R7), MP_ROM_PTR(&pin_P0_12) }, + { MP_ROM_QSTR(MP_QSTR_R8), MP_ROM_PTR(&pin_P0_11) }, + + { MP_ROM_QSTR(MP_QSTR_C1), MP_ROM_PTR(&pin_P0_19) }, + { MP_ROM_QSTR(MP_QSTR_C2), MP_ROM_PTR(&pin_P0_20) }, + { MP_ROM_QSTR(MP_QSTR_C3), MP_ROM_PTR(&pin_P0_21) }, + { MP_ROM_QSTR(MP_QSTR_C4), MP_ROM_PTR(&pin_P0_22) }, + { MP_ROM_QSTR(MP_QSTR_C5), MP_ROM_PTR(&pin_P0_23) }, + { MP_ROM_QSTR(MP_QSTR_C6), MP_ROM_PTR(&pin_P0_24) }, + { MP_ROM_QSTR(MP_QSTR_C7), MP_ROM_PTR(&pin_P0_25) }, + { MP_ROM_QSTR(MP_QSTR_C8), MP_ROM_PTR(&pin_P0_26) }, + + { MP_ROM_QSTR(MP_QSTR_TXD), MP_ROM_PTR(&pin_P0_16) }, + { MP_ROM_QSTR(MP_QSTR_RXD), MP_ROM_PTR(&pin_P0_15) }, + + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P1_06) }, + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P1_05) }, + + { MP_ROM_QSTR(MP_QSTR_LED_R), MP_ROM_PTR(&pin_P0_30) }, + { MP_ROM_QSTR(MP_QSTR_LED_G), MP_ROM_PTR(&pin_P0_29) }, + { MP_ROM_QSTR(MP_QSTR_LED_B), MP_ROM_PTR(&pin_P0_31) }, + + { MP_ROM_QSTR(MP_QSTR_BTN), MP_ROM_PTR(&pin_P0_27) }, + +// { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) } +}; + +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From 8fef69809c34ff85651649790336fb7164cc38d3 Mon Sep 17 00:00:00 2001 From: Yihui Xiong Date: Thu, 9 Jul 2020 10:04:26 +0000 Subject: [PATCH 52/73] add m60 keyboard and nrf52840 m.2 devkit to build action Signed-off-by: Yihui Xiong --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 00454cc2da..f615cb7ce6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -193,6 +193,8 @@ jobs: - "itsybitsy_m4_express" - "itsybitsy_nrf52840_express" - "kicksat-sprite" + - "makerdiary_m60_keyboard" + - "makerdiary_nrf52840_m2_devkit" - "makerdiary_nrf52840_mdk" - "makerdiary_nrf52840_mdk_usb_dongle" - "meowbit_v121" From e0733d153ee159fd235794825fada7d455828007 Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Wed, 8 Jul 2020 20:59:00 +0200 Subject: [PATCH 53/73] SAMD: configurable brownout, separate the variables --- ports/atmel-samd/boards/pewpew10/mpconfigboard.h | 2 +- ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h | 3 +-- ports/atmel-samd/mpconfigport.h | 14 ++++++++++---- ports/atmel-samd/supervisor/port.c | 10 ++++------ 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/ports/atmel-samd/boards/pewpew10/mpconfigboard.h b/ports/atmel-samd/boards/pewpew10/mpconfigboard.h index 940e250b46..2cb097e8dc 100644 --- a/ports/atmel-samd/boards/pewpew10/mpconfigboard.h +++ b/ports/atmel-samd/boards/pewpew10/mpconfigboard.h @@ -44,4 +44,4 @@ #define DEFAULT_UART_BUS_RX (&pin_PA01) #define DEFAULT_UART_BUS_TX (&pin_PA00) -#define BOARD_BROWNOUT_LEVEL (6) +#define SAMD21_BOD33_LEVEL (6) diff --git a/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h b/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h index 7da5cf14c1..4b88c89f28 100644 --- a/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h +++ b/ports/atmel-samd/boards/pewpew_m4/mpconfigboard.h @@ -41,5 +41,4 @@ #define IGNORE_PIN_PB10 1 #define IGNORE_PIN_PB11 1 -#define BOARD_BROWNOUT_LEVEL (6) -// 1.6V +#define SAMD5x_E5x_BOD33_LEVEL (100) diff --git a/ports/atmel-samd/mpconfigport.h b/ports/atmel-samd/mpconfigport.h index 3a5d4e1a2f..540a2f77c7 100644 --- a/ports/atmel-samd/mpconfigport.h +++ b/ports/atmel-samd/mpconfigport.h @@ -112,8 +112,11 @@ #define CIRCUITPY_DEFAULT_STACK_SIZE 4096 #endif -#ifndef BOARD_BROWNOUT_LEVEL ( -#define BOARD_BROWNLOUT_LEVEL (39) +#ifndef SAMD21_BOD33_LEVEL +// Set brownout detection to ~2.7V. Default from factory is 1.7V, +// which is too low for proper operation of external SPI flash chips +// (they are 2.7-3.6V). +#define SAMD21_BOD33_LEVEL (39) // 2.77V with hysteresis off. Table 37.20 in datasheet. #endif @@ -134,8 +137,11 @@ #define CIRCUITPY_DEFAULT_STACK_SIZE (24*1024) #endif -#ifndef BOARD_BROWNOUT_LEVEL ( -#define BOARD_BROWNLOUT_LEVEL (200) +#ifndef SAMD5x_E5x_BOD33_LEVEL +// Set brownout detection to ~2.7V. Default from factory is 1.7V, +// which is too low for proper operation of external SPI flash chips +// (they are 2.7-3.6V). +#define SAMD5x_E5x_BOD33_LEVEL (200) // 2.7V: 1.5V + LEVEL * 6mV. #endif diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index 5b085dc81b..65501861e0 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -206,11 +206,10 @@ static void rtc_init(void) { safe_mode_t port_init(void) { #if defined(SAMD21) - // Set brownout detection. Default from factory is 1.7V, - // which is too low for proper operation of external SPI flash chips (they are 2.7-3.6V). + // Set brownout detection. // Disable while changing level. SYSCTRL->BOD33.bit.ENABLE = 0; - SYSCTRL->BOD33.bit.LEVEL = BOARD_BROWNOUT_LEVEL; + SYSCTRL->BOD33.bit.LEVEL = SAMD21_BOD33_LEVEL; SYSCTRL->BOD33.bit.ENABLE = 1; #ifdef ENABLE_MICRO_TRACE_BUFFER @@ -225,11 +224,10 @@ safe_mode_t port_init(void) { #endif #if defined(SAM_D5X_E5X) - // Set brownout detection to ~2.7V. Default from factory is 1.7V, - // which is too low for proper operation of external SPI flash chips (they are 2.7-3.6V). + // Set brownout detection. // Disable while changing level. SUPC->BOD33.bit.ENABLE = 0; - SUPC->BOD33.bit.LEVEL = BOARD_BROWNOUT_LEVEL; + SUPC->BOD33.bit.LEVEL = SAMD5x_E5x_BOD33_LEVEL; SUPC->BOD33.bit.ENABLE = 1; // MPU (Memory Protection Unit) setup. From 678f26639433ebd26259a973aacd97e1cf765d2a Mon Sep 17 00:00:00 2001 From: Yihui Xiong Date: Thu, 9 Jul 2020 10:25:46 +0000 Subject: [PATCH 54/73] fix pre-commit check --- ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk | 1 - ports/nrf/boards/makerdiary_nrf52840_m2_devkit/pins.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk index 59eba13343..46f9885cb1 100644 --- a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk +++ b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk @@ -10,4 +10,3 @@ EXTERNAL_FLASH_DEVICE_COUNT = 1 EXTERNAL_FLASH_DEVICES = "MX25R6435F" CIRCUITPY_ENABLE_MPY_NATIVE = 1 - diff --git a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/pins.c b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/pins.c index 1032555dca..cb3bda35ab 100644 --- a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/pins.c +++ b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/pins.c @@ -103,7 +103,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, - + { MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)} }; From f1509debc3ae067f7ad7ba57a70e3235f4eeb564 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 7 Jul 2020 10:11:58 -0500 Subject: [PATCH 55/73] lib/mp3: update to 1.2.2 release This fixes the audio clipping bug --- lib/mp3 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mp3 b/lib/mp3 index c3c664bf4d..bc58a65496 160000 --- a/lib/mp3 +++ b/lib/mp3 @@ -1 +1 @@ -Subproject commit c3c664bf4db6a36d11808dfcbb5dbf7cff1715b8 +Subproject commit bc58a654964c799e972719a63ff12694998f3549 From a7634e8bf226e1caf965684767498ce1b74ac8e6 Mon Sep 17 00:00:00 2001 From: George Waters Date: Thu, 9 Jul 2020 15:13:48 -0400 Subject: [PATCH 56/73] Set version and release in build workflow --- .github/workflows/build.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fa7dd9dd25..463f1c680a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,7 +22,9 @@ jobs: fetch-depth: 0 - run: git fetch --recurse-submodules=no https://github.com/adafruit/circuitpython refs/tags/*:refs/tags/* - name: CircuitPython version - run: git describe --dirty --tags + run: | + git describe --dirty --tags + echo "::set-env name=CP_VERSION::$(git describe --dirty --tags)" - name: Set up Python 3.8 uses: actions/setup-python@v1 with: @@ -68,7 +70,7 @@ jobs: name: stubs path: circuitpython-stubs* - name: Docs - run: sphinx-build -E -W -b html . _build/html + run: sphinx-build -E -W -b html -D version=${{ env.CP_VERSION }} -D release=${{ env.CP_VERSION }} . _build/html - uses: actions/upload-artifact@v2 with: name: docs From 7ff499046ba6e15e115e5e3fca53204f1ec26cc3 Mon Sep 17 00:00:00 2001 From: Yihui Xiong Date: Sat, 11 Jul 2020 00:37:45 +0800 Subject: [PATCH 57/73] use VID & PIDs granted by Seeed --- ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk | 4 ++-- .../nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.mk | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk index 46f9885cb1..fc630e5bbe 100644 --- a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk +++ b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.mk @@ -1,5 +1,5 @@ -USB_VID = 0x1915 -USB_PID = 0xb001 +USB_VID = 0x2886 +USB_PID = 0xf002 USB_PRODUCT = "M60 Keyboard" USB_MANUFACTURER = "Makerdiary" diff --git a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.mk b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.mk index bc5fa3c120..4e6aebc8e8 100644 --- a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.mk +++ b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.mk @@ -1,5 +1,5 @@ -USB_VID = 0x1915 -USB_PID = 0xb001 +USB_VID = 0x2886 +USB_PID = 0xf001 USB_PRODUCT = "nRF52840 M.2 Developer Kit" USB_MANUFACTURER = "Makerdiary" From 742f9cfdb0d286b8c4e1a30be6ba407f6e8ed47d Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Thu, 2 Jul 2020 22:57:58 +0200 Subject: [PATCH 58/73] Fluff M0: additional pins on version 1.3 of the board --- ports/atmel-samd/boards/fluff_m0/pins.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ports/atmel-samd/boards/fluff_m0/pins.c b/ports/atmel-samd/boards/fluff_m0/pins.c index d80d46b895..ac7811328b 100644 --- a/ports/atmel-samd/boards/fluff_m0/pins.c +++ b/ports/atmel-samd/boards/fluff_m0/pins.c @@ -30,6 +30,8 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) }, { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) }, { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA17) }, + { MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_PA27) }, + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PA28) }, { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, From 734661e79cc2b108079377642ef24fab1217c484 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Fri, 10 Jul 2020 16:42:32 -0700 Subject: [PATCH 59/73] Add support to json.load for any object with readinto This way we don't need to load the whole string version of the json into memory. --- extmod/modujson.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/extmod/modujson.c b/extmod/modujson.c index 0f93ccb110..1e831783a8 100644 --- a/extmod/modujson.c +++ b/extmod/modujson.c @@ -26,6 +26,8 @@ #include +#include "py/binary.h" +#include "py/objarray.h" #include "py/objlist.h" #include "py/objstringio.h" #include "py/parsenum.h" @@ -74,6 +76,8 @@ typedef struct _ujson_stream_t { mp_obj_t stream_obj; mp_uint_t (*read)(mp_obj_t obj, void *buf, mp_uint_t size, int *errcode); int errcode; + mp_obj_t python_readinto[2 + 1]; + mp_obj_array_t bytearray_obj; byte cur; } ujson_stream_t; @@ -94,9 +98,37 @@ STATIC byte ujson_stream_next(ujson_stream_t *s) { return s->cur; } +STATIC mp_uint_t ujson_python_readinto(mp_obj_t obj, void *buf, mp_uint_t size, int *errcode) { + ujson_stream_t* s = obj; + s->bytearray_obj.items = buf; + s->bytearray_obj.len = size; + *errcode = 0; + mp_obj_t ret = mp_call_method_n_kw(1, 0, s->python_readinto); + if (ret == mp_const_none) { + *errcode = MP_EAGAIN; + return MP_STREAM_ERROR; + } + return mp_obj_get_int(ret); +} + STATIC mp_obj_t _mod_ujson_load(mp_obj_t stream_obj, bool return_first_json) { - const mp_stream_p_t *stream_p = mp_get_stream_raise(stream_obj, MP_STREAM_OP_READ); - ujson_stream_t s = {stream_obj, stream_p->read, 0, 0}; + const mp_stream_p_t *stream_p = mp_proto_get(MP_QSTR_protocol_stream, stream_obj); + ujson_stream_t s; + if (stream_p == NULL) { + mp_load_method(stream_obj, MP_QSTR_readinto, s.python_readinto); + s.bytearray_obj.base.type = &mp_type_bytearray; + s.bytearray_obj.typecode = BYTEARRAY_TYPECODE; + s.bytearray_obj.free = 0; + // len and items are set at read time + s.python_readinto[2] = MP_OBJ_FROM_PTR(&s.bytearray_obj); + s.stream_obj = &s; + s.read = ujson_python_readinto; + } else { + stream_p = mp_get_stream_raise(stream_obj, MP_STREAM_OP_READ); + s.stream_obj = stream_obj; + s.read = stream_p->read; + } + JSON_DEBUG("got JSON stream\n"); vstr_t vstr; vstr_init(&vstr, 8); From 372bcf8a956c8b20c423333114d7aa061dd54751 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Fri, 10 Jul 2020 17:33:17 -0700 Subject: [PATCH 60/73] Fix stream version and add basic readinto test --- extmod/modujson.c | 2 ++ tests/extmod/ujson_load_readinto.py | 22 ++++++++++++++++++++++ tests/extmod/ujson_load_readinto.py.exp | 4 ++++ 3 files changed, 28 insertions(+) create mode 100644 tests/extmod/ujson_load_readinto.py create mode 100644 tests/extmod/ujson_load_readinto.py.exp diff --git a/extmod/modujson.c b/extmod/modujson.c index 1e831783a8..242726cca0 100644 --- a/extmod/modujson.c +++ b/extmod/modujson.c @@ -127,6 +127,8 @@ STATIC mp_obj_t _mod_ujson_load(mp_obj_t stream_obj, bool return_first_json) { stream_p = mp_get_stream_raise(stream_obj, MP_STREAM_OP_READ); s.stream_obj = stream_obj; s.read = stream_p->read; + s.errcode = 0; + s.cur = 0; } JSON_DEBUG("got JSON stream\n"); diff --git a/tests/extmod/ujson_load_readinto.py b/tests/extmod/ujson_load_readinto.py new file mode 100644 index 0000000000..a277f40efc --- /dev/null +++ b/tests/extmod/ujson_load_readinto.py @@ -0,0 +1,22 @@ +import ujson as json + +# Test that json can load from any object with readinto + +class Buffer: + def __init__(self, data): + self._data = data + self._i = 0 + + def readinto(self, buf): + end = self._i + len(buf) + remaining = len(self._data) - self._i + end = min(end, len(self._data)) + l = min(len(buf), remaining) + buf[:l] = self._data[self._i:end] + self._i += l + return l + +print(json.load(Buffer(b'null'))) +print(json.load(Buffer(b'"abc\\u0064e"'))) +print(json.load(Buffer(b'[false, true, 1, -2]'))) +print(json.load(Buffer(b'{"a":true}'))) diff --git a/tests/extmod/ujson_load_readinto.py.exp b/tests/extmod/ujson_load_readinto.py.exp new file mode 100644 index 0000000000..f8c3c693be --- /dev/null +++ b/tests/extmod/ujson_load_readinto.py.exp @@ -0,0 +1,4 @@ +None +abcde +[False, True, 1, -2] +{'a': True} From 8e26fdc0e9537f30924581a846de77cfbb5b5fb7 Mon Sep 17 00:00:00 2001 From: Yihui Xiong Date: Sat, 11 Jul 2020 10:51:31 +0800 Subject: [PATCH 61/73] add LED status, remove unused macros --- ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h | 4 ++-- .../nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h index c59a5fdb28..bd9caf32fc 100644 --- a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h +++ b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h @@ -27,11 +27,11 @@ #include "nrfx/hal/nrf_gpio.h" -#define MAKERDIARYM60KEYBOARD - #define MICROPY_HW_BOARD_NAME "Makerdiary M60 Keyboard" #define MICROPY_HW_MCU_NAME "nRF52840" +#define MICROPY_HW_LED_STATUS (&pin_P0_30) + #define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(1, 10) #define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(1, 14) #define MICROPY_QSPI_DATA2 NRF_GPIO_PIN_MAP(1, 15) diff --git a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h index a3fb7643f9..8b8d6173a6 100644 --- a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h +++ b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h @@ -27,11 +27,11 @@ #include "nrfx/hal/nrf_gpio.h" -#define MAKERDIARYNRF52840M2DEVKIT - #define MICROPY_HW_BOARD_NAME "Makerdiary nRF52840 M.2 Developer Kit" #define MICROPY_HW_MCU_NAME "nRF52840" +#define MICROPY_HW_LED_STATUS (&pin_P0_30) + #define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(1, 10) #define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(1, 14) #define MICROPY_QSPI_DATA2 NRF_GPIO_PIN_MAP(1, 15) From c8752ff93eb62f115e9129f7b2d20d8ed5a8ed88 Mon Sep 17 00:00:00 2001 From: Yihui Xiong Date: Sat, 11 Jul 2020 21:25:32 +0800 Subject: [PATCH 62/73] use RGB LEDs as status indicators --- ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h | 4 +++- .../boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h index bd9caf32fc..086718089a 100644 --- a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h +++ b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h @@ -30,7 +30,9 @@ #define MICROPY_HW_BOARD_NAME "Makerdiary M60 Keyboard" #define MICROPY_HW_MCU_NAME "nRF52840" -#define MICROPY_HW_LED_STATUS (&pin_P0_30) +#define CP_RGB_STATUS_R (&pin_P0_30) +#define CP_RGB_STATUS_G (&pin_P0_29) +#define CP_RGB_STATUS_B (&pin_P0_31) #define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(1, 10) #define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(1, 14) diff --git a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h index 8b8d6173a6..dab2ff042b 100644 --- a/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h +++ b/ports/nrf/boards/makerdiary_nrf52840_m2_devkit/mpconfigboard.h @@ -30,7 +30,12 @@ #define MICROPY_HW_BOARD_NAME "Makerdiary nRF52840 M.2 Developer Kit" #define MICROPY_HW_MCU_NAME "nRF52840" -#define MICROPY_HW_LED_STATUS (&pin_P0_30) +#define MICROPY_HW_LED_STATUS (&pin_P1_07) + +#define CP_RGB_STATUS_INVERTED_PWM +#define CP_RGB_STATUS_R (&pin_P0_30) +#define CP_RGB_STATUS_G (&pin_P0_29) +#define CP_RGB_STATUS_B (&pin_P0_31) #define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(1, 10) #define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(1, 14) From 0354d4a2250eab3d9e7ef8599d322c394fb0690f Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 8 Jul 2020 20:32:36 +0200 Subject: [PATCH 63/73] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/ --- locale/ID.po | 9 +++++++-- locale/cs.po | 6 +++++- locale/de_DE.po | 6 +++++- locale/es.po | 6 +++++- locale/fil.po | 6 +++++- locale/fr.po | 6 +++++- locale/it_IT.po | 6 +++++- locale/ko.po | 6 +++++- locale/nl.po | 6 +++++- locale/pl.po | 6 +++++- locale/pt_BR.po | 6 +++++- locale/sv.po | 6 +++++- locale/zh_Latn_pinyin.po | 6 +++++- 13 files changed, 67 insertions(+), 14 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index aab5f82810..a72e63eec8 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2020-07-06 18:10+0000\n" "Last-Translator: oon arfiandwi \n" "Language-Team: LANGUAGE \n" @@ -824,7 +824,8 @@ msgstr "File sudah ada" #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "Frequency captured is above capability. Capture Paused." -msgstr "Frekuensi yang ditangkap berada di atas kemampuan. Penangkapan Ditunda." +msgstr "" +"Frekuensi yang ditangkap berada di atas kemampuan. Penangkapan Ditunda." #: ports/stm/common-hal/pulseio/PWMOut.c msgid "Frequency must match existing PWMOut using this timer" @@ -1116,6 +1117,10 @@ msgstr "" msgid "Must provide MISO or MOSI pin" msgstr "" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/cs.po b/locale/cs.po index dfe1cfa384..b6206da297 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2020-05-24 03:22+0000\n" "Last-Translator: dronecz \n" "Language-Team: LANGUAGE \n" @@ -1100,6 +1100,10 @@ msgstr "" msgid "Must provide MISO or MOSI pin" msgstr "" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/de_DE.po b/locale/de_DE.po index f2d9258566..72d0329487 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2020-06-16 18:24+0000\n" "Last-Translator: Andreas Buchen \n" "Language: de_DE\n" @@ -1119,6 +1119,10 @@ msgstr "Muss eine %q Unterklasse sein." msgid "Must provide MISO or MOSI pin" msgstr "Muss MISO- oder MOSI-Pin bereitstellen" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/es.po b/locale/es.po index 2778c53315..4f618c9d37 100644 --- a/locale/es.po +++ b/locale/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2020-07-07 15:59+0000\n" "Last-Translator: Alvaro Figueroa \n" "Language-Team: \n" @@ -1116,6 +1116,10 @@ msgstr "Debe de ser una subclase de %q" msgid "Must provide MISO or MOSI pin" msgstr "Debe proporcionar un pin MISO o MOSI" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/fil.po b/locale/fil.po index 3489316130..4738619fff 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2018-12-20 22:15-0800\n" "Last-Translator: Timothy \n" "Language-Team: fil\n" @@ -1108,6 +1108,10 @@ msgstr "" msgid "Must provide MISO or MOSI pin" msgstr "" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/fr.po b/locale/fr.po index 2db7f47222..c3aa827df6 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2020-06-05 17:29+0000\n" "Last-Translator: aberwag \n" "Language: fr\n" @@ -1121,6 +1121,10 @@ msgstr "Doit être une sous-classe de %q." msgid "Must provide MISO or MOSI pin" msgstr "Doit fournir une broche MISO ou MOSI" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/it_IT.po b/locale/it_IT.po index bd49e2388b..fd5d61a1a7 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2018-10-02 16:27+0200\n" "Last-Translator: Enrico Paganin \n" "Language-Team: \n" @@ -1112,6 +1112,10 @@ msgstr "" msgid "Must provide MISO or MOSI pin" msgstr "" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/ko.po b/locale/ko.po index 4bd56cde1e..975e1087df 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2019-05-06 14:22-0700\n" "Last-Translator: \n" "Language-Team: LANGUAGE \n" @@ -1096,6 +1096,10 @@ msgstr "" msgid "Must provide MISO or MOSI pin" msgstr "" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/nl.po b/locale/nl.po index 34e9c835a2..9810c471c0 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2020-07-02 20:42+0000\n" "Last-Translator: _fonzlate \n" "Language-Team: none\n" @@ -1112,6 +1112,10 @@ msgstr "%q moet een subklasse zijn." msgid "Must provide MISO or MOSI pin" msgstr "MISO of MOSI moeten worden gegeven" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/pl.po b/locale/pl.po index 7724481314..8fea2d8152 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2019-03-19 18:37-0700\n" "Last-Translator: Radomir Dopieralski \n" "Language-Team: pl\n" @@ -1097,6 +1097,10 @@ msgstr "" msgid "Must provide MISO or MOSI pin" msgstr "" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index f25d2d86e6..ace88d1e3b 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2020-07-03 22:53+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" @@ -1119,6 +1119,10 @@ msgstr "Deve ser uma subclasse %q." msgid "Must provide MISO or MOSI pin" msgstr "Deve informar os pinos MISO ou MOSI" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/sv.po b/locale/sv.po index 3ec91c19ee..299fc796f3 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2020-06-03 18:59+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" @@ -1111,6 +1111,10 @@ msgstr "Måste vara en %q-subklass." msgid "Must provide MISO or MOSI pin" msgstr "Måste ange MISO- eller MOSI-pinne" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index db41adb536..1928ff2b61 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: circuitpython-cn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-07-02 15:29+0200\n" +"POT-Creation-Date: 2020-07-07 14:38-0500\n" "PO-Revision-Date: 2019-04-13 10:10-0700\n" "Last-Translator: hexthat\n" "Language-Team: Chinese Hanyu Pinyin\n" @@ -1105,6 +1105,10 @@ msgstr "Bìxū shì %q zi lèi." msgid "Must provide MISO or MOSI pin" msgstr "Bìxū tígōng MISO huò MOSI yǐn jiǎo" +#: ports/stm/common-hal/busio/SPI.c +msgid "Must provide SCK pin" +msgstr "" + #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format msgid "Must use a multiple of 6 rgb pins, not %d" From 9f81922be38c1a28dce54bcb0612175513fc15ce Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Wed, 8 Jul 2020 18:40:31 +0000 Subject: [PATCH 64/73] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (779 of 779 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/pt_BR/ --- locale/pt_BR.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/pt_BR.po b/locale/pt_BR.po index ace88d1e3b..da57f725de 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-07 14:38-0500\n" -"PO-Revision-Date: 2020-07-03 22:53+0000\n" +"PO-Revision-Date: 2020-07-09 17:23+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -1121,7 +1121,7 @@ msgstr "Deve informar os pinos MISO ou MOSI" #: ports/stm/common-hal/busio/SPI.c msgid "Must provide SCK pin" -msgstr "" +msgstr "É obrigatório informar o pino SCK" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format From 8e7dab34c251ee5df3e26d453dfd6782f32d7789 Mon Sep 17 00:00:00 2001 From: Alvaro Figueroa Date: Thu, 9 Jul 2020 19:37:05 +0000 Subject: [PATCH 65/73] Translated using Weblate (Spanish) Currently translated at 99.8% (778 of 779 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/es/ --- locale/es.po | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/locale/es.po b/locale/es.po index 4f618c9d37..bfa2c21cc2 100644 --- a/locale/es.po +++ b/locale/es.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-07 14:38-0500\n" -"PO-Revision-Date: 2020-07-07 15:59+0000\n" +"PO-Revision-Date: 2020-07-10 18:15+0000\n" "Last-Translator: Alvaro Figueroa \n" "Language-Team: \n" "Language: es\n" @@ -576,7 +576,7 @@ msgstr "Iniciado de pin de reloj fallido." #: shared-module/bitbangio/I2C.c msgid "Clock stretch too long" -msgstr "Clock stretch demasiado largo " +msgstr "Estirado de reloj demasiado largo" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c msgid "Clock unit in use" @@ -692,7 +692,7 @@ msgstr "Trozo de datos debe seguir fmt chunk" #: ports/nrf/common-hal/_bleio/Adapter.c msgid "Data too large for advertisement packet" -msgstr "Data es muy grande para el paquete de advertisement." +msgstr "Data es muy grande para el paquete de anuncio" #: shared-bindings/audiobusio/PDMIn.c msgid "Destination capacity is smaller than destination_length." @@ -746,7 +746,7 @@ msgstr "Se espera un %q" #: shared-bindings/_bleio/CharacteristicBuffer.c #: shared-bindings/_bleio/Descriptor.c shared-bindings/_bleio/PacketBuffer.c msgid "Expected a Characteristic" -msgstr "Se esperaba una Característica." +msgstr "Se esperaba una Característica" #: shared-bindings/_bleio/Characteristic.c msgid "Expected a Service" @@ -776,7 +776,7 @@ msgstr "FFT se define solo para ndarrays" #: shared-bindings/ps2io/Ps2.c msgid "Failed sending command." -msgstr "Fallo enviando comando" +msgstr "Fallo enviando comando." #: ports/nrf/sd_mutex.c #, c-format @@ -873,7 +873,7 @@ msgid "" "mpy-update for more info." msgstr "" "Archivo .mpy incompatible. Actualice todos los archivos .mpy. Consulte " -"http://adafru.it/mpy-update para más información" +"http://adafru.it/mpy-update para más información." #: shared-bindings/_pew/PewPew.c msgid "Incorrect buffer size" @@ -981,7 +981,7 @@ msgstr "Frecuencia suministrada no válida" #: supervisor/shared/safe_mode.c msgid "Invalid memory access." -msgstr "Acceso a memoria no válido" +msgstr "Acceso a memoria no válido." #: shared-bindings/bitbangio/SPI.c shared-bindings/busio/SPI.c msgid "Invalid number of bits" @@ -1065,7 +1065,7 @@ msgstr "LHS del agumento por palabra clave deberia ser un identificador" #: shared-module/displayio/Group.c msgid "Layer already in a group." -msgstr "Layer ya pertenece a un grupo" +msgstr "La capa ya pertenece a un grupo." #: shared-module/displayio/Group.c msgid "Layer must be a Group or TileGrid subclass." @@ -1110,7 +1110,7 @@ msgstr "Falta el pin MISO o MOSI" #: shared-bindings/displayio/Group.c msgid "Must be a %q subclass." -msgstr "Debe de ser una subclase de %q" +msgstr "Debe de ser una subclase de %q." #: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/SPI.c msgid "Must provide MISO or MOSI pin" @@ -1118,7 +1118,7 @@ msgstr "Debe proporcionar un pin MISO o MOSI" #: ports/stm/common-hal/busio/SPI.c msgid "Must provide SCK pin" -msgstr "" +msgstr "Debes proveer un pin para SCK" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format @@ -1239,7 +1239,7 @@ msgid "" "Object has been deinitialized and can no longer be used. Create a new object." msgstr "" "El objeto se ha desinicializado y ya no se puede utilizar. Crea un nuevo " -"objeto" +"objeto." #: ports/nrf/common-hal/busio/UART.c msgid "Odd parity is not supported" @@ -1268,7 +1268,7 @@ msgstr "" #: shared-bindings/audiobusio/PDMIn.c msgid "Oversample must be multiple of 8." -msgstr "El sobremuestreo debe ser un múltiplo de 8" +msgstr "El sobremuestreo debe ser un múltiplo de 8." #: shared-bindings/pulseio/PWMOut.c msgid "" @@ -1279,8 +1279,8 @@ msgstr "PWM duty_cycle debe ser entre 0 y 65535 inclusivo (16 bit resolution)" msgid "" "PWM frequency not writable when variable_frequency is False on construction." msgstr "" -"PWM frecuencia no esta escrito cuando el variable_frequency es falso en " -"construcion" +"La frecuencia de PWM no se puede escribir variable_frequency es False en la " +"construcción." #: ports/mimxrt10xx/common-hal/displayio/ParallelBus.c #: ports/stm/common-hal/displayio/ParallelBus.c @@ -1465,7 +1465,7 @@ msgstr "Serializer está siendo utilizado" #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." -msgstr "Slice y value tienen diferentes longitudes" +msgstr "Slice y value tienen tamaños diferentes." #: shared-bindings/displayio/Bitmap.c shared-bindings/displayio/Group.c #: shared-bindings/displayio/TileGrid.c shared-bindings/pulseio/PulseIn.c @@ -1657,7 +1657,7 @@ msgstr "No se pudo leer los datos de la paleta de colores" #: shared-bindings/nvm/ByteArray.c msgid "Unable to write to nvm." -msgstr "Imposible escribir en nvm" +msgstr "Imposible escribir en nvm." #: ports/nrf/common-hal/_bleio/UUID.c msgid "Unexpected nrfx uuid type" @@ -2280,9 +2280,9 @@ msgid "end_x should be an int" msgstr "end_x debe ser un int" #: ports/nrf/common-hal/busio/UART.c -#, c-format +#, c-format, fuzzy msgid "error = 0x%08lX" -msgstr "error = 0x%08lx" +msgstr "error = 0x%08lX" #: py/runtime.c msgid "exceptions must derive from BaseException" From 7b31ededcd066e9eb7222a5f644ee9d521e14d7c Mon Sep 17 00:00:00 2001 From: Jonny Bergdahl Date: Mon, 13 Jul 2020 17:00:41 +0000 Subject: [PATCH 66/73] Translated using Weblate (Swedish) Currently translated at 100.0% (779 of 779 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/sv/ --- locale/sv.po | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/locale/sv.po b/locale/sv.po index 299fc796f3..1ea1bb1de5 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-07 14:38-0500\n" -"PO-Revision-Date: 2020-06-03 18:59+0000\n" +"PO-Revision-Date: 2020-07-13 17:39+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" "Language: sv\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.1-dev\n" +"X-Generator: Weblate 4.2-dev\n" #: main.c msgid "" @@ -68,7 +68,7 @@ msgstr "%d adresspinnar och %d RGB-pinnar indikerar en höjd av %d, inte %d" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q failure: %d" -msgstr "" +msgstr "%q-fel: %d" #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -99,7 +99,7 @@ msgstr "%q måste vara en tuple av längd 2" #: ports/atmel-samd/common-hal/sdioio/SDCard.c msgid "%q pin invalid" -msgstr "" +msgstr "Pinne %q ogiltig" #: shared-bindings/fontio/BuiltinFont.c msgid "%q should be an int" @@ -438,7 +438,7 @@ msgstr "Buffertlängd %d för stor. Den måste vara mindre än %d" #: ports/atmel-samd/common-hal/sdioio/SDCard.c #: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c msgid "Buffer length must be a multiple of 512" -msgstr "" +msgstr "Buffertlängd måste vara en multipel av 512" #: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c msgid "Buffer must be at least length 1" @@ -604,11 +604,11 @@ msgstr "Korrupt rå kod" #: ports/cxd56/common-hal/gnss/GNSS.c msgid "Could not initialize GNSS" -msgstr "" +msgstr "Kan inte initiera GNSS" #: ports/cxd56/common-hal/sdioio/SDCard.c msgid "Could not initialize SDCard" -msgstr "" +msgstr "Kan inte initiera SD-kort" #: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c msgid "Could not initialize UART" @@ -896,7 +896,7 @@ msgstr "Internt fel #%d" #: shared-bindings/sdioio/SDCard.c msgid "Invalid %q" -msgstr "" +msgstr "Ogiltig %q" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c @@ -1113,7 +1113,7 @@ msgstr "Måste ange MISO- eller MOSI-pinne" #: ports/stm/common-hal/busio/SPI.c msgid "Must provide SCK pin" -msgstr "" +msgstr "Måste ange SCK-pinne" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format @@ -1417,7 +1417,7 @@ msgstr "Kör i säkert läge! Sparad kod körs inte.\n" #: shared-module/sdcardio/SDCard.c msgid "SD card CSD format not supported" -msgstr "" +msgstr "SD-kort CSD-format stöds inte" #: ports/atmel-samd/common-hal/busio/I2C.c #: ports/mimxrt10xx/common-hal/busio/I2C.c ports/nrf/common-hal/busio/I2C.c @@ -1489,7 +1489,7 @@ msgstr "Ange minst en UART-pinne" #: shared-bindings/gnss/GNSS.c msgid "System entry must be gnss.SatelliteSystem" -msgstr "" +msgstr "Systeminträdet måste vara gnss. SatellitSystem" #: ports/stm/common-hal/microcontroller/Processor.c msgid "Temperature read timed out" @@ -2058,7 +2058,7 @@ msgstr "kan inte skicka icke-None värde till nystartad generator" #: shared-module/sdcardio/SDCard.c msgid "can't set 512 block size" -msgstr "" +msgstr "kan inte sätta blockstorlek 512" #: py/objnamedtuple.c msgid "can't set attribute" @@ -2190,7 +2190,7 @@ msgstr "kan inte invertera Vandermonde-matris" #: shared-module/sdcardio/SDCard.c msgid "couldn't determine SD card version" -msgstr "" +msgstr "kan inte avgöra SD-kortversion" #: extmod/ulab/code/approx.c msgid "data must be iterable" @@ -2757,7 +2757,7 @@ msgstr "negativt skiftantal" #: shared-module/sdcardio/SDCard.c msgid "no SD card" -msgstr "" +msgstr "inget SD-kort" #: py/vm.c msgid "no active exception to reraise" @@ -2782,7 +2782,7 @@ msgstr "ingen reset-pinne tillgänglig" #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" -msgstr "" +msgstr "inget svar från SD-kort" #: py/runtime.c msgid "no such attribute" @@ -3078,15 +3078,15 @@ msgstr "värdet för sleep måste vara positivt" #: extmod/ulab/code/ndarray.c msgid "slice step can't be zero" -msgstr "" +msgstr "segmentsteg kan inte vara noll" #: py/objslice.c py/sequence.c msgid "slice step cannot be zero" -msgstr "segmentsteg får inte vara noll" +msgstr "segmentsteg kan inte vara noll" #: py/objint.c py/sequence.c msgid "small int overflow" -msgstr "värdet för konvertering till small int överskreds" +msgstr "värdet för small int överskreds" #: main.c msgid "soft reboot\n" @@ -3098,15 +3098,15 @@ msgstr "argumentet sort måste vara en ndarray" #: extmod/ulab/code/filter.c msgid "sos array must be of shape (n_section, 6)" -msgstr "" +msgstr "sos array måste ha form (n_section, 6)" #: extmod/ulab/code/filter.c msgid "sos[:, 3] should be all ones" -msgstr "" +msgstr "sos[:, 3] måste vara ettor" #: extmod/ulab/code/filter.c msgid "sosfilt requires iterable arguments" -msgstr "" +msgstr "sosfilt kräver iterable argument" #: py/objstr.c msgid "start/end indices" @@ -3195,11 +3195,11 @@ msgstr "timeout måste vara >= 0.0" #: shared-module/sdcardio/SDCard.c msgid "timeout waiting for v1 card" -msgstr "" +msgstr "timeout för v1-kort" #: shared-module/sdcardio/SDCard.c msgid "timeout waiting for v2 card" -msgstr "" +msgstr "timeout för v2-kort" #: shared-bindings/time/__init__.c msgid "timestamp out of range for platform time_t" @@ -3400,15 +3400,15 @@ msgstr "noll steg" #: extmod/ulab/code/filter.c msgid "zi must be an ndarray" -msgstr "" +msgstr "zi måste vara en ndarray" #: extmod/ulab/code/filter.c msgid "zi must be of float type" -msgstr "" +msgstr "zi måste vara av typ float" #: extmod/ulab/code/filter.c msgid "zi must be of shape (n_section, 2)" -msgstr "" +msgstr "zi måste vara i formen (n_section, 2)" #~ msgid "I2C operation not supported" #~ msgstr "I2C-åtgärd stöds inte" From f1b3c88d6e2f29b94c69aa5e23c269b7f31f769f Mon Sep 17 00:00:00 2001 From: _fonzlate Date: Mon, 13 Jul 2020 17:26:13 +0000 Subject: [PATCH 67/73] Translated using Weblate (Dutch) Currently translated at 100.0% (779 of 779 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/nl/ --- locale/nl.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/nl.po b/locale/nl.po index 9810c471c0..44d829041d 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-07 14:38-0500\n" -"PO-Revision-Date: 2020-07-02 20:42+0000\n" +"PO-Revision-Date: 2020-07-13 17:39+0000\n" "Last-Translator: _fonzlate \n" "Language-Team: none\n" "Language: nl\n" @@ -1114,7 +1114,7 @@ msgstr "MISO of MOSI moeten worden gegeven" #: ports/stm/common-hal/busio/SPI.c msgid "Must provide SCK pin" -msgstr "" +msgstr "SCK pin moet opgegeven worden" #: shared-bindings/rgbmatrix/RGBMatrix.c #, c-format From 0ab2c7b10a68977b750b5ccd8b7475ad2162085d Mon Sep 17 00:00:00 2001 From: Alvaro Figueroa Date: Mon, 13 Jul 2020 18:15:53 +0000 Subject: [PATCH 68/73] Translated using Weblate (Spanish) Currently translated at 100.0% (779 of 779 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/es/ --- locale/es.po | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/locale/es.po b/locale/es.po index bfa2c21cc2..38c6ecf7ee 100644 --- a/locale/es.po +++ b/locale/es.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-07-07 14:38-0500\n" -"PO-Revision-Date: 2020-07-10 18:15+0000\n" +"PO-Revision-Date: 2020-07-13 19:24+0000\n" "Last-Translator: Alvaro Figueroa \n" "Language-Team: \n" "Language: es\n" @@ -536,7 +536,7 @@ msgstr "No se puede especificar RTS o CTS en modo RS485" #: py/objslice.c msgid "Cannot subclass slice" -msgstr "Cannot subclass slice" +msgstr "No se puede manejar la partición en una subclase" #: shared-module/bitbangio/SPI.c msgid "Cannot transfer without MOSI and MISO pins." @@ -1279,7 +1279,7 @@ msgstr "PWM duty_cycle debe ser entre 0 y 65535 inclusivo (16 bit resolution)" msgid "" "PWM frequency not writable when variable_frequency is False on construction." msgstr "" -"La frecuencia de PWM no se puede escribir variable_frequency es False en la " +"La frecuencia de PWM no se puede escribir variable_frequency es False en la " "construcción." #: ports/mimxrt10xx/common-hal/displayio/ParallelBus.c @@ -1685,7 +1685,7 @@ msgstr "Error suave desconocido en dispositivo: %04x" #: shared-bindings/_pixelbuf/PixelBuf.c #, c-format msgid "Unmatched number of items on RHS (expected %d, got %d)." -msgstr "Número incomparable de elementos en RHS (%d esperado,%d obtenido)" +msgstr "Número incomparable de elementos en RHS (%d esperado,%d obtenido)." #: ports/nrf/common-hal/_bleio/__init__.c msgid "" @@ -1728,7 +1728,7 @@ msgstr "Tamaño de valor > max_length" #: py/emitnative.c msgid "Viper functions don't currently support more than 4 arguments" -msgstr "funciones Viper actualmente no soportan más de 4 argumentos." +msgstr "funciones Viper no soportan por el momento, más de 4 argumentos" #: ports/stm/common-hal/microcontroller/Processor.c msgid "Voltage read timed out" @@ -2280,7 +2280,7 @@ msgid "end_x should be an int" msgstr "end_x debe ser un int" #: ports/nrf/common-hal/busio/UART.c -#, c-format, fuzzy +#, c-format msgid "error = 0x%08lX" msgstr "error = 0x%08lX" @@ -2439,7 +2439,7 @@ msgstr "la función toma %d argumentos posicionales pero le fueron dados %d" #: shared-bindings/time/__init__.c msgid "function takes exactly 9 arguments" -msgstr "la función toma exactamente 9 argumentos." +msgstr "la función toma exactamente 9 argumentos" #: py/objgenerator.c msgid "generator already executing" From a2233ced87700e50fb70c124d0f42eefb4c0c487 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 14 Jul 2020 01:28:58 +0200 Subject: [PATCH 69/73] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/ --- locale/ID.po | 1 - locale/cs.po | 1 - locale/de_DE.po | 1 - locale/es.po | 1 - locale/fil.po | 1 - locale/fr.po | 1 - locale/it_IT.po | 1 - locale/ko.po | 1 - locale/nl.po | 1 - locale/pl.po | 1 - locale/pt_BR.po | 1 - locale/sv.po | 1 - locale/zh_Latn_pinyin.po | 1 - 13 files changed, 13 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index edca87f830..9e10156e6a 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -1,7 +1,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/cs.po b/locale/cs.po index cfd0038f00..d09cf1e94b 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -1,7 +1,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/de_DE.po b/locale/de_DE.po index 041b1ae510..1e168db528 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -1,7 +1,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: \n" diff --git a/locale/es.po b/locale/es.po index 6245c70686..0dd09a98df 100644 --- a/locale/es.po +++ b/locale/es.po @@ -4,7 +4,6 @@ # # SPDX-License-Identifier: MIT #, fuzzy - msgid "" msgstr "" "Project-Id-Version: \n" diff --git a/locale/fil.po b/locale/fil.po index 2b2ade0316..1297ce186d 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -1,7 +1,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: \n" diff --git a/locale/fr.po b/locale/fr.po index 58714abbf0..4582974d45 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -3,7 +3,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: 0.1\n" diff --git a/locale/it_IT.po b/locale/it_IT.po index df3000a47a..2358433825 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -2,7 +2,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/ko.po b/locale/ko.po index 17bcd9837d..6829f6819f 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -2,7 +2,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/nl.po b/locale/nl.po index 6d08b44966..d39d0bb189 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -1,7 +1,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/pl.po b/locale/pl.po index 966b65965a..e8b7298a2a 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -2,7 +2,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: \n" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index c9cd065427..024608b3db 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -1,7 +1,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/sv.po b/locale/sv.po index 4973cf52a0..b588cbea7e 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -1,7 +1,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 64af0c2db8..0f6d55fd16 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -2,7 +2,6 @@ # SPDX-FileCopyrightText: 2014 MicroPython & CircuitPython contributors (https://github.com/adafruit/circuitpython/graphs/contributors) # # SPDX-License-Identifier: MIT - msgid "" msgstr "" "Project-Id-Version: circuitpython-cn\n" From 910f69c42b1852bcbde4c4fb24ea50939ec25fac Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 15 Jul 2020 10:12:27 -0500 Subject: [PATCH 70/73] esp32s2: Take care to invoke the sub-build-system only once This allows "make -j" in the outer build system to function properly, with a potentially large decrease in build times on high end desktop systems. --- ports/esp32s2/Makefile | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/ports/esp32s2/Makefile b/ports/esp32s2/Makefile index b296976885..29abcab8e3 100644 --- a/ports/esp32s2/Makefile +++ b/ports/esp32s2/Makefile @@ -217,8 +217,8 @@ $(BUILD)/esp-idf/config/sdkconfig.h: boards/$(BOARD)/sdkconfig | $(BUILD)/esp-id # build a lib # Adding -d explain -j 1 -v to the ninja line will output debug info -$(BUILD)/esp-idf/esp-idf/%.a: $(BUILD)/esp-idf/config/sdkconfig.h - ninja -C $(BUILD)/esp-idf esp-idf/$*.a +#$(BUILD)/esp-idf/esp-idf/%.a: $(BUILD)/esp-idf/config/sdkconfig.h +# ninja -C $(BUILD)/esp-idf esp-idf/$*.a $(BUILD)/esp-idf/esp-idf/esp32s2/esp32s2_out.ld: $(BUILD)/esp-idf/config/sdkconfig.h ninja -C $(BUILD)/esp-idf esp-idf/esp32s2/esp32s2_out.ld @@ -230,9 +230,6 @@ $(BUILD)/esp-idf/esp-idf/esp32s2/ld/esp32s2.project.ld: $(BUILD)/esp-idf/config/ $(BUILD)/esp-idf/partition_table/partition-table.bin: $(BUILD)/esp-idf/config/sdkconfig.h IDF_PATH=$(IDF_PATH) ninja -C $(BUILD)/esp-idf partition_table/partition-table.bin -$(BUILD)/esp-idf/bootloader/bootloader.bin: $(BUILD)/esp-idf/config/sdkconfig.h - ninja -C $(BUILD)/esp-idf bootloader/bootloader.bin - # run menuconfig menuconfig: $(BUILD)/esp-idf/config ninja -C $(BUILD)/esp-idf menuconfig @@ -260,7 +257,18 @@ FLASH_FLAGS = --flash_mode $(CIRCUITPY_ESP_FLASH_MODE) --flash_freq $(CIRCUITPY_ all: $(BUILD)/firmware.bin $(BUILD)/firmware.uf2 -$(BUILD)/firmware.elf: $(OBJ) | $(ESP_IDF_COMPONENTS_EXPANDED) $(ESP_AUTOGEN_LD) +.PHONY: esp-idf-stamp +esp-idf-stamp: $(BUILD)/esp-idf/config/sdkconfig.h + ninja -C $(BUILD)/esp-idf \ + bootloader/bootloader.bin \ + esp-idf/bootloader_support/libbootloader_support.a \ + esp-idf/esp32s2/ld/esp32s2.project.ld \ + esp-idf/esp_system/libesp_system.a \ + esp-idf/freertos/libfreertos.a \ + esp-idf/log/liblog.a \ + esp-idf/xtensa/libxtensa.a + +$(BUILD)/firmware.elf: $(OBJ) | esp-idf-stamp $(STEPECHO) "LINK $@" $(Q)$(CC) -o $@ $(LDFLAGS) $^ $(ESP_IDF_COMPONENTS_EXPANDED) $(BINARY_BLOBS) build-$(BOARD)/esp-idf/esp-idf/newlib/libnewlib.a -u newlib_include_pthread_impl # $(Q)$(SIZE) $@ | $(PYTHON3) $(TOP)/tools/build_memory_info.py $(BUILD)/esp-idf/esp-idf/esp32s2/esp32s2_out.ld @@ -271,7 +279,7 @@ $(BUILD)/circuitpython-firmware.bin: $(BUILD)/firmware.elf # $(Q)$(OBJCOPY) -O binary $^ $@ # $(Q)$(OBJCOPY) -O binary -j .vectors -j .text -j .data $^ $@ -$(BUILD)/firmware.bin: $(BUILD)/esp-idf/partition_table/partition-table.bin $(BUILD)/esp-idf/bootloader/bootloader.bin $(BUILD)/circuitpython-firmware.bin +$(BUILD)/firmware.bin: $(BUILD)/circuitpython-firmware.bin | esp-idf-stamp $(Q)$(PYTHON) ../../tools/join_bins.py $@ 0x1000 $(BUILD)/esp-idf/bootloader/bootloader.bin 0x8000 $(BUILD)/esp-idf/partition_table/partition-table.bin 0x10000 $(BUILD)/circuitpython-firmware.bin $(BUILD)/firmware.uf2: $(BUILD)/circuitpython-firmware.bin From a2919a6fb2c433cafa5c528ee03ee9c86efb93d8 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 15 Jul 2020 11:45:13 -0500 Subject: [PATCH 71/73] esp32s2: Use the device's EUI-48 address as unique ID On my hardware, esptool reports MAC: 7c:df:a1:02:6c:b8 after this change, the USB descriptor says SerialNumber: 7CDFA1026CB8 and microcontroller.cpu.id has >>> "".join("%02x" % byte for byte in microcontroller.cpu.uid) 'c7fd1a20c68b' Note that the nibble-swapping between USB and cpu.uid is typical. For instance, an stm32 board has USB SerialNumber 24002500F005D42445632302 but hex-converted microcontroller.cpu.id 420052000f504d4254363220. --- .../common-hal/microcontroller/Processor.c | 24 ++++++++++++++++++- .../common-hal/microcontroller/Processor.h | 2 +- ports/esp32s2/mpconfigport.mk | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ports/esp32s2/common-hal/microcontroller/Processor.c b/ports/esp32s2/common-hal/microcontroller/Processor.c index 8eaf1a33d2..39b85a18b8 100644 --- a/ports/esp32s2/common-hal/microcontroller/Processor.c +++ b/ports/esp32s2/common-hal/microcontroller/Processor.c @@ -26,10 +26,14 @@ */ #include +#include + #include "common-hal/microcontroller/Processor.h" #include "py/runtime.h" #include "supervisor/shared/translate.h" +#include "soc/efuse_reg.h" + float common_hal_mcu_processor_get_temperature(void) { return NAN; } @@ -42,5 +46,23 @@ uint32_t common_hal_mcu_processor_get_frequency(void) { return 0; } -void common_hal_mcu_processor_get_uid(uint8_t raw_id[]) { +STATIC uint8_t swap_nibbles(uint8_t v) { + return ((v << 4) | (v >> 4)) & 0xff; +} + +void common_hal_mcu_processor_get_uid(uint8_t raw_id[]) { + memset(raw_id, 0, COMMON_HAL_MCU_PROCESSOR_UID_LENGTH); + + uint8_t *ptr = &raw_id[COMMON_HAL_MCU_PROCESSOR_UID_LENGTH-1]; + // MAC address contains 48 bits (6 bytes), 32 in the low order word + uint32_t mac_address_part = REG_READ(EFUSE_RD_MAC_SPI_SYS_0_REG); + *ptr-- = swap_nibbles(mac_address_part & 0xff); mac_address_part >>= 8; + *ptr-- = swap_nibbles(mac_address_part & 0xff); mac_address_part >>= 8; + *ptr-- = swap_nibbles(mac_address_part & 0xff); mac_address_part >>= 8; + *ptr-- = swap_nibbles(mac_address_part & 0xff); + + // and 16 in the high order word + mac_address_part = REG_READ(EFUSE_RD_MAC_SPI_SYS_1_REG); + *ptr-- = swap_nibbles(mac_address_part & 0xff); mac_address_part >>= 8; + *ptr-- = swap_nibbles(mac_address_part & 0xff); } diff --git a/ports/esp32s2/common-hal/microcontroller/Processor.h b/ports/esp32s2/common-hal/microcontroller/Processor.h index a2ea261c8f..f6636b333c 100644 --- a/ports/esp32s2/common-hal/microcontroller/Processor.h +++ b/ports/esp32s2/common-hal/microcontroller/Processor.h @@ -27,7 +27,7 @@ #ifndef MICROPY_INCLUDED_LITEX_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H #define MICROPY_INCLUDED_LITEX_COMMON_HAL_MICROCONTROLLER_PROCESSOR_H -#define COMMON_HAL_MCU_PROCESSOR_UID_LENGTH 15 +#define COMMON_HAL_MCU_PROCESSOR_UID_LENGTH 6 #include "py/obj.h" diff --git a/ports/esp32s2/mpconfigport.mk b/ports/esp32s2/mpconfigport.mk index 5686579b45..713ccbb094 100644 --- a/ports/esp32s2/mpconfigport.mk +++ b/ports/esp32s2/mpconfigport.mk @@ -7,7 +7,7 @@ MPY_TOOL_LONGINT_IMPL = -mlongint-impl=mpz INTERNAL_LIBM = 1 # Chip supplied serial number, in bytes -USB_SERIAL_NUMBER_LENGTH = 30 +USB_SERIAL_NUMBER_LENGTH = 12 # Longints can be implemented as mpz, as longlong, or not LONGINT_IMPL = MPZ From 49fcfd14d213cb6f6441fc718ff8fc8e7a5cc5fa Mon Sep 17 00:00:00 2001 From: TinkeringTech Date: Wed, 15 Jul 2020 21:49:34 -0400 Subject: [PATCH 72/73] Added the TinkeringTech ScoutMakes Azul platform to CircuitPython --- .github/workflows/build.yml | 1 + .../tinkeringtech_scoutmakes_azul/README.md | 25 ++++++++ .../tinkeringtech_scoutmakes_azul/board.c | 38 +++++++++++ .../mpconfigboard.h | 63 +++++++++++++++++++ .../mpconfigboard.mk | 10 +++ .../tinkeringtech_scoutmakes_azul/pins.c | 53 ++++++++++++++++ 6 files changed, 190 insertions(+) create mode 100644 ports/nrf/boards/tinkeringtech_scoutmakes_azul/README.md create mode 100644 ports/nrf/boards/tinkeringtech_scoutmakes_azul/board.c create mode 100644 ports/nrf/boards/tinkeringtech_scoutmakes_azul/mpconfigboard.h create mode 100644 ports/nrf/boards/tinkeringtech_scoutmakes_azul/mpconfigboard.mk create mode 100644 ports/nrf/boards/tinkeringtech_scoutmakes_azul/pins.c diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 00454cc2da..3ad11b3ed7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -259,6 +259,7 @@ jobs: - "teensy41" - "teknikio_bluebird" - "thunderpack" + - "tinkeringtech_scoutmakes_azul" - "trellis_m4_express" - "trinket_m0" - "trinket_m0_haxpress" diff --git a/ports/nrf/boards/tinkeringtech_scoutmakes_azul/README.md b/ports/nrf/boards/tinkeringtech_scoutmakes_azul/README.md new file mode 100644 index 0000000000..614daa72cc --- /dev/null +++ b/ports/nrf/boards/tinkeringtech_scoutmakes_azul/README.md @@ -0,0 +1,25 @@ +# Setup + +The TinkeringTech ScoutMakes Azul is a bluetooth enabled, feather format, open source platform featuring the nRF52840 from Nordic Semiconductors. The design is based on the Adafruit nRF52840 feather express and uses the Raytac MDBT50Q-1MV2 module. + +Schematic, datasheet, pin mapping etc. can be found over [here](https://tinkeringtech.com/scoutmakes-azul). + +features: +- ARM Cortex M4F (with HW floating point acceleration) running at 64MHz +- Raytac MDBT50Q-1MV2 BLE module. FCC / IC / TELEC certified module +- 1MB flash and 256KB SRAM +- Native Open Source USB stack – pre-programmed with UF2 bootloader and CircuitPython +- 128×32 OLED display +- USB type-C +- On/off power switch +- Bluetooth Low Energy compatible 2.4GHz radio (Details available in the nRF52840 product specification) +- BT5.1 & BT5 Bluetooth Specification Certified +- Supports BT5 Long Range Feature +- 1.7v to 3.3v operation with internal linear and DC/DC voltage regulators +- 21 GPIO, 6 x 12-bit ADC pins, up to 12 PWM outputs (3 PWM modules with 4 outputs each) +- Pin #3 red LED for general purpose blinking, +- Programmable NeoPixel for colorful feedback +- 4 mounting holes +- Reset button +- Works out of the box with Adafruit feather wings. +- Open source design. diff --git a/ports/nrf/boards/tinkeringtech_scoutmakes_azul/board.c b/ports/nrf/boards/tinkeringtech_scoutmakes_azul/board.c new file mode 100644 index 0000000000..4421970eef --- /dev/null +++ b/ports/nrf/boards/tinkeringtech_scoutmakes_azul/board.c @@ -0,0 +1,38 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 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 "boards/board.h" + +void board_init(void) { +} + +bool board_requests_safe_mode(void) { + return false; +} + +void reset_board(void) { + +} diff --git a/ports/nrf/boards/tinkeringtech_scoutmakes_azul/mpconfigboard.h b/ports/nrf/boards/tinkeringtech_scoutmakes_azul/mpconfigboard.h new file mode 100644 index 0000000000..2d66633942 --- /dev/null +++ b/ports/nrf/boards/tinkeringtech_scoutmakes_azul/mpconfigboard.h @@ -0,0 +1,63 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2016 Glenn Ruben Bakke + * Copyright (c) 2018 Dan Halbert 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 "nrfx/hal/nrf_gpio.h" + +#define MICROPY_HW_BOARD_NAME "TinkeringTech ScoutMakes Azul" +#define MICROPY_HW_MCU_NAME "nRF52840" + +#define MICROPY_HW_NEOPIXEL (&pin_P0_16) + +#define MICROPY_HW_LED_STATUS (&pin_P1_15) + +#if QSPI_FLASH_FILESYSTEM +#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(0, 17) +#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(0, 22) +#define MICROPY_QSPI_DATA2 NRF_GPIO_PIN_MAP(0, 23) +#define MICROPY_QSPI_DATA3 NRF_GPIO_PIN_MAP(0, 21) +#define MICROPY_QSPI_SCK NRF_GPIO_PIN_MAP(0, 19) +#define MICROPY_QSPI_CS NRF_GPIO_PIN_MAP(0, 20) +#endif + +#if SPI_FLASH_FILESYSTEM +#define SPI_FLASH_MOSI_PIN &pin_P0_17 +#define SPI_FLASH_MISO_PIN &pin_P0_22 +#define SPI_FLASH_SCK_PIN &pin_P0_19 +#define SPI_FLASH_CS_PIN &pin_P0_20 +#endif + +#define BOARD_HAS_CRYSTAL 1 + +#define DEFAULT_I2C_BUS_SCL (&pin_P0_11) +#define DEFAULT_I2C_BUS_SDA (&pin_P0_12) + +#define DEFAULT_SPI_BUS_SCK (&pin_P0_14) +#define DEFAULT_SPI_BUS_MOSI (&pin_P0_13) +#define DEFAULT_SPI_BUS_MISO (&pin_P0_15) + +#define DEFAULT_UART_BUS_RX (&pin_P0_24) +#define DEFAULT_UART_BUS_TX (&pin_P0_25) diff --git a/ports/nrf/boards/tinkeringtech_scoutmakes_azul/mpconfigboard.mk b/ports/nrf/boards/tinkeringtech_scoutmakes_azul/mpconfigboard.mk new file mode 100644 index 0000000000..e8bd636ad9 --- /dev/null +++ b/ports/nrf/boards/tinkeringtech_scoutmakes_azul/mpconfigboard.mk @@ -0,0 +1,10 @@ +USB_VID = 0x239A +USB_PID = 0x80BE +USB_PRODUCT = "TinkeringTech ScoutMakes Azul" +USB_MANUFACTURER = "TinkeringTech LLC" + +MCU_CHIP = nrf52840 + +QSPI_FLASH_FILESYSTEM = 1 +EXTERNAL_FLASH_DEVICE_COUNT = 1 +EXTERNAL_FLASH_DEVICES = "GD25Q16C" diff --git a/ports/nrf/boards/tinkeringtech_scoutmakes_azul/pins.c b/ports/nrf/boards/tinkeringtech_scoutmakes_azul/pins.c new file mode 100644 index 0000000000..ec2689ab45 --- /dev/null +++ b/ports/nrf/boards/tinkeringtech_scoutmakes_azul/pins.c @@ -0,0 +1,53 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_04) }, + { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_P0_05) }, + { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_P0_30) }, + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_P0_28) }, + { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_P0_02) }, + { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_P0_03) }, + + { MP_ROM_QSTR(MP_QSTR_AREF), MP_ROM_PTR(&pin_P0_31) }, + + { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_P0_29) }, + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_P0_29) }, + + { MP_ROM_QSTR(MP_QSTR_SWITCH), MP_ROM_PTR(&pin_P1_02) }, + + { MP_ROM_QSTR(MP_QSTR_NFC1), MP_ROM_PTR(&pin_P0_09) }, + { MP_ROM_QSTR(MP_QSTR_NFC2), MP_ROM_PTR(&pin_P0_10) }, + + { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_P0_10) }, + { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_P1_08) }, + { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_P0_07) }, + { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_P0_26) }, + { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_P0_27) }, + { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_P0_06) }, + { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_P0_08) }, + { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_P1_09) }, + + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_P0_16) }, + + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P0_14) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P0_13) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P0_15) }, + + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P0_25) }, + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P0_24) }, + + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P0_11) }, + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P0_12) }, + + { MP_ROM_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_P1_15) }, + { MP_ROM_QSTR(MP_QSTR_RED_LED), MP_ROM_PTR(&pin_P1_15) }, + { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P1_15) }, + + { MP_ROM_QSTR(MP_QSTR_BLUE_LED), MP_ROM_PTR(&pin_P1_10) }, + + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, +}; + +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From 416a32ab01631770701fe433c1e6c79a2a16b6a9 Mon Sep 17 00:00:00 2001 From: TinkeringTech Date: Wed, 15 Jul 2020 21:58:40 -0400 Subject: [PATCH 73/73] fixed build.yml file formatting errors --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3ad11b3ed7..d3d12be096 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -259,7 +259,7 @@ jobs: - "teensy41" - "teknikio_bluebird" - "thunderpack" - - "tinkeringtech_scoutmakes_azul" + - "tinkeringtech_scoutmakes_azul" - "trellis_m4_express" - "trinket_m0" - "trinket_m0_haxpress"