From 3a893594b28172f8ae359361493aed08e0989322 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Fri, 26 May 2023 12:29:43 -0400 Subject: [PATCH 001/241] Add Adafruit Metro RP2040 --- .../boards/adafruit_metro_rp2040/board.c | 29 ++++++++ .../adafruit_metro_rp2040/mpconfigboard.h | 14 ++++ .../adafruit_metro_rp2040/mpconfigboard.mk | 9 +++ .../pico-sdk-configboard.h | 4 ++ .../boards/adafruit_metro_rp2040/pins.c | 66 +++++++++++++++++++ 5 files changed, 122 insertions(+) create mode 100644 ports/raspberrypi/boards/adafruit_metro_rp2040/board.c create mode 100644 ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.h create mode 100644 ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.mk create mode 100644 ports/raspberrypi/boards/adafruit_metro_rp2040/pico-sdk-configboard.h create mode 100644 ports/raspberrypi/boards/adafruit_metro_rp2040/pins.c diff --git a/ports/raspberrypi/boards/adafruit_metro_rp2040/board.c b/ports/raspberrypi/boards/adafruit_metro_rp2040/board.c new file mode 100644 index 0000000000..331653173e --- /dev/null +++ b/ports/raspberrypi/boards/adafruit_metro_rp2040/board.c @@ -0,0 +1,29 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2021 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.h b/ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.h new file mode 100644 index 0000000000..62eabc67f8 --- /dev/null +++ b/ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.h @@ -0,0 +1,14 @@ +#define MICROPY_HW_BOARD_NAME "Adafruit Metro RP2040" +#define MICROPY_HW_MCU_NAME "rp2040" + +#define MICROPY_HW_NEOPIXEL (&pin_GPIO14) + +#define DEFAULT_I2C_BUS_SCL (&pin_GPIO17) +#define DEFAULT_I2C_BUS_SDA (&pin_GPIO16) + +#define DEFAULT_SPI_BUS_SCK (&pin_GPIO18) +#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO19) +#define DEFAULT_SPI_BUS_MISO (&pin_GPIO20) + +#define DEFAULT_UART_BUS_RX (&pin_GPIO1) +#define DEFAULT_UART_BUS_TX (&pin_GPIO0) diff --git a/ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.mk b/ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.mk new file mode 100644 index 0000000000..14b3af9d57 --- /dev/null +++ b/ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.mk @@ -0,0 +1,9 @@ +USB_VID = 0x239A +USB_PID = 0x813E +USB_PRODUCT = "Metro RP2040" +USB_MANUFACTURER = "Adafruit" + +CHIP_VARIANT = RP2040 +CHIP_FAMILY = rp2 + +EXTERNAL_FLASH_DEVICES = "GD25Q64C,W25Q64JVxQ" diff --git a/ports/raspberrypi/boards/adafruit_metro_rp2040/pico-sdk-configboard.h b/ports/raspberrypi/boards/adafruit_metro_rp2040/pico-sdk-configboard.h new file mode 100644 index 0000000000..a41131dd22 --- /dev/null +++ b/ports/raspberrypi/boards/adafruit_metro_rp2040/pico-sdk-configboard.h @@ -0,0 +1,4 @@ +// Put board-specific pico-sdk definitions here. This file must exist. + +// Allow extra time for xosc to start. +#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64 diff --git a/ports/raspberrypi/boards/adafruit_metro_rp2040/pins.c b/ports/raspberrypi/boards/adafruit_metro_rp2040/pins.c new file mode 100644 index 0000000000..04ae94c80f --- /dev/null +++ b/ports/raspberrypi/boards/adafruit_metro_rp2040/pins.c @@ -0,0 +1,66 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + { MP_OBJ_NEW_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO29) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D24), MP_ROM_PTR(&pin_GPIO24) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D25), MP_ROM_PTR(&pin_GPIO25) }, + + // On-board switch reverses D0 and D1 connections to RX and TX. + + { MP_OBJ_NEW_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_RX_D0_SWITCH_LEFT), MP_ROM_PTR(&pin_GPIO0) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_TX_D0_SWITCH_RIGHT), MP_ROM_PTR(&pin_GPIO0) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO1) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_TX_D1_SWITCH_LEFT), MP_ROM_PTR(&pin_GPIO1) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_RX_D1_SWITCH_RIGHT), MP_ROM_PTR(&pin_GPIO1) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO2) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO3) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO4) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO6) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO7) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO8) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_GPIO10) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_GPIO11) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO12) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO16) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO17) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO14) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_SD_CD), MP_ROM_PTR(&pin_GPIO15) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO18) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SDIO_CLOCK), MP_ROM_PTR(&pin_GPIO18) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO19) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SDIO_COMMAND), MP_ROM_PTR(&pin_GPIO19) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO20) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SDIO_DATA0), MP_ROM_PTR(&pin_GPIO20) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_SDIO_DATA1), MP_ROM_PTR(&pin_GPIO21) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SDIO_DATA2), MP_ROM_PTR(&pin_GPIO22) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO23) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SDIO_DATA3), MP_ROM_PTR(&pin_GPIO23) }, + + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From 325037b75e77b9a6c64085eb045e89fccc8c6121 Mon Sep 17 00:00:00 2001 From: Pierre Constantineau Date: Fri, 26 May 2023 13:17:05 -0600 Subject: [PATCH 002/241] fix to make buttons and leds compatible with pca10056 --- ports/nrf/boards/pca10100/mpconfigboard.h | 4 ---- ports/nrf/boards/pca10100/pins.c | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ports/nrf/boards/pca10100/mpconfigboard.h b/ports/nrf/boards/pca10100/mpconfigboard.h index 1456f29949..31b5a350fb 100644 --- a/ports/nrf/boards/pca10100/mpconfigboard.h +++ b/ports/nrf/boards/pca10100/mpconfigboard.h @@ -30,10 +30,6 @@ #define MICROPY_HW_BOARD_NAME "PCA10100 nRF52833 DK" #define MICROPY_HW_MCU_NAME "nRF52833" -#define MICROPY_HW_LED_STATUS (&pin_P0_13) -#define MICROPY_HW_LED_TX (&pin_P0_14) -#define MICROPY_HW_LED_RX (&pin_P0_15) - #define CIRCUITPY_INTERNAL_NVM_SIZE 0 #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (60 * 1024) diff --git a/ports/nrf/boards/pca10100/pins.c b/ports/nrf/boards/pca10100/pins.c index 68d87d0e8f..6f80514923 100644 --- a/ports/nrf/boards/pca10100/pins.c +++ b/ports/nrf/boards/pca10100/pins.c @@ -45,10 +45,14 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_LED3), MP_ROM_PTR(&pin_P0_15) }, { MP_ROM_QSTR(MP_QSTR_LED4), MP_ROM_PTR(&pin_P0_16) }, + { MP_ROM_QSTR(MP_QSTR_BUTTON1), MP_ROM_PTR(&pin_P0_11) }, { MP_ROM_QSTR(MP_QSTR_BUTTON1_DEFAULT), MP_ROM_PTR(&pin_P0_11) }, { MP_ROM_QSTR(MP_QSTR_BUTTON1_OPTIONAL), MP_ROM_PTR(&pin_P1_07) }, + + { MP_ROM_QSTR(MP_QSTR_BUTTON2), MP_ROM_PTR(&pin_P0_12) }, { MP_ROM_QSTR(MP_QSTR_BUTTON2_DEFAULT), MP_ROM_PTR(&pin_P0_12) }, { MP_ROM_QSTR(MP_QSTR_BUTTON2_OPTIONAL), MP_ROM_PTR(&pin_P1_08) }, + { MP_ROM_QSTR(MP_QSTR_BUTTON3), MP_ROM_PTR(&pin_P0_24) }, { MP_ROM_QSTR(MP_QSTR_BUTTON4), MP_ROM_PTR(&pin_P0_25) }, }; From 60ce38ed8bb23ef2fefe82d797ca23318b60d938 Mon Sep 17 00:00:00 2001 From: Pierre Constantineau Date: Fri, 26 May 2023 13:30:32 -0600 Subject: [PATCH 003/241] fix trailing space of pins.c --- ports/nrf/boards/pca10100/pins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/nrf/boards/pca10100/pins.c b/ports/nrf/boards/pca10100/pins.c index 6f80514923..e6ca54eb2e 100644 --- a/ports/nrf/boards/pca10100/pins.c +++ b/ports/nrf/boards/pca10100/pins.c @@ -52,7 +52,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_BUTTON2), MP_ROM_PTR(&pin_P0_12) }, { MP_ROM_QSTR(MP_QSTR_BUTTON2_DEFAULT), MP_ROM_PTR(&pin_P0_12) }, { MP_ROM_QSTR(MP_QSTR_BUTTON2_OPTIONAL), MP_ROM_PTR(&pin_P1_08) }, - + { MP_ROM_QSTR(MP_QSTR_BUTTON3), MP_ROM_PTR(&pin_P0_24) }, { MP_ROM_QSTR(MP_QSTR_BUTTON4), MP_ROM_PTR(&pin_P0_25) }, }; From 60935c29ebb6140401dc4136c7592d501345a1b9 Mon Sep 17 00:00:00 2001 From: applecuckoo Date: Sun, 28 May 2023 16:01:59 +1200 Subject: [PATCH 004/241] Fix up EFR32 port readme --- README.rst | 1 + ports/silabs/README.md | 85 ++++++++++----------- ports/silabs/res/{Thony.png => Thonny.png} | Bin 3 files changed, 43 insertions(+), 43 deletions(-) rename ports/silabs/res/{Thony.png => Thonny.png} (100%) diff --git a/README.rst b/README.rst index 1a6dc2c33e..c07591ef3b 100644 --- a/README.rst +++ b/README.rst @@ -235,6 +235,7 @@ litex alpha mimxrt10xx alpha nrf stable raspberrypi stable +efr32 alpha stm ``F4`` stable | ``others`` beta unix alpha ================ ============================================================ diff --git a/ports/silabs/README.md b/ports/silabs/README.md index 626b8e7788..1186690911 100644 --- a/ports/silabs/README.md +++ b/ports/silabs/README.md @@ -1,4 +1,5 @@ -# Circuitpython on EFR32 # +# CircuitPython on EFR32 # + ![GitHub](https://img.shields.io/badge/Technology-Bluetooth_BLE-green) ![GitHub](https://img.shields.io/badge/CircuitPython-8.1.0--beta.0-green) ![GitHub](https://img.shields.io/badge/GSDK-v4.2.1-green) @@ -10,68 +11,69 @@ This port brings the Silicon Labs EFR32 series of MCUs to Circuitpython. Refer to **mpconfigport.mk** for a full list of enabled modules sorted by family. -## How this port is organized: ## +## How this port is organized ## -- **boards/** contains the configuration files for each development board and breakout available on the port, as well as system files and both shared and SoC-specific linker files. Board configuration includes a pin mapping of the board, oscillator information, board-specific build flags, and setup for some other peripheral where applicable. +- **boards/** contains the configuration files for each development board and breakout available on the port, as well as system files and both shared and SoC-specific linker files. Board configuration includes a pin mapping of the board, oscillator information, board-specific build flags, and setup for other peripherals where applicable. - **common-hal/** contains the port-specific module implementations, used by shared-module and shared-bindings. - **peripherals/** contains peripheral setup files and peripheral mapping information, sorted by family and sub-variant. Most files in this directory can be generated with the python scripts in **tools/**. - **supervisor/** contains port-specific implementations of internal flash and serial, as well as the **port.c** file, which initializes the port at startup. -- **tools/** contains Silicon Labs configurator (SLC) tool, python scripts for generating peripheral and pin mapping files in **peripherals/** and **board/**. +- **tools/** contains the Silicon Labs Configurator (SLC) tool, python scripts for generating peripheral and pin mapping files in **peripherals/** and **board/**. At the root level, refer to **mpconfigboard.h** and **mpconfigport.mk** for port specific settings and a list of enabled modules. ## Prerequisites ## + Please ensure you set up your build environment appropriately, as per the guide. You will need: -- Linux: https://learn.adafruit.com/building-circuitpython/linux -- Windows Subsystem for Linux (WSL): https://learn.adafruit.com/building-circuitpython/windows-subsystem-for-linux -- MacOS: Not supported yet +- Linux: +- Windows Subsystem for Linux (WSL): +- macOS: Not supported yet Install necessary packages - $ sudo apt install default-jre gcc-arm-none-eabi wget python3 python3-pip git git-lfs gettext uncrustify - $ sudo python -m pip install --upgrade pip + sudo apt install default-jre gcc-arm-none-eabi wget python3 python3-pip git git-lfs gettext uncrustify + sudo python -m pip install --upgrade pip -## Board supported ## +## Supported boards ## | Board | Code | Build CMD | | --------------------------- | ------------ | ------------------------------------------ | | xG24 Dev Kit | brd2601b | devkit_xg24_brd2601b | | xG24 Explorer Kit | brd2703a | explorerkit_xg24_brd2703a | -| Sparkfun Thing Plus MGM240P | brd2704a | sparkfun_thingplus_matter_mgm240p_brd2704a | +| SparkFun Thing Plus MGM240P | brd2704a | sparkfun_thingplus_matter_mgm240p_brd2704a | ## Build instructions ## -Ensure your clone of Circuitpython is ready to build by following the [guide on the Adafruit Website](https://learn.adafruit.com/building-circuitpython/build-circuitpython). This includes installing the toolchain, synchronizing submodules, and running `mpy-cross`. +Ensure your clone of CircuitPython is ready to build by following the [guide on the Adafruit Learning System](https://learn.adafruit.com/building-circuitpython/build-circuitpython). This includes installing the toolchain, synchronizing submodules, and running `mpy-cross`. -Clone the source code of CircuitPython from Github: +Clone the source code of CircuitPython from GitHub: - $ git clone https://github.com/SiliconLabs/circuitpython.git - $ cd circuitpython - $ make fetch-submodules + git clone https://github.com/adafruit/circuitpython.git + cd circuitpython + make fetch-submodules Checkout the branch or tag you want to build. For example: - $ git checkout main + git checkout main -Following the guideline below to install required packages for SLC tool: - https://www.silabs.com/documents/public/user-guides/ug520-software-project-generation-configuration-with-slc-cli.pdf +Follow the guide below to install the required packages for the Silicon Labs Configurator (SLC): + Once the one-time build tasks are complete, you can build at any time by navigating to the port directory: - $ make BOARD=explorerkit_xg24_brd2703a + make BOARD=explorerkit_xg24_brd2703a You may also build with certain flags available in the makefile, depending on your board and development goals: - $ make BOARD=explorerkit_xg24_brd2703a DEBUG=1 + make BOARD=explorerkit_xg24_brd2703a DEBUG=1 -Clean project by using: +Clean the project by using: - $ make BOARD=explorerkit_xg24_brd2703a clean + make BOARD=explorerkit_xg24_brd2703a clean -## Bring-up on the board ## +## Running CircuitPython ## -### Getting a REPL prompt ### +### Connecting to the Serial Console ### Connect the devkit to the PC via the USB cable. The board uses serial for REPL access and debugging because the EFR32 chips has no USB support. @@ -81,31 +83,28 @@ On Windows, we need to install a serial console e.g., PuTTY, MobaXterm. The JLin #### Linux #### -Open a terminal and issue the following command:  +Open a terminal and issue the following command: - $ ls /dev/ttyACM* + ls /dev/ttyACM* -Then note down the correct name and substitute com-port-name in the following command with it:  +Then note down the correct name and substitute com-port-name in the following command with it: - $ screen /dev/'com-port-name' + screen /dev/'com-port-name' ### Using the REPL prompt ### After flashing the firmware to the board, at your first connecting to the board, you might see a blank screen. Press enter and you should be presented with a Circuitpython prompt, >>>. If not, try to reset the board (see instructions below). -You can now type in simple commands such as:  +You can now type in simple commands such as: -```sh ->>> print("Hello world!")  - -Hello world -``` + >>> print("Hello world!")  + Hello world! If something goes wrong with the board, you can reset it. Pressing CTRL+D when the prompt is open performs a soft reset. ### Recommended editors ### -**Thonny** is a simple code editor that works with the Adafruit CircuitPython boards.  +**Thonny** is a simple code editor that works with the Adafruit CircuitPython boards. Config serial: Tools > Options > Interpreter > Select MicroPython > Select Port Jlink CDC UART Port @@ -115,18 +114,18 @@ At the boot stage, two scripts will be run (if not booting in safe mode). First, After code.py has finished executing, a REPL prompt will be presented on the serial port. Other files can also be executed by using the **Thonny** editors or using **Ampy** tool. -![Thony](./res/Thony.png) +![Thonny](./res/Thonny.png) With the boards which support USB mass storage, we can drag the files to the board file system. However, because the EFR32 boards don’t support USB mass storage, we need to use a tool like **Ampy** to copy the file to the board. You can use the latest version of **Ampy** and its  command to copy the module directories to the board. -Refer to the guideline below for installing the **Ampy** tool:  +Refer to the guide below for installing the **Ampy** tool: -https://learn.adafruit.com/micropython-basics-load-files-and-run-code/install-ampy   + -## Modules supported ## +## Built-in modules available ## | Board | Modules Available| | --------------------------- | ---------------- | -| xG24 Dev Kit | _asyncio, _bleio, _pixelmap, adafruit_ble, adafruit_bus_device, adafruit_pixelbuf, adafruit_register, aesio,analogio, array, atexit, binascii, bitmaptools, board, builtins, busio, collections, digitalio, displayio,errno, fontio, framebufferio, gc, getpass, gifio, json, math, microcontroller, micropython, msgpack, nvm, onewireio, os, pwmio, rainbowio, random, re, rtc, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, traceback, ulab, uselect, vectorio, watchdog, zlib | -| xG24 Explorer Kit | _asyncio, _bleio, _pixelmap, adafruit_ble, adafruit_bus_device, adafruit_pixelbuf, adafruit_register, aesio,analogio, array, atexit, binascii, bitmaptools, board, builtins, busio, collections, digitalio, displayio,errno, fontio, framebufferio, gc, getpass, gifio, json, math, microcontroller, micropython, msgpack, nvm, onewireio, os, pwmio, rainbowio, random, re, rtc, sdcardio, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, traceback, ulab, uselect, vectorio, watchdog, zlib | -| Sparkfun Thing Plus MGM240P | _asyncio, _bleio, _pixelmap, adafruit_ble, adafruit_bus_device, adafruit_pixelbuf, adafruit_register, aesio,analogio, array, atexit, binascii, bitmaptools, board, builtins, busio, collections, digitalio, displayio,errno, fontio, framebufferio, gc, getpass, gifio, json, math, microcontroller, micropython, msgpack, nvm, onewireio, os, pwmio, rainbowio, random, re, rtc, sdcardio, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, traceback, ulab, uselect, vectorio, watchdog, zlib | +| xG24 Dev Kit | _asyncio, _bleio, _pixelmap, adafruit_ble, adafruit_bus_device, adafruit_pixelbuf, adafruit_register, aesio, analogio, array, atexit, binascii, bitmaptools, board, builtins, busio, collections, digitalio, displayio, errno, fontio, framebufferio, gc, getpass, gifio, json, math, microcontroller, micropython, msgpack, nvm, onewireio, os, pwmio, rainbowio, random, re, rtc, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, traceback, ulab, uselect, vectorio, watchdog, zlib | +| xG24 Explorer Kit | _asyncio, _bleio, _pixelmap, adafruit_ble, adafruit_bus_device, adafruit_pixelbuf, adafruit_register, aesio, analogio, array, atexit, binascii, bitmaptools, board, builtins, busio, collections, digitalio, displayio, errno, fontio, framebufferio, gc, getpass, gifio, json, math, microcontroller, micropython, msgpack, nvm, onewireio, os, pwmio, rainbowio, random, re, rtc, sdcardio, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, traceback, ulab, uselect, vectorio, watchdog, zlib | +| SparkFun Thing Plus MGM240P | _asyncio, _bleio, _pixelmap, adafruit_ble, adafruit_bus_device, adafruit_pixelbuf, adafruit_register, aesio, analogio, array, atexit, binascii, bitmaptools, board, builtins, busio, collections, digitalio, displayio, errno, fontio, framebufferio, gc, getpass, gifio, json, math, microcontroller, micropython, msgpack, nvm, onewireio, os, pwmio, rainbowio, random, re, rtc, sdcardio, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, traceback, ulab, uselect, vectorio, watchdog, zlib | diff --git a/ports/silabs/res/Thony.png b/ports/silabs/res/Thonny.png similarity index 100% rename from ports/silabs/res/Thony.png rename to ports/silabs/res/Thonny.png From fed8d5825b1e2b2882b0f1b6b892eeecc316f50a Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 29 May 2023 09:50:18 -0500 Subject: [PATCH 005/241] synthio: add biquad filter type & basic filter calculations the filter cannot be applied as yet. --- .../unix/variants/coverage/mpconfigvariant.mk | 2 + py/circuitpy_defns.mk | 1 + shared-bindings/synthio/Biquad.c | 110 ++++++++++++++++++ shared-bindings/synthio/Biquad.h | 9 ++ shared-bindings/synthio/Synthesizer.c | 108 +++++++++++++++++ shared-bindings/synthio/__init__.c | 2 + shared-module/synthio/Biquad.c | 94 +++++++++++++++ tests/circuitpython/synthio_biquad.py | 12 ++ tests/circuitpython/synthio_biquad.py.exp | 3 + 9 files changed, 341 insertions(+) create mode 100644 shared-bindings/synthio/Biquad.c create mode 100644 shared-bindings/synthio/Biquad.h create mode 100644 shared-module/synthio/Biquad.c create mode 100644 tests/circuitpython/synthio_biquad.py create mode 100644 tests/circuitpython/synthio_biquad.py.exp diff --git a/ports/unix/variants/coverage/mpconfigvariant.mk b/ports/unix/variants/coverage/mpconfigvariant.mk index 7fe2afdb36..f63054bdd6 100644 --- a/ports/unix/variants/coverage/mpconfigvariant.mk +++ b/ports/unix/variants/coverage/mpconfigvariant.mk @@ -45,6 +45,7 @@ SRC_BITMAP := \ shared-bindings/synthio/MidiTrack.c \ shared-bindings/synthio/LFO.c \ shared-bindings/synthio/Note.c \ + shared-bindings/synthio/Biquad.c \ shared-bindings/synthio/Synthesizer.c \ shared-bindings/traceback/__init__.c \ shared-bindings/util.c \ @@ -70,6 +71,7 @@ SRC_BITMAP := \ shared-module/synthio/MidiTrack.c \ shared-module/synthio/LFO.c \ shared-module/synthio/Note.c \ + shared-module/synthio/Biquad.c \ shared-module/synthio/Synthesizer.c \ shared-module/traceback/__init__.c \ shared-module/zlib/__init__.c \ diff --git a/py/circuitpy_defns.mk b/py/circuitpy_defns.mk index ae4b1bf3db..b6bb36fa24 100644 --- a/py/circuitpy_defns.mk +++ b/py/circuitpy_defns.mk @@ -650,6 +650,7 @@ SRC_SHARED_MODULE_ALL = \ struct/__init__.c \ supervisor/__init__.c \ supervisor/StatusBar.c \ + synthio/Biquad.c \ synthio/LFO.c \ synthio/Math.c \ synthio/MidiTrack.c \ diff --git a/shared-bindings/synthio/Biquad.c b/shared-bindings/synthio/Biquad.c new file mode 100644 index 0000000000..6fd2856e02 --- /dev/null +++ b/shared-bindings/synthio/Biquad.c @@ -0,0 +1,110 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2021 Artyom Skrobov + * + * 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 "py/enum.h" +#include "py/mperrno.h" +#include "py/obj.h" +#include "py/objnamedtuple.h" +#include "py/runtime.h" + +#include "shared-bindings/synthio/__init__.h" +#include "shared-bindings/synthio/LFO.h" +#include "shared-bindings/synthio/Math.h" +#include "shared-bindings/synthio/MidiTrack.h" +#include "shared-bindings/synthio/Note.h" +#include "shared-bindings/synthio/Synthesizer.h" + +#include "shared-module/synthio/LFO.h" + +#define default_attack_time (MICROPY_FLOAT_CONST(0.1)) +#define default_decay_time (MICROPY_FLOAT_CONST(0.05)) +#define default_release_time (MICROPY_FLOAT_CONST(0.2)) +#define default_attack_level (MICROPY_FLOAT_CONST(1.)) +#define default_sustain_level (MICROPY_FLOAT_CONST(0.8)) + +static const mp_arg_t biquad_properties[] = { + { MP_QSTR_a1, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_ROM_NONE} }, + { MP_QSTR_a2, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_ROM_NONE} }, + { MP_QSTR_b0, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_ROM_NONE} }, + { MP_QSTR_b1, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_ROM_NONE} }, + { MP_QSTR_b2, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_ROM_NONE} }, +}; + +//| class Biquad: +//| def __init__(self, b0: float, b1: float, b2: float, a1: float, a2: float) -> None: +//| """Construct a normalized biquad filter object. +//| +//| This implements the "direct form 1" biquad filter, where each coefficient +//| has been pre-divided by a0. +//| +//| Biquad objects are usually constructed via one of the related methods on a `Synthesizer` object +//| rather than directly from coefficients. +//| +//| https://github.com/WebAudio/Audio-EQ-Cookbook/blob/main/Audio-EQ-Cookbook.txt +//| """ +//| +STATIC mp_obj_t synthio_biquad_make_new(const mp_obj_type_t *type_in, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { + mp_arg_val_t args[MP_ARRAY_SIZE(biquad_properties)]; + mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(biquad_properties), biquad_properties, args); + + for (size_t i = 0; i < MP_ARRAY_SIZE(biquad_properties); i++) { + args[i].u_obj = mp_obj_new_float(mp_arg_validate_type_float(args[i].u_obj, biquad_properties[i].qst)); + } + + MP_STATIC_ASSERT(sizeof(mp_arg_val_t) == sizeof(mp_obj_t)); + return namedtuple_make_new(type_in, MP_ARRAY_SIZE(args), 0, &args[0].u_obj); +} + +const mp_obj_namedtuple_type_t synthio_biquad_type_obj = { + .base = { + .base = { + .type = &mp_type_type + }, + .flags = MP_TYPE_FLAG_EXTENDED, + .name = MP_QSTR_Biquad, + .print = namedtuple_print, + .parent = &mp_type_tuple, + .make_new = synthio_biquad_make_new, + .attr = namedtuple_attr, + MP_TYPE_EXTENDED_FIELDS( + .unary_op = mp_obj_tuple_unary_op, + .binary_op = mp_obj_tuple_binary_op, + .subscr = mp_obj_tuple_subscr, + .getiter = mp_obj_tuple_getiter, + ), + }, + .n_fields = 5, + .fields = { + MP_QSTR_a1, + MP_QSTR_a2, + MP_QSTR_b0, + MP_QSTR_b1, + MP_QSTR_b2, + }, +}; diff --git a/shared-bindings/synthio/Biquad.h b/shared-bindings/synthio/Biquad.h new file mode 100644 index 0000000000..62b6c5843b --- /dev/null +++ b/shared-bindings/synthio/Biquad.h @@ -0,0 +1,9 @@ +#pragma once + +#include "py/obj.h" +#include "py/objnamedtuple.h" + +extern const mp_obj_namedtuple_type_t synthio_biquad_type_obj; +mp_obj_t common_hal_synthio_new_lpf(mp_float_t w0, mp_float_t Q); +mp_obj_t common_hal_synthio_new_hpf(mp_float_t w0, mp_float_t Q); +mp_obj_t common_hal_synthio_new_bpf(mp_float_t w0, mp_float_t Q); diff --git a/shared-bindings/synthio/Synthesizer.c b/shared-bindings/synthio/Synthesizer.c index 84882fa657..04bb672d99 100644 --- a/shared-bindings/synthio/Synthesizer.c +++ b/shared-bindings/synthio/Synthesizer.c @@ -32,6 +32,7 @@ #include "py/objproperty.h" #include "py/runtime.h" #include "shared-bindings/util.h" +#include "shared-bindings/synthio/Biquad.h" #include "shared-bindings/synthio/Synthesizer.h" #include "shared-bindings/synthio/LFO.h" #include "shared-bindings/synthio/__init__.h" @@ -292,6 +293,110 @@ MP_PROPERTY_GETTER(synthio_synthesizer_blocks_obj, //| """Maximum polyphony of the synthesizer (read-only class property)""" //| +//| def low_pass_filter(cls, cutoff_frequency, q_factor: float = 1 / math.sqrt(2)) -> Biquad: +//| """Construct a low-pass filter with the given parameters. +//| +//| `frequency`, called f0 in the cookbook, is the corner frequency in Hz +//| of the filter. +//| +//| `q_factor`, called `Q` in the cookbook. Controls how peaked the response will be at the cutoff frequency. A large value makes the response more peaked. +//| """ + +enum passfilter_arg_e { ARG_f0, ARG_Q }; + +// M_PI is not part of the math.h standard and may not be defined +// And by defining our own we can ensure it uses the correct const format. +#define MP_PI MICROPY_FLOAT_CONST(3.14159265358979323846) + +static const mp_arg_t passfilter_properties[] = { + { MP_QSTR_frequency, MP_ARG_OBJ | MP_ARG_REQUIRED, {.u_obj = MP_ROM_NONE} }, + { MP_QSTR_Q, MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL } }, +}; + +STATIC mp_obj_t synthio_synthesizer_lpf(size_t n_pos, const mp_obj_t *pos_args, mp_map_t *kw_args) { + mp_arg_val_t args[MP_ARRAY_SIZE(passfilter_properties)]; + + mp_obj_t self_in = pos_args[0]; + synthio_synthesizer_obj_t *self = MP_OBJ_TO_PTR(self_in); + + mp_arg_parse_all(n_pos - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(passfilter_properties), passfilter_properties, args); + + mp_float_t f0 = mp_arg_validate_type_float(args[ARG_f0].u_obj, MP_QSTR_f0); + mp_float_t Q = + args[ARG_Q].u_obj == MP_OBJ_NULL ? MICROPY_FLOAT_CONST(0.7071067811865475) : + mp_arg_validate_type_float(args[ARG_Q].u_obj, MP_QSTR_Q); + + mp_float_t w0 = f0 / self->synth.sample_rate * 2 * MP_PI; + + return common_hal_synthio_new_lpf(w0, Q); + +} + +MP_DEFINE_CONST_FUN_OBJ_KW(synthio_synthesizer_lpf_fun_obj, 1, synthio_synthesizer_lpf); + +//| def high_pass_filter(cls, cutoff_frequency, q_factor: float = 1 / math.sqrt(2)) -> Biquad: +//| """Construct a high-pass filter with the given parameters. +//| +//| `frequency`, called f0 in the cookbook, is the corner frequency in Hz +//| of the filter. +//| +//| `q_factor`, called `Q` in the cookbook. Controls how peaked the response will be at the cutoff frequency. A large value makes the response more peaked. +//| """ + +STATIC mp_obj_t synthio_synthesizer_hpf(size_t n_pos, const mp_obj_t *pos_args, mp_map_t *kw_args) { + mp_arg_val_t args[MP_ARRAY_SIZE(passfilter_properties)]; + + mp_obj_t self_in = pos_args[0]; + synthio_synthesizer_obj_t *self = MP_OBJ_TO_PTR(self_in); + + mp_arg_parse_all(n_pos - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(passfilter_properties), passfilter_properties, args); + + mp_float_t f0 = mp_arg_validate_type_float(args[ARG_f0].u_obj, MP_QSTR_f0); + mp_float_t Q = + args[ARG_Q].u_obj == MP_OBJ_NULL ? MICROPY_FLOAT_CONST(0.7071067811865475) : + mp_arg_validate_type_float(args[ARG_Q].u_obj, MP_QSTR_Q); + + mp_float_t w0 = f0 / self->synth.sample_rate * 2 * MP_PI; + + return common_hal_synthio_new_hpf(w0, Q); + +} + +//| def band_pass_filter(cls, frequency, q_factor: float = 1 / math.sqrt(2)) -> Biquad: +//| """Construct a band-pass filter with the given parameters. +//| +//| `frequency`, called f0 in the cookbook, is the center frequency in Hz +//| of the filter. +//| +//| `q_factor`, called `Q` in the cookbook. Controls how peaked the response will be at the cutoff frequency. A large value makes the response more peaked. +//| +//| The coefficients are scaled such that the filter has a 0dB peak gain. +//| """ +//| + +MP_DEFINE_CONST_FUN_OBJ_KW(synthio_synthesizer_hpf_fun_obj, 1, synthio_synthesizer_hpf); + +STATIC mp_obj_t synthio_synthesizer_bpf(size_t n_pos, const mp_obj_t *pos_args, mp_map_t *kw_args) { + mp_arg_val_t args[MP_ARRAY_SIZE(passfilter_properties)]; + + mp_obj_t self_in = pos_args[0]; + synthio_synthesizer_obj_t *self = MP_OBJ_TO_PTR(self_in); + + mp_arg_parse_all(n_pos - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(passfilter_properties), passfilter_properties, args); + + mp_float_t f0 = mp_arg_validate_type_float(args[ARG_f0].u_obj, MP_QSTR_f0); + mp_float_t Q = + args[ARG_Q].u_obj == MP_OBJ_NULL ? MICROPY_FLOAT_CONST(0.7071067811865475) : + mp_arg_validate_type_float(args[ARG_Q].u_obj, MP_QSTR_Q); + + mp_float_t w0 = f0 / self->synth.sample_rate * 2 * MP_PI; + + return common_hal_synthio_new_bpf(w0, Q); + +} + +MP_DEFINE_CONST_FUN_OBJ_KW(synthio_synthesizer_bpf_fun_obj, 1, synthio_synthesizer_bpf); + STATIC const mp_rom_map_elem_t synthio_synthesizer_locals_dict_table[] = { // Methods { MP_ROM_QSTR(MP_QSTR_press), MP_ROM_PTR(&synthio_synthesizer_press_obj) }, @@ -304,6 +409,9 @@ STATIC const mp_rom_map_elem_t synthio_synthesizer_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&synthio_synthesizer___exit___obj) }, + { MP_ROM_QSTR(MP_QSTR_low_pass_filter), MP_ROM_PTR(&synthio_synthesizer_lpf_fun_obj) }, + { MP_ROM_QSTR(MP_QSTR_high_pass_filter), MP_ROM_PTR(&synthio_synthesizer_hpf_fun_obj) }, + { MP_ROM_QSTR(MP_QSTR_band_pass_filter), MP_ROM_PTR(&synthio_synthesizer_bpf_fun_obj) }, // Properties { MP_ROM_QSTR(MP_QSTR_envelope), MP_ROM_PTR(&synthio_synthesizer_envelope_obj) }, { MP_ROM_QSTR(MP_QSTR_sample_rate), MP_ROM_PTR(&synthio_synthesizer_sample_rate_obj) }, diff --git a/shared-bindings/synthio/__init__.c b/shared-bindings/synthio/__init__.c index b6185051fc..b295430b09 100644 --- a/shared-bindings/synthio/__init__.c +++ b/shared-bindings/synthio/__init__.c @@ -36,6 +36,7 @@ #include "extmod/vfs_posix.h" #include "shared-bindings/synthio/__init__.h" +#include "shared-bindings/synthio/Biquad.h" #include "shared-bindings/synthio/LFO.h" #include "shared-bindings/synthio/Math.h" #include "shared-bindings/synthio/MidiTrack.h" @@ -310,6 +311,7 @@ MP_DEFINE_CONST_FUN_OBJ_VAR(synthio_lfo_tick_obj, 1, synthio_lfo_tick); STATIC const mp_rom_map_elem_t synthio_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_synthio) }, + { MP_ROM_QSTR(MP_QSTR_Biquad), MP_ROM_PTR(&synthio_biquad_type_obj) }, { MP_ROM_QSTR(MP_QSTR_Math), MP_ROM_PTR(&synthio_math_type) }, { MP_ROM_QSTR(MP_QSTR_MathOperation), MP_ROM_PTR(&synthio_math_operation_type) }, { MP_ROM_QSTR(MP_QSTR_MidiTrack), MP_ROM_PTR(&synthio_miditrack_type) }, diff --git a/shared-module/synthio/Biquad.c b/shared-module/synthio/Biquad.c new file mode 100644 index 0000000000..9457316b3a --- /dev/null +++ b/shared-module/synthio/Biquad.c @@ -0,0 +1,94 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2023 Jeff Epler 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 +#include "shared-bindings/synthio/Biquad.h" + +mp_obj_t common_hal_synthio_new_lpf(mp_float_t w0, mp_float_t Q) { + mp_float_t s = MICROPY_FLOAT_C_FUN(sin)(w0); + mp_float_t c = MICROPY_FLOAT_C_FUN(cos)(w0); + mp_float_t alpha = s / (2 * Q); + mp_float_t a0 = 1 + alpha; + mp_float_t a1 = -2 * c; + mp_float_t a2 = 1 - alpha; + mp_float_t b0 = (1 - c) / 2; + mp_float_t b1 = 1 - c; + mp_float_t b2 = (1 - c) / 2; + + mp_obj_t out_args[] = { + mp_obj_new_float(a1 / a0), + mp_obj_new_float(a2 / a0), + mp_obj_new_float(b0 / a0), + mp_obj_new_float(b1 / a0), + mp_obj_new_float(b2 / a0), + }; + + return namedtuple_make_new((const mp_obj_type_t *)&synthio_biquad_type_obj, MP_ARRAY_SIZE(out_args), 0, out_args); +} + +mp_obj_t common_hal_synthio_new_hpf(mp_float_t w0, mp_float_t Q) { + mp_float_t s = MICROPY_FLOAT_C_FUN(sin)(w0); + mp_float_t c = MICROPY_FLOAT_C_FUN(cos)(w0); + mp_float_t alpha = s / (2 * Q); + mp_float_t a0 = 1 + alpha; + mp_float_t a1 = -2 * c; + mp_float_t a2 = 1 - alpha; + mp_float_t b0 = (1 + c) / 2; + mp_float_t b1 = -(1 + c); + mp_float_t b2 = (1 + c) / 2; + + mp_obj_t out_args[] = { + mp_obj_new_float(a1 / a0), + mp_obj_new_float(a2 / a0), + mp_obj_new_float(b0 / a0), + mp_obj_new_float(b1 / a0), + mp_obj_new_float(b2 / a0), + }; + + return namedtuple_make_new((const mp_obj_type_t *)&synthio_biquad_type_obj, MP_ARRAY_SIZE(out_args), 0, out_args); +} + +mp_obj_t common_hal_synthio_new_bpf(mp_float_t w0, mp_float_t Q) { + mp_float_t s = MICROPY_FLOAT_C_FUN(sin)(w0); + mp_float_t c = MICROPY_FLOAT_C_FUN(cos)(w0); + mp_float_t alpha = s / (2 * Q); + mp_float_t a0 = 1 + alpha; + mp_float_t a1 = -2 * c; + mp_float_t a2 = 1 - alpha; + mp_float_t b0 = alpha; + mp_float_t b1 = 0; + mp_float_t b2 = -alpha; + + mp_obj_t out_args[] = { + mp_obj_new_float(a1 / a0), + mp_obj_new_float(a2 / a0), + mp_obj_new_float(b0 / a0), + mp_obj_new_float(b1 / a0), + mp_obj_new_float(b2 / a0), + }; + + return namedtuple_make_new((const mp_obj_type_t *)&synthio_biquad_type_obj, MP_ARRAY_SIZE(out_args), 0, out_args); +} diff --git a/tests/circuitpython/synthio_biquad.py b/tests/circuitpython/synthio_biquad.py new file mode 100644 index 0000000000..92b8e64a05 --- /dev/null +++ b/tests/circuitpython/synthio_biquad.py @@ -0,0 +1,12 @@ +from synthio import Synthesizer + +s = Synthesizer(sample_rate=48000) + + +def print_filter(x): + print(" ".join(f"{v:.4g}" for v in x)) + + +print_filter(s.low_pass_filter(330)) +print_filter(s.high_pass_filter(330)) +print_filter(s.band_pass_filter(330)) diff --git a/tests/circuitpython/synthio_biquad.py.exp b/tests/circuitpython/synthio_biquad.py.exp new file mode 100644 index 0000000000..2b9ca364c6 --- /dev/null +++ b/tests/circuitpython/synthio_biquad.py.exp @@ -0,0 +1,3 @@ +-1.939 0.9407 0.0004526 0.0009052 0.0004526 +-1.939 0.9407 0.9699 -1.94 0.9699 +-1.939 0.9407 0.02963 0 -0.02963 From 51027974e589207129041bed9424426555450c15 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 29 May 2023 10:53:48 -0500 Subject: [PATCH 006/241] synthio: apply biquad filters during synthesis --- shared-bindings/synthio/Note.c | 15 ++- shared-bindings/synthio/Note.h | 4 +- shared-module/synthio/Biquad.c | 45 ++++++++ shared-module/synthio/Biquad.h | 37 ++++++ shared-module/synthio/Note.c | 9 +- shared-module/synthio/Note.h | 5 +- shared-module/synthio/__init__.c | 65 ++++------- .../synthio/note/biquad.py | 63 +++++++++++ .../circuitpython-manual/synthio/note/fir.py | 53 --------- .../synthio/note/mkfilter.py | 105 ------------------ tests/circuitpython/synthesizer_note.py.exp | 6 +- 11 files changed, 188 insertions(+), 219 deletions(-) create mode 100644 shared-module/synthio/Biquad.h create mode 100644 tests/circuitpython-manual/synthio/note/biquad.py delete mode 100644 tests/circuitpython-manual/synthio/note/fir.py delete mode 100644 tests/circuitpython-manual/synthio/note/mkfilter.py diff --git a/shared-bindings/synthio/Note.c b/shared-bindings/synthio/Note.c index 651bf8f33a..4dcc66666c 100644 --- a/shared-bindings/synthio/Note.c +++ b/shared-bindings/synthio/Note.c @@ -41,7 +41,7 @@ static const mp_arg_t note_properties[] = { { MP_QSTR_bend, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_INT(0) } }, { MP_QSTR_waveform, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } }, { MP_QSTR_envelope, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } }, - { MP_QSTR_filter, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_INT(1) } }, + { MP_QSTR_filter, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } }, { MP_QSTR_ring_frequency, MP_ARG_OBJ, {.u_obj = MP_ROM_INT(0) } }, { MP_QSTR_ring_bend, MP_ARG_OBJ, {.u_obj = MP_ROM_INT(0) } }, { MP_QSTR_ring_waveform, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_ROM_NONE } }, @@ -56,6 +56,7 @@ static const mp_arg_t note_properties[] = { //| envelope: Optional[Envelope] = None, //| amplitude: BlockInput = 0.0, //| bend: BlockInput = 0.0, +//| filter: Optional[Biquad] = None, //| ring_frequency: float = 0.0, //| ring_bend: float = 0.0, //| ring_waveform: Optional[ReadableBuffer] = 0.0, @@ -97,17 +98,21 @@ MP_PROPERTY_GETSET(synthio_note_frequency_obj, (mp_obj_t)&synthio_note_get_frequency_obj, (mp_obj_t)&synthio_note_set_frequency_obj); -//| filter: bool -//| """True if the note should be processed via the synthesizer's FIR filter.""" +//| filter: Optional[Biquad] +//| """If not None, the output of this Note is filtered according to the provided coefficients. +//| +//| Construct an appropriate filter by calling a filter-making method on the +//| `Synthesizer` object where you plan to play the note, as filter coefficients depend +//| on the sample rate""" STATIC mp_obj_t synthio_note_get_filter(mp_obj_t self_in) { synthio_note_obj_t *self = MP_OBJ_TO_PTR(self_in); - return mp_obj_new_bool(common_hal_synthio_note_get_filter(self)); + return common_hal_synthio_note_get_filter_obj(self); } MP_DEFINE_CONST_FUN_OBJ_1(synthio_note_get_filter_obj, synthio_note_get_filter); STATIC mp_obj_t synthio_note_set_filter(mp_obj_t self_in, mp_obj_t arg) { synthio_note_obj_t *self = MP_OBJ_TO_PTR(self_in); - common_hal_synthio_note_set_filter(self, mp_obj_is_true(arg)); + common_hal_synthio_note_set_filter(self, arg); return mp_const_none; } MP_DEFINE_CONST_FUN_OBJ_2(synthio_note_set_filter_obj, synthio_note_set_filter); diff --git a/shared-bindings/synthio/Note.h b/shared-bindings/synthio/Note.h index 271268dc33..263ca701e3 100644 --- a/shared-bindings/synthio/Note.h +++ b/shared-bindings/synthio/Note.h @@ -9,8 +9,8 @@ typedef enum synthio_bend_mode_e synthio_bend_mode_t; mp_float_t common_hal_synthio_note_get_frequency(synthio_note_obj_t *self); void common_hal_synthio_note_set_frequency(synthio_note_obj_t *self, mp_float_t value); -bool common_hal_synthio_note_get_filter(synthio_note_obj_t *self); -void common_hal_synthio_note_set_filter(synthio_note_obj_t *self, bool value); +mp_obj_t common_hal_synthio_note_get_filter_obj(synthio_note_obj_t *self); +void common_hal_synthio_note_set_filter(synthio_note_obj_t *self, mp_obj_t biquad); mp_obj_t common_hal_synthio_note_get_panning(synthio_note_obj_t *self); void common_hal_synthio_note_set_panning(synthio_note_obj_t *self, mp_obj_t value); diff --git a/shared-module/synthio/Biquad.c b/shared-module/synthio/Biquad.c index 9457316b3a..29e680fd7c 100644 --- a/shared-module/synthio/Biquad.c +++ b/shared-module/synthio/Biquad.c @@ -26,6 +26,7 @@ #include #include "shared-bindings/synthio/Biquad.h" +#include "shared-module/synthio/Biquad.h" mp_obj_t common_hal_synthio_new_lpf(mp_float_t w0, mp_float_t Q) { mp_float_t s = MICROPY_FLOAT_C_FUN(sin)(w0); @@ -92,3 +93,47 @@ mp_obj_t common_hal_synthio_new_bpf(mp_float_t w0, mp_float_t Q) { return namedtuple_make_new((const mp_obj_type_t *)&synthio_biquad_type_obj, MP_ARRAY_SIZE(out_args), 0, out_args); } + +#define BIQUAD_SHIFT (16) +STATIC int32_t biquad_scale_arg_obj(mp_obj_t arg) { + return (int32_t)MICROPY_FLOAT_C_FUN(round)(MICROPY_FLOAT_C_FUN(ldexp)(mp_obj_get_float(arg), BIQUAD_SHIFT)); +} +void synthio_biquad_filter_assign(biquad_filter_state *st, mp_obj_t biquad_obj) { + if (biquad_obj != mp_const_none) { + mp_arg_validate_type(biquad_obj, (const mp_obj_type_t *)&synthio_biquad_type_obj, MP_QSTR_filter); + mp_obj_tuple_t *biquad = (mp_obj_tuple_t *)MP_OBJ_TO_PTR(biquad_obj); + st->a1 = biquad_scale_arg_obj(biquad->items[0]); + st->a2 = biquad_scale_arg_obj(biquad->items[1]); + st->b0 = biquad_scale_arg_obj(biquad->items[2]); + st->b1 = biquad_scale_arg_obj(biquad->items[3]); + st->b2 = biquad_scale_arg_obj(biquad->items[4]); + } +} + +void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out, const int32_t *in, size_t n, size_t stride) { + int32_t a1 = st->a1; + int32_t a2 = st->a2; + int32_t b0 = st->b0; + int32_t b1 = st->b1; + int32_t b2 = st->b2; + + int32_t x0 = st->x[0]; + int32_t x1 = st->x[1]; + int32_t y0 = st->y[0]; + int32_t y1 = st->y[1]; + + for (; n; --n, in += stride, out += stride) { + int16_t input = *in; + int32_t output = (b0 * input + b1 * x0 + b2 * x1 - a1 * y0 - a2 * y1) >> BIQUAD_SHIFT; + + x1 = x0; + x0 = input; + y1 = y0; + y0 = output; + *out = output; + } + st->x[0] = x0; + st->x[1] = x1; + st->y[0] = y0; + st->y[1] = y1; +} diff --git a/shared-module/synthio/Biquad.h b/shared-module/synthio/Biquad.h new file mode 100644 index 0000000000..047fd2b6c2 --- /dev/null +++ b/shared-module/synthio/Biquad.h @@ -0,0 +1,37 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2023 Jeff Epler for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "py/obj.h" + +typedef struct { + int32_t a1, a2, b0, b1, b2; + int32_t x[2], y[2]; +} biquad_filter_state; + +void synthio_biquad_filter_assign(biquad_filter_state *st, mp_obj_t biquad_obj); +void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out, const int32_t *in, size_t n, size_t stride); diff --git a/shared-module/synthio/Note.c b/shared-module/synthio/Note.c index 6a8982f6b2..2cd391679d 100644 --- a/shared-module/synthio/Note.c +++ b/shared-module/synthio/Note.c @@ -40,12 +40,13 @@ void common_hal_synthio_note_set_frequency(synthio_note_obj_t *self, mp_float_t self->frequency_scaled = synthio_frequency_convert_float_to_scaled(val); } -bool common_hal_synthio_note_get_filter(synthio_note_obj_t *self) { - return self->filter; +mp_obj_t common_hal_synthio_note_get_filter_obj(synthio_note_obj_t *self) { + return self->filter_obj; } -void common_hal_synthio_note_set_filter(synthio_note_obj_t *self, bool value_in) { - self->filter = value_in; +void common_hal_synthio_note_set_filter(synthio_note_obj_t *self, mp_obj_t filter_in) { + synthio_biquad_filter_assign(&self->filter_state, filter_in); + self->filter_obj = filter_in; } mp_float_t common_hal_synthio_note_get_ring_frequency(synthio_note_obj_t *self) { diff --git a/shared-module/synthio/Note.h b/shared-module/synthio/Note.h index ba777c237c..8ae4fd910e 100644 --- a/shared-module/synthio/Note.h +++ b/shared-module/synthio/Note.h @@ -27,6 +27,7 @@ #pragma once #include "shared-module/synthio/__init__.h" +#include "shared-module/synthio/Biquad.h" #include "shared-module/synthio/LFO.h" #include "shared-bindings/synthio/__init__.h" @@ -37,12 +38,14 @@ typedef struct synthio_note_obj { mp_float_t frequency, ring_frequency; mp_obj_t waveform_obj, envelope_obj, ring_waveform_obj; + mp_obj_t filter_obj; + + biquad_filter_state filter_state; int32_t sample_rate; int32_t frequency_scaled; int32_t ring_frequency_scaled, ring_frequency_bent; - bool filter; mp_buffer_info_t waveform_buf; mp_buffer_info_t ring_waveform_buf; diff --git a/shared-module/synthio/__init__.c b/shared-module/synthio/__init__.c index 7c8e627404..64af797e03 100644 --- a/shared-module/synthio/__init__.c +++ b/shared-module/synthio/__init__.c @@ -27,6 +27,7 @@ #include "shared-module/synthio/__init__.h" #include "shared-bindings/synthio/__init__.h" +#include "shared-module/synthio/Biquad.h" #include "shared-module/synthio/Note.h" #include "py/runtime.h" #include @@ -309,37 +310,15 @@ static void synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *ou } } -STATIC void run_fir(synthio_synth_t *synth, int32_t *out_buffer32, uint16_t dur) { - int16_t *coeff = (int16_t *)synth->filter_bufinfo.buf; - size_t fir_len = synth->filter_bufinfo.len; - int32_t *in_buf = synth->filter_buffer; - - - int synth_chan = synth->channel_count; - // FIR and copy values to output buffer - for (int16_t i = 0; i < dur * synth_chan; i++) { - int32_t acc = 0; - for (size_t j = 0; j < fir_len; j++) { - // shift 5 here is good for up to 32 filtered voices, else might wrap - acc = acc + (in_buf[j * synth_chan] * (coeff[j] >> 5)); - } - *out_buffer32++ = acc >> 10; - in_buf++; - } - - // Move values down so that they get filtered next time - memmove(synth->filter_buffer, &synth->filter_buffer[dur * synth_chan], fir_len * sizeof(int32_t) * synth_chan); -} - -STATIC bool synthio_synth_get_note_filtered(mp_obj_t note_obj) { +STATIC mp_obj_t synthio_synth_get_note_filter(mp_obj_t note_obj) { if (note_obj == mp_const_none) { - return false; + return mp_const_none; } if (!mp_obj_is_small_int(note_obj)) { synthio_note_obj_t *note = MP_OBJ_TO_PTR(note_obj); - return note->filter; + return note->filter_obj; } - return true; + return mp_const_none; } void synthio_synth_synthesize(synthio_synth_t *synth, uint8_t **bufptr, uint32_t *buffer_length, uint8_t channel) { @@ -360,30 +339,24 @@ void synthio_synth_synthesize(synthio_synth_t *synth, uint8_t **bufptr, uint32_t synth->span.dur -= dur; int32_t out_buffer32[dur * synth->channel_count]; - - if (synth->filter_buffer) { - int32_t *filter_start = &synth->filter_buffer[synth->filter_bufinfo.len * synth->channel_count]; - memset(filter_start, 0, dur * synth->channel_count * sizeof(int32_t)); - - for (int chan = 0; chan < CIRCUITPY_SYNTHIO_MAX_CHANNELS; chan++) { - mp_obj_t note_obj = synth->span.note_obj[chan]; - if (!synthio_synth_get_note_filtered(note_obj)) { - continue; - } - synth_note_into_buffer(synth, chan, filter_start, dur); - } - - run_fir(synth, out_buffer32, dur); - } else { - memset(out_buffer32, 0, sizeof(out_buffer32)); - } + memset(out_buffer32, 0, sizeof(out_buffer32)); for (int chan = 0; chan < CIRCUITPY_SYNTHIO_MAX_CHANNELS; chan++) { mp_obj_t note_obj = synth->span.note_obj[chan]; - if (synth->filter_buffer && synthio_synth_get_note_filtered(note_obj)) { - continue; + mp_obj_t filter_obj = synthio_synth_get_note_filter(note_obj); + if (filter_obj == mp_const_none) { + synth_note_into_buffer(synth, chan, out_buffer32, dur); + } else { + synthio_note_obj_t *note = MP_OBJ_TO_PTR(note_obj); + int32_t filter_buffer32[dur * synth->channel_count]; + memset(filter_buffer32, 0, sizeof(filter_buffer32)); + + synth_note_into_buffer(synth, chan, filter_buffer32, dur); + int synth_chan = synth->channel_count; + for (int i = 0; i < synth_chan; i++) { + synthio_biquad_filter_samples(¬e->filter_state, &out_buffer32[i], &filter_buffer32[i], dur, i); + } } - synth_note_into_buffer(synth, chan, out_buffer32, dur); } int16_t *out_buffer16 = (int16_t *)(void *)synth->buffers[synth->buffer_index]; diff --git a/tests/circuitpython-manual/synthio/note/biquad.py b/tests/circuitpython-manual/synthio/note/biquad.py new file mode 100644 index 0000000000..59a3f74541 --- /dev/null +++ b/tests/circuitpython-manual/synthio/note/biquad.py @@ -0,0 +1,63 @@ +import sys + +sys.path.insert( + 0, f"{__file__.rpartition('/')[0] or '.'}/../../../../frozen/Adafruit_CircuitPython_Wave" +) + +import random +import audiocore +import synthio +from ulab import numpy as np +import adafruit_wave as wave + +random.seed(9) + +envelope = synthio.Envelope( + attack_time=0, decay_time=0, release_time=0, attack_level=0.8, sustain_level=1.0 +) + +SAMPLE_SIZE = 1024 +VOLUME = 14700 +sine = np.array( + np.sin(np.linspace(0, 2 * np.pi, SAMPLE_SIZE, endpoint=False)) * VOLUME, + dtype=np.int16, +) +noise = np.array([random.randint(-VOLUME, VOLUME) for i in range(SAMPLE_SIZE)], dtype=np.int16) +bend_out = np.linspace(0, 32767, num=SAMPLE_SIZE, endpoint=True, dtype=np.int16) + + +def synthesize(synth): + for waveform in (sine, None, noise): + for biquad in ( + None, + synth.low_pass_filter(330), + synth.low_pass_filter(660), + synth.high_pass_filter(330), + synth.high_pass_filter(660), + synth.band_pass_filter(330), + synth.band_pass_filter(660), + ): + n = synthio.Note( + frequency=80, + envelope=envelope, + filter=biquad, + waveform=waveform, + bend=synthio.LFO(bend_out, once=True, rate=1 / 2, scale=5), + ) + + synth.press(n) + print(synth, n) + yield 2 * 48000 // 256 + synth.release_all() + yield 36 + + +with wave.open("biquad.wav", "w") as f: + f.setnchannels(1) + f.setsampwidth(2) + f.setframerate(48000) + synth = synthio.Synthesizer(sample_rate=48000) + for n in synthesize(synth): + for i in range(n): + result, data = audiocore.get_buffer(synth) + f.writeframes(data) diff --git a/tests/circuitpython-manual/synthio/note/fir.py b/tests/circuitpython-manual/synthio/note/fir.py deleted file mode 100644 index 4593dcb376..0000000000 --- a/tests/circuitpython-manual/synthio/note/fir.py +++ /dev/null @@ -1,53 +0,0 @@ -import sys - -sys.path.insert( - 0, f"{__file__.rpartition('/')[0] or '.'}/../../../../frozen/Adafruit_CircuitPython_Wave" -) - -import random -import audiocore -import synthio -from ulab import numpy as np -import adafruit_wave as wave -import mkfilter - -random.seed(9) - -envelope = synthio.Envelope( - attack_time=0.1, decay_time=0.05, release_time=0.2, attack_level=0.8, sustain_level=0.8 -) - -SAMPLE_SIZE = 1024 -bend_out = np.linspace(0, 32767, num=SAMPLE_SIZE, endpoint=True, dtype=np.int16) - -filter_rectangular = mkfilter.LPF(48000, 800, 13) -filter_rectangular_big = mkfilter.LPF(48000, 800, 59) -filter_blackman = mkfilter.LPF(48000, 800, 59, win=mkfilter.blackman) -print(filter_blackman) - - -def synthesize(synth): - n = synthio.Note( - frequency=120, - envelope=envelope, - filter=True, - bend=synthio.LFO(bend_out, once=True, rate=1 / 2, scale=5), - ) - - synth.press(n) - print(synth, n) - yield 2 * 48000 // 256 - synth.release_all() - yield 36 - - -with wave.open("fir.wav", "w") as f: - f.setnchannels(1) - f.setsampwidth(2) - f.setframerate(48000) - for filter_coeffs in [None, filter_rectangular, filter_rectangular_big, filter_blackman]: - synth = synthio.Synthesizer(sample_rate=48000, filter=filter_coeffs) - for n in synthesize(synth): - for i in range(n): - result, data = audiocore.get_buffer(synth) - f.writeframes(data) diff --git a/tests/circuitpython-manual/synthio/note/mkfilter.py b/tests/circuitpython-manual/synthio/note/mkfilter.py deleted file mode 100644 index 20a4203af2..0000000000 --- a/tests/circuitpython-manual/synthio/note/mkfilter.py +++ /dev/null @@ -1,105 +0,0 @@ -try: - from ulab import numpy as np -except ImportError: - import numpy as np - - -def lpf(fS, f, N, win=lambda N: 1): - if not (N & 1): - raise ValueError("filter length must be odd") - h = np.sinc(2 * f / fS * (np.arange(N) - (N - 1) / 2)) - h = h * win(N) - return h * (1 / np.sum(h)) - - -def hpf(fS, f, N, win=lambda N: 1): - if not (N & 1): - raise ValueError("filter length must be odd") - h = -lpf(fS, f, N) - h = h * win(N) - h[(N - 1) // 2] += 1 - return h - - -def brf(fS, fL, NL, fH, NH, win=lambda N: 1): - hlpf = lpf(fS, fL, NL, win) - hhpf = hpf(fS, fH, NH, win) - - if NH > NL: - h = hhpf - h[(NH - NL) // 2 : (NH - NL) // 2 + NL] += hlpf - else: - h = hlpf - h[(NL - NH) // 2 : (NL - NH) // 2 + NH] += hhpf - - return h - - -def bpf(fS, fL, NL, fH, NH, win=lambda N: 1): - hlpf = lpf(fS, fL, NL, win) - hhpf = hpf(fS, fH, NH, win) - return np.convolve(hlpf, hhpf) - - -def blackman(M): - n = np.arange(1 - M, M, 2) - return 0.42 + 0.5 * np.cos(np.pi * n / (M - 1)) + 0.08 * np.cos(2.0 * np.pi * n / (M - 1)) - - -def tosynthio(coeffs): - result = np.array(coeffs * 32767, dtype=np.int16) - return trim_zeros(result) - - -def trim_zeros(arr): - i = 0 - j = len(arr) - 1 - while i < len(arr) and arr[i] == 0: - i += 1 - while j > i and arr[j] == 0: - j -= 1 - return arr[i : j + 1] - - -# fiiir.com uses factor 4.6 for blackman window, 0.91 for rectangular -def ntaps(fS, fB, factor=4.6): - b = fB / fS - return round(factor / b) | 1 - - -def LPF(*args, **kw): - return tosynthio(lpf(*args, **kw)) - - -def HPF(*args, **kw): - return tosynthio(hpf(*args, **kw)) - - -def BRF(*args, **kw): - return tosynthio(brf(*args, **kw)) - - -def BPF(*args, **kw): - return tosynthio(bpf(*args, **kw)) - - -if __name__ == "__main__": - print("lpf(24000, 2040, 13) # 1920Hz transition window") - print(list(lpf(24000, 2040, 13))) - - print("hpf(24000, 9600, 13) # 960Hz transition window") - print(list(hpf(24000, 9600, 23))) - - print("bpf(24000, 1200, 11, 3960, 15) # 2400Hz, 1600Hz transition windows") - print(list(bpf(24000, 1200, 11, 3960, 15))) - - print("brf(24000, 960, 19, 2400, 13) # 1200, 1800Hz transition windows") - brf_tst = brf(24000, 960, 19, 2400, 13) - print(brf_tst) - - print("brf(24000, 960, 13, 2400, 19) # 1200, 1800Hz transition windows") - brf_tst = brf(24000, 960, 13, 2400, 19) - print(brf_tst) - - print("lpf(1, 0.1, 59, blackman) # 1920Hz transition window, blackman") - print(lpf(1, 0.1, 59, blackman)) diff --git a/tests/circuitpython/synthesizer_note.py.exp b/tests/circuitpython/synthesizer_note.py.exp index f9173c6470..0c2af86681 100644 --- a/tests/circuitpython/synthesizer_note.py.exp +++ b/tests/circuitpython/synthesizer_note.py.exp @@ -1,10 +1,10 @@ () [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] -(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=True, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None),) +(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None),) [-16383, -16383, -16383, -16383, 16382, 16382, 16382, 16382, 16382, -16383, -16383, -16383, -16383, -16383, 16382, 16382, 16382, 16382, 16382, -16383, -16383, -16383, -16383, -16383] -(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=True, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None), Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=True, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None)) +(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None), Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None)) [-1, -1, -1, -1, -1, -1, -1, -1, 28045, -1, -1, -1, -1, -28046, -1, -1, -1, -1, 28045, -1, -1, -1, -1, -28046] -(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=True, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None),) +(Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None),) [-1, -1, -1, 28045, -1, -1, -1, -1, -1, -1, -1, -1, 28045, -1, -1, -1, -1, -28046, -1, -1, -1, -1, 28045, -1] (-5242, 5241) (-10484, 10484) From a891e149a6626d1187153ca19bc4e13811730397 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 29 May 2023 11:23:07 -0500 Subject: [PATCH 007/241] synthio: Fix multichannel biquad filtering --- shared-module/synthio/Biquad.c | 39 ++++++++++++++++++-------------- shared-module/synthio/Biquad.h | 4 ++-- shared-module/synthio/__init__.c | 5 +--- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/shared-module/synthio/Biquad.c b/shared-module/synthio/Biquad.c index 29e680fd7c..fb7f3a720c 100644 --- a/shared-module/synthio/Biquad.c +++ b/shared-module/synthio/Biquad.c @@ -110,30 +110,35 @@ void synthio_biquad_filter_assign(biquad_filter_state *st, mp_obj_t biquad_obj) } } -void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out, const int32_t *in, size_t n, size_t stride) { +void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out0, const int32_t *in0, size_t n0, size_t n_channels) { int32_t a1 = st->a1; int32_t a2 = st->a2; int32_t b0 = st->b0; int32_t b1 = st->b1; int32_t b2 = st->b2; - int32_t x0 = st->x[0]; - int32_t x1 = st->x[1]; - int32_t y0 = st->y[0]; - int32_t y1 = st->y[1]; + for (size_t i = 0; i < n_channels; i++) { + const int32_t *in = in0 + i; + int32_t *out = out0 + i; - for (; n; --n, in += stride, out += stride) { - int16_t input = *in; - int32_t output = (b0 * input + b1 * x0 + b2 * x1 - a1 * y0 - a2 * y1) >> BIQUAD_SHIFT; + int32_t x0 = st->x[i][0]; + int32_t x1 = st->x[i][1]; + int32_t y0 = st->y[i][0]; + int32_t y1 = st->y[i][1]; - x1 = x0; - x0 = input; - y1 = y0; - y0 = output; - *out = output; + for (size_t n = n0; n; --n, in += n_channels, out += n_channels) { + int32_t input = *in; + int32_t output = (b0 * input + b1 * x0 + b2 * x1 - a1 * y0 - a2 * y1) >> BIQUAD_SHIFT; + + x1 = x0; + x0 = input; + y1 = y0; + y0 = output; + *out = output; + } + st->x[i][0] = x0; + st->x[i][1] = x1; + st->y[i][0] = y0; + st->y[i][1] = y1; } - st->x[0] = x0; - st->x[1] = x1; - st->y[0] = y0; - st->y[1] = y1; } diff --git a/shared-module/synthio/Biquad.h b/shared-module/synthio/Biquad.h index 047fd2b6c2..64f6a529d3 100644 --- a/shared-module/synthio/Biquad.h +++ b/shared-module/synthio/Biquad.h @@ -30,8 +30,8 @@ typedef struct { int32_t a1, a2, b0, b1, b2; - int32_t x[2], y[2]; + int32_t x[2][2], y[2][2]; } biquad_filter_state; void synthio_biquad_filter_assign(biquad_filter_state *st, mp_obj_t biquad_obj); -void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out, const int32_t *in, size_t n, size_t stride); +void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out, const int32_t *in, size_t n_samples, size_t n_channels); diff --git a/shared-module/synthio/__init__.c b/shared-module/synthio/__init__.c index 64af797e03..7783ebb113 100644 --- a/shared-module/synthio/__init__.c +++ b/shared-module/synthio/__init__.c @@ -352,10 +352,7 @@ void synthio_synth_synthesize(synthio_synth_t *synth, uint8_t **bufptr, uint32_t memset(filter_buffer32, 0, sizeof(filter_buffer32)); synth_note_into_buffer(synth, chan, filter_buffer32, dur); - int synth_chan = synth->channel_count; - for (int i = 0; i < synth_chan; i++) { - synthio_biquad_filter_samples(¬e->filter_state, &out_buffer32[i], &filter_buffer32[i], dur, i); - } + synthio_biquad_filter_samples(¬e->filter_state, out_buffer32, filter_buffer32, dur, synth->channel_count); } } From f5388e12af43039c0a5fd2e58ee011b9f6bc0be8 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 29 May 2023 11:23:45 -0500 Subject: [PATCH 008/241] synthio: add manual filter frequency sweeping to standalone test .. by assigning a new band pass filter to the note every 2 frames --- tests/circuitpython-manual/synthio/note/biquad.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/circuitpython-manual/synthio/note/biquad.py b/tests/circuitpython-manual/synthio/note/biquad.py index 59a3f74541..58dccc2aed 100644 --- a/tests/circuitpython-manual/synthio/note/biquad.py +++ b/tests/circuitpython-manual/synthio/note/biquad.py @@ -51,6 +51,21 @@ def synthesize(synth): synth.release_all() yield 36 + for waveform in (sine, None, noise): + n = synthio.Note( + frequency=555, + envelope=envelope, + waveform=waveform, + ) + synth.press(n) + i = 220 + while i < 1760: + n.filter = synth.band_pass_filter(i) + i *= 1.00579 + yield 1 + synth.release_all() + yield 6 + with wave.open("biquad.wav", "w") as f: f.setnchannels(1) From 1d58b550b55a5f5cb7a189652522991b433d80a2 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 29 May 2023 13:07:15 -0500 Subject: [PATCH 009/241] synthio: fix doc build --- shared-bindings/synthio/Synthesizer.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/shared-bindings/synthio/Synthesizer.c b/shared-bindings/synthio/Synthesizer.c index 04bb672d99..afc0cdd47f 100644 --- a/shared-bindings/synthio/Synthesizer.c +++ b/shared-bindings/synthio/Synthesizer.c @@ -293,13 +293,13 @@ MP_PROPERTY_GETTER(synthio_synthesizer_blocks_obj, //| """Maximum polyphony of the synthesizer (read-only class property)""" //| -//| def low_pass_filter(cls, cutoff_frequency, q_factor: float = 1 / math.sqrt(2)) -> Biquad: +//| def low_pass_filter(cls, frequency: float, q_factor: float = 0.7071067811865475) -> Biquad: //| """Construct a low-pass filter with the given parameters. //| -//| `frequency`, called f0 in the cookbook, is the corner frequency in Hz +//| ``frequency``, called f0 in the cookbook, is the corner frequency in Hz //| of the filter. //| -//| `q_factor`, called `Q` in the cookbook. Controls how peaked the response will be at the cutoff frequency. A large value makes the response more peaked. +//| ``q_factor``, called ``Q`` in the cookbook. Controls how peaked the response will be at the cutoff frequency. A large value makes the response more peaked. //| """ enum passfilter_arg_e { ARG_f0, ARG_Q }; @@ -334,13 +334,15 @@ STATIC mp_obj_t synthio_synthesizer_lpf(size_t n_pos, const mp_obj_t *pos_args, MP_DEFINE_CONST_FUN_OBJ_KW(synthio_synthesizer_lpf_fun_obj, 1, synthio_synthesizer_lpf); -//| def high_pass_filter(cls, cutoff_frequency, q_factor: float = 1 / math.sqrt(2)) -> Biquad: +//| def high_pass_filter( +//| cls, frequency: float, q_factor: float = 0.7071067811865475 +//| ) -> Biquad: //| """Construct a high-pass filter with the given parameters. //| -//| `frequency`, called f0 in the cookbook, is the corner frequency in Hz +//| ``frequency``, called f0 in the cookbook, is the corner frequency in Hz //| of the filter. //| -//| `q_factor`, called `Q` in the cookbook. Controls how peaked the response will be at the cutoff frequency. A large value makes the response more peaked. +//| ``q_factor``, called ``Q`` in the cookbook. Controls how peaked the response will be at the cutoff frequency. A large value makes the response more peaked. //| """ STATIC mp_obj_t synthio_synthesizer_hpf(size_t n_pos, const mp_obj_t *pos_args, mp_map_t *kw_args) { @@ -362,13 +364,15 @@ STATIC mp_obj_t synthio_synthesizer_hpf(size_t n_pos, const mp_obj_t *pos_args, } -//| def band_pass_filter(cls, frequency, q_factor: float = 1 / math.sqrt(2)) -> Biquad: +//| def band_pass_filter( +//| cls, frequency: float, q_factor: float = 0.7071067811865475 +//| ) -> Biquad: //| """Construct a band-pass filter with the given parameters. //| -//| `frequency`, called f0 in the cookbook, is the center frequency in Hz +//| ``frequency``, called f0 in the cookbook, is the center frequency in Hz //| of the filter. //| -//| `q_factor`, called `Q` in the cookbook. Controls how peaked the response will be at the cutoff frequency. A large value makes the response more peaked. +//| ``q_factor``, called ``Q`` in the cookbook. Controls how peaked the response will be at the cutoff frequency. A large value makes the response more peaked. //| //| The coefficients are scaled such that the filter has a 0dB peak gain. //| """ From 3151656f4bf90d05296eedbd9b05ed075e03e0d6 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 30 May 2023 09:24:06 -0500 Subject: [PATCH 010/241] synthio: more fir-filter removal; fix biquad logic errors --- shared-bindings/synthio/Synthesizer.c | 6 +----- shared-bindings/synthio/Synthesizer.h | 2 +- shared-module/synthio/Biquad.c | 8 ++++++-- shared-module/synthio/Biquad.h | 1 + shared-module/synthio/MidiTrack.c | 2 +- shared-module/synthio/Note.c | 1 + shared-module/synthio/Synthesizer.c | 4 ++-- shared-module/synthio/__init__.c | 13 +------------ shared-module/synthio/__init__.h | 7 +++---- 9 files changed, 17 insertions(+), 27 deletions(-) diff --git a/shared-bindings/synthio/Synthesizer.c b/shared-bindings/synthio/Synthesizer.c index afc0cdd47f..8e186573cd 100644 --- a/shared-bindings/synthio/Synthesizer.c +++ b/shared-bindings/synthio/Synthesizer.c @@ -53,7 +53,6 @@ //| channel_count: int = 1, //| waveform: Optional[ReadableBuffer] = None, //| envelope: Optional[Envelope] = None, -//| filter: Optional[ReadableBuffer] = None, //| ) -> None: //| """Create a synthesizer object. //| @@ -66,17 +65,15 @@ //| :param int sample_rate: The desired playback sample rate; higher sample rate requires more memory //| :param int channel_count: The number of output channels (1=mono, 2=stereo) //| :param ReadableBuffer waveform: A single-cycle waveform. Default is a 50% duty cycle square wave. If specified, must be a ReadableBuffer of type 'h' (signed 16 bit) -//| :param ReadableBuffer filter: Coefficients of an FIR filter to apply to notes with ``filter=True``. If specified, must be a ReadableBuffer of type 'h' (signed 16 bit) //| :param Optional[Envelope] envelope: An object that defines the loudness of a note over time. The default envelope, `None` provides no ramping, voices turn instantly on and off. //| """ STATIC mp_obj_t synthio_synthesizer_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { - enum { ARG_sample_rate, ARG_channel_count, ARG_waveform, ARG_envelope, ARG_filter }; + enum { ARG_sample_rate, ARG_channel_count, ARG_waveform, ARG_envelope }; static const mp_arg_t allowed_args[] = { { MP_QSTR_sample_rate, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 11025} }, { MP_QSTR_channel_count, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 1} }, { MP_QSTR_waveform, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none } }, { MP_QSTR_envelope, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none } }, - { MP_QSTR_filter, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none } }, }; mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); @@ -88,7 +85,6 @@ STATIC mp_obj_t synthio_synthesizer_make_new(const mp_obj_type_t *type, size_t n args[ARG_sample_rate].u_int, args[ARG_channel_count].u_int, args[ARG_waveform].u_obj, - args[ARG_filter].u_obj, args[ARG_envelope].u_obj); return MP_OBJ_FROM_PTR(self); diff --git a/shared-bindings/synthio/Synthesizer.h b/shared-bindings/synthio/Synthesizer.h index 9c7ba68588..16543ce2c3 100644 --- a/shared-bindings/synthio/Synthesizer.h +++ b/shared-bindings/synthio/Synthesizer.h @@ -32,7 +32,7 @@ extern const mp_obj_type_t synthio_synthesizer_type; void common_hal_synthio_synthesizer_construct(synthio_synthesizer_obj_t *self, - uint32_t sample_rate, int channel_count, mp_obj_t waveform_obj, mp_obj_t filter_obj, + uint32_t sample_rate, int channel_count, mp_obj_t waveform_obj, mp_obj_t envelope_obj); void common_hal_synthio_synthesizer_deinit(synthio_synthesizer_obj_t *self); bool common_hal_synthio_synthesizer_deinited(synthio_synthesizer_obj_t *self); diff --git a/shared-module/synthio/Biquad.c b/shared-module/synthio/Biquad.c index fb7f3a720c..99d95959e0 100644 --- a/shared-module/synthio/Biquad.c +++ b/shared-module/synthio/Biquad.c @@ -94,7 +94,7 @@ mp_obj_t common_hal_synthio_new_bpf(mp_float_t w0, mp_float_t Q) { return namedtuple_make_new((const mp_obj_type_t *)&synthio_biquad_type_obj, MP_ARRAY_SIZE(out_args), 0, out_args); } -#define BIQUAD_SHIFT (16) +#define BIQUAD_SHIFT (19) STATIC int32_t biquad_scale_arg_obj(mp_obj_t arg) { return (int32_t)MICROPY_FLOAT_C_FUN(round)(MICROPY_FLOAT_C_FUN(ldexp)(mp_obj_get_float(arg), BIQUAD_SHIFT)); } @@ -110,6 +110,10 @@ void synthio_biquad_filter_assign(biquad_filter_state *st, mp_obj_t biquad_obj) } } +void synthio_biquad_filter_reset(biquad_filter_state *st) { + memset(&st->x, 0, 8 * sizeof(int16_t)); +} + void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out0, const int32_t *in0, size_t n0, size_t n_channels) { int32_t a1 = st->a1; int32_t a2 = st->a2; @@ -134,7 +138,7 @@ void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out0, const x0 = input; y1 = y0; y0 = output; - *out = output; + *out += output; } st->x[i][0] = x0; st->x[i][1] = x1; diff --git a/shared-module/synthio/Biquad.h b/shared-module/synthio/Biquad.h index 64f6a529d3..1c0005ab47 100644 --- a/shared-module/synthio/Biquad.h +++ b/shared-module/synthio/Biquad.h @@ -34,4 +34,5 @@ typedef struct { } biquad_filter_state; void synthio_biquad_filter_assign(biquad_filter_state *st, mp_obj_t biquad_obj); +void synthio_biquad_filter_reset(biquad_filter_state *st); void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out, const int32_t *in, size_t n_samples, size_t n_channels); diff --git a/shared-module/synthio/MidiTrack.c b/shared-module/synthio/MidiTrack.c index 50c7151811..41f9676b72 100644 --- a/shared-module/synthio/MidiTrack.c +++ b/shared-module/synthio/MidiTrack.c @@ -122,7 +122,7 @@ void common_hal_synthio_miditrack_construct(synthio_miditrack_obj_t *self, self->track.buf = (void *)buffer; self->track.len = len; - synthio_synth_init(&self->synth, sample_rate, 1, waveform_obj, mp_const_none, envelope_obj); + synthio_synth_init(&self->synth, sample_rate, 1, waveform_obj, envelope_obj); start_parse(self); } diff --git a/shared-module/synthio/Note.c b/shared-module/synthio/Note.c index 2cd391679d..f384269214 100644 --- a/shared-module/synthio/Note.c +++ b/shared-module/synthio/Note.c @@ -148,6 +148,7 @@ void synthio_note_recalculate(synthio_note_obj_t *self, int32_t sample_rate) { void synthio_note_start(synthio_note_obj_t *self, int32_t sample_rate) { synthio_note_recalculate(self, sample_rate); + synthio_biquad_filter_reset(&self->filter_state); } // Perform a pitch bend operation diff --git a/shared-module/synthio/Synthesizer.c b/shared-module/synthio/Synthesizer.c index dd2f977bd7..7dc888dfd0 100644 --- a/shared-module/synthio/Synthesizer.c +++ b/shared-module/synthio/Synthesizer.c @@ -33,10 +33,10 @@ void common_hal_synthio_synthesizer_construct(synthio_synthesizer_obj_t *self, - uint32_t sample_rate, int channel_count, mp_obj_t waveform_obj, mp_obj_t filter_obj, + uint32_t sample_rate, int channel_count, mp_obj_t waveform_obj, mp_obj_t envelope_obj) { - synthio_synth_init(&self->synth, sample_rate, channel_count, waveform_obj, filter_obj, envelope_obj); + synthio_synth_init(&self->synth, sample_rate, channel_count, waveform_obj, envelope_obj); self->blocks = mp_obj_new_list(0, NULL); } diff --git a/shared-module/synthio/__init__.c b/shared-module/synthio/__init__.c index 7783ebb113..90540162b6 100644 --- a/shared-module/synthio/__init__.c +++ b/shared-module/synthio/__init__.c @@ -389,7 +389,6 @@ bool synthio_synth_deinited(synthio_synth_t *synth) { } void synthio_synth_deinit(synthio_synth_t *synth) { - synth->filter_buffer = NULL; synth->buffers[0] = NULL; synth->buffers[1] = NULL; } @@ -403,17 +402,12 @@ mp_obj_t synthio_synth_envelope_get(synthio_synth_t *synth) { return synth->envelope_obj; } -void synthio_synth_init(synthio_synth_t *synth, uint32_t sample_rate, int channel_count, mp_obj_t waveform_obj, mp_obj_t filter_obj, mp_obj_t envelope_obj) { +void synthio_synth_init(synthio_synth_t *synth, uint32_t sample_rate, int channel_count, mp_obj_t waveform_obj, mp_obj_t envelope_obj) { synthio_synth_parse_waveform(&synth->waveform_bufinfo, waveform_obj); - synthio_synth_parse_filter(&synth->filter_bufinfo, filter_obj); mp_arg_validate_int_range(channel_count, 1, 2, MP_QSTR_channel_count); synth->buffer_length = SYNTHIO_MAX_DUR * SYNTHIO_BYTES_PER_SAMPLE * channel_count; synth->buffers[0] = m_malloc(synth->buffer_length, false); synth->buffers[1] = m_malloc(synth->buffer_length, false); - if (synth->filter_bufinfo.len) { - synth->filter_buffer_length = (synth->filter_bufinfo.len + SYNTHIO_MAX_DUR) * channel_count * sizeof(int32_t); - synth->filter_buffer = m_malloc(synth->filter_buffer_length, false); - } synth->channel_count = channel_count; synth->other_channel = -1; synth->waveform_obj = waveform_obj; @@ -453,11 +447,6 @@ void synthio_synth_parse_waveform(mp_buffer_info_t *bufinfo_waveform, mp_obj_t w parse_common(bufinfo_waveform, waveform_obj, MP_QSTR_waveform, 16384); } -void synthio_synth_parse_filter(mp_buffer_info_t *bufinfo_filter, mp_obj_t filter_obj) { - *bufinfo_filter = ((mp_buffer_info_t) { .buf = NULL, .len = 0 }); - parse_common(bufinfo_filter, filter_obj, MP_QSTR_filter, 128); -} - STATIC int find_channel_with_note(synthio_synth_t *synth, mp_obj_t note) { for (int i = 0; i < CIRCUITPY_SYNTHIO_MAX_CHANNELS; i++) { if (synth->span.note_obj[i] == note) { diff --git a/shared-module/synthio/__init__.h b/shared-module/synthio/__init__.h index 5586ce87f9..9e4db96d50 100644 --- a/shared-module/synthio/__init__.h +++ b/shared-module/synthio/__init__.h @@ -64,12 +64,11 @@ typedef struct synthio_synth { uint32_t sample_rate; uint32_t total_envelope; int16_t *buffers[2]; - int32_t *filter_buffer; uint8_t channel_count; - uint16_t buffer_length, filter_buffer_length; + uint16_t buffer_length; uint16_t last_buffer_length; uint8_t other_channel, buffer_index, other_buffer_index; - mp_buffer_info_t waveform_bufinfo, filter_bufinfo; + mp_buffer_info_t waveform_bufinfo; synthio_envelope_definition_t global_envelope_definition; mp_obj_t waveform_obj, filter_obj, envelope_obj; synthio_midi_span_t span; @@ -91,7 +90,7 @@ typedef struct { void synthio_synth_synthesize(synthio_synth_t *synth, uint8_t **buffer, uint32_t *buffer_length, uint8_t channel); void synthio_synth_deinit(synthio_synth_t *synth); bool synthio_synth_deinited(synthio_synth_t *synth); -void synthio_synth_init(synthio_synth_t *synth, uint32_t sample_rate, int channel_count, mp_obj_t waveform_obj, mp_obj_t filter_obj, mp_obj_t envelope); +void synthio_synth_init(synthio_synth_t *synth, uint32_t sample_rate, int channel_count, mp_obj_t waveform_obj, mp_obj_t envelope); void synthio_synth_get_buffer_structure(synthio_synth_t *synth, bool single_channel_output, bool *single_buffer, bool *samples_signed, uint32_t *max_buffer_length, uint8_t *spacing); void synthio_synth_reset_buffer(synthio_synth_t *synth, bool single_channel_output, uint8_t channel); From 8a85deb1e2d71e5395bbb9b84ef8593c4159da4e Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 30 May 2023 09:26:14 -0500 Subject: [PATCH 011/241] synthio: shift 19 was too much for a note with amplitude 1 --- shared-module/synthio/Biquad.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-module/synthio/Biquad.c b/shared-module/synthio/Biquad.c index 99d95959e0..d8cf0d7889 100644 --- a/shared-module/synthio/Biquad.c +++ b/shared-module/synthio/Biquad.c @@ -94,7 +94,7 @@ mp_obj_t common_hal_synthio_new_bpf(mp_float_t w0, mp_float_t Q) { return namedtuple_make_new((const mp_obj_type_t *)&synthio_biquad_type_obj, MP_ARRAY_SIZE(out_args), 0, out_args); } -#define BIQUAD_SHIFT (19) +#define BIQUAD_SHIFT (15) STATIC int32_t biquad_scale_arg_obj(mp_obj_t arg) { return (int32_t)MICROPY_FLOAT_C_FUN(round)(MICROPY_FLOAT_C_FUN(ldexp)(mp_obj_get_float(arg), BIQUAD_SHIFT)); } From 5f7998e6f2c458e25298f6d26a883d5d31fa718f Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 30 May 2023 13:43:06 -0500 Subject: [PATCH 012/241] synthio: improve rounding in biquad this removes a marked DC offset and may cure the 'pops' problem. --- shared-module/synthio/Biquad.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-module/synthio/Biquad.c b/shared-module/synthio/Biquad.c index d8cf0d7889..d6cdb3168f 100644 --- a/shared-module/synthio/Biquad.c +++ b/shared-module/synthio/Biquad.c @@ -132,7 +132,7 @@ void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out0, const for (size_t n = n0; n; --n, in += n_channels, out += n_channels) { int32_t input = *in; - int32_t output = (b0 * input + b1 * x0 + b2 * x1 - a1 * y0 - a2 * y1) >> BIQUAD_SHIFT; + int32_t output = (b0 * input + b1 * x0 + b2 * x1 - a1 * y0 - a2 * y1 + (1 << (BIQUAD_SHIFT - 1))) >> BIQUAD_SHIFT; x1 = x0; x0 = input; From 8a564602a120ea968d266a6a345925e7bf20ed2f Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 30 May 2023 19:21:13 -0500 Subject: [PATCH 013/241] synthio: this modified biquad test lets me hear what I'm hunting --- .../synthio/note/biquad.py | 51 +++++++------------ 1 file changed, 17 insertions(+), 34 deletions(-) diff --git a/tests/circuitpython-manual/synthio/note/biquad.py b/tests/circuitpython-manual/synthio/note/biquad.py index 58dccc2aed..b4136a957f 100644 --- a/tests/circuitpython-manual/synthio/note/biquad.py +++ b/tests/circuitpython-manual/synthio/note/biquad.py @@ -13,7 +13,7 @@ import adafruit_wave as wave random.seed(9) envelope = synthio.Envelope( - attack_time=0, decay_time=0, release_time=0, attack_level=0.8, sustain_level=1.0 + attack_time=0.15, decay_time=0, release_time=0.08, attack_level=1.0, sustain_level=1.0 ) SAMPLE_SIZE = 1024 @@ -30,41 +30,24 @@ def synthesize(synth): for waveform in (sine, None, noise): for biquad in ( None, - synth.low_pass_filter(330), - synth.low_pass_filter(660), - synth.high_pass_filter(330), - synth.high_pass_filter(660), - synth.band_pass_filter(330), - synth.band_pass_filter(660), + synth.low_pass_filter(120), ): - n = synthio.Note( - frequency=80, - envelope=envelope, - filter=biquad, - waveform=waveform, - bend=synthio.LFO(bend_out, once=True, rate=1 / 2, scale=5), - ) + for midi_note in range(24, 90, 3): + n = synthio.Note( + frequency=synthio.midi_to_hz(midi_note), + envelope=envelope, + filter=biquad, + waveform=waveform, + bend=synthio.LFO(bend_out, once=True, rate=1 / 2, scale=5), + ) - synth.press(n) - print(synth, n) - yield 2 * 48000 // 256 - synth.release_all() - yield 36 - - for waveform in (sine, None, noise): - n = synthio.Note( - frequency=555, - envelope=envelope, - waveform=waveform, - ) - synth.press(n) - i = 220 - while i < 1760: - n.filter = synth.band_pass_filter(i) - i *= 1.00579 - yield 1 - synth.release_all() - yield 6 + synth.press(n) + print(n.frequency) + yield 24 + synth.release_all() + yield 16 + yield 24 + yield 48 with wave.open("biquad.wav", "w") as f: From 06057a63e6546b23d3356d1a8b7fc539ee570bf2 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Tue, 30 May 2023 19:25:08 -0500 Subject: [PATCH 014/241] don't consider refresh areas for hidden groups or tilegrids --- shared-module/displayio/Group.c | 54 ++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c index 7eec72404f..bd62280c96 100644 --- a/shared-module/displayio/Group.c +++ b/shared-module/displayio/Group.c @@ -438,32 +438,36 @@ void displayio_group_finish_refresh(displayio_group_t *self) { } displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, displayio_area_t *tail) { - if (self->item_removed) { - self->dirty_area.next = tail; - tail = &self->dirty_area; - } + if (! self->hidden){ + if (self->item_removed) { + self->dirty_area.next = tail; + tail = &self->dirty_area; + } - for (int32_t i = self->members->len - 1; i >= 0; i--) { - mp_obj_t layer; - #if CIRCUITPY_VECTORIO - const vectorio_draw_protocol_t *draw_protocol = mp_proto_get(MP_QSTR_protocol_draw, self->members->items[i]); - if (draw_protocol != NULL) { - layer = draw_protocol->draw_get_protocol_self(self->members->items[i]); - tail = draw_protocol->draw_protocol_impl->draw_get_refresh_areas(layer, tail); - continue; - } - #endif - layer = mp_obj_cast_to_native_base( - self->members->items[i], &displayio_tilegrid_type); - if (layer != MP_OBJ_NULL) { - tail = displayio_tilegrid_get_refresh_areas(layer, tail); - continue; - } - layer = mp_obj_cast_to_native_base( - self->members->items[i], &displayio_group_type); - if (layer != MP_OBJ_NULL) { - tail = displayio_group_get_refresh_areas(layer, tail); - continue; + for (int32_t i = self->members->len - 1; i >= 0; i--) { + mp_obj_t layer; + #if CIRCUITPY_VECTORIO + const vectorio_draw_protocol_t *draw_protocol = mp_proto_get(MP_QSTR_protocol_draw, self->members->items[i]); + if (draw_protocol != NULL) { + layer = draw_protocol->draw_get_protocol_self(self->members->items[i]); + tail = draw_protocol->draw_protocol_impl->draw_get_refresh_areas(layer, tail); + continue; + } + #endif + layer = mp_obj_cast_to_native_base( + self->members->items[i], &displayio_tilegrid_type); + if (layer != MP_OBJ_NULL) { + if (!common_hal_displayio_tilegrid_get_hidden(layer)){ + tail = displayio_tilegrid_get_refresh_areas(layer, tail); + } + continue; + } + layer = mp_obj_cast_to_native_base( + self->members->items[i], &displayio_group_type); + if (layer != MP_OBJ_NULL) { + tail = displayio_group_get_refresh_areas(layer, tail); + continue; + } } } From 30b69a821ed4cf09d7e17b8378c4d3a5ad513593 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 30 May 2023 19:32:24 -0500 Subject: [PATCH 015/241] synthio: update ring mod manual test --- tests/circuitpython-manual/synthio/note/ring.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tests/circuitpython-manual/synthio/note/ring.py b/tests/circuitpython-manual/synthio/note/ring.py index 7a418da3af..5ba551ec17 100644 --- a/tests/circuitpython-manual/synthio/note/ring.py +++ b/tests/circuitpython-manual/synthio/note/ring.py @@ -23,18 +23,17 @@ envelope = synthio.Envelope( ) synth = synthio.Synthesizer(sample_rate=48000) +bend_out = np.linspace(0, 32767, num=SAMPLE_SIZE, endpoint=True, dtype=np.int16) def synthesize(synth): n = synthio.Note( - frequency=120, + frequency=440, waveform=sine, ring_waveform=sine, ring_frequency=769, envelope=envelope, - bend_mode=synthio.BendType.VIBRATO, - bend_depth=50 / 1200, - bend_rate=7, + bend=synthio.LFO(bend_out, scale=50 / 1200, rate=7), ) print(synth, n) @@ -43,6 +42,13 @@ def synthesize(synth): synth.release_all() yield 36 + n.ring_frequency = 0 + print(synth, n) + synth.press((n,)) + yield 720 + synth.release_all() + yield 36 + def chain(*args): for a in args: From a999e40935831235261acffe7290df5259f8d510 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 30 May 2023 19:33:56 -0500 Subject: [PATCH 016/241] synthio: reorganize the order of operations Apply envelope & panning after biquad filtering. This may fix the weird popping problem. It also reduces the number of operations that are done "in stereo", so it could help performance. It also fixes a previously unnoticed problem where a ring-modulated waveform had 2x the amplitude of an un-modulated waveform. The test differences look large but it's because some values got changed in the LSB after the mathematical divisions were moved around. --- shared-module/synthio/Biquad.c | 41 +- shared-module/synthio/Biquad.h | 4 +- shared-module/synthio/__init__.c | 154 +- tests/circuitpython/miditrack.py.exp | 4 +- .../circuitpython/synth_note_amplitude.py.exp | 2018 ++++---- tests/circuitpython/synth_note_bend.py.exp | 1938 ++++---- .../circuitpython/synth_note_envelope.py.exp | 2018 ++++---- tests/circuitpython/synth_note_ring.py.exp | 4048 ++++++++--------- tests/circuitpython/synthesizer.py.exp | 42 +- tests/circuitpython/synthesizer_note.py.exp | 2 +- 10 files changed, 5127 insertions(+), 5142 deletions(-) diff --git a/shared-module/synthio/Biquad.c b/shared-module/synthio/Biquad.c index d6cdb3168f..006f596a19 100644 --- a/shared-module/synthio/Biquad.c +++ b/shared-module/synthio/Biquad.c @@ -111,38 +111,33 @@ void synthio_biquad_filter_assign(biquad_filter_state *st, mp_obj_t biquad_obj) } void synthio_biquad_filter_reset(biquad_filter_state *st) { - memset(&st->x, 0, 8 * sizeof(int16_t)); + memset(&st->x, 0, 4 * sizeof(int16_t)); } -void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out0, const int32_t *in0, size_t n0, size_t n_channels) { +void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *buffer, size_t n_samples) { int32_t a1 = st->a1; int32_t a2 = st->a2; int32_t b0 = st->b0; int32_t b1 = st->b1; int32_t b2 = st->b2; - for (size_t i = 0; i < n_channels; i++) { - const int32_t *in = in0 + i; - int32_t *out = out0 + i; + int32_t x0 = st->x[0]; + int32_t x1 = st->x[1]; + int32_t y0 = st->y[0]; + int32_t y1 = st->y[1]; - int32_t x0 = st->x[i][0]; - int32_t x1 = st->x[i][1]; - int32_t y0 = st->y[i][0]; - int32_t y1 = st->y[i][1]; + for (size_t n = n_samples; n; --n, ++buffer) { + int32_t input = *buffer; + int32_t output = (b0 * input + b1 * x0 + b2 * x1 - a1 * y0 - a2 * y1 + (1 << (BIQUAD_SHIFT - 1))) >> BIQUAD_SHIFT; - for (size_t n = n0; n; --n, in += n_channels, out += n_channels) { - int32_t input = *in; - int32_t output = (b0 * input + b1 * x0 + b2 * x1 - a1 * y0 - a2 * y1 + (1 << (BIQUAD_SHIFT - 1))) >> BIQUAD_SHIFT; - - x1 = x0; - x0 = input; - y1 = y0; - y0 = output; - *out += output; - } - st->x[i][0] = x0; - st->x[i][1] = x1; - st->y[i][0] = y0; - st->y[i][1] = y1; + x1 = x0; + x0 = input; + y1 = y0; + y0 = output; + *buffer = output; } + st->x[0] = x0; + st->x[1] = x1; + st->y[0] = y0; + st->y[1] = y1; } diff --git a/shared-module/synthio/Biquad.h b/shared-module/synthio/Biquad.h index 1c0005ab47..1ae7658131 100644 --- a/shared-module/synthio/Biquad.h +++ b/shared-module/synthio/Biquad.h @@ -30,9 +30,9 @@ typedef struct { int32_t a1, a2, b0, b1, b2; - int32_t x[2][2], y[2][2]; + int32_t x[2], y[2]; } biquad_filter_state; void synthio_biquad_filter_assign(biquad_filter_state *st, mp_obj_t biquad_obj); void synthio_biquad_filter_reset(biquad_filter_state *st); -void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *out, const int32_t *in, size_t n_samples, size_t n_channels); +void synthio_biquad_filter_samples(biquad_filter_state *st, int32_t *buffer, size_t n_samples); diff --git a/shared-module/synthio/__init__.c b/shared-module/synthio/__init__.c index 90540162b6..4929240d3b 100644 --- a/shared-module/synthio/__init__.c +++ b/shared-module/synthio/__init__.c @@ -172,24 +172,11 @@ int16_t mix_down_sample(int32_t sample) { return sample; } -static void synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *out_buffer32, int16_t dur) { +static bool synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *out_buffer32, int16_t dur, uint16_t loudness[2]) { mp_obj_t note_obj = synth->span.note_obj[chan]; - if (note_obj == SYNTHIO_SILENCE) { - synth->accum[chan] = 0; - return; - } - - if (synth->envelope_state[chan].level == 0) { - // note is truly finished, but we only just noticed - synth->span.note_obj[chan] = SYNTHIO_SILENCE; - return; - } - int32_t sample_rate = synth->sample_rate; - // adjust loudness by envelope - uint16_t loudness[2] = {synth->envelope_state[chan].level,synth->envelope_state[chan].level}; uint32_t dds_rate; const int16_t *waveform = synth->waveform_bufinfo.buf; @@ -228,33 +215,37 @@ static void synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *ou } } - int synth_chan = synth->channel_count; - if (ring_dds_rate) { - uint32_t lim = waveform_length << SYNTHIO_FREQUENCY_SHIFT; - uint32_t accum = synth->accum[chan]; + uint32_t lim = waveform_length << SYNTHIO_FREQUENCY_SHIFT; + uint32_t accum = synth->accum[chan]; - if (dds_rate > lim / 2) { - // beyond nyquist, can't play note - return; - } + if (dds_rate > lim / 2) { + // beyond nyquist, can't play note + return false; + } - // can happen if note waveform gets set mid-note, but the expensive modulo is usually avoided + // can happen if note waveform gets set mid-note, but the expensive modulo is usually avoided + if (accum > lim) { + accum %= lim; + } + + // first, fill with waveform + for (uint16_t i = 0; i < dur; i++) { + accum += dds_rate; + // because dds_rate is low enough, the subtraction is guaranteed to go back into range, no expensive modulo needed if (accum > lim) { - accum %= lim; + accum -= lim; } + int16_t idx = accum >> SYNTHIO_FREQUENCY_SHIFT; + out_buffer32[i] = waveform[idx]; + } + synth->accum[chan] = accum; - int32_t ring_buffer[dur]; - // first, fill with waveform - for (uint16_t i = 0; i < dur; i++) { - accum += dds_rate; - // because dds_rate is low enough, the subtraction is guaranteed to go back into range, no expensive modulo needed - if (accum > lim) { - accum -= lim; - } - int16_t idx = accum >> SYNTHIO_FREQUENCY_SHIFT; - ring_buffer[i] = waveform[idx]; + if (ring_dds_rate) { + if (ring_dds_rate > lim / 2) { + // beyond nyquist, can't play ring (but did synth main sound so + // return true) + return true; } - synth->accum[chan] = accum; // now modulate by ring and accumulate accum = synth->ring_accum[chan]; @@ -265,49 +256,19 @@ static void synth_note_into_buffer(synthio_synth_t *synth, int chan, int32_t *ou accum %= lim; } - for (uint16_t i = 0, j = 0; i < dur; i++) { + for (uint16_t i = 0; i < dur; i++) { accum += ring_dds_rate; // because dds_rate is low enough, the subtraction is guaranteed to go back into range, no expensive modulo needed if (accum > lim) { accum -= lim; } int16_t idx = accum >> SYNTHIO_FREQUENCY_SHIFT; - int16_t wi = (ring_waveform[idx] * ring_buffer[i]) / 32768; - for (int c = 0; c < synth_chan; c++) { - out_buffer32[j] += (wi * loudness[c]) / 32768; - j++; - } + int16_t wi = (ring_waveform[idx] * out_buffer32[i]) / 32768; + out_buffer32[i] = wi; } synth->ring_accum[chan] = accum; - } else { - uint32_t lim = waveform_length << SYNTHIO_FREQUENCY_SHIFT; - uint32_t accum = synth->accum[chan]; - - if (dds_rate > lim / 2) { - // beyond nyquist, can't play note - return; - } - - // can happen if note waveform gets set mid-note, but the expensive modulo is usually avoided - if (accum > lim) { - accum %= lim; - } - - for (uint16_t i = 0, j = 0; i < dur; i++) { - accum += dds_rate; - // because dds_rate is low enough, the subtraction is guaranteed to go back into range, no expensive modulo needed - if (accum > lim) { - accum -= lim; - } - int16_t idx = accum >> SYNTHIO_FREQUENCY_SHIFT; - int16_t wi = waveform[idx]; - for (int c = 0; c < synth_chan; c++) { - out_buffer32[j] += (wi * loudness[c]) / 65536; - j++; - } - } - synth->accum[chan] = accum; } + return true; } STATIC mp_obj_t synthio_synth_get_note_filter(mp_obj_t note_obj) { @@ -321,6 +282,19 @@ STATIC mp_obj_t synthio_synth_get_note_filter(mp_obj_t note_obj) { return mp_const_none; } +STATIC void sum_with_loudness(int32_t *out_buffer32, int32_t *tmp_buffer32, uint16_t loudness[2], size_t dur, int synth_chan) { + if (synth_chan == 1) { + for (size_t i = 0; i < dur; i++) { + *out_buffer32++ += (*tmp_buffer32++ *loudness[0]) >> 16; + } + } else { + for (size_t i = 0; i < dur; i++) { + *out_buffer32++ += (*tmp_buffer32 * loudness[0]) >> 16; + *out_buffer32++ += (*tmp_buffer32++ *loudness[1]) >> 16; + } + } +} + void synthio_synth_synthesize(synthio_synth_t *synth, uint8_t **bufptr, uint32_t *buffer_length, uint8_t channel) { if (channel == synth->other_channel) { @@ -338,28 +312,44 @@ void synthio_synth_synthesize(synthio_synth_t *synth, uint8_t **bufptr, uint32_t uint16_t dur = MIN(SYNTHIO_MAX_DUR, synth->span.dur); synth->span.dur -= dur; - int32_t out_buffer32[dur * synth->channel_count]; - memset(out_buffer32, 0, sizeof(out_buffer32)); + int32_t out_buffer32[SYNTHIO_MAX_DUR * synth->channel_count]; + int32_t tmp_buffer32[SYNTHIO_MAX_DUR]; + memset(out_buffer32, 0, synth->channel_count * dur * sizeof(int32_t)); for (int chan = 0; chan < CIRCUITPY_SYNTHIO_MAX_CHANNELS; chan++) { mp_obj_t note_obj = synth->span.note_obj[chan]; - mp_obj_t filter_obj = synthio_synth_get_note_filter(note_obj); - if (filter_obj == mp_const_none) { - synth_note_into_buffer(synth, chan, out_buffer32, dur); - } else { - synthio_note_obj_t *note = MP_OBJ_TO_PTR(note_obj); - int32_t filter_buffer32[dur * synth->channel_count]; - memset(filter_buffer32, 0, sizeof(filter_buffer32)); - - synth_note_into_buffer(synth, chan, filter_buffer32, dur); - synthio_biquad_filter_samples(¬e->filter_state, out_buffer32, filter_buffer32, dur, synth->channel_count); + if (note_obj == SYNTHIO_SILENCE) { + continue; } + + if (synth->envelope_state[chan].level == 0) { + // note is truly finished, but we only just noticed + synth->span.note_obj[chan] = SYNTHIO_SILENCE; + continue; + } + + uint16_t loudness[2] = {synth->envelope_state[chan].level,synth->envelope_state[chan].level}; + + if (!synth_note_into_buffer(synth, chan, tmp_buffer32, dur, loudness)) { + // for some other reason, such as being above nyquist, note + // couldn't be synthed, so don't filter or sum it in + continue; + } + + mp_obj_t filter_obj = synthio_synth_get_note_filter(note_obj); + if (filter_obj != mp_const_none) { + synthio_note_obj_t *note = MP_OBJ_TO_PTR(note_obj); + synthio_biquad_filter_samples(¬e->filter_state, tmp_buffer32, dur); + } + + // adjust loudness by envelope + sum_with_loudness(out_buffer32, tmp_buffer32, loudness, dur, synth->channel_count); } int16_t *out_buffer16 = (int16_t *)(void *)synth->buffers[synth->buffer_index]; // mix down audio - for (size_t i = 0; i < MP_ARRAY_SIZE(out_buffer32); i++) { + for (size_t i = 0; i < dur * synth->channel_count; i++) { int32_t sample = out_buffer32[i]; out_buffer16[i] = mix_down_sample(sample); } diff --git a/tests/circuitpython/miditrack.py.exp b/tests/circuitpython/miditrack.py.exp index 22a78e5445..5aedd79a6b 100644 --- a/tests/circuitpython/miditrack.py.exp +++ b/tests/circuitpython/miditrack.py.exp @@ -1,4 +1,4 @@ (0, 1, 512, 1) -1 [-16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383] +1 [-16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, -16384, 16383, 16383] (0, 1, 512, 1) -1 [0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16383, -16383, -16383, -16383, -16383, -16383, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16383, -16383, -16383, -16383, -16383, -16383, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16383, -16383, -16383, -16383, -16383, -16383, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, 0, -16383, -16383, -16383, -16383, -16383, -16383, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16383, -16383, -16383, -16383, -16383, -16383, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16383, -16383, -16383, -16383, -16383, -16383, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16383, -16383, -16383, -16383, -16383, -16383, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16383, -16383, -16383, -16383, -16383, -16383, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16383, -16383, -16383, -16383, -16383, -16383, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16383, -16383, -16383, -16383, -16383, -16383, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0] +1 [0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16384, -16384, -16384, -16384, -16384, -16384, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16384, -16384, -16384, -16384, -16384, -16384, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16384, -16384, -16384, -16384, -16384, -16384, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, 0, -16384, -16384, -16384, -16384, -16384, -16384, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16384, -16384, -16384, -16384, -16384, -16384, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16384, -16384, -16384, -16384, -16384, -16384, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16384, -16384, -16384, -16384, -16384, -16384, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16384, -16384, -16384, -16384, -16384, -16384, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16384, -16384, -16384, -16384, -16384, -16384, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0, 0, 0, 0, 0, -16384, -16384, -16384, -16384, -16384, -16384, 0, 0, 0, 0, 0, 0, 16383, 16383, 16383, 16383, 16383, 16383, 0, 0] diff --git a/tests/circuitpython/synth_note_amplitude.py.exp b/tests/circuitpython/synth_note_amplitude.py.exp index d4c7d0adc2..c490380cb3 100644 --- a/tests/circuitpython/synth_note_amplitude.py.exp +++ b/tests/circuitpython/synth_note_amplitude.py.exp @@ -29,37 +29,37 @@ 0.0035 0.034515380859375 0.302396875 0.003625 0.0189208984375 0.302396875 0.00375 0.004730224609375 0.302396875 -0.003875 -0.01104736328125 0.302396875 -0.004 -0.02520751953125 0.302396875 -0.004125 -0.0406494140625 0.302396875 -0.00425 -0.055633544921875 0.302396875 -0.004375000000000001 -0.068603515625 0.302396875 -0.004500000000000001 -0.08233642578125 0.302396875 -0.004625 -0.093902587890625 0.302396875 -0.00475 -0.105743408203125 0.302396875 -0.004875 -0.116455078125 0.302396875 -0.005 -0.125030517578125 0.302396875 -0.005125000000000001 -0.133209228515625 0.302396875 -0.00525 -0.13934326171875 0.302396875 -0.005375000000000001 -0.14471435546875 0.302396875 -0.005499999999999999 -0.14849853515625 0.302396875 -0.005625 -0.150482177734375 0.302396875 -0.00575 -0.151153564453125 0.302396875 -0.005874999999999999 -0.15032958984375 0.302396875 -0.006 -0.147857666015625 0.302396875 -0.006125 -0.143768310546875 0.302396875 -0.00625 -0.13873291015625 0.302396875 -0.006375 -0.131683349609375 0.302396875 -0.0065 -0.124114990234375 0.302396875 -0.006625000000000001 -0.114410400390625 0.302396875 -0.00675 -0.103485107421875 0.302396875 -0.006875 -0.0926513671875 0.302396875 -0.007000000000000001 -0.07965087890625 0.302396875 -0.007125000000000002 -0.06719970703125 0.302396875 -0.007250000000000001 -0.05267333984375 0.302396875 -0.007375 -0.037567138671875 0.302396875 -0.0075 -0.02362060546875 0.302396875 -0.007625 -0.007904052734375 0.302396875 +0.003875 -0.011077880859375 0.302396875 +0.004 -0.025238037109375 0.302396875 +0.004125 -0.040679931640625 0.302396875 +0.00425 -0.0556640625 0.302396875 +0.004375000000000001 -0.068634033203125 0.302396875 +0.004500000000000001 -0.082366943359375 0.302396875 +0.004625 -0.09393310546875 0.302396875 +0.00475 -0.10577392578125 0.302396875 +0.004875 -0.116485595703125 0.302396875 +0.005 -0.12506103515625 0.302396875 +0.005125000000000001 -0.13323974609375 0.302396875 +0.00525 -0.139373779296875 0.302396875 +0.005375000000000001 -0.144744873046875 0.302396875 +0.005499999999999999 -0.148529052734375 0.302396875 +0.005625 -0.1505126953125 0.302396875 +0.00575 -0.15118408203125 0.302396875 +0.005874999999999999 -0.150360107421875 0.302396875 +0.006 -0.14788818359375 0.302396875 +0.006125 -0.143798828125 0.302396875 +0.00625 -0.138763427734375 0.302396875 +0.006375 -0.1317138671875 0.302396875 +0.0065 -0.1241455078125 0.302396875 +0.006625000000000001 -0.11444091796875 0.302396875 +0.00675 -0.103515625 0.302396875 +0.006875 -0.092681884765625 0.302396875 +0.007000000000000001 -0.079681396484375 0.302396875 +0.007125000000000002 -0.067230224609375 0.302396875 +0.007250000000000001 -0.052703857421875 0.302396875 +0.007375 -0.03759765625 0.302396875 +0.0075 -0.023651123046875 0.302396875 +0.007625 -0.0079345703125 0.302396875 0.00775 0.006317138671875 0.302396875 0.007875 0.022064208984375 0.302396875 0.008 0.037567138671875 0.302396875 @@ -91,37 +91,37 @@ 0.01125 0.042144775390625 0.302396875 0.011375 0.026763916015625 0.302396875 0.0115 0.01263427734375 0.302396875 -0.011625 -0.003143310546875 0.302396875 -0.01175 -0.0189208984375 0.302396875 -0.011875 -0.032958984375 0.302396875 -0.012 -0.0482177734375 0.302396875 -0.012125 -0.06146240234375 0.302396875 -0.01225 -0.0755615234375 0.302396875 -0.012375 -0.088836669921875 0.302396875 -0.0125 -0.0999755859375 0.302396875 -0.012625 -0.11126708984375 0.302396875 -0.01275 -0.120391845703125 0.302396875 -0.012875 -0.129302978515625 0.302396875 -0.013 -0.13677978515625 0.302396875 -0.013125 -0.1422119140625 0.302396875 -0.01325 -0.14678955078125 0.302396875 -0.013375 -0.1495361328125 0.302396875 -0.0135 -0.151031494140625 0.302396875 -0.013625 -0.15087890625 0.302396875 -0.01375 -0.1492919921875 0.302396875 -0.013875 -0.14599609375 0.302396875 -0.014 -0.141693115234375 0.302396875 -0.014125 -0.135406494140625 0.302396875 -0.01425 -0.12762451171875 0.302396875 -0.014375 -0.11944580078125 0.302396875 -0.0145 -0.109100341796875 0.302396875 -0.014625 -0.0987548828125 0.302396875 -0.01475 -0.086273193359375 0.302396875 -0.014875 -0.07281494140625 0.302396875 -0.015 -0.060028076171875 0.302396875 -0.015125 -0.045196533203125 0.302396875 -0.01525 -0.031402587890625 0.302396875 -0.015375 -0.015777587890625 0.302396875 +0.011625 -0.003173828125 0.302396875 +0.01175 -0.018951416015625 0.302396875 +0.011875 -0.032989501953125 0.302396875 +0.012 -0.048248291015625 0.302396875 +0.012125 -0.061492919921875 0.302396875 +0.01225 -0.075592041015625 0.302396875 +0.012375 -0.0888671875 0.302396875 +0.0125 -0.100006103515625 0.302396875 +0.012625 -0.111297607421875 0.302396875 +0.01275 -0.12042236328125 0.302396875 +0.012875 -0.12933349609375 0.302396875 +0.013 -0.136810302734375 0.302396875 +0.013125 -0.142242431640625 0.302396875 +0.01325 -0.146820068359375 0.302396875 +0.013375 -0.149566650390625 0.302396875 +0.0135 -0.15106201171875 0.302396875 +0.013625 -0.150909423828125 0.302396875 +0.01375 -0.149322509765625 0.302396875 +0.013875 -0.146026611328125 0.302396875 +0.014 -0.1417236328125 0.302396875 +0.014125 -0.13543701171875 0.302396875 +0.01425 -0.127655029296875 0.302396875 +0.014375 -0.119476318359375 0.302396875 +0.0145 -0.109130859375 0.302396875 +0.014625 -0.098785400390625 0.302396875 +0.01475 -0.0863037109375 0.302396875 +0.014875 -0.072845458984375 0.302396875 +0.015 -0.06005859375 0.302396875 +0.015125 -0.04522705078125 0.302396875 +0.01525 -0.03143310546875 0.302396875 +0.015375 -0.01580810546875 0.302396875 0.0155 0.0 0.302396875 0.015625 0.01422119140625 0.302396875 0.01575 0.029876708984375 0.302396875 @@ -154,37 +154,37 @@ 0.019125 0.034515380859375 0.302396875 0.01925 0.0189208984375 0.302396875 0.019375 0.004730224609375 0.302396875 -0.0195 -0.01104736328125 0.302396875 -0.019625 -0.02520751953125 0.302396875 -0.01975 -0.0406494140625 0.302396875 -0.019875 -0.055633544921875 0.302396875 -0.02 -0.068603515625 0.302396875 -0.020125 -0.08233642578125 0.302396875 -0.02025 -0.093902587890625 0.302396875 -0.020375 -0.105743408203125 0.302396875 -0.0205 -0.116455078125 0.302396875 -0.020625 -0.125030517578125 0.302396875 -0.02075 -0.133209228515625 0.302396875 -0.020875 -0.13934326171875 0.302396875 -0.021 -0.14471435546875 0.302396875 -0.021125 -0.14849853515625 0.302396875 -0.02125 -0.150482177734375 0.302396875 -0.021375 -0.151153564453125 0.302396875 -0.0215 -0.15032958984375 0.302396875 -0.021625 -0.147857666015625 0.302396875 -0.02175 -0.143768310546875 0.302396875 -0.021875 -0.13873291015625 0.302396875 -0.022 -0.131683349609375 0.302396875 -0.022125 -0.124114990234375 0.302396875 -0.02225 -0.114410400390625 0.302396875 -0.022375 -0.103485107421875 0.302396875 -0.0225 -0.0926513671875 0.302396875 -0.022625 -0.07965087890625 0.302396875 -0.02275 -0.06719970703125 0.302396875 -0.022875 -0.05267333984375 0.302396875 -0.023 -0.037567138671875 0.302396875 -0.023125 -0.02362060546875 0.302396875 -0.02325 -0.007904052734375 0.302396875 +0.0195 -0.011077880859375 0.302396875 +0.019625 -0.025238037109375 0.302396875 +0.01975 -0.040679931640625 0.302396875 +0.019875 -0.0556640625 0.302396875 +0.02 -0.068634033203125 0.302396875 +0.020125 -0.082366943359375 0.302396875 +0.02025 -0.09393310546875 0.302396875 +0.020375 -0.10577392578125 0.302396875 +0.0205 -0.116485595703125 0.302396875 +0.020625 -0.12506103515625 0.302396875 +0.02075 -0.13323974609375 0.302396875 +0.020875 -0.139373779296875 0.302396875 +0.021 -0.144744873046875 0.302396875 +0.021125 -0.148529052734375 0.302396875 +0.02125 -0.1505126953125 0.302396875 +0.021375 -0.15118408203125 0.302396875 +0.0215 -0.150360107421875 0.302396875 +0.021625 -0.14788818359375 0.302396875 +0.02175 -0.143798828125 0.302396875 +0.021875 -0.138763427734375 0.302396875 +0.022 -0.1317138671875 0.302396875 +0.022125 -0.1241455078125 0.302396875 +0.02225 -0.11444091796875 0.302396875 +0.022375 -0.103515625 0.302396875 +0.0225 -0.092681884765625 0.302396875 +0.022625 -0.079681396484375 0.302396875 +0.02275 -0.067230224609375 0.302396875 +0.022875 -0.052703857421875 0.302396875 +0.023 -0.03759765625 0.302396875 +0.023125 -0.023651123046875 0.302396875 +0.02325 -0.0079345703125 0.302396875 0.023375 0.006317138671875 0.302396875 0.0235 0.022064208984375 0.302396875 0.023625 0.037567138671875 0.302396875 @@ -216,37 +216,37 @@ 0.026875 0.042144775390625 0.302396875 0.027 0.026763916015625 0.302396875 0.027125 0.01263427734375 0.302396875 -0.02725 -0.003143310546875 0.302396875 -0.027375 -0.0189208984375 0.302396875 -0.0275 -0.032958984375 0.302396875 -0.027625 -0.0482177734375 0.302396875 -0.02775 -0.06146240234375 0.302396875 -0.027875 -0.0755615234375 0.302396875 -0.028 -0.088836669921875 0.302396875 -0.028125 -0.0999755859375 0.302396875 -0.02825 -0.11126708984375 0.302396875 -0.028375 -0.120391845703125 0.302396875 -0.02850000000000001 -0.129302978515625 0.302396875 -0.028625 -0.13677978515625 0.302396875 -0.02875 -0.1422119140625 0.302396875 -0.028875 -0.14678955078125 0.302396875 -0.029 -0.1495361328125 0.302396875 -0.029125 -0.151031494140625 0.302396875 -0.02925 -0.15087890625 0.302396875 -0.029375 -0.1492919921875 0.302396875 -0.0295 -0.14599609375 0.302396875 -0.029625 -0.141693115234375 0.302396875 -0.02975000000000001 -0.135406494140625 0.302396875 -0.029875 -0.12762451171875 0.302396875 -0.03 -0.11944580078125 0.302396875 -0.030125 -0.109100341796875 0.302396875 -0.03025 -0.0987548828125 0.302396875 -0.030375 -0.086273193359375 0.302396875 -0.0305 -0.07281494140625 0.302396875 -0.030625 -0.060028076171875 0.302396875 -0.03075 -0.045196533203125 0.302396875 -0.03087499999999999 -0.031402587890625 0.302396875 -0.031 -0.015777587890625 0.302396875 +0.02725 -0.003173828125 0.302396875 +0.027375 -0.018951416015625 0.302396875 +0.0275 -0.032989501953125 0.302396875 +0.027625 -0.048248291015625 0.302396875 +0.02775 -0.061492919921875 0.302396875 +0.027875 -0.075592041015625 0.302396875 +0.028 -0.0888671875 0.302396875 +0.028125 -0.100006103515625 0.302396875 +0.02825 -0.111297607421875 0.302396875 +0.028375 -0.12042236328125 0.302396875 +0.02850000000000001 -0.12933349609375 0.302396875 +0.028625 -0.136810302734375 0.302396875 +0.02875 -0.142242431640625 0.302396875 +0.028875 -0.146820068359375 0.302396875 +0.029 -0.149566650390625 0.302396875 +0.029125 -0.15106201171875 0.302396875 +0.02925 -0.150909423828125 0.302396875 +0.029375 -0.149322509765625 0.302396875 +0.0295 -0.146026611328125 0.302396875 +0.029625 -0.1417236328125 0.302396875 +0.02975000000000001 -0.13543701171875 0.302396875 +0.029875 -0.127655029296875 0.302396875 +0.03 -0.119476318359375 0.302396875 +0.030125 -0.109130859375 0.302396875 +0.03025 -0.098785400390625 0.302396875 +0.030375 -0.0863037109375 0.302396875 +0.0305 -0.072845458984375 0.302396875 +0.030625 -0.06005859375 0.302396875 +0.03075 -0.04522705078125 0.302396875 +0.03087499999999999 -0.03143310546875 0.302396875 +0.031 -0.01580810546875 0.302396875 0.031125 0.0 0.302396875 0.03125 0.01422119140625 0.302396875 0.031375 0.029876708984375 0.302396875 @@ -279,37 +279,37 @@ 0.03475000000000001 0.04620361328125 0.4047937500000001 0.034875 0.02532958984375 0.4047937500000001 0.035 0.00634765625 0.4047937500000001 -0.03512500000000001 -0.014801025390625 0.4047937500000001 -0.03525 -0.033721923828125 0.4047937500000001 -0.035375 -0.054412841796875 0.4047937500000001 -0.0355 -0.074493408203125 0.4047937500000001 -0.03562500000000001 -0.09185791015625 0.4047937500000001 -0.03575 -0.110198974609375 0.4047937500000001 -0.035875 -0.12567138671875 0.4047937500000001 -0.03600000000000001 -0.141571044921875 0.4047937500000001 -0.036125 -0.155914306640625 0.4047937500000001 -0.03625 -0.1673583984375 0.4047937500000001 -0.036375 -0.1783447265625 0.4047937500000001 -0.0365 -0.186553955078125 0.4047937500000001 -0.036625 -0.1937255859375 0.4047937500000001 -0.03675 -0.198760986328125 0.4047937500000001 -0.036875 -0.201446533203125 0.4047937500000001 -0.037 -0.20233154296875 0.4047937500000001 -0.03712499999999999 -0.20123291015625 0.4047937500000001 -0.03725 -0.19793701171875 0.4047937500000001 -0.037375 -0.19244384765625 0.4047937500000001 -0.0375 -0.185699462890625 0.4047937500000001 -0.037625 -0.176300048828125 0.4047937500000001 -0.03775 -0.166168212890625 0.4047937500000001 -0.037875 -0.153167724609375 0.4047937500000001 -0.038 -0.138519287109375 0.4047937500000001 -0.038125 -0.1240234375 0.4047937500000001 -0.03825 -0.10662841796875 0.4047937500000001 -0.038375 -0.0899658203125 0.4047937500000001 -0.0385 -0.070526123046875 0.4047937500000001 -0.038625 -0.05029296875 0.4047937500000001 -0.03875 -0.031646728515625 0.4047937500000001 -0.038875 -0.01055908203125 0.4047937500000001 +0.03512500000000001 -0.01483154296875 0.4047937500000001 +0.03525 -0.03375244140625 0.4047937500000001 +0.035375 -0.054443359375 0.4047937500000001 +0.0355 -0.07452392578125 0.4047937500000001 +0.03562500000000001 -0.091888427734375 0.4047937500000001 +0.03575 -0.1102294921875 0.4047937500000001 +0.035875 -0.125701904296875 0.4047937500000001 +0.03600000000000001 -0.1416015625 0.4047937500000001 +0.036125 -0.15594482421875 0.4047937500000001 +0.03625 -0.167388916015625 0.4047937500000001 +0.036375 -0.178375244140625 0.4047937500000001 +0.0365 -0.18658447265625 0.4047937500000001 +0.036625 -0.193756103515625 0.4047937500000001 +0.03675 -0.19879150390625 0.4047937500000001 +0.036875 -0.20147705078125 0.4047937500000001 +0.037 -0.202362060546875 0.4047937500000001 +0.03712499999999999 -0.201263427734375 0.4047937500000001 +0.03725 -0.197967529296875 0.4047937500000001 +0.037375 -0.192474365234375 0.4047937500000001 +0.0375 -0.18572998046875 0.4047937500000001 +0.037625 -0.17633056640625 0.4047937500000001 +0.03775 -0.16619873046875 0.4047937500000001 +0.037875 -0.1531982421875 0.4047937500000001 +0.038 -0.1385498046875 0.4047937500000001 +0.038125 -0.124053955078125 0.4047937500000001 +0.03825 -0.106658935546875 0.4047937500000001 +0.038375 -0.089996337890625 0.4047937500000001 +0.0385 -0.070556640625 0.4047937500000001 +0.038625 -0.050323486328125 0.4047937500000001 +0.03875 -0.03167724609375 0.4047937500000001 +0.038875 -0.010589599609375 0.4047937500000001 0.039 0.008453369140625 0.4047937500000001 0.039125 0.029541015625 0.4047937500000001 0.03925 0.05029296875 0.4047937500000001 @@ -341,37 +341,37 @@ 0.0425 0.056427001953125 0.4047937500000001 0.042625 0.03582763671875 0.4047937500000001 0.04275 0.01690673828125 0.4047937500000001 -0.04287500000000001 -0.00421142578125 0.4047937500000001 -0.04300000000000001 -0.02532958984375 0.4047937500000001 -0.043125 -0.04412841796875 0.4047937500000001 -0.04325 -0.064544677734375 0.4047937500000001 -0.043375 -0.082305908203125 0.4047937500000001 -0.04350000000000001 -0.101165771484375 0.4047937500000001 -0.04362500000000001 -0.118927001953125 0.4047937500000001 -0.04375000000000001 -0.133819580078125 0.4047937500000001 -0.043875 -0.148956298828125 0.4047937500000001 -0.04399999999999999 -0.161163330078125 0.4047937500000001 -0.044125 -0.173095703125 0.4047937500000001 -0.04425 -0.18310546875 0.4047937500000001 -0.044375 -0.190399169921875 0.4047937500000001 -0.04449999999999999 -0.196502685546875 0.4047937500000001 -0.04462499999999999 -0.2001953125 0.4047937500000001 -0.04475 -0.202178955078125 0.4047937500000001 -0.044875 -0.20196533203125 0.4047937500000001 -0.045 -0.199859619140625 0.4047937500000001 -0.045125 -0.195465087890625 0.4047937500000001 -0.04525 -0.189666748046875 0.4047937500000001 -0.045375 -0.181243896484375 0.4047937500000001 -0.0455 -0.17083740234375 0.4047937500000001 -0.045625 -0.159881591796875 0.4047937500000001 -0.04575 -0.14605712890625 0.4047937500000001 -0.045875 -0.1322021484375 0.4047937500000001 -0.046 -0.115478515625 0.4047937500000001 -0.046125 -0.09747314453125 0.4047937500000001 -0.04625 -0.080352783203125 0.4047937500000001 -0.046375 -0.06048583984375 0.4047937500000001 -0.04649999999999999 -0.04205322265625 0.4047937500000001 -0.046625 -0.021148681640625 0.4047937500000001 +0.04287500000000001 -0.004241943359375 0.4047937500000001 +0.04300000000000001 -0.025360107421875 0.4047937500000001 +0.043125 -0.044158935546875 0.4047937500000001 +0.04325 -0.0645751953125 0.4047937500000001 +0.043375 -0.08233642578125 0.4047937500000001 +0.04350000000000001 -0.1011962890625 0.4047937500000001 +0.04362500000000001 -0.11895751953125 0.4047937500000001 +0.04375000000000001 -0.13385009765625 0.4047937500000001 +0.043875 -0.14898681640625 0.4047937500000001 +0.04399999999999999 -0.16119384765625 0.4047937500000001 +0.044125 -0.173126220703125 0.4047937500000001 +0.04425 -0.183135986328125 0.4047937500000001 +0.044375 -0.1904296875 0.4047937500000001 +0.04449999999999999 -0.196533203125 0.4047937500000001 +0.04462499999999999 -0.200225830078125 0.4047937500000001 +0.04475 -0.20220947265625 0.4047937500000001 +0.044875 -0.201995849609375 0.4047937500000001 +0.045 -0.19989013671875 0.4047937500000001 +0.045125 -0.19549560546875 0.4047937500000001 +0.04525 -0.189697265625 0.4047937500000001 +0.045375 -0.1812744140625 0.4047937500000001 +0.0455 -0.170867919921875 0.4047937500000001 +0.045625 -0.159912109375 0.4047937500000001 +0.04575 -0.146087646484375 0.4047937500000001 +0.045875 -0.132232666015625 0.4047937500000001 +0.046 -0.115509033203125 0.4047937500000001 +0.046125 -0.097503662109375 0.4047937500000001 +0.04625 -0.08038330078125 0.4047937500000001 +0.046375 -0.060516357421875 0.4047937500000001 +0.04649999999999999 -0.042083740234375 0.4047937500000001 +0.046625 -0.02117919921875 0.4047937500000001 0.04675000000000001 0.0 0.4047937500000001 0.046875 0.019012451171875 0.4047937500000001 0.04699999999999999 0.03997802734375 0.4047937500000001 @@ -404,37 +404,37 @@ 0.05037500000000001 0.04620361328125 0.4047937500000001 0.0505 0.02532958984375 0.4047937500000001 0.05062500000000001 0.00634765625 0.4047937500000001 -0.05075000000000001 -0.014801025390625 0.4047937500000001 -0.050875 -0.033721923828125 0.4047937500000001 -0.051 -0.054412841796875 0.4047937500000001 -0.051125 -0.074493408203125 0.4047937500000001 -0.05125000000000001 -0.09185791015625 0.4047937500000001 -0.051375 -0.110198974609375 0.4047937500000001 -0.0515 -0.12567138671875 0.4047937500000001 -0.05162500000000001 -0.141571044921875 0.4047937500000001 -0.05175000000000001 -0.155914306640625 0.4047937500000001 -0.051875 -0.1673583984375 0.4047937500000001 -0.052 -0.1783447265625 0.4047937500000001 -0.052125 -0.186553955078125 0.4047937500000001 -0.05225 -0.1937255859375 0.4047937500000001 -0.05237499999999999 -0.198760986328125 0.4047937500000001 -0.0525 -0.201446533203125 0.4047937500000001 -0.052625 -0.20233154296875 0.4047937500000001 -0.05274999999999999 -0.20123291015625 0.4047937500000001 -0.052875 -0.19793701171875 0.4047937500000001 -0.05300000000000001 -0.19244384765625 0.4047937500000001 -0.053125 -0.185699462890625 0.4047937500000001 -0.05324999999999999 -0.176300048828125 0.4047937500000001 -0.05337499999999999 -0.166168212890625 0.4047937500000001 -0.05350000000000001 -0.153167724609375 0.4047937500000001 -0.053625 -0.138519287109375 0.4047937500000001 -0.05375 -0.1240234375 0.4047937500000001 -0.05387499999999999 -0.10662841796875 0.4047937500000001 -0.054 -0.0899658203125 0.4047937500000001 -0.054125 -0.070526123046875 0.4047937500000001 -0.05425 -0.05029296875 0.4047937500000001 -0.054375 -0.031646728515625 0.4047937500000001 -0.0545 -0.01055908203125 0.4047937500000001 +0.05075000000000001 -0.01483154296875 0.4047937500000001 +0.050875 -0.03375244140625 0.4047937500000001 +0.051 -0.054443359375 0.4047937500000001 +0.051125 -0.07452392578125 0.4047937500000001 +0.05125000000000001 -0.091888427734375 0.4047937500000001 +0.051375 -0.1102294921875 0.4047937500000001 +0.0515 -0.125701904296875 0.4047937500000001 +0.05162500000000001 -0.1416015625 0.4047937500000001 +0.05175000000000001 -0.15594482421875 0.4047937500000001 +0.051875 -0.167388916015625 0.4047937500000001 +0.052 -0.178375244140625 0.4047937500000001 +0.052125 -0.18658447265625 0.4047937500000001 +0.05225 -0.193756103515625 0.4047937500000001 +0.05237499999999999 -0.19879150390625 0.4047937500000001 +0.0525 -0.20147705078125 0.4047937500000001 +0.052625 -0.202362060546875 0.4047937500000001 +0.05274999999999999 -0.201263427734375 0.4047937500000001 +0.052875 -0.197967529296875 0.4047937500000001 +0.05300000000000001 -0.192474365234375 0.4047937500000001 +0.053125 -0.18572998046875 0.4047937500000001 +0.05324999999999999 -0.17633056640625 0.4047937500000001 +0.05337499999999999 -0.16619873046875 0.4047937500000001 +0.05350000000000001 -0.1531982421875 0.4047937500000001 +0.053625 -0.1385498046875 0.4047937500000001 +0.05375 -0.124053955078125 0.4047937500000001 +0.05387499999999999 -0.106658935546875 0.4047937500000001 +0.054 -0.089996337890625 0.4047937500000001 +0.054125 -0.070556640625 0.4047937500000001 +0.05425 -0.050323486328125 0.4047937500000001 +0.054375 -0.03167724609375 0.4047937500000001 +0.0545 -0.010589599609375 0.4047937500000001 0.054625 0.008453369140625 0.4047937500000001 0.05475 0.029541015625 0.4047937500000001 0.054875 0.05029296875 0.4047937500000001 @@ -466,37 +466,37 @@ 0.058125 0.056427001953125 0.4047937500000001 0.05825 0.03582763671875 0.4047937500000001 0.058375 0.01690673828125 0.4047937500000001 -0.05850000000000001 -0.00421142578125 0.4047937500000001 -0.05862500000000001 -0.02532958984375 0.4047937500000001 -0.05875 -0.04412841796875 0.4047937500000001 -0.058875 -0.064544677734375 0.4047937500000001 -0.059 -0.082305908203125 0.4047937500000001 -0.05912500000000001 -0.101165771484375 0.4047937500000001 -0.05925000000000001 -0.118927001953125 0.4047937500000001 -0.059375 -0.133819580078125 0.4047937500000001 -0.05950000000000001 -0.148956298828125 0.4047937500000001 -0.059625 -0.161163330078125 0.4047937500000001 -0.05975000000000001 -0.173095703125 0.4047937500000001 -0.059875 -0.18310546875 0.4047937500000001 -0.06 -0.190399169921875 0.4047937500000001 -0.06012499999999999 -0.196502685546875 0.4047937500000001 -0.06025 -0.2001953125 0.4047937500000001 -0.060375 -0.202178955078125 0.4047937500000001 -0.0605 -0.20196533203125 0.4047937500000001 -0.060625 -0.199859619140625 0.4047937500000001 -0.06074999999999999 -0.195465087890625 0.4047937500000001 -0.060875 -0.189666748046875 0.4047937500000001 -0.061 -0.181243896484375 0.4047937500000001 -0.061125 -0.17083740234375 0.4047937500000001 -0.06125 -0.159881591796875 0.4047937500000001 -0.061375 -0.14605712890625 0.4047937500000001 -0.0615 -0.1322021484375 0.4047937500000001 -0.061625 -0.115478515625 0.4047937500000001 -0.06174999999999999 -0.09747314453125 0.4047937500000001 -0.061875 -0.080352783203125 0.4047937500000001 -0.062 -0.06048583984375 0.4047937500000001 -0.06212499999999999 -0.04205322265625 0.4047937500000001 -0.06225000000000001 -0.021148681640625 0.4047937500000001 +0.05850000000000001 -0.004241943359375 0.4047937500000001 +0.05862500000000001 -0.025360107421875 0.4047937500000001 +0.05875 -0.044158935546875 0.4047937500000001 +0.058875 -0.0645751953125 0.4047937500000001 +0.059 -0.08233642578125 0.4047937500000001 +0.05912500000000001 -0.1011962890625 0.4047937500000001 +0.05925000000000001 -0.11895751953125 0.4047937500000001 +0.059375 -0.13385009765625 0.4047937500000001 +0.05950000000000001 -0.14898681640625 0.4047937500000001 +0.059625 -0.16119384765625 0.4047937500000001 +0.05975000000000001 -0.173126220703125 0.4047937500000001 +0.059875 -0.183135986328125 0.4047937500000001 +0.06 -0.1904296875 0.4047937500000001 +0.06012499999999999 -0.196533203125 0.4047937500000001 +0.06025 -0.200225830078125 0.4047937500000001 +0.060375 -0.20220947265625 0.4047937500000001 +0.0605 -0.201995849609375 0.4047937500000001 +0.060625 -0.19989013671875 0.4047937500000001 +0.06074999999999999 -0.19549560546875 0.4047937500000001 +0.060875 -0.189697265625 0.4047937500000001 +0.061 -0.1812744140625 0.4047937500000001 +0.061125 -0.170867919921875 0.4047937500000001 +0.06125 -0.159912109375 0.4047937500000001 +0.061375 -0.146087646484375 0.4047937500000001 +0.0615 -0.132232666015625 0.4047937500000001 +0.061625 -0.115509033203125 0.4047937500000001 +0.06174999999999999 -0.097503662109375 0.4047937500000001 +0.061875 -0.08038330078125 0.4047937500000001 +0.062 -0.060516357421875 0.4047937500000001 +0.06212499999999999 -0.042083740234375 0.4047937500000001 +0.06225000000000001 -0.02117919921875 0.4047937500000001 0.06237500000000001 0.0 0.4047937500000001 0.0625 0.019012451171875 0.4047937500000001 0.06262499999999999 0.03997802734375 0.4047937500000001 @@ -529,37 +529,37 @@ 0.06600000000000001 0.057891845703125 0.507190625 0.066125 0.031768798828125 0.507190625 0.06625000000000001 0.0079345703125 0.507190625 -0.06637500000000001 -0.0185546875 0.507190625 -0.0665 -0.042266845703125 0.507190625 -0.066625 -0.06817626953125 0.507190625 -0.06675 -0.09332275390625 0.507190625 -0.06687500000000001 -0.1151123046875 0.507190625 -0.067 -0.138092041015625 0.507190625 -0.067125 -0.157501220703125 0.507190625 -0.06725000000000001 -0.177398681640625 0.507190625 -0.06737500000000001 -0.19537353515625 0.507190625 -0.0675 -0.209716796875 0.507190625 -0.067625 -0.22344970703125 0.507190625 -0.06775 -0.233734130859375 0.507190625 -0.06787500000000001 -0.24273681640625 0.507190625 -0.06800000000000001 -0.249053955078125 0.507190625 -0.068125 -0.25244140625 0.507190625 -0.06825000000000001 -0.2535400390625 0.507190625 -0.068375 -0.252166748046875 0.507190625 -0.06850000000000001 -0.248016357421875 0.507190625 -0.06862500000000001 -0.24114990234375 0.507190625 -0.06875 -0.232696533203125 0.507190625 -0.06887500000000001 -0.220916748046875 0.507190625 -0.069 -0.20819091796875 0.507190625 -0.06912500000000001 -0.191925048828125 0.507190625 -0.06925000000000001 -0.173553466796875 0.507190625 -0.06937500000000001 -0.1553955078125 0.507190625 -0.06950000000000001 -0.13360595703125 0.507190625 -0.069625 -0.11273193359375 0.507190625 -0.06975 -0.08837890625 0.507190625 -0.06987500000000001 -0.06304931640625 0.507190625 -0.07000000000000001 -0.039642333984375 0.507190625 -0.070125 -0.01324462890625 0.507190625 +0.06637500000000001 -0.018585205078125 0.507190625 +0.0665 -0.04229736328125 0.507190625 +0.066625 -0.068206787109375 0.507190625 +0.06675 -0.093353271484375 0.507190625 +0.06687500000000001 -0.115142822265625 0.507190625 +0.067 -0.13812255859375 0.507190625 +0.067125 -0.15753173828125 0.507190625 +0.06725000000000001 -0.17742919921875 0.507190625 +0.06737500000000001 -0.195404052734375 0.507190625 +0.0675 -0.209747314453125 0.507190625 +0.067625 -0.223480224609375 0.507190625 +0.06775 -0.2337646484375 0.507190625 +0.06787500000000001 -0.242767333984375 0.507190625 +0.06800000000000001 -0.24908447265625 0.507190625 +0.068125 -0.252471923828125 0.507190625 +0.06825000000000001 -0.253570556640625 0.507190625 +0.068375 -0.252197265625 0.507190625 +0.06850000000000001 -0.248046875 0.507190625 +0.06862500000000001 -0.241180419921875 0.507190625 +0.06875 -0.23272705078125 0.507190625 +0.06887500000000001 -0.220947265625 0.507190625 +0.069 -0.208221435546875 0.507190625 +0.06912500000000001 -0.19195556640625 0.507190625 +0.06925000000000001 -0.173583984375 0.507190625 +0.06937500000000001 -0.155426025390625 0.507190625 +0.06950000000000001 -0.133636474609375 0.507190625 +0.069625 -0.112762451171875 0.507190625 +0.06975 -0.088409423828125 0.507190625 +0.06987500000000001 -0.063079833984375 0.507190625 +0.07000000000000001 -0.0396728515625 0.507190625 +0.070125 -0.013275146484375 0.507190625 0.07025000000000001 0.010589599609375 0.507190625 0.07037500000000001 0.037017822265625 0.507190625 0.07050000000000001 0.06304931640625 0.507190625 @@ -591,37 +591,37 @@ 0.07374999999999999 0.07073974609375 0.507190625 0.073875 0.044891357421875 0.507190625 0.074 0.021209716796875 0.507190625 -0.074125 -0.005279541015625 0.507190625 -0.07424999999999999 -0.031768798828125 0.507190625 -0.07437499999999999 -0.0552978515625 0.507190625 -0.0745 -0.08087158203125 0.507190625 -0.07462499999999999 -0.103118896484375 0.507190625 -0.07475 -0.12677001953125 0.507190625 -0.07487500000000001 -0.149017333984375 0.507190625 -0.075 -0.16766357421875 0.507190625 -0.07512499999999999 -0.1866455078125 0.507190625 -0.07524999999999999 -0.20196533203125 0.507190625 -0.075375 -0.216888427734375 0.507190625 -0.0755 -0.22943115234375 0.507190625 -0.075625 -0.238555908203125 0.507190625 -0.07574999999999999 -0.246246337890625 0.507190625 -0.075875 -0.250823974609375 0.507190625 -0.076 -0.253326416015625 0.507190625 -0.076125 -0.2530517578125 0.507190625 -0.07625 -0.25042724609375 0.507190625 -0.07637499999999999 -0.244903564453125 0.507190625 -0.0765 -0.237640380859375 0.507190625 -0.076625 -0.22711181640625 0.507190625 -0.07675 -0.214080810546875 0.507190625 -0.076875 -0.200347900390625 0.507190625 -0.077 -0.183013916015625 0.507190625 -0.077125 -0.165679931640625 0.507190625 -0.07725 -0.14471435546875 0.507190625 -0.07737499999999999 -0.12213134765625 0.507190625 -0.0775 -0.100677490234375 0.507190625 -0.077625 -0.0758056640625 0.507190625 -0.07774999999999999 -0.052703857421875 0.507190625 -0.07787500000000001 -0.0264892578125 0.507190625 +0.074125 -0.00531005859375 0.507190625 +0.07424999999999999 -0.03179931640625 0.507190625 +0.07437499999999999 -0.055328369140625 0.507190625 +0.0745 -0.080902099609375 0.507190625 +0.07462499999999999 -0.1031494140625 0.507190625 +0.07475 -0.126800537109375 0.507190625 +0.07487500000000001 -0.1490478515625 0.507190625 +0.075 -0.167694091796875 0.507190625 +0.07512499999999999 -0.186676025390625 0.507190625 +0.07524999999999999 -0.201995849609375 0.507190625 +0.075375 -0.2169189453125 0.507190625 +0.0755 -0.229461669921875 0.507190625 +0.075625 -0.23858642578125 0.507190625 +0.07574999999999999 -0.24627685546875 0.507190625 +0.075875 -0.2508544921875 0.507190625 +0.076 -0.25335693359375 0.507190625 +0.076125 -0.253082275390625 0.507190625 +0.07625 -0.250457763671875 0.507190625 +0.07637499999999999 -0.24493408203125 0.507190625 +0.0765 -0.2376708984375 0.507190625 +0.076625 -0.227142333984375 0.507190625 +0.07675 -0.214111328125 0.507190625 +0.076875 -0.20037841796875 0.507190625 +0.077 -0.18304443359375 0.507190625 +0.077125 -0.16571044921875 0.507190625 +0.07725 -0.144744873046875 0.507190625 +0.07737499999999999 -0.122161865234375 0.507190625 +0.0775 -0.1007080078125 0.507190625 +0.077625 -0.075836181640625 0.507190625 +0.07774999999999999 -0.052734375 0.507190625 +0.07787500000000001 -0.026519775390625 0.507190625 0.07800000000000001 0.0 0.507190625 0.078125 0.023834228515625 0.507190625 0.07824999999999999 0.05010986328125 0.507190625 @@ -654,37 +654,37 @@ 0.081625 0.057891845703125 0.507190625 0.08175000000000001 0.031768798828125 0.507190625 0.081875 0.0079345703125 0.507190625 -0.08200000000000001 -0.0185546875 0.507190625 -0.082125 -0.042266845703125 0.507190625 -0.08225 -0.06817626953125 0.507190625 -0.08237500000000001 -0.09332275390625 0.507190625 -0.0825 -0.1151123046875 0.507190625 -0.08262500000000001 -0.138092041015625 0.507190625 -0.08275 -0.157501220703125 0.507190625 -0.08287500000000001 -0.177398681640625 0.507190625 -0.08300000000000001 -0.19537353515625 0.507190625 -0.083125 -0.209716796875 0.507190625 -0.08324999999999999 -0.22344970703125 0.507190625 -0.083375 -0.233734130859375 0.507190625 -0.08350000000000001 -0.24273681640625 0.507190625 -0.08362500000000001 -0.249053955078125 0.507190625 -0.08375 -0.25244140625 0.507190625 -0.08387500000000001 -0.2535400390625 0.507190625 -0.084 -0.252166748046875 0.507190625 -0.08412500000000001 -0.248016357421875 0.507190625 -0.08425000000000001 -0.24114990234375 0.507190625 -0.084375 -0.232696533203125 0.507190625 -0.08450000000000001 -0.220916748046875 0.507190625 -0.084625 -0.20819091796875 0.507190625 -0.08475 -0.191925048828125 0.507190625 -0.08487500000000001 -0.173553466796875 0.507190625 -0.085 -0.1553955078125 0.507190625 -0.08512500000000001 -0.13360595703125 0.507190625 -0.08525 -0.11273193359375 0.507190625 -0.085375 -0.08837890625 0.507190625 -0.08550000000000001 -0.06304931640625 0.507190625 -0.085625 -0.039642333984375 0.507190625 -0.08575000000000001 -0.01324462890625 0.507190625 +0.08200000000000001 -0.018585205078125 0.507190625 +0.082125 -0.04229736328125 0.507190625 +0.08225 -0.068206787109375 0.507190625 +0.08237500000000001 -0.093353271484375 0.507190625 +0.0825 -0.115142822265625 0.507190625 +0.08262500000000001 -0.13812255859375 0.507190625 +0.08275 -0.15753173828125 0.507190625 +0.08287500000000001 -0.17742919921875 0.507190625 +0.08300000000000001 -0.195404052734375 0.507190625 +0.083125 -0.209747314453125 0.507190625 +0.08324999999999999 -0.223480224609375 0.507190625 +0.083375 -0.2337646484375 0.507190625 +0.08350000000000001 -0.242767333984375 0.507190625 +0.08362500000000001 -0.24908447265625 0.507190625 +0.08375 -0.252471923828125 0.507190625 +0.08387500000000001 -0.253570556640625 0.507190625 +0.084 -0.252197265625 0.507190625 +0.08412500000000001 -0.248046875 0.507190625 +0.08425000000000001 -0.241180419921875 0.507190625 +0.084375 -0.23272705078125 0.507190625 +0.08450000000000001 -0.220947265625 0.507190625 +0.084625 -0.208221435546875 0.507190625 +0.08475 -0.19195556640625 0.507190625 +0.08487500000000001 -0.173583984375 0.507190625 +0.085 -0.155426025390625 0.507190625 +0.08512500000000001 -0.133636474609375 0.507190625 +0.08525 -0.112762451171875 0.507190625 +0.085375 -0.088409423828125 0.507190625 +0.08550000000000001 -0.063079833984375 0.507190625 +0.085625 -0.0396728515625 0.507190625 +0.08575000000000001 -0.013275146484375 0.507190625 0.08587500000000002 0.010589599609375 0.507190625 0.08600000000000001 0.037017822265625 0.507190625 0.08612500000000001 0.06304931640625 0.507190625 @@ -716,37 +716,37 @@ 0.089375 0.07073974609375 0.507190625 0.08949999999999999 0.044891357421875 0.507190625 0.089625 0.021209716796875 0.507190625 -0.08975 -0.005279541015625 0.507190625 -0.08987499999999999 -0.031768798828125 0.507190625 -0.09 -0.0552978515625 0.507190625 -0.09012499999999999 -0.08087158203125 0.507190625 -0.09025 -0.103118896484375 0.507190625 -0.090375 -0.12677001953125 0.507190625 -0.09050000000000001 -0.149017333984375 0.507190625 -0.090625 -0.16766357421875 0.507190625 -0.09074999999999999 -0.1866455078125 0.507190625 -0.09087499999999999 -0.20196533203125 0.507190625 -0.091 -0.216888427734375 0.507190625 -0.09112500000000001 -0.22943115234375 0.507190625 -0.09125 -0.238555908203125 0.507190625 -0.09137499999999999 -0.246246337890625 0.507190625 -0.0915 -0.250823974609375 0.507190625 -0.091625 -0.253326416015625 0.507190625 -0.09175000000000001 -0.2530517578125 0.507190625 -0.091875 -0.25042724609375 0.507190625 -0.09199999999999999 -0.244903564453125 0.507190625 -0.092125 -0.237640380859375 0.507190625 -0.09225 -0.22711181640625 0.507190625 -0.09237499999999999 -0.214080810546875 0.507190625 -0.0925 -0.200347900390625 0.507190625 -0.09262499999999999 -0.183013916015625 0.507190625 -0.09275 -0.165679931640625 0.507190625 -0.092875 -0.14471435546875 0.507190625 -0.09299999999999999 -0.12213134765625 0.507190625 -0.093125 -0.100677490234375 0.507190625 -0.09324999999999999 -0.0758056640625 0.507190625 -0.093375 -0.052703857421875 0.507190625 -0.09350000000000001 -0.0264892578125 0.507190625 +0.08975 -0.00531005859375 0.507190625 +0.08987499999999999 -0.03179931640625 0.507190625 +0.09 -0.055328369140625 0.507190625 +0.09012499999999999 -0.080902099609375 0.507190625 +0.09025 -0.1031494140625 0.507190625 +0.090375 -0.126800537109375 0.507190625 +0.09050000000000001 -0.1490478515625 0.507190625 +0.090625 -0.167694091796875 0.507190625 +0.09074999999999999 -0.186676025390625 0.507190625 +0.09087499999999999 -0.201995849609375 0.507190625 +0.091 -0.2169189453125 0.507190625 +0.09112500000000001 -0.229461669921875 0.507190625 +0.09125 -0.23858642578125 0.507190625 +0.09137499999999999 -0.24627685546875 0.507190625 +0.0915 -0.2508544921875 0.507190625 +0.091625 -0.25335693359375 0.507190625 +0.09175000000000001 -0.253082275390625 0.507190625 +0.091875 -0.250457763671875 0.507190625 +0.09199999999999999 -0.24493408203125 0.507190625 +0.092125 -0.2376708984375 0.507190625 +0.09225 -0.227142333984375 0.507190625 +0.09237499999999999 -0.214111328125 0.507190625 +0.0925 -0.20037841796875 0.507190625 +0.09262499999999999 -0.18304443359375 0.507190625 +0.09275 -0.16571044921875 0.507190625 +0.092875 -0.144744873046875 0.507190625 +0.09299999999999999 -0.122161865234375 0.507190625 +0.093125 -0.1007080078125 0.507190625 +0.09324999999999999 -0.075836181640625 0.507190625 +0.093375 -0.052734375 0.507190625 +0.09350000000000001 -0.026519775390625 0.507190625 0.09362500000000001 0.0 0.507190625 0.09375 0.023834228515625 0.507190625 0.09387499999999999 0.05010986328125 0.507190625 @@ -779,37 +779,37 @@ 0.09725 0.069580078125 0.6095875 0.09737500000000001 0.038177490234375 0.6095875 0.0975 0.009552001953125 0.6095875 -0.09762500000000001 -0.022308349609375 0.6095875 -0.09775 -0.050811767578125 0.6095875 -0.097875 -0.081939697265625 0.6095875 -0.09800000000000001 -0.1121826171875 0.6095875 -0.098125 -0.138336181640625 0.6095875 -0.09825000000000001 -0.165985107421875 0.6095875 -0.098375 -0.189300537109375 0.6095875 -0.09850000000000001 -0.213226318359375 0.6095875 -0.09862500000000001 -0.23480224609375 0.6095875 -0.09875 -0.252044677734375 0.6095875 -0.09887499999999999 -0.268585205078125 0.6095875 -0.099 -0.28094482421875 0.6095875 -0.09912500000000001 -0.291748046875 0.6095875 -0.09925000000000001 -0.299346923828125 0.6095875 -0.099375 -0.30340576171875 0.6095875 -0.09950000000000001 -0.30474853515625 0.6095875 -0.099625 -0.303070068359375 0.6095875 -0.09975000000000001 -0.298095703125 0.6095875 -0.09987500000000001 -0.289825439453125 0.6095875 -0.1 -0.279693603515625 0.6095875 -0.100125 -0.2655029296875 0.6095875 -0.10025 -0.250244140625 0.6095875 -0.100375 -0.230682373046875 0.6095875 -0.1005 -0.2086181640625 0.6095875 -0.100625 -0.186767578125 0.6095875 -0.10075 -0.16058349609375 0.6095875 -0.100875 -0.135498046875 0.6095875 -0.101 -0.106201171875 0.6095875 -0.101125 -0.075775146484375 0.6095875 -0.10125 -0.047637939453125 0.6095875 -0.101375 -0.01593017578125 0.6095875 +0.09762500000000001 -0.0223388671875 0.6095875 +0.09775 -0.05084228515625 0.6095875 +0.097875 -0.08197021484375 0.6095875 +0.09800000000000001 -0.112213134765625 0.6095875 +0.098125 -0.13836669921875 0.6095875 +0.09825000000000001 -0.166015625 0.6095875 +0.098375 -0.1893310546875 0.6095875 +0.09850000000000001 -0.2132568359375 0.6095875 +0.09862500000000001 -0.234832763671875 0.6095875 +0.09875 -0.2520751953125 0.6095875 +0.09887499999999999 -0.26861572265625 0.6095875 +0.099 -0.280975341796875 0.6095875 +0.09912500000000001 -0.291778564453125 0.6095875 +0.09925000000000001 -0.29937744140625 0.6095875 +0.099375 -0.303436279296875 0.6095875 +0.09950000000000001 -0.304779052734375 0.6095875 +0.099625 -0.3031005859375 0.6095875 +0.09975000000000001 -0.298126220703125 0.6095875 +0.09987500000000001 -0.28985595703125 0.6095875 +0.1 -0.27972412109375 0.6095875 +0.100125 -0.265533447265625 0.6095875 +0.10025 -0.250274658203125 0.6095875 +0.100375 -0.230712890625 0.6095875 +0.1005 -0.208648681640625 0.6095875 +0.100625 -0.186798095703125 0.6095875 +0.10075 -0.160614013671875 0.6095875 +0.100875 -0.135528564453125 0.6095875 +0.101 -0.106231689453125 0.6095875 +0.101125 -0.0758056640625 0.6095875 +0.10125 -0.04766845703125 0.6095875 +0.101375 -0.015960693359375 0.6095875 0.1015 0.01275634765625 0.6095875 0.101625 0.04449462890625 0.6095875 0.10175 0.075775146484375 0.6095875 @@ -841,37 +841,37 @@ 0.105 0.084991455078125 0.6095875 0.105125 0.053955078125 0.6095875 0.10525 0.025482177734375 0.6095875 -0.105375 -0.006378173828125 0.6095875 -0.1055 -0.038177490234375 0.6095875 -0.105625 -0.06646728515625 0.6095875 -0.10575 -0.097198486328125 0.6095875 -0.105875 -0.123931884765625 0.6095875 -0.106 -0.152374267578125 0.6095875 -0.106125 -0.179107666015625 0.6095875 -0.10625 -0.2015380859375 0.6095875 -0.106375 -0.22430419921875 0.6095875 -0.1065 -0.24273681640625 0.6095875 -0.106625 -0.26068115234375 0.6095875 -0.10675 -0.2757568359375 0.6095875 -0.106875 -0.2867431640625 0.6095875 -0.107 -0.29595947265625 0.6095875 -0.107125 -0.301483154296875 0.6095875 -0.10725 -0.304473876953125 0.6095875 -0.107375 -0.30413818359375 0.6095875 -0.1075 -0.300994873046875 0.6095875 -0.107625 -0.29437255859375 0.6095875 -0.10775 -0.28564453125 0.6095875 -0.107875 -0.27294921875 0.6095875 -0.108 -0.25732421875 0.6095875 -0.108125 -0.240814208984375 0.6095875 -0.10825 -0.219940185546875 0.6095875 -0.108375 -0.199127197265625 0.6095875 -0.1085 -0.173919677734375 0.6095875 -0.108625 -0.14678955078125 0.6095875 -0.10875 -0.12103271484375 0.6095875 -0.108875 -0.09112548828125 0.6095875 -0.109 -0.0633544921875 0.6095875 -0.109125 -0.031829833984375 0.6095875 +0.105375 -0.00640869140625 0.6095875 +0.1055 -0.0382080078125 0.6095875 +0.105625 -0.066497802734375 0.6095875 +0.10575 -0.09722900390625 0.6095875 +0.105875 -0.12396240234375 0.6095875 +0.106 -0.15240478515625 0.6095875 +0.106125 -0.17913818359375 0.6095875 +0.10625 -0.201568603515625 0.6095875 +0.106375 -0.224334716796875 0.6095875 +0.1065 -0.242767333984375 0.6095875 +0.106625 -0.260711669921875 0.6095875 +0.10675 -0.275787353515625 0.6095875 +0.106875 -0.286773681640625 0.6095875 +0.107 -0.295989990234375 0.6095875 +0.107125 -0.301513671875 0.6095875 +0.10725 -0.30450439453125 0.6095875 +0.107375 -0.304168701171875 0.6095875 +0.1075 -0.301025390625 0.6095875 +0.107625 -0.294403076171875 0.6095875 +0.10775 -0.285675048828125 0.6095875 +0.107875 -0.272979736328125 0.6095875 +0.108 -0.257354736328125 0.6095875 +0.108125 -0.2408447265625 0.6095875 +0.10825 -0.219970703125 0.6095875 +0.108375 -0.19915771484375 0.6095875 +0.1085 -0.1739501953125 0.6095875 +0.108625 -0.146820068359375 0.6095875 +0.10875 -0.121063232421875 0.6095875 +0.108875 -0.091156005859375 0.6095875 +0.109 -0.063385009765625 0.6095875 +0.109125 -0.0318603515625 0.6095875 0.10925 0.0 0.6095875 0.109375 0.028656005859375 0.6095875 0.1095 0.060211181640625 0.6095875 @@ -904,37 +904,37 @@ 0.112875 0.069580078125 0.6095875 0.113 0.038177490234375 0.6095875 0.113125 0.009552001953125 0.6095875 -0.11325 -0.022308349609375 0.6095875 -0.113375 -0.050811767578125 0.6095875 -0.1135 -0.081939697265625 0.6095875 -0.113625 -0.1121826171875 0.6095875 -0.11375 -0.138336181640625 0.6095875 -0.113875 -0.165985107421875 0.6095875 -0.114 -0.189300537109375 0.6095875 -0.114125 -0.213226318359375 0.6095875 -0.11425 -0.23480224609375 0.6095875 -0.114375 -0.252044677734375 0.6095875 -0.1145 -0.268585205078125 0.6095875 -0.114625 -0.28094482421875 0.6095875 -0.11475 -0.291748046875 0.6095875 -0.114875 -0.299346923828125 0.6095875 -0.115 -0.30340576171875 0.6095875 -0.115125 -0.30474853515625 0.6095875 -0.11525 -0.303070068359375 0.6095875 -0.115375 -0.298095703125 0.6095875 -0.1155 -0.289825439453125 0.6095875 -0.115625 -0.279693603515625 0.6095875 -0.11575 -0.2655029296875 0.6095875 -0.115875 -0.250244140625 0.6095875 -0.116 -0.230682373046875 0.6095875 -0.116125 -0.2086181640625 0.6095875 -0.11625 -0.186767578125 0.6095875 -0.116375 -0.16058349609375 0.6095875 -0.1165 -0.135498046875 0.6095875 -0.116625 -0.106201171875 0.6095875 -0.11675 -0.075775146484375 0.6095875 -0.116875 -0.047637939453125 0.6095875 -0.117 -0.01593017578125 0.6095875 +0.11325 -0.0223388671875 0.6095875 +0.113375 -0.05084228515625 0.6095875 +0.1135 -0.08197021484375 0.6095875 +0.113625 -0.112213134765625 0.6095875 +0.11375 -0.13836669921875 0.6095875 +0.113875 -0.166015625 0.6095875 +0.114 -0.1893310546875 0.6095875 +0.114125 -0.2132568359375 0.6095875 +0.11425 -0.234832763671875 0.6095875 +0.114375 -0.2520751953125 0.6095875 +0.1145 -0.26861572265625 0.6095875 +0.114625 -0.280975341796875 0.6095875 +0.11475 -0.291778564453125 0.6095875 +0.114875 -0.29937744140625 0.6095875 +0.115 -0.303436279296875 0.6095875 +0.115125 -0.304779052734375 0.6095875 +0.11525 -0.3031005859375 0.6095875 +0.115375 -0.298126220703125 0.6095875 +0.1155 -0.28985595703125 0.6095875 +0.115625 -0.27972412109375 0.6095875 +0.11575 -0.265533447265625 0.6095875 +0.115875 -0.250274658203125 0.6095875 +0.116 -0.230712890625 0.6095875 +0.116125 -0.208648681640625 0.6095875 +0.11625 -0.186798095703125 0.6095875 +0.116375 -0.160614013671875 0.6095875 +0.1165 -0.135528564453125 0.6095875 +0.116625 -0.106231689453125 0.6095875 +0.11675 -0.0758056640625 0.6095875 +0.116875 -0.04766845703125 0.6095875 +0.117 -0.015960693359375 0.6095875 0.117125 0.01275634765625 0.6095875 0.11725 0.04449462890625 0.6095875 0.117375 0.075775146484375 0.6095875 @@ -966,37 +966,37 @@ 0.120625 0.084991455078125 0.6095875 0.12075 0.053955078125 0.6095875 0.120875 0.025482177734375 0.6095875 -0.121 -0.006378173828125 0.6095875 -0.121125 -0.038177490234375 0.6095875 -0.12125 -0.06646728515625 0.6095875 -0.121375 -0.097198486328125 0.6095875 -0.1215 -0.123931884765625 0.6095875 -0.121625 -0.152374267578125 0.6095875 -0.12175 -0.179107666015625 0.6095875 -0.121875 -0.2015380859375 0.6095875 -0.122 -0.22430419921875 0.6095875 -0.122125 -0.24273681640625 0.6095875 -0.12225 -0.26068115234375 0.6095875 -0.122375 -0.2757568359375 0.6095875 -0.1225 -0.2867431640625 0.6095875 -0.122625 -0.29595947265625 0.6095875 -0.12275 -0.301483154296875 0.6095875 -0.122875 -0.304473876953125 0.6095875 -0.123 -0.30413818359375 0.6095875 -0.123125 -0.300994873046875 0.6095875 -0.12325 -0.29437255859375 0.6095875 -0.123375 -0.28564453125 0.6095875 -0.1235 -0.27294921875 0.6095875 -0.123625 -0.25732421875 0.6095875 -0.12375 -0.240814208984375 0.6095875 -0.123875 -0.219940185546875 0.6095875 -0.124 -0.199127197265625 0.6095875 -0.124125 -0.173919677734375 0.6095875 -0.12425 -0.14678955078125 0.6095875 -0.124375 -0.12103271484375 0.6095875 -0.1245 -0.09112548828125 0.6095875 -0.124625 -0.0633544921875 0.6095875 -0.12475 -0.031829833984375 0.6095875 +0.121 -0.00640869140625 0.6095875 +0.121125 -0.0382080078125 0.6095875 +0.12125 -0.066497802734375 0.6095875 +0.121375 -0.09722900390625 0.6095875 +0.1215 -0.12396240234375 0.6095875 +0.121625 -0.15240478515625 0.6095875 +0.12175 -0.17913818359375 0.6095875 +0.121875 -0.201568603515625 0.6095875 +0.122 -0.224334716796875 0.6095875 +0.122125 -0.242767333984375 0.6095875 +0.12225 -0.260711669921875 0.6095875 +0.122375 -0.275787353515625 0.6095875 +0.1225 -0.286773681640625 0.6095875 +0.122625 -0.295989990234375 0.6095875 +0.12275 -0.301513671875 0.6095875 +0.122875 -0.30450439453125 0.6095875 +0.123 -0.304168701171875 0.6095875 +0.123125 -0.301025390625 0.6095875 +0.12325 -0.294403076171875 0.6095875 +0.123375 -0.285675048828125 0.6095875 +0.1235 -0.272979736328125 0.6095875 +0.123625 -0.257354736328125 0.6095875 +0.12375 -0.2408447265625 0.6095875 +0.123875 -0.219970703125 0.6095875 +0.124 -0.19915771484375 0.6095875 +0.124125 -0.1739501953125 0.6095875 +0.12425 -0.146820068359375 0.6095875 +0.124375 -0.121063232421875 0.6095875 +0.1245 -0.091156005859375 0.6095875 +0.124625 -0.063385009765625 0.6095875 +0.12475 -0.0318603515625 0.6095875 0.124875 0.0 0.6095875 0.125 0.028656005859375 0.6095875 0.125125 0.060211181640625 0.6095875 @@ -1029,37 +1029,37 @@ 0.1285 0.081268310546875 0.7119843750000001 0.128625 0.044586181640625 0.7119843750000001 0.12875 0.01116943359375 0.7119843750000001 -0.128875 -0.026031494140625 0.7119843750000001 -0.129 -0.059356689453125 0.7119843750000001 -0.129125 -0.095703125 0.7119843750000001 -0.12925 -0.131011962890625 0.7119843750000001 -0.129375 -0.161590576171875 0.7119843750000001 -0.1295 -0.19384765625 0.7119843750000001 -0.129625 -0.221099853515625 0.7119843750000001 -0.12975 -0.2490234375 0.7119843750000001 -0.129875 -0.274261474609375 0.7119843750000001 -0.13 -0.29437255859375 0.7119843750000001 -0.130125 -0.313690185546875 0.7119843750000001 -0.13025 -0.328125 0.7119843750000001 -0.130375 -0.34075927734375 0.7119843750000001 -0.1305 -0.349639892578125 0.7119843750000001 -0.130625 -0.3543701171875 0.7119843750000001 -0.13075 -0.355926513671875 0.7119843750000001 -0.130875 -0.35400390625 0.7119843750000001 -0.131 -0.34814453125 0.7119843750000001 -0.131125 -0.338531494140625 0.7119843750000001 -0.13125 -0.32666015625 0.7119843750000001 -0.131375 -0.310089111328125 0.7119843750000001 -0.1315 -0.292266845703125 0.7119843750000001 -0.131625 -0.269439697265625 0.7119843750000001 -0.13175 -0.24365234375 0.7119843750000001 -0.131875 -0.2181396484375 0.7119843750000001 -0.132 -0.18756103515625 0.7119843750000001 -0.132125 -0.15826416015625 0.7119843750000001 -0.13225 -0.124053955078125 0.7119843750000001 -0.132375 -0.0885009765625 0.7119843750000001 -0.1325 -0.0556640625 0.7119843750000001 -0.132625 -0.01861572265625 0.7119843750000001 +0.128875 -0.02606201171875 0.7119843750000001 +0.129 -0.05938720703125 0.7119843750000001 +0.129125 -0.095733642578125 0.7119843750000001 +0.12925 -0.13104248046875 0.7119843750000001 +0.129375 -0.16162109375 0.7119843750000001 +0.1295 -0.193878173828125 0.7119843750000001 +0.129625 -0.22113037109375 0.7119843750000001 +0.12975 -0.249053955078125 0.7119843750000001 +0.129875 -0.2742919921875 0.7119843750000001 +0.13 -0.294403076171875 0.7119843750000001 +0.130125 -0.313720703125 0.7119843750000001 +0.13025 -0.328155517578125 0.7119843750000001 +0.130375 -0.340789794921875 0.7119843750000001 +0.1305 -0.34967041015625 0.7119843750000001 +0.130625 -0.354400634765625 0.7119843750000001 +0.13075 -0.35595703125 0.7119843750000001 +0.130875 -0.354034423828125 0.7119843750000001 +0.131 -0.348175048828125 0.7119843750000001 +0.131125 -0.33856201171875 0.7119843750000001 +0.13125 -0.326690673828125 0.7119843750000001 +0.131375 -0.31011962890625 0.7119843750000001 +0.1315 -0.29229736328125 0.7119843750000001 +0.131625 -0.26947021484375 0.7119843750000001 +0.13175 -0.243682861328125 0.7119843750000001 +0.131875 -0.218170166015625 0.7119843750000001 +0.132 -0.187591552734375 0.7119843750000001 +0.132125 -0.158294677734375 0.7119843750000001 +0.13225 -0.12408447265625 0.7119843750000001 +0.132375 -0.088531494140625 0.7119843750000001 +0.1325 -0.055694580078125 0.7119843750000001 +0.132625 -0.018646240234375 0.7119843750000001 0.13275 0.014892578125 0.7119843750000001 0.132875 0.051971435546875 0.7119843750000001 0.133 0.0885009765625 0.7119843750000001 @@ -1091,37 +1091,37 @@ 0.13625 0.099273681640625 0.7119843750000001 0.136375 0.063018798828125 0.7119843750000001 0.1365 0.029754638671875 0.7119843750000001 -0.136625 -0.0074462890625 0.7119843750000001 -0.13675 -0.044586181640625 0.7119843750000001 -0.136875 -0.07763671875 0.7119843750000001 -0.137 -0.113525390625 0.7119843750000001 -0.137125 -0.144775390625 0.7119843750000001 -0.13725 -0.177947998046875 0.7119843750000001 -0.137375 -0.209197998046875 0.7119843750000001 -0.1375 -0.235382080078125 0.7119843750000001 -0.137625 -0.261993408203125 0.7119843750000001 -0.13775 -0.28350830078125 0.7119843750000001 -0.137875 -0.304443359375 0.7119843750000001 -0.138 -0.322052001953125 0.7119843750000001 -0.138125 -0.33489990234375 0.7119843750000001 -0.13825 -0.345672607421875 0.7119843750000001 -0.138375 -0.35211181640625 0.7119843750000001 -0.1385 -0.355621337890625 0.7119843750000001 -0.138625 -0.355255126953125 0.7119843750000001 -0.13875 -0.3515625 0.7119843750000001 -0.138875 -0.34381103515625 0.7119843750000001 -0.139 -0.3336181640625 0.7119843750000001 -0.139125 -0.318817138671875 0.7119843750000001 -0.13925 -0.300537109375 0.7119843750000001 -0.139375 -0.28125 0.7119843750000001 -0.1395 -0.25689697265625 0.7119843750000001 -0.139625 -0.232574462890625 0.7119843750000001 -0.13975 -0.203125 0.7119843750000001 -0.139875 -0.171478271484375 0.7119843750000001 -0.14 -0.141357421875 0.7119843750000001 -0.140125 -0.106414794921875 0.7119843750000001 -0.14025 -0.073974609375 0.7119843750000001 -0.140375 -0.037200927734375 0.7119843750000001 +0.136625 -0.007476806640625 0.7119843750000001 +0.13675 -0.04461669921875 0.7119843750000001 +0.136875 -0.077667236328125 0.7119843750000001 +0.137 -0.113555908203125 0.7119843750000001 +0.137125 -0.144805908203125 0.7119843750000001 +0.13725 -0.177978515625 0.7119843750000001 +0.137375 -0.209228515625 0.7119843750000001 +0.1375 -0.23541259765625 0.7119843750000001 +0.137625 -0.26202392578125 0.7119843750000001 +0.13775 -0.283538818359375 0.7119843750000001 +0.137875 -0.304473876953125 0.7119843750000001 +0.138 -0.32208251953125 0.7119843750000001 +0.138125 -0.334930419921875 0.7119843750000001 +0.13825 -0.345703125 0.7119843750000001 +0.138375 -0.352142333984375 0.7119843750000001 +0.1385 -0.35565185546875 0.7119843750000001 +0.138625 -0.35528564453125 0.7119843750000001 +0.13875 -0.351593017578125 0.7119843750000001 +0.138875 -0.343841552734375 0.7119843750000001 +0.139 -0.333648681640625 0.7119843750000001 +0.139125 -0.31884765625 0.7119843750000001 +0.13925 -0.300567626953125 0.7119843750000001 +0.139375 -0.281280517578125 0.7119843750000001 +0.1395 -0.256927490234375 0.7119843750000001 +0.139625 -0.23260498046875 0.7119843750000001 +0.13975 -0.203155517578125 0.7119843750000001 +0.139875 -0.1715087890625 0.7119843750000001 +0.14 -0.141387939453125 0.7119843750000001 +0.140125 -0.1064453125 0.7119843750000001 +0.14025 -0.074005126953125 0.7119843750000001 +0.140375 -0.0372314453125 0.7119843750000001 0.1405 0.0 0.7119843750000001 0.140625 0.033477783203125 0.7119843750000001 0.14075 0.070343017578125 0.7119843750000001 @@ -1154,37 +1154,37 @@ 0.144125 0.081268310546875 0.7119843750000001 0.14425 0.044586181640625 0.7119843750000001 0.144375 0.01116943359375 0.7119843750000001 -0.1445 -0.026031494140625 0.7119843750000001 -0.144625 -0.059356689453125 0.7119843750000001 -0.14475 -0.095703125 0.7119843750000001 -0.144875 -0.131011962890625 0.7119843750000001 -0.145 -0.161590576171875 0.7119843750000001 -0.145125 -0.19384765625 0.7119843750000001 -0.14525 -0.221099853515625 0.7119843750000001 -0.145375 -0.2490234375 0.7119843750000001 -0.1455 -0.274261474609375 0.7119843750000001 -0.145625 -0.29437255859375 0.7119843750000001 -0.14575 -0.313690185546875 0.7119843750000001 -0.145875 -0.328125 0.7119843750000001 -0.146 -0.34075927734375 0.7119843750000001 -0.146125 -0.349639892578125 0.7119843750000001 -0.14625 -0.3543701171875 0.7119843750000001 -0.146375 -0.355926513671875 0.7119843750000001 -0.1465 -0.35400390625 0.7119843750000001 -0.146625 -0.34814453125 0.7119843750000001 -0.14675 -0.338531494140625 0.7119843750000001 -0.146875 -0.32666015625 0.7119843750000001 -0.147 -0.310089111328125 0.7119843750000001 -0.147125 -0.292266845703125 0.7119843750000001 -0.14725 -0.269439697265625 0.7119843750000001 -0.147375 -0.24365234375 0.7119843750000001 -0.1475 -0.2181396484375 0.7119843750000001 -0.147625 -0.18756103515625 0.7119843750000001 -0.14775 -0.15826416015625 0.7119843750000001 -0.147875 -0.124053955078125 0.7119843750000001 -0.148 -0.0885009765625 0.7119843750000001 -0.148125 -0.0556640625 0.7119843750000001 -0.14825 -0.01861572265625 0.7119843750000001 +0.1445 -0.02606201171875 0.7119843750000001 +0.144625 -0.05938720703125 0.7119843750000001 +0.14475 -0.095733642578125 0.7119843750000001 +0.144875 -0.13104248046875 0.7119843750000001 +0.145 -0.16162109375 0.7119843750000001 +0.145125 -0.193878173828125 0.7119843750000001 +0.14525 -0.22113037109375 0.7119843750000001 +0.145375 -0.249053955078125 0.7119843750000001 +0.1455 -0.2742919921875 0.7119843750000001 +0.145625 -0.294403076171875 0.7119843750000001 +0.14575 -0.313720703125 0.7119843750000001 +0.145875 -0.328155517578125 0.7119843750000001 +0.146 -0.340789794921875 0.7119843750000001 +0.146125 -0.34967041015625 0.7119843750000001 +0.14625 -0.354400634765625 0.7119843750000001 +0.146375 -0.35595703125 0.7119843750000001 +0.1465 -0.354034423828125 0.7119843750000001 +0.146625 -0.348175048828125 0.7119843750000001 +0.14675 -0.33856201171875 0.7119843750000001 +0.146875 -0.326690673828125 0.7119843750000001 +0.147 -0.31011962890625 0.7119843750000001 +0.147125 -0.29229736328125 0.7119843750000001 +0.14725 -0.26947021484375 0.7119843750000001 +0.147375 -0.243682861328125 0.7119843750000001 +0.1475 -0.218170166015625 0.7119843750000001 +0.147625 -0.187591552734375 0.7119843750000001 +0.14775 -0.158294677734375 0.7119843750000001 +0.147875 -0.12408447265625 0.7119843750000001 +0.148 -0.088531494140625 0.7119843750000001 +0.148125 -0.055694580078125 0.7119843750000001 +0.14825 -0.018646240234375 0.7119843750000001 0.148375 0.014892578125 0.7119843750000001 0.1485 0.051971435546875 0.7119843750000001 0.148625 0.0885009765625 0.7119843750000001 @@ -1216,37 +1216,37 @@ 0.151875 0.099273681640625 0.7119843750000001 0.152 0.063018798828125 0.7119843750000001 0.152125 0.029754638671875 0.7119843750000001 -0.15225 -0.0074462890625 0.7119843750000001 -0.152375 -0.044586181640625 0.7119843750000001 -0.1525 -0.07763671875 0.7119843750000001 -0.152625 -0.113525390625 0.7119843750000001 -0.15275 -0.144775390625 0.7119843750000001 -0.152875 -0.177947998046875 0.7119843750000001 -0.153 -0.209197998046875 0.7119843750000001 -0.153125 -0.235382080078125 0.7119843750000001 -0.15325 -0.261993408203125 0.7119843750000001 -0.153375 -0.28350830078125 0.7119843750000001 -0.1535 -0.304443359375 0.7119843750000001 -0.153625 -0.322052001953125 0.7119843750000001 -0.15375 -0.33489990234375 0.7119843750000001 -0.153875 -0.345672607421875 0.7119843750000001 -0.154 -0.35211181640625 0.7119843750000001 -0.154125 -0.355621337890625 0.7119843750000001 -0.15425 -0.355255126953125 0.7119843750000001 -0.154375 -0.3515625 0.7119843750000001 -0.1545 -0.34381103515625 0.7119843750000001 -0.154625 -0.3336181640625 0.7119843750000001 -0.15475 -0.318817138671875 0.7119843750000001 -0.154875 -0.300537109375 0.7119843750000001 -0.155 -0.28125 0.7119843750000001 -0.155125 -0.25689697265625 0.7119843750000001 -0.15525 -0.232574462890625 0.7119843750000001 -0.155375 -0.203125 0.7119843750000001 -0.1555 -0.171478271484375 0.7119843750000001 -0.155625 -0.141357421875 0.7119843750000001 -0.15575 -0.106414794921875 0.7119843750000001 -0.155875 -0.073974609375 0.7119843750000001 -0.156 -0.037200927734375 0.7119843750000001 +0.15225 -0.007476806640625 0.7119843750000001 +0.152375 -0.04461669921875 0.7119843750000001 +0.1525 -0.077667236328125 0.7119843750000001 +0.152625 -0.113555908203125 0.7119843750000001 +0.15275 -0.144805908203125 0.7119843750000001 +0.152875 -0.177978515625 0.7119843750000001 +0.153 -0.209228515625 0.7119843750000001 +0.153125 -0.23541259765625 0.7119843750000001 +0.15325 -0.26202392578125 0.7119843750000001 +0.153375 -0.283538818359375 0.7119843750000001 +0.1535 -0.304473876953125 0.7119843750000001 +0.153625 -0.32208251953125 0.7119843750000001 +0.15375 -0.334930419921875 0.7119843750000001 +0.153875 -0.345703125 0.7119843750000001 +0.154 -0.352142333984375 0.7119843750000001 +0.154125 -0.35565185546875 0.7119843750000001 +0.15425 -0.35528564453125 0.7119843750000001 +0.154375 -0.351593017578125 0.7119843750000001 +0.1545 -0.343841552734375 0.7119843750000001 +0.154625 -0.333648681640625 0.7119843750000001 +0.15475 -0.31884765625 0.7119843750000001 +0.154875 -0.300567626953125 0.7119843750000001 +0.155 -0.281280517578125 0.7119843750000001 +0.155125 -0.256927490234375 0.7119843750000001 +0.15525 -0.23260498046875 0.7119843750000001 +0.155375 -0.203155517578125 0.7119843750000001 +0.1555 -0.1715087890625 0.7119843750000001 +0.155625 -0.141387939453125 0.7119843750000001 +0.15575 -0.1064453125 0.7119843750000001 +0.155875 -0.074005126953125 0.7119843750000001 +0.156 -0.0372314453125 0.7119843750000001 0.156125 0.0 0.7119843750000001 0.15625 0.033477783203125 0.7119843750000001 0.156375 0.070343017578125 0.7119843750000001 @@ -1279,37 +1279,37 @@ 0.15975 0.081268310546875 0.7119843750000001 0.159875 0.044586181640625 0.7119843750000001 0.16 0.01275634765625 0.8143812500000001 -0.160125 -0.02978515625 0.8143812500000001 -0.16025 -0.06787109375 0.8143812500000001 -0.160375 -0.109466552734375 0.8143812500000001 -0.1605 -0.149871826171875 0.8143812500000001 -0.160625 -0.184814453125 0.8143812500000001 -0.16075 -0.22174072265625 0.8143812500000001 -0.160875 -0.252899169921875 0.8143812500000001 -0.161 -0.28485107421875 0.8143812500000001 -0.161125 -0.313720703125 0.8143812500000001 -0.16125 -0.33673095703125 0.8143812500000001 -0.161375 -0.35882568359375 0.8143812500000001 -0.1615 -0.375335693359375 0.8143812500000001 -0.161625 -0.3897705078125 0.8143812500000001 -0.16175 -0.399932861328125 0.8143812500000001 -0.161875 -0.40533447265625 0.8143812500000001 -0.162 -0.407135009765625 0.8143812500000001 -0.162125 -0.4049072265625 0.8143812500000001 -0.16225 -0.39825439453125 0.8143812500000001 -0.162375 -0.38720703125 0.8143812500000001 -0.1625 -0.3736572265625 0.8143812500000001 -0.162625 -0.354705810546875 0.8143812500000001 -0.16275 -0.334320068359375 0.8143812500000001 -0.162875 -0.308197021484375 0.8143812500000001 -0.163 -0.278717041015625 0.8143812500000001 -0.163125 -0.249542236328125 0.8143812500000001 -0.16325 -0.21453857421875 0.8143812500000001 -0.163375 -0.1810302734375 0.8143812500000001 -0.1635 -0.14190673828125 0.8143812500000001 -0.163625 -0.101226806640625 0.8143812500000001 -0.16375 -0.06365966796875 0.8143812500000001 -0.163875 -0.021270751953125 0.8143812500000001 +0.160125 -0.029815673828125 0.8143812500000001 +0.16025 -0.067901611328125 0.8143812500000001 +0.160375 -0.1094970703125 0.8143812500000001 +0.1605 -0.14990234375 0.8143812500000001 +0.160625 -0.184844970703125 0.8143812500000001 +0.16075 -0.221771240234375 0.8143812500000001 +0.160875 -0.2529296875 0.8143812500000001 +0.161 -0.284881591796875 0.8143812500000001 +0.161125 -0.313751220703125 0.8143812500000001 +0.16125 -0.336761474609375 0.8143812500000001 +0.161375 -0.358856201171875 0.8143812500000001 +0.1615 -0.3753662109375 0.8143812500000001 +0.161625 -0.389801025390625 0.8143812500000001 +0.16175 -0.39996337890625 0.8143812500000001 +0.161875 -0.405364990234375 0.8143812500000001 +0.162 -0.40716552734375 0.8143812500000001 +0.162125 -0.404937744140625 0.8143812500000001 +0.16225 -0.398284912109375 0.8143812500000001 +0.162375 -0.387237548828125 0.8143812500000001 +0.1625 -0.373687744140625 0.8143812500000001 +0.162625 -0.354736328125 0.8143812500000001 +0.16275 -0.3343505859375 0.8143812500000001 +0.162875 -0.3082275390625 0.8143812500000001 +0.163 -0.27874755859375 0.8143812500000001 +0.163125 -0.24957275390625 0.8143812500000001 +0.16325 -0.214569091796875 0.8143812500000001 +0.163375 -0.181060791015625 0.8143812500000001 +0.1635 -0.141937255859375 0.8143812500000001 +0.163625 -0.10125732421875 0.8143812500000001 +0.16375 -0.063690185546875 0.8143812500000001 +0.163875 -0.02130126953125 0.8143812500000001 0.164 0.01702880859375 0.8143812500000001 0.164125 0.0594482421875 0.8143812500000001 0.16425 0.101226806640625 0.8143812500000001 @@ -1341,37 +1341,37 @@ 0.1675 0.11358642578125 0.8143812500000001 0.167625 0.07208251953125 0.8143812500000001 0.16775 0.0340576171875 0.8143812500000001 -0.167875 -0.008514404296875 0.8143812500000001 -0.168 -0.050994873046875 0.8143812500000001 -0.168125 -0.08880615234375 0.8143812500000001 -0.16825 -0.129852294921875 0.8143812500000001 -0.168375 -0.16558837890625 0.8143812500000001 -0.1685 -0.20355224609375 0.8143812500000001 -0.168625 -0.239288330078125 0.8143812500000001 -0.16875 -0.269256591796875 0.8143812500000001 -0.168875 -0.2996826171875 0.8143812500000001 -0.169 -0.324310302734375 0.8143812500000001 -0.169125 -0.3482666015625 0.8143812500000001 -0.16925 -0.368408203125 0.8143812500000001 -0.169375 -0.383056640625 0.8143812500000001 -0.1695 -0.3953857421875 0.8143812500000001 -0.169625 -0.40277099609375 0.8143812500000001 -0.16975 -0.40679931640625 0.8143812500000001 -0.169875 -0.406341552734375 0.8143812500000001 -0.17 -0.402130126953125 0.8143812500000001 -0.170125 -0.393280029296875 0.8143812500000001 -0.17025 -0.381591796875 0.8143812500000001 -0.170375 -0.36468505859375 0.8143812500000001 -0.1705 -0.343780517578125 0.8143812500000001 -0.170625 -0.32171630859375 0.8143812500000001 -0.17075 -0.293853759765625 0.8143812500000001 -0.170875 -0.266021728515625 0.8143812500000001 -0.171 -0.23236083984375 0.8143812500000001 -0.171125 -0.196136474609375 0.8143812500000001 -0.17125 -0.16168212890625 0.8143812500000001 -0.171375 -0.121734619140625 0.8143812500000001 -0.1715 -0.084625244140625 0.8143812500000001 -0.171625 -0.04254150390625 0.8143812500000001 +0.167875 -0.008544921875 0.8143812500000001 +0.168 -0.051025390625 0.8143812500000001 +0.168125 -0.088836669921875 0.8143812500000001 +0.16825 -0.1298828125 0.8143812500000001 +0.168375 -0.165618896484375 0.8143812500000001 +0.1685 -0.203582763671875 0.8143812500000001 +0.168625 -0.23931884765625 0.8143812500000001 +0.16875 -0.269287109375 0.8143812500000001 +0.168875 -0.299713134765625 0.8143812500000001 +0.169 -0.3243408203125 0.8143812500000001 +0.169125 -0.348297119140625 0.8143812500000001 +0.16925 -0.368438720703125 0.8143812500000001 +0.169375 -0.383087158203125 0.8143812500000001 +0.1695 -0.395416259765625 0.8143812500000001 +0.169625 -0.402801513671875 0.8143812500000001 +0.16975 -0.406829833984375 0.8143812500000001 +0.169875 -0.4063720703125 0.8143812500000001 +0.17 -0.40216064453125 0.8143812500000001 +0.170125 -0.393310546875 0.8143812500000001 +0.17025 -0.381622314453125 0.8143812500000001 +0.170375 -0.364715576171875 0.8143812500000001 +0.1705 -0.34381103515625 0.8143812500000001 +0.170625 -0.321746826171875 0.8143812500000001 +0.17075 -0.29388427734375 0.8143812500000001 +0.170875 -0.26605224609375 0.8143812500000001 +0.171 -0.232391357421875 0.8143812500000001 +0.171125 -0.1961669921875 0.8143812500000001 +0.17125 -0.161712646484375 0.8143812500000001 +0.171375 -0.12176513671875 0.8143812500000001 +0.1715 -0.08465576171875 0.8143812500000001 +0.171625 -0.042572021484375 0.8143812500000001 0.17175 0.0 0.8143812500000001 0.171875 0.038299560546875 0.8143812500000001 0.172 0.0804443359375 0.8143812500000001 @@ -1404,37 +1404,37 @@ 0.175375 0.09295654296875 0.8143812500000001 0.1755 0.050994873046875 0.8143812500000001 0.175625 0.01275634765625 0.8143812500000001 -0.17575 -0.02978515625 0.8143812500000001 -0.175875 -0.06787109375 0.8143812500000001 -0.176 -0.109466552734375 0.8143812500000001 -0.176125 -0.149871826171875 0.8143812500000001 -0.17625 -0.184814453125 0.8143812500000001 -0.176375 -0.22174072265625 0.8143812500000001 -0.1765 -0.252899169921875 0.8143812500000001 -0.176625 -0.28485107421875 0.8143812500000001 -0.17675 -0.313720703125 0.8143812500000001 -0.176875 -0.33673095703125 0.8143812500000001 -0.177 -0.35882568359375 0.8143812500000001 -0.177125 -0.375335693359375 0.8143812500000001 -0.17725 -0.3897705078125 0.8143812500000001 -0.177375 -0.399932861328125 0.8143812500000001 -0.1775 -0.40533447265625 0.8143812500000001 -0.177625 -0.407135009765625 0.8143812500000001 -0.17775 -0.4049072265625 0.8143812500000001 -0.177875 -0.39825439453125 0.8143812500000001 -0.178 -0.38720703125 0.8143812500000001 -0.178125 -0.3736572265625 0.8143812500000001 -0.17825 -0.354705810546875 0.8143812500000001 -0.178375 -0.334320068359375 0.8143812500000001 -0.1785 -0.308197021484375 0.8143812500000001 -0.178625 -0.278717041015625 0.8143812500000001 -0.17875 -0.249542236328125 0.8143812500000001 -0.178875 -0.21453857421875 0.8143812500000001 -0.179 -0.1810302734375 0.8143812500000001 -0.179125 -0.14190673828125 0.8143812500000001 -0.17925 -0.101226806640625 0.8143812500000001 -0.179375 -0.06365966796875 0.8143812500000001 -0.1795 -0.021270751953125 0.8143812500000001 +0.17575 -0.029815673828125 0.8143812500000001 +0.175875 -0.067901611328125 0.8143812500000001 +0.176 -0.1094970703125 0.8143812500000001 +0.176125 -0.14990234375 0.8143812500000001 +0.17625 -0.184844970703125 0.8143812500000001 +0.176375 -0.221771240234375 0.8143812500000001 +0.1765 -0.2529296875 0.8143812500000001 +0.176625 -0.284881591796875 0.8143812500000001 +0.17675 -0.313751220703125 0.8143812500000001 +0.176875 -0.336761474609375 0.8143812500000001 +0.177 -0.358856201171875 0.8143812500000001 +0.177125 -0.3753662109375 0.8143812500000001 +0.17725 -0.389801025390625 0.8143812500000001 +0.177375 -0.39996337890625 0.8143812500000001 +0.1775 -0.405364990234375 0.8143812500000001 +0.177625 -0.40716552734375 0.8143812500000001 +0.17775 -0.404937744140625 0.8143812500000001 +0.177875 -0.398284912109375 0.8143812500000001 +0.178 -0.387237548828125 0.8143812500000001 +0.178125 -0.373687744140625 0.8143812500000001 +0.17825 -0.354736328125 0.8143812500000001 +0.178375 -0.3343505859375 0.8143812500000001 +0.1785 -0.3082275390625 0.8143812500000001 +0.178625 -0.27874755859375 0.8143812500000001 +0.17875 -0.24957275390625 0.8143812500000001 +0.178875 -0.214569091796875 0.8143812500000001 +0.179 -0.181060791015625 0.8143812500000001 +0.179125 -0.141937255859375 0.8143812500000001 +0.17925 -0.10125732421875 0.8143812500000001 +0.179375 -0.063690185546875 0.8143812500000001 +0.1795 -0.02130126953125 0.8143812500000001 0.179625 0.01702880859375 0.8143812500000001 0.17975 0.0594482421875 0.8143812500000001 0.179875 0.101226806640625 0.8143812500000001 @@ -1466,37 +1466,37 @@ 0.183125 0.11358642578125 0.8143812500000001 0.18325 0.07208251953125 0.8143812500000001 0.183375 0.0340576171875 0.8143812500000001 -0.1835 -0.008514404296875 0.8143812500000001 -0.183625 -0.050994873046875 0.8143812500000001 -0.18375 -0.08880615234375 0.8143812500000001 -0.183875 -0.129852294921875 0.8143812500000001 -0.184 -0.16558837890625 0.8143812500000001 -0.184125 -0.20355224609375 0.8143812500000001 -0.18425 -0.239288330078125 0.8143812500000001 -0.184375 -0.269256591796875 0.8143812500000001 -0.1845 -0.2996826171875 0.8143812500000001 -0.184625 -0.324310302734375 0.8143812500000001 -0.18475 -0.3482666015625 0.8143812500000001 -0.184875 -0.368408203125 0.8143812500000001 -0.185 -0.383056640625 0.8143812500000001 -0.185125 -0.3953857421875 0.8143812500000001 -0.18525 -0.40277099609375 0.8143812500000001 -0.185375 -0.40679931640625 0.8143812500000001 -0.1855 -0.406341552734375 0.8143812500000001 -0.185625 -0.402130126953125 0.8143812500000001 -0.18575 -0.393280029296875 0.8143812500000001 -0.185875 -0.381591796875 0.8143812500000001 -0.186 -0.36468505859375 0.8143812500000001 -0.186125 -0.343780517578125 0.8143812500000001 -0.18625 -0.32171630859375 0.8143812500000001 -0.186375 -0.293853759765625 0.8143812500000001 -0.1865 -0.266021728515625 0.8143812500000001 -0.186625 -0.23236083984375 0.8143812500000001 -0.18675 -0.196136474609375 0.8143812500000001 -0.186875 -0.16168212890625 0.8143812500000001 -0.187 -0.121734619140625 0.8143812500000001 -0.187125 -0.084625244140625 0.8143812500000001 -0.18725 -0.04254150390625 0.8143812500000001 +0.1835 -0.008544921875 0.8143812500000001 +0.183625 -0.051025390625 0.8143812500000001 +0.18375 -0.088836669921875 0.8143812500000001 +0.183875 -0.1298828125 0.8143812500000001 +0.184 -0.165618896484375 0.8143812500000001 +0.184125 -0.203582763671875 0.8143812500000001 +0.18425 -0.23931884765625 0.8143812500000001 +0.184375 -0.269287109375 0.8143812500000001 +0.1845 -0.299713134765625 0.8143812500000001 +0.184625 -0.3243408203125 0.8143812500000001 +0.18475 -0.348297119140625 0.8143812500000001 +0.184875 -0.368438720703125 0.8143812500000001 +0.185 -0.383087158203125 0.8143812500000001 +0.185125 -0.395416259765625 0.8143812500000001 +0.18525 -0.402801513671875 0.8143812500000001 +0.185375 -0.406829833984375 0.8143812500000001 +0.1855 -0.4063720703125 0.8143812500000001 +0.185625 -0.40216064453125 0.8143812500000001 +0.18575 -0.393310546875 0.8143812500000001 +0.185875 -0.381622314453125 0.8143812500000001 +0.186 -0.364715576171875 0.8143812500000001 +0.186125 -0.34381103515625 0.8143812500000001 +0.18625 -0.321746826171875 0.8143812500000001 +0.186375 -0.29388427734375 0.8143812500000001 +0.1865 -0.26605224609375 0.8143812500000001 +0.186625 -0.232391357421875 0.8143812500000001 +0.18675 -0.1961669921875 0.8143812500000001 +0.186875 -0.161712646484375 0.8143812500000001 +0.187 -0.12176513671875 0.8143812500000001 +0.187125 -0.08465576171875 0.8143812500000001 +0.18725 -0.042572021484375 0.8143812500000001 0.187375 0.0 0.8143812500000001 0.1875 0.038299560546875 0.8143812500000001 0.187625 0.0804443359375 0.8143812500000001 @@ -1529,37 +1529,37 @@ 0.191 0.09295654296875 0.8143812500000001 0.191125 0.050994873046875 0.8143812500000001 0.19125 0.01275634765625 0.8143812500000001 -0.191375 -0.02978515625 0.8143812500000001 -0.1915 -0.06787109375 0.8143812500000001 -0.191625 -0.109466552734375 0.8143812500000001 -0.19175 -0.149871826171875 0.8143812500000001 -0.191875 -0.184814453125 0.8143812500000001 -0.192 -0.2496337890625 0.9167781250000001 -0.192125 -0.284698486328125 0.9167781250000001 -0.19225 -0.3206787109375 0.9167781250000001 -0.192375 -0.3531494140625 0.9167781250000001 -0.1925 -0.379058837890625 0.9167781250000001 -0.192625 -0.4039306640625 0.9167781250000001 -0.19275 -0.422515869140625 0.9167781250000001 -0.192875 -0.43878173828125 0.9167781250000001 -0.193 -0.450225830078125 0.9167781250000001 -0.193125 -0.456298828125 0.9167781250000001 -0.19325 -0.45831298828125 0.9167781250000001 -0.193375 -0.455841064453125 0.9167781250000001 -0.1935 -0.44830322265625 0.9167781250000001 -0.193625 -0.4359130859375 0.9167781250000001 -0.19375 -0.420654296875 0.9167781250000001 -0.193875 -0.399322509765625 0.9167781250000001 -0.194 -0.376373291015625 0.9167781250000001 -0.194125 -0.346954345703125 0.9167781250000001 -0.19425 -0.313751220703125 0.9167781250000001 -0.194375 -0.280914306640625 0.9167781250000001 -0.1945 -0.24151611328125 0.9167781250000001 -0.194625 -0.20379638671875 0.9167781250000001 -0.19475 -0.159759521484375 0.9167781250000001 -0.194875 -0.11395263671875 0.9167781250000001 -0.195 -0.071685791015625 0.9167781250000001 -0.195125 -0.023956298828125 0.9167781250000001 +0.191375 -0.029815673828125 0.8143812500000001 +0.1915 -0.067901611328125 0.8143812500000001 +0.191625 -0.1094970703125 0.8143812500000001 +0.19175 -0.14990234375 0.8143812500000001 +0.191875 -0.184844970703125 0.8143812500000001 +0.192 -0.249664306640625 0.9167781250000001 +0.192125 -0.28472900390625 0.9167781250000001 +0.19225 -0.320709228515625 0.9167781250000001 +0.192375 -0.353179931640625 0.9167781250000001 +0.1925 -0.37908935546875 0.9167781250000001 +0.192625 -0.403961181640625 0.9167781250000001 +0.19275 -0.42254638671875 0.9167781250000001 +0.192875 -0.438812255859375 0.9167781250000001 +0.193 -0.45025634765625 0.9167781250000001 +0.193125 -0.456329345703125 0.9167781250000001 +0.19325 -0.458343505859375 0.9167781250000001 +0.193375 -0.45587158203125 0.9167781250000001 +0.1935 -0.448333740234375 0.9167781250000001 +0.193625 -0.435943603515625 0.9167781250000001 +0.19375 -0.420684814453125 0.9167781250000001 +0.193875 -0.39935302734375 0.9167781250000001 +0.194 -0.37640380859375 0.9167781250000001 +0.194125 -0.34698486328125 0.9167781250000001 +0.19425 -0.31378173828125 0.9167781250000001 +0.194375 -0.28094482421875 0.9167781250000001 +0.1945 -0.241546630859375 0.9167781250000001 +0.194625 -0.203826904296875 0.9167781250000001 +0.19475 -0.1597900390625 0.9167781250000001 +0.194875 -0.113983154296875 0.9167781250000001 +0.195 -0.07171630859375 0.9167781250000001 +0.195125 -0.02398681640625 0.9167781250000001 0.19525 0.0191650390625 0.9167781250000001 0.195375 0.066925048828125 0.9167781250000001 0.1955 0.11395263671875 0.9167781250000001 @@ -1591,37 +1591,37 @@ 0.19875 0.127838134765625 0.9167781250000001 0.198875 0.081146240234375 0.9167781250000001 0.199 0.038330078125 0.9167781250000001 -0.199125 -0.00958251953125 0.9167781250000001 -0.19925 -0.05743408203125 0.9167781250000001 -0.199375 -0.099945068359375 0.9167781250000001 -0.1995 -0.14617919921875 0.9167781250000001 -0.199625 -0.1864013671875 0.9167781250000001 -0.19975 -0.229156494140625 0.9167781250000001 -0.199875 -0.269378662109375 0.9167781250000001 -0.2 -0.3031005859375 0.9167781250000001 -0.200125 -0.337371826171875 0.9167781250000001 -0.20025 -0.365081787109375 0.9167781250000001 -0.200375 -0.39202880859375 0.9167781250000001 -0.2005 -0.414703369140625 0.9167781250000001 -0.200625 -0.431243896484375 0.9167781250000001 -0.20075 -0.445098876953125 0.9167781250000001 -0.200875 -0.45343017578125 0.9167781250000001 -0.201 -0.45794677734375 0.9167781250000001 -0.201125 -0.457427978515625 0.9167781250000001 -0.20125 -0.45269775390625 0.9167781250000001 -0.201375 -0.442718505859375 0.9167781250000001 -0.2015 -0.429595947265625 0.9167781250000001 -0.201625 -0.4105224609375 0.9167781250000001 -0.20175 -0.386993408203125 0.9167781250000001 -0.201875 -0.362152099609375 0.9167781250000001 -0.202 -0.330810546875 0.9167781250000001 -0.202125 -0.299468994140625 0.9167781250000001 -0.20225 -0.261566162109375 0.9167781250000001 -0.202375 -0.220794677734375 0.9167781250000001 -0.2025 -0.1820068359375 0.9167781250000001 -0.202625 -0.137054443359375 0.9167781250000001 -0.20275 -0.09527587890625 0.9167781250000001 -0.202875 -0.047882080078125 0.9167781250000001 +0.199125 -0.009613037109375 0.9167781250000001 +0.19925 -0.057464599609375 0.9167781250000001 +0.199375 -0.0999755859375 0.9167781250000001 +0.1995 -0.146209716796875 0.9167781250000001 +0.199625 -0.186431884765625 0.9167781250000001 +0.19975 -0.22918701171875 0.9167781250000001 +0.199875 -0.2694091796875 0.9167781250000001 +0.2 -0.303131103515625 0.9167781250000001 +0.200125 -0.33740234375 0.9167781250000001 +0.20025 -0.3651123046875 0.9167781250000001 +0.200375 -0.392059326171875 0.9167781250000001 +0.2005 -0.41473388671875 0.9167781250000001 +0.200625 -0.4312744140625 0.9167781250000001 +0.20075 -0.44512939453125 0.9167781250000001 +0.200875 -0.453460693359375 0.9167781250000001 +0.201 -0.457977294921875 0.9167781250000001 +0.201125 -0.45745849609375 0.9167781250000001 +0.20125 -0.452728271484375 0.9167781250000001 +0.201375 -0.4427490234375 0.9167781250000001 +0.2015 -0.42962646484375 0.9167781250000001 +0.201625 -0.410552978515625 0.9167781250000001 +0.20175 -0.38702392578125 0.9167781250000001 +0.201875 -0.3621826171875 0.9167781250000001 +0.202 -0.330841064453125 0.9167781250000001 +0.202125 -0.29949951171875 0.9167781250000001 +0.20225 -0.2615966796875 0.9167781250000001 +0.202375 -0.2208251953125 0.9167781250000001 +0.2025 -0.182037353515625 0.9167781250000001 +0.202625 -0.1370849609375 0.9167781250000001 +0.20275 -0.095306396484375 0.9167781250000001 +0.202875 -0.04791259765625 0.9167781250000001 0.203 0.0 0.9167781250000001 0.203125 0.043121337890625 0.9167781250000001 0.20325 0.090576171875 0.9167781250000001 @@ -1654,37 +1654,37 @@ 0.206625 0.104644775390625 0.9167781250000001 0.20675 0.05743408203125 0.9167781250000001 0.206875 0.014373779296875 0.9167781250000001 -0.207 -0.033538818359375 0.9167781250000001 -0.207125 -0.076416015625 0.9167781250000001 -0.20725 -0.12322998046875 0.9167781250000001 -0.207375 -0.168701171875 0.9167781250000001 -0.2075 -0.20806884765625 0.9167781250000001 -0.207625 -0.2496337890625 0.9167781250000001 -0.20775 -0.284698486328125 0.9167781250000001 -0.207875 -0.3206787109375 0.9167781250000001 -0.208 -0.3531494140625 0.9167781250000001 -0.208125 -0.379058837890625 0.9167781250000001 -0.20825 -0.4039306640625 0.9167781250000001 -0.208375 -0.422515869140625 0.9167781250000001 -0.2085 -0.43878173828125 0.9167781250000001 -0.208625 -0.450225830078125 0.9167781250000001 -0.20875 -0.456298828125 0.9167781250000001 -0.208875 -0.45831298828125 0.9167781250000001 -0.209 -0.455841064453125 0.9167781250000001 -0.209125 -0.44830322265625 0.9167781250000001 -0.20925 -0.4359130859375 0.9167781250000001 -0.209375 -0.420654296875 0.9167781250000001 -0.2095 -0.399322509765625 0.9167781250000001 -0.209625 -0.376373291015625 0.9167781250000001 -0.20975 -0.346954345703125 0.9167781250000001 -0.209875 -0.313751220703125 0.9167781250000001 -0.21 -0.280914306640625 0.9167781250000001 -0.210125 -0.24151611328125 0.9167781250000001 -0.21025 -0.20379638671875 0.9167781250000001 -0.210375 -0.159759521484375 0.9167781250000001 -0.2105 -0.11395263671875 0.9167781250000001 -0.210625 -0.071685791015625 0.9167781250000001 -0.21075 -0.023956298828125 0.9167781250000001 +0.207 -0.0335693359375 0.9167781250000001 +0.207125 -0.076446533203125 0.9167781250000001 +0.20725 -0.123260498046875 0.9167781250000001 +0.207375 -0.168731689453125 0.9167781250000001 +0.2075 -0.208099365234375 0.9167781250000001 +0.207625 -0.249664306640625 0.9167781250000001 +0.20775 -0.28472900390625 0.9167781250000001 +0.207875 -0.320709228515625 0.9167781250000001 +0.208 -0.353179931640625 0.9167781250000001 +0.208125 -0.37908935546875 0.9167781250000001 +0.20825 -0.403961181640625 0.9167781250000001 +0.208375 -0.42254638671875 0.9167781250000001 +0.2085 -0.438812255859375 0.9167781250000001 +0.208625 -0.45025634765625 0.9167781250000001 +0.20875 -0.456329345703125 0.9167781250000001 +0.208875 -0.458343505859375 0.9167781250000001 +0.209 -0.45587158203125 0.9167781250000001 +0.209125 -0.448333740234375 0.9167781250000001 +0.20925 -0.435943603515625 0.9167781250000001 +0.209375 -0.420684814453125 0.9167781250000001 +0.2095 -0.39935302734375 0.9167781250000001 +0.209625 -0.37640380859375 0.9167781250000001 +0.20975 -0.34698486328125 0.9167781250000001 +0.209875 -0.31378173828125 0.9167781250000001 +0.21 -0.28094482421875 0.9167781250000001 +0.210125 -0.241546630859375 0.9167781250000001 +0.21025 -0.203826904296875 0.9167781250000001 +0.210375 -0.1597900390625 0.9167781250000001 +0.2105 -0.113983154296875 0.9167781250000001 +0.210625 -0.07171630859375 0.9167781250000001 +0.21075 -0.02398681640625 0.9167781250000001 0.210875 0.0191650390625 0.9167781250000001 0.211 0.066925048828125 0.9167781250000001 0.211125 0.11395263671875 0.9167781250000001 @@ -1716,37 +1716,37 @@ 0.214375 0.127838134765625 0.9167781250000001 0.2145 0.081146240234375 0.9167781250000001 0.214625 0.038330078125 0.9167781250000001 -0.21475 -0.00958251953125 0.9167781250000001 -0.214875 -0.05743408203125 0.9167781250000001 -0.215 -0.099945068359375 0.9167781250000001 -0.215125 -0.14617919921875 0.9167781250000001 -0.21525 -0.1864013671875 0.9167781250000001 -0.215375 -0.229156494140625 0.9167781250000001 -0.2155 -0.269378662109375 0.9167781250000001 -0.215625 -0.3031005859375 0.9167781250000001 -0.21575 -0.337371826171875 0.9167781250000001 -0.215875 -0.365081787109375 0.9167781250000001 -0.216 -0.39202880859375 0.9167781250000001 -0.216125 -0.414703369140625 0.9167781250000001 -0.21625 -0.431243896484375 0.9167781250000001 -0.216375 -0.445098876953125 0.9167781250000001 -0.2165 -0.45343017578125 0.9167781250000001 -0.216625 -0.45794677734375 0.9167781250000001 -0.21675 -0.457427978515625 0.9167781250000001 -0.216875 -0.45269775390625 0.9167781250000001 -0.217 -0.442718505859375 0.9167781250000001 -0.217125 -0.429595947265625 0.9167781250000001 -0.21725 -0.4105224609375 0.9167781250000001 -0.217375 -0.386993408203125 0.9167781250000001 -0.2175 -0.362152099609375 0.9167781250000001 -0.217625 -0.330810546875 0.9167781250000001 -0.21775 -0.299468994140625 0.9167781250000001 -0.217875 -0.261566162109375 0.9167781250000001 -0.218 -0.220794677734375 0.9167781250000001 -0.218125 -0.1820068359375 0.9167781250000001 -0.21825 -0.137054443359375 0.9167781250000001 -0.218375 -0.09527587890625 0.9167781250000001 -0.2185 -0.047882080078125 0.9167781250000001 +0.21475 -0.009613037109375 0.9167781250000001 +0.214875 -0.057464599609375 0.9167781250000001 +0.215 -0.0999755859375 0.9167781250000001 +0.215125 -0.146209716796875 0.9167781250000001 +0.21525 -0.186431884765625 0.9167781250000001 +0.215375 -0.22918701171875 0.9167781250000001 +0.2155 -0.2694091796875 0.9167781250000001 +0.215625 -0.303131103515625 0.9167781250000001 +0.21575 -0.33740234375 0.9167781250000001 +0.215875 -0.3651123046875 0.9167781250000001 +0.216 -0.392059326171875 0.9167781250000001 +0.216125 -0.41473388671875 0.9167781250000001 +0.21625 -0.4312744140625 0.9167781250000001 +0.216375 -0.44512939453125 0.9167781250000001 +0.2165 -0.453460693359375 0.9167781250000001 +0.216625 -0.457977294921875 0.9167781250000001 +0.21675 -0.45745849609375 0.9167781250000001 +0.216875 -0.452728271484375 0.9167781250000001 +0.217 -0.4427490234375 0.9167781250000001 +0.217125 -0.42962646484375 0.9167781250000001 +0.21725 -0.410552978515625 0.9167781250000001 +0.217375 -0.38702392578125 0.9167781250000001 +0.2175 -0.3621826171875 0.9167781250000001 +0.217625 -0.330841064453125 0.9167781250000001 +0.21775 -0.29949951171875 0.9167781250000001 +0.217875 -0.2615966796875 0.9167781250000001 +0.218 -0.2208251953125 0.9167781250000001 +0.218125 -0.182037353515625 0.9167781250000001 +0.21825 -0.1370849609375 0.9167781250000001 +0.218375 -0.095306396484375 0.9167781250000001 +0.2185 -0.04791259765625 0.9167781250000001 0.218625 0.0 0.9167781250000001 0.21875 0.043121337890625 0.9167781250000001 0.218875 0.090576171875 0.9167781250000001 @@ -1779,37 +1779,37 @@ 0.22225 0.104644775390625 0.9167781250000001 0.222375 0.05743408203125 0.9167781250000001 0.2225 0.014373779296875 0.9167781250000001 -0.222625 -0.033538818359375 0.9167781250000001 -0.22275 -0.076416015625 0.9167781250000001 -0.222875 -0.12322998046875 0.9167781250000001 -0.223 -0.168701171875 0.9167781250000001 -0.223125 -0.20806884765625 0.9167781250000001 -0.22325 -0.2496337890625 0.9167781250000001 -0.223375 -0.284698486328125 0.9167781250000001 -0.2235 -0.3206787109375 0.9167781250000001 -0.223625 -0.3531494140625 0.9167781250000001 -0.22375 -0.379058837890625 0.9167781250000001 -0.223875 -0.4039306640625 0.9167781250000001 -0.224 -0.460845947265625 0.9999511726200581 -0.224125 -0.47857666015625 0.9999511726200581 -0.22425 -0.491058349609375 0.9999511726200581 -0.224375 -0.497711181640625 0.9999511726200581 -0.2245 -0.499908447265625 0.9999511726200581 -0.224625 -0.4971923828125 0.9999511726200581 -0.22475 -0.488983154296875 0.9999511726200581 -0.224875 -0.4754638671875 0.9999511726200581 -0.225 -0.45880126953125 0.9999511726200581 -0.225125 -0.435546875 0.9999511726200581 -0.22525 -0.410491943359375 0.9999511726200581 -0.225375 -0.37841796875 0.9999511726200581 -0.2255 -0.342193603515625 0.9999511726200581 -0.225625 -0.306396484375 0.9999511726200581 -0.22575 -0.263427734375 0.9999511726200581 -0.225875 -0.222259521484375 0.9999511726200581 -0.226 -0.174224853515625 0.9999511726200581 -0.226125 -0.124298095703125 0.9999511726200581 -0.22625 -0.07818603515625 0.9999511726200581 -0.226375 -0.026123046875 0.9999511726200581 +0.222625 -0.0335693359375 0.9167781250000001 +0.22275 -0.076446533203125 0.9167781250000001 +0.222875 -0.123260498046875 0.9167781250000001 +0.223 -0.168731689453125 0.9167781250000001 +0.223125 -0.208099365234375 0.9167781250000001 +0.22325 -0.249664306640625 0.9167781250000001 +0.223375 -0.28472900390625 0.9167781250000001 +0.2235 -0.320709228515625 0.9167781250000001 +0.223625 -0.353179931640625 0.9167781250000001 +0.22375 -0.37908935546875 0.9167781250000001 +0.223875 -0.403961181640625 0.9167781250000001 +0.224 -0.46087646484375 0.9999511726200581 +0.224125 -0.478607177734375 0.9999511726200581 +0.22425 -0.4910888671875 0.9999511726200581 +0.224375 -0.49774169921875 0.9999511726200581 +0.2245 -0.49993896484375 0.9999511726200581 +0.224625 -0.497222900390625 0.9999511726200581 +0.22475 -0.489013671875 0.9999511726200581 +0.224875 -0.475494384765625 0.9999511726200581 +0.225 -0.458831787109375 0.9999511726200581 +0.225125 -0.435577392578125 0.9999511726200581 +0.22525 -0.4105224609375 0.9999511726200581 +0.225375 -0.378448486328125 0.9999511726200581 +0.2255 -0.34222412109375 0.9999511726200581 +0.225625 -0.306427001953125 0.9999511726200581 +0.22575 -0.263458251953125 0.9999511726200581 +0.225875 -0.2222900390625 0.9999511726200581 +0.226 -0.17425537109375 0.9999511726200581 +0.226125 -0.12432861328125 0.9999511726200581 +0.22625 -0.078216552734375 0.9999511726200581 +0.226375 -0.026153564453125 0.9999511726200581 0.2265 0.020904541015625 0.9999511726200581 0.226625 0.072998046875 0.9999511726200581 0.22675 0.124298095703125 0.9999511726200581 @@ -1841,37 +1841,37 @@ 0.23 0.13946533203125 0.9999511726200581 0.230125 0.0885009765625 0.9999511726200581 0.23025 0.04180908203125 0.9999511726200581 -0.230375 -0.01043701171875 0.9999511726200581 -0.2305 -0.0626220703125 0.9999511726200581 -0.230625 -0.109039306640625 0.9999511726200581 -0.23075 -0.159454345703125 0.9999511726200581 -0.230875 -0.20330810546875 0.9999511726200581 -0.231 -0.24993896484375 0.9999511726200581 -0.231125 -0.2938232421875 0.9999511726200581 -0.23125 -0.330596923828125 0.9999511726200581 -0.231375 -0.36798095703125 0.9999511726200581 -0.2315 -0.398193359375 0.9999511726200581 -0.231625 -0.4276123046875 0.9999511726200581 -0.23175 -0.45233154296875 0.9999511726200581 -0.231875 -0.470367431640625 0.9999511726200581 -0.232 -0.485504150390625 0.9999511726200581 -0.232125 -0.49456787109375 0.9999511726200581 -0.23225 -0.499481201171875 0.9999511726200581 -0.232375 -0.498931884765625 0.9999511726200581 -0.2325 -0.4937744140625 0.9999511726200581 -0.232625 -0.482879638671875 0.9999511726200581 -0.23275 -0.46856689453125 0.9999511726200581 -0.232875 -0.447784423828125 0.9999511726200581 -0.233 -0.422088623046875 0.9999511726200581 -0.233125 -0.39501953125 0.9999511726200581 -0.23325 -0.360809326171875 0.9999511726200581 -0.233375 -0.32666015625 0.9999511726200581 -0.2335 -0.285308837890625 0.9999511726200581 -0.233625 -0.240814208984375 0.9999511726200581 -0.23375 -0.198516845703125 0.9999511726200581 -0.233875 -0.14947509765625 0.9999511726200581 -0.234 -0.103912353515625 0.9999511726200581 -0.234125 -0.05224609375 0.9999511726200581 +0.230375 -0.010467529296875 0.9999511726200581 +0.2305 -0.062652587890625 0.9999511726200581 +0.230625 -0.10906982421875 0.9999511726200581 +0.23075 -0.15948486328125 0.9999511726200581 +0.230875 -0.203338623046875 0.9999511726200581 +0.231 -0.249969482421875 0.9999511726200581 +0.231125 -0.293853759765625 0.9999511726200581 +0.23125 -0.33062744140625 0.9999511726200581 +0.231375 -0.368011474609375 0.9999511726200581 +0.2315 -0.398223876953125 0.9999511726200581 +0.231625 -0.427642822265625 0.9999511726200581 +0.23175 -0.452362060546875 0.9999511726200581 +0.231875 -0.47039794921875 0.9999511726200581 +0.232 -0.48553466796875 0.9999511726200581 +0.232125 -0.494598388671875 0.9999511726200581 +0.23225 -0.49951171875 0.9999511726200581 +0.232375 -0.49896240234375 0.9999511726200581 +0.2325 -0.493804931640625 0.9999511726200581 +0.232625 -0.48291015625 0.9999511726200581 +0.23275 -0.468597412109375 0.9999511726200581 +0.232875 -0.44781494140625 0.9999511726200581 +0.233 -0.422119140625 0.9999511726200581 +0.233125 -0.395050048828125 0.9999511726200581 +0.23325 -0.36083984375 0.9999511726200581 +0.233375 -0.326690673828125 0.9999511726200581 +0.2335 -0.28533935546875 0.9999511726200581 +0.233625 -0.2408447265625 0.9999511726200581 +0.23375 -0.19854736328125 0.9999511726200581 +0.233875 -0.149505615234375 0.9999511726200581 +0.234 -0.10394287109375 0.9999511726200581 +0.234125 -0.052276611328125 0.9999511726200581 0.23425 0.0 0.9999511726200581 0.234375 0.047027587890625 0.9999511726200581 0.2345 0.098785400390625 0.9999511726200581 @@ -1904,37 +1904,37 @@ 0.237875 0.1141357421875 0.9999511726200581 0.238 0.0626220703125 0.9999511726200581 0.238125 0.01568603515625 0.9999511726200581 -0.23825 -0.036590576171875 0.9999511726200581 -0.238375 -0.083343505859375 0.9999511726200581 -0.2385 -0.134429931640625 0.9999511726200581 -0.238625 -0.18402099609375 0.9999511726200581 -0.23875 -0.2269287109375 0.9999511726200581 -0.238875 -0.27227783203125 0.9999511726200581 -0.239 -0.310516357421875 0.9999511726200581 -0.239125 -0.349761962890625 0.9999511726200581 -0.23925 -0.38519287109375 0.9999511726200581 -0.239375 -0.4134521484375 0.9999511726200581 -0.2395 -0.440582275390625 0.9999511726200581 -0.239625 -0.460845947265625 0.9999511726200581 -0.23975 -0.47857666015625 0.9999511726200581 -0.239875 -0.491058349609375 0.9999511726200581 -0.24 -0.497711181640625 0.9999511726200581 -0.240125 -0.499908447265625 0.9999511726200581 -0.24025 -0.4971923828125 0.9999511726200581 -0.240375 -0.488983154296875 0.9999511726200581 -0.2405 -0.4754638671875 0.9999511726200581 -0.240625 -0.45880126953125 0.9999511726200581 -0.24075 -0.435546875 0.9999511726200581 -0.240875 -0.410491943359375 0.9999511726200581 -0.241 -0.37841796875 0.9999511726200581 -0.241125 -0.342193603515625 0.9999511726200581 -0.24125 -0.306396484375 0.9999511726200581 -0.241375 -0.263427734375 0.9999511726200581 -0.2415 -0.222259521484375 0.9999511726200581 -0.241625 -0.174224853515625 0.9999511726200581 -0.24175 -0.124298095703125 0.9999511726200581 -0.241875 -0.07818603515625 0.9999511726200581 -0.242 -0.026123046875 0.9999511726200581 +0.23825 -0.03662109375 0.9999511726200581 +0.238375 -0.0833740234375 0.9999511726200581 +0.2385 -0.13446044921875 0.9999511726200581 +0.238625 -0.184051513671875 0.9999511726200581 +0.23875 -0.226959228515625 0.9999511726200581 +0.238875 -0.272308349609375 0.9999511726200581 +0.239 -0.310546875 0.9999511726200581 +0.239125 -0.34979248046875 0.9999511726200581 +0.23925 -0.385223388671875 0.9999511726200581 +0.239375 -0.413482666015625 0.9999511726200581 +0.2395 -0.44061279296875 0.9999511726200581 +0.239625 -0.46087646484375 0.9999511726200581 +0.23975 -0.478607177734375 0.9999511726200581 +0.239875 -0.4910888671875 0.9999511726200581 +0.24 -0.49774169921875 0.9999511726200581 +0.240125 -0.49993896484375 0.9999511726200581 +0.24025 -0.497222900390625 0.9999511726200581 +0.240375 -0.489013671875 0.9999511726200581 +0.2405 -0.475494384765625 0.9999511726200581 +0.240625 -0.458831787109375 0.9999511726200581 +0.24075 -0.435577392578125 0.9999511726200581 +0.240875 -0.4105224609375 0.9999511726200581 +0.241 -0.378448486328125 0.9999511726200581 +0.241125 -0.34222412109375 0.9999511726200581 +0.24125 -0.306427001953125 0.9999511726200581 +0.241375 -0.263458251953125 0.9999511726200581 +0.2415 -0.2222900390625 0.9999511726200581 +0.241625 -0.17425537109375 0.9999511726200581 +0.24175 -0.12432861328125 0.9999511726200581 +0.241875 -0.078216552734375 0.9999511726200581 +0.242 -0.026153564453125 0.9999511726200581 0.242125 0.020904541015625 0.9999511726200581 0.24225 0.072998046875 0.9999511726200581 0.242375 0.124298095703125 0.9999511726200581 @@ -1966,37 +1966,37 @@ 0.245625 0.13946533203125 0.9999511726200581 0.24575 0.0885009765625 0.9999511726200581 0.245875 0.04180908203125 0.9999511726200581 -0.246 -0.01043701171875 0.9999511726200581 -0.246125 -0.0626220703125 0.9999511726200581 -0.24625 -0.109039306640625 0.9999511726200581 -0.246375 -0.159454345703125 0.9999511726200581 -0.2465 -0.20330810546875 0.9999511726200581 -0.246625 -0.24993896484375 0.9999511726200581 -0.24675 -0.2938232421875 0.9999511726200581 -0.246875 -0.330596923828125 0.9999511726200581 -0.247 -0.36798095703125 0.9999511726200581 -0.247125 -0.398193359375 0.9999511726200581 -0.24725 -0.4276123046875 0.9999511726200581 -0.247375 -0.45233154296875 0.9999511726200581 -0.2475 -0.470367431640625 0.9999511726200581 -0.247625 -0.485504150390625 0.9999511726200581 -0.24775 -0.49456787109375 0.9999511726200581 -0.247875 -0.499481201171875 0.9999511726200581 -0.248 -0.498931884765625 0.9999511726200581 -0.248125 -0.4937744140625 0.9999511726200581 -0.24825 -0.482879638671875 0.9999511726200581 -0.248375 -0.46856689453125 0.9999511726200581 -0.2485 -0.447784423828125 0.9999511726200581 -0.248625 -0.422088623046875 0.9999511726200581 -0.24875 -0.39501953125 0.9999511726200581 -0.248875 -0.360809326171875 0.9999511726200581 -0.249 -0.32666015625 0.9999511726200581 -0.249125 -0.285308837890625 0.9999511726200581 -0.24925 -0.240814208984375 0.9999511726200581 -0.249375 -0.198516845703125 0.9999511726200581 -0.2495 -0.14947509765625 0.9999511726200581 -0.249625 -0.103912353515625 0.9999511726200581 -0.24975 -0.05224609375 0.9999511726200581 +0.246 -0.010467529296875 0.9999511726200581 +0.246125 -0.062652587890625 0.9999511726200581 +0.24625 -0.10906982421875 0.9999511726200581 +0.246375 -0.15948486328125 0.9999511726200581 +0.2465 -0.203338623046875 0.9999511726200581 +0.246625 -0.249969482421875 0.9999511726200581 +0.24675 -0.293853759765625 0.9999511726200581 +0.246875 -0.33062744140625 0.9999511726200581 +0.247 -0.368011474609375 0.9999511726200581 +0.247125 -0.398223876953125 0.9999511726200581 +0.24725 -0.427642822265625 0.9999511726200581 +0.247375 -0.452362060546875 0.9999511726200581 +0.2475 -0.47039794921875 0.9999511726200581 +0.247625 -0.48553466796875 0.9999511726200581 +0.24775 -0.494598388671875 0.9999511726200581 +0.247875 -0.49951171875 0.9999511726200581 +0.248 -0.49896240234375 0.9999511726200581 +0.248125 -0.493804931640625 0.9999511726200581 +0.24825 -0.48291015625 0.9999511726200581 +0.248375 -0.468597412109375 0.9999511726200581 +0.2485 -0.44781494140625 0.9999511726200581 +0.248625 -0.422119140625 0.9999511726200581 +0.24875 -0.395050048828125 0.9999511726200581 +0.248875 -0.36083984375 0.9999511726200581 +0.249 -0.326690673828125 0.9999511726200581 +0.249125 -0.28533935546875 0.9999511726200581 +0.24925 -0.2408447265625 0.9999511726200581 +0.249375 -0.19854736328125 0.9999511726200581 +0.2495 -0.149505615234375 0.9999511726200581 +0.249625 -0.10394287109375 0.9999511726200581 +0.24975 -0.052276611328125 0.9999511726200581 0.249875 0.0 0.9999511726200581 0.25 0.047027587890625 0.9999511726200581 0.250125 0.098785400390625 0.9999511726200581 @@ -2029,20 +2029,20 @@ 0.2535 0.1141357421875 0.9999511726200581 0.253625 0.0626220703125 0.9999511726200581 0.2537500000000001 0.01568603515625 0.9999511726200581 -0.253875 -0.036590576171875 0.9999511726200581 -0.254 -0.083343505859375 0.9999511726200581 -0.254125 -0.134429931640625 0.9999511726200581 -0.25425 -0.18402099609375 0.9999511726200581 -0.254375 -0.2269287109375 0.9999511726200581 -0.2545 -0.27227783203125 0.9999511726200581 -0.254625 -0.310516357421875 0.9999511726200581 -0.25475 -0.349761962890625 0.9999511726200581 -0.254875 -0.38519287109375 0.9999511726200581 -0.255 -0.4134521484375 0.9999511726200581 -0.255125 -0.440582275390625 0.9999511726200581 -0.25525 -0.460845947265625 0.9999511726200581 -0.255375 -0.47857666015625 0.9999511726200581 -0.2555 -0.491058349609375 0.9999511726200581 -0.255625 -0.497711181640625 0.9999511726200581 -0.25575 -0.499908447265625 0.9999511726200581 -0.255875 -0.4971923828125 0.9999511726200581 +0.253875 -0.03662109375 0.9999511726200581 +0.254 -0.0833740234375 0.9999511726200581 +0.254125 -0.13446044921875 0.9999511726200581 +0.25425 -0.184051513671875 0.9999511726200581 +0.254375 -0.226959228515625 0.9999511726200581 +0.2545 -0.272308349609375 0.9999511726200581 +0.254625 -0.310546875 0.9999511726200581 +0.25475 -0.34979248046875 0.9999511726200581 +0.254875 -0.385223388671875 0.9999511726200581 +0.255 -0.413482666015625 0.9999511726200581 +0.255125 -0.44061279296875 0.9999511726200581 +0.25525 -0.46087646484375 0.9999511726200581 +0.255375 -0.478607177734375 0.9999511726200581 +0.2555 -0.4910888671875 0.9999511726200581 +0.255625 -0.49774169921875 0.9999511726200581 +0.25575 -0.49993896484375 0.9999511726200581 +0.255875 -0.497222900390625 0.9999511726200581 diff --git a/tests/circuitpython/synth_note_bend.py.exp b/tests/circuitpython/synth_note_bend.py.exp index e79811509e..fda9787b38 100644 --- a/tests/circuitpython/synth_note_bend.py.exp +++ b/tests/circuitpython/synth_note_bend.py.exp @@ -208,188 +208,188 @@ 0.025875 0.01043701171875 -0.743977294921875 0.026 0.005218505859375 -0.743977294921875 0.026125 0.0 -0.743977294921875 -0.02625 -0.01043701171875 -0.743977294921875 -0.026375 -0.01568603515625 -0.743977294921875 -0.0265 -0.026123046875 -0.743977294921875 -0.026625 -0.0313720703125 -0.743977294921875 -0.02675 -0.04180908203125 -0.743977294921875 -0.026875 -0.047027587890625 -0.743977294921875 -0.027 -0.05224609375 -0.743977294921875 -0.027125 -0.0626220703125 -0.743977294921875 -0.02725 -0.06781005859375 -0.743977294921875 -0.027375 -0.07818603515625 -0.743977294921875 -0.0275 -0.083343505859375 -0.743977294921875 -0.027625 -0.093658447265625 -0.743977294921875 -0.02775 -0.098785400390625 -0.743977294921875 -0.027875 -0.109039306640625 -0.743977294921875 -0.028 -0.1141357421875 -0.743977294921875 -0.028125 -0.119232177734375 -0.743977294921875 -0.02825 -0.129364013671875 -0.743977294921875 -0.028375 -0.134429931640625 -0.743977294921875 -0.02850000000000001 -0.14447021484375 -0.743977294921875 -0.028625 -0.14947509765625 -0.743977294921875 -0.02875 -0.159454345703125 -0.743977294921875 -0.028875 -0.164398193359375 -0.743977294921875 -0.029 -0.169342041015625 -0.743977294921875 -0.029125 -0.17913818359375 -0.743977294921875 -0.02925 -0.18402099609375 -0.743977294921875 -0.029375 -0.1937255859375 -0.743977294921875 -0.0295 -0.19854736328125 -0.743977294921875 -0.029625 -0.208099365234375 -0.743977294921875 -0.02975000000000001 -0.212860107421875 -0.743977294921875 -0.029875 -0.21759033203125 -0.743977294921875 -0.03 -0.226959228515625 -0.743977294921875 -0.030125 -0.231597900390625 -0.743977294921875 -0.03025 -0.2408447265625 -0.743977294921875 -0.030375 -0.24542236328125 -0.743977294921875 -0.0305 -0.25445556640625 -0.743977294921875 -0.030625 -0.25897216796875 -0.743977294921875 -0.03075 -0.263427734375 -0.743977294921875 -0.03087499999999999 -0.27227783203125 -0.743977294921875 -0.031 -0.276641845703125 -0.743977294921875 -0.031125 -0.285308837890625 -0.743977294921875 -0.03125 -0.289581298828125 -0.743977294921875 -0.031375 -0.298065185546875 -0.743977294921875 -0.0315 -0.30224609375 -0.743977294921875 -0.03162500000000001 -0.310516357421875 -0.743977294921875 -0.03175 -0.314605712890625 -0.743977294921875 -0.031875 -0.31866455078125 -0.743977294921875 -0.032 -0.32666015625 -0.487985107421875 -0.032125 -0.334503173828125 -0.487985107421875 -0.03225 -0.34222412109375 -0.487985107421875 -0.032375 -0.34600830078125 -0.487985107421875 -0.0325 -0.353485107421875 -0.487985107421875 -0.032625 -0.360809326171875 -0.487985107421875 -0.03275 -0.36444091796875 -0.487985107421875 -0.032875 -0.37152099609375 -0.487985107421875 -0.033 -0.378448486328125 -0.487985107421875 -0.033125 -0.38519287109375 -0.487985107421875 -0.03325 -0.388519287109375 -0.487985107421875 -0.033375 -0.39501953125 -0.487985107421875 -0.0335 -0.401336669921875 -0.487985107421875 -0.03362500000000001 -0.404449462890625 -0.487985107421875 -0.03375 -0.4105224609375 -0.487985107421875 -0.033875 -0.416412353515625 -0.487985107421875 -0.034 -0.419281005859375 -0.487985107421875 -0.03412500000000001 -0.424896240234375 -0.487985107421875 -0.03425 -0.4302978515625 -0.487985107421875 -0.034375 -0.435546875 -0.487985107421875 -0.0345 -0.438079833984375 -0.487985107421875 -0.034625 -0.44305419921875 -0.487985107421875 -0.03475000000000001 -0.447784423828125 -0.487985107421875 -0.034875 -0.450103759765625 -0.487985107421875 -0.035 -0.454559326171875 -0.487985107421875 -0.03512500000000001 -0.458831787109375 -0.487985107421875 -0.03525 -0.462890625 -0.487985107421875 -0.035375 -0.464813232421875 -0.487985107421875 -0.0355 -0.46856689453125 -0.487985107421875 -0.03562500000000001 -0.472137451171875 -0.487985107421875 -0.03575 -0.47381591796875 -0.487985107421875 -0.035875 -0.47705078125 -0.487985107421875 -0.03600000000000001 -0.480072021484375 -0.487985107421875 -0.036125 -0.48291015625 -0.487985107421875 -0.03625 -0.484222412109375 -0.487985107421875 -0.036375 -0.486724853515625 -0.487985107421875 -0.0365 -0.489013671875 -0.487985107421875 -0.036625 -0.490081787109375 -0.487985107421875 -0.03675 -0.492034912109375 -0.487985107421875 -0.036875 -0.4937744140625 -0.487985107421875 -0.037 -0.49530029296875 -0.487985107421875 -0.03712499999999999 -0.496002197265625 -0.487985107421875 -0.03725 -0.4971923828125 -0.487985107421875 -0.037375 -0.498199462890625 -0.487985107421875 -0.0375 -0.49859619140625 -0.487985107421875 -0.037625 -0.499267578125 -0.487985107421875 -0.03775 -0.49969482421875 -0.487985107421875 -0.037875 -0.499908447265625 -0.487985107421875 -0.038 -0.49993896484375 -0.487985107421875 -0.038125 -0.49981689453125 -0.487985107421875 -0.03825 -0.49951171875 -0.487985107421875 -0.038375 -0.499267578125 -0.487985107421875 -0.0385 -0.49859619140625 -0.487985107421875 -0.038625 -0.497711181640625 -0.487985107421875 -0.03875 -0.496612548828125 -0.487985107421875 -0.038875 -0.496002197265625 -0.487985107421875 -0.039 -0.49456787109375 -0.487985107421875 -0.039125 -0.492950439453125 -0.487985107421875 -0.03925 -0.492034912109375 -0.487985107421875 -0.039375 -0.490081787109375 -0.487985107421875 -0.0395 -0.487884521484375 -0.487985107421875 -0.039625 -0.485504150390625 -0.487985107421875 -0.03975 -0.484222412109375 -0.487985107421875 -0.039875 -0.48150634765625 -0.487985107421875 -0.04 -0.478607177734375 -0.487985107421875 -0.040125 -0.47705078125 -0.487985107421875 -0.04025 -0.47381591796875 -0.487985107421875 -0.040375 -0.470367431640625 -0.487985107421875 -0.04050000000000001 -0.46856689453125 -0.487985107421875 -0.040625 -0.464813232421875 -0.487985107421875 -0.04075 -0.46087646484375 -0.487985107421875 -0.040875 -0.45672607421875 -0.487985107421875 -0.04100000000000001 -0.454559326171875 -0.487985107421875 -0.041125 -0.450103759765625 -0.487985107421875 -0.04125 -0.4454345703125 -0.487985107421875 -0.041375 -0.44305419921875 -0.487985107421875 -0.0415 -0.438079833984375 -0.487985107421875 -0.041625 -0.432952880859375 -0.487985107421875 -0.04175000000000001 -0.4276123046875 -0.487985107421875 -0.041875 -0.424896240234375 -0.487985107421875 -0.042 -0.419281005859375 -0.487985107421875 -0.042125 -0.413482666015625 -0.487985107421875 -0.04225000000000001 -0.4105224609375 -0.487985107421875 -0.042375 -0.404449462890625 -0.487985107421875 -0.0425 -0.398193359375 -0.487985107421875 -0.042625 -0.39178466796875 -0.487985107421875 -0.04275 -0.388519287109375 -0.487985107421875 -0.04287500000000001 -0.3818359375 -0.487985107421875 -0.04300000000000001 -0.375 -0.487985107421875 -0.043125 -0.37152099609375 -0.487985107421875 -0.04325 -0.36444091796875 -0.487985107421875 -0.043375 -0.357177734375 -0.487985107421875 -0.04350000000000001 -0.349761962890625 -0.487985107421875 -0.04362500000000001 -0.34600830078125 -0.487985107421875 -0.04375000000000001 -0.33837890625 -0.487985107421875 -0.043875 -0.330596923828125 -0.487985107421875 -0.04399999999999999 -0.32666015625 -0.487985107421875 -0.044125 -0.31866455078125 -0.487985107421875 -0.04425 -0.310516357421875 -0.487985107421875 -0.044375 -0.30224609375 -0.487985107421875 -0.04449999999999999 -0.298065185546875 -0.487985107421875 -0.04462499999999999 -0.289581298828125 -0.487985107421875 -0.04475 -0.280975341796875 -0.487985107421875 -0.044875 -0.276641845703125 -0.487985107421875 -0.045 -0.267852783203125 -0.487985107421875 -0.045125 -0.25897216796875 -0.487985107421875 -0.04525 -0.249969482421875 -0.487985107421875 -0.045375 -0.24542236328125 -0.487985107421875 -0.0455 -0.236236572265625 -0.487985107421875 -0.045625 -0.226959228515625 -0.487985107421875 -0.04575 -0.2222900390625 -0.487985107421875 -0.045875 -0.212860107421875 -0.487985107421875 -0.046 -0.203338623046875 -0.487985107421875 -0.046125 -0.1937255859375 -0.487985107421875 -0.04625 -0.188873291015625 -0.487985107421875 -0.046375 -0.17913818359375 -0.487985107421875 -0.04649999999999999 -0.169342041015625 -0.487985107421875 -0.046625 -0.164398193359375 -0.487985107421875 -0.04675000000000001 -0.15447998046875 -0.487985107421875 -0.046875 -0.14447021484375 -0.487985107421875 -0.04699999999999999 -0.13946533203125 -0.487985107421875 -0.047125 -0.129364013671875 -0.487985107421875 -0.04725000000000001 -0.119232177734375 -0.487985107421875 -0.047375 -0.109039306640625 -0.487985107421875 -0.0475 -0.103912353515625 -0.487985107421875 -0.047625 -0.093658447265625 -0.487985107421875 -0.04775 -0.083343505859375 -0.487985107421875 -0.047875 -0.07818603515625 -0.487985107421875 -0.048 -0.06781005859375 -0.487985107421875 -0.048125 -0.05743408203125 -0.487985107421875 -0.04825 -0.047027587890625 -0.487985107421875 -0.048375 -0.04180908203125 -0.487985107421875 -0.0485 -0.0313720703125 -0.487985107421875 -0.048625 -0.020904541015625 -0.487985107421875 -0.04875 -0.01568603515625 -0.487985107421875 -0.048875 -0.005218505859375 -0.487985107421875 +0.02625 -0.010467529296875 -0.743977294921875 +0.026375 -0.015716552734375 -0.743977294921875 +0.0265 -0.026153564453125 -0.743977294921875 +0.026625 -0.031402587890625 -0.743977294921875 +0.02675 -0.041839599609375 -0.743977294921875 +0.026875 -0.04705810546875 -0.743977294921875 +0.027 -0.052276611328125 -0.743977294921875 +0.027125 -0.062652587890625 -0.743977294921875 +0.02725 -0.067840576171875 -0.743977294921875 +0.027375 -0.078216552734375 -0.743977294921875 +0.0275 -0.0833740234375 -0.743977294921875 +0.027625 -0.09368896484375 -0.743977294921875 +0.02775 -0.09881591796875 -0.743977294921875 +0.027875 -0.10906982421875 -0.743977294921875 +0.028 -0.114166259765625 -0.743977294921875 +0.028125 -0.1192626953125 -0.743977294921875 +0.02825 -0.12939453125 -0.743977294921875 +0.028375 -0.13446044921875 -0.743977294921875 +0.02850000000000001 -0.144500732421875 -0.743977294921875 +0.028625 -0.149505615234375 -0.743977294921875 +0.02875 -0.15948486328125 -0.743977294921875 +0.028875 -0.1644287109375 -0.743977294921875 +0.029 -0.16937255859375 -0.743977294921875 +0.029125 -0.179168701171875 -0.743977294921875 +0.02925 -0.184051513671875 -0.743977294921875 +0.029375 -0.193756103515625 -0.743977294921875 +0.0295 -0.198577880859375 -0.743977294921875 +0.029625 -0.2081298828125 -0.743977294921875 +0.02975000000000001 -0.212890625 -0.743977294921875 +0.029875 -0.217620849609375 -0.743977294921875 +0.03 -0.22698974609375 -0.743977294921875 +0.030125 -0.23162841796875 -0.743977294921875 +0.03025 -0.240875244140625 -0.743977294921875 +0.030375 -0.245452880859375 -0.743977294921875 +0.0305 -0.254486083984375 -0.743977294921875 +0.030625 -0.259002685546875 -0.743977294921875 +0.03075 -0.263458251953125 -0.743977294921875 +0.03087499999999999 -0.272308349609375 -0.743977294921875 +0.031 -0.27667236328125 -0.743977294921875 +0.031125 -0.28533935546875 -0.743977294921875 +0.03125 -0.28961181640625 -0.743977294921875 +0.031375 -0.298095703125 -0.743977294921875 +0.0315 -0.302276611328125 -0.743977294921875 +0.03162500000000001 -0.310546875 -0.743977294921875 +0.03175 -0.31463623046875 -0.743977294921875 +0.031875 -0.318695068359375 -0.743977294921875 +0.032 -0.326690673828125 -0.487985107421875 +0.032125 -0.33453369140625 -0.487985107421875 +0.03225 -0.342254638671875 -0.487985107421875 +0.032375 -0.346038818359375 -0.487985107421875 +0.0325 -0.353515625 -0.487985107421875 +0.032625 -0.36083984375 -0.487985107421875 +0.03275 -0.364471435546875 -0.487985107421875 +0.032875 -0.371551513671875 -0.487985107421875 +0.033 -0.37847900390625 -0.487985107421875 +0.033125 -0.385223388671875 -0.487985107421875 +0.03325 -0.3885498046875 -0.487985107421875 +0.033375 -0.395050048828125 -0.487985107421875 +0.0335 -0.4013671875 -0.487985107421875 +0.03362500000000001 -0.40447998046875 -0.487985107421875 +0.03375 -0.410552978515625 -0.487985107421875 +0.033875 -0.41644287109375 -0.487985107421875 +0.034 -0.4193115234375 -0.487985107421875 +0.03412500000000001 -0.4249267578125 -0.487985107421875 +0.03425 -0.430328369140625 -0.487985107421875 +0.034375 -0.435577392578125 -0.487985107421875 +0.0345 -0.4381103515625 -0.487985107421875 +0.034625 -0.443084716796875 -0.487985107421875 +0.03475000000000001 -0.44781494140625 -0.487985107421875 +0.034875 -0.45013427734375 -0.487985107421875 +0.035 -0.45458984375 -0.487985107421875 +0.03512500000000001 -0.4588623046875 -0.487985107421875 +0.03525 -0.462921142578125 -0.487985107421875 +0.035375 -0.46484375 -0.487985107421875 +0.0355 -0.468597412109375 -0.487985107421875 +0.03562500000000001 -0.47216796875 -0.487985107421875 +0.03575 -0.473846435546875 -0.487985107421875 +0.035875 -0.477081298828125 -0.487985107421875 +0.03600000000000001 -0.4801025390625 -0.487985107421875 +0.036125 -0.482940673828125 -0.487985107421875 +0.03625 -0.4842529296875 -0.487985107421875 +0.036375 -0.48675537109375 -0.487985107421875 +0.0365 -0.489044189453125 -0.487985107421875 +0.036625 -0.4901123046875 -0.487985107421875 +0.03675 -0.4920654296875 -0.487985107421875 +0.036875 -0.493804931640625 -0.487985107421875 +0.037 -0.495330810546875 -0.487985107421875 +0.03712499999999999 -0.49603271484375 -0.487985107421875 +0.03725 -0.497222900390625 -0.487985107421875 +0.037375 -0.49822998046875 -0.487985107421875 +0.0375 -0.498626708984375 -0.487985107421875 +0.037625 -0.499298095703125 -0.487985107421875 +0.03775 -0.499725341796875 -0.487985107421875 +0.037875 -0.49993896484375 -0.487985107421875 +0.038 -0.499969482421875 -0.487985107421875 +0.038125 -0.499847412109375 -0.487985107421875 +0.03825 -0.499542236328125 -0.487985107421875 +0.038375 -0.499298095703125 -0.487985107421875 +0.0385 -0.498626708984375 -0.487985107421875 +0.038625 -0.49774169921875 -0.487985107421875 +0.03875 -0.49664306640625 -0.487985107421875 +0.038875 -0.49603271484375 -0.487985107421875 +0.039 -0.494598388671875 -0.487985107421875 +0.039125 -0.49298095703125 -0.487985107421875 +0.03925 -0.4920654296875 -0.487985107421875 +0.039375 -0.4901123046875 -0.487985107421875 +0.0395 -0.4879150390625 -0.487985107421875 +0.039625 -0.48553466796875 -0.487985107421875 +0.03975 -0.4842529296875 -0.487985107421875 +0.039875 -0.481536865234375 -0.487985107421875 +0.04 -0.4786376953125 -0.487985107421875 +0.040125 -0.477081298828125 -0.487985107421875 +0.04025 -0.473846435546875 -0.487985107421875 +0.040375 -0.47039794921875 -0.487985107421875 +0.04050000000000001 -0.468597412109375 -0.487985107421875 +0.040625 -0.46484375 -0.487985107421875 +0.04075 -0.460906982421875 -0.487985107421875 +0.040875 -0.456756591796875 -0.487985107421875 +0.04100000000000001 -0.45458984375 -0.487985107421875 +0.041125 -0.45013427734375 -0.487985107421875 +0.04125 -0.445465087890625 -0.487985107421875 +0.041375 -0.443084716796875 -0.487985107421875 +0.0415 -0.4381103515625 -0.487985107421875 +0.041625 -0.4329833984375 -0.487985107421875 +0.04175000000000001 -0.427642822265625 -0.487985107421875 +0.041875 -0.4249267578125 -0.487985107421875 +0.042 -0.4193115234375 -0.487985107421875 +0.042125 -0.41351318359375 -0.487985107421875 +0.04225000000000001 -0.410552978515625 -0.487985107421875 +0.042375 -0.40447998046875 -0.487985107421875 +0.0425 -0.398223876953125 -0.487985107421875 +0.042625 -0.391815185546875 -0.487985107421875 +0.04275 -0.3885498046875 -0.487985107421875 +0.04287500000000001 -0.381866455078125 -0.487985107421875 +0.04300000000000001 -0.375030517578125 -0.487985107421875 +0.043125 -0.371551513671875 -0.487985107421875 +0.04325 -0.364471435546875 -0.487985107421875 +0.043375 -0.357208251953125 -0.487985107421875 +0.04350000000000001 -0.34979248046875 -0.487985107421875 +0.04362500000000001 -0.346038818359375 -0.487985107421875 +0.04375000000000001 -0.338409423828125 -0.487985107421875 +0.043875 -0.33062744140625 -0.487985107421875 +0.04399999999999999 -0.326690673828125 -0.487985107421875 +0.044125 -0.318695068359375 -0.487985107421875 +0.04425 -0.310546875 -0.487985107421875 +0.044375 -0.302276611328125 -0.487985107421875 +0.04449999999999999 -0.298095703125 -0.487985107421875 +0.04462499999999999 -0.28961181640625 -0.487985107421875 +0.04475 -0.281005859375 -0.487985107421875 +0.044875 -0.27667236328125 -0.487985107421875 +0.045 -0.26788330078125 -0.487985107421875 +0.045125 -0.259002685546875 -0.487985107421875 +0.04525 -0.25 -0.487985107421875 +0.045375 -0.245452880859375 -0.487985107421875 +0.0455 -0.23626708984375 -0.487985107421875 +0.045625 -0.22698974609375 -0.487985107421875 +0.04575 -0.222320556640625 -0.487985107421875 +0.045875 -0.212890625 -0.487985107421875 +0.046 -0.203369140625 -0.487985107421875 +0.046125 -0.193756103515625 -0.487985107421875 +0.04625 -0.18890380859375 -0.487985107421875 +0.046375 -0.179168701171875 -0.487985107421875 +0.04649999999999999 -0.16937255859375 -0.487985107421875 +0.046625 -0.1644287109375 -0.487985107421875 +0.04675000000000001 -0.154510498046875 -0.487985107421875 +0.046875 -0.144500732421875 -0.487985107421875 +0.04699999999999999 -0.139495849609375 -0.487985107421875 +0.047125 -0.12939453125 -0.487985107421875 +0.04725000000000001 -0.1192626953125 -0.487985107421875 +0.047375 -0.10906982421875 -0.487985107421875 +0.0475 -0.10394287109375 -0.487985107421875 +0.047625 -0.09368896484375 -0.487985107421875 +0.04775 -0.0833740234375 -0.487985107421875 +0.047875 -0.078216552734375 -0.487985107421875 +0.048 -0.067840576171875 -0.487985107421875 +0.048125 -0.057464599609375 -0.487985107421875 +0.04825 -0.04705810546875 -0.487985107421875 +0.048375 -0.041839599609375 -0.487985107421875 +0.0485 -0.031402587890625 -0.487985107421875 +0.048625 -0.02093505859375 -0.487985107421875 +0.04875 -0.015716552734375 -0.487985107421875 +0.048875 -0.0052490234375 -0.487985107421875 0.049 0.005218505859375 -0.487985107421875 0.04912500000000001 0.01568603515625 -0.487985107421875 0.04925000000000001 0.020904541015625 -0.487985107421875 @@ -556,153 +556,153 @@ 0.06937500000000001 0.0313720703125 -0.2319929199218749 0.06950000000000001 0.01568603515625 -0.2319929199218749 0.069625 0.005218505859375 -0.2319929199218749 -0.06975 -0.005218505859375 -0.2319929199218749 -0.06987500000000001 -0.01568603515625 -0.2319929199218749 -0.07000000000000001 -0.026123046875 -0.2319929199218749 -0.070125 -0.036590576171875 -0.2319929199218749 -0.07025000000000001 -0.047027587890625 -0.2319929199218749 -0.07037500000000001 -0.05743408203125 -0.2319929199218749 -0.07050000000000001 -0.06781005859375 -0.2319929199218749 -0.070625 -0.07818603515625 -0.2319929199218749 -0.07075 -0.0885009765625 -0.2319929199218749 -0.07087500000000001 -0.098785400390625 -0.2319929199218749 -0.07100000000000001 -0.109039306640625 -0.2319929199218749 -0.07112500000000001 -0.119232177734375 -0.2319929199218749 -0.07125000000000002 -0.129364013671875 -0.2319929199218749 -0.07137500000000001 -0.13946533203125 -0.2319929199218749 -0.0715 -0.14947509765625 -0.2319929199218749 -0.07162500000000001 -0.159454345703125 -0.2319929199218749 -0.07175000000000001 -0.169342041015625 -0.2319929199218749 -0.07187500000000001 -0.17913818359375 -0.2319929199218749 -0.07200000000000001 -0.188873291015625 -0.2319929199218749 -0.07212499999999999 -0.19854736328125 -0.2319929199218749 -0.07225 -0.212860107421875 -0.2319929199218749 -0.07237499999999999 -0.2222900390625 -0.2319929199218749 -0.0725 -0.231597900390625 -0.2319929199218749 -0.07262499999999999 -0.2408447265625 -0.2319929199218749 -0.07274999999999999 -0.249969482421875 -0.2319929199218749 -0.072875 -0.25897216796875 -0.2319929199218749 -0.073 -0.267852783203125 -0.2319929199218749 -0.073125 -0.276641845703125 -0.2319929199218749 -0.07324999999999999 -0.285308837890625 -0.2319929199218749 -0.07337499999999999 -0.2938232421875 -0.2319929199218749 -0.0735 -0.30224609375 -0.2319929199218749 -0.073625 -0.310516357421875 -0.2319929199218749 -0.07374999999999999 -0.31866455078125 -0.2319929199218749 -0.073875 -0.32666015625 -0.2319929199218749 -0.074 -0.334503173828125 -0.2319929199218749 -0.074125 -0.34222412109375 -0.2319929199218749 -0.07424999999999999 -0.349761962890625 -0.2319929199218749 -0.07437499999999999 -0.357177734375 -0.2319929199218749 -0.0745 -0.36444091796875 -0.2319929199218749 -0.07462499999999999 -0.37152099609375 -0.2319929199218749 -0.07475 -0.378448486328125 -0.2319929199218749 -0.07487500000000001 -0.38519287109375 -0.2319929199218749 -0.075 -0.39178466796875 -0.2319929199218749 -0.07512499999999999 -0.401336669921875 -0.2319929199218749 -0.07524999999999999 -0.407501220703125 -0.2319929199218749 -0.075375 -0.413482666015625 -0.2319929199218749 -0.0755 -0.419281005859375 -0.2319929199218749 -0.075625 -0.424896240234375 -0.2319929199218749 -0.07574999999999999 -0.4302978515625 -0.2319929199218749 -0.075875 -0.435546875 -0.2319929199218749 -0.076 -0.440582275390625 -0.2319929199218749 -0.076125 -0.4454345703125 -0.2319929199218749 -0.07625 -0.450103759765625 -0.2319929199218749 -0.07637499999999999 -0.454559326171875 -0.2319929199218749 -0.0765 -0.458831787109375 -0.2319929199218749 -0.076625 -0.462890625 -0.2319929199218749 -0.07675 -0.46673583984375 -0.2319929199218749 -0.076875 -0.470367431640625 -0.2319929199218749 -0.077 -0.47381591796875 -0.2319929199218749 -0.077125 -0.47705078125 -0.2319929199218749 -0.07725 -0.480072021484375 -0.2319929199218749 -0.07737499999999999 -0.48291015625 -0.2319929199218749 -0.0775 -0.485504150390625 -0.2319929199218749 -0.077625 -0.487884521484375 -0.2319929199218749 -0.07774999999999999 -0.490081787109375 -0.2319929199218749 -0.07787500000000001 -0.492034912109375 -0.2319929199218749 -0.07800000000000001 -0.49456787109375 -0.2319929199218749 -0.078125 -0.496002197265625 -0.2319929199218749 -0.07824999999999999 -0.4971923828125 -0.2319929199218749 -0.07837499999999999 -0.498199462890625 -0.2319929199218749 -0.07850000000000001 -0.49896240234375 -0.2319929199218749 -0.078625 -0.49951171875 -0.2319929199218749 -0.07875 -0.49981689453125 -0.2319929199218749 -0.07887500000000001 -0.49993896484375 -0.2319929199218749 -0.079 -0.49981689453125 -0.2319929199218749 -0.079125 -0.49951171875 -0.2319929199218749 -0.07925 -0.49896240234375 -0.2319929199218749 -0.079375 -0.498199462890625 -0.2319929199218749 -0.0795 -0.4971923828125 -0.2319929199218749 -0.079625 -0.496002197265625 -0.2319929199218749 -0.07975 -0.49456787109375 -0.2319929199218749 -0.07987500000000001 -0.492950439453125 -0.2319929199218749 -0.08 -0.4910888671875 -0.2319929199218749 -0.08012499999999999 -0.489013671875 -0.2319929199218749 -0.08025 -0.486724853515625 -0.2319929199218749 -0.080375 -0.484222412109375 -0.2319929199218749 -0.08050000000000001 -0.48150634765625 -0.2319929199218749 -0.080625 -0.478607177734375 -0.2319929199218749 -0.08074999999999999 -0.47381591796875 -0.2319929199218749 -0.080875 -0.470367431640625 -0.2319929199218749 -0.08100000000000001 -0.46673583984375 -0.2319929199218749 -0.08112500000000001 -0.462890625 -0.2319929199218749 -0.08125 -0.458831787109375 -0.2319929199218749 -0.08137499999999999 -0.454559326171875 -0.2319929199218749 -0.0815 -0.450103759765625 -0.2319929199218749 -0.081625 -0.4454345703125 -0.2319929199218749 -0.08175000000000001 -0.440582275390625 -0.2319929199218749 -0.081875 -0.435546875 -0.2319929199218749 -0.08200000000000001 -0.4302978515625 -0.2319929199218749 -0.082125 -0.424896240234375 -0.2319929199218749 -0.08225 -0.419281005859375 -0.2319929199218749 -0.08237500000000001 -0.413482666015625 -0.2319929199218749 -0.0825 -0.407501220703125 -0.2319929199218749 -0.08262500000000001 -0.401336669921875 -0.2319929199218749 -0.08275 -0.39501953125 -0.2319929199218749 -0.08287500000000001 -0.388519287109375 -0.2319929199218749 -0.08300000000000001 -0.3818359375 -0.2319929199218749 -0.083125 -0.375 -0.2319929199218749 -0.08324999999999999 -0.36798095703125 -0.2319929199218749 -0.083375 -0.360809326171875 -0.2319929199218749 -0.08350000000000001 -0.353485107421875 -0.2319929199218749 -0.08362500000000001 -0.34222412109375 -0.2319929199218749 -0.08375 -0.334503173828125 -0.2319929199218749 -0.08387500000000001 -0.32666015625 -0.2319929199218749 -0.084 -0.31866455078125 -0.2319929199218749 -0.08412500000000001 -0.310516357421875 -0.2319929199218749 -0.08425000000000001 -0.30224609375 -0.2319929199218749 -0.084375 -0.2938232421875 -0.2319929199218749 -0.08450000000000001 -0.285308837890625 -0.2319929199218749 -0.084625 -0.276641845703125 -0.2319929199218749 -0.08475 -0.267852783203125 -0.2319929199218749 -0.08487500000000001 -0.25897216796875 -0.2319929199218749 -0.085 -0.249969482421875 -0.2319929199218749 -0.08512500000000001 -0.2408447265625 -0.2319929199218749 -0.08525 -0.231597900390625 -0.2319929199218749 -0.085375 -0.2222900390625 -0.2319929199218749 -0.08550000000000001 -0.212860107421875 -0.2319929199218749 -0.085625 -0.203338623046875 -0.2319929199218749 -0.08575000000000001 -0.1937255859375 -0.2319929199218749 -0.08587500000000002 -0.18402099609375 -0.2319929199218749 -0.08600000000000001 -0.17425537109375 -0.2319929199218749 -0.08612500000000001 -0.164398193359375 -0.2319929199218749 -0.08625 -0.15447998046875 -0.2319929199218749 -0.08637499999999999 -0.14447021484375 -0.2319929199218749 -0.0865 -0.129364013671875 -0.2319929199218749 -0.08662500000000001 -0.119232177734375 -0.2319929199218749 -0.08675000000000001 -0.109039306640625 -0.2319929199218749 -0.08687500000000002 -0.098785400390625 -0.2319929199218749 -0.08700000000000001 -0.0885009765625 -0.2319929199218749 -0.087125 -0.07818603515625 -0.2319929199218749 -0.08725000000000001 -0.06781005859375 -0.2319929199218749 -0.08737500000000001 -0.05743408203125 -0.2319929199218749 -0.08750000000000002 -0.047027587890625 -0.2319929199218749 -0.08762500000000001 -0.036590576171875 -0.2319929199218749 -0.08775 -0.026123046875 -0.2319929199218749 -0.08787500000000001 -0.01568603515625 -0.2319929199218749 -0.08799999999999999 -0.005218505859375 -0.2319929199218749 +0.06975 -0.0052490234375 -0.2319929199218749 +0.06987500000000001 -0.015716552734375 -0.2319929199218749 +0.07000000000000001 -0.026153564453125 -0.2319929199218749 +0.070125 -0.03662109375 -0.2319929199218749 +0.07025000000000001 -0.04705810546875 -0.2319929199218749 +0.07037500000000001 -0.057464599609375 -0.2319929199218749 +0.07050000000000001 -0.067840576171875 -0.2319929199218749 +0.070625 -0.078216552734375 -0.2319929199218749 +0.07075 -0.088531494140625 -0.2319929199218749 +0.07087500000000001 -0.09881591796875 -0.2319929199218749 +0.07100000000000001 -0.10906982421875 -0.2319929199218749 +0.07112500000000001 -0.1192626953125 -0.2319929199218749 +0.07125000000000002 -0.12939453125 -0.2319929199218749 +0.07137500000000001 -0.139495849609375 -0.2319929199218749 +0.0715 -0.149505615234375 -0.2319929199218749 +0.07162500000000001 -0.15948486328125 -0.2319929199218749 +0.07175000000000001 -0.16937255859375 -0.2319929199218749 +0.07187500000000001 -0.179168701171875 -0.2319929199218749 +0.07200000000000001 -0.18890380859375 -0.2319929199218749 +0.07212499999999999 -0.198577880859375 -0.2319929199218749 +0.07225 -0.212890625 -0.2319929199218749 +0.07237499999999999 -0.222320556640625 -0.2319929199218749 +0.0725 -0.23162841796875 -0.2319929199218749 +0.07262499999999999 -0.240875244140625 -0.2319929199218749 +0.07274999999999999 -0.25 -0.2319929199218749 +0.072875 -0.259002685546875 -0.2319929199218749 +0.073 -0.26788330078125 -0.2319929199218749 +0.073125 -0.27667236328125 -0.2319929199218749 +0.07324999999999999 -0.28533935546875 -0.2319929199218749 +0.07337499999999999 -0.293853759765625 -0.2319929199218749 +0.0735 -0.302276611328125 -0.2319929199218749 +0.073625 -0.310546875 -0.2319929199218749 +0.07374999999999999 -0.318695068359375 -0.2319929199218749 +0.073875 -0.326690673828125 -0.2319929199218749 +0.074 -0.33453369140625 -0.2319929199218749 +0.074125 -0.342254638671875 -0.2319929199218749 +0.07424999999999999 -0.34979248046875 -0.2319929199218749 +0.07437499999999999 -0.357208251953125 -0.2319929199218749 +0.0745 -0.364471435546875 -0.2319929199218749 +0.07462499999999999 -0.371551513671875 -0.2319929199218749 +0.07475 -0.37847900390625 -0.2319929199218749 +0.07487500000000001 -0.385223388671875 -0.2319929199218749 +0.075 -0.391815185546875 -0.2319929199218749 +0.07512499999999999 -0.4013671875 -0.2319929199218749 +0.07524999999999999 -0.40753173828125 -0.2319929199218749 +0.075375 -0.41351318359375 -0.2319929199218749 +0.0755 -0.4193115234375 -0.2319929199218749 +0.075625 -0.4249267578125 -0.2319929199218749 +0.07574999999999999 -0.430328369140625 -0.2319929199218749 +0.075875 -0.435577392578125 -0.2319929199218749 +0.076 -0.44061279296875 -0.2319929199218749 +0.076125 -0.445465087890625 -0.2319929199218749 +0.07625 -0.45013427734375 -0.2319929199218749 +0.07637499999999999 -0.45458984375 -0.2319929199218749 +0.0765 -0.4588623046875 -0.2319929199218749 +0.076625 -0.462921142578125 -0.2319929199218749 +0.07675 -0.466766357421875 -0.2319929199218749 +0.076875 -0.47039794921875 -0.2319929199218749 +0.077 -0.473846435546875 -0.2319929199218749 +0.077125 -0.477081298828125 -0.2319929199218749 +0.07725 -0.4801025390625 -0.2319929199218749 +0.07737499999999999 -0.482940673828125 -0.2319929199218749 +0.0775 -0.48553466796875 -0.2319929199218749 +0.077625 -0.4879150390625 -0.2319929199218749 +0.07774999999999999 -0.4901123046875 -0.2319929199218749 +0.07787500000000001 -0.4920654296875 -0.2319929199218749 +0.07800000000000001 -0.494598388671875 -0.2319929199218749 +0.078125 -0.49603271484375 -0.2319929199218749 +0.07824999999999999 -0.497222900390625 -0.2319929199218749 +0.07837499999999999 -0.49822998046875 -0.2319929199218749 +0.07850000000000001 -0.498992919921875 -0.2319929199218749 +0.078625 -0.499542236328125 -0.2319929199218749 +0.07875 -0.499847412109375 -0.2319929199218749 +0.07887500000000001 -0.499969482421875 -0.2319929199218749 +0.079 -0.499847412109375 -0.2319929199218749 +0.079125 -0.499542236328125 -0.2319929199218749 +0.07925 -0.498992919921875 -0.2319929199218749 +0.079375 -0.49822998046875 -0.2319929199218749 +0.0795 -0.497222900390625 -0.2319929199218749 +0.079625 -0.49603271484375 -0.2319929199218749 +0.07975 -0.494598388671875 -0.2319929199218749 +0.07987500000000001 -0.49298095703125 -0.2319929199218749 +0.08 -0.491119384765625 -0.2319929199218749 +0.08012499999999999 -0.489044189453125 -0.2319929199218749 +0.08025 -0.48675537109375 -0.2319929199218749 +0.080375 -0.4842529296875 -0.2319929199218749 +0.08050000000000001 -0.481536865234375 -0.2319929199218749 +0.080625 -0.4786376953125 -0.2319929199218749 +0.08074999999999999 -0.473846435546875 -0.2319929199218749 +0.080875 -0.47039794921875 -0.2319929199218749 +0.08100000000000001 -0.466766357421875 -0.2319929199218749 +0.08112500000000001 -0.462921142578125 -0.2319929199218749 +0.08125 -0.4588623046875 -0.2319929199218749 +0.08137499999999999 -0.45458984375 -0.2319929199218749 +0.0815 -0.45013427734375 -0.2319929199218749 +0.081625 -0.445465087890625 -0.2319929199218749 +0.08175000000000001 -0.44061279296875 -0.2319929199218749 +0.081875 -0.435577392578125 -0.2319929199218749 +0.08200000000000001 -0.430328369140625 -0.2319929199218749 +0.082125 -0.4249267578125 -0.2319929199218749 +0.08225 -0.4193115234375 -0.2319929199218749 +0.08237500000000001 -0.41351318359375 -0.2319929199218749 +0.0825 -0.40753173828125 -0.2319929199218749 +0.08262500000000001 -0.4013671875 -0.2319929199218749 +0.08275 -0.395050048828125 -0.2319929199218749 +0.08287500000000001 -0.3885498046875 -0.2319929199218749 +0.08300000000000001 -0.381866455078125 -0.2319929199218749 +0.083125 -0.375030517578125 -0.2319929199218749 +0.08324999999999999 -0.368011474609375 -0.2319929199218749 +0.083375 -0.36083984375 -0.2319929199218749 +0.08350000000000001 -0.353515625 -0.2319929199218749 +0.08362500000000001 -0.342254638671875 -0.2319929199218749 +0.08375 -0.33453369140625 -0.2319929199218749 +0.08387500000000001 -0.326690673828125 -0.2319929199218749 +0.084 -0.318695068359375 -0.2319929199218749 +0.08412500000000001 -0.310546875 -0.2319929199218749 +0.08425000000000001 -0.302276611328125 -0.2319929199218749 +0.084375 -0.293853759765625 -0.2319929199218749 +0.08450000000000001 -0.28533935546875 -0.2319929199218749 +0.084625 -0.27667236328125 -0.2319929199218749 +0.08475 -0.26788330078125 -0.2319929199218749 +0.08487500000000001 -0.259002685546875 -0.2319929199218749 +0.085 -0.25 -0.2319929199218749 +0.08512500000000001 -0.240875244140625 -0.2319929199218749 +0.08525 -0.23162841796875 -0.2319929199218749 +0.085375 -0.222320556640625 -0.2319929199218749 +0.08550000000000001 -0.212890625 -0.2319929199218749 +0.085625 -0.203369140625 -0.2319929199218749 +0.08575000000000001 -0.193756103515625 -0.2319929199218749 +0.08587500000000002 -0.184051513671875 -0.2319929199218749 +0.08600000000000001 -0.174285888671875 -0.2319929199218749 +0.08612500000000001 -0.1644287109375 -0.2319929199218749 +0.08625 -0.154510498046875 -0.2319929199218749 +0.08637499999999999 -0.144500732421875 -0.2319929199218749 +0.0865 -0.12939453125 -0.2319929199218749 +0.08662500000000001 -0.1192626953125 -0.2319929199218749 +0.08675000000000001 -0.10906982421875 -0.2319929199218749 +0.08687500000000002 -0.09881591796875 -0.2319929199218749 +0.08700000000000001 -0.088531494140625 -0.2319929199218749 +0.087125 -0.078216552734375 -0.2319929199218749 +0.08725000000000001 -0.067840576171875 -0.2319929199218749 +0.08737500000000001 -0.057464599609375 -0.2319929199218749 +0.08750000000000002 -0.04705810546875 -0.2319929199218749 +0.08762500000000001 -0.03662109375 -0.2319929199218749 +0.08775 -0.026153564453125 -0.2319929199218749 +0.08787500000000001 -0.015716552734375 -0.2319929199218749 +0.08799999999999999 -0.0052490234375 -0.2319929199218749 0.088125 0.005218505859375 -0.2319929199218749 0.08824999999999999 0.01568603515625 -0.2319929199218749 0.08837499999999999 0.026123046875 -0.2319929199218749 @@ -836,129 +836,129 @@ 0.104375 0.0313720703125 0.02399926757812504 0.1045 0.020904541015625 0.02399926757812504 0.104625 0.005218505859375 0.02399926757812504 -0.10475 -0.005218505859375 0.02399926757812504 -0.104875 -0.020904541015625 0.02399926757812504 -0.105 -0.0313720703125 0.02399926757812504 -0.105125 -0.04180908203125 0.02399926757812504 -0.10525 -0.05743408203125 0.02399926757812504 -0.105375 -0.06781005859375 0.02399926757812504 -0.1055 -0.083343505859375 0.02399926757812504 -0.105625 -0.093658447265625 0.02399926757812504 -0.10575 -0.109039306640625 0.02399926757812504 -0.105875 -0.119232177734375 0.02399926757812504 -0.106 -0.134429931640625 0.02399926757812504 -0.106125 -0.14447021484375 0.02399926757812504 -0.10625 -0.15447998046875 0.02399926757812504 -0.106375 -0.169342041015625 0.02399926757812504 -0.1065 -0.17913818359375 0.02399926757812504 -0.106625 -0.1937255859375 0.02399926757812504 -0.10675 -0.203338623046875 0.02399926757812504 -0.106875 -0.21759033203125 0.02399926757812504 -0.107 -0.226959228515625 0.02399926757812504 -0.107125 -0.2408447265625 0.02399926757812504 -0.10725 -0.249969482421875 0.02399926757812504 -0.107375 -0.25897216796875 0.02399926757812504 -0.1075 -0.27227783203125 0.02399926757812504 -0.107625 -0.280975341796875 0.02399926757812504 -0.10775 -0.2938232421875 0.02399926757812504 -0.107875 -0.30224609375 0.02399926757812504 -0.108 -0.314605712890625 0.02399926757812504 -0.108125 -0.322662353515625 0.02399926757812504 -0.10825 -0.330596923828125 0.02399926757812504 -0.108375 -0.34222412109375 0.02399926757812504 -0.1085 -0.349761962890625 0.02399926757812504 -0.108625 -0.360809326171875 0.02399926757812504 -0.10875 -0.36798095703125 0.02399926757812504 -0.108875 -0.378448486328125 0.02399926757812504 -0.109 -0.38519287109375 0.02399926757812504 -0.109125 -0.39501953125 0.02399926757812504 -0.10925 -0.401336669921875 0.02399926757812504 -0.109375 -0.407501220703125 0.02399926757812504 -0.1095 -0.416412353515625 0.02399926757812504 -0.109625 -0.422119140625 0.02399926757812504 -0.10975 -0.4302978515625 0.02399926757812504 -0.109875 -0.435546875 0.02399926757812504 -0.11 -0.44305419921875 0.02399926757812504 -0.110125 -0.447784423828125 0.02399926757812504 -0.11025 -0.454559326171875 0.02399926757812504 -0.110375 -0.458831787109375 0.02399926757812504 -0.1105 -0.462890625 0.02399926757812504 -0.110625 -0.46856689453125 0.02399926757812504 -0.11075 -0.472137451171875 0.02399926757812504 -0.110875 -0.47705078125 0.02399926757812504 -0.111 -0.480072021484375 0.02399926757812504 -0.111125 -0.484222412109375 0.02399926757812504 -0.11125 -0.486724853515625 0.02399926757812504 -0.111375 -0.490081787109375 0.02399926757812504 -0.1115 -0.492034912109375 0.02399926757812504 -0.111625 -0.4937744140625 0.02399926757812504 -0.11175 -0.496002197265625 0.02399926757812504 -0.111875 -0.4971923828125 0.02399926757812504 -0.112 -0.49859619140625 0.02399926757812504 -0.112125 -0.499267578125 0.02399926757812504 -0.11225 -0.49981689453125 0.02399926757812504 -0.112375 -0.49993896484375 0.02399926757812504 -0.1125 -0.49981689453125 0.02399926757812504 -0.112625 -0.499267578125 0.02399926757812504 -0.11275 -0.49859619140625 0.02399926757812504 -0.112875 -0.4971923828125 0.02399926757812504 -0.113 -0.496002197265625 0.02399926757812504 -0.113125 -0.4937744140625 0.02399926757812504 -0.11325 -0.492034912109375 0.02399926757812504 -0.113375 -0.489013671875 0.02399926757812504 -0.1135 -0.486724853515625 0.02399926757812504 -0.113625 -0.484222412109375 0.02399926757812504 -0.11375 -0.480072021484375 0.02399926757812504 -0.113875 -0.47705078125 0.02399926757812504 -0.114 -0.472137451171875 0.02399926757812504 -0.114125 -0.46856689453125 0.02399926757812504 -0.11425 -0.462890625 0.02399926757812504 -0.114375 -0.458831787109375 0.02399926757812504 -0.1145 -0.452362060546875 0.02399926757812504 -0.114625 -0.447784423828125 0.02399926757812504 -0.11475 -0.44305419921875 0.02399926757812504 -0.114875 -0.435546875 0.02399926757812504 -0.115 -0.4302978515625 0.02399926757812504 -0.115125 -0.422119140625 0.02399926757812504 -0.11525 -0.416412353515625 0.02399926757812504 -0.115375 -0.407501220703125 0.02399926757812504 -0.1155 -0.401336669921875 0.02399926757812504 -0.115625 -0.39178466796875 0.02399926757812504 -0.11575 -0.38519287109375 0.02399926757812504 -0.115875 -0.378448486328125 0.02399926757812504 -0.116 -0.36798095703125 0.02399926757812504 -0.116125 -0.360809326171875 0.02399926757812504 -0.11625 -0.349761962890625 0.02399926757812504 -0.116375 -0.34222412109375 0.02399926757812504 -0.1165 -0.330596923828125 0.02399926757812504 -0.116625 -0.322662353515625 0.02399926757812504 -0.11675 -0.314605712890625 0.02399926757812504 -0.116875 -0.30224609375 0.02399926757812504 -0.117 -0.2938232421875 0.02399926757812504 -0.117125 -0.280975341796875 0.02399926757812504 -0.11725 -0.27227783203125 0.02399926757812504 -0.117375 -0.25897216796875 0.02399926757812504 -0.1175 -0.249969482421875 0.02399926757812504 -0.117625 -0.236236572265625 0.02399926757812504 -0.11775 -0.226959228515625 0.02399926757812504 -0.117875 -0.21759033203125 0.02399926757812504 -0.118 -0.203338623046875 0.02399926757812504 -0.118125 -0.1937255859375 0.02399926757812504 -0.11825 -0.17913818359375 0.02399926757812504 -0.118375 -0.169342041015625 0.02399926757812504 -0.1185 -0.15447998046875 0.02399926757812504 -0.118625 -0.14447021484375 0.02399926757812504 -0.11875 -0.129364013671875 0.02399926757812504 -0.118875 -0.119232177734375 0.02399926757812504 -0.119 -0.109039306640625 0.02399926757812504 -0.119125 -0.093658447265625 0.02399926757812504 -0.11925 -0.083343505859375 0.02399926757812504 -0.119375 -0.06781005859375 0.02399926757812504 -0.1195 -0.05743408203125 0.02399926757812504 -0.119625 -0.04180908203125 0.02399926757812504 -0.11975 -0.0313720703125 0.02399926757812504 -0.119875 -0.01568603515625 0.02399926757812504 -0.12 -0.005218505859375 0.02399926757812504 +0.10475 -0.0052490234375 0.02399926757812504 +0.104875 -0.02093505859375 0.02399926757812504 +0.105 -0.031402587890625 0.02399926757812504 +0.105125 -0.041839599609375 0.02399926757812504 +0.10525 -0.057464599609375 0.02399926757812504 +0.105375 -0.067840576171875 0.02399926757812504 +0.1055 -0.0833740234375 0.02399926757812504 +0.105625 -0.09368896484375 0.02399926757812504 +0.10575 -0.10906982421875 0.02399926757812504 +0.105875 -0.1192626953125 0.02399926757812504 +0.106 -0.13446044921875 0.02399926757812504 +0.106125 -0.144500732421875 0.02399926757812504 +0.10625 -0.154510498046875 0.02399926757812504 +0.106375 -0.16937255859375 0.02399926757812504 +0.1065 -0.179168701171875 0.02399926757812504 +0.106625 -0.193756103515625 0.02399926757812504 +0.10675 -0.203369140625 0.02399926757812504 +0.106875 -0.217620849609375 0.02399926757812504 +0.107 -0.22698974609375 0.02399926757812504 +0.107125 -0.240875244140625 0.02399926757812504 +0.10725 -0.25 0.02399926757812504 +0.107375 -0.259002685546875 0.02399926757812504 +0.1075 -0.272308349609375 0.02399926757812504 +0.107625 -0.281005859375 0.02399926757812504 +0.10775 -0.293853759765625 0.02399926757812504 +0.107875 -0.302276611328125 0.02399926757812504 +0.108 -0.31463623046875 0.02399926757812504 +0.108125 -0.32269287109375 0.02399926757812504 +0.10825 -0.33062744140625 0.02399926757812504 +0.108375 -0.342254638671875 0.02399926757812504 +0.1085 -0.34979248046875 0.02399926757812504 +0.108625 -0.36083984375 0.02399926757812504 +0.10875 -0.368011474609375 0.02399926757812504 +0.108875 -0.37847900390625 0.02399926757812504 +0.109 -0.385223388671875 0.02399926757812504 +0.109125 -0.395050048828125 0.02399926757812504 +0.10925 -0.4013671875 0.02399926757812504 +0.109375 -0.40753173828125 0.02399926757812504 +0.1095 -0.41644287109375 0.02399926757812504 +0.109625 -0.422149658203125 0.02399926757812504 +0.10975 -0.430328369140625 0.02399926757812504 +0.109875 -0.435577392578125 0.02399926757812504 +0.11 -0.443084716796875 0.02399926757812504 +0.110125 -0.44781494140625 0.02399926757812504 +0.11025 -0.45458984375 0.02399926757812504 +0.110375 -0.4588623046875 0.02399926757812504 +0.1105 -0.462921142578125 0.02399926757812504 +0.110625 -0.468597412109375 0.02399926757812504 +0.11075 -0.47216796875 0.02399926757812504 +0.110875 -0.477081298828125 0.02399926757812504 +0.111 -0.4801025390625 0.02399926757812504 +0.111125 -0.4842529296875 0.02399926757812504 +0.11125 -0.48675537109375 0.02399926757812504 +0.111375 -0.4901123046875 0.02399926757812504 +0.1115 -0.4920654296875 0.02399926757812504 +0.111625 -0.493804931640625 0.02399926757812504 +0.11175 -0.49603271484375 0.02399926757812504 +0.111875 -0.497222900390625 0.02399926757812504 +0.112 -0.498626708984375 0.02399926757812504 +0.112125 -0.499298095703125 0.02399926757812504 +0.11225 -0.499847412109375 0.02399926757812504 +0.112375 -0.499969482421875 0.02399926757812504 +0.1125 -0.499847412109375 0.02399926757812504 +0.112625 -0.499298095703125 0.02399926757812504 +0.11275 -0.498626708984375 0.02399926757812504 +0.112875 -0.497222900390625 0.02399926757812504 +0.113 -0.49603271484375 0.02399926757812504 +0.113125 -0.493804931640625 0.02399926757812504 +0.11325 -0.4920654296875 0.02399926757812504 +0.113375 -0.489044189453125 0.02399926757812504 +0.1135 -0.48675537109375 0.02399926757812504 +0.113625 -0.4842529296875 0.02399926757812504 +0.11375 -0.4801025390625 0.02399926757812504 +0.113875 -0.477081298828125 0.02399926757812504 +0.114 -0.47216796875 0.02399926757812504 +0.114125 -0.468597412109375 0.02399926757812504 +0.11425 -0.462921142578125 0.02399926757812504 +0.114375 -0.4588623046875 0.02399926757812504 +0.1145 -0.452392578125 0.02399926757812504 +0.114625 -0.44781494140625 0.02399926757812504 +0.11475 -0.443084716796875 0.02399926757812504 +0.114875 -0.435577392578125 0.02399926757812504 +0.115 -0.430328369140625 0.02399926757812504 +0.115125 -0.422149658203125 0.02399926757812504 +0.11525 -0.41644287109375 0.02399926757812504 +0.115375 -0.40753173828125 0.02399926757812504 +0.1155 -0.4013671875 0.02399926757812504 +0.115625 -0.391815185546875 0.02399926757812504 +0.11575 -0.385223388671875 0.02399926757812504 +0.115875 -0.37847900390625 0.02399926757812504 +0.116 -0.368011474609375 0.02399926757812504 +0.116125 -0.36083984375 0.02399926757812504 +0.11625 -0.34979248046875 0.02399926757812504 +0.116375 -0.342254638671875 0.02399926757812504 +0.1165 -0.33062744140625 0.02399926757812504 +0.116625 -0.32269287109375 0.02399926757812504 +0.11675 -0.31463623046875 0.02399926757812504 +0.116875 -0.302276611328125 0.02399926757812504 +0.117 -0.293853759765625 0.02399926757812504 +0.117125 -0.281005859375 0.02399926757812504 +0.11725 -0.272308349609375 0.02399926757812504 +0.117375 -0.259002685546875 0.02399926757812504 +0.1175 -0.25 0.02399926757812504 +0.117625 -0.23626708984375 0.02399926757812504 +0.11775 -0.22698974609375 0.02399926757812504 +0.117875 -0.217620849609375 0.02399926757812504 +0.118 -0.203369140625 0.02399926757812504 +0.118125 -0.193756103515625 0.02399926757812504 +0.11825 -0.179168701171875 0.02399926757812504 +0.118375 -0.16937255859375 0.02399926757812504 +0.1185 -0.154510498046875 0.02399926757812504 +0.118625 -0.144500732421875 0.02399926757812504 +0.11875 -0.12939453125 0.02399926757812504 +0.118875 -0.1192626953125 0.02399926757812504 +0.119 -0.10906982421875 0.02399926757812504 +0.119125 -0.09368896484375 0.02399926757812504 +0.11925 -0.0833740234375 0.02399926757812504 +0.119375 -0.067840576171875 0.02399926757812504 +0.1195 -0.057464599609375 0.02399926757812504 +0.119625 -0.041839599609375 0.02399926757812504 +0.11975 -0.031402587890625 0.02399926757812504 +0.119875 -0.015716552734375 0.02399926757812504 +0.12 -0.0052490234375 0.02399926757812504 0.120125 0.005218505859375 0.02399926757812504 0.12025 0.020904541015625 0.02399926757812504 0.120375 0.0313720703125 0.02399926757812504 @@ -1072,109 +1072,109 @@ 0.133875 0.036590576171875 0.2799914550781251 0.134 0.020904541015625 0.2799914550781251 0.134125 0.01043701171875 0.2799914550781251 -0.13425 -0.005218505859375 0.2799914550781251 -0.134375 -0.020904541015625 0.2799914550781251 -0.1345 -0.036590576171875 0.2799914550781251 -0.134625 -0.05224609375 0.2799914550781251 -0.13475 -0.06781005859375 0.2799914550781251 -0.134875 -0.083343505859375 0.2799914550781251 -0.135 -0.098785400390625 0.2799914550781251 -0.135125 -0.1141357421875 0.2799914550781251 -0.13525 -0.129364013671875 0.2799914550781251 -0.135375 -0.14447021484375 0.2799914550781251 -0.1355 -0.159454345703125 0.2799914550781251 -0.135625 -0.169342041015625 0.2799914550781251 -0.13575 -0.18402099609375 0.2799914550781251 -0.135875 -0.19854736328125 0.2799914550781251 -0.136 -0.212860107421875 0.2799914550781251 -0.136125 -0.226959228515625 0.2799914550781251 -0.13625 -0.2408447265625 0.2799914550781251 -0.136375 -0.25445556640625 0.2799914550781251 -0.1365 -0.267852783203125 0.2799914550781251 -0.136625 -0.280975341796875 0.2799914550781251 -0.13675 -0.2938232421875 0.2799914550781251 -0.136875 -0.306396484375 0.2799914550781251 -0.137 -0.31866455078125 0.2799914550781251 -0.137125 -0.32666015625 0.2799914550781251 -0.13725 -0.33837890625 0.2799914550781251 -0.137375 -0.349761962890625 0.2799914550781251 -0.1375 -0.360809326171875 0.2799914550781251 -0.137625 -0.37152099609375 0.2799914550781251 -0.13775 -0.3818359375 0.2799914550781251 -0.137875 -0.39178466796875 0.2799914550781251 -0.138 -0.401336669921875 0.2799914550781251 -0.138125 -0.4105224609375 0.2799914550781251 -0.13825 -0.419281005859375 0.2799914550781251 -0.138375 -0.4276123046875 0.2799914550781251 -0.1385 -0.435546875 0.2799914550781251 -0.138625 -0.440582275390625 0.2799914550781251 -0.13875 -0.447784423828125 0.2799914550781251 -0.138875 -0.454559326171875 0.2799914550781251 -0.139 -0.46087646484375 0.2799914550781251 -0.139125 -0.46673583984375 0.2799914550781251 -0.13925 -0.472137451171875 0.2799914550781251 -0.139375 -0.47705078125 0.2799914550781251 -0.1395 -0.48150634765625 0.2799914550781251 -0.139625 -0.485504150390625 0.2799914550781251 -0.13975 -0.489013671875 0.2799914550781251 -0.139875 -0.492034912109375 0.2799914550781251 -0.14 -0.4937744140625 0.2799914550781251 -0.140125 -0.496002197265625 0.2799914550781251 -0.14025 -0.497711181640625 0.2799914550781251 -0.140375 -0.49896240234375 0.2799914550781251 -0.1405 -0.49969482421875 0.2799914550781251 -0.140625 -0.49993896484375 0.2799914550781251 -0.14075 -0.49969482421875 0.2799914550781251 -0.140875 -0.49896240234375 0.2799914550781251 -0.141 -0.497711181640625 0.2799914550781251 -0.141125 -0.496002197265625 0.2799914550781251 -0.14125 -0.4937744140625 0.2799914550781251 -0.141375 -0.4910888671875 0.2799914550781251 -0.1415 -0.489013671875 0.2799914550781251 -0.141625 -0.485504150390625 0.2799914550781251 -0.14175 -0.48150634765625 0.2799914550781251 -0.141875 -0.47705078125 0.2799914550781251 -0.142 -0.472137451171875 0.2799914550781251 -0.142125 -0.46673583984375 0.2799914550781251 -0.14225 -0.46087646484375 0.2799914550781251 -0.142375 -0.454559326171875 0.2799914550781251 -0.1425 -0.447784423828125 0.2799914550781251 -0.142625 -0.440582275390625 0.2799914550781251 -0.14275 -0.432952880859375 0.2799914550781251 -0.142875 -0.424896240234375 0.2799914550781251 -0.143 -0.419281005859375 0.2799914550781251 -0.143125 -0.4105224609375 0.2799914550781251 -0.14325 -0.401336669921875 0.2799914550781251 -0.143375 -0.39178466796875 0.2799914550781251 -0.1435 -0.3818359375 0.2799914550781251 -0.143625 -0.37152099609375 0.2799914550781251 -0.14375 -0.360809326171875 0.2799914550781251 -0.143875 -0.349761962890625 0.2799914550781251 -0.144 -0.33837890625 0.2799914550781251 -0.144125 -0.32666015625 0.2799914550781251 -0.14425 -0.314605712890625 0.2799914550781251 -0.144375 -0.30224609375 0.2799914550781251 -0.1445 -0.2938232421875 0.2799914550781251 -0.144625 -0.280975341796875 0.2799914550781251 -0.14475 -0.267852783203125 0.2799914550781251 -0.144875 -0.25445556640625 0.2799914550781251 -0.145 -0.2408447265625 0.2799914550781251 -0.145125 -0.226959228515625 0.2799914550781251 -0.14525 -0.212860107421875 0.2799914550781251 -0.145375 -0.19854736328125 0.2799914550781251 -0.1455 -0.18402099609375 0.2799914550781251 -0.145625 -0.169342041015625 0.2799914550781251 -0.14575 -0.15447998046875 0.2799914550781251 -0.145875 -0.13946533203125 0.2799914550781251 -0.146 -0.129364013671875 0.2799914550781251 -0.146125 -0.1141357421875 0.2799914550781251 -0.14625 -0.098785400390625 0.2799914550781251 -0.146375 -0.083343505859375 0.2799914550781251 -0.1465 -0.06781005859375 0.2799914550781251 -0.146625 -0.05224609375 0.2799914550781251 -0.14675 -0.036590576171875 0.2799914550781251 -0.146875 -0.020904541015625 0.2799914550781251 -0.147 -0.005218505859375 0.2799914550781251 +0.13425 -0.0052490234375 0.2799914550781251 +0.134375 -0.02093505859375 0.2799914550781251 +0.1345 -0.03662109375 0.2799914550781251 +0.134625 -0.052276611328125 0.2799914550781251 +0.13475 -0.067840576171875 0.2799914550781251 +0.134875 -0.0833740234375 0.2799914550781251 +0.135 -0.09881591796875 0.2799914550781251 +0.135125 -0.114166259765625 0.2799914550781251 +0.13525 -0.12939453125 0.2799914550781251 +0.135375 -0.144500732421875 0.2799914550781251 +0.1355 -0.15948486328125 0.2799914550781251 +0.135625 -0.16937255859375 0.2799914550781251 +0.13575 -0.184051513671875 0.2799914550781251 +0.135875 -0.198577880859375 0.2799914550781251 +0.136 -0.212890625 0.2799914550781251 +0.136125 -0.22698974609375 0.2799914550781251 +0.13625 -0.240875244140625 0.2799914550781251 +0.136375 -0.254486083984375 0.2799914550781251 +0.1365 -0.26788330078125 0.2799914550781251 +0.136625 -0.281005859375 0.2799914550781251 +0.13675 -0.293853759765625 0.2799914550781251 +0.136875 -0.306427001953125 0.2799914550781251 +0.137 -0.318695068359375 0.2799914550781251 +0.137125 -0.326690673828125 0.2799914550781251 +0.13725 -0.338409423828125 0.2799914550781251 +0.137375 -0.34979248046875 0.2799914550781251 +0.1375 -0.36083984375 0.2799914550781251 +0.137625 -0.371551513671875 0.2799914550781251 +0.13775 -0.381866455078125 0.2799914550781251 +0.137875 -0.391815185546875 0.2799914550781251 +0.138 -0.4013671875 0.2799914550781251 +0.138125 -0.410552978515625 0.2799914550781251 +0.13825 -0.4193115234375 0.2799914550781251 +0.138375 -0.427642822265625 0.2799914550781251 +0.1385 -0.435577392578125 0.2799914550781251 +0.138625 -0.44061279296875 0.2799914550781251 +0.13875 -0.44781494140625 0.2799914550781251 +0.138875 -0.45458984375 0.2799914550781251 +0.139 -0.460906982421875 0.2799914550781251 +0.139125 -0.466766357421875 0.2799914550781251 +0.13925 -0.47216796875 0.2799914550781251 +0.139375 -0.477081298828125 0.2799914550781251 +0.1395 -0.481536865234375 0.2799914550781251 +0.139625 -0.48553466796875 0.2799914550781251 +0.13975 -0.489044189453125 0.2799914550781251 +0.139875 -0.4920654296875 0.2799914550781251 +0.14 -0.493804931640625 0.2799914550781251 +0.140125 -0.49603271484375 0.2799914550781251 +0.14025 -0.49774169921875 0.2799914550781251 +0.140375 -0.498992919921875 0.2799914550781251 +0.1405 -0.499725341796875 0.2799914550781251 +0.140625 -0.499969482421875 0.2799914550781251 +0.14075 -0.499725341796875 0.2799914550781251 +0.140875 -0.498992919921875 0.2799914550781251 +0.141 -0.49774169921875 0.2799914550781251 +0.141125 -0.49603271484375 0.2799914550781251 +0.14125 -0.493804931640625 0.2799914550781251 +0.141375 -0.491119384765625 0.2799914550781251 +0.1415 -0.489044189453125 0.2799914550781251 +0.141625 -0.48553466796875 0.2799914550781251 +0.14175 -0.481536865234375 0.2799914550781251 +0.141875 -0.477081298828125 0.2799914550781251 +0.142 -0.47216796875 0.2799914550781251 +0.142125 -0.466766357421875 0.2799914550781251 +0.14225 -0.460906982421875 0.2799914550781251 +0.142375 -0.45458984375 0.2799914550781251 +0.1425 -0.44781494140625 0.2799914550781251 +0.142625 -0.44061279296875 0.2799914550781251 +0.14275 -0.4329833984375 0.2799914550781251 +0.142875 -0.4249267578125 0.2799914550781251 +0.143 -0.4193115234375 0.2799914550781251 +0.143125 -0.410552978515625 0.2799914550781251 +0.14325 -0.4013671875 0.2799914550781251 +0.143375 -0.391815185546875 0.2799914550781251 +0.1435 -0.381866455078125 0.2799914550781251 +0.143625 -0.371551513671875 0.2799914550781251 +0.14375 -0.36083984375 0.2799914550781251 +0.143875 -0.34979248046875 0.2799914550781251 +0.144 -0.338409423828125 0.2799914550781251 +0.144125 -0.326690673828125 0.2799914550781251 +0.14425 -0.31463623046875 0.2799914550781251 +0.144375 -0.302276611328125 0.2799914550781251 +0.1445 -0.293853759765625 0.2799914550781251 +0.144625 -0.281005859375 0.2799914550781251 +0.14475 -0.26788330078125 0.2799914550781251 +0.144875 -0.254486083984375 0.2799914550781251 +0.145 -0.240875244140625 0.2799914550781251 +0.145125 -0.22698974609375 0.2799914550781251 +0.14525 -0.212890625 0.2799914550781251 +0.145375 -0.198577880859375 0.2799914550781251 +0.1455 -0.184051513671875 0.2799914550781251 +0.145625 -0.16937255859375 0.2799914550781251 +0.14575 -0.154510498046875 0.2799914550781251 +0.145875 -0.139495849609375 0.2799914550781251 +0.146 -0.12939453125 0.2799914550781251 +0.146125 -0.114166259765625 0.2799914550781251 +0.14625 -0.09881591796875 0.2799914550781251 +0.146375 -0.0833740234375 0.2799914550781251 +0.1465 -0.067840576171875 0.2799914550781251 +0.146625 -0.052276611328125 0.2799914550781251 +0.14675 -0.03662109375 0.2799914550781251 +0.146875 -0.02093505859375 0.2799914550781251 +0.147 -0.0052490234375 0.2799914550781251 0.147125 0.01043701171875 0.2799914550781251 0.14725 0.026123046875 0.2799914550781251 0.147375 0.036590576171875 0.2799914550781251 @@ -1278,92 +1278,92 @@ 0.159625 0.036590576171875 0.2799914550781251 0.15975 0.020904541015625 0.2799914550781251 0.159875 0.005218505859375 0.2799914550781251 -0.16 -0.01043701171875 0.535983642578125 -0.160125 -0.0313720703125 0.535983642578125 -0.16025 -0.047027587890625 0.535983642578125 -0.160375 -0.06781005859375 0.535983642578125 -0.1605 -0.083343505859375 0.535983642578125 -0.160625 -0.103912353515625 0.535983642578125 -0.16075 -0.119232177734375 0.535983642578125 -0.160875 -0.13946533203125 0.535983642578125 -0.161 -0.15447998046875 0.535983642578125 -0.161125 -0.17425537109375 0.535983642578125 -0.16125 -0.188873291015625 0.535983642578125 -0.161375 -0.208099365234375 0.535983642578125 -0.1615 -0.2222900390625 0.535983642578125 -0.161625 -0.2408447265625 0.535983642578125 -0.16175 -0.25445556640625 0.535983642578125 -0.161875 -0.27227783203125 0.535983642578125 -0.162 -0.285308837890625 0.535983642578125 -0.162125 -0.30224609375 0.535983642578125 -0.16225 -0.314605712890625 0.535983642578125 -0.162375 -0.330596923828125 0.535983642578125 -0.1625 -0.34222412109375 0.535983642578125 -0.162625 -0.357177734375 0.535983642578125 -0.16275 -0.36798095703125 0.535983642578125 -0.162875 -0.3818359375 0.535983642578125 -0.163 -0.39178466796875 0.535983642578125 -0.163125 -0.404449462890625 0.535983642578125 -0.16325 -0.413482666015625 0.535983642578125 -0.163375 -0.422119140625 0.535983642578125 -0.1635 -0.432952880859375 0.535983642578125 -0.163625 -0.440582275390625 0.535983642578125 -0.16375 -0.450103759765625 0.535983642578125 -0.163875 -0.45672607421875 0.535983642578125 -0.164 -0.464813232421875 0.535983642578125 -0.164125 -0.470367431640625 0.535983642578125 -0.16425 -0.47705078125 0.535983642578125 -0.164375 -0.48150634765625 0.535983642578125 -0.1645 -0.486724853515625 0.535983642578125 -0.164625 -0.490081787109375 0.535983642578125 -0.16475 -0.4937744140625 0.535983642578125 -0.164875 -0.496002197265625 0.535983642578125 -0.165 -0.498199462890625 0.535983642578125 -0.165125 -0.499267578125 0.535983642578125 -0.16525 -0.499908447265625 0.535983642578125 -0.165375 -0.49981689453125 0.535983642578125 -0.1655 -0.49896240234375 0.535983642578125 -0.165625 -0.497711181640625 0.535983642578125 -0.16575 -0.49530029296875 0.535983642578125 -0.165875 -0.492950439453125 0.535983642578125 -0.166 -0.489013671875 0.535983642578125 -0.166125 -0.485504150390625 0.535983642578125 -0.16625 -0.480072021484375 0.535983642578125 -0.166375 -0.4754638671875 0.535983642578125 -0.1665 -0.46856689453125 0.535983642578125 -0.166625 -0.462890625 0.535983642578125 -0.16675 -0.45672607421875 0.535983642578125 -0.166875 -0.447784423828125 0.535983642578125 -0.167 -0.440582275390625 0.535983642578125 -0.167125 -0.4302978515625 0.535983642578125 -0.16725 -0.422119140625 0.535983642578125 -0.167375 -0.4105224609375 0.535983642578125 -0.1675 -0.401336669921875 0.535983642578125 -0.167625 -0.388519287109375 0.535983642578125 -0.16775 -0.378448486328125 0.535983642578125 -0.167875 -0.36444091796875 0.535983642578125 -0.168 -0.353485107421875 0.535983642578125 -0.168125 -0.33837890625 0.535983642578125 -0.16825 -0.32666015625 0.535983642578125 -0.168375 -0.310516357421875 0.535983642578125 -0.1685 -0.298065185546875 0.535983642578125 -0.168625 -0.280975341796875 0.535983642578125 -0.16875 -0.267852783203125 0.535983642578125 -0.168875 -0.249969482421875 0.535983642578125 -0.169 -0.236236572265625 0.535983642578125 -0.169125 -0.21759033203125 0.535983642578125 -0.16925 -0.203338623046875 0.535983642578125 -0.169375 -0.18402099609375 0.535983642578125 -0.1695 -0.169342041015625 0.535983642578125 -0.169625 -0.14947509765625 0.535983642578125 -0.16975 -0.134429931640625 0.535983642578125 -0.169875 -0.119232177734375 0.535983642578125 -0.17 -0.098785400390625 0.535983642578125 -0.170125 -0.083343505859375 0.535983642578125 -0.17025 -0.0626220703125 0.535983642578125 -0.170375 -0.047027587890625 0.535983642578125 -0.1705 -0.026123046875 0.535983642578125 -0.170625 -0.01043701171875 0.535983642578125 +0.16 -0.010467529296875 0.535983642578125 +0.160125 -0.031402587890625 0.535983642578125 +0.16025 -0.04705810546875 0.535983642578125 +0.160375 -0.067840576171875 0.535983642578125 +0.1605 -0.0833740234375 0.535983642578125 +0.160625 -0.10394287109375 0.535983642578125 +0.16075 -0.1192626953125 0.535983642578125 +0.160875 -0.139495849609375 0.535983642578125 +0.161 -0.154510498046875 0.535983642578125 +0.161125 -0.174285888671875 0.535983642578125 +0.16125 -0.18890380859375 0.535983642578125 +0.161375 -0.2081298828125 0.535983642578125 +0.1615 -0.222320556640625 0.535983642578125 +0.161625 -0.240875244140625 0.535983642578125 +0.16175 -0.254486083984375 0.535983642578125 +0.161875 -0.272308349609375 0.535983642578125 +0.162 -0.28533935546875 0.535983642578125 +0.162125 -0.302276611328125 0.535983642578125 +0.16225 -0.31463623046875 0.535983642578125 +0.162375 -0.33062744140625 0.535983642578125 +0.1625 -0.342254638671875 0.535983642578125 +0.162625 -0.357208251953125 0.535983642578125 +0.16275 -0.368011474609375 0.535983642578125 +0.162875 -0.381866455078125 0.535983642578125 +0.163 -0.391815185546875 0.535983642578125 +0.163125 -0.40447998046875 0.535983642578125 +0.16325 -0.41351318359375 0.535983642578125 +0.163375 -0.422149658203125 0.535983642578125 +0.1635 -0.4329833984375 0.535983642578125 +0.163625 -0.44061279296875 0.535983642578125 +0.16375 -0.45013427734375 0.535983642578125 +0.163875 -0.456756591796875 0.535983642578125 +0.164 -0.46484375 0.535983642578125 +0.164125 -0.47039794921875 0.535983642578125 +0.16425 -0.477081298828125 0.535983642578125 +0.164375 -0.481536865234375 0.535983642578125 +0.1645 -0.48675537109375 0.535983642578125 +0.164625 -0.4901123046875 0.535983642578125 +0.16475 -0.493804931640625 0.535983642578125 +0.164875 -0.49603271484375 0.535983642578125 +0.165 -0.49822998046875 0.535983642578125 +0.165125 -0.499298095703125 0.535983642578125 +0.16525 -0.49993896484375 0.535983642578125 +0.165375 -0.499847412109375 0.535983642578125 +0.1655 -0.498992919921875 0.535983642578125 +0.165625 -0.49774169921875 0.535983642578125 +0.16575 -0.495330810546875 0.535983642578125 +0.165875 -0.49298095703125 0.535983642578125 +0.166 -0.489044189453125 0.535983642578125 +0.166125 -0.48553466796875 0.535983642578125 +0.16625 -0.4801025390625 0.535983642578125 +0.166375 -0.475494384765625 0.535983642578125 +0.1665 -0.468597412109375 0.535983642578125 +0.166625 -0.462921142578125 0.535983642578125 +0.16675 -0.456756591796875 0.535983642578125 +0.166875 -0.44781494140625 0.535983642578125 +0.167 -0.44061279296875 0.535983642578125 +0.167125 -0.430328369140625 0.535983642578125 +0.16725 -0.422149658203125 0.535983642578125 +0.167375 -0.410552978515625 0.535983642578125 +0.1675 -0.4013671875 0.535983642578125 +0.167625 -0.3885498046875 0.535983642578125 +0.16775 -0.37847900390625 0.535983642578125 +0.167875 -0.364471435546875 0.535983642578125 +0.168 -0.353515625 0.535983642578125 +0.168125 -0.338409423828125 0.535983642578125 +0.16825 -0.326690673828125 0.535983642578125 +0.168375 -0.310546875 0.535983642578125 +0.1685 -0.298095703125 0.535983642578125 +0.168625 -0.281005859375 0.535983642578125 +0.16875 -0.26788330078125 0.535983642578125 +0.168875 -0.25 0.535983642578125 +0.169 -0.23626708984375 0.535983642578125 +0.169125 -0.217620849609375 0.535983642578125 +0.16925 -0.203369140625 0.535983642578125 +0.169375 -0.184051513671875 0.535983642578125 +0.1695 -0.16937255859375 0.535983642578125 +0.169625 -0.149505615234375 0.535983642578125 +0.16975 -0.13446044921875 0.535983642578125 +0.169875 -0.1192626953125 0.535983642578125 +0.17 -0.09881591796875 0.535983642578125 +0.170125 -0.0833740234375 0.535983642578125 +0.17025 -0.062652587890625 0.535983642578125 +0.170375 -0.04705810546875 0.535983642578125 +0.1705 -0.026153564453125 0.535983642578125 +0.170625 -0.010467529296875 0.535983642578125 0.17075 0.01043701171875 0.535983642578125 0.170875 0.026123046875 0.535983642578125 0.171 0.047027587890625 0.535983642578125 @@ -1450,92 +1450,92 @@ 0.181125 0.047027587890625 0.535983642578125 0.18125 0.0313720703125 0.535983642578125 0.181375 0.01043701171875 0.535983642578125 -0.1815 -0.005218505859375 0.535983642578125 -0.181625 -0.026123046875 0.535983642578125 -0.18175 -0.04180908203125 0.535983642578125 -0.181875 -0.0626220703125 0.535983642578125 -0.182 -0.07818603515625 0.535983642578125 -0.182125 -0.098785400390625 0.535983642578125 -0.18225 -0.1141357421875 0.535983642578125 -0.182375 -0.134429931640625 0.535983642578125 -0.1825 -0.14947509765625 0.535983642578125 -0.182625 -0.169342041015625 0.535983642578125 -0.18275 -0.18402099609375 0.535983642578125 -0.182875 -0.203338623046875 0.535983642578125 -0.183 -0.21759033203125 0.535983642578125 -0.183125 -0.236236572265625 0.535983642578125 -0.18325 -0.249969482421875 0.535983642578125 -0.183375 -0.263427734375 0.535983642578125 -0.1835 -0.280975341796875 0.535983642578125 -0.183625 -0.2938232421875 0.535983642578125 -0.18375 -0.310516357421875 0.535983642578125 -0.183875 -0.322662353515625 0.535983642578125 -0.184 -0.33837890625 0.535983642578125 -0.184125 -0.349761962890625 0.535983642578125 -0.18425 -0.36444091796875 0.535983642578125 -0.184375 -0.375 0.535983642578125 -0.1845 -0.388519287109375 0.535983642578125 -0.184625 -0.398193359375 0.535983642578125 -0.18475 -0.4105224609375 0.535983642578125 -0.184875 -0.419281005859375 0.535983642578125 -0.185 -0.4302978515625 0.535983642578125 -0.185125 -0.438079833984375 0.535983642578125 -0.18525 -0.447784423828125 0.535983642578125 -0.185375 -0.454559326171875 0.535983642578125 -0.1855 -0.462890625 0.535983642578125 -0.185625 -0.46856689453125 0.535983642578125 -0.18575 -0.4754638671875 0.535983642578125 -0.185875 -0.480072021484375 0.535983642578125 -0.186 -0.485504150390625 0.535983642578125 -0.186125 -0.489013671875 0.535983642578125 -0.18625 -0.492950439453125 0.535983642578125 -0.186375 -0.49530029296875 0.535983642578125 -0.1865 -0.4971923828125 0.535983642578125 -0.186625 -0.49896240234375 0.535983642578125 -0.18675 -0.49969482421875 0.535983642578125 -0.186875 -0.499908447265625 0.535983642578125 -0.187 -0.49951171875 0.535983642578125 -0.187125 -0.498199462890625 0.535983642578125 -0.18725 -0.496612548828125 0.535983642578125 -0.187375 -0.4937744140625 0.535983642578125 -0.1875 -0.4910888671875 0.535983642578125 -0.187625 -0.486724853515625 0.535983642578125 -0.18775 -0.48291015625 0.535983642578125 -0.187875 -0.47705078125 0.535983642578125 -0.188 -0.472137451171875 0.535983642578125 -0.188125 -0.464813232421875 0.535983642578125 -0.18825 -0.458831787109375 0.535983642578125 -0.188375 -0.450103759765625 0.535983642578125 -0.1885 -0.44305419921875 0.535983642578125 -0.188625 -0.432952880859375 0.535983642578125 -0.18875 -0.424896240234375 0.535983642578125 -0.188875 -0.413482666015625 0.535983642578125 -0.189 -0.404449462890625 0.535983642578125 -0.189125 -0.39178466796875 0.535983642578125 -0.18925 -0.3818359375 0.535983642578125 -0.189375 -0.36798095703125 0.535983642578125 -0.1895 -0.357177734375 0.535983642578125 -0.189625 -0.34222412109375 0.535983642578125 -0.18975 -0.330596923828125 0.535983642578125 -0.189875 -0.31866455078125 0.535983642578125 -0.19 -0.30224609375 0.535983642578125 -0.190125 -0.289581298828125 0.535983642578125 -0.19025 -0.27227783203125 0.535983642578125 -0.190375 -0.25897216796875 0.535983642578125 -0.1905 -0.2408447265625 0.535983642578125 -0.190625 -0.226959228515625 0.535983642578125 -0.19075 -0.208099365234375 0.535983642578125 -0.190875 -0.1937255859375 0.535983642578125 -0.191 -0.17425537109375 0.535983642578125 -0.191125 -0.159454345703125 0.535983642578125 -0.19125 -0.13946533203125 0.535983642578125 -0.191375 -0.124298095703125 0.535983642578125 -0.1915 -0.103912353515625 0.535983642578125 -0.191625 -0.0885009765625 0.535983642578125 -0.19175 -0.06781005859375 0.535983642578125 -0.191875 -0.05224609375 0.535983642578125 -0.192 -0.0313720703125 0.791975830078125 -0.192125 -0.005218505859375 0.791975830078125 +0.1815 -0.0052490234375 0.535983642578125 +0.181625 -0.026153564453125 0.535983642578125 +0.18175 -0.041839599609375 0.535983642578125 +0.181875 -0.062652587890625 0.535983642578125 +0.182 -0.078216552734375 0.535983642578125 +0.182125 -0.09881591796875 0.535983642578125 +0.18225 -0.114166259765625 0.535983642578125 +0.182375 -0.13446044921875 0.535983642578125 +0.1825 -0.149505615234375 0.535983642578125 +0.182625 -0.16937255859375 0.535983642578125 +0.18275 -0.184051513671875 0.535983642578125 +0.182875 -0.203369140625 0.535983642578125 +0.183 -0.217620849609375 0.535983642578125 +0.183125 -0.23626708984375 0.535983642578125 +0.18325 -0.25 0.535983642578125 +0.183375 -0.263458251953125 0.535983642578125 +0.1835 -0.281005859375 0.535983642578125 +0.183625 -0.293853759765625 0.535983642578125 +0.18375 -0.310546875 0.535983642578125 +0.183875 -0.32269287109375 0.535983642578125 +0.184 -0.338409423828125 0.535983642578125 +0.184125 -0.34979248046875 0.535983642578125 +0.18425 -0.364471435546875 0.535983642578125 +0.184375 -0.375030517578125 0.535983642578125 +0.1845 -0.3885498046875 0.535983642578125 +0.184625 -0.398223876953125 0.535983642578125 +0.18475 -0.410552978515625 0.535983642578125 +0.184875 -0.4193115234375 0.535983642578125 +0.185 -0.430328369140625 0.535983642578125 +0.185125 -0.4381103515625 0.535983642578125 +0.18525 -0.44781494140625 0.535983642578125 +0.185375 -0.45458984375 0.535983642578125 +0.1855 -0.462921142578125 0.535983642578125 +0.185625 -0.468597412109375 0.535983642578125 +0.18575 -0.475494384765625 0.535983642578125 +0.185875 -0.4801025390625 0.535983642578125 +0.186 -0.48553466796875 0.535983642578125 +0.186125 -0.489044189453125 0.535983642578125 +0.18625 -0.49298095703125 0.535983642578125 +0.186375 -0.495330810546875 0.535983642578125 +0.1865 -0.497222900390625 0.535983642578125 +0.186625 -0.498992919921875 0.535983642578125 +0.18675 -0.499725341796875 0.535983642578125 +0.186875 -0.49993896484375 0.535983642578125 +0.187 -0.499542236328125 0.535983642578125 +0.187125 -0.49822998046875 0.535983642578125 +0.18725 -0.49664306640625 0.535983642578125 +0.187375 -0.493804931640625 0.535983642578125 +0.1875 -0.491119384765625 0.535983642578125 +0.187625 -0.48675537109375 0.535983642578125 +0.18775 -0.482940673828125 0.535983642578125 +0.187875 -0.477081298828125 0.535983642578125 +0.188 -0.47216796875 0.535983642578125 +0.188125 -0.46484375 0.535983642578125 +0.18825 -0.4588623046875 0.535983642578125 +0.188375 -0.45013427734375 0.535983642578125 +0.1885 -0.443084716796875 0.535983642578125 +0.188625 -0.4329833984375 0.535983642578125 +0.18875 -0.4249267578125 0.535983642578125 +0.188875 -0.41351318359375 0.535983642578125 +0.189 -0.40447998046875 0.535983642578125 +0.189125 -0.391815185546875 0.535983642578125 +0.18925 -0.381866455078125 0.535983642578125 +0.189375 -0.368011474609375 0.535983642578125 +0.1895 -0.357208251953125 0.535983642578125 +0.189625 -0.342254638671875 0.535983642578125 +0.18975 -0.33062744140625 0.535983642578125 +0.189875 -0.318695068359375 0.535983642578125 +0.19 -0.302276611328125 0.535983642578125 +0.190125 -0.28961181640625 0.535983642578125 +0.19025 -0.272308349609375 0.535983642578125 +0.190375 -0.259002685546875 0.535983642578125 +0.1905 -0.240875244140625 0.535983642578125 +0.190625 -0.22698974609375 0.535983642578125 +0.19075 -0.2081298828125 0.535983642578125 +0.190875 -0.193756103515625 0.535983642578125 +0.191 -0.174285888671875 0.535983642578125 +0.191125 -0.15948486328125 0.535983642578125 +0.19125 -0.139495849609375 0.535983642578125 +0.191375 -0.12432861328125 0.535983642578125 +0.1915 -0.10394287109375 0.535983642578125 +0.191625 -0.088531494140625 0.535983642578125 +0.19175 -0.067840576171875 0.535983642578125 +0.191875 -0.052276611328125 0.535983642578125 +0.192 -0.031402587890625 0.791975830078125 +0.192125 -0.0052490234375 0.791975830078125 0.19225 0.01568603515625 0.791975830078125 0.192375 0.036590576171875 0.791975830078125 0.1925 0.05743408203125 0.791975830078125 @@ -1608,78 +1608,78 @@ 0.200875 0.05743408203125 0.791975830078125 0.201 0.0313720703125 0.791975830078125 0.201125 0.01043701171875 0.791975830078125 -0.20125 -0.01043701171875 0.791975830078125 -0.201375 -0.0313720703125 0.791975830078125 -0.2015 -0.05224609375 0.791975830078125 -0.201625 -0.072998046875 0.791975830078125 -0.20175 -0.098785400390625 0.791975830078125 -0.201875 -0.119232177734375 0.791975830078125 -0.202 -0.13946533203125 0.791975830078125 -0.202125 -0.159454345703125 0.791975830078125 -0.20225 -0.17913818359375 0.791975830078125 -0.202375 -0.19854736328125 0.791975830078125 -0.2025 -0.2222900390625 0.791975830078125 -0.202625 -0.2408447265625 0.791975830078125 -0.20275 -0.25897216796875 0.791975830078125 -0.202875 -0.276641845703125 0.791975830078125 -0.203 -0.2938232421875 0.791975830078125 -0.203125 -0.310516357421875 0.791975830078125 -0.20325 -0.32666015625 0.791975830078125 -0.203375 -0.34600830078125 0.791975830078125 -0.2035 -0.360809326171875 0.791975830078125 -0.203625 -0.375 0.791975830078125 -0.20375 -0.388519287109375 0.791975830078125 -0.203875 -0.401336669921875 0.791975830078125 -0.204 -0.413482666015625 0.791975830078125 -0.204125 -0.4276123046875 0.791975830078125 -0.20425 -0.438079833984375 0.791975830078125 -0.204375 -0.447784423828125 0.791975830078125 -0.2045 -0.45672607421875 0.791975830078125 -0.204625 -0.464813232421875 0.791975830078125 -0.20475 -0.472137451171875 0.791975830078125 -0.204875 -0.480072021484375 0.791975830078125 -0.205 -0.485504150390625 0.791975830078125 -0.205125 -0.490081787109375 0.791975830078125 -0.20525 -0.4937744140625 0.791975830078125 -0.205375 -0.496612548828125 0.791975830078125 -0.2055 -0.49859619140625 0.791975830078125 -0.205625 -0.49969482421875 0.791975830078125 -0.20575 -0.49981689453125 0.791975830078125 -0.205875 -0.49896240234375 0.791975830078125 -0.206 -0.4971923828125 0.791975830078125 -0.206125 -0.49456787109375 0.791975830078125 -0.20625 -0.4910888671875 0.791975830078125 -0.206375 -0.486724853515625 0.791975830078125 -0.2065 -0.480072021484375 0.791975830078125 -0.206625 -0.47381591796875 0.791975830078125 -0.20675 -0.46673583984375 0.791975830078125 -0.206875 -0.458831787109375 0.791975830078125 -0.207 -0.450103759765625 0.791975830078125 -0.207125 -0.440582275390625 0.791975830078125 -0.20725 -0.4276123046875 0.791975830078125 -0.207375 -0.416412353515625 0.791975830078125 -0.2075 -0.404449462890625 0.791975830078125 -0.207625 -0.39178466796875 0.791975830078125 -0.20775 -0.378448486328125 0.791975830078125 -0.207875 -0.36444091796875 0.791975830078125 -0.208 -0.349761962890625 0.791975830078125 -0.208125 -0.330596923828125 0.791975830078125 -0.20825 -0.314605712890625 0.791975830078125 -0.208375 -0.298065185546875 0.791975830078125 -0.2085 -0.280975341796875 0.791975830078125 -0.208625 -0.263427734375 0.791975830078125 -0.20875 -0.24542236328125 0.791975830078125 -0.208875 -0.2222900390625 0.791975830078125 -0.209 -0.203338623046875 0.791975830078125 -0.209125 -0.18402099609375 0.791975830078125 -0.20925 -0.164398193359375 0.791975830078125 -0.209375 -0.14447021484375 0.791975830078125 -0.2095 -0.124298095703125 0.791975830078125 -0.209625 -0.103912353515625 0.791975830078125 -0.20975 -0.07818603515625 0.791975830078125 -0.209875 -0.05743408203125 0.791975830078125 -0.21 -0.036590576171875 0.791975830078125 -0.210125 -0.01568603515625 0.791975830078125 +0.20125 -0.010467529296875 0.791975830078125 +0.201375 -0.031402587890625 0.791975830078125 +0.2015 -0.052276611328125 0.791975830078125 +0.201625 -0.073028564453125 0.791975830078125 +0.20175 -0.09881591796875 0.791975830078125 +0.201875 -0.1192626953125 0.791975830078125 +0.202 -0.139495849609375 0.791975830078125 +0.202125 -0.15948486328125 0.791975830078125 +0.20225 -0.179168701171875 0.791975830078125 +0.202375 -0.198577880859375 0.791975830078125 +0.2025 -0.222320556640625 0.791975830078125 +0.202625 -0.240875244140625 0.791975830078125 +0.20275 -0.259002685546875 0.791975830078125 +0.202875 -0.27667236328125 0.791975830078125 +0.203 -0.293853759765625 0.791975830078125 +0.203125 -0.310546875 0.791975830078125 +0.20325 -0.326690673828125 0.791975830078125 +0.203375 -0.346038818359375 0.791975830078125 +0.2035 -0.36083984375 0.791975830078125 +0.203625 -0.375030517578125 0.791975830078125 +0.20375 -0.3885498046875 0.791975830078125 +0.203875 -0.4013671875 0.791975830078125 +0.204 -0.41351318359375 0.791975830078125 +0.204125 -0.427642822265625 0.791975830078125 +0.20425 -0.4381103515625 0.791975830078125 +0.204375 -0.44781494140625 0.791975830078125 +0.2045 -0.456756591796875 0.791975830078125 +0.204625 -0.46484375 0.791975830078125 +0.20475 -0.47216796875 0.791975830078125 +0.204875 -0.4801025390625 0.791975830078125 +0.205 -0.48553466796875 0.791975830078125 +0.205125 -0.4901123046875 0.791975830078125 +0.20525 -0.493804931640625 0.791975830078125 +0.205375 -0.49664306640625 0.791975830078125 +0.2055 -0.498626708984375 0.791975830078125 +0.205625 -0.499725341796875 0.791975830078125 +0.20575 -0.499847412109375 0.791975830078125 +0.205875 -0.498992919921875 0.791975830078125 +0.206 -0.497222900390625 0.791975830078125 +0.206125 -0.494598388671875 0.791975830078125 +0.20625 -0.491119384765625 0.791975830078125 +0.206375 -0.48675537109375 0.791975830078125 +0.2065 -0.4801025390625 0.791975830078125 +0.206625 -0.473846435546875 0.791975830078125 +0.20675 -0.466766357421875 0.791975830078125 +0.206875 -0.4588623046875 0.791975830078125 +0.207 -0.45013427734375 0.791975830078125 +0.207125 -0.44061279296875 0.791975830078125 +0.20725 -0.427642822265625 0.791975830078125 +0.207375 -0.41644287109375 0.791975830078125 +0.2075 -0.40447998046875 0.791975830078125 +0.207625 -0.391815185546875 0.791975830078125 +0.20775 -0.37847900390625 0.791975830078125 +0.207875 -0.364471435546875 0.791975830078125 +0.208 -0.34979248046875 0.791975830078125 +0.208125 -0.33062744140625 0.791975830078125 +0.20825 -0.31463623046875 0.791975830078125 +0.208375 -0.298095703125 0.791975830078125 +0.2085 -0.281005859375 0.791975830078125 +0.208625 -0.263458251953125 0.791975830078125 +0.20875 -0.245452880859375 0.791975830078125 +0.208875 -0.222320556640625 0.791975830078125 +0.209 -0.203369140625 0.791975830078125 +0.209125 -0.184051513671875 0.791975830078125 +0.20925 -0.1644287109375 0.791975830078125 +0.209375 -0.144500732421875 0.791975830078125 +0.2095 -0.12432861328125 0.791975830078125 +0.209625 -0.10394287109375 0.791975830078125 +0.20975 -0.078216552734375 0.791975830078125 +0.209875 -0.057464599609375 0.791975830078125 +0.21 -0.03662109375 0.791975830078125 +0.210125 -0.015716552734375 0.791975830078125 0.21025 0.005218505859375 0.791975830078125 0.210375 0.026123046875 0.791975830078125 0.2105 0.05224609375 0.791975830078125 @@ -1752,74 +1752,74 @@ 0.218875 0.0626220703125 0.791975830078125 0.219 0.04180908203125 0.791975830078125 0.219125 0.020904541015625 0.791975830078125 -0.21925 -0.005218505859375 0.791975830078125 -0.219375 -0.026123046875 0.791975830078125 -0.2195 -0.047027587890625 0.791975830078125 -0.219625 -0.06781005859375 0.791975830078125 -0.21975 -0.0885009765625 0.791975830078125 -0.219875 -0.109039306640625 0.791975830078125 -0.22 -0.134429931640625 0.791975830078125 -0.220125 -0.15447998046875 0.791975830078125 -0.22025 -0.17425537109375 0.791975830078125 -0.220375 -0.1937255859375 0.791975830078125 -0.2205 -0.212860107421875 0.791975830078125 -0.220625 -0.231597900390625 0.791975830078125 -0.22075 -0.249969482421875 0.791975830078125 -0.220875 -0.27227783203125 0.791975830078125 -0.221 -0.289581298828125 0.791975830078125 -0.221125 -0.306396484375 0.791975830078125 -0.22125 -0.322662353515625 0.791975830078125 -0.221375 -0.33837890625 0.791975830078125 -0.2215 -0.353485107421875 0.791975830078125 -0.221625 -0.37152099609375 0.791975830078125 -0.22175 -0.38519287109375 0.791975830078125 -0.221875 -0.398193359375 0.791975830078125 -0.222 -0.4105224609375 0.791975830078125 -0.222125 -0.422119140625 0.791975830078125 -0.22225 -0.432952880859375 0.791975830078125 -0.222375 -0.4454345703125 0.791975830078125 -0.2225 -0.454559326171875 0.791975830078125 -0.222625 -0.462890625 0.791975830078125 -0.22275 -0.470367431640625 0.791975830078125 -0.222875 -0.47705078125 0.791975830078125 -0.223 -0.48291015625 0.791975830078125 -0.223125 -0.487884521484375 0.791975830078125 -0.22325 -0.492950439453125 0.791975830078125 -0.223375 -0.496002197265625 0.791975830078125 -0.2235 -0.498199462890625 0.791975830078125 -0.223625 -0.49951171875 0.791975830078125 -0.22375 -0.49993896484375 0.791975830078125 -0.223875 -0.49951171875 0.791975830078125 -0.224 -0.497711181640625 0.9999084491282701 -0.224125 -0.49456787109375 0.9999084491282701 -0.22425 -0.490081787109375 0.9999084491282701 -0.224375 -0.484222412109375 0.9999084491282701 -0.2245 -0.478607177734375 0.9999084491282701 -0.224625 -0.470367431640625 0.9999084491282701 -0.22475 -0.46087646484375 0.9999084491282701 -0.224875 -0.450103759765625 0.9999084491282701 -0.225 -0.438079833984375 0.9999084491282701 -0.225125 -0.4276123046875 0.9999084491282701 -0.22525 -0.413482666015625 0.9999084491282701 -0.225375 -0.398193359375 0.9999084491282701 -0.2255 -0.3818359375 0.9999084491282701 -0.225625 -0.36444091796875 0.9999084491282701 -0.22575 -0.349761962890625 0.9999084491282701 -0.225875 -0.330596923828125 0.9999084491282701 -0.226 -0.310516357421875 0.9999084491282701 -0.226125 -0.289581298828125 0.9999084491282701 -0.22625 -0.267852783203125 0.9999084491282701 -0.226375 -0.249969482421875 0.9999084491282701 -0.2265 -0.226959228515625 0.9999084491282701 -0.226625 -0.203338623046875 0.9999084491282701 -0.22675 -0.17913818359375 0.9999084491282701 -0.226875 -0.15447998046875 0.9999084491282701 -0.227 -0.134429931640625 0.9999084491282701 -0.227125 -0.109039306640625 0.9999084491282701 -0.22725 -0.083343505859375 0.9999084491282701 -0.227375 -0.05743408203125 0.9999084491282701 -0.2275 -0.0313720703125 0.9999084491282701 -0.227625 -0.01043701171875 0.9999084491282701 +0.21925 -0.0052490234375 0.791975830078125 +0.219375 -0.026153564453125 0.791975830078125 +0.2195 -0.04705810546875 0.791975830078125 +0.219625 -0.067840576171875 0.791975830078125 +0.21975 -0.088531494140625 0.791975830078125 +0.219875 -0.10906982421875 0.791975830078125 +0.22 -0.13446044921875 0.791975830078125 +0.220125 -0.154510498046875 0.791975830078125 +0.22025 -0.174285888671875 0.791975830078125 +0.220375 -0.193756103515625 0.791975830078125 +0.2205 -0.212890625 0.791975830078125 +0.220625 -0.23162841796875 0.791975830078125 +0.22075 -0.25 0.791975830078125 +0.220875 -0.272308349609375 0.791975830078125 +0.221 -0.28961181640625 0.791975830078125 +0.221125 -0.306427001953125 0.791975830078125 +0.22125 -0.32269287109375 0.791975830078125 +0.221375 -0.338409423828125 0.791975830078125 +0.2215 -0.353515625 0.791975830078125 +0.221625 -0.371551513671875 0.791975830078125 +0.22175 -0.385223388671875 0.791975830078125 +0.221875 -0.398223876953125 0.791975830078125 +0.222 -0.410552978515625 0.791975830078125 +0.222125 -0.422149658203125 0.791975830078125 +0.22225 -0.4329833984375 0.791975830078125 +0.222375 -0.445465087890625 0.791975830078125 +0.2225 -0.45458984375 0.791975830078125 +0.222625 -0.462921142578125 0.791975830078125 +0.22275 -0.47039794921875 0.791975830078125 +0.222875 -0.477081298828125 0.791975830078125 +0.223 -0.482940673828125 0.791975830078125 +0.223125 -0.4879150390625 0.791975830078125 +0.22325 -0.49298095703125 0.791975830078125 +0.223375 -0.49603271484375 0.791975830078125 +0.2235 -0.49822998046875 0.791975830078125 +0.223625 -0.499542236328125 0.791975830078125 +0.22375 -0.499969482421875 0.791975830078125 +0.223875 -0.499542236328125 0.791975830078125 +0.224 -0.49774169921875 0.9999084491282701 +0.224125 -0.494598388671875 0.9999084491282701 +0.22425 -0.4901123046875 0.9999084491282701 +0.224375 -0.4842529296875 0.9999084491282701 +0.2245 -0.4786376953125 0.9999084491282701 +0.224625 -0.47039794921875 0.9999084491282701 +0.22475 -0.460906982421875 0.9999084491282701 +0.224875 -0.45013427734375 0.9999084491282701 +0.225 -0.4381103515625 0.9999084491282701 +0.225125 -0.427642822265625 0.9999084491282701 +0.22525 -0.41351318359375 0.9999084491282701 +0.225375 -0.398223876953125 0.9999084491282701 +0.2255 -0.381866455078125 0.9999084491282701 +0.225625 -0.364471435546875 0.9999084491282701 +0.22575 -0.34979248046875 0.9999084491282701 +0.225875 -0.33062744140625 0.9999084491282701 +0.226 -0.310546875 0.9999084491282701 +0.226125 -0.28961181640625 0.9999084491282701 +0.22625 -0.26788330078125 0.9999084491282701 +0.226375 -0.25 0.9999084491282701 +0.2265 -0.22698974609375 0.9999084491282701 +0.226625 -0.203369140625 0.9999084491282701 +0.22675 -0.179168701171875 0.9999084491282701 +0.226875 -0.154510498046875 0.9999084491282701 +0.227 -0.13446044921875 0.9999084491282701 +0.227125 -0.10906982421875 0.9999084491282701 +0.22725 -0.0833740234375 0.9999084491282701 +0.227375 -0.057464599609375 0.9999084491282701 +0.2275 -0.031402587890625 0.9999084491282701 +0.227625 -0.010467529296875 0.9999084491282701 0.22775 0.01568603515625 0.9999084491282701 0.227875 0.04180908203125 0.9999084491282701 0.228 0.06781005859375 0.9999084491282701 @@ -1882,69 +1882,69 @@ 0.235125 0.072998046875 0.9999084491282701 0.23525 0.047027587890625 0.9999084491282701 0.235375 0.020904541015625 0.9999084491282701 -0.2355 -0.005218505859375 0.9999084491282701 -0.235625 -0.0313720703125 0.9999084491282701 -0.23575 -0.05224609375 0.9999084491282701 -0.235875 -0.07818603515625 0.9999084491282701 -0.236 -0.103912353515625 0.9999084491282701 -0.236125 -0.129364013671875 0.9999084491282701 -0.23625 -0.15447998046875 0.9999084491282701 -0.236375 -0.17425537109375 0.9999084491282701 -0.2365 -0.19854736328125 0.9999084491282701 -0.236625 -0.2222900390625 0.9999084491282701 -0.23675 -0.24542236328125 0.9999084491282701 -0.236875 -0.267852783203125 0.9999084491282701 -0.237 -0.285308837890625 0.9999084491282701 -0.237125 -0.306396484375 0.9999084491282701 -0.23725 -0.32666015625 0.9999084491282701 -0.237375 -0.34600830078125 0.9999084491282701 -0.2375 -0.36444091796875 0.9999084491282701 -0.237625 -0.378448486328125 0.9999084491282701 -0.23775 -0.39501953125 0.9999084491282701 -0.237875 -0.4105224609375 0.9999084491282701 -0.238 -0.424896240234375 0.9999084491282701 -0.238125 -0.438079833984375 0.9999084491282701 -0.23825 -0.447784423828125 0.9999084491282701 -0.238375 -0.458831787109375 0.9999084491282701 -0.2385 -0.46856689453125 0.9999084491282701 -0.238625 -0.47705078125 0.9999084491282701 -0.23875 -0.484222412109375 0.9999084491282701 -0.238875 -0.489013671875 0.9999084491282701 -0.239 -0.4937744140625 0.9999084491282701 -0.239125 -0.4971923828125 0.9999084491282701 -0.23925 -0.499267578125 0.9999084491282701 -0.239375 -0.49993896484375 0.9999084491282701 -0.2395 -0.49951171875 0.9999084491282701 -0.239625 -0.497711181640625 0.9999084491282701 -0.23975 -0.49456787109375 0.9999084491282701 -0.239875 -0.490081787109375 0.9999084491282701 -0.24 -0.484222412109375 0.9999084491282701 -0.240125 -0.478607177734375 0.9999084491282701 -0.24025 -0.470367431640625 0.9999084491282701 -0.240375 -0.46087646484375 0.9999084491282701 -0.2405 -0.450103759765625 0.9999084491282701 -0.240625 -0.438079833984375 0.9999084491282701 -0.24075 -0.4276123046875 0.9999084491282701 -0.240875 -0.413482666015625 0.9999084491282701 -0.241 -0.398193359375 0.9999084491282701 -0.241125 -0.3818359375 0.9999084491282701 -0.24125 -0.36444091796875 0.9999084491282701 -0.241375 -0.349761962890625 0.9999084491282701 -0.2415 -0.330596923828125 0.9999084491282701 -0.241625 -0.310516357421875 0.9999084491282701 -0.24175 -0.289581298828125 0.9999084491282701 -0.241875 -0.267852783203125 0.9999084491282701 -0.242 -0.249969482421875 0.9999084491282701 -0.242125 -0.226959228515625 0.9999084491282701 -0.24225 -0.203338623046875 0.9999084491282701 -0.242375 -0.17913818359375 0.9999084491282701 -0.2425 -0.15447998046875 0.9999084491282701 -0.242625 -0.134429931640625 0.9999084491282701 -0.24275 -0.109039306640625 0.9999084491282701 -0.242875 -0.083343505859375 0.9999084491282701 -0.243 -0.05743408203125 0.9999084491282701 -0.243125 -0.0313720703125 0.9999084491282701 -0.24325 -0.01043701171875 0.9999084491282701 +0.2355 -0.0052490234375 0.9999084491282701 +0.235625 -0.031402587890625 0.9999084491282701 +0.23575 -0.052276611328125 0.9999084491282701 +0.235875 -0.078216552734375 0.9999084491282701 +0.236 -0.10394287109375 0.9999084491282701 +0.236125 -0.12939453125 0.9999084491282701 +0.23625 -0.154510498046875 0.9999084491282701 +0.236375 -0.174285888671875 0.9999084491282701 +0.2365 -0.198577880859375 0.9999084491282701 +0.236625 -0.222320556640625 0.9999084491282701 +0.23675 -0.245452880859375 0.9999084491282701 +0.236875 -0.26788330078125 0.9999084491282701 +0.237 -0.28533935546875 0.9999084491282701 +0.237125 -0.306427001953125 0.9999084491282701 +0.23725 -0.326690673828125 0.9999084491282701 +0.237375 -0.346038818359375 0.9999084491282701 +0.2375 -0.364471435546875 0.9999084491282701 +0.237625 -0.37847900390625 0.9999084491282701 +0.23775 -0.395050048828125 0.9999084491282701 +0.237875 -0.410552978515625 0.9999084491282701 +0.238 -0.4249267578125 0.9999084491282701 +0.238125 -0.4381103515625 0.9999084491282701 +0.23825 -0.44781494140625 0.9999084491282701 +0.238375 -0.4588623046875 0.9999084491282701 +0.2385 -0.468597412109375 0.9999084491282701 +0.238625 -0.477081298828125 0.9999084491282701 +0.23875 -0.4842529296875 0.9999084491282701 +0.238875 -0.489044189453125 0.9999084491282701 +0.239 -0.493804931640625 0.9999084491282701 +0.239125 -0.497222900390625 0.9999084491282701 +0.23925 -0.499298095703125 0.9999084491282701 +0.239375 -0.499969482421875 0.9999084491282701 +0.2395 -0.499542236328125 0.9999084491282701 +0.239625 -0.49774169921875 0.9999084491282701 +0.23975 -0.494598388671875 0.9999084491282701 +0.239875 -0.4901123046875 0.9999084491282701 +0.24 -0.4842529296875 0.9999084491282701 +0.240125 -0.4786376953125 0.9999084491282701 +0.24025 -0.47039794921875 0.9999084491282701 +0.240375 -0.460906982421875 0.9999084491282701 +0.2405 -0.45013427734375 0.9999084491282701 +0.240625 -0.4381103515625 0.9999084491282701 +0.24075 -0.427642822265625 0.9999084491282701 +0.240875 -0.41351318359375 0.9999084491282701 +0.241 -0.398223876953125 0.9999084491282701 +0.241125 -0.381866455078125 0.9999084491282701 +0.24125 -0.364471435546875 0.9999084491282701 +0.241375 -0.34979248046875 0.9999084491282701 +0.2415 -0.33062744140625 0.9999084491282701 +0.241625 -0.310546875 0.9999084491282701 +0.24175 -0.28961181640625 0.9999084491282701 +0.241875 -0.26788330078125 0.9999084491282701 +0.242 -0.25 0.9999084491282701 +0.242125 -0.22698974609375 0.9999084491282701 +0.24225 -0.203369140625 0.9999084491282701 +0.242375 -0.179168701171875 0.9999084491282701 +0.2425 -0.154510498046875 0.9999084491282701 +0.242625 -0.13446044921875 0.9999084491282701 +0.24275 -0.10906982421875 0.9999084491282701 +0.242875 -0.0833740234375 0.9999084491282701 +0.243 -0.057464599609375 0.9999084491282701 +0.243125 -0.031402587890625 0.9999084491282701 +0.24325 -0.010467529296875 0.9999084491282701 0.243375 0.01568603515625 0.9999084491282701 0.2435 0.04180908203125 0.9999084491282701 0.243625 0.06781005859375 0.9999084491282701 @@ -2007,42 +2007,42 @@ 0.25075 0.072998046875 0.9999084491282701 0.250875 0.047027587890625 0.9999084491282701 0.251 0.020904541015625 0.9999084491282701 -0.251125 -0.005218505859375 0.9999084491282701 -0.25125 -0.0313720703125 0.9999084491282701 -0.251375 -0.05224609375 0.9999084491282701 -0.2515 -0.07818603515625 0.9999084491282701 -0.251625 -0.103912353515625 0.9999084491282701 -0.25175 -0.129364013671875 0.9999084491282701 -0.251875 -0.15447998046875 0.9999084491282701 -0.252 -0.17425537109375 0.9999084491282701 -0.252125 -0.19854736328125 0.9999084491282701 -0.25225 -0.2222900390625 0.9999084491282701 -0.252375 -0.24542236328125 0.9999084491282701 -0.2525 -0.267852783203125 0.9999084491282701 -0.252625 -0.285308837890625 0.9999084491282701 -0.25275 -0.306396484375 0.9999084491282701 -0.252875 -0.32666015625 0.9999084491282701 -0.253 -0.34600830078125 0.9999084491282701 -0.253125 -0.36444091796875 0.9999084491282701 -0.25325 -0.378448486328125 0.9999084491282701 -0.253375 -0.39501953125 0.9999084491282701 -0.2535 -0.4105224609375 0.9999084491282701 -0.253625 -0.424896240234375 0.9999084491282701 -0.2537500000000001 -0.438079833984375 0.9999084491282701 -0.253875 -0.447784423828125 0.9999084491282701 -0.254 -0.458831787109375 0.9999084491282701 -0.254125 -0.46856689453125 0.9999084491282701 -0.25425 -0.47705078125 0.9999084491282701 -0.254375 -0.484222412109375 0.9999084491282701 -0.2545 -0.489013671875 0.9999084491282701 -0.254625 -0.4937744140625 0.9999084491282701 -0.25475 -0.4971923828125 0.9999084491282701 -0.254875 -0.499267578125 0.9999084491282701 -0.255 -0.49993896484375 0.9999084491282701 -0.255125 -0.49951171875 0.9999084491282701 -0.25525 -0.497711181640625 0.9999084491282701 -0.255375 -0.49456787109375 0.9999084491282701 -0.2555 -0.490081787109375 0.9999084491282701 -0.255625 -0.484222412109375 0.9999084491282701 -0.25575 -0.478607177734375 0.9999084491282701 -0.255875 -0.470367431640625 0.9999084491282701 +0.251125 -0.0052490234375 0.9999084491282701 +0.25125 -0.031402587890625 0.9999084491282701 +0.251375 -0.052276611328125 0.9999084491282701 +0.2515 -0.078216552734375 0.9999084491282701 +0.251625 -0.10394287109375 0.9999084491282701 +0.25175 -0.12939453125 0.9999084491282701 +0.251875 -0.154510498046875 0.9999084491282701 +0.252 -0.174285888671875 0.9999084491282701 +0.252125 -0.198577880859375 0.9999084491282701 +0.25225 -0.222320556640625 0.9999084491282701 +0.252375 -0.245452880859375 0.9999084491282701 +0.2525 -0.26788330078125 0.9999084491282701 +0.252625 -0.28533935546875 0.9999084491282701 +0.25275 -0.306427001953125 0.9999084491282701 +0.252875 -0.326690673828125 0.9999084491282701 +0.253 -0.346038818359375 0.9999084491282701 +0.253125 -0.364471435546875 0.9999084491282701 +0.25325 -0.37847900390625 0.9999084491282701 +0.253375 -0.395050048828125 0.9999084491282701 +0.2535 -0.410552978515625 0.9999084491282701 +0.253625 -0.4249267578125 0.9999084491282701 +0.2537500000000001 -0.4381103515625 0.9999084491282701 +0.253875 -0.44781494140625 0.9999084491282701 +0.254 -0.4588623046875 0.9999084491282701 +0.254125 -0.468597412109375 0.9999084491282701 +0.25425 -0.477081298828125 0.9999084491282701 +0.254375 -0.4842529296875 0.9999084491282701 +0.2545 -0.489044189453125 0.9999084491282701 +0.254625 -0.493804931640625 0.9999084491282701 +0.25475 -0.497222900390625 0.9999084491282701 +0.254875 -0.499298095703125 0.9999084491282701 +0.255 -0.499969482421875 0.9999084491282701 +0.255125 -0.499542236328125 0.9999084491282701 +0.25525 -0.49774169921875 0.9999084491282701 +0.255375 -0.494598388671875 0.9999084491282701 +0.2555 -0.4901123046875 0.9999084491282701 +0.255625 -0.4842529296875 0.9999084491282701 +0.25575 -0.4786376953125 0.9999084491282701 +0.255875 -0.47039794921875 0.9999084491282701 diff --git a/tests/circuitpython/synth_note_envelope.py.exp b/tests/circuitpython/synth_note_envelope.py.exp index d4c7d0adc2..c490380cb3 100644 --- a/tests/circuitpython/synth_note_envelope.py.exp +++ b/tests/circuitpython/synth_note_envelope.py.exp @@ -29,37 +29,37 @@ 0.0035 0.034515380859375 0.302396875 0.003625 0.0189208984375 0.302396875 0.00375 0.004730224609375 0.302396875 -0.003875 -0.01104736328125 0.302396875 -0.004 -0.02520751953125 0.302396875 -0.004125 -0.0406494140625 0.302396875 -0.00425 -0.055633544921875 0.302396875 -0.004375000000000001 -0.068603515625 0.302396875 -0.004500000000000001 -0.08233642578125 0.302396875 -0.004625 -0.093902587890625 0.302396875 -0.00475 -0.105743408203125 0.302396875 -0.004875 -0.116455078125 0.302396875 -0.005 -0.125030517578125 0.302396875 -0.005125000000000001 -0.133209228515625 0.302396875 -0.00525 -0.13934326171875 0.302396875 -0.005375000000000001 -0.14471435546875 0.302396875 -0.005499999999999999 -0.14849853515625 0.302396875 -0.005625 -0.150482177734375 0.302396875 -0.00575 -0.151153564453125 0.302396875 -0.005874999999999999 -0.15032958984375 0.302396875 -0.006 -0.147857666015625 0.302396875 -0.006125 -0.143768310546875 0.302396875 -0.00625 -0.13873291015625 0.302396875 -0.006375 -0.131683349609375 0.302396875 -0.0065 -0.124114990234375 0.302396875 -0.006625000000000001 -0.114410400390625 0.302396875 -0.00675 -0.103485107421875 0.302396875 -0.006875 -0.0926513671875 0.302396875 -0.007000000000000001 -0.07965087890625 0.302396875 -0.007125000000000002 -0.06719970703125 0.302396875 -0.007250000000000001 -0.05267333984375 0.302396875 -0.007375 -0.037567138671875 0.302396875 -0.0075 -0.02362060546875 0.302396875 -0.007625 -0.007904052734375 0.302396875 +0.003875 -0.011077880859375 0.302396875 +0.004 -0.025238037109375 0.302396875 +0.004125 -0.040679931640625 0.302396875 +0.00425 -0.0556640625 0.302396875 +0.004375000000000001 -0.068634033203125 0.302396875 +0.004500000000000001 -0.082366943359375 0.302396875 +0.004625 -0.09393310546875 0.302396875 +0.00475 -0.10577392578125 0.302396875 +0.004875 -0.116485595703125 0.302396875 +0.005 -0.12506103515625 0.302396875 +0.005125000000000001 -0.13323974609375 0.302396875 +0.00525 -0.139373779296875 0.302396875 +0.005375000000000001 -0.144744873046875 0.302396875 +0.005499999999999999 -0.148529052734375 0.302396875 +0.005625 -0.1505126953125 0.302396875 +0.00575 -0.15118408203125 0.302396875 +0.005874999999999999 -0.150360107421875 0.302396875 +0.006 -0.14788818359375 0.302396875 +0.006125 -0.143798828125 0.302396875 +0.00625 -0.138763427734375 0.302396875 +0.006375 -0.1317138671875 0.302396875 +0.0065 -0.1241455078125 0.302396875 +0.006625000000000001 -0.11444091796875 0.302396875 +0.00675 -0.103515625 0.302396875 +0.006875 -0.092681884765625 0.302396875 +0.007000000000000001 -0.079681396484375 0.302396875 +0.007125000000000002 -0.067230224609375 0.302396875 +0.007250000000000001 -0.052703857421875 0.302396875 +0.007375 -0.03759765625 0.302396875 +0.0075 -0.023651123046875 0.302396875 +0.007625 -0.0079345703125 0.302396875 0.00775 0.006317138671875 0.302396875 0.007875 0.022064208984375 0.302396875 0.008 0.037567138671875 0.302396875 @@ -91,37 +91,37 @@ 0.01125 0.042144775390625 0.302396875 0.011375 0.026763916015625 0.302396875 0.0115 0.01263427734375 0.302396875 -0.011625 -0.003143310546875 0.302396875 -0.01175 -0.0189208984375 0.302396875 -0.011875 -0.032958984375 0.302396875 -0.012 -0.0482177734375 0.302396875 -0.012125 -0.06146240234375 0.302396875 -0.01225 -0.0755615234375 0.302396875 -0.012375 -0.088836669921875 0.302396875 -0.0125 -0.0999755859375 0.302396875 -0.012625 -0.11126708984375 0.302396875 -0.01275 -0.120391845703125 0.302396875 -0.012875 -0.129302978515625 0.302396875 -0.013 -0.13677978515625 0.302396875 -0.013125 -0.1422119140625 0.302396875 -0.01325 -0.14678955078125 0.302396875 -0.013375 -0.1495361328125 0.302396875 -0.0135 -0.151031494140625 0.302396875 -0.013625 -0.15087890625 0.302396875 -0.01375 -0.1492919921875 0.302396875 -0.013875 -0.14599609375 0.302396875 -0.014 -0.141693115234375 0.302396875 -0.014125 -0.135406494140625 0.302396875 -0.01425 -0.12762451171875 0.302396875 -0.014375 -0.11944580078125 0.302396875 -0.0145 -0.109100341796875 0.302396875 -0.014625 -0.0987548828125 0.302396875 -0.01475 -0.086273193359375 0.302396875 -0.014875 -0.07281494140625 0.302396875 -0.015 -0.060028076171875 0.302396875 -0.015125 -0.045196533203125 0.302396875 -0.01525 -0.031402587890625 0.302396875 -0.015375 -0.015777587890625 0.302396875 +0.011625 -0.003173828125 0.302396875 +0.01175 -0.018951416015625 0.302396875 +0.011875 -0.032989501953125 0.302396875 +0.012 -0.048248291015625 0.302396875 +0.012125 -0.061492919921875 0.302396875 +0.01225 -0.075592041015625 0.302396875 +0.012375 -0.0888671875 0.302396875 +0.0125 -0.100006103515625 0.302396875 +0.012625 -0.111297607421875 0.302396875 +0.01275 -0.12042236328125 0.302396875 +0.012875 -0.12933349609375 0.302396875 +0.013 -0.136810302734375 0.302396875 +0.013125 -0.142242431640625 0.302396875 +0.01325 -0.146820068359375 0.302396875 +0.013375 -0.149566650390625 0.302396875 +0.0135 -0.15106201171875 0.302396875 +0.013625 -0.150909423828125 0.302396875 +0.01375 -0.149322509765625 0.302396875 +0.013875 -0.146026611328125 0.302396875 +0.014 -0.1417236328125 0.302396875 +0.014125 -0.13543701171875 0.302396875 +0.01425 -0.127655029296875 0.302396875 +0.014375 -0.119476318359375 0.302396875 +0.0145 -0.109130859375 0.302396875 +0.014625 -0.098785400390625 0.302396875 +0.01475 -0.0863037109375 0.302396875 +0.014875 -0.072845458984375 0.302396875 +0.015 -0.06005859375 0.302396875 +0.015125 -0.04522705078125 0.302396875 +0.01525 -0.03143310546875 0.302396875 +0.015375 -0.01580810546875 0.302396875 0.0155 0.0 0.302396875 0.015625 0.01422119140625 0.302396875 0.01575 0.029876708984375 0.302396875 @@ -154,37 +154,37 @@ 0.019125 0.034515380859375 0.302396875 0.01925 0.0189208984375 0.302396875 0.019375 0.004730224609375 0.302396875 -0.0195 -0.01104736328125 0.302396875 -0.019625 -0.02520751953125 0.302396875 -0.01975 -0.0406494140625 0.302396875 -0.019875 -0.055633544921875 0.302396875 -0.02 -0.068603515625 0.302396875 -0.020125 -0.08233642578125 0.302396875 -0.02025 -0.093902587890625 0.302396875 -0.020375 -0.105743408203125 0.302396875 -0.0205 -0.116455078125 0.302396875 -0.020625 -0.125030517578125 0.302396875 -0.02075 -0.133209228515625 0.302396875 -0.020875 -0.13934326171875 0.302396875 -0.021 -0.14471435546875 0.302396875 -0.021125 -0.14849853515625 0.302396875 -0.02125 -0.150482177734375 0.302396875 -0.021375 -0.151153564453125 0.302396875 -0.0215 -0.15032958984375 0.302396875 -0.021625 -0.147857666015625 0.302396875 -0.02175 -0.143768310546875 0.302396875 -0.021875 -0.13873291015625 0.302396875 -0.022 -0.131683349609375 0.302396875 -0.022125 -0.124114990234375 0.302396875 -0.02225 -0.114410400390625 0.302396875 -0.022375 -0.103485107421875 0.302396875 -0.0225 -0.0926513671875 0.302396875 -0.022625 -0.07965087890625 0.302396875 -0.02275 -0.06719970703125 0.302396875 -0.022875 -0.05267333984375 0.302396875 -0.023 -0.037567138671875 0.302396875 -0.023125 -0.02362060546875 0.302396875 -0.02325 -0.007904052734375 0.302396875 +0.0195 -0.011077880859375 0.302396875 +0.019625 -0.025238037109375 0.302396875 +0.01975 -0.040679931640625 0.302396875 +0.019875 -0.0556640625 0.302396875 +0.02 -0.068634033203125 0.302396875 +0.020125 -0.082366943359375 0.302396875 +0.02025 -0.09393310546875 0.302396875 +0.020375 -0.10577392578125 0.302396875 +0.0205 -0.116485595703125 0.302396875 +0.020625 -0.12506103515625 0.302396875 +0.02075 -0.13323974609375 0.302396875 +0.020875 -0.139373779296875 0.302396875 +0.021 -0.144744873046875 0.302396875 +0.021125 -0.148529052734375 0.302396875 +0.02125 -0.1505126953125 0.302396875 +0.021375 -0.15118408203125 0.302396875 +0.0215 -0.150360107421875 0.302396875 +0.021625 -0.14788818359375 0.302396875 +0.02175 -0.143798828125 0.302396875 +0.021875 -0.138763427734375 0.302396875 +0.022 -0.1317138671875 0.302396875 +0.022125 -0.1241455078125 0.302396875 +0.02225 -0.11444091796875 0.302396875 +0.022375 -0.103515625 0.302396875 +0.0225 -0.092681884765625 0.302396875 +0.022625 -0.079681396484375 0.302396875 +0.02275 -0.067230224609375 0.302396875 +0.022875 -0.052703857421875 0.302396875 +0.023 -0.03759765625 0.302396875 +0.023125 -0.023651123046875 0.302396875 +0.02325 -0.0079345703125 0.302396875 0.023375 0.006317138671875 0.302396875 0.0235 0.022064208984375 0.302396875 0.023625 0.037567138671875 0.302396875 @@ -216,37 +216,37 @@ 0.026875 0.042144775390625 0.302396875 0.027 0.026763916015625 0.302396875 0.027125 0.01263427734375 0.302396875 -0.02725 -0.003143310546875 0.302396875 -0.027375 -0.0189208984375 0.302396875 -0.0275 -0.032958984375 0.302396875 -0.027625 -0.0482177734375 0.302396875 -0.02775 -0.06146240234375 0.302396875 -0.027875 -0.0755615234375 0.302396875 -0.028 -0.088836669921875 0.302396875 -0.028125 -0.0999755859375 0.302396875 -0.02825 -0.11126708984375 0.302396875 -0.028375 -0.120391845703125 0.302396875 -0.02850000000000001 -0.129302978515625 0.302396875 -0.028625 -0.13677978515625 0.302396875 -0.02875 -0.1422119140625 0.302396875 -0.028875 -0.14678955078125 0.302396875 -0.029 -0.1495361328125 0.302396875 -0.029125 -0.151031494140625 0.302396875 -0.02925 -0.15087890625 0.302396875 -0.029375 -0.1492919921875 0.302396875 -0.0295 -0.14599609375 0.302396875 -0.029625 -0.141693115234375 0.302396875 -0.02975000000000001 -0.135406494140625 0.302396875 -0.029875 -0.12762451171875 0.302396875 -0.03 -0.11944580078125 0.302396875 -0.030125 -0.109100341796875 0.302396875 -0.03025 -0.0987548828125 0.302396875 -0.030375 -0.086273193359375 0.302396875 -0.0305 -0.07281494140625 0.302396875 -0.030625 -0.060028076171875 0.302396875 -0.03075 -0.045196533203125 0.302396875 -0.03087499999999999 -0.031402587890625 0.302396875 -0.031 -0.015777587890625 0.302396875 +0.02725 -0.003173828125 0.302396875 +0.027375 -0.018951416015625 0.302396875 +0.0275 -0.032989501953125 0.302396875 +0.027625 -0.048248291015625 0.302396875 +0.02775 -0.061492919921875 0.302396875 +0.027875 -0.075592041015625 0.302396875 +0.028 -0.0888671875 0.302396875 +0.028125 -0.100006103515625 0.302396875 +0.02825 -0.111297607421875 0.302396875 +0.028375 -0.12042236328125 0.302396875 +0.02850000000000001 -0.12933349609375 0.302396875 +0.028625 -0.136810302734375 0.302396875 +0.02875 -0.142242431640625 0.302396875 +0.028875 -0.146820068359375 0.302396875 +0.029 -0.149566650390625 0.302396875 +0.029125 -0.15106201171875 0.302396875 +0.02925 -0.150909423828125 0.302396875 +0.029375 -0.149322509765625 0.302396875 +0.0295 -0.146026611328125 0.302396875 +0.029625 -0.1417236328125 0.302396875 +0.02975000000000001 -0.13543701171875 0.302396875 +0.029875 -0.127655029296875 0.302396875 +0.03 -0.119476318359375 0.302396875 +0.030125 -0.109130859375 0.302396875 +0.03025 -0.098785400390625 0.302396875 +0.030375 -0.0863037109375 0.302396875 +0.0305 -0.072845458984375 0.302396875 +0.030625 -0.06005859375 0.302396875 +0.03075 -0.04522705078125 0.302396875 +0.03087499999999999 -0.03143310546875 0.302396875 +0.031 -0.01580810546875 0.302396875 0.031125 0.0 0.302396875 0.03125 0.01422119140625 0.302396875 0.031375 0.029876708984375 0.302396875 @@ -279,37 +279,37 @@ 0.03475000000000001 0.04620361328125 0.4047937500000001 0.034875 0.02532958984375 0.4047937500000001 0.035 0.00634765625 0.4047937500000001 -0.03512500000000001 -0.014801025390625 0.4047937500000001 -0.03525 -0.033721923828125 0.4047937500000001 -0.035375 -0.054412841796875 0.4047937500000001 -0.0355 -0.074493408203125 0.4047937500000001 -0.03562500000000001 -0.09185791015625 0.4047937500000001 -0.03575 -0.110198974609375 0.4047937500000001 -0.035875 -0.12567138671875 0.4047937500000001 -0.03600000000000001 -0.141571044921875 0.4047937500000001 -0.036125 -0.155914306640625 0.4047937500000001 -0.03625 -0.1673583984375 0.4047937500000001 -0.036375 -0.1783447265625 0.4047937500000001 -0.0365 -0.186553955078125 0.4047937500000001 -0.036625 -0.1937255859375 0.4047937500000001 -0.03675 -0.198760986328125 0.4047937500000001 -0.036875 -0.201446533203125 0.4047937500000001 -0.037 -0.20233154296875 0.4047937500000001 -0.03712499999999999 -0.20123291015625 0.4047937500000001 -0.03725 -0.19793701171875 0.4047937500000001 -0.037375 -0.19244384765625 0.4047937500000001 -0.0375 -0.185699462890625 0.4047937500000001 -0.037625 -0.176300048828125 0.4047937500000001 -0.03775 -0.166168212890625 0.4047937500000001 -0.037875 -0.153167724609375 0.4047937500000001 -0.038 -0.138519287109375 0.4047937500000001 -0.038125 -0.1240234375 0.4047937500000001 -0.03825 -0.10662841796875 0.4047937500000001 -0.038375 -0.0899658203125 0.4047937500000001 -0.0385 -0.070526123046875 0.4047937500000001 -0.038625 -0.05029296875 0.4047937500000001 -0.03875 -0.031646728515625 0.4047937500000001 -0.038875 -0.01055908203125 0.4047937500000001 +0.03512500000000001 -0.01483154296875 0.4047937500000001 +0.03525 -0.03375244140625 0.4047937500000001 +0.035375 -0.054443359375 0.4047937500000001 +0.0355 -0.07452392578125 0.4047937500000001 +0.03562500000000001 -0.091888427734375 0.4047937500000001 +0.03575 -0.1102294921875 0.4047937500000001 +0.035875 -0.125701904296875 0.4047937500000001 +0.03600000000000001 -0.1416015625 0.4047937500000001 +0.036125 -0.15594482421875 0.4047937500000001 +0.03625 -0.167388916015625 0.4047937500000001 +0.036375 -0.178375244140625 0.4047937500000001 +0.0365 -0.18658447265625 0.4047937500000001 +0.036625 -0.193756103515625 0.4047937500000001 +0.03675 -0.19879150390625 0.4047937500000001 +0.036875 -0.20147705078125 0.4047937500000001 +0.037 -0.202362060546875 0.4047937500000001 +0.03712499999999999 -0.201263427734375 0.4047937500000001 +0.03725 -0.197967529296875 0.4047937500000001 +0.037375 -0.192474365234375 0.4047937500000001 +0.0375 -0.18572998046875 0.4047937500000001 +0.037625 -0.17633056640625 0.4047937500000001 +0.03775 -0.16619873046875 0.4047937500000001 +0.037875 -0.1531982421875 0.4047937500000001 +0.038 -0.1385498046875 0.4047937500000001 +0.038125 -0.124053955078125 0.4047937500000001 +0.03825 -0.106658935546875 0.4047937500000001 +0.038375 -0.089996337890625 0.4047937500000001 +0.0385 -0.070556640625 0.4047937500000001 +0.038625 -0.050323486328125 0.4047937500000001 +0.03875 -0.03167724609375 0.4047937500000001 +0.038875 -0.010589599609375 0.4047937500000001 0.039 0.008453369140625 0.4047937500000001 0.039125 0.029541015625 0.4047937500000001 0.03925 0.05029296875 0.4047937500000001 @@ -341,37 +341,37 @@ 0.0425 0.056427001953125 0.4047937500000001 0.042625 0.03582763671875 0.4047937500000001 0.04275 0.01690673828125 0.4047937500000001 -0.04287500000000001 -0.00421142578125 0.4047937500000001 -0.04300000000000001 -0.02532958984375 0.4047937500000001 -0.043125 -0.04412841796875 0.4047937500000001 -0.04325 -0.064544677734375 0.4047937500000001 -0.043375 -0.082305908203125 0.4047937500000001 -0.04350000000000001 -0.101165771484375 0.4047937500000001 -0.04362500000000001 -0.118927001953125 0.4047937500000001 -0.04375000000000001 -0.133819580078125 0.4047937500000001 -0.043875 -0.148956298828125 0.4047937500000001 -0.04399999999999999 -0.161163330078125 0.4047937500000001 -0.044125 -0.173095703125 0.4047937500000001 -0.04425 -0.18310546875 0.4047937500000001 -0.044375 -0.190399169921875 0.4047937500000001 -0.04449999999999999 -0.196502685546875 0.4047937500000001 -0.04462499999999999 -0.2001953125 0.4047937500000001 -0.04475 -0.202178955078125 0.4047937500000001 -0.044875 -0.20196533203125 0.4047937500000001 -0.045 -0.199859619140625 0.4047937500000001 -0.045125 -0.195465087890625 0.4047937500000001 -0.04525 -0.189666748046875 0.4047937500000001 -0.045375 -0.181243896484375 0.4047937500000001 -0.0455 -0.17083740234375 0.4047937500000001 -0.045625 -0.159881591796875 0.4047937500000001 -0.04575 -0.14605712890625 0.4047937500000001 -0.045875 -0.1322021484375 0.4047937500000001 -0.046 -0.115478515625 0.4047937500000001 -0.046125 -0.09747314453125 0.4047937500000001 -0.04625 -0.080352783203125 0.4047937500000001 -0.046375 -0.06048583984375 0.4047937500000001 -0.04649999999999999 -0.04205322265625 0.4047937500000001 -0.046625 -0.021148681640625 0.4047937500000001 +0.04287500000000001 -0.004241943359375 0.4047937500000001 +0.04300000000000001 -0.025360107421875 0.4047937500000001 +0.043125 -0.044158935546875 0.4047937500000001 +0.04325 -0.0645751953125 0.4047937500000001 +0.043375 -0.08233642578125 0.4047937500000001 +0.04350000000000001 -0.1011962890625 0.4047937500000001 +0.04362500000000001 -0.11895751953125 0.4047937500000001 +0.04375000000000001 -0.13385009765625 0.4047937500000001 +0.043875 -0.14898681640625 0.4047937500000001 +0.04399999999999999 -0.16119384765625 0.4047937500000001 +0.044125 -0.173126220703125 0.4047937500000001 +0.04425 -0.183135986328125 0.4047937500000001 +0.044375 -0.1904296875 0.4047937500000001 +0.04449999999999999 -0.196533203125 0.4047937500000001 +0.04462499999999999 -0.200225830078125 0.4047937500000001 +0.04475 -0.20220947265625 0.4047937500000001 +0.044875 -0.201995849609375 0.4047937500000001 +0.045 -0.19989013671875 0.4047937500000001 +0.045125 -0.19549560546875 0.4047937500000001 +0.04525 -0.189697265625 0.4047937500000001 +0.045375 -0.1812744140625 0.4047937500000001 +0.0455 -0.170867919921875 0.4047937500000001 +0.045625 -0.159912109375 0.4047937500000001 +0.04575 -0.146087646484375 0.4047937500000001 +0.045875 -0.132232666015625 0.4047937500000001 +0.046 -0.115509033203125 0.4047937500000001 +0.046125 -0.097503662109375 0.4047937500000001 +0.04625 -0.08038330078125 0.4047937500000001 +0.046375 -0.060516357421875 0.4047937500000001 +0.04649999999999999 -0.042083740234375 0.4047937500000001 +0.046625 -0.02117919921875 0.4047937500000001 0.04675000000000001 0.0 0.4047937500000001 0.046875 0.019012451171875 0.4047937500000001 0.04699999999999999 0.03997802734375 0.4047937500000001 @@ -404,37 +404,37 @@ 0.05037500000000001 0.04620361328125 0.4047937500000001 0.0505 0.02532958984375 0.4047937500000001 0.05062500000000001 0.00634765625 0.4047937500000001 -0.05075000000000001 -0.014801025390625 0.4047937500000001 -0.050875 -0.033721923828125 0.4047937500000001 -0.051 -0.054412841796875 0.4047937500000001 -0.051125 -0.074493408203125 0.4047937500000001 -0.05125000000000001 -0.09185791015625 0.4047937500000001 -0.051375 -0.110198974609375 0.4047937500000001 -0.0515 -0.12567138671875 0.4047937500000001 -0.05162500000000001 -0.141571044921875 0.4047937500000001 -0.05175000000000001 -0.155914306640625 0.4047937500000001 -0.051875 -0.1673583984375 0.4047937500000001 -0.052 -0.1783447265625 0.4047937500000001 -0.052125 -0.186553955078125 0.4047937500000001 -0.05225 -0.1937255859375 0.4047937500000001 -0.05237499999999999 -0.198760986328125 0.4047937500000001 -0.0525 -0.201446533203125 0.4047937500000001 -0.052625 -0.20233154296875 0.4047937500000001 -0.05274999999999999 -0.20123291015625 0.4047937500000001 -0.052875 -0.19793701171875 0.4047937500000001 -0.05300000000000001 -0.19244384765625 0.4047937500000001 -0.053125 -0.185699462890625 0.4047937500000001 -0.05324999999999999 -0.176300048828125 0.4047937500000001 -0.05337499999999999 -0.166168212890625 0.4047937500000001 -0.05350000000000001 -0.153167724609375 0.4047937500000001 -0.053625 -0.138519287109375 0.4047937500000001 -0.05375 -0.1240234375 0.4047937500000001 -0.05387499999999999 -0.10662841796875 0.4047937500000001 -0.054 -0.0899658203125 0.4047937500000001 -0.054125 -0.070526123046875 0.4047937500000001 -0.05425 -0.05029296875 0.4047937500000001 -0.054375 -0.031646728515625 0.4047937500000001 -0.0545 -0.01055908203125 0.4047937500000001 +0.05075000000000001 -0.01483154296875 0.4047937500000001 +0.050875 -0.03375244140625 0.4047937500000001 +0.051 -0.054443359375 0.4047937500000001 +0.051125 -0.07452392578125 0.4047937500000001 +0.05125000000000001 -0.091888427734375 0.4047937500000001 +0.051375 -0.1102294921875 0.4047937500000001 +0.0515 -0.125701904296875 0.4047937500000001 +0.05162500000000001 -0.1416015625 0.4047937500000001 +0.05175000000000001 -0.15594482421875 0.4047937500000001 +0.051875 -0.167388916015625 0.4047937500000001 +0.052 -0.178375244140625 0.4047937500000001 +0.052125 -0.18658447265625 0.4047937500000001 +0.05225 -0.193756103515625 0.4047937500000001 +0.05237499999999999 -0.19879150390625 0.4047937500000001 +0.0525 -0.20147705078125 0.4047937500000001 +0.052625 -0.202362060546875 0.4047937500000001 +0.05274999999999999 -0.201263427734375 0.4047937500000001 +0.052875 -0.197967529296875 0.4047937500000001 +0.05300000000000001 -0.192474365234375 0.4047937500000001 +0.053125 -0.18572998046875 0.4047937500000001 +0.05324999999999999 -0.17633056640625 0.4047937500000001 +0.05337499999999999 -0.16619873046875 0.4047937500000001 +0.05350000000000001 -0.1531982421875 0.4047937500000001 +0.053625 -0.1385498046875 0.4047937500000001 +0.05375 -0.124053955078125 0.4047937500000001 +0.05387499999999999 -0.106658935546875 0.4047937500000001 +0.054 -0.089996337890625 0.4047937500000001 +0.054125 -0.070556640625 0.4047937500000001 +0.05425 -0.050323486328125 0.4047937500000001 +0.054375 -0.03167724609375 0.4047937500000001 +0.0545 -0.010589599609375 0.4047937500000001 0.054625 0.008453369140625 0.4047937500000001 0.05475 0.029541015625 0.4047937500000001 0.054875 0.05029296875 0.4047937500000001 @@ -466,37 +466,37 @@ 0.058125 0.056427001953125 0.4047937500000001 0.05825 0.03582763671875 0.4047937500000001 0.058375 0.01690673828125 0.4047937500000001 -0.05850000000000001 -0.00421142578125 0.4047937500000001 -0.05862500000000001 -0.02532958984375 0.4047937500000001 -0.05875 -0.04412841796875 0.4047937500000001 -0.058875 -0.064544677734375 0.4047937500000001 -0.059 -0.082305908203125 0.4047937500000001 -0.05912500000000001 -0.101165771484375 0.4047937500000001 -0.05925000000000001 -0.118927001953125 0.4047937500000001 -0.059375 -0.133819580078125 0.4047937500000001 -0.05950000000000001 -0.148956298828125 0.4047937500000001 -0.059625 -0.161163330078125 0.4047937500000001 -0.05975000000000001 -0.173095703125 0.4047937500000001 -0.059875 -0.18310546875 0.4047937500000001 -0.06 -0.190399169921875 0.4047937500000001 -0.06012499999999999 -0.196502685546875 0.4047937500000001 -0.06025 -0.2001953125 0.4047937500000001 -0.060375 -0.202178955078125 0.4047937500000001 -0.0605 -0.20196533203125 0.4047937500000001 -0.060625 -0.199859619140625 0.4047937500000001 -0.06074999999999999 -0.195465087890625 0.4047937500000001 -0.060875 -0.189666748046875 0.4047937500000001 -0.061 -0.181243896484375 0.4047937500000001 -0.061125 -0.17083740234375 0.4047937500000001 -0.06125 -0.159881591796875 0.4047937500000001 -0.061375 -0.14605712890625 0.4047937500000001 -0.0615 -0.1322021484375 0.4047937500000001 -0.061625 -0.115478515625 0.4047937500000001 -0.06174999999999999 -0.09747314453125 0.4047937500000001 -0.061875 -0.080352783203125 0.4047937500000001 -0.062 -0.06048583984375 0.4047937500000001 -0.06212499999999999 -0.04205322265625 0.4047937500000001 -0.06225000000000001 -0.021148681640625 0.4047937500000001 +0.05850000000000001 -0.004241943359375 0.4047937500000001 +0.05862500000000001 -0.025360107421875 0.4047937500000001 +0.05875 -0.044158935546875 0.4047937500000001 +0.058875 -0.0645751953125 0.4047937500000001 +0.059 -0.08233642578125 0.4047937500000001 +0.05912500000000001 -0.1011962890625 0.4047937500000001 +0.05925000000000001 -0.11895751953125 0.4047937500000001 +0.059375 -0.13385009765625 0.4047937500000001 +0.05950000000000001 -0.14898681640625 0.4047937500000001 +0.059625 -0.16119384765625 0.4047937500000001 +0.05975000000000001 -0.173126220703125 0.4047937500000001 +0.059875 -0.183135986328125 0.4047937500000001 +0.06 -0.1904296875 0.4047937500000001 +0.06012499999999999 -0.196533203125 0.4047937500000001 +0.06025 -0.200225830078125 0.4047937500000001 +0.060375 -0.20220947265625 0.4047937500000001 +0.0605 -0.201995849609375 0.4047937500000001 +0.060625 -0.19989013671875 0.4047937500000001 +0.06074999999999999 -0.19549560546875 0.4047937500000001 +0.060875 -0.189697265625 0.4047937500000001 +0.061 -0.1812744140625 0.4047937500000001 +0.061125 -0.170867919921875 0.4047937500000001 +0.06125 -0.159912109375 0.4047937500000001 +0.061375 -0.146087646484375 0.4047937500000001 +0.0615 -0.132232666015625 0.4047937500000001 +0.061625 -0.115509033203125 0.4047937500000001 +0.06174999999999999 -0.097503662109375 0.4047937500000001 +0.061875 -0.08038330078125 0.4047937500000001 +0.062 -0.060516357421875 0.4047937500000001 +0.06212499999999999 -0.042083740234375 0.4047937500000001 +0.06225000000000001 -0.02117919921875 0.4047937500000001 0.06237500000000001 0.0 0.4047937500000001 0.0625 0.019012451171875 0.4047937500000001 0.06262499999999999 0.03997802734375 0.4047937500000001 @@ -529,37 +529,37 @@ 0.06600000000000001 0.057891845703125 0.507190625 0.066125 0.031768798828125 0.507190625 0.06625000000000001 0.0079345703125 0.507190625 -0.06637500000000001 -0.0185546875 0.507190625 -0.0665 -0.042266845703125 0.507190625 -0.066625 -0.06817626953125 0.507190625 -0.06675 -0.09332275390625 0.507190625 -0.06687500000000001 -0.1151123046875 0.507190625 -0.067 -0.138092041015625 0.507190625 -0.067125 -0.157501220703125 0.507190625 -0.06725000000000001 -0.177398681640625 0.507190625 -0.06737500000000001 -0.19537353515625 0.507190625 -0.0675 -0.209716796875 0.507190625 -0.067625 -0.22344970703125 0.507190625 -0.06775 -0.233734130859375 0.507190625 -0.06787500000000001 -0.24273681640625 0.507190625 -0.06800000000000001 -0.249053955078125 0.507190625 -0.068125 -0.25244140625 0.507190625 -0.06825000000000001 -0.2535400390625 0.507190625 -0.068375 -0.252166748046875 0.507190625 -0.06850000000000001 -0.248016357421875 0.507190625 -0.06862500000000001 -0.24114990234375 0.507190625 -0.06875 -0.232696533203125 0.507190625 -0.06887500000000001 -0.220916748046875 0.507190625 -0.069 -0.20819091796875 0.507190625 -0.06912500000000001 -0.191925048828125 0.507190625 -0.06925000000000001 -0.173553466796875 0.507190625 -0.06937500000000001 -0.1553955078125 0.507190625 -0.06950000000000001 -0.13360595703125 0.507190625 -0.069625 -0.11273193359375 0.507190625 -0.06975 -0.08837890625 0.507190625 -0.06987500000000001 -0.06304931640625 0.507190625 -0.07000000000000001 -0.039642333984375 0.507190625 -0.070125 -0.01324462890625 0.507190625 +0.06637500000000001 -0.018585205078125 0.507190625 +0.0665 -0.04229736328125 0.507190625 +0.066625 -0.068206787109375 0.507190625 +0.06675 -0.093353271484375 0.507190625 +0.06687500000000001 -0.115142822265625 0.507190625 +0.067 -0.13812255859375 0.507190625 +0.067125 -0.15753173828125 0.507190625 +0.06725000000000001 -0.17742919921875 0.507190625 +0.06737500000000001 -0.195404052734375 0.507190625 +0.0675 -0.209747314453125 0.507190625 +0.067625 -0.223480224609375 0.507190625 +0.06775 -0.2337646484375 0.507190625 +0.06787500000000001 -0.242767333984375 0.507190625 +0.06800000000000001 -0.24908447265625 0.507190625 +0.068125 -0.252471923828125 0.507190625 +0.06825000000000001 -0.253570556640625 0.507190625 +0.068375 -0.252197265625 0.507190625 +0.06850000000000001 -0.248046875 0.507190625 +0.06862500000000001 -0.241180419921875 0.507190625 +0.06875 -0.23272705078125 0.507190625 +0.06887500000000001 -0.220947265625 0.507190625 +0.069 -0.208221435546875 0.507190625 +0.06912500000000001 -0.19195556640625 0.507190625 +0.06925000000000001 -0.173583984375 0.507190625 +0.06937500000000001 -0.155426025390625 0.507190625 +0.06950000000000001 -0.133636474609375 0.507190625 +0.069625 -0.112762451171875 0.507190625 +0.06975 -0.088409423828125 0.507190625 +0.06987500000000001 -0.063079833984375 0.507190625 +0.07000000000000001 -0.0396728515625 0.507190625 +0.070125 -0.013275146484375 0.507190625 0.07025000000000001 0.010589599609375 0.507190625 0.07037500000000001 0.037017822265625 0.507190625 0.07050000000000001 0.06304931640625 0.507190625 @@ -591,37 +591,37 @@ 0.07374999999999999 0.07073974609375 0.507190625 0.073875 0.044891357421875 0.507190625 0.074 0.021209716796875 0.507190625 -0.074125 -0.005279541015625 0.507190625 -0.07424999999999999 -0.031768798828125 0.507190625 -0.07437499999999999 -0.0552978515625 0.507190625 -0.0745 -0.08087158203125 0.507190625 -0.07462499999999999 -0.103118896484375 0.507190625 -0.07475 -0.12677001953125 0.507190625 -0.07487500000000001 -0.149017333984375 0.507190625 -0.075 -0.16766357421875 0.507190625 -0.07512499999999999 -0.1866455078125 0.507190625 -0.07524999999999999 -0.20196533203125 0.507190625 -0.075375 -0.216888427734375 0.507190625 -0.0755 -0.22943115234375 0.507190625 -0.075625 -0.238555908203125 0.507190625 -0.07574999999999999 -0.246246337890625 0.507190625 -0.075875 -0.250823974609375 0.507190625 -0.076 -0.253326416015625 0.507190625 -0.076125 -0.2530517578125 0.507190625 -0.07625 -0.25042724609375 0.507190625 -0.07637499999999999 -0.244903564453125 0.507190625 -0.0765 -0.237640380859375 0.507190625 -0.076625 -0.22711181640625 0.507190625 -0.07675 -0.214080810546875 0.507190625 -0.076875 -0.200347900390625 0.507190625 -0.077 -0.183013916015625 0.507190625 -0.077125 -0.165679931640625 0.507190625 -0.07725 -0.14471435546875 0.507190625 -0.07737499999999999 -0.12213134765625 0.507190625 -0.0775 -0.100677490234375 0.507190625 -0.077625 -0.0758056640625 0.507190625 -0.07774999999999999 -0.052703857421875 0.507190625 -0.07787500000000001 -0.0264892578125 0.507190625 +0.074125 -0.00531005859375 0.507190625 +0.07424999999999999 -0.03179931640625 0.507190625 +0.07437499999999999 -0.055328369140625 0.507190625 +0.0745 -0.080902099609375 0.507190625 +0.07462499999999999 -0.1031494140625 0.507190625 +0.07475 -0.126800537109375 0.507190625 +0.07487500000000001 -0.1490478515625 0.507190625 +0.075 -0.167694091796875 0.507190625 +0.07512499999999999 -0.186676025390625 0.507190625 +0.07524999999999999 -0.201995849609375 0.507190625 +0.075375 -0.2169189453125 0.507190625 +0.0755 -0.229461669921875 0.507190625 +0.075625 -0.23858642578125 0.507190625 +0.07574999999999999 -0.24627685546875 0.507190625 +0.075875 -0.2508544921875 0.507190625 +0.076 -0.25335693359375 0.507190625 +0.076125 -0.253082275390625 0.507190625 +0.07625 -0.250457763671875 0.507190625 +0.07637499999999999 -0.24493408203125 0.507190625 +0.0765 -0.2376708984375 0.507190625 +0.076625 -0.227142333984375 0.507190625 +0.07675 -0.214111328125 0.507190625 +0.076875 -0.20037841796875 0.507190625 +0.077 -0.18304443359375 0.507190625 +0.077125 -0.16571044921875 0.507190625 +0.07725 -0.144744873046875 0.507190625 +0.07737499999999999 -0.122161865234375 0.507190625 +0.0775 -0.1007080078125 0.507190625 +0.077625 -0.075836181640625 0.507190625 +0.07774999999999999 -0.052734375 0.507190625 +0.07787500000000001 -0.026519775390625 0.507190625 0.07800000000000001 0.0 0.507190625 0.078125 0.023834228515625 0.507190625 0.07824999999999999 0.05010986328125 0.507190625 @@ -654,37 +654,37 @@ 0.081625 0.057891845703125 0.507190625 0.08175000000000001 0.031768798828125 0.507190625 0.081875 0.0079345703125 0.507190625 -0.08200000000000001 -0.0185546875 0.507190625 -0.082125 -0.042266845703125 0.507190625 -0.08225 -0.06817626953125 0.507190625 -0.08237500000000001 -0.09332275390625 0.507190625 -0.0825 -0.1151123046875 0.507190625 -0.08262500000000001 -0.138092041015625 0.507190625 -0.08275 -0.157501220703125 0.507190625 -0.08287500000000001 -0.177398681640625 0.507190625 -0.08300000000000001 -0.19537353515625 0.507190625 -0.083125 -0.209716796875 0.507190625 -0.08324999999999999 -0.22344970703125 0.507190625 -0.083375 -0.233734130859375 0.507190625 -0.08350000000000001 -0.24273681640625 0.507190625 -0.08362500000000001 -0.249053955078125 0.507190625 -0.08375 -0.25244140625 0.507190625 -0.08387500000000001 -0.2535400390625 0.507190625 -0.084 -0.252166748046875 0.507190625 -0.08412500000000001 -0.248016357421875 0.507190625 -0.08425000000000001 -0.24114990234375 0.507190625 -0.084375 -0.232696533203125 0.507190625 -0.08450000000000001 -0.220916748046875 0.507190625 -0.084625 -0.20819091796875 0.507190625 -0.08475 -0.191925048828125 0.507190625 -0.08487500000000001 -0.173553466796875 0.507190625 -0.085 -0.1553955078125 0.507190625 -0.08512500000000001 -0.13360595703125 0.507190625 -0.08525 -0.11273193359375 0.507190625 -0.085375 -0.08837890625 0.507190625 -0.08550000000000001 -0.06304931640625 0.507190625 -0.085625 -0.039642333984375 0.507190625 -0.08575000000000001 -0.01324462890625 0.507190625 +0.08200000000000001 -0.018585205078125 0.507190625 +0.082125 -0.04229736328125 0.507190625 +0.08225 -0.068206787109375 0.507190625 +0.08237500000000001 -0.093353271484375 0.507190625 +0.0825 -0.115142822265625 0.507190625 +0.08262500000000001 -0.13812255859375 0.507190625 +0.08275 -0.15753173828125 0.507190625 +0.08287500000000001 -0.17742919921875 0.507190625 +0.08300000000000001 -0.195404052734375 0.507190625 +0.083125 -0.209747314453125 0.507190625 +0.08324999999999999 -0.223480224609375 0.507190625 +0.083375 -0.2337646484375 0.507190625 +0.08350000000000001 -0.242767333984375 0.507190625 +0.08362500000000001 -0.24908447265625 0.507190625 +0.08375 -0.252471923828125 0.507190625 +0.08387500000000001 -0.253570556640625 0.507190625 +0.084 -0.252197265625 0.507190625 +0.08412500000000001 -0.248046875 0.507190625 +0.08425000000000001 -0.241180419921875 0.507190625 +0.084375 -0.23272705078125 0.507190625 +0.08450000000000001 -0.220947265625 0.507190625 +0.084625 -0.208221435546875 0.507190625 +0.08475 -0.19195556640625 0.507190625 +0.08487500000000001 -0.173583984375 0.507190625 +0.085 -0.155426025390625 0.507190625 +0.08512500000000001 -0.133636474609375 0.507190625 +0.08525 -0.112762451171875 0.507190625 +0.085375 -0.088409423828125 0.507190625 +0.08550000000000001 -0.063079833984375 0.507190625 +0.085625 -0.0396728515625 0.507190625 +0.08575000000000001 -0.013275146484375 0.507190625 0.08587500000000002 0.010589599609375 0.507190625 0.08600000000000001 0.037017822265625 0.507190625 0.08612500000000001 0.06304931640625 0.507190625 @@ -716,37 +716,37 @@ 0.089375 0.07073974609375 0.507190625 0.08949999999999999 0.044891357421875 0.507190625 0.089625 0.021209716796875 0.507190625 -0.08975 -0.005279541015625 0.507190625 -0.08987499999999999 -0.031768798828125 0.507190625 -0.09 -0.0552978515625 0.507190625 -0.09012499999999999 -0.08087158203125 0.507190625 -0.09025 -0.103118896484375 0.507190625 -0.090375 -0.12677001953125 0.507190625 -0.09050000000000001 -0.149017333984375 0.507190625 -0.090625 -0.16766357421875 0.507190625 -0.09074999999999999 -0.1866455078125 0.507190625 -0.09087499999999999 -0.20196533203125 0.507190625 -0.091 -0.216888427734375 0.507190625 -0.09112500000000001 -0.22943115234375 0.507190625 -0.09125 -0.238555908203125 0.507190625 -0.09137499999999999 -0.246246337890625 0.507190625 -0.0915 -0.250823974609375 0.507190625 -0.091625 -0.253326416015625 0.507190625 -0.09175000000000001 -0.2530517578125 0.507190625 -0.091875 -0.25042724609375 0.507190625 -0.09199999999999999 -0.244903564453125 0.507190625 -0.092125 -0.237640380859375 0.507190625 -0.09225 -0.22711181640625 0.507190625 -0.09237499999999999 -0.214080810546875 0.507190625 -0.0925 -0.200347900390625 0.507190625 -0.09262499999999999 -0.183013916015625 0.507190625 -0.09275 -0.165679931640625 0.507190625 -0.092875 -0.14471435546875 0.507190625 -0.09299999999999999 -0.12213134765625 0.507190625 -0.093125 -0.100677490234375 0.507190625 -0.09324999999999999 -0.0758056640625 0.507190625 -0.093375 -0.052703857421875 0.507190625 -0.09350000000000001 -0.0264892578125 0.507190625 +0.08975 -0.00531005859375 0.507190625 +0.08987499999999999 -0.03179931640625 0.507190625 +0.09 -0.055328369140625 0.507190625 +0.09012499999999999 -0.080902099609375 0.507190625 +0.09025 -0.1031494140625 0.507190625 +0.090375 -0.126800537109375 0.507190625 +0.09050000000000001 -0.1490478515625 0.507190625 +0.090625 -0.167694091796875 0.507190625 +0.09074999999999999 -0.186676025390625 0.507190625 +0.09087499999999999 -0.201995849609375 0.507190625 +0.091 -0.2169189453125 0.507190625 +0.09112500000000001 -0.229461669921875 0.507190625 +0.09125 -0.23858642578125 0.507190625 +0.09137499999999999 -0.24627685546875 0.507190625 +0.0915 -0.2508544921875 0.507190625 +0.091625 -0.25335693359375 0.507190625 +0.09175000000000001 -0.253082275390625 0.507190625 +0.091875 -0.250457763671875 0.507190625 +0.09199999999999999 -0.24493408203125 0.507190625 +0.092125 -0.2376708984375 0.507190625 +0.09225 -0.227142333984375 0.507190625 +0.09237499999999999 -0.214111328125 0.507190625 +0.0925 -0.20037841796875 0.507190625 +0.09262499999999999 -0.18304443359375 0.507190625 +0.09275 -0.16571044921875 0.507190625 +0.092875 -0.144744873046875 0.507190625 +0.09299999999999999 -0.122161865234375 0.507190625 +0.093125 -0.1007080078125 0.507190625 +0.09324999999999999 -0.075836181640625 0.507190625 +0.093375 -0.052734375 0.507190625 +0.09350000000000001 -0.026519775390625 0.507190625 0.09362500000000001 0.0 0.507190625 0.09375 0.023834228515625 0.507190625 0.09387499999999999 0.05010986328125 0.507190625 @@ -779,37 +779,37 @@ 0.09725 0.069580078125 0.6095875 0.09737500000000001 0.038177490234375 0.6095875 0.0975 0.009552001953125 0.6095875 -0.09762500000000001 -0.022308349609375 0.6095875 -0.09775 -0.050811767578125 0.6095875 -0.097875 -0.081939697265625 0.6095875 -0.09800000000000001 -0.1121826171875 0.6095875 -0.098125 -0.138336181640625 0.6095875 -0.09825000000000001 -0.165985107421875 0.6095875 -0.098375 -0.189300537109375 0.6095875 -0.09850000000000001 -0.213226318359375 0.6095875 -0.09862500000000001 -0.23480224609375 0.6095875 -0.09875 -0.252044677734375 0.6095875 -0.09887499999999999 -0.268585205078125 0.6095875 -0.099 -0.28094482421875 0.6095875 -0.09912500000000001 -0.291748046875 0.6095875 -0.09925000000000001 -0.299346923828125 0.6095875 -0.099375 -0.30340576171875 0.6095875 -0.09950000000000001 -0.30474853515625 0.6095875 -0.099625 -0.303070068359375 0.6095875 -0.09975000000000001 -0.298095703125 0.6095875 -0.09987500000000001 -0.289825439453125 0.6095875 -0.1 -0.279693603515625 0.6095875 -0.100125 -0.2655029296875 0.6095875 -0.10025 -0.250244140625 0.6095875 -0.100375 -0.230682373046875 0.6095875 -0.1005 -0.2086181640625 0.6095875 -0.100625 -0.186767578125 0.6095875 -0.10075 -0.16058349609375 0.6095875 -0.100875 -0.135498046875 0.6095875 -0.101 -0.106201171875 0.6095875 -0.101125 -0.075775146484375 0.6095875 -0.10125 -0.047637939453125 0.6095875 -0.101375 -0.01593017578125 0.6095875 +0.09762500000000001 -0.0223388671875 0.6095875 +0.09775 -0.05084228515625 0.6095875 +0.097875 -0.08197021484375 0.6095875 +0.09800000000000001 -0.112213134765625 0.6095875 +0.098125 -0.13836669921875 0.6095875 +0.09825000000000001 -0.166015625 0.6095875 +0.098375 -0.1893310546875 0.6095875 +0.09850000000000001 -0.2132568359375 0.6095875 +0.09862500000000001 -0.234832763671875 0.6095875 +0.09875 -0.2520751953125 0.6095875 +0.09887499999999999 -0.26861572265625 0.6095875 +0.099 -0.280975341796875 0.6095875 +0.09912500000000001 -0.291778564453125 0.6095875 +0.09925000000000001 -0.29937744140625 0.6095875 +0.099375 -0.303436279296875 0.6095875 +0.09950000000000001 -0.304779052734375 0.6095875 +0.099625 -0.3031005859375 0.6095875 +0.09975000000000001 -0.298126220703125 0.6095875 +0.09987500000000001 -0.28985595703125 0.6095875 +0.1 -0.27972412109375 0.6095875 +0.100125 -0.265533447265625 0.6095875 +0.10025 -0.250274658203125 0.6095875 +0.100375 -0.230712890625 0.6095875 +0.1005 -0.208648681640625 0.6095875 +0.100625 -0.186798095703125 0.6095875 +0.10075 -0.160614013671875 0.6095875 +0.100875 -0.135528564453125 0.6095875 +0.101 -0.106231689453125 0.6095875 +0.101125 -0.0758056640625 0.6095875 +0.10125 -0.04766845703125 0.6095875 +0.101375 -0.015960693359375 0.6095875 0.1015 0.01275634765625 0.6095875 0.101625 0.04449462890625 0.6095875 0.10175 0.075775146484375 0.6095875 @@ -841,37 +841,37 @@ 0.105 0.084991455078125 0.6095875 0.105125 0.053955078125 0.6095875 0.10525 0.025482177734375 0.6095875 -0.105375 -0.006378173828125 0.6095875 -0.1055 -0.038177490234375 0.6095875 -0.105625 -0.06646728515625 0.6095875 -0.10575 -0.097198486328125 0.6095875 -0.105875 -0.123931884765625 0.6095875 -0.106 -0.152374267578125 0.6095875 -0.106125 -0.179107666015625 0.6095875 -0.10625 -0.2015380859375 0.6095875 -0.106375 -0.22430419921875 0.6095875 -0.1065 -0.24273681640625 0.6095875 -0.106625 -0.26068115234375 0.6095875 -0.10675 -0.2757568359375 0.6095875 -0.106875 -0.2867431640625 0.6095875 -0.107 -0.29595947265625 0.6095875 -0.107125 -0.301483154296875 0.6095875 -0.10725 -0.304473876953125 0.6095875 -0.107375 -0.30413818359375 0.6095875 -0.1075 -0.300994873046875 0.6095875 -0.107625 -0.29437255859375 0.6095875 -0.10775 -0.28564453125 0.6095875 -0.107875 -0.27294921875 0.6095875 -0.108 -0.25732421875 0.6095875 -0.108125 -0.240814208984375 0.6095875 -0.10825 -0.219940185546875 0.6095875 -0.108375 -0.199127197265625 0.6095875 -0.1085 -0.173919677734375 0.6095875 -0.108625 -0.14678955078125 0.6095875 -0.10875 -0.12103271484375 0.6095875 -0.108875 -0.09112548828125 0.6095875 -0.109 -0.0633544921875 0.6095875 -0.109125 -0.031829833984375 0.6095875 +0.105375 -0.00640869140625 0.6095875 +0.1055 -0.0382080078125 0.6095875 +0.105625 -0.066497802734375 0.6095875 +0.10575 -0.09722900390625 0.6095875 +0.105875 -0.12396240234375 0.6095875 +0.106 -0.15240478515625 0.6095875 +0.106125 -0.17913818359375 0.6095875 +0.10625 -0.201568603515625 0.6095875 +0.106375 -0.224334716796875 0.6095875 +0.1065 -0.242767333984375 0.6095875 +0.106625 -0.260711669921875 0.6095875 +0.10675 -0.275787353515625 0.6095875 +0.106875 -0.286773681640625 0.6095875 +0.107 -0.295989990234375 0.6095875 +0.107125 -0.301513671875 0.6095875 +0.10725 -0.30450439453125 0.6095875 +0.107375 -0.304168701171875 0.6095875 +0.1075 -0.301025390625 0.6095875 +0.107625 -0.294403076171875 0.6095875 +0.10775 -0.285675048828125 0.6095875 +0.107875 -0.272979736328125 0.6095875 +0.108 -0.257354736328125 0.6095875 +0.108125 -0.2408447265625 0.6095875 +0.10825 -0.219970703125 0.6095875 +0.108375 -0.19915771484375 0.6095875 +0.1085 -0.1739501953125 0.6095875 +0.108625 -0.146820068359375 0.6095875 +0.10875 -0.121063232421875 0.6095875 +0.108875 -0.091156005859375 0.6095875 +0.109 -0.063385009765625 0.6095875 +0.109125 -0.0318603515625 0.6095875 0.10925 0.0 0.6095875 0.109375 0.028656005859375 0.6095875 0.1095 0.060211181640625 0.6095875 @@ -904,37 +904,37 @@ 0.112875 0.069580078125 0.6095875 0.113 0.038177490234375 0.6095875 0.113125 0.009552001953125 0.6095875 -0.11325 -0.022308349609375 0.6095875 -0.113375 -0.050811767578125 0.6095875 -0.1135 -0.081939697265625 0.6095875 -0.113625 -0.1121826171875 0.6095875 -0.11375 -0.138336181640625 0.6095875 -0.113875 -0.165985107421875 0.6095875 -0.114 -0.189300537109375 0.6095875 -0.114125 -0.213226318359375 0.6095875 -0.11425 -0.23480224609375 0.6095875 -0.114375 -0.252044677734375 0.6095875 -0.1145 -0.268585205078125 0.6095875 -0.114625 -0.28094482421875 0.6095875 -0.11475 -0.291748046875 0.6095875 -0.114875 -0.299346923828125 0.6095875 -0.115 -0.30340576171875 0.6095875 -0.115125 -0.30474853515625 0.6095875 -0.11525 -0.303070068359375 0.6095875 -0.115375 -0.298095703125 0.6095875 -0.1155 -0.289825439453125 0.6095875 -0.115625 -0.279693603515625 0.6095875 -0.11575 -0.2655029296875 0.6095875 -0.115875 -0.250244140625 0.6095875 -0.116 -0.230682373046875 0.6095875 -0.116125 -0.2086181640625 0.6095875 -0.11625 -0.186767578125 0.6095875 -0.116375 -0.16058349609375 0.6095875 -0.1165 -0.135498046875 0.6095875 -0.116625 -0.106201171875 0.6095875 -0.11675 -0.075775146484375 0.6095875 -0.116875 -0.047637939453125 0.6095875 -0.117 -0.01593017578125 0.6095875 +0.11325 -0.0223388671875 0.6095875 +0.113375 -0.05084228515625 0.6095875 +0.1135 -0.08197021484375 0.6095875 +0.113625 -0.112213134765625 0.6095875 +0.11375 -0.13836669921875 0.6095875 +0.113875 -0.166015625 0.6095875 +0.114 -0.1893310546875 0.6095875 +0.114125 -0.2132568359375 0.6095875 +0.11425 -0.234832763671875 0.6095875 +0.114375 -0.2520751953125 0.6095875 +0.1145 -0.26861572265625 0.6095875 +0.114625 -0.280975341796875 0.6095875 +0.11475 -0.291778564453125 0.6095875 +0.114875 -0.29937744140625 0.6095875 +0.115 -0.303436279296875 0.6095875 +0.115125 -0.304779052734375 0.6095875 +0.11525 -0.3031005859375 0.6095875 +0.115375 -0.298126220703125 0.6095875 +0.1155 -0.28985595703125 0.6095875 +0.115625 -0.27972412109375 0.6095875 +0.11575 -0.265533447265625 0.6095875 +0.115875 -0.250274658203125 0.6095875 +0.116 -0.230712890625 0.6095875 +0.116125 -0.208648681640625 0.6095875 +0.11625 -0.186798095703125 0.6095875 +0.116375 -0.160614013671875 0.6095875 +0.1165 -0.135528564453125 0.6095875 +0.116625 -0.106231689453125 0.6095875 +0.11675 -0.0758056640625 0.6095875 +0.116875 -0.04766845703125 0.6095875 +0.117 -0.015960693359375 0.6095875 0.117125 0.01275634765625 0.6095875 0.11725 0.04449462890625 0.6095875 0.117375 0.075775146484375 0.6095875 @@ -966,37 +966,37 @@ 0.120625 0.084991455078125 0.6095875 0.12075 0.053955078125 0.6095875 0.120875 0.025482177734375 0.6095875 -0.121 -0.006378173828125 0.6095875 -0.121125 -0.038177490234375 0.6095875 -0.12125 -0.06646728515625 0.6095875 -0.121375 -0.097198486328125 0.6095875 -0.1215 -0.123931884765625 0.6095875 -0.121625 -0.152374267578125 0.6095875 -0.12175 -0.179107666015625 0.6095875 -0.121875 -0.2015380859375 0.6095875 -0.122 -0.22430419921875 0.6095875 -0.122125 -0.24273681640625 0.6095875 -0.12225 -0.26068115234375 0.6095875 -0.122375 -0.2757568359375 0.6095875 -0.1225 -0.2867431640625 0.6095875 -0.122625 -0.29595947265625 0.6095875 -0.12275 -0.301483154296875 0.6095875 -0.122875 -0.304473876953125 0.6095875 -0.123 -0.30413818359375 0.6095875 -0.123125 -0.300994873046875 0.6095875 -0.12325 -0.29437255859375 0.6095875 -0.123375 -0.28564453125 0.6095875 -0.1235 -0.27294921875 0.6095875 -0.123625 -0.25732421875 0.6095875 -0.12375 -0.240814208984375 0.6095875 -0.123875 -0.219940185546875 0.6095875 -0.124 -0.199127197265625 0.6095875 -0.124125 -0.173919677734375 0.6095875 -0.12425 -0.14678955078125 0.6095875 -0.124375 -0.12103271484375 0.6095875 -0.1245 -0.09112548828125 0.6095875 -0.124625 -0.0633544921875 0.6095875 -0.12475 -0.031829833984375 0.6095875 +0.121 -0.00640869140625 0.6095875 +0.121125 -0.0382080078125 0.6095875 +0.12125 -0.066497802734375 0.6095875 +0.121375 -0.09722900390625 0.6095875 +0.1215 -0.12396240234375 0.6095875 +0.121625 -0.15240478515625 0.6095875 +0.12175 -0.17913818359375 0.6095875 +0.121875 -0.201568603515625 0.6095875 +0.122 -0.224334716796875 0.6095875 +0.122125 -0.242767333984375 0.6095875 +0.12225 -0.260711669921875 0.6095875 +0.122375 -0.275787353515625 0.6095875 +0.1225 -0.286773681640625 0.6095875 +0.122625 -0.295989990234375 0.6095875 +0.12275 -0.301513671875 0.6095875 +0.122875 -0.30450439453125 0.6095875 +0.123 -0.304168701171875 0.6095875 +0.123125 -0.301025390625 0.6095875 +0.12325 -0.294403076171875 0.6095875 +0.123375 -0.285675048828125 0.6095875 +0.1235 -0.272979736328125 0.6095875 +0.123625 -0.257354736328125 0.6095875 +0.12375 -0.2408447265625 0.6095875 +0.123875 -0.219970703125 0.6095875 +0.124 -0.19915771484375 0.6095875 +0.124125 -0.1739501953125 0.6095875 +0.12425 -0.146820068359375 0.6095875 +0.124375 -0.121063232421875 0.6095875 +0.1245 -0.091156005859375 0.6095875 +0.124625 -0.063385009765625 0.6095875 +0.12475 -0.0318603515625 0.6095875 0.124875 0.0 0.6095875 0.125 0.028656005859375 0.6095875 0.125125 0.060211181640625 0.6095875 @@ -1029,37 +1029,37 @@ 0.1285 0.081268310546875 0.7119843750000001 0.128625 0.044586181640625 0.7119843750000001 0.12875 0.01116943359375 0.7119843750000001 -0.128875 -0.026031494140625 0.7119843750000001 -0.129 -0.059356689453125 0.7119843750000001 -0.129125 -0.095703125 0.7119843750000001 -0.12925 -0.131011962890625 0.7119843750000001 -0.129375 -0.161590576171875 0.7119843750000001 -0.1295 -0.19384765625 0.7119843750000001 -0.129625 -0.221099853515625 0.7119843750000001 -0.12975 -0.2490234375 0.7119843750000001 -0.129875 -0.274261474609375 0.7119843750000001 -0.13 -0.29437255859375 0.7119843750000001 -0.130125 -0.313690185546875 0.7119843750000001 -0.13025 -0.328125 0.7119843750000001 -0.130375 -0.34075927734375 0.7119843750000001 -0.1305 -0.349639892578125 0.7119843750000001 -0.130625 -0.3543701171875 0.7119843750000001 -0.13075 -0.355926513671875 0.7119843750000001 -0.130875 -0.35400390625 0.7119843750000001 -0.131 -0.34814453125 0.7119843750000001 -0.131125 -0.338531494140625 0.7119843750000001 -0.13125 -0.32666015625 0.7119843750000001 -0.131375 -0.310089111328125 0.7119843750000001 -0.1315 -0.292266845703125 0.7119843750000001 -0.131625 -0.269439697265625 0.7119843750000001 -0.13175 -0.24365234375 0.7119843750000001 -0.131875 -0.2181396484375 0.7119843750000001 -0.132 -0.18756103515625 0.7119843750000001 -0.132125 -0.15826416015625 0.7119843750000001 -0.13225 -0.124053955078125 0.7119843750000001 -0.132375 -0.0885009765625 0.7119843750000001 -0.1325 -0.0556640625 0.7119843750000001 -0.132625 -0.01861572265625 0.7119843750000001 +0.128875 -0.02606201171875 0.7119843750000001 +0.129 -0.05938720703125 0.7119843750000001 +0.129125 -0.095733642578125 0.7119843750000001 +0.12925 -0.13104248046875 0.7119843750000001 +0.129375 -0.16162109375 0.7119843750000001 +0.1295 -0.193878173828125 0.7119843750000001 +0.129625 -0.22113037109375 0.7119843750000001 +0.12975 -0.249053955078125 0.7119843750000001 +0.129875 -0.2742919921875 0.7119843750000001 +0.13 -0.294403076171875 0.7119843750000001 +0.130125 -0.313720703125 0.7119843750000001 +0.13025 -0.328155517578125 0.7119843750000001 +0.130375 -0.340789794921875 0.7119843750000001 +0.1305 -0.34967041015625 0.7119843750000001 +0.130625 -0.354400634765625 0.7119843750000001 +0.13075 -0.35595703125 0.7119843750000001 +0.130875 -0.354034423828125 0.7119843750000001 +0.131 -0.348175048828125 0.7119843750000001 +0.131125 -0.33856201171875 0.7119843750000001 +0.13125 -0.326690673828125 0.7119843750000001 +0.131375 -0.31011962890625 0.7119843750000001 +0.1315 -0.29229736328125 0.7119843750000001 +0.131625 -0.26947021484375 0.7119843750000001 +0.13175 -0.243682861328125 0.7119843750000001 +0.131875 -0.218170166015625 0.7119843750000001 +0.132 -0.187591552734375 0.7119843750000001 +0.132125 -0.158294677734375 0.7119843750000001 +0.13225 -0.12408447265625 0.7119843750000001 +0.132375 -0.088531494140625 0.7119843750000001 +0.1325 -0.055694580078125 0.7119843750000001 +0.132625 -0.018646240234375 0.7119843750000001 0.13275 0.014892578125 0.7119843750000001 0.132875 0.051971435546875 0.7119843750000001 0.133 0.0885009765625 0.7119843750000001 @@ -1091,37 +1091,37 @@ 0.13625 0.099273681640625 0.7119843750000001 0.136375 0.063018798828125 0.7119843750000001 0.1365 0.029754638671875 0.7119843750000001 -0.136625 -0.0074462890625 0.7119843750000001 -0.13675 -0.044586181640625 0.7119843750000001 -0.136875 -0.07763671875 0.7119843750000001 -0.137 -0.113525390625 0.7119843750000001 -0.137125 -0.144775390625 0.7119843750000001 -0.13725 -0.177947998046875 0.7119843750000001 -0.137375 -0.209197998046875 0.7119843750000001 -0.1375 -0.235382080078125 0.7119843750000001 -0.137625 -0.261993408203125 0.7119843750000001 -0.13775 -0.28350830078125 0.7119843750000001 -0.137875 -0.304443359375 0.7119843750000001 -0.138 -0.322052001953125 0.7119843750000001 -0.138125 -0.33489990234375 0.7119843750000001 -0.13825 -0.345672607421875 0.7119843750000001 -0.138375 -0.35211181640625 0.7119843750000001 -0.1385 -0.355621337890625 0.7119843750000001 -0.138625 -0.355255126953125 0.7119843750000001 -0.13875 -0.3515625 0.7119843750000001 -0.138875 -0.34381103515625 0.7119843750000001 -0.139 -0.3336181640625 0.7119843750000001 -0.139125 -0.318817138671875 0.7119843750000001 -0.13925 -0.300537109375 0.7119843750000001 -0.139375 -0.28125 0.7119843750000001 -0.1395 -0.25689697265625 0.7119843750000001 -0.139625 -0.232574462890625 0.7119843750000001 -0.13975 -0.203125 0.7119843750000001 -0.139875 -0.171478271484375 0.7119843750000001 -0.14 -0.141357421875 0.7119843750000001 -0.140125 -0.106414794921875 0.7119843750000001 -0.14025 -0.073974609375 0.7119843750000001 -0.140375 -0.037200927734375 0.7119843750000001 +0.136625 -0.007476806640625 0.7119843750000001 +0.13675 -0.04461669921875 0.7119843750000001 +0.136875 -0.077667236328125 0.7119843750000001 +0.137 -0.113555908203125 0.7119843750000001 +0.137125 -0.144805908203125 0.7119843750000001 +0.13725 -0.177978515625 0.7119843750000001 +0.137375 -0.209228515625 0.7119843750000001 +0.1375 -0.23541259765625 0.7119843750000001 +0.137625 -0.26202392578125 0.7119843750000001 +0.13775 -0.283538818359375 0.7119843750000001 +0.137875 -0.304473876953125 0.7119843750000001 +0.138 -0.32208251953125 0.7119843750000001 +0.138125 -0.334930419921875 0.7119843750000001 +0.13825 -0.345703125 0.7119843750000001 +0.138375 -0.352142333984375 0.7119843750000001 +0.1385 -0.35565185546875 0.7119843750000001 +0.138625 -0.35528564453125 0.7119843750000001 +0.13875 -0.351593017578125 0.7119843750000001 +0.138875 -0.343841552734375 0.7119843750000001 +0.139 -0.333648681640625 0.7119843750000001 +0.139125 -0.31884765625 0.7119843750000001 +0.13925 -0.300567626953125 0.7119843750000001 +0.139375 -0.281280517578125 0.7119843750000001 +0.1395 -0.256927490234375 0.7119843750000001 +0.139625 -0.23260498046875 0.7119843750000001 +0.13975 -0.203155517578125 0.7119843750000001 +0.139875 -0.1715087890625 0.7119843750000001 +0.14 -0.141387939453125 0.7119843750000001 +0.140125 -0.1064453125 0.7119843750000001 +0.14025 -0.074005126953125 0.7119843750000001 +0.140375 -0.0372314453125 0.7119843750000001 0.1405 0.0 0.7119843750000001 0.140625 0.033477783203125 0.7119843750000001 0.14075 0.070343017578125 0.7119843750000001 @@ -1154,37 +1154,37 @@ 0.144125 0.081268310546875 0.7119843750000001 0.14425 0.044586181640625 0.7119843750000001 0.144375 0.01116943359375 0.7119843750000001 -0.1445 -0.026031494140625 0.7119843750000001 -0.144625 -0.059356689453125 0.7119843750000001 -0.14475 -0.095703125 0.7119843750000001 -0.144875 -0.131011962890625 0.7119843750000001 -0.145 -0.161590576171875 0.7119843750000001 -0.145125 -0.19384765625 0.7119843750000001 -0.14525 -0.221099853515625 0.7119843750000001 -0.145375 -0.2490234375 0.7119843750000001 -0.1455 -0.274261474609375 0.7119843750000001 -0.145625 -0.29437255859375 0.7119843750000001 -0.14575 -0.313690185546875 0.7119843750000001 -0.145875 -0.328125 0.7119843750000001 -0.146 -0.34075927734375 0.7119843750000001 -0.146125 -0.349639892578125 0.7119843750000001 -0.14625 -0.3543701171875 0.7119843750000001 -0.146375 -0.355926513671875 0.7119843750000001 -0.1465 -0.35400390625 0.7119843750000001 -0.146625 -0.34814453125 0.7119843750000001 -0.14675 -0.338531494140625 0.7119843750000001 -0.146875 -0.32666015625 0.7119843750000001 -0.147 -0.310089111328125 0.7119843750000001 -0.147125 -0.292266845703125 0.7119843750000001 -0.14725 -0.269439697265625 0.7119843750000001 -0.147375 -0.24365234375 0.7119843750000001 -0.1475 -0.2181396484375 0.7119843750000001 -0.147625 -0.18756103515625 0.7119843750000001 -0.14775 -0.15826416015625 0.7119843750000001 -0.147875 -0.124053955078125 0.7119843750000001 -0.148 -0.0885009765625 0.7119843750000001 -0.148125 -0.0556640625 0.7119843750000001 -0.14825 -0.01861572265625 0.7119843750000001 +0.1445 -0.02606201171875 0.7119843750000001 +0.144625 -0.05938720703125 0.7119843750000001 +0.14475 -0.095733642578125 0.7119843750000001 +0.144875 -0.13104248046875 0.7119843750000001 +0.145 -0.16162109375 0.7119843750000001 +0.145125 -0.193878173828125 0.7119843750000001 +0.14525 -0.22113037109375 0.7119843750000001 +0.145375 -0.249053955078125 0.7119843750000001 +0.1455 -0.2742919921875 0.7119843750000001 +0.145625 -0.294403076171875 0.7119843750000001 +0.14575 -0.313720703125 0.7119843750000001 +0.145875 -0.328155517578125 0.7119843750000001 +0.146 -0.340789794921875 0.7119843750000001 +0.146125 -0.34967041015625 0.7119843750000001 +0.14625 -0.354400634765625 0.7119843750000001 +0.146375 -0.35595703125 0.7119843750000001 +0.1465 -0.354034423828125 0.7119843750000001 +0.146625 -0.348175048828125 0.7119843750000001 +0.14675 -0.33856201171875 0.7119843750000001 +0.146875 -0.326690673828125 0.7119843750000001 +0.147 -0.31011962890625 0.7119843750000001 +0.147125 -0.29229736328125 0.7119843750000001 +0.14725 -0.26947021484375 0.7119843750000001 +0.147375 -0.243682861328125 0.7119843750000001 +0.1475 -0.218170166015625 0.7119843750000001 +0.147625 -0.187591552734375 0.7119843750000001 +0.14775 -0.158294677734375 0.7119843750000001 +0.147875 -0.12408447265625 0.7119843750000001 +0.148 -0.088531494140625 0.7119843750000001 +0.148125 -0.055694580078125 0.7119843750000001 +0.14825 -0.018646240234375 0.7119843750000001 0.148375 0.014892578125 0.7119843750000001 0.1485 0.051971435546875 0.7119843750000001 0.148625 0.0885009765625 0.7119843750000001 @@ -1216,37 +1216,37 @@ 0.151875 0.099273681640625 0.7119843750000001 0.152 0.063018798828125 0.7119843750000001 0.152125 0.029754638671875 0.7119843750000001 -0.15225 -0.0074462890625 0.7119843750000001 -0.152375 -0.044586181640625 0.7119843750000001 -0.1525 -0.07763671875 0.7119843750000001 -0.152625 -0.113525390625 0.7119843750000001 -0.15275 -0.144775390625 0.7119843750000001 -0.152875 -0.177947998046875 0.7119843750000001 -0.153 -0.209197998046875 0.7119843750000001 -0.153125 -0.235382080078125 0.7119843750000001 -0.15325 -0.261993408203125 0.7119843750000001 -0.153375 -0.28350830078125 0.7119843750000001 -0.1535 -0.304443359375 0.7119843750000001 -0.153625 -0.322052001953125 0.7119843750000001 -0.15375 -0.33489990234375 0.7119843750000001 -0.153875 -0.345672607421875 0.7119843750000001 -0.154 -0.35211181640625 0.7119843750000001 -0.154125 -0.355621337890625 0.7119843750000001 -0.15425 -0.355255126953125 0.7119843750000001 -0.154375 -0.3515625 0.7119843750000001 -0.1545 -0.34381103515625 0.7119843750000001 -0.154625 -0.3336181640625 0.7119843750000001 -0.15475 -0.318817138671875 0.7119843750000001 -0.154875 -0.300537109375 0.7119843750000001 -0.155 -0.28125 0.7119843750000001 -0.155125 -0.25689697265625 0.7119843750000001 -0.15525 -0.232574462890625 0.7119843750000001 -0.155375 -0.203125 0.7119843750000001 -0.1555 -0.171478271484375 0.7119843750000001 -0.155625 -0.141357421875 0.7119843750000001 -0.15575 -0.106414794921875 0.7119843750000001 -0.155875 -0.073974609375 0.7119843750000001 -0.156 -0.037200927734375 0.7119843750000001 +0.15225 -0.007476806640625 0.7119843750000001 +0.152375 -0.04461669921875 0.7119843750000001 +0.1525 -0.077667236328125 0.7119843750000001 +0.152625 -0.113555908203125 0.7119843750000001 +0.15275 -0.144805908203125 0.7119843750000001 +0.152875 -0.177978515625 0.7119843750000001 +0.153 -0.209228515625 0.7119843750000001 +0.153125 -0.23541259765625 0.7119843750000001 +0.15325 -0.26202392578125 0.7119843750000001 +0.153375 -0.283538818359375 0.7119843750000001 +0.1535 -0.304473876953125 0.7119843750000001 +0.153625 -0.32208251953125 0.7119843750000001 +0.15375 -0.334930419921875 0.7119843750000001 +0.153875 -0.345703125 0.7119843750000001 +0.154 -0.352142333984375 0.7119843750000001 +0.154125 -0.35565185546875 0.7119843750000001 +0.15425 -0.35528564453125 0.7119843750000001 +0.154375 -0.351593017578125 0.7119843750000001 +0.1545 -0.343841552734375 0.7119843750000001 +0.154625 -0.333648681640625 0.7119843750000001 +0.15475 -0.31884765625 0.7119843750000001 +0.154875 -0.300567626953125 0.7119843750000001 +0.155 -0.281280517578125 0.7119843750000001 +0.155125 -0.256927490234375 0.7119843750000001 +0.15525 -0.23260498046875 0.7119843750000001 +0.155375 -0.203155517578125 0.7119843750000001 +0.1555 -0.1715087890625 0.7119843750000001 +0.155625 -0.141387939453125 0.7119843750000001 +0.15575 -0.1064453125 0.7119843750000001 +0.155875 -0.074005126953125 0.7119843750000001 +0.156 -0.0372314453125 0.7119843750000001 0.156125 0.0 0.7119843750000001 0.15625 0.033477783203125 0.7119843750000001 0.156375 0.070343017578125 0.7119843750000001 @@ -1279,37 +1279,37 @@ 0.15975 0.081268310546875 0.7119843750000001 0.159875 0.044586181640625 0.7119843750000001 0.16 0.01275634765625 0.8143812500000001 -0.160125 -0.02978515625 0.8143812500000001 -0.16025 -0.06787109375 0.8143812500000001 -0.160375 -0.109466552734375 0.8143812500000001 -0.1605 -0.149871826171875 0.8143812500000001 -0.160625 -0.184814453125 0.8143812500000001 -0.16075 -0.22174072265625 0.8143812500000001 -0.160875 -0.252899169921875 0.8143812500000001 -0.161 -0.28485107421875 0.8143812500000001 -0.161125 -0.313720703125 0.8143812500000001 -0.16125 -0.33673095703125 0.8143812500000001 -0.161375 -0.35882568359375 0.8143812500000001 -0.1615 -0.375335693359375 0.8143812500000001 -0.161625 -0.3897705078125 0.8143812500000001 -0.16175 -0.399932861328125 0.8143812500000001 -0.161875 -0.40533447265625 0.8143812500000001 -0.162 -0.407135009765625 0.8143812500000001 -0.162125 -0.4049072265625 0.8143812500000001 -0.16225 -0.39825439453125 0.8143812500000001 -0.162375 -0.38720703125 0.8143812500000001 -0.1625 -0.3736572265625 0.8143812500000001 -0.162625 -0.354705810546875 0.8143812500000001 -0.16275 -0.334320068359375 0.8143812500000001 -0.162875 -0.308197021484375 0.8143812500000001 -0.163 -0.278717041015625 0.8143812500000001 -0.163125 -0.249542236328125 0.8143812500000001 -0.16325 -0.21453857421875 0.8143812500000001 -0.163375 -0.1810302734375 0.8143812500000001 -0.1635 -0.14190673828125 0.8143812500000001 -0.163625 -0.101226806640625 0.8143812500000001 -0.16375 -0.06365966796875 0.8143812500000001 -0.163875 -0.021270751953125 0.8143812500000001 +0.160125 -0.029815673828125 0.8143812500000001 +0.16025 -0.067901611328125 0.8143812500000001 +0.160375 -0.1094970703125 0.8143812500000001 +0.1605 -0.14990234375 0.8143812500000001 +0.160625 -0.184844970703125 0.8143812500000001 +0.16075 -0.221771240234375 0.8143812500000001 +0.160875 -0.2529296875 0.8143812500000001 +0.161 -0.284881591796875 0.8143812500000001 +0.161125 -0.313751220703125 0.8143812500000001 +0.16125 -0.336761474609375 0.8143812500000001 +0.161375 -0.358856201171875 0.8143812500000001 +0.1615 -0.3753662109375 0.8143812500000001 +0.161625 -0.389801025390625 0.8143812500000001 +0.16175 -0.39996337890625 0.8143812500000001 +0.161875 -0.405364990234375 0.8143812500000001 +0.162 -0.40716552734375 0.8143812500000001 +0.162125 -0.404937744140625 0.8143812500000001 +0.16225 -0.398284912109375 0.8143812500000001 +0.162375 -0.387237548828125 0.8143812500000001 +0.1625 -0.373687744140625 0.8143812500000001 +0.162625 -0.354736328125 0.8143812500000001 +0.16275 -0.3343505859375 0.8143812500000001 +0.162875 -0.3082275390625 0.8143812500000001 +0.163 -0.27874755859375 0.8143812500000001 +0.163125 -0.24957275390625 0.8143812500000001 +0.16325 -0.214569091796875 0.8143812500000001 +0.163375 -0.181060791015625 0.8143812500000001 +0.1635 -0.141937255859375 0.8143812500000001 +0.163625 -0.10125732421875 0.8143812500000001 +0.16375 -0.063690185546875 0.8143812500000001 +0.163875 -0.02130126953125 0.8143812500000001 0.164 0.01702880859375 0.8143812500000001 0.164125 0.0594482421875 0.8143812500000001 0.16425 0.101226806640625 0.8143812500000001 @@ -1341,37 +1341,37 @@ 0.1675 0.11358642578125 0.8143812500000001 0.167625 0.07208251953125 0.8143812500000001 0.16775 0.0340576171875 0.8143812500000001 -0.167875 -0.008514404296875 0.8143812500000001 -0.168 -0.050994873046875 0.8143812500000001 -0.168125 -0.08880615234375 0.8143812500000001 -0.16825 -0.129852294921875 0.8143812500000001 -0.168375 -0.16558837890625 0.8143812500000001 -0.1685 -0.20355224609375 0.8143812500000001 -0.168625 -0.239288330078125 0.8143812500000001 -0.16875 -0.269256591796875 0.8143812500000001 -0.168875 -0.2996826171875 0.8143812500000001 -0.169 -0.324310302734375 0.8143812500000001 -0.169125 -0.3482666015625 0.8143812500000001 -0.16925 -0.368408203125 0.8143812500000001 -0.169375 -0.383056640625 0.8143812500000001 -0.1695 -0.3953857421875 0.8143812500000001 -0.169625 -0.40277099609375 0.8143812500000001 -0.16975 -0.40679931640625 0.8143812500000001 -0.169875 -0.406341552734375 0.8143812500000001 -0.17 -0.402130126953125 0.8143812500000001 -0.170125 -0.393280029296875 0.8143812500000001 -0.17025 -0.381591796875 0.8143812500000001 -0.170375 -0.36468505859375 0.8143812500000001 -0.1705 -0.343780517578125 0.8143812500000001 -0.170625 -0.32171630859375 0.8143812500000001 -0.17075 -0.293853759765625 0.8143812500000001 -0.170875 -0.266021728515625 0.8143812500000001 -0.171 -0.23236083984375 0.8143812500000001 -0.171125 -0.196136474609375 0.8143812500000001 -0.17125 -0.16168212890625 0.8143812500000001 -0.171375 -0.121734619140625 0.8143812500000001 -0.1715 -0.084625244140625 0.8143812500000001 -0.171625 -0.04254150390625 0.8143812500000001 +0.167875 -0.008544921875 0.8143812500000001 +0.168 -0.051025390625 0.8143812500000001 +0.168125 -0.088836669921875 0.8143812500000001 +0.16825 -0.1298828125 0.8143812500000001 +0.168375 -0.165618896484375 0.8143812500000001 +0.1685 -0.203582763671875 0.8143812500000001 +0.168625 -0.23931884765625 0.8143812500000001 +0.16875 -0.269287109375 0.8143812500000001 +0.168875 -0.299713134765625 0.8143812500000001 +0.169 -0.3243408203125 0.8143812500000001 +0.169125 -0.348297119140625 0.8143812500000001 +0.16925 -0.368438720703125 0.8143812500000001 +0.169375 -0.383087158203125 0.8143812500000001 +0.1695 -0.395416259765625 0.8143812500000001 +0.169625 -0.402801513671875 0.8143812500000001 +0.16975 -0.406829833984375 0.8143812500000001 +0.169875 -0.4063720703125 0.8143812500000001 +0.17 -0.40216064453125 0.8143812500000001 +0.170125 -0.393310546875 0.8143812500000001 +0.17025 -0.381622314453125 0.8143812500000001 +0.170375 -0.364715576171875 0.8143812500000001 +0.1705 -0.34381103515625 0.8143812500000001 +0.170625 -0.321746826171875 0.8143812500000001 +0.17075 -0.29388427734375 0.8143812500000001 +0.170875 -0.26605224609375 0.8143812500000001 +0.171 -0.232391357421875 0.8143812500000001 +0.171125 -0.1961669921875 0.8143812500000001 +0.17125 -0.161712646484375 0.8143812500000001 +0.171375 -0.12176513671875 0.8143812500000001 +0.1715 -0.08465576171875 0.8143812500000001 +0.171625 -0.042572021484375 0.8143812500000001 0.17175 0.0 0.8143812500000001 0.171875 0.038299560546875 0.8143812500000001 0.172 0.0804443359375 0.8143812500000001 @@ -1404,37 +1404,37 @@ 0.175375 0.09295654296875 0.8143812500000001 0.1755 0.050994873046875 0.8143812500000001 0.175625 0.01275634765625 0.8143812500000001 -0.17575 -0.02978515625 0.8143812500000001 -0.175875 -0.06787109375 0.8143812500000001 -0.176 -0.109466552734375 0.8143812500000001 -0.176125 -0.149871826171875 0.8143812500000001 -0.17625 -0.184814453125 0.8143812500000001 -0.176375 -0.22174072265625 0.8143812500000001 -0.1765 -0.252899169921875 0.8143812500000001 -0.176625 -0.28485107421875 0.8143812500000001 -0.17675 -0.313720703125 0.8143812500000001 -0.176875 -0.33673095703125 0.8143812500000001 -0.177 -0.35882568359375 0.8143812500000001 -0.177125 -0.375335693359375 0.8143812500000001 -0.17725 -0.3897705078125 0.8143812500000001 -0.177375 -0.399932861328125 0.8143812500000001 -0.1775 -0.40533447265625 0.8143812500000001 -0.177625 -0.407135009765625 0.8143812500000001 -0.17775 -0.4049072265625 0.8143812500000001 -0.177875 -0.39825439453125 0.8143812500000001 -0.178 -0.38720703125 0.8143812500000001 -0.178125 -0.3736572265625 0.8143812500000001 -0.17825 -0.354705810546875 0.8143812500000001 -0.178375 -0.334320068359375 0.8143812500000001 -0.1785 -0.308197021484375 0.8143812500000001 -0.178625 -0.278717041015625 0.8143812500000001 -0.17875 -0.249542236328125 0.8143812500000001 -0.178875 -0.21453857421875 0.8143812500000001 -0.179 -0.1810302734375 0.8143812500000001 -0.179125 -0.14190673828125 0.8143812500000001 -0.17925 -0.101226806640625 0.8143812500000001 -0.179375 -0.06365966796875 0.8143812500000001 -0.1795 -0.021270751953125 0.8143812500000001 +0.17575 -0.029815673828125 0.8143812500000001 +0.175875 -0.067901611328125 0.8143812500000001 +0.176 -0.1094970703125 0.8143812500000001 +0.176125 -0.14990234375 0.8143812500000001 +0.17625 -0.184844970703125 0.8143812500000001 +0.176375 -0.221771240234375 0.8143812500000001 +0.1765 -0.2529296875 0.8143812500000001 +0.176625 -0.284881591796875 0.8143812500000001 +0.17675 -0.313751220703125 0.8143812500000001 +0.176875 -0.336761474609375 0.8143812500000001 +0.177 -0.358856201171875 0.8143812500000001 +0.177125 -0.3753662109375 0.8143812500000001 +0.17725 -0.389801025390625 0.8143812500000001 +0.177375 -0.39996337890625 0.8143812500000001 +0.1775 -0.405364990234375 0.8143812500000001 +0.177625 -0.40716552734375 0.8143812500000001 +0.17775 -0.404937744140625 0.8143812500000001 +0.177875 -0.398284912109375 0.8143812500000001 +0.178 -0.387237548828125 0.8143812500000001 +0.178125 -0.373687744140625 0.8143812500000001 +0.17825 -0.354736328125 0.8143812500000001 +0.178375 -0.3343505859375 0.8143812500000001 +0.1785 -0.3082275390625 0.8143812500000001 +0.178625 -0.27874755859375 0.8143812500000001 +0.17875 -0.24957275390625 0.8143812500000001 +0.178875 -0.214569091796875 0.8143812500000001 +0.179 -0.181060791015625 0.8143812500000001 +0.179125 -0.141937255859375 0.8143812500000001 +0.17925 -0.10125732421875 0.8143812500000001 +0.179375 -0.063690185546875 0.8143812500000001 +0.1795 -0.02130126953125 0.8143812500000001 0.179625 0.01702880859375 0.8143812500000001 0.17975 0.0594482421875 0.8143812500000001 0.179875 0.101226806640625 0.8143812500000001 @@ -1466,37 +1466,37 @@ 0.183125 0.11358642578125 0.8143812500000001 0.18325 0.07208251953125 0.8143812500000001 0.183375 0.0340576171875 0.8143812500000001 -0.1835 -0.008514404296875 0.8143812500000001 -0.183625 -0.050994873046875 0.8143812500000001 -0.18375 -0.08880615234375 0.8143812500000001 -0.183875 -0.129852294921875 0.8143812500000001 -0.184 -0.16558837890625 0.8143812500000001 -0.184125 -0.20355224609375 0.8143812500000001 -0.18425 -0.239288330078125 0.8143812500000001 -0.184375 -0.269256591796875 0.8143812500000001 -0.1845 -0.2996826171875 0.8143812500000001 -0.184625 -0.324310302734375 0.8143812500000001 -0.18475 -0.3482666015625 0.8143812500000001 -0.184875 -0.368408203125 0.8143812500000001 -0.185 -0.383056640625 0.8143812500000001 -0.185125 -0.3953857421875 0.8143812500000001 -0.18525 -0.40277099609375 0.8143812500000001 -0.185375 -0.40679931640625 0.8143812500000001 -0.1855 -0.406341552734375 0.8143812500000001 -0.185625 -0.402130126953125 0.8143812500000001 -0.18575 -0.393280029296875 0.8143812500000001 -0.185875 -0.381591796875 0.8143812500000001 -0.186 -0.36468505859375 0.8143812500000001 -0.186125 -0.343780517578125 0.8143812500000001 -0.18625 -0.32171630859375 0.8143812500000001 -0.186375 -0.293853759765625 0.8143812500000001 -0.1865 -0.266021728515625 0.8143812500000001 -0.186625 -0.23236083984375 0.8143812500000001 -0.18675 -0.196136474609375 0.8143812500000001 -0.186875 -0.16168212890625 0.8143812500000001 -0.187 -0.121734619140625 0.8143812500000001 -0.187125 -0.084625244140625 0.8143812500000001 -0.18725 -0.04254150390625 0.8143812500000001 +0.1835 -0.008544921875 0.8143812500000001 +0.183625 -0.051025390625 0.8143812500000001 +0.18375 -0.088836669921875 0.8143812500000001 +0.183875 -0.1298828125 0.8143812500000001 +0.184 -0.165618896484375 0.8143812500000001 +0.184125 -0.203582763671875 0.8143812500000001 +0.18425 -0.23931884765625 0.8143812500000001 +0.184375 -0.269287109375 0.8143812500000001 +0.1845 -0.299713134765625 0.8143812500000001 +0.184625 -0.3243408203125 0.8143812500000001 +0.18475 -0.348297119140625 0.8143812500000001 +0.184875 -0.368438720703125 0.8143812500000001 +0.185 -0.383087158203125 0.8143812500000001 +0.185125 -0.395416259765625 0.8143812500000001 +0.18525 -0.402801513671875 0.8143812500000001 +0.185375 -0.406829833984375 0.8143812500000001 +0.1855 -0.4063720703125 0.8143812500000001 +0.185625 -0.40216064453125 0.8143812500000001 +0.18575 -0.393310546875 0.8143812500000001 +0.185875 -0.381622314453125 0.8143812500000001 +0.186 -0.364715576171875 0.8143812500000001 +0.186125 -0.34381103515625 0.8143812500000001 +0.18625 -0.321746826171875 0.8143812500000001 +0.186375 -0.29388427734375 0.8143812500000001 +0.1865 -0.26605224609375 0.8143812500000001 +0.186625 -0.232391357421875 0.8143812500000001 +0.18675 -0.1961669921875 0.8143812500000001 +0.186875 -0.161712646484375 0.8143812500000001 +0.187 -0.12176513671875 0.8143812500000001 +0.187125 -0.08465576171875 0.8143812500000001 +0.18725 -0.042572021484375 0.8143812500000001 0.187375 0.0 0.8143812500000001 0.1875 0.038299560546875 0.8143812500000001 0.187625 0.0804443359375 0.8143812500000001 @@ -1529,37 +1529,37 @@ 0.191 0.09295654296875 0.8143812500000001 0.191125 0.050994873046875 0.8143812500000001 0.19125 0.01275634765625 0.8143812500000001 -0.191375 -0.02978515625 0.8143812500000001 -0.1915 -0.06787109375 0.8143812500000001 -0.191625 -0.109466552734375 0.8143812500000001 -0.19175 -0.149871826171875 0.8143812500000001 -0.191875 -0.184814453125 0.8143812500000001 -0.192 -0.2496337890625 0.9167781250000001 -0.192125 -0.284698486328125 0.9167781250000001 -0.19225 -0.3206787109375 0.9167781250000001 -0.192375 -0.3531494140625 0.9167781250000001 -0.1925 -0.379058837890625 0.9167781250000001 -0.192625 -0.4039306640625 0.9167781250000001 -0.19275 -0.422515869140625 0.9167781250000001 -0.192875 -0.43878173828125 0.9167781250000001 -0.193 -0.450225830078125 0.9167781250000001 -0.193125 -0.456298828125 0.9167781250000001 -0.19325 -0.45831298828125 0.9167781250000001 -0.193375 -0.455841064453125 0.9167781250000001 -0.1935 -0.44830322265625 0.9167781250000001 -0.193625 -0.4359130859375 0.9167781250000001 -0.19375 -0.420654296875 0.9167781250000001 -0.193875 -0.399322509765625 0.9167781250000001 -0.194 -0.376373291015625 0.9167781250000001 -0.194125 -0.346954345703125 0.9167781250000001 -0.19425 -0.313751220703125 0.9167781250000001 -0.194375 -0.280914306640625 0.9167781250000001 -0.1945 -0.24151611328125 0.9167781250000001 -0.194625 -0.20379638671875 0.9167781250000001 -0.19475 -0.159759521484375 0.9167781250000001 -0.194875 -0.11395263671875 0.9167781250000001 -0.195 -0.071685791015625 0.9167781250000001 -0.195125 -0.023956298828125 0.9167781250000001 +0.191375 -0.029815673828125 0.8143812500000001 +0.1915 -0.067901611328125 0.8143812500000001 +0.191625 -0.1094970703125 0.8143812500000001 +0.19175 -0.14990234375 0.8143812500000001 +0.191875 -0.184844970703125 0.8143812500000001 +0.192 -0.249664306640625 0.9167781250000001 +0.192125 -0.28472900390625 0.9167781250000001 +0.19225 -0.320709228515625 0.9167781250000001 +0.192375 -0.353179931640625 0.9167781250000001 +0.1925 -0.37908935546875 0.9167781250000001 +0.192625 -0.403961181640625 0.9167781250000001 +0.19275 -0.42254638671875 0.9167781250000001 +0.192875 -0.438812255859375 0.9167781250000001 +0.193 -0.45025634765625 0.9167781250000001 +0.193125 -0.456329345703125 0.9167781250000001 +0.19325 -0.458343505859375 0.9167781250000001 +0.193375 -0.45587158203125 0.9167781250000001 +0.1935 -0.448333740234375 0.9167781250000001 +0.193625 -0.435943603515625 0.9167781250000001 +0.19375 -0.420684814453125 0.9167781250000001 +0.193875 -0.39935302734375 0.9167781250000001 +0.194 -0.37640380859375 0.9167781250000001 +0.194125 -0.34698486328125 0.9167781250000001 +0.19425 -0.31378173828125 0.9167781250000001 +0.194375 -0.28094482421875 0.9167781250000001 +0.1945 -0.241546630859375 0.9167781250000001 +0.194625 -0.203826904296875 0.9167781250000001 +0.19475 -0.1597900390625 0.9167781250000001 +0.194875 -0.113983154296875 0.9167781250000001 +0.195 -0.07171630859375 0.9167781250000001 +0.195125 -0.02398681640625 0.9167781250000001 0.19525 0.0191650390625 0.9167781250000001 0.195375 0.066925048828125 0.9167781250000001 0.1955 0.11395263671875 0.9167781250000001 @@ -1591,37 +1591,37 @@ 0.19875 0.127838134765625 0.9167781250000001 0.198875 0.081146240234375 0.9167781250000001 0.199 0.038330078125 0.9167781250000001 -0.199125 -0.00958251953125 0.9167781250000001 -0.19925 -0.05743408203125 0.9167781250000001 -0.199375 -0.099945068359375 0.9167781250000001 -0.1995 -0.14617919921875 0.9167781250000001 -0.199625 -0.1864013671875 0.9167781250000001 -0.19975 -0.229156494140625 0.9167781250000001 -0.199875 -0.269378662109375 0.9167781250000001 -0.2 -0.3031005859375 0.9167781250000001 -0.200125 -0.337371826171875 0.9167781250000001 -0.20025 -0.365081787109375 0.9167781250000001 -0.200375 -0.39202880859375 0.9167781250000001 -0.2005 -0.414703369140625 0.9167781250000001 -0.200625 -0.431243896484375 0.9167781250000001 -0.20075 -0.445098876953125 0.9167781250000001 -0.200875 -0.45343017578125 0.9167781250000001 -0.201 -0.45794677734375 0.9167781250000001 -0.201125 -0.457427978515625 0.9167781250000001 -0.20125 -0.45269775390625 0.9167781250000001 -0.201375 -0.442718505859375 0.9167781250000001 -0.2015 -0.429595947265625 0.9167781250000001 -0.201625 -0.4105224609375 0.9167781250000001 -0.20175 -0.386993408203125 0.9167781250000001 -0.201875 -0.362152099609375 0.9167781250000001 -0.202 -0.330810546875 0.9167781250000001 -0.202125 -0.299468994140625 0.9167781250000001 -0.20225 -0.261566162109375 0.9167781250000001 -0.202375 -0.220794677734375 0.9167781250000001 -0.2025 -0.1820068359375 0.9167781250000001 -0.202625 -0.137054443359375 0.9167781250000001 -0.20275 -0.09527587890625 0.9167781250000001 -0.202875 -0.047882080078125 0.9167781250000001 +0.199125 -0.009613037109375 0.9167781250000001 +0.19925 -0.057464599609375 0.9167781250000001 +0.199375 -0.0999755859375 0.9167781250000001 +0.1995 -0.146209716796875 0.9167781250000001 +0.199625 -0.186431884765625 0.9167781250000001 +0.19975 -0.22918701171875 0.9167781250000001 +0.199875 -0.2694091796875 0.9167781250000001 +0.2 -0.303131103515625 0.9167781250000001 +0.200125 -0.33740234375 0.9167781250000001 +0.20025 -0.3651123046875 0.9167781250000001 +0.200375 -0.392059326171875 0.9167781250000001 +0.2005 -0.41473388671875 0.9167781250000001 +0.200625 -0.4312744140625 0.9167781250000001 +0.20075 -0.44512939453125 0.9167781250000001 +0.200875 -0.453460693359375 0.9167781250000001 +0.201 -0.457977294921875 0.9167781250000001 +0.201125 -0.45745849609375 0.9167781250000001 +0.20125 -0.452728271484375 0.9167781250000001 +0.201375 -0.4427490234375 0.9167781250000001 +0.2015 -0.42962646484375 0.9167781250000001 +0.201625 -0.410552978515625 0.9167781250000001 +0.20175 -0.38702392578125 0.9167781250000001 +0.201875 -0.3621826171875 0.9167781250000001 +0.202 -0.330841064453125 0.9167781250000001 +0.202125 -0.29949951171875 0.9167781250000001 +0.20225 -0.2615966796875 0.9167781250000001 +0.202375 -0.2208251953125 0.9167781250000001 +0.2025 -0.182037353515625 0.9167781250000001 +0.202625 -0.1370849609375 0.9167781250000001 +0.20275 -0.095306396484375 0.9167781250000001 +0.202875 -0.04791259765625 0.9167781250000001 0.203 0.0 0.9167781250000001 0.203125 0.043121337890625 0.9167781250000001 0.20325 0.090576171875 0.9167781250000001 @@ -1654,37 +1654,37 @@ 0.206625 0.104644775390625 0.9167781250000001 0.20675 0.05743408203125 0.9167781250000001 0.206875 0.014373779296875 0.9167781250000001 -0.207 -0.033538818359375 0.9167781250000001 -0.207125 -0.076416015625 0.9167781250000001 -0.20725 -0.12322998046875 0.9167781250000001 -0.207375 -0.168701171875 0.9167781250000001 -0.2075 -0.20806884765625 0.9167781250000001 -0.207625 -0.2496337890625 0.9167781250000001 -0.20775 -0.284698486328125 0.9167781250000001 -0.207875 -0.3206787109375 0.9167781250000001 -0.208 -0.3531494140625 0.9167781250000001 -0.208125 -0.379058837890625 0.9167781250000001 -0.20825 -0.4039306640625 0.9167781250000001 -0.208375 -0.422515869140625 0.9167781250000001 -0.2085 -0.43878173828125 0.9167781250000001 -0.208625 -0.450225830078125 0.9167781250000001 -0.20875 -0.456298828125 0.9167781250000001 -0.208875 -0.45831298828125 0.9167781250000001 -0.209 -0.455841064453125 0.9167781250000001 -0.209125 -0.44830322265625 0.9167781250000001 -0.20925 -0.4359130859375 0.9167781250000001 -0.209375 -0.420654296875 0.9167781250000001 -0.2095 -0.399322509765625 0.9167781250000001 -0.209625 -0.376373291015625 0.9167781250000001 -0.20975 -0.346954345703125 0.9167781250000001 -0.209875 -0.313751220703125 0.9167781250000001 -0.21 -0.280914306640625 0.9167781250000001 -0.210125 -0.24151611328125 0.9167781250000001 -0.21025 -0.20379638671875 0.9167781250000001 -0.210375 -0.159759521484375 0.9167781250000001 -0.2105 -0.11395263671875 0.9167781250000001 -0.210625 -0.071685791015625 0.9167781250000001 -0.21075 -0.023956298828125 0.9167781250000001 +0.207 -0.0335693359375 0.9167781250000001 +0.207125 -0.076446533203125 0.9167781250000001 +0.20725 -0.123260498046875 0.9167781250000001 +0.207375 -0.168731689453125 0.9167781250000001 +0.2075 -0.208099365234375 0.9167781250000001 +0.207625 -0.249664306640625 0.9167781250000001 +0.20775 -0.28472900390625 0.9167781250000001 +0.207875 -0.320709228515625 0.9167781250000001 +0.208 -0.353179931640625 0.9167781250000001 +0.208125 -0.37908935546875 0.9167781250000001 +0.20825 -0.403961181640625 0.9167781250000001 +0.208375 -0.42254638671875 0.9167781250000001 +0.2085 -0.438812255859375 0.9167781250000001 +0.208625 -0.45025634765625 0.9167781250000001 +0.20875 -0.456329345703125 0.9167781250000001 +0.208875 -0.458343505859375 0.9167781250000001 +0.209 -0.45587158203125 0.9167781250000001 +0.209125 -0.448333740234375 0.9167781250000001 +0.20925 -0.435943603515625 0.9167781250000001 +0.209375 -0.420684814453125 0.9167781250000001 +0.2095 -0.39935302734375 0.9167781250000001 +0.209625 -0.37640380859375 0.9167781250000001 +0.20975 -0.34698486328125 0.9167781250000001 +0.209875 -0.31378173828125 0.9167781250000001 +0.21 -0.28094482421875 0.9167781250000001 +0.210125 -0.241546630859375 0.9167781250000001 +0.21025 -0.203826904296875 0.9167781250000001 +0.210375 -0.1597900390625 0.9167781250000001 +0.2105 -0.113983154296875 0.9167781250000001 +0.210625 -0.07171630859375 0.9167781250000001 +0.21075 -0.02398681640625 0.9167781250000001 0.210875 0.0191650390625 0.9167781250000001 0.211 0.066925048828125 0.9167781250000001 0.211125 0.11395263671875 0.9167781250000001 @@ -1716,37 +1716,37 @@ 0.214375 0.127838134765625 0.9167781250000001 0.2145 0.081146240234375 0.9167781250000001 0.214625 0.038330078125 0.9167781250000001 -0.21475 -0.00958251953125 0.9167781250000001 -0.214875 -0.05743408203125 0.9167781250000001 -0.215 -0.099945068359375 0.9167781250000001 -0.215125 -0.14617919921875 0.9167781250000001 -0.21525 -0.1864013671875 0.9167781250000001 -0.215375 -0.229156494140625 0.9167781250000001 -0.2155 -0.269378662109375 0.9167781250000001 -0.215625 -0.3031005859375 0.9167781250000001 -0.21575 -0.337371826171875 0.9167781250000001 -0.215875 -0.365081787109375 0.9167781250000001 -0.216 -0.39202880859375 0.9167781250000001 -0.216125 -0.414703369140625 0.9167781250000001 -0.21625 -0.431243896484375 0.9167781250000001 -0.216375 -0.445098876953125 0.9167781250000001 -0.2165 -0.45343017578125 0.9167781250000001 -0.216625 -0.45794677734375 0.9167781250000001 -0.21675 -0.457427978515625 0.9167781250000001 -0.216875 -0.45269775390625 0.9167781250000001 -0.217 -0.442718505859375 0.9167781250000001 -0.217125 -0.429595947265625 0.9167781250000001 -0.21725 -0.4105224609375 0.9167781250000001 -0.217375 -0.386993408203125 0.9167781250000001 -0.2175 -0.362152099609375 0.9167781250000001 -0.217625 -0.330810546875 0.9167781250000001 -0.21775 -0.299468994140625 0.9167781250000001 -0.217875 -0.261566162109375 0.9167781250000001 -0.218 -0.220794677734375 0.9167781250000001 -0.218125 -0.1820068359375 0.9167781250000001 -0.21825 -0.137054443359375 0.9167781250000001 -0.218375 -0.09527587890625 0.9167781250000001 -0.2185 -0.047882080078125 0.9167781250000001 +0.21475 -0.009613037109375 0.9167781250000001 +0.214875 -0.057464599609375 0.9167781250000001 +0.215 -0.0999755859375 0.9167781250000001 +0.215125 -0.146209716796875 0.9167781250000001 +0.21525 -0.186431884765625 0.9167781250000001 +0.215375 -0.22918701171875 0.9167781250000001 +0.2155 -0.2694091796875 0.9167781250000001 +0.215625 -0.303131103515625 0.9167781250000001 +0.21575 -0.33740234375 0.9167781250000001 +0.215875 -0.3651123046875 0.9167781250000001 +0.216 -0.392059326171875 0.9167781250000001 +0.216125 -0.41473388671875 0.9167781250000001 +0.21625 -0.4312744140625 0.9167781250000001 +0.216375 -0.44512939453125 0.9167781250000001 +0.2165 -0.453460693359375 0.9167781250000001 +0.216625 -0.457977294921875 0.9167781250000001 +0.21675 -0.45745849609375 0.9167781250000001 +0.216875 -0.452728271484375 0.9167781250000001 +0.217 -0.4427490234375 0.9167781250000001 +0.217125 -0.42962646484375 0.9167781250000001 +0.21725 -0.410552978515625 0.9167781250000001 +0.217375 -0.38702392578125 0.9167781250000001 +0.2175 -0.3621826171875 0.9167781250000001 +0.217625 -0.330841064453125 0.9167781250000001 +0.21775 -0.29949951171875 0.9167781250000001 +0.217875 -0.2615966796875 0.9167781250000001 +0.218 -0.2208251953125 0.9167781250000001 +0.218125 -0.182037353515625 0.9167781250000001 +0.21825 -0.1370849609375 0.9167781250000001 +0.218375 -0.095306396484375 0.9167781250000001 +0.2185 -0.04791259765625 0.9167781250000001 0.218625 0.0 0.9167781250000001 0.21875 0.043121337890625 0.9167781250000001 0.218875 0.090576171875 0.9167781250000001 @@ -1779,37 +1779,37 @@ 0.22225 0.104644775390625 0.9167781250000001 0.222375 0.05743408203125 0.9167781250000001 0.2225 0.014373779296875 0.9167781250000001 -0.222625 -0.033538818359375 0.9167781250000001 -0.22275 -0.076416015625 0.9167781250000001 -0.222875 -0.12322998046875 0.9167781250000001 -0.223 -0.168701171875 0.9167781250000001 -0.223125 -0.20806884765625 0.9167781250000001 -0.22325 -0.2496337890625 0.9167781250000001 -0.223375 -0.284698486328125 0.9167781250000001 -0.2235 -0.3206787109375 0.9167781250000001 -0.223625 -0.3531494140625 0.9167781250000001 -0.22375 -0.379058837890625 0.9167781250000001 -0.223875 -0.4039306640625 0.9167781250000001 -0.224 -0.460845947265625 0.9999511726200581 -0.224125 -0.47857666015625 0.9999511726200581 -0.22425 -0.491058349609375 0.9999511726200581 -0.224375 -0.497711181640625 0.9999511726200581 -0.2245 -0.499908447265625 0.9999511726200581 -0.224625 -0.4971923828125 0.9999511726200581 -0.22475 -0.488983154296875 0.9999511726200581 -0.224875 -0.4754638671875 0.9999511726200581 -0.225 -0.45880126953125 0.9999511726200581 -0.225125 -0.435546875 0.9999511726200581 -0.22525 -0.410491943359375 0.9999511726200581 -0.225375 -0.37841796875 0.9999511726200581 -0.2255 -0.342193603515625 0.9999511726200581 -0.225625 -0.306396484375 0.9999511726200581 -0.22575 -0.263427734375 0.9999511726200581 -0.225875 -0.222259521484375 0.9999511726200581 -0.226 -0.174224853515625 0.9999511726200581 -0.226125 -0.124298095703125 0.9999511726200581 -0.22625 -0.07818603515625 0.9999511726200581 -0.226375 -0.026123046875 0.9999511726200581 +0.222625 -0.0335693359375 0.9167781250000001 +0.22275 -0.076446533203125 0.9167781250000001 +0.222875 -0.123260498046875 0.9167781250000001 +0.223 -0.168731689453125 0.9167781250000001 +0.223125 -0.208099365234375 0.9167781250000001 +0.22325 -0.249664306640625 0.9167781250000001 +0.223375 -0.28472900390625 0.9167781250000001 +0.2235 -0.320709228515625 0.9167781250000001 +0.223625 -0.353179931640625 0.9167781250000001 +0.22375 -0.37908935546875 0.9167781250000001 +0.223875 -0.403961181640625 0.9167781250000001 +0.224 -0.46087646484375 0.9999511726200581 +0.224125 -0.478607177734375 0.9999511726200581 +0.22425 -0.4910888671875 0.9999511726200581 +0.224375 -0.49774169921875 0.9999511726200581 +0.2245 -0.49993896484375 0.9999511726200581 +0.224625 -0.497222900390625 0.9999511726200581 +0.22475 -0.489013671875 0.9999511726200581 +0.224875 -0.475494384765625 0.9999511726200581 +0.225 -0.458831787109375 0.9999511726200581 +0.225125 -0.435577392578125 0.9999511726200581 +0.22525 -0.4105224609375 0.9999511726200581 +0.225375 -0.378448486328125 0.9999511726200581 +0.2255 -0.34222412109375 0.9999511726200581 +0.225625 -0.306427001953125 0.9999511726200581 +0.22575 -0.263458251953125 0.9999511726200581 +0.225875 -0.2222900390625 0.9999511726200581 +0.226 -0.17425537109375 0.9999511726200581 +0.226125 -0.12432861328125 0.9999511726200581 +0.22625 -0.078216552734375 0.9999511726200581 +0.226375 -0.026153564453125 0.9999511726200581 0.2265 0.020904541015625 0.9999511726200581 0.226625 0.072998046875 0.9999511726200581 0.22675 0.124298095703125 0.9999511726200581 @@ -1841,37 +1841,37 @@ 0.23 0.13946533203125 0.9999511726200581 0.230125 0.0885009765625 0.9999511726200581 0.23025 0.04180908203125 0.9999511726200581 -0.230375 -0.01043701171875 0.9999511726200581 -0.2305 -0.0626220703125 0.9999511726200581 -0.230625 -0.109039306640625 0.9999511726200581 -0.23075 -0.159454345703125 0.9999511726200581 -0.230875 -0.20330810546875 0.9999511726200581 -0.231 -0.24993896484375 0.9999511726200581 -0.231125 -0.2938232421875 0.9999511726200581 -0.23125 -0.330596923828125 0.9999511726200581 -0.231375 -0.36798095703125 0.9999511726200581 -0.2315 -0.398193359375 0.9999511726200581 -0.231625 -0.4276123046875 0.9999511726200581 -0.23175 -0.45233154296875 0.9999511726200581 -0.231875 -0.470367431640625 0.9999511726200581 -0.232 -0.485504150390625 0.9999511726200581 -0.232125 -0.49456787109375 0.9999511726200581 -0.23225 -0.499481201171875 0.9999511726200581 -0.232375 -0.498931884765625 0.9999511726200581 -0.2325 -0.4937744140625 0.9999511726200581 -0.232625 -0.482879638671875 0.9999511726200581 -0.23275 -0.46856689453125 0.9999511726200581 -0.232875 -0.447784423828125 0.9999511726200581 -0.233 -0.422088623046875 0.9999511726200581 -0.233125 -0.39501953125 0.9999511726200581 -0.23325 -0.360809326171875 0.9999511726200581 -0.233375 -0.32666015625 0.9999511726200581 -0.2335 -0.285308837890625 0.9999511726200581 -0.233625 -0.240814208984375 0.9999511726200581 -0.23375 -0.198516845703125 0.9999511726200581 -0.233875 -0.14947509765625 0.9999511726200581 -0.234 -0.103912353515625 0.9999511726200581 -0.234125 -0.05224609375 0.9999511726200581 +0.230375 -0.010467529296875 0.9999511726200581 +0.2305 -0.062652587890625 0.9999511726200581 +0.230625 -0.10906982421875 0.9999511726200581 +0.23075 -0.15948486328125 0.9999511726200581 +0.230875 -0.203338623046875 0.9999511726200581 +0.231 -0.249969482421875 0.9999511726200581 +0.231125 -0.293853759765625 0.9999511726200581 +0.23125 -0.33062744140625 0.9999511726200581 +0.231375 -0.368011474609375 0.9999511726200581 +0.2315 -0.398223876953125 0.9999511726200581 +0.231625 -0.427642822265625 0.9999511726200581 +0.23175 -0.452362060546875 0.9999511726200581 +0.231875 -0.47039794921875 0.9999511726200581 +0.232 -0.48553466796875 0.9999511726200581 +0.232125 -0.494598388671875 0.9999511726200581 +0.23225 -0.49951171875 0.9999511726200581 +0.232375 -0.49896240234375 0.9999511726200581 +0.2325 -0.493804931640625 0.9999511726200581 +0.232625 -0.48291015625 0.9999511726200581 +0.23275 -0.468597412109375 0.9999511726200581 +0.232875 -0.44781494140625 0.9999511726200581 +0.233 -0.422119140625 0.9999511726200581 +0.233125 -0.395050048828125 0.9999511726200581 +0.23325 -0.36083984375 0.9999511726200581 +0.233375 -0.326690673828125 0.9999511726200581 +0.2335 -0.28533935546875 0.9999511726200581 +0.233625 -0.2408447265625 0.9999511726200581 +0.23375 -0.19854736328125 0.9999511726200581 +0.233875 -0.149505615234375 0.9999511726200581 +0.234 -0.10394287109375 0.9999511726200581 +0.234125 -0.052276611328125 0.9999511726200581 0.23425 0.0 0.9999511726200581 0.234375 0.047027587890625 0.9999511726200581 0.2345 0.098785400390625 0.9999511726200581 @@ -1904,37 +1904,37 @@ 0.237875 0.1141357421875 0.9999511726200581 0.238 0.0626220703125 0.9999511726200581 0.238125 0.01568603515625 0.9999511726200581 -0.23825 -0.036590576171875 0.9999511726200581 -0.238375 -0.083343505859375 0.9999511726200581 -0.2385 -0.134429931640625 0.9999511726200581 -0.238625 -0.18402099609375 0.9999511726200581 -0.23875 -0.2269287109375 0.9999511726200581 -0.238875 -0.27227783203125 0.9999511726200581 -0.239 -0.310516357421875 0.9999511726200581 -0.239125 -0.349761962890625 0.9999511726200581 -0.23925 -0.38519287109375 0.9999511726200581 -0.239375 -0.4134521484375 0.9999511726200581 -0.2395 -0.440582275390625 0.9999511726200581 -0.239625 -0.460845947265625 0.9999511726200581 -0.23975 -0.47857666015625 0.9999511726200581 -0.239875 -0.491058349609375 0.9999511726200581 -0.24 -0.497711181640625 0.9999511726200581 -0.240125 -0.499908447265625 0.9999511726200581 -0.24025 -0.4971923828125 0.9999511726200581 -0.240375 -0.488983154296875 0.9999511726200581 -0.2405 -0.4754638671875 0.9999511726200581 -0.240625 -0.45880126953125 0.9999511726200581 -0.24075 -0.435546875 0.9999511726200581 -0.240875 -0.410491943359375 0.9999511726200581 -0.241 -0.37841796875 0.9999511726200581 -0.241125 -0.342193603515625 0.9999511726200581 -0.24125 -0.306396484375 0.9999511726200581 -0.241375 -0.263427734375 0.9999511726200581 -0.2415 -0.222259521484375 0.9999511726200581 -0.241625 -0.174224853515625 0.9999511726200581 -0.24175 -0.124298095703125 0.9999511726200581 -0.241875 -0.07818603515625 0.9999511726200581 -0.242 -0.026123046875 0.9999511726200581 +0.23825 -0.03662109375 0.9999511726200581 +0.238375 -0.0833740234375 0.9999511726200581 +0.2385 -0.13446044921875 0.9999511726200581 +0.238625 -0.184051513671875 0.9999511726200581 +0.23875 -0.226959228515625 0.9999511726200581 +0.238875 -0.272308349609375 0.9999511726200581 +0.239 -0.310546875 0.9999511726200581 +0.239125 -0.34979248046875 0.9999511726200581 +0.23925 -0.385223388671875 0.9999511726200581 +0.239375 -0.413482666015625 0.9999511726200581 +0.2395 -0.44061279296875 0.9999511726200581 +0.239625 -0.46087646484375 0.9999511726200581 +0.23975 -0.478607177734375 0.9999511726200581 +0.239875 -0.4910888671875 0.9999511726200581 +0.24 -0.49774169921875 0.9999511726200581 +0.240125 -0.49993896484375 0.9999511726200581 +0.24025 -0.497222900390625 0.9999511726200581 +0.240375 -0.489013671875 0.9999511726200581 +0.2405 -0.475494384765625 0.9999511726200581 +0.240625 -0.458831787109375 0.9999511726200581 +0.24075 -0.435577392578125 0.9999511726200581 +0.240875 -0.4105224609375 0.9999511726200581 +0.241 -0.378448486328125 0.9999511726200581 +0.241125 -0.34222412109375 0.9999511726200581 +0.24125 -0.306427001953125 0.9999511726200581 +0.241375 -0.263458251953125 0.9999511726200581 +0.2415 -0.2222900390625 0.9999511726200581 +0.241625 -0.17425537109375 0.9999511726200581 +0.24175 -0.12432861328125 0.9999511726200581 +0.241875 -0.078216552734375 0.9999511726200581 +0.242 -0.026153564453125 0.9999511726200581 0.242125 0.020904541015625 0.9999511726200581 0.24225 0.072998046875 0.9999511726200581 0.242375 0.124298095703125 0.9999511726200581 @@ -1966,37 +1966,37 @@ 0.245625 0.13946533203125 0.9999511726200581 0.24575 0.0885009765625 0.9999511726200581 0.245875 0.04180908203125 0.9999511726200581 -0.246 -0.01043701171875 0.9999511726200581 -0.246125 -0.0626220703125 0.9999511726200581 -0.24625 -0.109039306640625 0.9999511726200581 -0.246375 -0.159454345703125 0.9999511726200581 -0.2465 -0.20330810546875 0.9999511726200581 -0.246625 -0.24993896484375 0.9999511726200581 -0.24675 -0.2938232421875 0.9999511726200581 -0.246875 -0.330596923828125 0.9999511726200581 -0.247 -0.36798095703125 0.9999511726200581 -0.247125 -0.398193359375 0.9999511726200581 -0.24725 -0.4276123046875 0.9999511726200581 -0.247375 -0.45233154296875 0.9999511726200581 -0.2475 -0.470367431640625 0.9999511726200581 -0.247625 -0.485504150390625 0.9999511726200581 -0.24775 -0.49456787109375 0.9999511726200581 -0.247875 -0.499481201171875 0.9999511726200581 -0.248 -0.498931884765625 0.9999511726200581 -0.248125 -0.4937744140625 0.9999511726200581 -0.24825 -0.482879638671875 0.9999511726200581 -0.248375 -0.46856689453125 0.9999511726200581 -0.2485 -0.447784423828125 0.9999511726200581 -0.248625 -0.422088623046875 0.9999511726200581 -0.24875 -0.39501953125 0.9999511726200581 -0.248875 -0.360809326171875 0.9999511726200581 -0.249 -0.32666015625 0.9999511726200581 -0.249125 -0.285308837890625 0.9999511726200581 -0.24925 -0.240814208984375 0.9999511726200581 -0.249375 -0.198516845703125 0.9999511726200581 -0.2495 -0.14947509765625 0.9999511726200581 -0.249625 -0.103912353515625 0.9999511726200581 -0.24975 -0.05224609375 0.9999511726200581 +0.246 -0.010467529296875 0.9999511726200581 +0.246125 -0.062652587890625 0.9999511726200581 +0.24625 -0.10906982421875 0.9999511726200581 +0.246375 -0.15948486328125 0.9999511726200581 +0.2465 -0.203338623046875 0.9999511726200581 +0.246625 -0.249969482421875 0.9999511726200581 +0.24675 -0.293853759765625 0.9999511726200581 +0.246875 -0.33062744140625 0.9999511726200581 +0.247 -0.368011474609375 0.9999511726200581 +0.247125 -0.398223876953125 0.9999511726200581 +0.24725 -0.427642822265625 0.9999511726200581 +0.247375 -0.452362060546875 0.9999511726200581 +0.2475 -0.47039794921875 0.9999511726200581 +0.247625 -0.48553466796875 0.9999511726200581 +0.24775 -0.494598388671875 0.9999511726200581 +0.247875 -0.49951171875 0.9999511726200581 +0.248 -0.49896240234375 0.9999511726200581 +0.248125 -0.493804931640625 0.9999511726200581 +0.24825 -0.48291015625 0.9999511726200581 +0.248375 -0.468597412109375 0.9999511726200581 +0.2485 -0.44781494140625 0.9999511726200581 +0.248625 -0.422119140625 0.9999511726200581 +0.24875 -0.395050048828125 0.9999511726200581 +0.248875 -0.36083984375 0.9999511726200581 +0.249 -0.326690673828125 0.9999511726200581 +0.249125 -0.28533935546875 0.9999511726200581 +0.24925 -0.2408447265625 0.9999511726200581 +0.249375 -0.19854736328125 0.9999511726200581 +0.2495 -0.149505615234375 0.9999511726200581 +0.249625 -0.10394287109375 0.9999511726200581 +0.24975 -0.052276611328125 0.9999511726200581 0.249875 0.0 0.9999511726200581 0.25 0.047027587890625 0.9999511726200581 0.250125 0.098785400390625 0.9999511726200581 @@ -2029,20 +2029,20 @@ 0.2535 0.1141357421875 0.9999511726200581 0.253625 0.0626220703125 0.9999511726200581 0.2537500000000001 0.01568603515625 0.9999511726200581 -0.253875 -0.036590576171875 0.9999511726200581 -0.254 -0.083343505859375 0.9999511726200581 -0.254125 -0.134429931640625 0.9999511726200581 -0.25425 -0.18402099609375 0.9999511726200581 -0.254375 -0.2269287109375 0.9999511726200581 -0.2545 -0.27227783203125 0.9999511726200581 -0.254625 -0.310516357421875 0.9999511726200581 -0.25475 -0.349761962890625 0.9999511726200581 -0.254875 -0.38519287109375 0.9999511726200581 -0.255 -0.4134521484375 0.9999511726200581 -0.255125 -0.440582275390625 0.9999511726200581 -0.25525 -0.460845947265625 0.9999511726200581 -0.255375 -0.47857666015625 0.9999511726200581 -0.2555 -0.491058349609375 0.9999511726200581 -0.255625 -0.497711181640625 0.9999511726200581 -0.25575 -0.499908447265625 0.9999511726200581 -0.255875 -0.4971923828125 0.9999511726200581 +0.253875 -0.03662109375 0.9999511726200581 +0.254 -0.0833740234375 0.9999511726200581 +0.254125 -0.13446044921875 0.9999511726200581 +0.25425 -0.184051513671875 0.9999511726200581 +0.254375 -0.226959228515625 0.9999511726200581 +0.2545 -0.272308349609375 0.9999511726200581 +0.254625 -0.310546875 0.9999511726200581 +0.25475 -0.34979248046875 0.9999511726200581 +0.254875 -0.385223388671875 0.9999511726200581 +0.255 -0.413482666015625 0.9999511726200581 +0.255125 -0.44061279296875 0.9999511726200581 +0.25525 -0.46087646484375 0.9999511726200581 +0.255375 -0.478607177734375 0.9999511726200581 +0.2555 -0.4910888671875 0.9999511726200581 +0.255625 -0.49774169921875 0.9999511726200581 +0.25575 -0.49993896484375 0.9999511726200581 +0.255875 -0.497222900390625 0.9999511726200581 diff --git a/tests/circuitpython/synth_note_ring.py.exp b/tests/circuitpython/synth_note_ring.py.exp index 406c08da03..b45858d5aa 100644 --- a/tests/circuitpython/synth_note_ring.py.exp +++ b/tests/circuitpython/synth_note_ring.py.exp @@ -1,2048 +1,2048 @@ 0.0 0.0 -0.743977294921875 0.000125 0.0 -0.743977294921875 0.00025 0.0 -0.743977294921875 -0.000375 0.003997802734375 -0.743977294921875 -0.0005 0.0050048828125 -0.743977294921875 -0.000625 0.005828857421875 -0.743977294921875 -0.00075 0.0067138671875 -0.743977294921875 -0.0008750000000000002 0.014923095703125 -0.743977294921875 -0.001 0.016357421875 -0.743977294921875 -0.001125 0.01763916015625 -0.743977294921875 -0.00125 0.01861572265625 -0.743977294921875 -0.001375 0.029266357421875 -0.743977294921875 -0.0015 0.03021240234375 -0.743977294921875 -0.001625 0.030914306640625 -0.743977294921875 -0.00175 0.041748046875 -0.743977294921875 -0.001875 0.04180908203125 -0.743977294921875 -0.002 0.04144287109375 -0.743977294921875 -0.002125 0.04071044921875 -0.743977294921875 -0.00225 0.049346923828125 -0.743977294921875 -0.002375 0.047271728515625 -0.743977294921875 -0.0025 0.04498291015625 -0.743977294921875 -0.002625 0.04193115234375 -0.743977294921875 -0.00275 0.046600341796875 -0.743977294921875 -0.002875 0.041961669921875 -0.743977294921875 -0.003 0.036834716796875 -0.743977294921875 -0.003125 0.03192138671875 -0.743977294921875 -0.00325 0.030426025390625 -0.743977294921875 -0.003375 0.024017333984375 -0.743977294921875 -0.0035 0.01666259765625 -0.743977294921875 -0.003625 0.01043701171875 -0.743977294921875 -0.00375 0.002593994140625 -0.743977294921875 -0.003875 -0.006072998046875 -0.743977294921875 -0.004 -0.013916015625 -0.743977294921875 -0.004125 -0.025238037109375 -0.743977294921875 -0.00425 -0.034576416015625 -0.743977294921875 -0.004375000000000001 -0.04266357421875 -0.743977294921875 -0.004500000000000001 -0.05120849609375 -0.743977294921875 -0.004625 -0.06488037109375 -0.743977294921875 -0.00475 -0.073089599609375 -0.743977294921875 -0.004875 -0.080474853515625 -0.743977294921875 -0.005 -0.095001220703125 -0.743977294921875 -0.005125000000000001 -0.101226806640625 -0.743977294921875 -0.00525 -0.10589599609375 -0.743977294921875 -0.005375000000000001 -0.1099853515625 -0.743977294921875 -0.005499999999999999 -0.123046875 -0.743977294921875 -0.005625 -0.12469482421875 -0.743977294921875 -0.00575 -0.125244140625 -0.743977294921875 -0.005874999999999999 -0.12457275390625 -0.743977294921875 -0.006 -0.132659912109375 -0.743977294921875 -0.006125 -0.128997802734375 -0.743977294921875 -0.00625 -0.124481201171875 -0.743977294921875 -0.006375 -0.1181640625 -0.743977294921875 -0.0065 -0.119873046875 -0.743977294921875 -0.006625000000000001 -0.110504150390625 -0.743977294921875 -0.00675 -0.099945068359375 -0.743977294921875 -0.006875 -0.0958251953125 -0.743977294921875 -0.007000000000000001 -0.082366943359375 -0.743977294921875 -0.007125000000000002 -0.069488525390625 -0.743977294921875 -0.007250000000000001 -0.054473876953125 -0.743977294921875 -0.007375 -0.041412353515625 -0.743977294921875 -0.0075 -0.026031494140625 -0.743977294921875 -0.007625 -0.0086669921875 -0.743977294921875 -0.00775 0.006927490234375 -0.743977294921875 -0.007875 0.02581787109375 -0.743977294921875 -0.008 0.043975830078125 -0.743977294921875 -0.008125 0.0599365234375 -0.743977294921875 -0.00825 0.08148193359375 -0.743977294921875 -0.008375 0.097015380859375 -0.743977294921875 -0.0085 0.11322021484375 -0.743977294921875 -0.008625 0.128204345703125 -0.743977294921875 -0.008750000000000002 0.148193359375 -0.743977294921875 -0.008875 0.161041259765625 -0.743977294921875 -0.009000000000000002 0.171112060546875 -0.743977294921875 -0.009125 0.18048095703125 -0.743977294921875 -0.00925 0.197662353515625 -0.743977294921875 -0.009375 0.20281982421875 -0.743977294921875 -0.0095 0.206451416015625 -0.743977294921875 -0.009625 0.207794189453125 -0.743977294921875 -0.00975 0.21728515625 -0.743977294921875 -0.009875 0.214202880859375 -0.743977294921875 -0.01 0.209381103515625 -0.743977294921875 -0.010125 0.21136474609375 -0.743977294921875 -0.01025 0.202301025390625 -0.743977294921875 -0.010375 0.19012451171875 -0.743977294921875 -0.0105 0.175872802734375 -0.743977294921875 -0.010625 0.168609619140625 -0.743977294921875 -0.01075 0.150054931640625 -0.743977294921875 -0.010875 0.131927490234375 -0.743977294921875 -0.011 0.110443115234375 -0.743977294921875 -0.011125 0.09149169921875 -0.743977294921875 -0.01125 0.069305419921875 -0.743977294921875 -0.011375 0.043975830078125 -0.743977294921875 -0.0115 0.020751953125 -0.743977294921875 -0.011625 -0.00537109375 -0.743977294921875 -0.01175 -0.032379150390625 -0.743977294921875 -0.011875 -0.056396484375 -0.743977294921875 -0.012 -0.085723876953125 -0.743977294921875 -0.012125 -0.10931396484375 -0.743977294921875 -0.01225 -0.1343994140625 -0.743977294921875 -0.012375 -0.157989501953125 -0.743977294921875 -0.0125 -0.184417724609375 -0.743977294921875 -0.012625 -0.205291748046875 -0.743977294921875 -0.01275 -0.222137451171875 -0.743977294921875 -0.012875 -0.238555908203125 -0.743977294921875 -0.013 -0.261444091796875 -0.743977294921875 -0.013125 -0.2718505859375 -0.743977294921875 -0.01325 -0.280609130859375 -0.743977294921875 -0.013375 -0.295745849609375 -0.743977294921875 -0.0135 -0.2987060546875 -0.743977294921875 -0.013625 -0.298370361328125 -0.743977294921875 -0.01375 -0.295257568359375 -0.743977294921875 -0.013875 -0.29840087890625 -0.743977294921875 -0.014 -0.28955078125 -0.743977294921875 -0.014125 -0.276702880859375 -0.743977294921875 -0.01425 -0.260833740234375 -0.743977294921875 -0.014375 -0.251953125 -0.743977294921875 -0.0145 -0.230133056640625 -0.743977294921875 -0.014625 -0.208343505859375 -0.743977294921875 -0.01475 -0.181976318359375 -0.743977294921875 -0.014875 -0.158355712890625 -0.743977294921875 -0.015 -0.13055419921875 -0.743977294921875 -0.015125 -0.0982666015625 -0.743977294921875 -0.01525 -0.07037353515625 -0.743977294921875 -0.015375 -0.035369873046875 -0.743977294921875 +0.000375 0.001983642578125 -0.743977294921875 +0.0005 0.00250244140625 -0.743977294921875 +0.000625 0.002899169921875 -0.743977294921875 +0.00075 0.00335693359375 -0.743977294921875 +0.0008750000000000002 0.0074462890625 -0.743977294921875 +0.001 0.0081787109375 -0.743977294921875 +0.001125 0.008819580078125 -0.743977294921875 +0.00125 0.009307861328125 -0.743977294921875 +0.001375 0.014617919921875 -0.743977294921875 +0.0015 0.015106201171875 -0.743977294921875 +0.001625 0.01544189453125 -0.743977294921875 +0.00175 0.0208740234375 -0.743977294921875 +0.001875 0.020904541015625 -0.743977294921875 +0.002 0.020721435546875 -0.743977294921875 +0.002125 0.020355224609375 -0.743977294921875 +0.00225 0.024658203125 -0.743977294921875 +0.002375 0.02362060546875 -0.743977294921875 +0.0025 0.022491455078125 -0.743977294921875 +0.002625 0.020965576171875 -0.743977294921875 +0.00275 0.023284912109375 -0.743977294921875 +0.002875 0.020965576171875 -0.743977294921875 +0.003 0.018402099609375 -0.743977294921875 +0.003125 0.015960693359375 -0.743977294921875 +0.00325 0.01519775390625 -0.743977294921875 +0.003375 0.011993408203125 -0.743977294921875 +0.0035 0.008331298828125 -0.743977294921875 +0.003625 0.005218505859375 -0.743977294921875 +0.00375 0.00128173828125 -0.743977294921875 +0.003875 -0.0030517578125 -0.743977294921875 +0.004 -0.006988525390625 -0.743977294921875 +0.004125 -0.01263427734375 -0.743977294921875 +0.00425 -0.017303466796875 -0.743977294921875 +0.004375000000000001 -0.0213623046875 -0.743977294921875 +0.004500000000000001 -0.025634765625 -0.743977294921875 +0.004625 -0.032470703125 -0.743977294921875 +0.00475 -0.03656005859375 -0.743977294921875 +0.004875 -0.040252685546875 -0.743977294921875 +0.005 -0.047515869140625 -0.743977294921875 +0.005125000000000001 -0.050628662109375 -0.743977294921875 +0.00525 -0.052978515625 -0.743977294921875 +0.005375000000000001 -0.055023193359375 -0.743977294921875 +0.005499999999999999 -0.061553955078125 -0.743977294921875 +0.005625 -0.0623779296875 -0.743977294921875 +0.00575 -0.062652587890625 -0.743977294921875 +0.005874999999999999 -0.06231689453125 -0.743977294921875 +0.006 -0.06634521484375 -0.743977294921875 +0.006125 -0.06451416015625 -0.743977294921875 +0.00625 -0.062255859375 -0.743977294921875 +0.006375 -0.059112548828125 -0.743977294921875 +0.0065 -0.059967041015625 -0.743977294921875 +0.006625000000000001 -0.055267333984375 -0.743977294921875 +0.00675 -0.04998779296875 -0.743977294921875 +0.006875 -0.047943115234375 -0.743977294921875 +0.007000000000000001 -0.04119873046875 -0.743977294921875 +0.007125000000000002 -0.034759521484375 -0.743977294921875 +0.007250000000000001 -0.027252197265625 -0.743977294921875 +0.007375 -0.020721435546875 -0.743977294921875 +0.0075 -0.013031005859375 -0.743977294921875 +0.007625 -0.004364013671875 -0.743977294921875 +0.00775 0.003448486328125 -0.743977294921875 +0.007875 0.012908935546875 -0.743977294921875 +0.008 0.02197265625 -0.743977294921875 +0.008125 0.02996826171875 -0.743977294921875 +0.00825 0.040740966796875 -0.743977294921875 +0.008375 0.048492431640625 -0.743977294921875 +0.0085 0.056610107421875 -0.743977294921875 +0.008625 0.0640869140625 -0.743977294921875 +0.008750000000000002 0.0740966796875 -0.743977294921875 +0.008875 0.08050537109375 -0.743977294921875 +0.009000000000000002 0.085540771484375 -0.743977294921875 +0.009125 0.090240478515625 -0.743977294921875 +0.00925 0.09881591796875 -0.743977294921875 +0.009375 0.101409912109375 -0.743977294921875 +0.0095 0.10321044921875 -0.743977294921875 +0.009625 0.1038818359375 -0.743977294921875 +0.00975 0.108642578125 -0.743977294921875 +0.009875 0.107086181640625 -0.743977294921875 +0.01 0.10467529296875 -0.743977294921875 +0.010125 0.105682373046875 -0.743977294921875 +0.01025 0.10113525390625 -0.743977294921875 +0.010375 0.095062255859375 -0.743977294921875 +0.0105 0.087921142578125 -0.743977294921875 +0.010625 0.08428955078125 -0.743977294921875 +0.01075 0.07501220703125 -0.743977294921875 +0.010875 0.065948486328125 -0.743977294921875 +0.011 0.055206298828125 -0.743977294921875 +0.011125 0.045745849609375 -0.743977294921875 +0.01125 0.034637451171875 -0.743977294921875 +0.011375 0.02197265625 -0.743977294921875 +0.0115 0.0103759765625 -0.743977294921875 +0.011625 -0.002716064453125 -0.743977294921875 +0.01175 -0.016204833984375 -0.743977294921875 +0.011875 -0.028228759765625 -0.743977294921875 +0.012 -0.042877197265625 -0.743977294921875 +0.012125 -0.0546875 -0.743977294921875 +0.01225 -0.067230224609375 -0.743977294921875 +0.012375 -0.079010009765625 -0.743977294921875 +0.0125 -0.09222412109375 -0.743977294921875 +0.012625 -0.1026611328125 -0.743977294921875 +0.01275 -0.111083984375 -0.743977294921875 +0.012875 -0.119293212890625 -0.743977294921875 +0.013 -0.1307373046875 -0.743977294921875 +0.013125 -0.135955810546875 -0.743977294921875 +0.01325 -0.14031982421875 -0.743977294921875 +0.013375 -0.14788818359375 -0.743977294921875 +0.0135 -0.149383544921875 -0.743977294921875 +0.013625 -0.149200439453125 -0.743977294921875 +0.01375 -0.14764404296875 -0.743977294921875 +0.013875 -0.14923095703125 -0.743977294921875 +0.014 -0.144805908203125 -0.743977294921875 +0.014125 -0.13836669921875 -0.743977294921875 +0.01425 -0.13043212890625 -0.743977294921875 +0.014375 -0.126007080078125 -0.743977294921875 +0.0145 -0.115081787109375 -0.743977294921875 +0.014625 -0.10418701171875 -0.743977294921875 +0.01475 -0.09100341796875 -0.743977294921875 +0.014875 -0.079193115234375 -0.743977294921875 +0.015 -0.0653076171875 -0.743977294921875 +0.015125 -0.049163818359375 -0.743977294921875 +0.01525 -0.03521728515625 -0.743977294921875 +0.015375 -0.0177001953125 -0.743977294921875 0.0155 0.0 -0.743977294921875 -0.015625 0.031829833984375 -0.743977294921875 -0.01575 0.06884765625 -0.743977294921875 -0.015875 0.100677490234375 -0.743977294921875 -0.016 0.135009765625 -0.743977294921875 -0.016125 0.1678466796875 -0.743977294921875 -0.01625 0.20135498046875 -0.743977294921875 -0.016375 0.231231689453125 -0.743977294921875 -0.0165 0.2559814453125 -0.743977294921875 -0.016625 0.288421630859375 -0.743977294921875 -0.01675 0.31072998046875 -0.743977294921875 -0.016875 0.327911376953125 -0.743977294921875 -0.017 0.343597412109375 -0.743977294921875 -0.017125 0.36383056640625 -0.743977294921875 -0.01725 0.372467041015625 -0.743977294921875 -0.017375 0.37701416015625 -0.743977294921875 -0.0175 0.3775634765625 -0.743977294921875 -0.017625 0.383819580078125 -0.743977294921875 -0.01775 0.377197265625 -0.743977294921875 -0.017875 0.365875244140625 -0.743977294921875 -0.018 0.350555419921875 -0.743977294921875 -0.018125 0.341766357421875 -0.743977294921875 -0.01825 0.318756103515625 -0.743977294921875 -0.018375 0.2950439453125 -0.743977294921875 -0.0185 0.2720947265625 -0.743977294921875 -0.018625 0.238983154296875 -0.743977294921875 -0.01875 0.20697021484375 -0.743977294921875 -0.018875 0.16925048828125 -0.743977294921875 -0.019 0.1368408203125 -0.743977294921875 -0.019125 0.095001220703125 -0.743977294921875 -0.01925 0.0521240234375 -0.743977294921875 -0.019375 0.013031005859375 -0.743977294921875 -0.0195 -0.0311279296875 -0.743977294921875 -0.019625 -0.070953369140625 -0.743977294921875 -0.01975 -0.11444091796875 -0.743977294921875 -0.019875 -0.15667724609375 -0.743977294921875 -0.02 -0.197509765625 -0.743977294921875 -0.020125 -0.236968994140625 -0.743977294921875 -0.02025 -0.270263671875 -0.743977294921875 -0.020375 -0.311004638671875 -0.743977294921875 -0.0205 -0.342529296875 -0.743977294921875 -0.020625 -0.367645263671875 -0.743977294921875 -0.02075 -0.39178466796875 -0.743977294921875 -0.020875 -0.41839599609375 -0.743977294921875 -0.021 -0.43450927734375 -0.743977294921875 -0.021125 -0.445831298828125 -0.743977294921875 -0.02125 -0.451873779296875 -0.743977294921875 -0.021375 -0.463165283203125 -0.743977294921875 -0.0215 -0.460662841796875 -0.743977294921875 -0.021625 -0.45306396484375 -0.743977294921875 -0.02175 -0.4493408203125 -0.743977294921875 -0.021875 -0.433624267578125 -0.743977294921875 -0.022 -0.41162109375 -0.743977294921875 -0.022125 -0.387969970703125 -0.743977294921875 -0.02225 -0.364593505859375 -0.743977294921875 -0.022375 -0.329681396484375 -0.743977294921875 -0.0225 -0.295196533203125 -0.743977294921875 -0.022625 -0.2537841796875 -0.743977294921875 -0.02275 -0.21820068359375 -0.743977294921875 -0.022875 -0.171051025390625 -0.743977294921875 -0.023 -0.12200927734375 -0.743977294921875 -0.023125 -0.07672119140625 -0.743977294921875 -0.02325 -0.026092529296875 -0.743977294921875 -0.023375 0.0208740234375 -0.743977294921875 -0.0235 0.072967529296875 -0.743977294921875 -0.023625 0.12652587890625 -0.743977294921875 -0.02375 0.17236328125 -0.743977294921875 -0.023875 0.221466064453125 -0.743977294921875 -0.024 0.26361083984375 -0.743977294921875 -0.024125 0.3131103515625 -0.743977294921875 -0.02425 0.354522705078125 -0.743977294921875 -0.024375 0.38848876953125 -0.743977294921875 -0.0245 0.42218017578125 -0.743977294921875 -0.024625 0.456268310546875 -0.743977294921875 -0.02475 0.481292724609375 -0.743977294921875 -0.024875 0.50103759765625 -0.743977294921875 -0.025 0.522796630859375 -0.743977294921875 -0.025125 0.532135009765625 -0.743977294921875 -0.02525 0.53558349609375 -0.743977294921875 -0.02537500000000001 0.5338134765625 -0.743977294921875 -0.0255 0.534881591796875 -0.743977294921875 -0.025625 0.52288818359375 -0.743977294921875 -0.02575 0.504150390625 -0.743977294921875 -0.025875 0.482574462890625 -0.743977294921875 -0.026 0.4608154296875 -0.743977294921875 -0.026125 0.426300048828125 -0.743977294921875 -0.02625 0.391204833984375 -0.743977294921875 -0.026375 0.34814453125 -0.743977294921875 -0.0265 0.310943603515625 -0.743977294921875 -0.026625 0.26031494140625 -0.743977294921875 -0.02675 0.20684814453125 -0.743977294921875 -0.026875 0.159149169921875 -0.743977294921875 -0.027 0.10101318359375 -0.743977294921875 -0.027125 0.047698974609375 -0.743977294921875 -0.02725 -0.01190185546875 -0.743977294921875 -0.027375 -0.072540283203125 -0.743977294921875 -0.0275 -0.12628173828125 -0.743977294921875 -0.027625 -0.1846923828125 -0.743977294921875 -0.02775 -0.23553466796875 -0.743977294921875 -0.027875 -0.293792724609375 -0.743977294921875 -0.028 -0.34539794921875 -0.743977294921875 -0.028125 -0.38861083984375 -0.743977294921875 -0.02825 -0.43878173828125 -0.743977294921875 -0.028375 -0.47479248046875 -0.743977294921875 -0.02850000000000001 -0.509857177734375 -0.743977294921875 -0.028625 -0.539337158203125 -0.743977294921875 -0.02875 -0.568695068359375 -0.743977294921875 -0.028875 -0.587005615234375 -0.743977294921875 -0.029 -0.59796142578125 -0.743977294921875 -0.029125 -0.603912353515625 -0.743977294921875 -0.02925 -0.611572265625 -0.743977294921875 -0.029375 -0.605224609375 -0.743977294921875 -0.0295 -0.591888427734375 -0.743977294921875 -0.029625 -0.5743408203125 -0.743977294921875 -0.02975000000000001 -0.556243896484375 -0.743977294921875 -0.029875 -0.52435302734375 -0.743977294921875 -0.03 -0.49072265625 -0.743977294921875 -0.030125 -0.4541015625 -0.743977294921875 -0.03025 -0.411102294921875 -0.743977294921875 -0.030375 -0.35906982421875 -0.743977294921875 -0.0305 -0.3031005859375 -0.743977294921875 -0.030625 -0.253082275390625 -0.743977294921875 -0.03075 -0.1905517578125 -0.743977294921875 -0.03087499999999999 -0.1324462890625 -0.743977294921875 -0.031 -0.06658935546875 -0.743977294921875 +0.015625 0.015899658203125 -0.743977294921875 +0.01575 0.034423828125 -0.743977294921875 +0.015875 0.050323486328125 -0.743977294921875 +0.016 0.0675048828125 -0.743977294921875 +0.016125 0.08392333984375 -0.743977294921875 +0.01625 0.100677490234375 -0.743977294921875 +0.016375 0.1156005859375 -0.743977294921875 +0.0165 0.12799072265625 -0.743977294921875 +0.016625 0.144195556640625 -0.743977294921875 +0.01675 0.155364990234375 -0.743977294921875 +0.016875 0.1639404296875 -0.743977294921875 +0.017 0.171783447265625 -0.743977294921875 +0.017125 0.181915283203125 -0.743977294921875 +0.01725 0.18621826171875 -0.743977294921875 +0.017375 0.188507080078125 -0.743977294921875 +0.0175 0.18878173828125 -0.743977294921875 +0.017625 0.19189453125 -0.743977294921875 +0.01775 0.1885986328125 -0.743977294921875 +0.017875 0.18292236328125 -0.743977294921875 +0.018 0.175262451171875 -0.743977294921875 +0.018125 0.170867919921875 -0.743977294921875 +0.01825 0.15936279296875 -0.743977294921875 +0.018375 0.14752197265625 -0.743977294921875 +0.0185 0.13604736328125 -0.743977294921875 +0.018625 0.119476318359375 -0.743977294921875 +0.01875 0.103485107421875 -0.743977294921875 +0.018875 0.084625244140625 -0.743977294921875 +0.019 0.06842041015625 -0.743977294921875 +0.019125 0.0474853515625 -0.743977294921875 +0.01925 0.02606201171875 -0.743977294921875 +0.019375 0.006500244140625 -0.743977294921875 +0.0195 -0.015594482421875 -0.743977294921875 +0.019625 -0.035491943359375 -0.743977294921875 +0.01975 -0.0572509765625 -0.743977294921875 +0.019875 -0.078369140625 -0.743977294921875 +0.02 -0.098785400390625 -0.743977294921875 +0.020125 -0.118499755859375 -0.743977294921875 +0.02025 -0.135162353515625 -0.743977294921875 +0.020375 -0.155517578125 -0.743977294921875 +0.0205 -0.171295166015625 -0.743977294921875 +0.020625 -0.183837890625 -0.743977294921875 +0.02075 -0.1959228515625 -0.743977294921875 +0.020875 -0.209228515625 -0.743977294921875 +0.021 -0.21728515625 -0.743977294921875 +0.021125 -0.222930908203125 -0.743977294921875 +0.02125 -0.2259521484375 -0.743977294921875 +0.021375 -0.231597900390625 -0.743977294921875 +0.0215 -0.2303466796875 -0.743977294921875 +0.021625 -0.2265625 -0.743977294921875 +0.02175 -0.224700927734375 -0.743977294921875 +0.021875 -0.216827392578125 -0.743977294921875 +0.022 -0.205841064453125 -0.743977294921875 +0.022125 -0.194000244140625 -0.743977294921875 +0.02225 -0.18231201171875 -0.743977294921875 +0.022375 -0.16485595703125 -0.743977294921875 +0.0225 -0.147613525390625 -0.743977294921875 +0.022625 -0.126922607421875 -0.743977294921875 +0.02275 -0.109130859375 -0.743977294921875 +0.022875 -0.085540771484375 -0.743977294921875 +0.023 -0.06103515625 -0.743977294921875 +0.023125 -0.03839111328125 -0.743977294921875 +0.02325 -0.0130615234375 -0.743977294921875 +0.023375 0.01043701171875 -0.743977294921875 +0.0235 0.036468505859375 -0.743977294921875 +0.023625 0.063262939453125 -0.743977294921875 +0.02375 0.086181640625 -0.743977294921875 +0.023875 0.1107177734375 -0.743977294921875 +0.024 0.131805419921875 -0.743977294921875 +0.024125 0.15655517578125 -0.743977294921875 +0.02425 0.17724609375 -0.743977294921875 +0.024375 0.194244384765625 -0.743977294921875 +0.0245 0.211090087890625 -0.743977294921875 +0.024625 0.228118896484375 -0.743977294921875 +0.02475 0.240631103515625 -0.743977294921875 +0.024875 0.250518798828125 -0.743977294921875 +0.025 0.261383056640625 -0.743977294921875 +0.025125 0.26605224609375 -0.743977294921875 +0.02525 0.267791748046875 -0.743977294921875 +0.02537500000000001 0.26690673828125 -0.743977294921875 +0.0255 0.267425537109375 -0.743977294921875 +0.025625 0.261444091796875 -0.743977294921875 +0.02575 0.2520751953125 -0.743977294921875 +0.025875 0.24127197265625 -0.743977294921875 +0.026 0.23040771484375 -0.743977294921875 +0.026125 0.213134765625 -0.743977294921875 +0.02625 0.195587158203125 -0.743977294921875 +0.026375 0.174072265625 -0.743977294921875 +0.0265 0.15545654296875 -0.743977294921875 +0.026625 0.130157470703125 -0.743977294921875 +0.02675 0.103424072265625 -0.743977294921875 +0.026875 0.079559326171875 -0.743977294921875 +0.027 0.050506591796875 -0.743977294921875 +0.027125 0.023834228515625 -0.743977294921875 +0.02725 -0.0059814453125 -0.743977294921875 +0.027375 -0.036285400390625 -0.743977294921875 +0.0275 -0.06317138671875 -0.743977294921875 +0.027625 -0.092376708984375 -0.743977294921875 +0.02775 -0.1177978515625 -0.743977294921875 +0.027875 -0.14691162109375 -0.743977294921875 +0.028 -0.1727294921875 -0.743977294921875 +0.028125 -0.1943359375 -0.743977294921875 +0.02825 -0.21942138671875 -0.743977294921875 +0.028375 -0.2374267578125 -0.743977294921875 +0.02850000000000001 -0.25494384765625 -0.743977294921875 +0.028625 -0.269683837890625 -0.743977294921875 +0.02875 -0.28436279296875 -0.743977294921875 +0.028875 -0.29351806640625 -0.743977294921875 +0.029 -0.29901123046875 -0.743977294921875 +0.029125 -0.301971435546875 -0.743977294921875 +0.02925 -0.305816650390625 -0.743977294921875 +0.029375 -0.302642822265625 -0.743977294921875 +0.0295 -0.29595947265625 -0.743977294921875 +0.029625 -0.287200927734375 -0.743977294921875 +0.02975000000000001 -0.27813720703125 -0.743977294921875 +0.029875 -0.26220703125 -0.743977294921875 +0.03 -0.245391845703125 -0.743977294921875 +0.030125 -0.227081298828125 -0.743977294921875 +0.03025 -0.20556640625 -0.743977294921875 +0.030375 -0.1795654296875 -0.743977294921875 +0.0305 -0.151580810546875 -0.743977294921875 +0.030625 -0.126556396484375 -0.743977294921875 +0.03075 -0.095306396484375 -0.743977294921875 +0.03087499999999999 -0.066253662109375 -0.743977294921875 +0.031 -0.0333251953125 -0.743977294921875 0.031125 0.0 -0.743977294921875 -0.03125 0.0606689453125 -0.743977294921875 -0.031375 0.12750244140625 -0.743977294921875 -0.0315 0.186492919921875 -0.743977294921875 -0.03162500000000001 0.25311279296875 -0.743977294921875 -0.03175 0.314697265625 -0.743977294921875 -0.031875 0.3671875 -0.743977294921875 -0.032 0.4267578125 -0.487985107421875 -0.032125 0.472412109375 -0.487985107421875 -0.03225 0.518157958984375 -0.487985107421875 -0.032375 0.564849853515625 -0.487985107421875 -0.0325 0.5960693359375 -0.487985107421875 -0.032625 0.624542236328125 -0.487985107421875 -0.03275 0.65179443359375 -0.487985107421875 -0.032875 0.667266845703125 -0.487985107421875 -0.033 0.6754150390625 -0.487985107421875 -0.033125 0.684051513671875 -0.487985107421875 -0.03325 0.678070068359375 -0.487985107421875 -0.033375 0.66632080078125 -0.487985107421875 -0.0335 0.646331787109375 -0.487985107421875 -0.03362500000000001 0.626129150390625 -0.487985107421875 -0.03375 0.595611572265625 -0.487985107421875 -0.033875 0.555511474609375 -0.487985107421875 -0.034 0.519805908203125 -0.487985107421875 -0.03412500000000001 0.46807861328125 -0.487985107421875 -0.03425 0.4111328125 -0.487985107421875 -0.034375 0.35986328125 -0.487985107421875 -0.0345 0.294281005859375 -0.487985107421875 -0.034625 0.232452392578125 -0.487985107421875 -0.03475000000000001 0.1630859375 -0.487985107421875 -0.034875 0.0894775390625 -0.487985107421875 -0.035 0.02239990234375 -0.487985107421875 -0.03512500000000001 -0.05279541015625 -0.487985107421875 -0.03525 -0.12030029296875 -0.487985107421875 -0.035375 -0.194000244140625 -0.487985107421875 -0.0355 -0.268280029296875 -0.487985107421875 -0.03562500000000001 -0.33087158203125 -0.487985107421875 -0.03575 -0.396942138671875 -0.487985107421875 -0.035875 -0.457122802734375 -0.487985107421875 -0.03600000000000001 -0.514892578125 -0.487985107421875 -0.036125 -0.567047119140625 -0.487985107421875 -0.03625 -0.614501953125 -0.487985107421875 -0.036375 -0.65478515625 -0.487985107421875 -0.0365 -0.6849365234375 -0.487985107421875 -0.036625 -0.711273193359375 -0.487985107421875 -0.03675 -0.736663818359375 -0.487985107421875 -0.036875 -0.746612548828125 -0.487985107421875 -0.037 -0.749908447265625 -0.487985107421875 -0.03712499999999999 -0.752685546875 -0.487985107421875 -0.03725 -0.74029541015625 -0.487985107421875 -0.037375 -0.719818115234375 -0.487985107421875 -0.0375 -0.700836181640625 -0.487985107421875 -0.037625 -0.665313720703125 -0.487985107421875 -0.03775 -0.627044677734375 -0.487985107421875 -0.037875 -0.5831298828125 -0.487985107421875 -0.038 -0.527313232421875 -0.487985107421875 -0.038125 -0.47216796875 -0.487985107421875 -0.03825 -0.409423828125 -0.487985107421875 -0.038375 -0.345458984375 -0.487985107421875 -0.0385 -0.27081298828125 -0.487985107421875 -0.038625 -0.19482421875 -0.487985107421875 -0.03875 -0.122528076171875 -0.487985107421875 -0.038875 -0.04095458984375 -0.487985107421875 -0.039 0.033050537109375 -0.487985107421875 -0.039125 0.1153564453125 -0.487985107421875 -0.03925 0.1964111328125 -0.487985107421875 -0.039375 0.269744873046875 -0.487985107421875 -0.0395 0.346588134765625 -0.487985107421875 -0.039625 0.41253662109375 -0.487985107421875 -0.03975 0.485260009765625 -0.487985107421875 -0.039875 0.5494384765625 -0.487985107421875 -0.04 0.60205078125 -0.487985107421875 -0.040125 0.654266357421875 -0.487985107421875 -0.04025 0.70050048828125 -0.487985107421875 -0.040375 0.73895263671875 -0.487985107421875 -0.04050000000000001 0.769287109375 -0.487985107421875 -0.040625 0.79534912109375 -0.487985107421875 -0.04075 0.8095703125 -0.487985107421875 -0.040875 0.814788818359375 -0.487985107421875 -0.04100000000000001 0.818115234375 -0.487985107421875 -0.041125 0.80645751953125 -0.487985107421875 -0.04125 0.78839111328125 -0.487985107421875 -0.041375 0.765625 -0.487985107421875 -0.0415 0.732818603515625 -0.487985107421875 -0.041625 0.688751220703125 -0.487985107421875 -0.04175000000000001 0.641632080078125 -0.487985107421875 -0.041875 0.588836669921875 -0.487985107421875 -0.042 0.5240478515625 -0.487985107421875 -0.042125 0.4639892578125 -0.487985107421875 -0.04225000000000001 0.388458251953125 -0.487985107421875 -0.042375 0.30865478515625 -0.487985107421875 -0.0425 0.2354736328125 -0.487985107421875 -0.042625 0.149444580078125 -0.487985107421875 -0.04275 0.070587158203125 -0.487985107421875 -0.04287500000000001 -0.017730712890625 -0.487985107421875 -0.04300000000000001 -0.1064453125 -0.487985107421875 -0.043125 -0.185302734375 -0.487985107421875 -0.04325 -0.27099609375 -0.487985107421875 -0.043375 -0.347808837890625 -0.487985107421875 -0.04350000000000001 -0.427581787109375 -0.487985107421875 -0.04362500000000001 -0.50262451171875 -0.487985107421875 -0.04375000000000001 -0.569091796875 -0.487985107421875 -0.043875 -0.6334228515625 -0.487985107421875 -0.04399999999999999 -0.685455322265625 -0.487985107421875 -0.044125 -0.740631103515625 -0.487985107421875 -0.04425 -0.783477783203125 -0.487985107421875 -0.044375 -0.814666748046875 -0.487985107421875 -0.04449999999999999 -0.845916748046875 -0.487985107421875 -0.04462499999999999 -0.854583740234375 -0.487985107421875 -0.04475 -0.854644775390625 -0.487985107421875 -0.044875 -0.854705810546875 -0.487985107421875 -0.045 -0.8546142578125 -0.487985107421875 -0.045125 -0.846282958984375 -0.487985107421875 -0.04525 -0.82586669921875 -0.487985107421875 -0.045375 -0.789215087890625 -0.487985107421875 -0.0455 -0.74395751953125 -0.487985107421875 -0.045625 -0.700103759765625 -0.487985107421875 -0.04575 -0.639495849609375 -0.487985107421875 -0.045875 -0.57891845703125 -0.487985107421875 -0.046 -0.50836181640625 -0.487985107421875 -0.046125 -0.42913818359375 -0.487985107421875 -0.04625 -0.353790283203125 -0.487985107421875 -0.046375 -0.26776123046875 -0.487985107421875 -0.04649999999999999 -0.1861572265625 -0.487985107421875 -0.046625 -0.09356689453125 -0.487985107421875 +0.03125 0.03033447265625 -0.743977294921875 +0.031375 0.063751220703125 -0.743977294921875 +0.0315 0.093231201171875 -0.743977294921875 +0.03162500000000001 0.126556396484375 -0.743977294921875 +0.03175 0.1573486328125 -0.743977294921875 +0.031875 0.18359375 -0.743977294921875 +0.032 0.21337890625 -0.487985107421875 +0.032125 0.2362060546875 -0.487985107421875 +0.03225 0.259063720703125 -0.487985107421875 +0.032375 0.28240966796875 -0.487985107421875 +0.0325 0.29803466796875 -0.487985107421875 +0.032625 0.312255859375 -0.487985107421875 +0.03275 0.325897216796875 -0.487985107421875 +0.032875 0.3336181640625 -0.487985107421875 +0.033 0.33770751953125 -0.487985107421875 +0.033125 0.342010498046875 -0.487985107421875 +0.03325 0.339019775390625 -0.487985107421875 +0.033375 0.333160400390625 -0.487985107421875 +0.0335 0.323150634765625 -0.487985107421875 +0.03362500000000001 0.31304931640625 -0.487985107421875 +0.03375 0.29779052734375 -0.487985107421875 +0.033875 0.277740478515625 -0.487985107421875 +0.034 0.2598876953125 -0.487985107421875 +0.03412500000000001 0.234039306640625 -0.487985107421875 +0.03425 0.20556640625 -0.487985107421875 +0.034375 0.179931640625 -0.487985107421875 +0.0345 0.147125244140625 -0.487985107421875 +0.034625 0.1162109375 -0.487985107421875 +0.03475000000000001 0.08154296875 -0.487985107421875 +0.034875 0.04473876953125 -0.487985107421875 +0.035 0.011199951171875 -0.487985107421875 +0.03512500000000001 -0.02642822265625 -0.487985107421875 +0.03525 -0.0601806640625 -0.487985107421875 +0.035375 -0.097015380859375 -0.487985107421875 +0.0355 -0.1341552734375 -0.487985107421875 +0.03562500000000001 -0.16546630859375 -0.487985107421875 +0.03575 -0.198486328125 -0.487985107421875 +0.035875 -0.22857666015625 -0.487985107421875 +0.03600000000000001 -0.257476806640625 -0.487985107421875 +0.036125 -0.283538818359375 -0.487985107421875 +0.03625 -0.307281494140625 -0.487985107421875 +0.036375 -0.327423095703125 -0.487985107421875 +0.0365 -0.342498779296875 -0.487985107421875 +0.036625 -0.35565185546875 -0.487985107421875 +0.03675 -0.36834716796875 -0.487985107421875 +0.036875 -0.373321533203125 -0.487985107421875 +0.037 -0.374969482421875 -0.487985107421875 +0.03712499999999999 -0.376373291015625 -0.487985107421875 +0.03725 -0.37017822265625 -0.487985107421875 +0.037375 -0.35992431640625 -0.487985107421875 +0.0375 -0.350433349609375 -0.487985107421875 +0.037625 -0.332672119140625 -0.487985107421875 +0.03775 -0.31353759765625 -0.487985107421875 +0.037875 -0.291595458984375 -0.487985107421875 +0.038 -0.263671875 -0.487985107421875 +0.038125 -0.236114501953125 -0.487985107421875 +0.03825 -0.204742431640625 -0.487985107421875 +0.038375 -0.172760009765625 -0.487985107421875 +0.0385 -0.13543701171875 -0.487985107421875 +0.038625 -0.097442626953125 -0.487985107421875 +0.03875 -0.061279296875 -0.487985107421875 +0.038875 -0.0205078125 -0.487985107421875 +0.039 0.016510009765625 -0.487985107421875 +0.039125 0.05767822265625 -0.487985107421875 +0.03925 0.09820556640625 -0.487985107421875 +0.039375 0.134857177734375 -0.487985107421875 +0.0395 0.17327880859375 -0.487985107421875 +0.039625 0.206268310546875 -0.487985107421875 +0.03975 0.24261474609375 -0.487985107421875 +0.039875 0.27471923828125 -0.487985107421875 +0.04 0.301025390625 -0.487985107421875 +0.040125 0.327117919921875 -0.487985107421875 +0.04025 0.350250244140625 -0.487985107421875 +0.040375 0.369476318359375 -0.487985107421875 +0.04050000000000001 0.3846435546875 -0.487985107421875 +0.040625 0.397674560546875 -0.487985107421875 +0.04075 0.40478515625 -0.487985107421875 +0.040875 0.407379150390625 -0.487985107421875 +0.04100000000000001 0.4090576171875 -0.487985107421875 +0.041125 0.403228759765625 -0.487985107421875 +0.04125 0.394195556640625 -0.487985107421875 +0.041375 0.3828125 -0.487985107421875 +0.0415 0.36639404296875 -0.487985107421875 +0.041625 0.3443603515625 -0.487985107421875 +0.04175000000000001 0.32080078125 -0.487985107421875 +0.041875 0.294403076171875 -0.487985107421875 +0.042 0.26202392578125 -0.487985107421875 +0.042125 0.23199462890625 -0.487985107421875 +0.04225000000000001 0.1942138671875 -0.487985107421875 +0.042375 0.154327392578125 -0.487985107421875 +0.0425 0.11773681640625 -0.487985107421875 +0.042625 0.07470703125 -0.487985107421875 +0.04275 0.0352783203125 -0.487985107421875 +0.04287500000000001 -0.008880615234375 -0.487985107421875 +0.04300000000000001 -0.053253173828125 -0.487985107421875 +0.043125 -0.092681884765625 -0.487985107421875 +0.04325 -0.135528564453125 -0.487985107421875 +0.043375 -0.173919677734375 -0.487985107421875 +0.04350000000000001 -0.21380615234375 -0.487985107421875 +0.04362500000000001 -0.2513427734375 -0.487985107421875 +0.04375000000000001 -0.284576416015625 -0.487985107421875 +0.043875 -0.316741943359375 -0.487985107421875 +0.04399999999999999 -0.342742919921875 -0.487985107421875 +0.044125 -0.370330810546875 -0.487985107421875 +0.04425 -0.391754150390625 -0.487985107421875 +0.044375 -0.4073486328125 -0.487985107421875 +0.04449999999999999 -0.4229736328125 -0.487985107421875 +0.04462499999999999 -0.430877685546875 -0.487985107421875 +0.04475 -0.4351806640625 -0.487985107421875 +0.044875 -0.437225341796875 -0.487985107421875 +0.045 -0.432708740234375 -0.487985107421875 +0.045125 -0.42315673828125 -0.487985107421875 +0.04525 -0.4129638671875 -0.487985107421875 +0.045375 -0.394622802734375 -0.487985107421875 +0.0455 -0.37200927734375 -0.487985107421875 +0.045625 -0.350067138671875 -0.487985107421875 +0.04575 -0.31976318359375 -0.487985107421875 +0.045875 -0.28948974609375 -0.487985107421875 +0.046 -0.25421142578125 -0.487985107421875 +0.046125 -0.214599609375 -0.487985107421875 +0.04625 -0.176910400390625 -0.487985107421875 +0.046375 -0.1339111328125 -0.487985107421875 +0.04649999999999999 -0.093109130859375 -0.487985107421875 +0.046625 -0.04681396484375 -0.487985107421875 0.04675000000000001 0.0 -0.487985107421875 -0.046875 0.08465576171875 -0.487985107421875 -0.04699999999999999 0.177886962890625 -0.487985107421875 -0.047125 0.2601318359375 -0.487985107421875 -0.04725000000000001 0.350555419921875 -0.487985107421875 -0.047375 0.435821533203125 -0.487985107421875 -0.0475 0.508453369140625 -0.487985107421875 -0.047625 0.58673095703125 -0.487985107421875 -0.04775 0.64947509765625 -0.487985107421875 -0.047875 0.71240234375 -0.487985107421875 -0.048 0.771209716796875 -0.487985107421875 -0.048125 0.8138427734375 -0.487985107421875 -0.04825 0.85272216796875 -0.487985107421875 -0.048375 0.854766845703125 -0.487985107421875 -0.0485 0.854949951171875 -0.487985107421875 -0.048625 0.855072021484375 -0.487985107421875 -0.04875 0.8551025390625 -0.487985107421875 -0.048875 0.85504150390625 -0.487985107421875 -0.049 0.854888916015625 -0.487985107421875 -0.04912500000000001 0.85467529296875 -0.487985107421875 -0.04925000000000001 0.837615966796875 -0.487985107421875 -0.049375 0.796783447265625 -0.487985107421875 -0.0495 0.74627685546875 -0.487985107421875 -0.049625 0.6907958984375 -0.487985107421875 -0.04975000000000001 0.62200927734375 -0.487985107421875 -0.04987500000000001 0.548583984375 -0.487985107421875 -0.05 0.475128173828125 -0.487985107421875 -0.05012499999999999 0.3885498046875 -0.487985107421875 -0.05025 0.306915283203125 -0.487985107421875 -0.05037500000000001 0.213958740234375 -0.487985107421875 -0.0505 0.117401123046875 -0.487985107421875 -0.05062500000000001 0.029388427734375 -0.487985107421875 -0.05075000000000001 -0.06884765625 -0.487985107421875 -0.050875 -0.156829833984375 -0.487985107421875 -0.051 -0.2529296875 -0.487985107421875 -0.051125 -0.347564697265625 -0.487985107421875 -0.05125000000000001 -0.428619384765625 -0.487985107421875 -0.051375 -0.51422119140625 -0.487985107421875 -0.0515 -0.588592529296875 -0.487985107421875 -0.05162500000000001 -0.6629638671875 -0.487985107421875 -0.05175000000000001 -0.730133056640625 -0.487985107421875 -0.051875 -0.78643798828125 -0.487985107421875 -0.052 -0.8380126953125 -0.487985107421875 -0.052125 -0.854705810546875 -0.487985107421875 -0.05225 -0.855072021484375 -0.487985107421875 -0.05237499999999999 -0.85528564453125 -0.487985107421875 -0.0525 -0.85540771484375 -0.487985107421875 -0.052625 -0.85546875 -0.487985107421875 -0.05274999999999999 -0.855438232421875 -0.487985107421875 -0.052875 -0.85528564453125 -0.487985107421875 -0.05300000000000001 -0.855072021484375 -0.487985107421875 -0.053125 -0.854766845703125 -0.487985107421875 -0.05324999999999999 -0.836456298828125 -0.487985107421875 -0.05337499999999999 -0.78839111328125 -0.487985107421875 -0.05350000000000001 -0.72894287109375 -0.487985107421875 -0.053625 -0.6591796875 -0.487985107421875 -0.05375 -0.5902099609375 -0.487985107421875 -0.05387499999999999 -0.50885009765625 -0.487985107421875 -0.054 -0.42938232421875 -0.487985107421875 -0.054125 -0.33660888671875 -0.487985107421875 -0.05425 -0.24078369140625 -0.487985107421875 -0.054375 -0.15142822265625 -0.487985107421875 -0.0545 -0.050628662109375 -0.487985107421875 -0.054625 0.040618896484375 -0.487985107421875 -0.05475 0.14178466796875 -0.487985107421875 -0.054875 0.241424560546875 -0.487985107421875 -0.055 0.3297119140625 -0.487985107421875 -0.055125 0.42364501953125 -0.487985107421875 -0.05525 0.50421142578125 -0.487985107421875 -0.055375 0.589874267578125 -0.487985107421875 -0.05550000000000001 0.66790771484375 -0.487985107421875 -0.055625 0.73187255859375 -0.487985107421875 -0.05575 0.797149658203125 -0.487985107421875 -0.05587499999999999 0.846954345703125 -0.487985107421875 -0.05600000000000001 0.8548583984375 -0.487985107421875 -0.05612500000000001 0.855224609375 -0.487985107421875 -0.05625 0.855438232421875 -0.487985107421875 -0.05637499999999999 0.855621337890625 -0.487985107421875 -0.0565 0.855682373046875 -0.487985107421875 -0.05662500000000001 0.85565185546875 -0.487985107421875 -0.05675 0.85552978515625 -0.487985107421875 -0.056875 0.855316162109375 -0.487985107421875 -0.05700000000000001 0.855010986328125 -0.487985107421875 -0.057125 0.854644775390625 -0.487985107421875 -0.05725 0.819610595703125 -0.487985107421875 -0.057375 0.75958251953125 -0.487985107421875 -0.05750000000000001 0.697052001953125 -0.487985107421875 -0.057625 0.620361328125 -0.487985107421875 -0.05775 0.546417236328125 -0.487985107421875 -0.057875 0.457489013671875 -0.487985107421875 -0.05800000000000001 0.363494873046875 -0.487985107421875 -0.058125 0.275909423828125 -0.487985107421875 -0.05825 0.17510986328125 -0.487985107421875 -0.058375 0.08270263671875 -0.487985107421875 -0.05850000000000001 -0.02069091796875 -0.487985107421875 -0.05862500000000001 -0.12408447265625 -0.487985107421875 -0.05875 -0.216033935546875 -0.487985107421875 -0.058875 -0.316375732421875 -0.487985107421875 -0.059 -0.4034423828125 -0.487985107421875 -0.05912500000000001 -0.4959716796875 -0.487985107421875 -0.05925000000000001 -0.583740234375 -0.487985107421875 -0.059375 -0.65679931640625 -0.487985107421875 -0.05950000000000001 -0.731048583984375 -0.487985107421875 -0.059625 -0.7919921875 -0.487985107421875 -0.05975000000000001 -0.85052490234375 -0.487985107421875 -0.059875 -0.854949951171875 -0.487985107421875 -0.06 -0.85528564453125 -0.487985107421875 -0.06012499999999999 -0.855560302734375 -0.487985107421875 -0.06025 -0.855743408203125 -0.487985107421875 -0.060375 -0.8558349609375 -0.487985107421875 -0.0605 -0.8558349609375 -0.487985107421875 -0.060625 -0.855743408203125 -0.487985107421875 -0.06074999999999999 -0.85552978515625 -0.487985107421875 -0.060875 -0.855255126953125 -0.487985107421875 -0.061 -0.854888916015625 -0.487985107421875 -0.061125 -0.8419189453125 -0.487985107421875 -0.06125 -0.7884521484375 -0.487985107421875 -0.061375 -0.720184326171875 -0.487985107421875 -0.0615 -0.6519775390625 -0.487985107421875 -0.061625 -0.569793701171875 -0.487985107421875 -0.06174999999999999 -0.480987548828125 -0.487985107421875 -0.061875 -0.396514892578125 -0.487985107421875 -0.062 -0.2987060546875 -0.487985107421875 -0.06212499999999999 -0.2076416015625 -0.487985107421875 -0.06225000000000001 -0.1043701171875 -0.487985107421875 +0.046875 0.042327880859375 -0.487985107421875 +0.04699999999999999 0.08892822265625 -0.487985107421875 +0.047125 0.13006591796875 -0.487985107421875 +0.04725000000000001 0.175262451171875 -0.487985107421875 +0.047375 0.2178955078125 -0.487985107421875 +0.0475 0.25421142578125 -0.487985107421875 +0.047625 0.293365478515625 -0.487985107421875 +0.04775 0.324737548828125 -0.487985107421875 +0.047875 0.356201171875 -0.487985107421875 +0.048 0.385589599609375 -0.487985107421875 +0.048125 0.40692138671875 -0.487985107421875 +0.04825 0.426361083984375 -0.487985107421875 +0.048375 0.44189453125 -0.487985107421875 +0.0485 0.452362060546875 -0.487985107421875 +0.048625 0.4578857421875 -0.487985107421875 +0.04875 0.460601806640625 -0.487985107421875 +0.048875 0.456573486328125 -0.487985107421875 +0.049 0.44866943359375 -0.487985107421875 +0.04912500000000001 0.437103271484375 -0.487985107421875 +0.04925000000000001 0.418792724609375 -0.487985107421875 +0.049375 0.39837646484375 -0.487985107421875 +0.0495 0.373138427734375 -0.487985107421875 +0.049625 0.34539794921875 -0.487985107421875 +0.04975000000000001 0.311004638671875 -0.487985107421875 +0.04987500000000001 0.2742919921875 -0.487985107421875 +0.05 0.237548828125 -0.487985107421875 +0.05012499999999999 0.19427490234375 -0.487985107421875 +0.05025 0.1534423828125 -0.487985107421875 +0.05037500000000001 0.106964111328125 -0.487985107421875 +0.0505 0.058685302734375 -0.487985107421875 +0.05062500000000001 0.014678955078125 -0.487985107421875 +0.05075000000000001 -0.034454345703125 -0.487985107421875 +0.050875 -0.07843017578125 -0.487985107421875 +0.051 -0.126495361328125 -0.487985107421875 +0.051125 -0.173797607421875 -0.487985107421875 +0.05125000000000001 -0.214324951171875 -0.487985107421875 +0.051375 -0.25714111328125 -0.487985107421875 +0.0515 -0.2943115234375 -0.487985107421875 +0.05162500000000001 -0.331512451171875 -0.487985107421875 +0.05175000000000001 -0.365081787109375 -0.487985107421875 +0.051875 -0.39324951171875 -0.487985107421875 +0.052 -0.419036865234375 -0.487985107421875 +0.052125 -0.438323974609375 -0.487985107421875 +0.05225 -0.456695556640625 -0.487985107421875 +0.05237499999999999 -0.468597412109375 -0.487985107421875 +0.0525 -0.474945068359375 -0.487985107421875 +0.052625 -0.47857666015625 -0.487985107421875 +0.05274999999999999 -0.475982666015625 -0.487985107421875 +0.052875 -0.4681396484375 -0.487985107421875 +0.05300000000000001 -0.456573486328125 -0.487985107421875 +0.053125 -0.44061279296875 -0.487985107421875 +0.05324999999999999 -0.418243408203125 -0.487985107421875 +0.05337499999999999 -0.39422607421875 -0.487985107421875 +0.05350000000000001 -0.364501953125 -0.487985107421875 +0.053625 -0.329620361328125 -0.487985107421875 +0.05375 -0.295135498046875 -0.487985107421875 +0.05387499999999999 -0.25445556640625 -0.487985107421875 +0.054 -0.2147216796875 -0.487985107421875 +0.054125 -0.1683349609375 -0.487985107421875 +0.05425 -0.12042236328125 -0.487985107421875 +0.054375 -0.07574462890625 -0.487985107421875 +0.0545 -0.02532958984375 -0.487985107421875 +0.054625 0.020294189453125 -0.487985107421875 +0.05475 0.070892333984375 -0.487985107421875 +0.054875 0.120697021484375 -0.487985107421875 +0.055 0.16485595703125 -0.487985107421875 +0.055125 0.211822509765625 -0.487985107421875 +0.05525 0.252105712890625 -0.487985107421875 +0.055375 0.294921875 -0.487985107421875 +0.05550000000000001 0.333953857421875 -0.487985107421875 +0.055625 0.365936279296875 -0.487985107421875 +0.05575 0.3985595703125 -0.487985107421875 +0.05587499999999999 0.4234619140625 -0.487985107421875 +0.05600000000000001 0.44671630859375 -0.487985107421875 +0.05612500000000001 0.466064453125 -0.487985107421875 +0.05625 0.478240966796875 -0.487985107421875 +0.05637499999999999 0.486785888671875 -0.487985107421875 +0.0565 0.490936279296875 -0.487985107421875 +0.05662500000000001 0.489349365234375 -0.487985107421875 +0.05675 0.48236083984375 -0.487985107421875 +0.056875 0.4715576171875 -0.487985107421875 +0.05700000000000001 0.455535888671875 -0.487985107421875 +0.057125 0.43603515625 -0.487985107421875 +0.05725 0.4097900390625 -0.487985107421875 +0.057375 0.379791259765625 -0.487985107421875 +0.05750000000000001 0.3485107421875 -0.487985107421875 +0.057625 0.3101806640625 -0.487985107421875 +0.05775 0.273193359375 -0.487985107421875 +0.057875 0.228729248046875 -0.487985107421875 +0.05800000000000001 0.181732177734375 -0.487985107421875 +0.058125 0.137939453125 -0.487985107421875 +0.05825 0.087554931640625 -0.487985107421875 +0.058375 0.041351318359375 -0.487985107421875 +0.05850000000000001 -0.0103759765625 -0.487985107421875 +0.05862500000000001 -0.06207275390625 -0.487985107421875 +0.05875 -0.1080322265625 -0.487985107421875 +0.058875 -0.158203125 -0.487985107421875 +0.059 -0.201751708984375 -0.487985107421875 +0.05912500000000001 -0.248016357421875 -0.487985107421875 +0.05925000000000001 -0.291900634765625 -0.487985107421875 +0.059375 -0.32843017578125 -0.487985107421875 +0.05950000000000001 -0.36553955078125 -0.487985107421875 +0.059625 -0.396026611328125 -0.487985107421875 +0.05975000000000001 -0.42529296875 -0.487985107421875 +0.059875 -0.44989013671875 -0.487985107421875 +0.06 -0.468292236328125 -0.487985107421875 +0.06012499999999999 -0.483367919921875 -0.487985107421875 +0.06025 -0.49237060546875 -0.487985107421875 +0.060375 -0.497283935546875 -0.487985107421875 +0.0605 -0.497222900390625 -0.487985107421875 +0.060625 -0.4920654296875 -0.487985107421875 +0.06074999999999999 -0.481201171875 -0.487985107421875 +0.060875 -0.467315673828125 -0.487985107421875 +0.061 -0.44659423828125 -0.487985107421875 +0.061125 -0.420989990234375 -0.487985107421875 +0.06125 -0.394256591796875 -0.487985107421875 +0.061375 -0.360107421875 -0.487985107421875 +0.0615 -0.326019287109375 -0.487985107421875 +0.061625 -0.284912109375 -0.487985107421875 +0.06174999999999999 -0.240509033203125 -0.487985107421875 +0.061875 -0.198272705078125 -0.487985107421875 +0.062 -0.149383544921875 -0.487985107421875 +0.06212499999999999 -0.103851318359375 -0.487985107421875 +0.06225000000000001 -0.052215576171875 -0.487985107421875 0.06237500000000001 0.0 -0.487985107421875 -0.0625 0.093994140625 -0.487985107421875 -0.06262499999999999 0.197479248046875 -0.487985107421875 -0.06274999999999999 0.28887939453125 -0.487985107421875 -0.06287500000000001 0.3873291015625 -0.487985107421875 -0.063 0.481536865234375 -0.487985107421875 -0.063125 0.561920166015625 -0.487985107421875 -0.06325000000000001 0.645294189453125 -0.487985107421875 -0.063375 0.71429443359375 -0.487985107421875 -0.0635 0.78350830078125 -0.487985107421875 -0.063625 0.844207763671875 -0.487985107421875 -0.06375 0.854827880859375 -0.487985107421875 -0.063875 0.855224609375 -0.487985107421875 -0.064 0.855499267578125 -0.2319929199218749 -0.064125 0.855712890625 -0.2319929199218749 -0.06425000000000001 0.8558349609375 -0.2319929199218749 -0.064375 0.855865478515625 -0.2319929199218749 -0.0645 0.85577392578125 -0.2319929199218749 -0.064625 0.8555908203125 -0.2319929199218749 -0.06475 0.855316162109375 -0.2319929199218749 -0.06487500000000001 0.854949951171875 -0.2319929199218749 -0.065 0.854522705078125 -0.2319929199218749 -0.065125 0.80194091796875 -0.2319929199218749 -0.06525 0.741973876953125 -0.2319929199218749 -0.06537500000000001 0.6680908203125 -0.2319929199218749 -0.06550000000000001 0.586822509765625 -0.2319929199218749 -0.065625 0.507904052734375 -0.2319929199218749 -0.06574999999999999 0.415374755859375 -0.2319929199218749 -0.065875 0.327880859375 -0.2319929199218749 -0.06600000000000001 0.2276611328125 -0.2319929199218749 -0.066125 0.124908447265625 -0.2319929199218749 -0.06625000000000001 0.03125 -0.2319929199218749 -0.06637500000000001 -0.072906494140625 -0.2319929199218749 -0.0665 -0.166107177734375 -0.2319929199218749 -0.066625 -0.26763916015625 -0.2319929199218749 -0.06675 -0.36639404296875 -0.2319929199218749 -0.06687500000000001 -0.451385498046875 -0.2319929199218749 -0.067 -0.541534423828125 -0.2319929199218749 -0.067125 -0.61761474609375 -0.2319929199218749 -0.06725000000000001 -0.694854736328125 -0.2319929199218749 -0.06737500000000001 -0.7652587890625 -0.2319929199218749 -0.0675 -0.82037353515625 -0.2319929199218749 -0.067625 -0.854705810546875 -0.2319929199218749 -0.06775 -0.855072021484375 -0.2319929199218749 -0.06787500000000001 -0.85540771484375 -0.2319929199218749 -0.06800000000000001 -0.855621337890625 -0.2319929199218749 -0.068125 -0.85577392578125 -0.2319929199218749 -0.06825000000000001 -0.85577392578125 -0.2319929199218749 -0.068375 -0.855743408203125 -0.2319929199218749 -0.06850000000000001 -0.855560302734375 -0.2319929199218749 -0.06862500000000001 -0.855316162109375 -0.2319929199218749 -0.06875 -0.855010986328125 -0.2319929199218749 -0.06887500000000001 -0.85455322265625 -0.2319929199218749 -0.069 -0.80950927734375 -0.2319929199218749 -0.06912500000000001 -0.744903564453125 -0.2319929199218749 -0.06925000000000001 -0.673583984375 -0.2319929199218749 -0.06937500000000001 -0.60308837890625 -0.2319929199218749 -0.06950000000000001 -0.517486572265625 -0.2319929199218749 -0.069625 -0.436676025390625 -0.2319929199218749 -0.06975 -0.342315673828125 -0.2319929199218749 -0.06987500000000001 -0.243682861328125 -0.2319929199218749 -0.07000000000000001 -0.15325927734375 -0.2319929199218749 -0.070125 -0.051116943359375 -0.2319929199218749 -0.07025000000000001 0.0408935546875 -0.2319929199218749 -0.07037500000000001 0.142822265625 -0.2319929199218749 -0.07050000000000001 0.24261474609375 -0.2319929199218749 -0.070625 0.33050537109375 -0.2319929199218749 -0.07075 0.42364501953125 -0.2319929199218749 -0.07087500000000001 0.50421142578125 -0.2319929199218749 -0.07100000000000001 0.588470458984375 -0.2319929199218749 -0.07112500000000001 0.664642333984375 -0.2319929199218749 -0.07125000000000002 0.728302001953125 -0.2319929199218749 -0.07137500000000001 0.791473388671875 -0.2319929199218749 -0.0715 0.83868408203125 -0.2319929199218749 -0.07162500000000001 0.854766845703125 -0.2319929199218749 -0.07175000000000001 0.855072021484375 -0.2319929199218749 -0.07187500000000001 0.855316162109375 -0.2319929199218749 -0.07200000000000001 0.85546875 -0.2319929199218749 -0.07212499999999999 0.855499267578125 -0.2319929199218749 -0.07225 0.85546875 -0.2319929199218749 -0.07237499999999999 0.855316162109375 -0.2319929199218749 -0.0725 0.855133056640625 -0.2319929199218749 -0.07262499999999999 0.85479736328125 -0.2319929199218749 -0.07274999999999999 0.848236083984375 -0.2319929199218749 -0.072875 0.797210693359375 -0.2319929199218749 -0.073 0.73748779296875 -0.2319929199218749 -0.073125 0.674591064453125 -0.2319929199218749 -0.07324999999999999 0.600372314453125 -0.2319929199218749 -0.07337499999999999 0.526153564453125 -0.2319929199218749 -0.0735 0.440521240234375 -0.2319929199218749 -0.073625 0.35003662109375 -0.2319929199218749 -0.07374999999999999 0.26434326171875 -0.2319929199218749 -0.073875 0.167755126953125 -0.2319929199218749 -0.074 0.0792236328125 -0.2319929199218749 -0.074125 -0.01971435546875 -0.2319929199218749 -0.07424999999999999 -0.1182861328125 -0.2319929199218749 -0.07437499999999999 -0.205169677734375 -0.2319929199218749 -0.0745 -0.300018310546875 -0.2319929199218749 -0.07462499999999999 -0.382598876953125 -0.2319929199218749 -0.07475 -0.468536376953125 -0.2319929199218749 -0.07487500000000001 -0.55078125 -0.2319929199218749 -0.075 -0.61724853515625 -0.2319929199218749 -0.07512499999999999 -0.687042236328125 -0.2319929199218749 -0.07524999999999999 -0.74346923828125 -0.2319929199218749 -0.075375 -0.795135498046875 -0.2319929199218749 -0.0755 -0.84112548828125 -0.2319929199218749 -0.075625 -0.854705810546875 -0.2319929199218749 -0.07574999999999999 -0.85491943359375 -0.2319929199218749 -0.075875 -0.8551025390625 -0.2319929199218749 -0.076 -0.855133056640625 -0.2319929199218749 -0.076125 -0.855133056640625 -0.2319929199218749 -0.07625 -0.85504150390625 -0.2319929199218749 -0.07637499999999999 -0.85479736328125 -0.2319929199218749 -0.0765 -0.85455322265625 -0.2319929199218749 -0.076625 -0.818115234375 -0.2319929199218749 -0.07675 -0.771209716796875 -0.2319929199218749 -0.076875 -0.721710205078125 -0.2319929199218749 -0.077 -0.656097412109375 -0.2319929199218749 -0.077125 -0.593963623046875 -0.2319929199218749 -0.07725 -0.518768310546875 -0.2319929199218749 -0.07737499999999999 -0.435821533203125 -0.2319929199218749 -0.0775 -0.3592529296875 -0.2319929199218749 -0.077625 -0.269134521484375 -0.2319929199218749 -0.07774999999999999 -0.187103271484375 -0.2319929199218749 -0.07787500000000001 -0.09405517578125 -0.2319929199218749 +0.0625 0.0469970703125 -0.487985107421875 +0.06262499999999999 0.098724365234375 -0.487985107421875 +0.06274999999999999 0.144439697265625 -0.487985107421875 +0.06287500000000001 0.19366455078125 -0.487985107421875 +0.063 0.240753173828125 -0.487985107421875 +0.063125 0.28094482421875 -0.487985107421875 +0.06325000000000001 0.3226318359375 -0.487985107421875 +0.063375 0.357147216796875 -0.487985107421875 +0.0635 0.391754150390625 -0.487985107421875 +0.063625 0.422088623046875 -0.487985107421875 +0.06375 0.4454345703125 -0.487985107421875 +0.063875 0.466705322265625 -0.487985107421875 +0.064 0.481475830078125 -0.2319929199218749 +0.064125 0.492889404296875 -0.2319929199218749 +0.06425000000000001 0.498809814453125 -0.2319929199218749 +0.064375 0.499542236328125 -0.2319929199218749 +0.0645 0.49517822265625 -0.2319929199218749 +0.064625 0.4864501953125 -0.2319929199218749 +0.06475 0.47186279296875 -0.2319929199218749 +0.06487500000000001 0.451934814453125 -0.2319929199218749 +0.065 0.429901123046875 -0.2319929199218749 +0.065125 0.400970458984375 -0.2319929199218749 +0.06525 0.3709716796875 -0.2319929199218749 +0.06537500000000001 0.33404541015625 -0.2319929199218749 +0.06550000000000001 0.29339599609375 -0.2319929199218749 +0.065625 0.253936767578125 -0.2319929199218749 +0.06574999999999999 0.207672119140625 -0.2319929199218749 +0.065875 0.1639404296875 -0.2319929199218749 +0.06600000000000001 0.11383056640625 -0.2319929199218749 +0.066125 0.06243896484375 -0.2319929199218749 +0.06625000000000001 0.015625 -0.2319929199218749 +0.06637500000000001 -0.036468505859375 -0.2319929199218749 +0.0665 -0.08306884765625 -0.2319929199218749 +0.066625 -0.13385009765625 -0.2319929199218749 +0.06675 -0.1832275390625 -0.2319929199218749 +0.06687500000000001 -0.2257080078125 -0.2319929199218749 +0.067 -0.270782470703125 -0.2319929199218749 +0.067125 -0.308837890625 -0.2319929199218749 +0.06725000000000001 -0.347442626953125 -0.2319929199218749 +0.06737500000000001 -0.382659912109375 -0.2319929199218749 +0.0675 -0.41021728515625 -0.2319929199218749 +0.067625 -0.437103271484375 -0.2319929199218749 +0.06775 -0.457244873046875 -0.2319929199218749 +0.06787500000000001 -0.47418212890625 -0.2319929199218749 +0.06800000000000001 -0.486541748046875 -0.2319929199218749 +0.068125 -0.49310302734375 -0.2319929199218749 +0.06825000000000001 -0.49456787109375 -0.2319929199218749 +0.068375 -0.491851806640625 -0.2319929199218749 +0.06850000000000001 -0.48297119140625 -0.2319929199218749 +0.06862500000000001 -0.4696044921875 -0.2319929199218749 +0.06875 -0.45318603515625 -0.2319929199218749 +0.06887500000000001 -0.429473876953125 -0.2319929199218749 +0.069 -0.40478515625 -0.2319929199218749 +0.06912500000000001 -0.372467041015625 -0.2319929199218749 +0.06925000000000001 -0.336822509765625 -0.2319929199218749 +0.06937500000000001 -0.30157470703125 -0.2319929199218749 +0.06950000000000001 -0.258758544921875 -0.2319929199218749 +0.069625 -0.218353271484375 -0.2319929199218749 +0.06975 -0.171173095703125 -0.2319929199218749 +0.06987500000000001 -0.121856689453125 -0.2319929199218749 +0.07000000000000001 -0.07666015625 -0.2319929199218749 +0.070125 -0.02557373046875 -0.2319929199218749 +0.07025000000000001 0.02044677734375 -0.2319929199218749 +0.07037500000000001 0.0714111328125 -0.2319929199218749 +0.07050000000000001 0.121307373046875 -0.2319929199218749 +0.070625 0.165252685546875 -0.2319929199218749 +0.07075 0.211822509765625 -0.2319929199218749 +0.07087500000000001 0.252105712890625 -0.2319929199218749 +0.07100000000000001 0.294219970703125 -0.2319929199218749 +0.07112500000000001 0.332305908203125 -0.2319929199218749 +0.07125000000000002 0.3641357421875 -0.2319929199218749 +0.07137500000000001 0.395721435546875 -0.2319929199218749 +0.0715 0.419342041015625 -0.2319929199218749 +0.07162500000000001 0.442352294921875 -0.2319929199218749 +0.07175000000000001 0.459228515625 -0.2319929199218749 +0.07187500000000001 0.471221923828125 -0.2319929199218749 +0.07200000000000001 0.47967529296875 -0.2319929199218749 +0.07212499999999999 0.48138427734375 -0.2319929199218749 +0.07225 0.47979736328125 -0.2319929199218749 +0.07237499999999999 0.4715576171875 -0.2319929199218749 +0.0725 0.460968017578125 -0.2319929199218749 +0.07262499999999999 0.4444580078125 -0.2319929199218749 +0.07274999999999999 0.424102783203125 -0.2319929199218749 +0.072875 0.398590087890625 -0.2319929199218749 +0.073 0.368743896484375 -0.2319929199218749 +0.073125 0.3372802734375 -0.2319929199218749 +0.07324999999999999 0.3001708984375 -0.2319929199218749 +0.07337499999999999 0.2630615234375 -0.2319929199218749 +0.0735 0.220245361328125 -0.2319929199218749 +0.073625 0.175018310546875 -0.2319929199218749 +0.07374999999999999 0.132171630859375 -0.2319929199218749 +0.073875 0.0838623046875 -0.2319929199218749 +0.074 0.03961181640625 -0.2319929199218749 +0.074125 -0.0098876953125 -0.2319929199218749 +0.07424999999999999 -0.059173583984375 -0.2319929199218749 +0.07437499999999999 -0.10260009765625 -0.2319929199218749 +0.0745 -0.1500244140625 -0.2319929199218749 +0.07462499999999999 -0.191314697265625 -0.2319929199218749 +0.07475 -0.234283447265625 -0.2319929199218749 +0.07487500000000001 -0.275421142578125 -0.2319929199218749 +0.075 -0.30865478515625 -0.2319929199218749 +0.07512499999999999 -0.343536376953125 -0.2319929199218749 +0.07524999999999999 -0.37176513671875 -0.2319929199218749 +0.075375 -0.3975830078125 -0.2319929199218749 +0.0755 -0.42059326171875 -0.2319929199218749 +0.075625 -0.437347412109375 -0.2319929199218749 +0.07574999999999999 -0.44952392578125 -0.2319929199218749 +0.075875 -0.457916259765625 -0.2319929199218749 +0.076 -0.460479736328125 -0.2319929199218749 +0.076125 -0.4599609375 -0.2319929199218749 +0.07625 -0.4552001953125 -0.2319929199218749 +0.07637499999999999 -0.44317626953125 -0.2319929199218749 +0.0765 -0.4300537109375 -0.2319929199218749 +0.076625 -0.409088134765625 -0.2319929199218749 +0.07675 -0.3856201171875 -0.2319929199218749 +0.076875 -0.360870361328125 -0.2319929199218749 +0.077 -0.32806396484375 -0.2319929199218749 +0.077125 -0.2969970703125 -0.2319929199218749 +0.07725 -0.2593994140625 -0.2319929199218749 +0.07737499999999999 -0.217926025390625 -0.2319929199218749 +0.0775 -0.179656982421875 -0.2319929199218749 +0.077625 -0.13458251953125 -0.2319929199218749 +0.07774999999999999 -0.09356689453125 -0.2319929199218749 +0.07787500000000001 -0.04705810546875 -0.2319929199218749 0.07800000000000001 0.0 -0.2319929199218749 -0.078125 0.084228515625 -0.2319929199218749 -0.07824999999999999 0.176025390625 -0.2319929199218749 -0.07837499999999999 0.2574462890625 -0.2319929199218749 -0.07850000000000001 0.345184326171875 -0.2319929199218749 -0.078625 0.426849365234375 -0.2319929199218749 -0.07875 0.498016357421875 -0.2319929199218749 -0.07887500000000001 0.571868896484375 -0.2319929199218749 -0.079 0.629547119140625 -0.2319929199218749 -0.079125 0.690521240234375 -0.2319929199218749 -0.07925 0.73974609375 -0.2319929199218749 -0.079375 0.7806396484375 -0.2319929199218749 -0.0795 0.81793212890625 -0.2319929199218749 -0.079625 0.838958740234375 -0.2319929199218749 -0.07975 0.854522705078125 -0.2319929199218749 -0.07987500000000001 0.854583740234375 -0.2319929199218749 -0.08 0.854583740234375 -0.2319929199218749 -0.08012499999999999 0.854522705078125 -0.2319929199218749 -0.08025 0.83782958984375 -0.2319929199218749 -0.080375 0.812713623046875 -0.2319929199218749 -0.08050000000000001 0.778656005859375 -0.2319929199218749 -0.080625 0.736083984375 -0.2319929199218749 -0.08074999999999999 0.686553955078125 -0.2319929199218749 -0.080875 0.631439208984375 -0.2319929199218749 -0.08100000000000001 0.568572998046875 -0.2319929199218749 -0.08112500000000001 0.49945068359375 -0.2319929199218749 -0.08125 0.429718017578125 -0.2319929199218749 -0.08137499999999999 0.351409912109375 -0.2319929199218749 -0.0815 0.277587890625 -0.2319929199218749 -0.081625 0.191436767578125 -0.2319929199218749 -0.08175000000000001 0.10504150390625 -0.2319929199218749 -0.081875 0.026123046875 -0.2319929199218749 -0.08200000000000001 -0.060943603515625 -0.2319929199218749 -0.082125 -0.138824462890625 -0.2319929199218749 -0.08225 -0.222320556640625 -0.2319929199218749 -0.08237500000000001 -0.30438232421875 -0.2319929199218749 -0.0825 -0.3726806640625 -0.2319929199218749 -0.08262500000000001 -0.4471435546875 -0.2319929199218749 -0.08275 -0.509918212890625 -0.2319929199218749 -0.08287500000000001 -0.5701904296875 -0.2319929199218749 -0.08300000000000001 -0.6279296875 -0.2319929199218749 -0.083125 -0.674041748046875 -0.2319929199218749 -0.08324999999999999 -0.712860107421875 -0.2319929199218749 -0.083375 -0.74566650390625 -0.2319929199218749 -0.08350000000000001 -0.768402099609375 -0.2319929199218749 -0.08362500000000001 -0.788421630859375 -0.2319929199218749 -0.08375 -0.799072265625 -0.2319929199218749 -0.08387500000000001 -0.79632568359375 -0.2319929199218749 -0.084 -0.7919921875 -0.2319929199218749 -0.08412500000000001 -0.772735595703125 -0.2319929199218749 -0.08425000000000001 -0.7513427734375 -0.2319929199218749 -0.084375 -0.72503662109375 -0.2319929199218749 -0.08450000000000001 -0.682647705078125 -0.2319929199218749 -0.084625 -0.643402099609375 -0.2319929199218749 -0.08475 -0.593109130859375 -0.2319929199218749 -0.08487500000000001 -0.5318603515625 -0.2319929199218749 -0.085 -0.476226806640625 -0.2319929199218749 -0.08512500000000001 -0.40594482421875 -0.2319929199218749 -0.08525 -0.342529296875 -0.2319929199218749 -0.085375 -0.26849365234375 -0.2319929199218749 -0.08550000000000001 -0.18988037109375 -0.2319929199218749 -0.085625 -0.119415283203125 -0.2319929199218749 -0.08575000000000001 -0.03955078125 -0.2319929199218749 -0.08587500000000002 0.031646728515625 -0.2319929199218749 -0.08600000000000001 0.110504150390625 -0.2319929199218749 -0.08612500000000001 0.18646240234375 -0.2319929199218749 -0.08625 0.253997802734375 -0.2319929199218749 -0.08637499999999999 0.326385498046875 -0.2319929199218749 -0.0865 0.3848876953125 -0.2319929199218749 -0.08662500000000001 0.449188232421875 -0.2319929199218749 -0.08675000000000001 0.503753662109375 -0.2319929199218749 -0.08687500000000002 0.552001953125 -0.2319929199218749 -0.08700000000000001 0.599884033203125 -0.2319929199218749 -0.087125 0.631195068359375 -0.2319929199218749 -0.08725000000000001 0.66583251953125 -0.2319929199218749 -0.08737500000000001 0.686279296875 -0.2319929199218749 -0.08750000000000002 0.7042236328125 -0.2319929199218749 -0.08762500000000001 0.716796875 -0.2319929199218749 -0.08775 0.71417236328125 -0.2319929199218749 -0.08787500000000001 0.71185302734375 -0.2319929199218749 -0.08799999999999999 0.701690673828125 -0.2319929199218749 -0.088125 0.678863525390625 -0.2319929199218749 -0.08824999999999999 0.654541015625 -0.2319929199218749 -0.08837499999999999 0.619903564453125 -0.2319929199218749 -0.0885 0.582611083984375 -0.2319929199218749 -0.08862500000000001 0.538970947265625 -0.2319929199218749 -0.08875 0.48931884765625 -0.2319929199218749 -0.08887499999999999 0.43548583984375 -0.2319929199218749 -0.08899999999999999 0.3829345703125 -0.2319929199218749 -0.089125 0.317047119140625 -0.2319929199218749 -0.08924999999999999 0.251922607421875 -0.2319929199218749 -0.089375 0.18878173828125 -0.2319929199218749 -0.08949999999999999 0.11981201171875 -0.2319929199218749 -0.089625 0.05657958984375 -0.2319929199218749 -0.08975 -0.01397705078125 -0.2319929199218749 -0.08987499999999999 -0.08380126953125 -0.2319929199218749 -0.09 -0.144195556640625 -0.2319929199218749 -0.09012499999999999 -0.21087646484375 -0.2319929199218749 -0.09025 -0.268890380859375 -0.2319929199218749 -0.090375 -0.326629638671875 -0.2319929199218749 -0.09050000000000001 -0.38397216796875 -0.2319929199218749 -0.090625 -0.432037353515625 -0.2319929199218749 -0.09074999999999999 -0.475006103515625 -0.2319929199218749 -0.09087499999999999 -0.51397705078125 -0.2319929199218749 -0.091 -0.54510498046875 -0.2319929199218749 -0.09112500000000001 -0.576629638671875 -0.2319929199218749 -0.09125 -0.599609375 -0.2319929199218749 -0.09137499999999999 -0.61102294921875 -0.2319929199218749 -0.0915 -0.622406005859375 -0.2319929199218749 -0.091625 -0.6204833984375 -0.2319929199218749 -0.09175000000000001 -0.61981201171875 -0.2319929199218749 -0.091875 -0.613372802734375 -0.2319929199218749 -0.09199999999999999 -0.591888427734375 -0.2319929199218749 -0.092125 -0.5743408203125 -0.2319929199218749 -0.09225 -0.548858642578125 -0.2319929199218749 -0.09237499999999999 -0.510345458984375 -0.2319929199218749 -0.0925 -0.477630615234375 -0.2319929199218749 -0.09262499999999999 -0.43023681640625 -0.2319929199218749 -0.09275 -0.389495849609375 -0.2319929199218749 -0.092875 -0.340179443359375 -0.2319929199218749 -0.09299999999999999 -0.2830810546875 -0.2319929199218749 -0.093125 -0.233367919921875 -0.2319929199218749 -0.09324999999999999 -0.17315673828125 -0.2319929199218749 -0.093375 -0.120361328125 -0.2319929199218749 -0.09350000000000001 -0.06048583984375 -0.2319929199218749 +0.078125 0.0421142578125 -0.2319929199218749 +0.07824999999999999 0.0880126953125 -0.2319929199218749 +0.07837499999999999 0.12872314453125 -0.2319929199218749 +0.07850000000000001 0.172576904296875 -0.2319929199218749 +0.078625 0.213409423828125 -0.2319929199218749 +0.07875 0.248992919921875 -0.2319929199218749 +0.07887500000000001 0.285919189453125 -0.2319929199218749 +0.079 0.31475830078125 -0.2319929199218749 +0.079125 0.345245361328125 -0.2319929199218749 +0.07925 0.369873046875 -0.2319929199218749 +0.079375 0.39031982421875 -0.2319929199218749 +0.0795 0.408966064453125 -0.2319929199218749 +0.079625 0.419464111328125 -0.2319929199218749 +0.07975 0.429443359375 -0.2319929199218749 +0.07987500000000001 0.43206787109375 -0.2319929199218749 +0.08 0.432708740234375 -0.2319929199218749 +0.08012499999999999 0.428924560546875 -0.2319929199218749 +0.08025 0.418914794921875 -0.2319929199218749 +0.080375 0.406341552734375 -0.2319929199218749 +0.08050000000000001 0.389312744140625 -0.2319929199218749 +0.080625 0.3680419921875 -0.2319929199218749 +0.08074999999999999 0.34326171875 -0.2319929199218749 +0.080875 0.315704345703125 -0.2319929199218749 +0.08100000000000001 0.284271240234375 -0.2319929199218749 +0.08112500000000001 0.249725341796875 -0.2319929199218749 +0.08125 0.21484375 -0.2319929199218749 +0.08137499999999999 0.175689697265625 -0.2319929199218749 +0.0815 0.1387939453125 -0.2319929199218749 +0.081625 0.095703125 -0.2319929199218749 +0.08175000000000001 0.052520751953125 -0.2319929199218749 +0.081875 0.0130615234375 -0.2319929199218749 +0.08200000000000001 -0.030487060546875 -0.2319929199218749 +0.082125 -0.069427490234375 -0.2319929199218749 +0.08225 -0.111175537109375 -0.2319929199218749 +0.08237500000000001 -0.1522216796875 -0.2319929199218749 +0.0825 -0.186370849609375 -0.2319929199218749 +0.08262500000000001 -0.223602294921875 -0.2319929199218749 +0.08275 -0.254974365234375 -0.2319929199218749 +0.08287500000000001 -0.285125732421875 -0.2319929199218749 +0.08300000000000001 -0.313995361328125 -0.2319929199218749 +0.083125 -0.3370361328125 -0.2319929199218749 +0.08324999999999999 -0.3564453125 -0.2319929199218749 +0.083375 -0.37286376953125 -0.2319929199218749 +0.08350000000000001 -0.38421630859375 -0.2319929199218749 +0.08362500000000001 -0.39422607421875 -0.2319929199218749 +0.08375 -0.399566650390625 -0.2319929199218749 +0.08387500000000001 -0.398193359375 -0.2319929199218749 +0.084 -0.396026611328125 -0.2319929199218749 +0.08412500000000001 -0.386383056640625 -0.2319929199218749 +0.08425000000000001 -0.375701904296875 -0.2319929199218749 +0.084375 -0.362548828125 -0.2319929199218749 +0.08450000000000001 -0.341339111328125 -0.2319929199218749 +0.084625 -0.32171630859375 -0.2319929199218749 +0.08475 -0.29656982421875 -0.2319929199218749 +0.08487500000000001 -0.265960693359375 -0.2319929199218749 +0.085 -0.238128662109375 -0.2319929199218749 +0.08512500000000001 -0.2030029296875 -0.2319929199218749 +0.08525 -0.171295166015625 -0.2319929199218749 +0.085375 -0.13427734375 -0.2319929199218749 +0.08550000000000001 -0.094970703125 -0.2319929199218749 +0.085625 -0.059722900390625 -0.2319929199218749 +0.08575000000000001 -0.019805908203125 -0.2319929199218749 +0.08587500000000002 0.01580810546875 -0.2319929199218749 +0.08600000000000001 0.05523681640625 -0.2319929199218749 +0.08612500000000001 0.093231201171875 -0.2319929199218749 +0.08625 0.126983642578125 -0.2319929199218749 +0.08637499999999999 0.163177490234375 -0.2319929199218749 +0.0865 0.19244384765625 -0.2319929199218749 +0.08662500000000001 0.224578857421875 -0.2319929199218749 +0.08675000000000001 0.251861572265625 -0.2319929199218749 +0.08687500000000002 0.2760009765625 -0.2319929199218749 +0.08700000000000001 0.2999267578125 -0.2319929199218749 +0.087125 0.315582275390625 -0.2319929199218749 +0.08725000000000001 0.332916259765625 -0.2319929199218749 +0.08737500000000001 0.3431396484375 -0.2319929199218749 +0.08750000000000002 0.35211181640625 -0.2319929199218749 +0.08762500000000001 0.3583984375 -0.2319929199218749 +0.08775 0.357086181640625 -0.2319929199218749 +0.08787500000000001 0.355926513671875 -0.2319929199218749 +0.08799999999999999 0.350830078125 -0.2319929199218749 +0.088125 0.33941650390625 -0.2319929199218749 +0.08824999999999999 0.3272705078125 -0.2319929199218749 +0.08837499999999999 0.3099365234375 -0.2319929199218749 +0.0885 0.291290283203125 -0.2319929199218749 +0.08862500000000001 0.26947021484375 -0.2319929199218749 +0.08875 0.244659423828125 -0.2319929199218749 +0.08887499999999999 0.217742919921875 -0.2319929199218749 +0.08899999999999999 0.19146728515625 -0.2319929199218749 +0.089125 0.15850830078125 -0.2319929199218749 +0.08924999999999999 0.125946044921875 -0.2319929199218749 +0.089375 0.094390869140625 -0.2319929199218749 +0.08949999999999999 0.059906005859375 -0.2319929199218749 +0.089625 0.028289794921875 -0.2319929199218749 +0.08975 -0.00701904296875 -0.2319929199218749 +0.08987499999999999 -0.04193115234375 -0.2319929199218749 +0.09 -0.072113037109375 -0.2319929199218749 +0.09012499999999999 -0.10546875 -0.2319929199218749 +0.09025 -0.13446044921875 -0.2319929199218749 +0.090375 -0.163330078125 -0.2319929199218749 +0.09050000000000001 -0.1920166015625 -0.2319929199218749 +0.090625 -0.216033935546875 -0.2319929199218749 +0.09074999999999999 -0.237518310546875 -0.2319929199218749 +0.09087499999999999 -0.25701904296875 -0.2319929199218749 +0.091 -0.2725830078125 -0.2319929199218749 +0.09112500000000001 -0.288330078125 -0.2319929199218749 +0.09125 -0.299835205078125 -0.2319929199218749 +0.09137499999999999 -0.3055419921875 -0.2319929199218749 +0.0915 -0.31121826171875 -0.2319929199218749 +0.091625 -0.310272216796875 -0.2319929199218749 +0.09175000000000001 -0.3099365234375 -0.2319929199218749 +0.091875 -0.30670166015625 -0.2319929199218749 +0.09199999999999999 -0.29595947265625 -0.2319929199218749 +0.092125 -0.287200927734375 -0.2319929199218749 +0.09225 -0.274444580078125 -0.2319929199218749 +0.09237499999999999 -0.25518798828125 -0.2319929199218749 +0.0925 -0.23883056640625 -0.2319929199218749 +0.09262499999999999 -0.21514892578125 -0.2319929199218749 +0.09275 -0.19476318359375 -0.2319929199218749 +0.092875 -0.17010498046875 -0.2319929199218749 +0.09299999999999999 -0.141571044921875 -0.2319929199218749 +0.093125 -0.11669921875 -0.2319929199218749 +0.09324999999999999 -0.08660888671875 -0.2319929199218749 +0.093375 -0.060211181640625 -0.2319929199218749 +0.09350000000000001 -0.0302734375 -0.2319929199218749 0.09362500000000001 0.0 -0.2319929199218749 -0.09375 0.05364990234375 -0.2319929199218749 -0.09387499999999999 0.11273193359375 -0.2319929199218749 -0.09399999999999999 0.162384033203125 -0.2319929199218749 -0.094125 0.217742919921875 -0.2319929199218749 -0.09425000000000001 0.266510009765625 -0.2319929199218749 -0.094375 0.310943603515625 -0.2319929199218749 -0.09450000000000001 0.357086181640625 -0.2319929199218749 -0.094625 0.389068603515625 -0.2319929199218749 -0.09475 0.4267578125 -0.2319929199218749 -0.09487500000000001 0.45977783203125 -0.2319929199218749 -0.095 0.477325439453125 -0.2319929199218749 -0.09512500000000001 0.5001220703125 -0.2319929199218749 -0.09525 0.50738525390625 -0.2319929199218749 -0.095375 0.519439697265625 -0.2319929199218749 -0.09550000000000001 0.525787353515625 -0.2319929199218749 -0.095625 0.51763916015625 -0.2319929199218749 -0.09574999999999999 0.51312255859375 -0.2319929199218749 -0.095875 0.4954833984375 -0.2319929199218749 -0.096 0.480621337890625 0.02399926757812504 -0.09612500000000001 0.460479736328125 0.02399926757812504 -0.09625 0.430267333984375 0.02399926757812504 -0.09637499999999999 0.40130615234375 0.02399926757812504 -0.0965 0.364715576171875 0.02399926757812504 -0.09662500000000001 0.328399658203125 0.02399926757812504 -0.09675000000000001 0.2830810546875 0.02399926757812504 -0.096875 0.245147705078125 0.02399926757812504 -0.09699999999999999 0.1966552734375 0.02399926757812504 -0.097125 0.15533447265625 0.02399926757812504 -0.09725 0.105743408203125 0.02399926757812504 -0.09737500000000001 0.058013916015625 0.02399926757812504 -0.0975 0.01422119140625 0.02399926757812504 -0.09762500000000001 -0.033203125 0.02399926757812504 -0.09775 -0.075653076171875 0.02399926757812504 -0.097875 -0.1195068359375 0.02399926757812504 -0.09800000000000001 -0.163604736328125 0.02399926757812504 -0.098125 -0.197509765625 0.02399926757812504 -0.09825000000000001 -0.236968994140625 0.02399926757812504 -0.098375 -0.264404296875 0.02399926757812504 -0.09850000000000001 -0.297821044921875 0.02399926757812504 -0.09862500000000001 -0.3206787109375 0.02399926757812504 -0.09875 -0.344207763671875 0.02399926757812504 -0.09887499999999999 -0.358367919921875 0.02399926757812504 -0.099 -0.3748779296875 0.02399926757812504 -0.09912500000000001 -0.3892822265625 0.02399926757812504 -0.09925000000000001 -0.3900146484375 0.02399926757812504 -0.099375 -0.395294189453125 0.02399926757812504 -0.09950000000000001 -0.38739013671875 0.02399926757812504 -0.099625 -0.385284423828125 0.02399926757812504 -0.09975000000000001 -0.369476318359375 0.02399926757812504 -0.09987500000000001 -0.3592529296875 0.02399926757812504 -0.1 -0.3377685546875 0.02399926757812504 -0.100125 -0.320648193359375 0.02399926757812504 -0.10025 -0.294189453125 0.02399926757812504 -0.100375 -0.271209716796875 0.02399926757812504 -0.1005 -0.2452392578125 0.02399926757812504 -0.100625 -0.21356201171875 0.02399926757812504 -0.10075 -0.18359375 0.02399926757812504 -0.100875 -0.150543212890625 0.02399926757812504 -0.101 -0.118011474609375 0.02399926757812504 -0.101125 -0.08172607421875 0.02399926757812504 -0.10125 -0.0513916015625 0.02399926757812504 -0.101375 -0.016632080078125 0.02399926757812504 -0.1015 0.0133056640625 0.02399926757812504 -0.101625 0.045074462890625 0.02399926757812504 -0.10175 0.0767822265625 0.02399926757812504 -0.101875 0.101226806640625 0.02399926757812504 -0.102 0.130096435546875 0.02399926757812504 -0.102125 0.15484619140625 0.02399926757812504 -0.10225 0.1746826171875 0.02399926757812504 -0.102375 0.197784423828125 0.02399926757812504 -0.1025 0.209197998046875 0.02399926757812504 -0.102625 0.227325439453125 0.02399926757812504 -0.10275 0.232818603515625 0.02399926757812504 -0.102875 0.245574951171875 0.02399926757812504 -0.103 0.246063232421875 0.02399926757812504 -0.103125 0.25250244140625 0.02399926757812504 -0.10325 0.2469482421875 0.02399926757812504 -0.103375 0.24853515625 0.02399926757812504 -0.1035 0.24774169921875 0.02399926757812504 -0.103625 0.2342529296875 0.02399926757812504 -0.10375 0.22900390625 0.02399926757812504 -0.103875 0.21136474609375 0.02399926757812504 -0.104 0.202301025390625 0.02399926757812504 -0.104125 0.181610107421875 0.02399926757812504 -0.10425 0.167999267578125 0.02399926757812504 -0.104375 0.146942138671875 0.02399926757812504 -0.1045 0.130767822265625 0.02399926757812504 -0.104625 0.10931396484375 0.02399926757812504 -0.10475 0.091522216796875 0.02399926757812504 -0.104875 0.06890869140625 0.02399926757812504 -0.105 0.052215576171875 0.02399926757812504 -0.105125 0.033111572265625 0.02399926757812504 -0.10525 0.0147705078125 0.02399926757812504 -0.105375 -0.003662109375 0.02399926757812504 -0.1055 -0.020843505859375 0.02399926757812504 -0.105625 -0.03631591796875 0.02399926757812504 -0.10575 -0.049835205078125 0.02399926757812504 -0.105875 -0.063568115234375 0.02399926757812504 -0.106 -0.072967529296875 0.02399926757812504 -0.106125 -0.085784912109375 0.02399926757812504 -0.10625 -0.089691162109375 0.02399926757812504 -0.106375 -0.099822998046875 0.02399926757812504 -0.1065 -0.1080322265625 0.02399926757812504 -0.106625 -0.10711669921875 0.02399926757812504 -0.10675 -0.11334228515625 0.02399926757812504 -0.106875 -0.10809326171875 0.02399926757812504 -0.107 -0.111572265625 0.02399926757812504 -0.107125 -0.103363037109375 0.02399926757812504 -0.10725 -0.1043701171875 0.02399926757812504 -0.107375 -0.093841552734375 0.02399926757812504 -0.1075 -0.092864990234375 0.02399926757812504 -0.107625 -0.08074951171875 0.02399926757812504 -0.10775 -0.078338623046875 0.02399926757812504 -0.107875 -0.065521240234375 0.02399926757812504 -0.108 -0.061767578125 0.02399926757812504 -0.108125 -0.05780029296875 0.02399926757812504 -0.10825 -0.045257568359375 0.02399926757812504 -0.108375 -0.040985107421875 0.02399926757812504 -0.1085 -0.029815673828125 0.02399926757812504 -0.108625 -0.025146484375 0.02399926757812504 -0.10875 -0.016571044921875 0.02399926757812504 -0.108875 -0.012481689453125 0.02399926757812504 -0.109 -0.0064697265625 0.02399926757812504 -0.109125 -0.00323486328125 0.02399926757812504 +0.09375 0.026824951171875 -0.2319929199218749 +0.09387499999999999 0.056365966796875 -0.2319929199218749 +0.09399999999999999 0.0811767578125 -0.2319929199218749 +0.094125 0.108856201171875 -0.2319929199218749 +0.09425000000000001 0.13323974609375 -0.2319929199218749 +0.094375 0.15545654296875 -0.2319929199218749 +0.09450000000000001 0.17852783203125 -0.2319929199218749 +0.094625 0.19451904296875 -0.2319929199218749 +0.09475 0.21337890625 -0.2319929199218749 +0.09487500000000001 0.229888916015625 -0.2319929199218749 +0.095 0.2386474609375 -0.2319929199218749 +0.09512500000000001 0.25006103515625 -0.2319929199218749 +0.09525 0.253692626953125 -0.2319929199218749 +0.095375 0.25970458984375 -0.2319929199218749 +0.09550000000000001 0.26287841796875 -0.2319929199218749 +0.095625 0.258819580078125 -0.2319929199218749 +0.09574999999999999 0.256561279296875 -0.2319929199218749 +0.095875 0.24774169921875 -0.2319929199218749 +0.096 0.24029541015625 0.02399926757812504 +0.09612500000000001 0.230224609375 0.02399926757812504 +0.09625 0.215118408203125 0.02399926757812504 +0.09637499999999999 0.200653076171875 0.02399926757812504 +0.0965 0.182342529296875 0.02399926757812504 +0.09662500000000001 0.1641845703125 0.02399926757812504 +0.09675000000000001 0.14154052734375 0.02399926757812504 +0.096875 0.12255859375 0.02399926757812504 +0.09699999999999999 0.09832763671875 0.02399926757812504 +0.097125 0.077667236328125 0.02399926757812504 +0.09725 0.0528564453125 0.02399926757812504 +0.09737500000000001 0.02899169921875 0.02399926757812504 +0.0975 0.007110595703125 0.02399926757812504 +0.09762500000000001 -0.016632080078125 0.02399926757812504 +0.09775 -0.037841796875 0.02399926757812504 +0.097875 -0.059783935546875 0.02399926757812504 +0.09800000000000001 -0.081817626953125 0.02399926757812504 +0.098125 -0.098785400390625 0.02399926757812504 +0.09825000000000001 -0.118499755859375 0.02399926757812504 +0.098375 -0.132232666015625 0.02399926757812504 +0.09850000000000001 -0.14892578125 0.02399926757812504 +0.09862500000000001 -0.160369873046875 0.02399926757812504 +0.09875 -0.172119140625 0.02399926757812504 +0.09887499999999999 -0.17919921875 0.02399926757812504 +0.099 -0.187469482421875 0.02399926757812504 +0.09912500000000001 -0.194671630859375 0.02399926757812504 +0.09925000000000001 -0.195037841796875 0.02399926757812504 +0.099375 -0.197662353515625 0.02399926757812504 +0.09950000000000001 -0.1937255859375 0.02399926757812504 +0.099625 -0.192657470703125 0.02399926757812504 +0.09975000000000001 -0.18475341796875 0.02399926757812504 +0.09987500000000001 -0.179656982421875 0.02399926757812504 +0.1 -0.168914794921875 0.02399926757812504 +0.100125 -0.16033935546875 0.02399926757812504 +0.10025 -0.147125244140625 0.02399926757812504 +0.100375 -0.1356201171875 0.02399926757812504 +0.1005 -0.122650146484375 0.02399926757812504 +0.100625 -0.1068115234375 0.02399926757812504 +0.10075 -0.091827392578125 0.02399926757812504 +0.100875 -0.075286865234375 0.02399926757812504 +0.101 -0.05902099609375 0.02399926757812504 +0.101125 -0.0408935546875 0.02399926757812504 +0.10125 -0.025726318359375 0.02399926757812504 +0.101375 -0.008331298828125 0.02399926757812504 +0.1015 0.00665283203125 0.02399926757812504 +0.101625 0.02252197265625 0.02399926757812504 +0.10175 0.03839111328125 0.02399926757812504 +0.101875 0.05059814453125 0.02399926757812504 +0.102 0.065032958984375 0.02399926757812504 +0.102125 0.077423095703125 0.02399926757812504 +0.10225 0.08734130859375 0.02399926757812504 +0.102375 0.098876953125 0.02399926757812504 +0.1025 0.104583740234375 0.02399926757812504 +0.102625 0.1136474609375 0.02399926757812504 +0.10275 0.11639404296875 0.02399926757812504 +0.102875 0.122772216796875 0.02399926757812504 +0.103 0.123016357421875 0.02399926757812504 +0.103125 0.126251220703125 0.02399926757812504 +0.10325 0.12347412109375 0.02399926757812504 +0.103375 0.124267578125 0.02399926757812504 +0.1035 0.123870849609375 0.02399926757812504 +0.103625 0.11712646484375 0.02399926757812504 +0.10375 0.114501953125 0.02399926757812504 +0.103875 0.105682373046875 0.02399926757812504 +0.104 0.10113525390625 0.02399926757812504 +0.104125 0.090789794921875 0.02399926757812504 +0.10425 0.083984375 0.02399926757812504 +0.104375 0.073455810546875 0.02399926757812504 +0.1045 0.06536865234375 0.02399926757812504 +0.104625 0.054656982421875 0.02399926757812504 +0.10475 0.045745849609375 0.02399926757812504 +0.104875 0.034454345703125 0.02399926757812504 +0.105 0.026092529296875 0.02399926757812504 +0.105125 0.01654052734375 0.02399926757812504 +0.10525 0.00738525390625 0.02399926757812504 +0.105375 -0.001861572265625 0.02399926757812504 +0.1055 -0.01043701171875 0.02399926757812504 +0.105625 -0.0181884765625 0.02399926757812504 +0.10575 -0.024932861328125 0.02399926757812504 +0.105875 -0.03179931640625 0.02399926757812504 +0.106 -0.0364990234375 0.02399926757812504 +0.106125 -0.04290771484375 0.02399926757812504 +0.10625 -0.04486083984375 0.02399926757812504 +0.106375 -0.0499267578125 0.02399926757812504 +0.1065 -0.054046630859375 0.02399926757812504 +0.106625 -0.0535888671875 0.02399926757812504 +0.10675 -0.05670166015625 0.02399926757812504 +0.106875 -0.0540771484375 0.02399926757812504 +0.107 -0.055816650390625 0.02399926757812504 +0.107125 -0.05169677734375 0.02399926757812504 +0.10725 -0.052215576171875 0.02399926757812504 +0.107375 -0.04693603515625 0.02399926757812504 +0.1075 -0.04644775390625 0.02399926757812504 +0.107625 -0.0404052734375 0.02399926757812504 +0.10775 -0.0391845703125 0.02399926757812504 +0.107875 -0.03277587890625 0.02399926757812504 +0.108 -0.030914306640625 0.02399926757812504 +0.108125 -0.0289306640625 0.02399926757812504 +0.10825 -0.02264404296875 0.02399926757812504 +0.108375 -0.0205078125 0.02399926757812504 +0.1085 -0.014923095703125 0.02399926757812504 +0.108625 -0.012603759765625 0.02399926757812504 +0.10875 -0.00830078125 0.02399926757812504 +0.108875 -0.006256103515625 0.02399926757812504 +0.109 -0.003265380859375 0.02399926757812504 +0.109125 -0.00164794921875 0.02399926757812504 0.10925 0.0 0.02399926757812504 -0.109375 0.001922607421875 0.02399926757812504 -0.1095 0.00408935546875 0.02399926757812504 -0.109625 0.00299072265625 0.02399926757812504 -0.10975 0.003997802734375 0.02399926757812504 +0.109375 0.000946044921875 0.02399926757812504 +0.1095 0.002044677734375 0.02399926757812504 +0.109625 0.001495361328125 0.02399926757812504 +0.10975 0.001983642578125 0.02399926757812504 0.109875 0.0 0.02399926757812504 0.11 0.0 0.02399926757812504 -0.110125 -0.0067138671875 0.02399926757812504 -0.11025 -0.0074462890625 0.02399926757812504 -0.110375 -0.016357421875 0.02399926757812504 -0.1105 -0.01763916015625 0.02399926757812504 -0.110625 -0.027923583984375 0.02399926757812504 -0.11075 -0.029266357421875 0.02399926757812504 -0.110875 -0.03021240234375 0.02399926757812504 -0.111 -0.041229248046875 0.02399926757812504 -0.111125 -0.041748046875 0.02399926757812504 -0.11125 -0.05224609375 0.02399926757812504 -0.111375 -0.051788330078125 0.02399926757812504 -0.1115 -0.061065673828125 0.02399926757812504 -0.111625 -0.059234619140625 0.02399926757812504 -0.11175 -0.066192626953125 0.02399926757812504 -0.111875 -0.062957763671875 0.02399926757812504 -0.112 -0.067108154296875 0.02399926757812504 -0.112125 -0.062103271484375 0.02399926757812504 -0.11225 -0.062896728515625 0.02399926757812504 -0.112375 -0.05523681640625 0.02399926757812504 -0.1125 -0.0478515625 0.02399926757812504 -0.112625 -0.04345703125 0.02399926757812504 -0.11275 -0.034332275390625 0.02399926757812504 -0.112875 -0.02618408203125 0.02399926757812504 -0.113 -0.01434326171875 0.02399926757812504 -0.113125 -0.003875732421875 0.02399926757812504 -0.11325 0.009124755859375 0.02399926757812504 -0.113375 0.0225830078125 0.02399926757812504 -0.1135 0.03643798828125 0.02399926757812504 -0.113625 0.0537109375 0.02399926757812504 -0.11375 0.066253662109375 0.02399926757812504 -0.113875 0.079498291015625 0.02399926757812504 -0.114 0.09710693359375 0.02399926757812504 -0.114125 0.109375 0.02399926757812504 -0.11425 0.12841796875 0.02399926757812504 -0.114375 0.137847900390625 0.02399926757812504 -0.1145 0.156005859375 0.02399926757812504 -0.114625 0.163177490234375 0.02399926757812504 -0.11475 0.179290771484375 0.02399926757812504 -0.114875 0.1839599609375 0.02399926757812504 -0.115 0.196685791015625 0.02399926757812504 -0.115125 0.19757080078125 0.02399926757812504 -0.11525 0.206695556640625 0.02399926757812504 -0.115375 0.203277587890625 0.02399926757812504 -0.1155 0.197662353515625 0.02399926757812504 -0.115625 0.200103759765625 0.02399926757812504 -0.11575 0.189971923828125 0.02399926757812504 -0.115875 0.18743896484375 0.02399926757812504 -0.116 0.17279052734375 0.02399926757812504 -0.116125 0.163238525390625 0.02399926757812504 -0.11625 0.146148681640625 0.02399926757812504 -0.116375 0.1309814453125 0.02399926757812504 -0.1165 0.110504150390625 0.02399926757812504 -0.116625 0.09014892578125 0.02399926757812504 -0.11675 0.064300537109375 0.02399926757812504 -0.116875 0.040435791015625 0.02399926757812504 -0.117 0.014007568359375 0.02399926757812504 -0.117125 -0.011199951171875 0.02399926757812504 -0.11725 -0.04071044921875 0.02399926757812504 -0.117375 -0.069305419921875 0.02399926757812504 -0.1175 -0.09783935546875 0.02399926757812504 -0.117625 -0.125732421875 0.02399926757812504 -0.11775 -0.15484619140625 0.02399926757812504 -0.117875 -0.18072509765625 0.02399926757812504 -0.118 -0.211456298828125 0.02399926757812504 -0.118125 -0.231719970703125 0.02399926757812504 -0.11825 -0.251800537109375 0.02399926757812504 -0.118375 -0.276153564453125 0.02399926757812504 -0.1185 -0.29132080078125 0.02399926757812504 -0.118625 -0.31268310546875 0.02399926757812504 -0.11875 -0.320831298828125 0.02399926757812504 -0.118875 -0.336395263671875 0.02399926757812504 -0.119 -0.33856201171875 0.02399926757812504 -0.119125 -0.347259521484375 0.02399926757812504 -0.11925 -0.342315673828125 0.02399926757812504 -0.119375 -0.34405517578125 0.02399926757812504 -0.1195 -0.33172607421875 0.02399926757812504 -0.119625 -0.326141357421875 0.02399926757812504 -0.11975 -0.306549072265625 0.02399926757812504 -0.119875 -0.2835693359375 0.02399926757812504 -0.12 -0.26708984375 0.02399926757812504 -0.120125 -0.237701416015625 0.02399926757812504 -0.12025 -0.21435546875 0.02399926757812504 -0.120375 -0.179443359375 0.02399926757812504 -0.1205 -0.146148681640625 0.02399926757812504 -0.120625 -0.110748291015625 0.02399926757812504 -0.12075 -0.07196044921875 0.02399926757812504 -0.120875 -0.033966064453125 0.02399926757812504 -0.121 0.0086669921875 0.02399926757812504 -0.121125 0.0521240234375 0.02399926757812504 -0.12125 0.09075927734375 0.02399926757812504 -0.121375 0.1357421875 0.02399926757812504 -0.1215 0.173095703125 0.02399926757812504 -0.121625 0.217559814453125 0.02399926757812504 -0.12175 0.2557373046875 0.02399926757812504 -0.121875 0.293975830078125 0.02399926757812504 -0.122 0.32720947265625 0.02399926757812504 -0.122125 0.36151123046875 0.02399926757812504 -0.12225 0.388214111328125 0.02399926757812504 -0.122375 0.419097900390625 0.02399926757812504 -0.1225 0.435791015625 0.02399926757812504 -0.122625 0.458831787109375 0.02399926757812504 -0.12275 0.4674072265625 0.02399926757812504 -0.122875 0.4720458984375 0.02399926757812504 -0.123 0.480712890625 0.02399926757812504 -0.123125 0.4757080078125 0.02399926757812504 -0.12325 0.474090576171875 0.02399926757812504 -0.123375 0.46002197265625 0.02399926757812504 -0.1235 0.44775390625 0.02399926757812504 -0.123625 0.422088623046875 0.02399926757812504 -0.12375 0.402130126953125 0.02399926757812504 -0.123875 0.3673095703125 0.02399926757812504 -0.124 0.338409423828125 0.02399926757812504 -0.124125 0.295562744140625 0.02399926757812504 -0.12425 0.249481201171875 0.02399926757812504 -0.124375 0.209197998046875 0.02399926757812504 -0.1245 0.157501220703125 0.02399926757812504 -0.124625 0.111328125 0.02399926757812504 -0.12475 0.05596923828125 0.02399926757812504 +0.110125 -0.003387451171875 0.02399926757812504 +0.11025 -0.003753662109375 0.02399926757812504 +0.110375 -0.008209228515625 0.02399926757812504 +0.1105 -0.00885009765625 0.02399926757812504 +0.110625 -0.01397705078125 0.02399926757812504 +0.11075 -0.0146484375 0.02399926757812504 +0.110875 -0.01513671875 0.02399926757812504 +0.111 -0.0206298828125 0.02399926757812504 +0.111125 -0.020904541015625 0.02399926757812504 +0.11125 -0.026153564453125 0.02399926757812504 +0.111375 -0.025909423828125 0.02399926757812504 +0.1115 -0.030548095703125 0.02399926757812504 +0.111625 -0.029632568359375 0.02399926757812504 +0.11175 -0.033111572265625 0.02399926757812504 +0.111875 -0.031494140625 0.02399926757812504 +0.112 -0.0335693359375 0.02399926757812504 +0.112125 -0.03106689453125 0.02399926757812504 +0.11225 -0.031463623046875 0.02399926757812504 +0.112375 -0.02764892578125 0.02399926757812504 +0.1125 -0.023956298828125 0.02399926757812504 +0.112625 -0.021759033203125 0.02399926757812504 +0.11275 -0.017181396484375 0.02399926757812504 +0.112875 -0.01312255859375 0.02399926757812504 +0.113 -0.0072021484375 0.02399926757812504 +0.113125 -0.001953125 0.02399926757812504 +0.11325 0.004547119140625 0.02399926757812504 +0.113375 0.01129150390625 0.02399926757812504 +0.1135 0.018218994140625 0.02399926757812504 +0.113625 0.02685546875 0.02399926757812504 +0.11375 0.033111572265625 0.02399926757812504 +0.113875 0.03973388671875 0.02399926757812504 +0.114 0.048553466796875 0.02399926757812504 +0.114125 0.0546875 0.02399926757812504 +0.11425 0.064208984375 0.02399926757812504 +0.114375 0.06890869140625 0.02399926757812504 +0.1145 0.0780029296875 0.02399926757812504 +0.114625 0.081573486328125 0.02399926757812504 +0.11475 0.089630126953125 0.02399926757812504 +0.114875 0.09197998046875 0.02399926757812504 +0.115 0.09832763671875 0.02399926757812504 +0.115125 0.098785400390625 0.02399926757812504 +0.11525 0.10333251953125 0.02399926757812504 +0.115375 0.10162353515625 0.02399926757812504 +0.1155 0.09881591796875 0.02399926757812504 +0.115625 0.10003662109375 0.02399926757812504 +0.11575 0.094970703125 0.02399926757812504 +0.115875 0.093719482421875 0.02399926757812504 +0.116 0.086395263671875 0.02399926757812504 +0.116125 0.08160400390625 0.02399926757812504 +0.11625 0.07305908203125 0.02399926757812504 +0.116375 0.06549072265625 0.02399926757812504 +0.1165 0.05523681640625 0.02399926757812504 +0.116625 0.045074462890625 0.02399926757812504 +0.11675 0.032135009765625 0.02399926757812504 +0.116875 0.02020263671875 0.02399926757812504 +0.117 0.006988525390625 0.02399926757812504 +0.117125 -0.005615234375 0.02399926757812504 +0.11725 -0.0203857421875 0.02399926757812504 +0.117375 -0.03466796875 0.02399926757812504 +0.1175 -0.0489501953125 0.02399926757812504 +0.117625 -0.062896728515625 0.02399926757812504 +0.11775 -0.07745361328125 0.02399926757812504 +0.117875 -0.09039306640625 0.02399926757812504 +0.118 -0.105743408203125 0.02399926757812504 +0.118125 -0.115875244140625 0.02399926757812504 +0.11825 -0.12591552734375 0.02399926757812504 +0.118375 -0.138092041015625 0.02399926757812504 +0.1185 -0.14569091796875 0.02399926757812504 +0.118625 -0.1563720703125 0.02399926757812504 +0.11875 -0.160430908203125 0.02399926757812504 +0.118875 -0.168212890625 0.02399926757812504 +0.119 -0.1693115234375 0.02399926757812504 +0.119125 -0.17364501953125 0.02399926757812504 +0.11925 -0.171173095703125 0.02399926757812504 +0.119375 -0.17205810546875 0.02399926757812504 +0.1195 -0.1658935546875 0.02399926757812504 +0.119625 -0.1630859375 0.02399926757812504 +0.11975 -0.153289794921875 0.02399926757812504 +0.119875 -0.141815185546875 0.02399926757812504 +0.12 -0.133575439453125 0.02399926757812504 +0.120125 -0.118865966796875 0.02399926757812504 +0.12025 -0.107208251953125 0.02399926757812504 +0.120375 -0.089752197265625 0.02399926757812504 +0.1205 -0.073089599609375 0.02399926757812504 +0.120625 -0.055389404296875 0.02399926757812504 +0.12075 -0.0360107421875 0.02399926757812504 +0.120875 -0.016998291015625 0.02399926757812504 +0.121 0.00433349609375 0.02399926757812504 +0.121125 0.02606201171875 0.02399926757812504 +0.12125 0.045379638671875 0.02399926757812504 +0.121375 0.06787109375 0.02399926757812504 +0.1215 0.0865478515625 0.02399926757812504 +0.121625 0.1087646484375 0.02399926757812504 +0.12175 0.12786865234375 0.02399926757812504 +0.121875 0.14697265625 0.02399926757812504 +0.122 0.163604736328125 0.02399926757812504 +0.122125 0.180755615234375 0.02399926757812504 +0.12225 0.194091796875 0.02399926757812504 +0.122375 0.20953369140625 0.02399926757812504 +0.1225 0.2178955078125 0.02399926757812504 +0.122625 0.229400634765625 0.02399926757812504 +0.12275 0.23370361328125 0.02399926757812504 +0.122875 0.23602294921875 0.02399926757812504 +0.123 0.2403564453125 0.02399926757812504 +0.123125 0.23785400390625 0.02399926757812504 +0.12325 0.237030029296875 0.02399926757812504 +0.123375 0.230010986328125 0.02399926757812504 +0.1235 0.223876953125 0.02399926757812504 +0.123625 0.211029052734375 0.02399926757812504 +0.12375 0.2010498046875 0.02399926757812504 +0.123875 0.18365478515625 0.02399926757812504 +0.124 0.169189453125 0.02399926757812504 +0.124125 0.14776611328125 0.02399926757812504 +0.12425 0.124725341796875 0.02399926757812504 +0.124375 0.104583740234375 0.02399926757812504 +0.1245 0.0787353515625 0.02399926757812504 +0.124625 0.0556640625 0.02399926757812504 +0.12475 0.027984619140625 0.02399926757812504 0.124875 0.0 0.02399926757812504 -0.125 -0.05120849609375 0.02399926757812504 -0.125125 -0.10931396484375 0.02399926757812504 -0.12525 -0.159881591796875 0.02399926757812504 -0.125375 -0.217742919921875 0.02399926757812504 -0.1255 -0.27069091796875 0.02399926757812504 -0.125625 -0.31585693359375 0.02399926757812504 -0.12575 -0.3682861328125 0.02399926757812504 -0.125875 -0.407684326171875 0.02399926757812504 -0.126 -0.453887939453125 0.02399926757812504 -0.126125 -0.489013671875 0.02399926757812504 -0.12625 -0.523590087890625 0.02399926757812504 -0.126375 -0.548583984375 0.02399926757812504 -0.1265 -0.574127197265625 0.02399926757812504 -0.126625 -0.587738037109375 0.02399926757812504 -0.12675 -0.603271484375 0.02399926757812504 -0.126875 -0.604156494140625 0.02399926757812504 -0.127 -0.60711669921875 0.02399926757812504 -0.127125 -0.596588134765625 0.02399926757812504 -0.12725 -0.578704833984375 0.02399926757812504 -0.127375 -0.561920166015625 0.02399926757812504 -0.1275 -0.534515380859375 0.02399926757812504 -0.127625 -0.505096435546875 0.02399926757812504 -0.12775 -0.467559814453125 0.02399926757812504 -0.127875 -0.426422119140625 0.02399926757812504 -0.128 -0.37457275390625 0.2799914550781251 -0.128125 -0.328460693359375 0.2799914550781251 -0.12825 -0.26861572265625 0.2799914550781251 -0.128375 -0.214813232421875 0.2799914550781251 -0.1285 -0.149139404296875 0.2799914550781251 -0.128625 -0.08282470703125 0.2799914550781251 -0.12875 -0.020965576171875 0.2799914550781251 -0.128875 0.0489501953125 0.2799914550781251 -0.129 0.112823486328125 0.2799914550781251 -0.129125 0.18194580078125 0.2799914550781251 -0.12925 0.251922607421875 0.2799914550781251 -0.129375 0.310699462890625 0.2799914550781251 -0.1295 0.37689208984375 0.2799914550781251 -0.129625 0.429840087890625 0.2799914550781251 -0.12975 0.489410400390625 0.2799914550781251 -0.129875 0.538970947265625 0.2799914550781251 -0.13 0.584686279296875 0.2799914550781251 -0.130125 0.629547119140625 0.2799914550781251 -0.13025 0.65850830078125 0.2799914550781251 -0.130375 0.6907958984375 0.2799914550781251 -0.1305 0.70880126953125 0.2799914550781251 -0.130625 0.7255859375 0.2799914550781251 -0.13075 0.728790283203125 0.2799914550781251 -0.130875 0.731903076171875 0.2799914550781251 -0.131 0.7198486328125 0.2799914550781251 -0.131125 0.706634521484375 0.2799914550781251 -0.13125 0.681884765625 0.2799914550781251 -0.131375 0.653350830078125 0.2799914550781251 -0.1315 0.6214599609375 0.2799914550781251 -0.131625 0.572906494140625 0.2799914550781251 -0.13175 0.522735595703125 0.2799914550781251 -0.131875 0.468048095703125 0.2799914550781251 -0.132 0.40594482421875 0.2799914550781251 -0.132125 0.342529296875 0.2799914550781251 -0.13225 0.27081298828125 0.2799914550781251 -0.132375 0.19317626953125 0.2799914550781251 -0.1325 0.122528076171875 0.2799914550781251 -0.132625 0.041290283203125 0.2799914550781251 -0.13275 -0.033050537109375 0.2799914550781251 -0.132875 -0.11627197265625 0.2799914550781251 -0.133 -0.197998046875 0.2799914550781251 -0.133125 -0.2718505859375 0.2799914550781251 -0.13325 -0.349334716796875 0.2799914550781251 -0.133375 -0.41900634765625 0.2799914550781251 -0.1335 -0.489044189453125 0.2799914550781251 -0.133625 -0.557861328125 0.2799914550781251 -0.13375 -0.611297607421875 0.2799914550781251 -0.133875 -0.669189453125 0.2799914550781251 -0.134 -0.71612548828125 0.2799914550781251 -0.134125 -0.75543212890625 0.2799914550781251 -0.13425 -0.792022705078125 0.2799914550781251 -0.134375 -0.812713623046875 0.2799914550781251 -0.1345 -0.83294677734375 0.2799914550781251 -0.134625 -0.83831787109375 0.2799914550781251 -0.13475 -0.84124755859375 0.2799914550781251 -0.134875 -0.8292236328125 0.2799914550781251 -0.135 -0.81597900390625 0.2799914550781251 -0.135125 -0.7867431640625 0.2799914550781251 -0.13525 -0.75787353515625 0.2799914550781251 -0.135375 -0.716766357421875 0.2799914550781251 -0.1355 -0.663055419921875 0.2799914550781251 -0.135625 -0.61224365234375 0.2799914550781251 -0.13575 -0.54486083984375 0.2799914550781251 -0.135875 -0.482025146484375 0.2799914550781251 -0.136 -0.403533935546875 0.2799914550781251 -0.136125 -0.322509765625 0.2799914550781251 -0.13625 -0.244384765625 0.2799914550781251 -0.136375 -0.156005859375 0.2799914550781251 -0.1365 -0.07366943359375 0.2799914550781251 -0.136625 0.01849365234375 0.2799914550781251 -0.13675 0.111602783203125 0.2799914550781251 -0.136875 0.19427490234375 0.2799914550781251 -0.137 0.285614013671875 0.2799914550781251 -0.137125 0.364227294921875 0.2799914550781251 -0.13725 0.4500732421875 0.2799914550781251 -0.137375 0.529052734375 0.2799914550781251 -0.1375 0.598236083984375 0.2799914550781251 -0.137625 0.6658935546875 0.2799914550781251 -0.13775 0.72406005859375 0.2799914550781251 -0.137875 0.777557373046875 0.2799914550781251 -0.138 0.826446533203125 0.2799914550781251 -0.138125 0.85455322265625 0.2799914550781251 -0.13825 0.854827880859375 0.2799914550781251 -0.138375 0.855010986328125 0.2799914550781251 -0.1385 0.8551025390625 0.2799914550781251 -0.138625 0.855133056640625 0.2799914550781251 -0.13875 0.85504150390625 0.2799914550781251 -0.138875 0.854888916015625 0.2799914550781251 -0.139 0.854644775390625 0.2799914550781251 -0.139125 0.8360595703125 0.2799914550781251 -0.13925 0.788116455078125 0.2799914550781251 -0.139375 0.740447998046875 0.2799914550781251 -0.1395 0.678924560546875 0.2799914550781251 -0.139625 0.614654541015625 0.2799914550781251 -0.13975 0.538848876953125 0.2799914550781251 -0.139875 0.454864501953125 0.2799914550781251 -0.14 0.376312255859375 0.2799914550781251 -0.140125 0.2833251953125 0.2799914550781251 -0.14025 0.197662353515625 0.2799914550781251 -0.140375 0.099365234375 0.2799914550781251 +0.125 -0.025634765625 0.02399926757812504 +0.125125 -0.0546875 0.02399926757812504 +0.12525 -0.0799560546875 0.02399926757812504 +0.125375 -0.10888671875 0.02399926757812504 +0.1255 -0.1353759765625 0.02399926757812504 +0.125625 -0.157958984375 0.02399926757812504 +0.12575 -0.184173583984375 0.02399926757812504 +0.125875 -0.203857421875 0.02399926757812504 +0.126 -0.226959228515625 0.02399926757812504 +0.126125 -0.244537353515625 0.02399926757812504 +0.12625 -0.261810302734375 0.02399926757812504 +0.126375 -0.274322509765625 0.02399926757812504 +0.1265 -0.287078857421875 0.02399926757812504 +0.126625 -0.29388427734375 0.02399926757812504 +0.12675 -0.301666259765625 0.02399926757812504 +0.126875 -0.302093505859375 0.02399926757812504 +0.127 -0.3035888671875 0.02399926757812504 +0.127125 -0.298309326171875 0.02399926757812504 +0.12725 -0.28936767578125 0.02399926757812504 +0.127375 -0.280975341796875 0.02399926757812504 +0.1275 -0.26727294921875 0.02399926757812504 +0.127625 -0.2525634765625 0.02399926757812504 +0.12775 -0.233795166015625 0.02399926757812504 +0.127875 -0.213226318359375 0.02399926757812504 +0.128 -0.18731689453125 0.2799914550781251 +0.128125 -0.16424560546875 0.2799914550781251 +0.12825 -0.13433837890625 0.2799914550781251 +0.128375 -0.107421875 0.2799914550781251 +0.1285 -0.0745849609375 0.2799914550781251 +0.128625 -0.04144287109375 0.2799914550781251 +0.12875 -0.010498046875 0.2799914550781251 +0.128875 0.02447509765625 0.2799914550781251 +0.129 0.056396484375 0.2799914550781251 +0.129125 0.090972900390625 0.2799914550781251 +0.12925 0.125946044921875 0.2799914550781251 +0.129375 0.15533447265625 0.2799914550781251 +0.1295 0.188446044921875 0.2799914550781251 +0.129625 0.21490478515625 0.2799914550781251 +0.12975 0.24468994140625 0.2799914550781251 +0.129875 0.26947021484375 0.2799914550781251 +0.13 0.292327880859375 0.2799914550781251 +0.130125 0.31475830078125 0.2799914550781251 +0.13025 0.329254150390625 0.2799914550781251 +0.130375 0.34539794921875 0.2799914550781251 +0.1305 0.354400634765625 0.2799914550781251 +0.130625 0.36279296875 0.2799914550781251 +0.13075 0.3643798828125 0.2799914550781251 +0.130875 0.365936279296875 0.2799914550781251 +0.131 0.35992431640625 0.2799914550781251 +0.131125 0.353302001953125 0.2799914550781251 +0.13125 0.3409423828125 0.2799914550781251 +0.131375 0.32666015625 0.2799914550781251 +0.1315 0.31072998046875 0.2799914550781251 +0.131625 0.28643798828125 0.2799914550781251 +0.13175 0.2613525390625 0.2799914550781251 +0.131875 0.2340087890625 0.2799914550781251 +0.132 0.202972412109375 0.2799914550781251 +0.132125 0.1712646484375 0.2799914550781251 +0.13225 0.135406494140625 0.2799914550781251 +0.132375 0.096588134765625 0.2799914550781251 +0.1325 0.061248779296875 0.2799914550781251 +0.132625 0.0206298828125 0.2799914550781251 +0.13275 -0.01654052734375 0.2799914550781251 +0.132875 -0.05816650390625 0.2799914550781251 +0.133 -0.099029541015625 0.2799914550781251 +0.133125 -0.135955810546875 0.2799914550781251 +0.13325 -0.1746826171875 0.2799914550781251 +0.133375 -0.20953369140625 0.2799914550781251 +0.1335 -0.244537353515625 0.2799914550781251 +0.133625 -0.278961181640625 0.2799914550781251 +0.13375 -0.3056640625 0.2799914550781251 +0.133875 -0.334625244140625 0.2799914550781251 +0.134 -0.35809326171875 0.2799914550781251 +0.134125 -0.37774658203125 0.2799914550781251 +0.13425 -0.396026611328125 0.2799914550781251 +0.134375 -0.4063720703125 0.2799914550781251 +0.1345 -0.41650390625 0.2799914550781251 +0.134625 -0.419189453125 0.2799914550781251 +0.13475 -0.420654296875 0.2799914550781251 +0.134875 -0.414642333984375 0.2799914550781251 +0.135 -0.40802001953125 0.2799914550781251 +0.135125 -0.393402099609375 0.2799914550781251 +0.13525 -0.37896728515625 0.2799914550781251 +0.135375 -0.3583984375 0.2799914550781251 +0.1355 -0.33154296875 0.2799914550781251 +0.135625 -0.30615234375 0.2799914550781251 +0.13575 -0.2724609375 0.2799914550781251 +0.135875 -0.24102783203125 0.2799914550781251 +0.136 -0.2017822265625 0.2799914550781251 +0.136125 -0.161285400390625 0.2799914550781251 +0.13625 -0.122222900390625 0.2799914550781251 +0.136375 -0.078033447265625 0.2799914550781251 +0.1365 -0.036865234375 0.2799914550781251 +0.136625 0.009246826171875 0.2799914550781251 +0.13675 0.0557861328125 0.2799914550781251 +0.136875 0.097137451171875 0.2799914550781251 +0.137 0.142791748046875 0.2799914550781251 +0.137125 0.182098388671875 0.2799914550781251 +0.13725 0.22503662109375 0.2799914550781251 +0.137375 0.2645263671875 0.2799914550781251 +0.1375 0.299102783203125 0.2799914550781251 +0.137625 0.33294677734375 0.2799914550781251 +0.13775 0.362030029296875 0.2799914550781251 +0.137875 0.388763427734375 0.2799914550781251 +0.138 0.4132080078125 0.2799914550781251 +0.138125 0.431671142578125 0.2799914550781251 +0.13825 0.445556640625 0.2799914550781251 +0.138375 0.455902099609375 0.2799914550781251 +0.1385 0.46044921875 0.2799914550781251 +0.138625 0.461944580078125 0.2799914550781251 +0.13875 0.4571533203125 0.2799914550781251 +0.138875 0.448944091796875 0.2799914550781251 +0.139 0.435638427734375 0.2799914550781251 +0.139125 0.41802978515625 0.2799914550781251 +0.13925 0.39404296875 0.2799914550781251 +0.139375 0.370208740234375 0.2799914550781251 +0.1395 0.339447021484375 0.2799914550781251 +0.139625 0.30731201171875 0.2799914550781251 +0.13975 0.2694091796875 0.2799914550781251 +0.139875 0.2274169921875 0.2799914550781251 +0.14 0.188140869140625 0.2799914550781251 +0.140125 0.14166259765625 0.2799914550781251 +0.14025 0.09881591796875 0.2799914550781251 +0.140375 0.0496826171875 0.2799914550781251 0.1405 0.0 0.2799914550781251 -0.140625 -0.0897216796875 0.2799914550781251 -0.14075 -0.18914794921875 0.2799914550781251 -0.140875 -0.2774658203125 0.2799914550781251 -0.141 -0.372039794921875 0.2799914550781251 -0.141125 -0.463897705078125 0.2799914550781251 -0.14125 -0.541229248046875 0.2799914550781251 -0.141375 -0.623321533203125 0.2799914550781251 -0.1415 -0.69000244140625 0.2799914550781251 -0.141625 -0.758941650390625 0.2799914550781251 -0.14175 -0.817657470703125 0.2799914550781251 -0.141875 -0.8546142578125 0.2799914550781251 -0.142 -0.855010986328125 0.2799914550781251 -0.142125 -0.85528564453125 0.2799914550781251 -0.14225 -0.85552978515625 0.2799914550781251 -0.142375 -0.85565185546875 0.2799914550781251 -0.1425 -0.855682373046875 0.2799914550781251 -0.142625 -0.8555908203125 0.2799914550781251 -0.14275 -0.85546875 0.2799914550781251 -0.142875 -0.855194091796875 0.2799914550781251 -0.143 -0.854827880859375 0.2799914550781251 -0.143125 -0.8453369140625 0.2799914550781251 -0.14325 -0.78997802734375 0.2799914550781251 -0.143375 -0.73260498046875 0.2799914550781251 -0.1435 -0.659637451171875 0.2799914550781251 -0.143625 -0.58038330078125 0.2799914550781251 -0.14375 -0.50262451171875 0.2799914550781251 -0.143875 -0.4117431640625 0.2799914550781251 -0.144 -0.325225830078125 0.2799914550781251 -0.144125 -0.226165771484375 0.2799914550781251 -0.14425 -0.12408447265625 0.2799914550781251 -0.144375 -0.031097412109375 0.2799914550781251 -0.1445 0.07257080078125 0.2799914550781251 -0.144625 0.16558837890625 0.2799914550781251 -0.14475 0.267364501953125 0.2799914550781251 -0.144875 0.36602783203125 0.2799914550781251 -0.145 0.451873779296875 0.2799914550781251 -0.145125 0.542083740234375 0.2799914550781251 -0.14525 0.61883544921875 0.2799914550781251 -0.145375 0.697052001953125 0.2799914550781251 -0.1455 0.768310546875 0.2799914550781251 -0.145625 0.82470703125 0.2799914550781251 -0.14575 0.854705810546875 0.2799914550781251 -0.145875 0.8551025390625 0.2799914550781251 -0.146 0.855438232421875 0.2799914550781251 -0.146125 0.855682373046875 0.2799914550781251 -0.14625 0.855804443359375 0.2799914550781251 -0.146375 0.855865478515625 0.2799914550781251 -0.1465 0.855804443359375 0.2799914550781251 -0.146625 0.85565185546875 0.2799914550781251 -0.14675 0.855377197265625 0.2799914550781251 -0.146875 0.855072021484375 0.2799914550781251 -0.147 0.854644775390625 0.2799914550781251 -0.147125 0.821014404296875 0.2799914550781251 -0.14725 0.756866455078125 0.2799914550781251 -0.147375 0.684356689453125 0.2799914550781251 -0.1475 0.612640380859375 0.2799914550781251 -0.147625 0.526702880859375 0.2799914550781251 -0.14775 0.444305419921875 0.2799914550781251 -0.147875 0.348297119140625 0.2799914550781251 -0.148 0.248382568359375 0.2799914550781251 -0.148125 0.156219482421875 0.2799914550781251 -0.14825 0.05218505859375 0.2799914550781251 -0.148375 -0.041778564453125 0.2799914550781251 -0.1485 -0.145721435546875 0.2799914550781251 -0.148625 -0.24810791015625 0.2799914550781251 -0.14875 -0.337738037109375 0.2799914550781251 -0.148875 -0.433624267578125 0.2799914550781251 -0.149 -0.516082763671875 0.2799914550781251 -0.149125 -0.601776123046875 0.2799914550781251 -0.14925 -0.681365966796875 0.2799914550781251 -0.149375 -0.745849609375 0.2799914550781251 -0.1495 -0.810516357421875 0.2799914550781251 -0.149625 -0.85455322265625 0.2799914550781251 -0.14975 -0.855010986328125 0.2799914550781251 -0.149875 -0.8553466796875 0.2799914550781251 -0.15 -0.8555908203125 0.2799914550781251 -0.150125 -0.855743408203125 0.2799914550781251 -0.15025 -0.85577392578125 0.2799914550781251 -0.150375 -0.855743408203125 0.2799914550781251 -0.1505 -0.8555908203125 0.2799914550781251 -0.150625 -0.85540771484375 0.2799914550781251 -0.15075 -0.855072021484375 0.2799914550781251 -0.150875 -0.85467529296875 0.2799914550781251 -0.151 -0.819610595703125 0.2799914550781251 -0.151125 -0.758209228515625 0.2799914550781251 -0.15125 -0.694427490234375 0.2799914550781251 -0.151375 -0.618011474609375 0.2799914550781251 -0.1515 -0.542327880859375 0.2799914550781251 -0.151625 -0.45306396484375 0.2799914550781251 -0.15175 -0.3599853515625 0.2799914550781251 -0.151875 -0.272186279296875 0.2799914550781251 -0.152 -0.1727294921875 0.2799914550781251 -0.152125 -0.081390380859375 0.2799914550781251 -0.15225 0.02032470703125 0.2799914550781251 -0.152375 0.12164306640625 0.2799914550781251 -0.1525 0.211761474609375 0.2799914550781251 -0.152625 0.308868408203125 0.2799914550781251 -0.15275 0.392791748046875 0.2799914550781251 -0.152875 0.482879638671875 0.2799914550781251 -0.153 0.56597900390625 0.2799914550781251 -0.153125 0.636810302734375 0.2799914550781251 -0.15325 0.706695556640625 0.2799914550781251 -0.153375 0.764739990234375 0.2799914550781251 -0.1535 0.818695068359375 0.2799914550781251 -0.153625 0.854583740234375 0.2799914550781251 -0.15375 0.854888916015625 0.2799914550781251 -0.153875 0.85516357421875 0.2799914550781251 -0.154 0.85528564453125 0.2799914550781251 -0.154125 0.8553466796875 0.2799914550781251 -0.15425 0.8553466796875 0.2799914550781251 -0.154375 0.855224609375 0.2799914550781251 -0.1545 0.855010986328125 0.2799914550781251 -0.154625 0.854736328125 0.2799914550781251 -0.15475 0.84259033203125 0.2799914550781251 -0.154875 0.791229248046875 0.2799914550781251 -0.155 0.740447998046875 0.2799914550781251 -0.155125 0.673675537109375 0.2799914550781251 -0.15525 0.60986328125 0.2799914550781251 -0.155375 0.530487060546875 0.2799914550781251 -0.1555 0.445953369140625 0.2799914550781251 -0.155625 0.36761474609375 0.2799914550781251 -0.15575 0.27557373046875 0.2799914550781251 -0.155875 0.19158935546875 0.2799914550781251 -0.156 0.09588623046875 0.2799914550781251 +0.140625 -0.044891357421875 0.2799914550781251 +0.14075 -0.0946044921875 0.2799914550781251 +0.140875 -0.138763427734375 0.2799914550781251 +0.141 -0.18603515625 0.2799914550781251 +0.141125 -0.231964111328125 0.2799914550781251 +0.14125 -0.2706298828125 0.2799914550781251 +0.141375 -0.311676025390625 0.2799914550781251 +0.1415 -0.34503173828125 0.2799914550781251 +0.141625 -0.379486083984375 0.2799914550781251 +0.14175 -0.408843994140625 0.2799914550781251 +0.141875 -0.432586669921875 0.2799914550781251 +0.142 -0.4532470703125 0.2799914550781251 +0.142125 -0.468780517578125 0.2799914550781251 +0.14225 -0.4810791015625 0.2799914550781251 +0.142375 -0.4869384765625 0.2799914550781251 +0.1425 -0.48876953125 0.2799914550781251 +0.142625 -0.484466552734375 0.2799914550781251 +0.14275 -0.477142333984375 0.2799914550781251 +0.142875 -0.46282958984375 0.2799914550781251 +0.143 -0.4443359375 0.2799914550781251 +0.143125 -0.422698974609375 0.2799914550781251 +0.14325 -0.39501953125 0.2799914550781251 +0.143375 -0.3663330078125 0.2799914550781251 +0.1435 -0.329833984375 0.2799914550781251 +0.143625 -0.29022216796875 0.2799914550781251 +0.14375 -0.2513427734375 0.2799914550781251 +0.143875 -0.205902099609375 0.2799914550781251 +0.144 -0.162628173828125 0.2799914550781251 +0.144125 -0.11309814453125 0.2799914550781251 +0.14425 -0.06207275390625 0.2799914550781251 +0.144375 -0.01556396484375 0.2799914550781251 +0.1445 0.036285400390625 0.2799914550781251 +0.144625 0.082794189453125 0.2799914550781251 +0.14475 0.1336669921875 0.2799914550781251 +0.144875 0.183013916015625 0.2799914550781251 +0.145 0.225921630859375 0.2799914550781251 +0.145125 0.271026611328125 0.2799914550781251 +0.14525 0.309417724609375 0.2799914550781251 +0.145375 0.3485107421875 0.2799914550781251 +0.1455 0.3841552734375 0.2799914550781251 +0.145625 0.412353515625 0.2799914550781251 +0.14575 0.439697265625 0.2799914550781251 +0.145875 0.459930419921875 0.2799914550781251 +0.146 0.4779052734375 0.2799914550781251 +0.146125 0.490631103515625 0.2799914550781251 +0.14625 0.49725341796875 0.2799914550781251 +0.146375 0.4996337890625 0.2799914550781251 +0.1465 0.496917724609375 0.2799914550781251 +0.146625 0.488861083984375 0.2799914550781251 +0.14675 0.475341796875 0.2799914550781251 +0.146875 0.458770751953125 0.2799914550781251 +0.147 0.435516357421875 0.2799914550781251 +0.147125 0.410491943359375 0.2799914550781251 +0.14725 0.37841796875 0.2799914550781251 +0.147375 0.3421630859375 0.2799914550781251 +0.1475 0.306304931640625 0.2799914550781251 +0.147625 0.263336181640625 0.2799914550781251 +0.14775 0.222137451171875 0.2799914550781251 +0.147875 0.17413330078125 0.2799914550781251 +0.148 0.124176025390625 0.2799914550781251 +0.148125 0.078094482421875 0.2799914550781251 +0.14825 0.026092529296875 0.2799914550781251 +0.148375 -0.020904541015625 0.2799914550781251 +0.1485 -0.0728759765625 0.2799914550781251 +0.148625 -0.12408447265625 0.2799914550781251 +0.14875 -0.16888427734375 0.2799914550781251 +0.148875 -0.216827392578125 0.2799914550781251 +0.149 -0.258056640625 0.2799914550781251 +0.149125 -0.3009033203125 0.2799914550781251 +0.14925 -0.3406982421875 0.2799914550781251 +0.149375 -0.372955322265625 0.2799914550781251 +0.1495 -0.4052734375 0.2799914550781251 +0.149625 -0.430084228515625 0.2799914550781251 +0.14975 -0.45367431640625 0.2799914550781251 +0.149875 -0.471710205078125 0.2799914550781251 +0.15 -0.484039306640625 0.2799914550781251 +0.150125 -0.492034912109375 0.2799914550781251 +0.15025 -0.494476318359375 0.2799914550781251 +0.150375 -0.49285888671875 0.2799914550781251 +0.1505 -0.48504638671875 0.2799914550781251 +0.150625 -0.47418212890625 0.2799914550781251 +0.15075 -0.4564208984375 0.2799914550781251 +0.150875 -0.436859130859375 0.2799914550781251 +0.151 -0.409820556640625 0.2799914550781251 +0.151125 -0.379119873046875 0.2799914550781251 +0.15125 -0.34722900390625 0.2799914550781251 +0.151375 -0.30902099609375 0.2799914550781251 +0.1515 -0.27117919921875 0.2799914550781251 +0.151625 -0.2265625 0.2799914550781251 +0.15175 -0.180023193359375 0.2799914550781251 +0.151875 -0.1361083984375 0.2799914550781251 +0.152 -0.086395263671875 0.2799914550781251 +0.152125 -0.04071044921875 0.2799914550781251 +0.15225 0.010162353515625 0.2799914550781251 +0.152375 0.060821533203125 0.2799914550781251 +0.1525 0.105865478515625 0.2799914550781251 +0.152625 0.1544189453125 0.2799914550781251 +0.15275 0.196380615234375 0.2799914550781251 +0.152875 0.241424560546875 0.2799914550781251 +0.153 0.282989501953125 0.2799914550781251 +0.153125 0.318389892578125 0.2799914550781251 +0.15325 0.35333251953125 0.2799914550781251 +0.153375 0.382354736328125 0.2799914550781251 +0.1535 0.409332275390625 0.2799914550781251 +0.153625 0.433013916015625 0.2799914550781251 +0.15375 0.448822021484375 0.2799914550781251 +0.153875 0.4632568359375 0.2799914550781251 +0.154 0.4703369140625 0.2799914550781251 +0.154125 0.473388671875 0.2799914550781251 +0.15425 0.472869873046875 0.2799914550781251 +0.154375 0.466278076171875 0.2799914550781251 +0.1545 0.456024169921875 0.2799914550781251 +0.154625 0.440826416015625 0.2799914550781251 +0.15475 0.421295166015625 0.2799914550781251 +0.154875 0.395599365234375 0.2799914550781251 +0.155 0.370208740234375 0.2799914550781251 +0.155125 0.336822509765625 0.2799914550781251 +0.15525 0.304931640625 0.2799914550781251 +0.155375 0.265228271484375 0.2799914550781251 +0.1555 0.22296142578125 0.2799914550781251 +0.155625 0.183807373046875 0.2799914550781251 +0.15575 0.137786865234375 0.2799914550781251 +0.155875 0.095794677734375 0.2799914550781251 +0.156 0.047943115234375 0.2799914550781251 0.156125 0.0 0.2799914550781251 -0.15625 -0.085906982421875 0.2799914550781251 -0.156375 -0.18048095703125 0.2799914550781251 -0.1565 -0.2626953125 0.2799914550781251 -0.156625 -0.35223388671875 0.2799914550781251 -0.15675 -0.435821533203125 0.2799914550781251 -0.156875 -0.50592041015625 0.2799914550781251 -0.157 -0.580963134765625 0.2799914550781251 -0.157125 -0.63983154296875 0.2799914550781251 -0.15725 -0.701812744140625 0.2799914550781251 -0.157375 -0.752166748046875 0.2799914550781251 -0.1575 -0.793731689453125 0.2799914550781251 -0.157625 -0.827178955078125 0.2799914550781251 -0.15775 -0.8533935546875 0.2799914550781251 -0.157875 -0.854644775390625 0.2799914550781251 -0.158 -0.854736328125 0.2799914550781251 -0.158125 -0.854705810546875 0.2799914550781251 -0.15825 -0.854583740234375 0.2799914550781251 -0.158375 -0.848052978515625 0.2799914550781251 -0.1585 -0.817718505859375 0.2799914550781251 -0.158625 -0.783477783203125 0.2799914550781251 -0.15875 -0.740692138671875 0.2799914550781251 -0.158875 -0.69085693359375 0.2799914550781251 -0.159 -0.635498046875 0.2799914550781251 -0.159125 -0.57220458984375 0.2799914550781251 -0.15925 -0.49945068359375 0.2799914550781251 -0.159375 -0.432525634765625 0.2799914550781251 -0.1595 -0.351409912109375 0.2799914550781251 -0.159625 -0.275726318359375 0.2799914550781251 -0.15975 -0.191436767578125 0.2799914550781251 -0.159875 -0.10430908203125 0.2799914550781251 -0.16 -0.026123046875 0.535983642578125 -0.160125 0.060516357421875 0.535983642578125 -0.16025 0.136871337890625 0.535983642578125 -0.160375 0.220733642578125 0.535983642578125 -0.1605 0.29998779296875 0.535983642578125 -0.160625 0.3671875 0.535983642578125 -0.16075 0.4405517578125 0.535983642578125 -0.160875 0.498565673828125 0.535983642578125 -0.161 0.557159423828125 0.535983642578125 -0.161125 0.61358642578125 0.535983642578125 -0.16125 0.65338134765625 0.535983642578125 -0.161375 0.69622802734375 0.535983642578125 -0.1615 0.722320556640625 0.535983642578125 -0.161625 0.74383544921875 0.535983642578125 -0.16175 0.763214111328125 0.535983642578125 -0.161875 0.766937255859375 0.535983642578125 -0.162 0.76361083984375 0.535983642578125 -0.162125 0.75946044921875 0.535983642578125 -0.16225 0.74029541015625 0.535983642578125 -0.162375 0.7132568359375 0.535983642578125 -0.1625 0.688262939453125 0.535983642578125 -0.162625 0.647308349609375 0.535983642578125 -0.16275 0.60430908203125 0.535983642578125 -0.162875 0.557098388671875 0.535983642578125 -0.163 0.498931884765625 0.535983642578125 -0.163125 0.442291259765625 0.535983642578125 -0.16325 0.3802490234375 0.535983642578125 -0.163375 0.317596435546875 0.535983642578125 -0.1635 0.24639892578125 0.535983642578125 -0.163625 0.17578125 0.535983642578125 -0.16375 0.109375 0.535983642578125 -0.163875 0.036163330078125 0.535983642578125 -0.164 -0.0289306640625 0.535983642578125 -0.164125 -0.099945068359375 0.535983642578125 -0.16425 -0.168243408203125 0.535983642578125 -0.164375 -0.229217529296875 0.535983642578125 -0.1645 -0.291168212890625 0.535983642578125 -0.164625 -0.3465576171875 0.535983642578125 -0.16475 -0.399749755859375 0.535983642578125 -0.164875 -0.44720458984375 0.535983642578125 -0.165 -0.490020751953125 0.535983642578125 -0.165125 -0.5260009765625 0.535983642578125 -0.16525 -0.551910400390625 0.535983642578125 -0.165375 -0.582183837890625 0.535983642578125 -0.1655 -0.598388671875 0.535983642578125 -0.165625 -0.606048583984375 0.535983642578125 -0.16575 -0.61688232421875 0.535983642578125 -0.165875 -0.612640380859375 0.535983642578125 -0.166 -0.602325439453125 0.535983642578125 -0.166125 -0.59375 0.535983642578125 -0.16625 -0.572418212890625 0.535983642578125 -0.166375 -0.5440673828125 0.535983642578125 -0.1665 -0.520751953125 0.535983642578125 -0.166625 -0.482421875 0.535983642578125 -0.16675 -0.43963623046875 0.535983642578125 -0.166875 -0.403472900390625 0.535983642578125 -0.167 -0.3536376953125 0.535983642578125 -0.167125 -0.30615234375 0.535983642578125 -0.16725 -0.25628662109375 0.535983642578125 -0.167375 -0.200439453125 0.535983642578125 -0.1675 -0.151885986328125 0.535983642578125 -0.167625 -0.094818115234375 0.535983642578125 -0.16775 -0.044036865234375 0.535983642578125 -0.167875 0.010986328125 0.535983642578125 -0.168 0.064849853515625 0.535983642578125 -0.168125 0.1109619140625 0.535983642578125 -0.16825 0.16229248046875 0.535983642578125 -0.168375 0.20330810546875 0.535983642578125 -0.1685 0.245391845703125 0.535983642578125 -0.168625 0.2884521484375 0.535983642578125 -0.16875 0.318511962890625 0.535983642578125 -0.168875 0.3477783203125 0.535983642578125 -0.169 0.376312255859375 0.535983642578125 -0.169125 0.39617919921875 0.535983642578125 -0.16925 0.410675048828125 0.535983642578125 -0.169375 0.427032470703125 0.535983642578125 -0.1695 0.43170166015625 0.535983642578125 -0.169625 0.43048095703125 0.535983642578125 -0.16975 0.43475341796875 0.535983642578125 -0.169875 0.424835205078125 0.535983642578125 -0.17 0.41107177734375 0.535983642578125 -0.170125 0.402008056640625 0.535983642578125 -0.17025 0.381134033203125 0.535983642578125 -0.170375 0.364227294921875 0.535983642578125 -0.1705 0.335235595703125 0.535983642578125 -0.170625 0.306121826171875 0.535983642578125 -0.17075 0.27960205078125 0.535983642578125 -0.170875 0.246795654296875 0.535983642578125 -0.171 0.21002197265625 0.535983642578125 -0.171125 0.177276611328125 0.535983642578125 -0.17125 0.14227294921875 0.535983642578125 -0.171375 0.10418701171875 0.535983642578125 -0.1715 0.072418212890625 0.535983642578125 -0.171625 0.035369873046875 0.535983642578125 +0.15625 -0.04296875 0.2799914550781251 +0.156375 -0.09027099609375 0.2799914550781251 +0.1565 -0.131378173828125 0.2799914550781251 +0.156625 -0.1761474609375 0.2799914550781251 +0.15675 -0.217926025390625 0.2799914550781251 +0.156875 -0.25299072265625 0.2799914550781251 +0.157 -0.290496826171875 0.2799914550781251 +0.157125 -0.3199462890625 0.2799914550781251 +0.15725 -0.350921630859375 0.2799914550781251 +0.157375 -0.3760986328125 0.2799914550781251 +0.1575 -0.396881103515625 0.2799914550781251 +0.157625 -0.413604736328125 0.2799914550781251 +0.15775 -0.426727294921875 0.2799914550781251 +0.157875 -0.434417724609375 0.2799914550781251 +0.158 -0.439727783203125 0.2799914550781251 +0.158125 -0.4378662109375 0.2799914550781251 +0.15825 -0.4315185546875 0.2799914550781251 +0.158375 -0.424041748046875 0.2799914550781251 +0.1585 -0.40887451171875 0.2799914550781251 +0.158625 -0.391754150390625 0.2799914550781251 +0.15875 -0.370361328125 0.2799914550781251 +0.158875 -0.345458984375 0.2799914550781251 +0.159 -0.317779541015625 0.2799914550781251 +0.159125 -0.2861328125 0.2799914550781251 +0.15925 -0.249755859375 0.2799914550781251 +0.159375 -0.216278076171875 0.2799914550781251 +0.1595 -0.17572021484375 0.2799914550781251 +0.159625 -0.13787841796875 0.2799914550781251 +0.15975 -0.095733642578125 0.2799914550781251 +0.159875 -0.05218505859375 0.2799914550781251 +0.16 -0.013092041015625 0.535983642578125 +0.160125 0.030242919921875 0.535983642578125 +0.16025 0.06842041015625 0.535983642578125 +0.160375 0.1103515625 0.535983642578125 +0.1605 0.149993896484375 0.535983642578125 +0.160625 0.18359375 0.535983642578125 +0.16075 0.22027587890625 0.535983642578125 +0.160875 0.249267578125 0.535983642578125 +0.161 0.278564453125 0.535983642578125 +0.161125 0.306793212890625 0.535983642578125 +0.16125 0.326690673828125 0.535983642578125 +0.161375 0.348114013671875 0.535983642578125 +0.1615 0.36114501953125 0.535983642578125 +0.161625 0.371917724609375 0.535983642578125 +0.16175 0.381591796875 0.535983642578125 +0.161875 0.383453369140625 0.535983642578125 +0.162 0.381805419921875 0.535983642578125 +0.162125 0.379730224609375 0.535983642578125 +0.16225 0.370147705078125 0.535983642578125 +0.162375 0.35662841796875 0.535983642578125 +0.1625 0.3441162109375 0.535983642578125 +0.162625 0.323638916015625 0.535983642578125 +0.16275 0.302154541015625 0.535983642578125 +0.162875 0.278533935546875 0.535983642578125 +0.163 0.24945068359375 0.535983642578125 +0.163125 0.22113037109375 0.535983642578125 +0.16325 0.19012451171875 0.535983642578125 +0.163375 0.158782958984375 0.535983642578125 +0.1635 0.123199462890625 0.535983642578125 +0.163625 0.087890625 0.535983642578125 +0.16375 0.0546875 0.535983642578125 +0.163875 0.01806640625 0.535983642578125 +0.164 -0.014495849609375 0.535983642578125 +0.164125 -0.04998779296875 0.535983642578125 +0.16425 -0.084136962890625 0.535983642578125 +0.164375 -0.1146240234375 0.535983642578125 +0.1645 -0.145599365234375 0.535983642578125 +0.164625 -0.173309326171875 0.535983642578125 +0.16475 -0.19989013671875 0.535983642578125 +0.164875 -0.2236328125 0.535983642578125 +0.165 -0.245025634765625 0.535983642578125 +0.165125 -0.263031005859375 0.535983642578125 +0.16525 -0.275970458984375 0.535983642578125 +0.165375 -0.291107177734375 0.535983642578125 +0.1655 -0.299224853515625 0.535983642578125 +0.165625 -0.30303955078125 0.535983642578125 +0.16575 -0.3084716796875 0.535983642578125 +0.165875 -0.30633544921875 0.535983642578125 +0.166 -0.301177978515625 0.535983642578125 +0.166125 -0.296905517578125 0.535983642578125 +0.16625 -0.286224365234375 0.535983642578125 +0.166375 -0.272064208984375 0.535983642578125 +0.1665 -0.260406494140625 0.535983642578125 +0.166625 -0.241241455078125 0.535983642578125 +0.16675 -0.2198486328125 0.535983642578125 +0.166875 -0.201751708984375 0.535983642578125 +0.167 -0.176849365234375 0.535983642578125 +0.167125 -0.153106689453125 0.535983642578125 +0.16725 -0.128173828125 0.535983642578125 +0.167375 -0.100250244140625 0.535983642578125 +0.1675 -0.075958251953125 0.535983642578125 +0.167625 -0.04742431640625 0.535983642578125 +0.16775 -0.02203369140625 0.535983642578125 +0.167875 0.0054931640625 0.535983642578125 +0.168 0.03240966796875 0.535983642578125 +0.168125 0.05548095703125 0.535983642578125 +0.16825 0.081146240234375 0.535983642578125 +0.168375 0.101654052734375 0.535983642578125 +0.1685 0.1226806640625 0.535983642578125 +0.168625 0.14422607421875 0.535983642578125 +0.16875 0.15924072265625 0.535983642578125 +0.168875 0.17388916015625 0.535983642578125 +0.169 0.188140869140625 0.535983642578125 +0.169125 0.198089599609375 0.535983642578125 +0.16925 0.205322265625 0.535983642578125 +0.169375 0.2135009765625 0.535983642578125 +0.1695 0.215850830078125 0.535983642578125 +0.169625 0.215240478515625 0.535983642578125 +0.16975 0.217376708984375 0.535983642578125 +0.169875 0.21240234375 0.535983642578125 +0.17 0.205535888671875 0.535983642578125 +0.170125 0.20098876953125 0.535983642578125 +0.17025 0.1905517578125 0.535983642578125 +0.170375 0.182098388671875 0.535983642578125 +0.1705 0.1676025390625 0.535983642578125 +0.170625 0.153045654296875 0.535983642578125 +0.17075 0.139801025390625 0.535983642578125 +0.170875 0.123382568359375 0.535983642578125 +0.171 0.105010986328125 0.535983642578125 +0.171125 0.088623046875 0.535983642578125 +0.17125 0.071136474609375 0.535983642578125 +0.171375 0.052093505859375 0.535983642578125 +0.1715 0.03619384765625 0.535983642578125 +0.171625 0.017669677734375 0.535983642578125 0.17175 0.0 0.535983642578125 -0.171875 -0.0308837890625 0.535983642578125 -0.172 -0.06298828125 0.535983642578125 -0.172125 -0.089263916015625 0.535983642578125 -0.17225 -0.11968994140625 0.535983642578125 -0.172375 -0.14398193359375 0.535983642578125 -0.1725 -0.162384033203125 0.535983642578125 -0.172625 -0.186492919921875 0.535983642578125 -0.17275 -0.199249267578125 0.535983642578125 -0.172875 -0.210662841796875 0.535983642578125 -0.173 -0.22698974609375 0.535983642578125 -0.173125 -0.23052978515625 0.535983642578125 -0.17325 -0.241546630859375 0.535983642578125 -0.173375 -0.23944091796875 0.535983642578125 -0.1735 -0.235137939453125 0.535983642578125 -0.173625 -0.238006591796875 0.535983642578125 -0.17375 -0.2281494140625 0.535983642578125 -0.173875 -0.216033935546875 0.535983642578125 -0.174 -0.2122802734375 0.535983642578125 -0.174125 -0.196258544921875 0.535983642578125 -0.17425 -0.17877197265625 0.535983642578125 -0.174375 -0.1700439453125 0.535983642578125 -0.1745 -0.150360107421875 0.535983642578125 -0.174625 -0.13153076171875 0.535983642578125 -0.17475 -0.118438720703125 0.535983642578125 -0.174875 -0.09796142578125 0.535983642578125 -0.175 -0.079559326171875 0.535983642578125 -0.175125 -0.0650634765625 0.535983642578125 -0.17525 -0.0479736328125 0.535983642578125 -0.175375 -0.03094482421875 0.535983642578125 -0.1755 -0.0169677734375 0.535983642578125 -0.175625 -0.003875732421875 0.535983642578125 -0.17575 0.00836181640625 0.535983642578125 -0.175875 0.01910400390625 0.535983642578125 -0.176 0.028045654296875 0.535983642578125 -0.176125 0.034576416015625 0.535983642578125 -0.17625 0.04266357421875 0.535983642578125 -0.176375 0.045501708984375 0.535983642578125 -0.1765 0.051910400390625 0.535983642578125 -0.176625 0.051177978515625 0.535983642578125 -0.17675 0.048309326171875 0.535983642578125 -0.176875 0.0518798828125 0.535983642578125 -0.177 0.046051025390625 0.535983642578125 -0.177125 0.038543701171875 0.535983642578125 -0.17725 0.0400390625 0.535983642578125 -0.177375 0.030792236328125 0.535983642578125 -0.1775 0.020782470703125 0.535983642578125 -0.177625 0.0208740234375 0.535983642578125 -0.17775 0.0103759765625 0.535983642578125 +0.171875 -0.015472412109375 0.535983642578125 +0.172 -0.031524658203125 0.535983642578125 +0.172125 -0.044647216796875 0.535983642578125 +0.17225 -0.05987548828125 0.535983642578125 +0.172375 -0.072021484375 0.535983642578125 +0.1725 -0.081207275390625 0.535983642578125 +0.172625 -0.09326171875 0.535983642578125 +0.17275 -0.099639892578125 0.535983642578125 +0.172875 -0.1053466796875 0.535983642578125 +0.173 -0.113525390625 0.535983642578125 +0.173125 -0.11529541015625 0.535983642578125 +0.17325 -0.12078857421875 0.535983642578125 +0.173375 -0.1197509765625 0.535983642578125 +0.1735 -0.117584228515625 0.535983642578125 +0.173625 -0.1190185546875 0.535983642578125 +0.17375 -0.114105224609375 0.535983642578125 +0.173875 -0.1080322265625 0.535983642578125 +0.174 -0.106170654296875 0.535983642578125 +0.174125 -0.09814453125 0.535983642578125 +0.17425 -0.08941650390625 0.535983642578125 +0.174375 -0.085052490234375 0.535983642578125 +0.1745 -0.0751953125 0.535983642578125 +0.174625 -0.0657958984375 0.535983642578125 +0.17475 -0.059234619140625 0.535983642578125 +0.174875 -0.04901123046875 0.535983642578125 +0.175 -0.039794921875 0.535983642578125 +0.175125 -0.032562255859375 0.535983642578125 +0.17525 -0.024017333984375 0.535983642578125 +0.175375 -0.0155029296875 0.535983642578125 +0.1755 -0.008514404296875 0.535983642578125 +0.175625 -0.001953125 0.535983642578125 +0.17575 0.004180908203125 0.535983642578125 +0.175875 0.009552001953125 0.535983642578125 +0.176 0.014007568359375 0.535983642578125 +0.176125 0.01727294921875 0.535983642578125 +0.17625 0.021331787109375 0.535983642578125 +0.176375 0.022735595703125 0.535983642578125 +0.1765 0.02593994140625 0.535983642578125 +0.176625 0.02557373046875 0.535983642578125 +0.17675 0.024139404296875 0.535983642578125 +0.176875 0.02593994140625 0.535983642578125 +0.177 0.02301025390625 0.535983642578125 +0.177125 0.019256591796875 0.535983642578125 +0.17725 0.02001953125 0.535983642578125 +0.177375 0.015380859375 0.535983642578125 +0.1775 0.0103759765625 0.535983642578125 +0.177625 0.01043701171875 0.535983642578125 +0.17775 0.00518798828125 0.535983642578125 0.177875 0.0 0.535983642578125 0.178 0.0 0.535983642578125 -0.178125 -0.009552001953125 0.535983642578125 -0.17825 -0.0181884765625 0.535983642578125 -0.178375 -0.01715087890625 0.535983642578125 -0.1785 -0.023712158203125 0.535983642578125 -0.178625 -0.02862548828125 0.535983642578125 -0.17875 -0.025604248046875 0.535983642578125 -0.178875 -0.02752685546875 0.535983642578125 -0.179 -0.027862548828125 0.535983642578125 -0.179125 -0.021820068359375 0.535983642578125 -0.17925 -0.018157958984375 0.535983642578125 -0.179375 -0.01141357421875 0.535983642578125 -0.1795 -0.00433349609375 0.535983642578125 -0.179625 0.00390625 0.535983642578125 -0.17975 0.013702392578125 0.535983642578125 -0.179875 0.02593994140625 0.535983642578125 -0.18 0.03887939453125 0.535983642578125 -0.180125 0.04998779296875 0.535983642578125 -0.18025 0.064849853515625 0.535983642578125 -0.180375 0.08197021484375 0.535983642578125 -0.1805 0.09283447265625 0.535983642578125 -0.180625 0.1094970703125 0.535983642578125 -0.18075 0.12744140625 0.535983642578125 -0.180875 0.135406494140625 0.535983642578125 -0.181 0.15228271484375 0.535983642578125 -0.181125 0.1683349609375 0.535983642578125 -0.18125 0.1727294921875 0.535983642578125 -0.181375 0.18603515625 0.535983642578125 -0.1815 0.197540283203125 0.535983642578125 -0.181625 0.1968994140625 0.535983642578125 -0.18175 0.20416259765625 0.535983642578125 -0.181875 0.209381103515625 0.535983642578125 -0.182 0.201873779296875 0.535983642578125 -0.182125 0.202301025390625 0.535983642578125 -0.18225 0.19012451171875 0.535983642578125 -0.182375 0.183746337890625 0.535983642578125 -0.1825 0.17578125 0.535983642578125 -0.182625 0.15643310546875 0.535983642578125 -0.18275 0.143157958984375 0.535983642578125 -0.182875 0.12451171875 0.535983642578125 -0.183 0.09893798828125 0.535983642578125 -0.183125 0.0777587890625 0.535983642578125 -0.18325 0.051116943359375 0.535983642578125 -0.183375 0.024139404296875 0.535983642578125 -0.1835 -0.0062255859375 0.535983642578125 -0.183625 -0.038665771484375 0.535983642578125 -0.18375 -0.067352294921875 0.535983642578125 -0.183875 -0.1016845703125 0.535983642578125 -0.184 -0.133697509765625 0.535983642578125 -0.184125 -0.16436767578125 0.535983642578125 -0.18425 -0.19903564453125 0.535983642578125 -0.184375 -0.230438232421875 0.535983642578125 -0.1845 -0.256500244140625 0.535983642578125 -0.184625 -0.285369873046875 0.535983642578125 -0.18475 -0.314788818359375 0.535983642578125 -0.184875 -0.3330078125 0.535983642578125 -0.185 -0.35540771484375 0.535983642578125 -0.185125 -0.376251220703125 0.535983642578125 -0.18525 -0.383270263671875 0.535983642578125 -0.185375 -0.396728515625 0.535983642578125 -0.1855 -0.396270751953125 0.535983642578125 -0.185625 -0.401641845703125 0.535983642578125 -0.18575 -0.402008056640625 0.535983642578125 -0.185875 -0.39007568359375 0.535983642578125 -0.186 -0.38128662109375 0.535983642578125 -0.186125 -0.367401123046875 0.535983642578125 -0.18625 -0.343841552734375 0.535983642578125 -0.186375 -0.320831298828125 0.535983642578125 -0.1865 -0.29656982421875 0.535983642578125 -0.186625 -0.259002685546875 0.535983642578125 -0.18675 -0.223114013671875 0.535983642578125 -0.186875 -0.1876220703125 0.535983642578125 -0.187 -0.1412353515625 0.535983642578125 -0.187125 -0.10009765625 0.535983642578125 -0.18725 -0.05126953125 0.535983642578125 +0.178125 -0.004791259765625 0.535983642578125 +0.17825 -0.009124755859375 0.535983642578125 +0.178375 -0.00860595703125 0.535983642578125 +0.1785 -0.011871337890625 0.535983642578125 +0.178625 -0.01434326171875 0.535983642578125 +0.17875 -0.0128173828125 0.535983642578125 +0.178875 -0.0137939453125 0.535983642578125 +0.179 -0.013946533203125 0.535983642578125 +0.179125 -0.01092529296875 0.535983642578125 +0.17925 -0.00909423828125 0.535983642578125 +0.179375 -0.0057373046875 0.535983642578125 +0.1795 -0.002197265625 0.535983642578125 +0.179625 0.001953125 0.535983642578125 +0.17975 0.0068359375 0.535983642578125 +0.179875 0.012969970703125 0.535983642578125 +0.18 0.019439697265625 0.535983642578125 +0.180125 0.024993896484375 0.535983642578125 +0.18025 0.03240966796875 0.535983642578125 +0.180375 0.040985107421875 0.535983642578125 +0.1805 0.046417236328125 0.535983642578125 +0.180625 0.05474853515625 0.535983642578125 +0.18075 0.063720703125 0.535983642578125 +0.180875 0.06768798828125 0.535983642578125 +0.181 0.076141357421875 0.535983642578125 +0.181125 0.08416748046875 0.535983642578125 +0.18125 0.08636474609375 0.535983642578125 +0.181375 0.093017578125 0.535983642578125 +0.1815 0.0987548828125 0.535983642578125 +0.181625 0.09844970703125 0.535983642578125 +0.18175 0.102081298828125 0.535983642578125 +0.181875 0.10467529296875 0.535983642578125 +0.182 0.100921630859375 0.535983642578125 +0.182125 0.10113525390625 0.535983642578125 +0.18225 0.095062255859375 0.535983642578125 +0.182375 0.09185791015625 0.535983642578125 +0.1825 0.087890625 0.535983642578125 +0.182625 0.078216552734375 0.535983642578125 +0.18275 0.071563720703125 0.535983642578125 +0.182875 0.062255859375 0.535983642578125 +0.183 0.049468994140625 0.535983642578125 +0.183125 0.03887939453125 0.535983642578125 +0.18325 0.025543212890625 0.535983642578125 +0.183375 0.012054443359375 0.535983642578125 +0.1835 -0.003143310546875 0.535983642578125 +0.183625 -0.01934814453125 0.535983642578125 +0.18375 -0.03369140625 0.535983642578125 +0.183875 -0.050872802734375 0.535983642578125 +0.184 -0.066864013671875 0.535983642578125 +0.184125 -0.08221435546875 0.535983642578125 +0.18425 -0.09954833984375 0.535983642578125 +0.184375 -0.115234375 0.535983642578125 +0.1845 -0.128265380859375 0.535983642578125 +0.184625 -0.1427001953125 0.535983642578125 +0.18475 -0.15740966796875 0.535983642578125 +0.184875 -0.166534423828125 0.535983642578125 +0.185 -0.177734375 0.535983642578125 +0.185125 -0.188140869140625 0.535983642578125 +0.18525 -0.191650390625 0.535983642578125 +0.185375 -0.198394775390625 0.535983642578125 +0.1855 -0.198150634765625 0.535983642578125 +0.185625 -0.200836181640625 0.535983642578125 +0.18575 -0.201019287109375 0.535983642578125 +0.185875 -0.195068359375 0.535983642578125 +0.186 -0.190673828125 0.535983642578125 +0.186125 -0.1837158203125 0.535983642578125 +0.18625 -0.17193603515625 0.535983642578125 +0.186375 -0.160430908203125 0.535983642578125 +0.1865 -0.1483154296875 0.535983642578125 +0.186625 -0.1295166015625 0.535983642578125 +0.18675 -0.111572265625 0.535983642578125 +0.186875 -0.093841552734375 0.535983642578125 +0.187 -0.070648193359375 0.535983642578125 +0.187125 -0.050079345703125 0.535983642578125 +0.18725 -0.025665283203125 0.535983642578125 0.187375 0.0 0.535983642578125 -0.1875 0.0469970703125 0.535983642578125 -0.187625 0.100555419921875 0.535983642578125 -0.18775 0.147064208984375 0.535983642578125 -0.187875 0.20068359375 0.535983642578125 -0.188 0.2537841796875 0.535983642578125 -0.188125 0.296112060546875 0.535983642578125 -0.18825 0.34576416015625 0.535983642578125 -0.188375 0.38275146484375 0.535983642578125 -0.1885 0.4267578125 0.535983642578125 -0.188625 0.467132568359375 0.535983642578125 -0.18875 0.492950439453125 0.535983642578125 -0.188875 0.52459716796875 0.535983642578125 -0.189 0.549560546875 0.535983642578125 -0.189125 0.562591552734375 0.535983642578125 -0.18925 0.5780029296875 0.535983642578125 -0.189375 0.58734130859375 0.535983642578125 -0.1895 0.582183837890625 0.535983642578125 -0.189625 0.580352783203125 0.535983642578125 -0.18975 0.570831298828125 0.535983642578125 -0.189875 0.546905517578125 0.535983642578125 -0.19 0.527435302734375 0.535983642578125 -0.190125 0.498565673828125 0.535983642578125 -0.19025 0.461517333984375 0.535983642578125 -0.190375 0.420989990234375 0.535983642578125 -0.1905 0.37457275390625 0.535983642578125 -0.190625 0.32440185546875 0.535983642578125 -0.19075 0.26861572265625 0.535983642578125 -0.190875 0.214813232421875 0.535983642578125 -0.191 0.149139404296875 0.535983642578125 -0.191125 0.08282470703125 0.535983642578125 -0.19125 0.020721435546875 0.535983642578125 -0.191375 -0.0489501953125 0.535983642578125 -0.1915 -0.112823486328125 0.535983642578125 -0.191625 -0.18194580078125 0.535983642578125 -0.19175 -0.251922607421875 0.535983642578125 -0.191875 -0.31414794921875 0.535983642578125 -0.192 -0.3809814453125 0.791975830078125 -0.192125 -0.43450927734375 0.791975830078125 -0.19225 -0.49462890625 0.791975830078125 -0.192375 -0.550384521484375 0.791975830078125 -0.1925 -0.5968017578125 0.791975830078125 -0.192625 -0.63592529296875 0.791975830078125 -0.19275 -0.671875 0.791975830078125 -0.192875 -0.70452880859375 0.791975830078125 -0.193 -0.729827880859375 0.791975830078125 -0.193125 -0.746612548828125 0.791975830078125 -0.19325 -0.749908447265625 0.791975830078125 -0.193375 -0.752685546875 0.791975830078125 -0.1935 -0.7469482421875 0.791975830078125 -0.193625 -0.732666015625 0.791975830078125 -0.19375 -0.707000732421875 0.791975830078125 -0.193875 -0.676910400390625 0.791975830078125 -0.194 -0.643402099609375 0.791975830078125 -0.194125 -0.5980224609375 0.791975830078125 -0.19425 -0.545135498046875 0.791975830078125 -0.194375 -0.48809814453125 0.791975830078125 -0.1945 -0.422943115234375 0.791975830078125 -0.194625 -0.359649658203125 0.791975830078125 -0.19475 -0.2840576171875 0.791975830078125 -0.194875 -0.20263671875 0.791975830078125 -0.195 -0.128387451171875 0.791975830078125 -0.195125 -0.043212890625 0.791975830078125 -0.19525 0.034820556640625 0.791975830078125 -0.195375 0.1224365234375 0.791975830078125 -0.1955 0.20849609375 0.791975830078125 -0.195625 0.285919189453125 0.791975830078125 -0.19575 0.36981201171875 0.791975830078125 -0.195875 0.443023681640625 0.791975830078125 -0.196 0.516998291015625 0.791975830078125 -0.196125 0.589080810546875 0.791975830078125 -0.19625 0.64947509765625 0.791975830078125 -0.196375 0.71002197265625 0.791975830078125 -0.1965 0.758758544921875 0.791975830078125 -0.196625 0.800384521484375 0.791975830078125 -0.19675 0.8380126953125 0.791975830078125 -0.196875 0.854583740234375 0.791975830078125 -0.197 0.854766845703125 0.791975830078125 -0.197125 0.854827880859375 0.791975830078125 -0.19725 0.854827880859375 0.791975830078125 -0.197375 0.854766845703125 0.791975830078125 -0.1975 0.8546142578125 0.791975830078125 -0.197625 0.8416748046875 0.791975830078125 -0.19775 0.80560302734375 0.791975830078125 -0.197875 0.760772705078125 0.791975830078125 -0.198 0.707000732421875 0.791975830078125 -0.198125 0.651702880859375 0.791975830078125 -0.19825 0.58251953125 0.791975830078125 -0.198375 0.512237548828125 0.791975830078125 -0.1985 0.4306640625 0.791975830078125 -0.198625 0.343597412109375 0.791975830078125 -0.19875 0.26141357421875 0.791975830078125 -0.198875 0.1658935546875 0.791975830078125 -0.199 0.078643798828125 0.791975830078125 -0.199125 -0.01971435546875 0.791975830078125 -0.19925 -0.11871337890625 0.791975830078125 -0.199375 -0.207366943359375 0.791975830078125 -0.1995 -0.30328369140625 0.791975830078125 -0.199625 -0.388031005859375 0.791975830078125 -0.19975 -0.47857666015625 0.791975830078125 -0.199875 -0.564300537109375 0.791975830078125 -0.2 -0.634918212890625 0.791975830078125 -0.200125 -0.708831787109375 0.791975830078125 -0.20025 -0.76922607421875 0.791975830078125 -0.200375 -0.828338623046875 0.791975830078125 -0.2005 -0.854736328125 0.791975830078125 -0.200625 -0.855072021484375 0.791975830078125 -0.20075 -0.855377197265625 0.791975830078125 -0.200875 -0.855560302734375 0.791975830078125 -0.201 -0.855682373046875 0.791975830078125 -0.201125 -0.85565185546875 0.791975830078125 -0.20125 -0.8555908203125 0.791975830078125 -0.201375 -0.85540771484375 0.791975830078125 -0.2015 -0.85516357421875 0.791975830078125 -0.201625 -0.854766845703125 0.791975830078125 -0.20175 -0.832366943359375 0.791975830078125 -0.201875 -0.7802734375 0.791975830078125 -0.202 -0.7138671875 0.791975830078125 -0.202125 -0.647216796875 0.791975830078125 -0.20225 -0.565277099609375 0.791975830078125 -0.202375 -0.47784423828125 0.791975830078125 -0.2025 -0.394439697265625 0.791975830078125 -0.202625 -0.29730224609375 0.791975830078125 -0.20275 -0.2069091796875 0.791975830078125 -0.202875 -0.10400390625 0.791975830078125 +0.1875 0.02349853515625 0.535983642578125 +0.187625 0.050262451171875 0.535983642578125 +0.18775 0.073516845703125 0.535983642578125 +0.187875 0.100341796875 0.535983642578125 +0.188 0.12689208984375 0.535983642578125 +0.188125 0.148040771484375 0.535983642578125 +0.18825 0.172882080078125 0.535983642578125 +0.188375 0.191375732421875 0.535983642578125 +0.1885 0.21337890625 0.535983642578125 +0.188625 0.233551025390625 0.535983642578125 +0.18875 0.2464599609375 0.535983642578125 +0.188875 0.262298583984375 0.535983642578125 +0.189 0.2747802734375 0.535983642578125 +0.189125 0.281280517578125 0.535983642578125 +0.18925 0.28900146484375 0.535983642578125 +0.189375 0.293670654296875 0.535983642578125 +0.1895 0.29107666015625 0.535983642578125 +0.189625 0.2901611328125 0.535983642578125 +0.18975 0.285400390625 0.535983642578125 +0.189875 0.2734375 0.535983642578125 +0.19 0.263702392578125 0.535983642578125 +0.190125 0.249267578125 0.535983642578125 +0.19025 0.230743408203125 0.535983642578125 +0.190375 0.210479736328125 0.535983642578125 +0.1905 0.187286376953125 0.535983642578125 +0.190625 0.162200927734375 0.535983642578125 +0.19075 0.134307861328125 0.535983642578125 +0.190875 0.107391357421875 0.535983642578125 +0.191 0.074554443359375 0.535983642578125 +0.191125 0.041412353515625 0.535983642578125 +0.19125 0.010345458984375 0.535983642578125 +0.191375 -0.024505615234375 0.535983642578125 +0.1915 -0.056427001953125 0.535983642578125 +0.191625 -0.09100341796875 0.535983642578125 +0.19175 -0.1259765625 0.535983642578125 +0.191875 -0.1571044921875 0.535983642578125 +0.192 -0.190521240234375 0.791975830078125 +0.192125 -0.21728515625 0.791975830078125 +0.19225 -0.247344970703125 0.791975830078125 +0.192375 -0.27520751953125 0.791975830078125 +0.1925 -0.298431396484375 0.791975830078125 +0.192625 -0.3179931640625 0.791975830078125 +0.19275 -0.335968017578125 0.791975830078125 +0.192875 -0.352294921875 0.791975830078125 +0.193 -0.36492919921875 0.791975830078125 +0.193125 -0.373321533203125 0.791975830078125 +0.19325 -0.374969482421875 0.791975830078125 +0.193375 -0.376373291015625 0.791975830078125 +0.1935 -0.373504638671875 0.791975830078125 +0.193625 -0.366363525390625 0.791975830078125 +0.19375 -0.353515625 0.791975830078125 +0.193875 -0.338470458984375 0.791975830078125 +0.194 -0.32171630859375 0.791975830078125 +0.194125 -0.299041748046875 0.791975830078125 +0.19425 -0.2725830078125 0.791975830078125 +0.194375 -0.24407958984375 0.791975830078125 +0.1945 -0.21148681640625 0.791975830078125 +0.194625 -0.179840087890625 0.791975830078125 +0.19475 -0.142059326171875 0.791975830078125 +0.194875 -0.101348876953125 0.791975830078125 +0.195 -0.064208984375 0.791975830078125 +0.195125 -0.021636962890625 0.791975830078125 +0.19525 0.01739501953125 0.791975830078125 +0.195375 0.06121826171875 0.791975830078125 +0.1955 0.104248046875 0.791975830078125 +0.195625 0.1429443359375 0.791975830078125 +0.19575 0.184906005859375 0.791975830078125 +0.195875 0.22149658203125 0.791975830078125 +0.196 0.25848388671875 0.791975830078125 +0.196125 0.294525146484375 0.791975830078125 +0.19625 0.324737548828125 0.791975830078125 +0.196375 0.355010986328125 0.791975830078125 +0.1965 0.379364013671875 0.791975830078125 +0.196625 0.400177001953125 0.791975830078125 +0.19675 0.41900634765625 0.791975830078125 +0.196875 0.432342529296875 0.791975830078125 +0.197 0.44244384765625 0.791975830078125 +0.197125 0.4453125 0.791975830078125 +0.19725 0.446197509765625 0.791975830078125 +0.197375 0.442108154296875 0.791975830078125 +0.1975 0.434356689453125 0.791975830078125 +0.197625 0.42083740234375 0.791975830078125 +0.19775 0.402801513671875 0.791975830078125 +0.197875 0.38037109375 0.791975830078125 +0.198 0.353485107421875 0.791975830078125 +0.198125 0.325836181640625 0.791975830078125 +0.19825 0.291259765625 0.791975830078125 +0.198375 0.256103515625 0.791975830078125 +0.1985 0.21533203125 0.791975830078125 +0.198625 0.171783447265625 0.791975830078125 +0.19875 0.130706787109375 0.791975830078125 +0.198875 0.08294677734375 0.791975830078125 +0.199 0.039306640625 0.791975830078125 +0.199125 -0.0098876953125 0.791975830078125 +0.19925 -0.05938720703125 0.791975830078125 +0.199375 -0.10369873046875 0.791975830078125 +0.1995 -0.15167236328125 0.791975830078125 +0.199625 -0.19403076171875 0.791975830078125 +0.19975 -0.23931884765625 0.791975830078125 +0.199875 -0.28216552734375 0.791975830078125 +0.2 -0.317474365234375 0.791975830078125 +0.200125 -0.35443115234375 0.791975830078125 +0.20025 -0.3846435546875 0.791975830078125 +0.200375 -0.4141845703125 0.791975830078125 +0.2005 -0.439300537109375 0.791975830078125 +0.200625 -0.456817626953125 0.791975830078125 +0.20075 -0.472686767578125 0.791975830078125 +0.200875 -0.482666015625 0.791975830078125 +0.201 -0.48858642578125 0.791975830078125 +0.201125 -0.488037109375 0.791975830078125 +0.20125 -0.484039306640625 0.791975830078125 +0.201375 -0.474334716796875 0.791975830078125 +0.2015 -0.461181640625 0.791975830078125 +0.201625 -0.4415283203125 0.791975830078125 +0.20175 -0.41619873046875 0.791975830078125 +0.201875 -0.390167236328125 0.791975830078125 +0.202 -0.356964111328125 0.791975830078125 +0.202125 -0.323638916015625 0.791975830078125 +0.20225 -0.28265380859375 0.791975830078125 +0.202375 -0.23895263671875 0.791975830078125 +0.2025 -0.197235107421875 0.791975830078125 +0.202625 -0.148681640625 0.791975830078125 +0.20275 -0.103485107421875 0.791975830078125 +0.202875 -0.052032470703125 0.791975830078125 0.203 0.0 0.791975830078125 -0.203125 0.093780517578125 0.791975830078125 -0.20325 0.197174072265625 0.791975830078125 -0.203375 0.288360595703125 0.791975830078125 -0.2035 0.38690185546875 0.791975830078125 -0.203625 0.481231689453125 0.791975830078125 -0.20375 0.5616455078125 0.791975830078125 -0.203875 0.645172119140625 0.791975830078125 -0.204 0.71417236328125 0.791975830078125 -0.204125 0.78350830078125 0.791975830078125 -0.20425 0.844207763671875 0.791975830078125 -0.204375 0.854827880859375 0.791975830078125 -0.2045 0.855224609375 0.791975830078125 -0.204625 0.855499267578125 0.791975830078125 -0.20475 0.855712890625 0.791975830078125 -0.204875 0.8558349609375 0.791975830078125 -0.205 0.8558349609375 0.791975830078125 -0.205125 0.855743408203125 0.791975830078125 -0.20525 0.8555908203125 0.791975830078125 -0.205375 0.855316162109375 0.791975830078125 -0.2055 0.85491943359375 0.791975830078125 -0.205625 0.8544921875 0.791975830078125 -0.20575 0.799072265625 0.791975830078125 -0.205875 0.738922119140625 0.791975830078125 -0.206 0.66455078125 0.791975830078125 -0.206125 0.5830078125 0.791975830078125 -0.20625 0.5048828125 0.791975830078125 -0.206375 0.412353515625 0.791975830078125 -0.2065 0.325225830078125 0.791975830078125 -0.206625 0.2254638671875 0.791975830078125 -0.20675 0.123504638671875 0.791975830078125 -0.206875 0.030914306640625 0.791975830078125 -0.207 -0.072021484375 0.791975830078125 -0.207125 -0.163726806640625 0.791975830078125 -0.20725 -0.263519287109375 0.791975830078125 -0.207375 -0.36077880859375 0.791975830078125 -0.2075 -0.4439697265625 0.791975830078125 -0.207625 -0.531402587890625 0.791975830078125 -0.20775 -0.6046142578125 0.791975830078125 -0.207875 -0.6793212890625 0.791975830078125 -0.208 -0.748138427734375 0.791975830078125 -0.208125 -0.800933837890625 0.791975830078125 -0.20825 -0.851104736328125 0.791975830078125 -0.208375 -0.854827880859375 0.791975830078125 -0.2085 -0.855133056640625 0.791975830078125 -0.208625 -0.8553466796875 0.791975830078125 -0.20875 -0.855438232421875 0.791975830078125 -0.208875 -0.85546875 0.791975830078125 -0.209 -0.855377197265625 0.791975830078125 -0.209125 -0.855224609375 0.791975830078125 -0.20925 -0.854949951171875 0.791975830078125 -0.209375 -0.8546142578125 0.791975830078125 -0.2095 -0.819549560546875 0.791975830078125 -0.209625 -0.772430419921875 0.791975830078125 -0.20975 -0.7093505859375 0.791975830078125 -0.209875 -0.638946533203125 0.791975830078125 -0.21 -0.569732666015625 0.791975830078125 -0.210125 -0.48779296875 0.791975830078125 -0.21025 -0.411590576171875 0.791975830078125 -0.210375 -0.321258544921875 0.791975830078125 -0.2105 -0.2281494140625 0.791975830078125 -0.210625 -0.142822265625 0.791975830078125 -0.21075 -0.0477294921875 0.791975830078125 -0.210875 0.03802490234375 0.791975830078125 -0.211 0.132110595703125 0.791975830078125 -0.211125 0.22381591796875 0.791975830078125 -0.21125 0.303314208984375 0.791975830078125 -0.211375 0.3897705078125 0.791975830078125 -0.2115 0.46148681640625 0.791975830078125 -0.211625 0.535675048828125 0.791975830078125 -0.21175 0.6031494140625 0.791975830078125 -0.211875 0.660919189453125 0.791975830078125 -0.212 0.714141845703125 0.791975830078125 -0.212125 0.754364013671875 0.791975830078125 -0.21225 0.791015625 0.791975830078125 -0.212375 0.818450927734375 0.791975830078125 -0.2125 0.83984375 0.791975830078125 -0.212625 0.849517822265625 0.791975830078125 -0.21275 0.84954833984375 0.791975830078125 -0.212875 0.84124755859375 0.791975830078125 -0.213 0.8292236328125 0.791975830078125 -0.213125 0.805206298828125 0.791975830078125 -0.21325 0.77105712890625 0.791975830078125 -0.213375 0.732818603515625 0.791975830078125 -0.2135 0.683807373046875 0.791975830078125 -0.213625 0.632568359375 0.791975830078125 -0.21375 0.57623291015625 0.791975830078125 -0.213875 0.509002685546875 0.791975830078125 -0.214 0.44415283203125 0.791975830078125 -0.214125 0.371826171875 0.791975830078125 -0.21425 0.29315185546875 0.791975830078125 -0.214375 0.220367431640625 0.791975830078125 -0.2145 0.138702392578125 0.791975830078125 -0.214625 0.064971923828125 0.791975830078125 -0.21475 -0.0162353515625 0.791975830078125 -0.214875 -0.09649658203125 0.791975830078125 -0.215 -0.166534423828125 0.791975830078125 -0.215125 -0.241363525390625 0.791975830078125 -0.21525 -0.305023193359375 0.791975830078125 -0.215375 -0.374969482421875 0.791975830078125 -0.2155 -0.43670654296875 0.791975830078125 -0.215625 -0.4866943359375 0.791975830078125 -0.21575 -0.536468505859375 0.791975830078125 -0.215875 -0.58050537109375 0.791975830078125 -0.216 -0.617218017578125 0.791975830078125 -0.216125 -0.646331787109375 0.791975830078125 -0.21625 -0.6651611328125 0.791975830078125 -0.216375 -0.6793212890625 0.791975830078125 -0.2165 -0.6920166015625 0.791975830078125 -0.216625 -0.69140625 0.791975830078125 -0.21675 -0.68304443359375 0.791975830078125 -0.216875 -0.66839599609375 0.791975830078125 -0.217 -0.6536865234375 0.791975830078125 -0.217125 -0.62701416015625 0.791975830078125 -0.21725 -0.59222412109375 0.791975830078125 -0.217375 -0.55157470703125 0.791975830078125 -0.2175 -0.5098876953125 0.791975830078125 -0.217625 -0.46575927734375 0.791975830078125 -0.21775 -0.416412353515625 0.791975830078125 -0.217875 -0.35906982421875 0.791975830078125 -0.218 -0.299163818359375 0.791975830078125 -0.218125 -0.246612548828125 0.791975830078125 -0.21825 -0.1832275390625 0.791975830078125 -0.218375 -0.125640869140625 0.791975830078125 -0.2185 -0.062255859375 0.791975830078125 +0.203125 0.046875 0.791975830078125 +0.20325 0.09857177734375 0.791975830078125 +0.203375 0.1441650390625 0.791975830078125 +0.2035 0.193450927734375 0.791975830078125 +0.203625 0.2406005859375 0.791975830078125 +0.20375 0.28082275390625 0.791975830078125 +0.203875 0.32257080078125 0.791975830078125 +0.204 0.357086181640625 0.791975830078125 +0.204125 0.391754150390625 0.791975830078125 +0.20425 0.422088623046875 0.791975830078125 +0.204375 0.445404052734375 0.791975830078125 +0.2045 0.4666748046875 0.791975830078125 +0.204625 0.48138427734375 0.791975830078125 +0.20475 0.49267578125 0.791975830078125 +0.204875 0.498504638671875 0.791975830078125 +0.205 0.498992919921875 0.791975830078125 +0.205125 0.494598388671875 0.791975830078125 +0.20525 0.485748291015625 0.791975830078125 +0.205375 0.4708251953125 0.791975830078125 +0.2055 0.45074462890625 0.791975830078125 +0.205625 0.42877197265625 0.791975830078125 +0.20575 0.3995361328125 0.791975830078125 +0.205875 0.36944580078125 0.791975830078125 +0.206 0.332275390625 0.791975830078125 +0.206125 0.29150390625 0.791975830078125 +0.20625 0.25244140625 0.791975830078125 +0.206375 0.2061767578125 0.791975830078125 +0.2065 0.16259765625 0.791975830078125 +0.206625 0.11273193359375 0.791975830078125 +0.20675 0.061737060546875 0.791975830078125 +0.206875 0.01544189453125 0.791975830078125 +0.207 -0.036041259765625 0.791975830078125 +0.207125 -0.081878662109375 0.791975830078125 +0.20725 -0.13177490234375 0.791975830078125 +0.207375 -0.180419921875 0.791975830078125 +0.2075 -0.222015380859375 0.791975830078125 +0.207625 -0.265716552734375 0.791975830078125 +0.20775 -0.302337646484375 0.791975830078125 +0.207875 -0.339691162109375 0.791975830078125 +0.208 -0.37408447265625 0.791975830078125 +0.208125 -0.400482177734375 0.791975830078125 +0.20825 -0.425567626953125 0.791975830078125 +0.208375 -0.443878173828125 0.791975830078125 +0.2085 -0.460968017578125 0.791975830078125 +0.208625 -0.471588134765625 0.791975830078125 +0.20875 -0.476470947265625 0.791975830078125 +0.208875 -0.47705078125 0.791975830078125 +0.209 -0.472869873046875 0.791975830078125 +0.209125 -0.465087890625 0.791975830078125 +0.20925 -0.45062255859375 0.791975830078125 +0.209375 -0.433319091796875 0.791975830078125 +0.2095 -0.4097900390625 0.791975830078125 +0.209625 -0.38623046875 0.791975830078125 +0.20975 -0.354705810546875 0.791975830078125 +0.209875 -0.319488525390625 0.791975830078125 +0.21 -0.284881591796875 0.791975830078125 +0.210125 -0.243927001953125 0.791975830078125 +0.21025 -0.205810546875 0.791975830078125 +0.210375 -0.16064453125 0.791975830078125 +0.2105 -0.114105224609375 0.791975830078125 +0.210625 -0.071441650390625 0.791975830078125 +0.21075 -0.023895263671875 0.791975830078125 +0.210875 0.019012451171875 0.791975830078125 +0.211 0.0660400390625 0.791975830078125 +0.211125 0.111907958984375 0.791975830078125 +0.21125 0.151641845703125 0.791975830078125 +0.211375 0.19488525390625 0.791975830078125 +0.2115 0.230743408203125 0.791975830078125 +0.211625 0.267822265625 0.791975830078125 +0.21175 0.30157470703125 0.791975830078125 +0.211875 0.3304443359375 0.791975830078125 +0.212 0.3570556640625 0.791975830078125 +0.212125 0.377166748046875 0.791975830078125 +0.21225 0.3955078125 0.791975830078125 +0.212375 0.409210205078125 0.791975830078125 +0.2125 0.419921875 0.791975830078125 +0.212625 0.42474365234375 0.791975830078125 +0.21275 0.424774169921875 0.791975830078125 +0.212875 0.420623779296875 0.791975830078125 +0.213 0.41461181640625 0.791975830078125 +0.213125 0.402587890625 0.791975830078125 +0.21325 0.385528564453125 0.791975830078125 +0.213375 0.36639404296875 0.791975830078125 +0.2135 0.341888427734375 0.791975830078125 +0.213625 0.3162841796875 0.791975830078125 +0.21375 0.288116455078125 0.791975830078125 +0.213875 0.254486083984375 0.791975830078125 +0.214 0.222076416015625 0.791975830078125 +0.214125 0.1859130859375 0.791975830078125 +0.21425 0.146575927734375 0.791975830078125 +0.214375 0.11016845703125 0.791975830078125 +0.2145 0.0693359375 0.791975830078125 +0.214625 0.032470703125 0.791975830078125 +0.21475 -0.008148193359375 0.791975830078125 +0.214875 -0.04827880859375 0.791975830078125 +0.215 -0.083282470703125 0.791975830078125 +0.215125 -0.120697021484375 0.791975830078125 +0.21525 -0.15252685546875 0.791975830078125 +0.215375 -0.1875 0.791975830078125 +0.2155 -0.2183837890625 0.791975830078125 +0.215625 -0.243377685546875 0.791975830078125 +0.21575 -0.26824951171875 0.791975830078125 +0.215875 -0.290283203125 0.791975830078125 +0.216 -0.308624267578125 0.791975830078125 +0.216125 -0.32318115234375 0.791975830078125 +0.21625 -0.332611083984375 0.791975830078125 +0.216375 -0.339691162109375 0.791975830078125 +0.2165 -0.346038818359375 0.791975830078125 +0.216625 -0.345733642578125 0.791975830078125 +0.21675 -0.341552734375 0.791975830078125 +0.216875 -0.334228515625 0.791975830078125 +0.217 -0.326873779296875 0.791975830078125 +0.217125 -0.31353759765625 0.791975830078125 +0.21725 -0.296142578125 0.791975830078125 +0.217375 -0.27581787109375 0.791975830078125 +0.2175 -0.254974365234375 0.791975830078125 +0.217625 -0.23291015625 0.791975830078125 +0.21775 -0.208221435546875 0.791975830078125 +0.217875 -0.1795654296875 0.791975830078125 +0.218 -0.14959716796875 0.791975830078125 +0.218125 -0.123321533203125 0.791975830078125 +0.21825 -0.091644287109375 0.791975830078125 +0.218375 -0.062835693359375 0.791975830078125 +0.2185 -0.031158447265625 0.791975830078125 0.218625 0.0 0.791975830078125 -0.21875 0.05523681640625 0.791975830078125 -0.218875 0.11444091796875 0.791975830078125 -0.219 0.164886474609375 0.791975830078125 -0.219125 0.217742919921875 0.791975830078125 -0.21925 0.27069091796875 0.791975830078125 -0.219375 0.310943603515625 0.791975830078125 -0.2195 0.351470947265625 0.791975830078125 -0.219625 0.38275146484375 0.791975830078125 -0.21975 0.412872314453125 0.791975830078125 -0.219875 0.44482421875 0.791975830078125 -0.22 0.46148681640625 0.791975830078125 -0.220125 0.475128173828125 0.791975830078125 -0.22025 0.481475830078125 0.791975830078125 -0.220375 0.492919921875 0.791975830078125 -0.2205 0.489837646484375 0.791975830078125 -0.220625 0.481414794921875 0.791975830078125 -0.22075 0.46807861328125 0.791975830078125 -0.220875 0.450958251953125 0.791975830078125 -0.221 0.43743896484375 0.791975830078125 -0.221125 0.410675048828125 0.791975830078125 -0.22125 0.38262939453125 0.791975830078125 -0.221375 0.349334716796875 0.791975830078125 -0.2215 0.3233642578125 0.791975830078125 -0.221625 0.284820556640625 0.791975830078125 -0.22175 0.244598388671875 0.791975830078125 -0.221875 0.20697021484375 0.791975830078125 -0.222 0.165252685546875 0.791975830078125 -0.222125 0.13055419921875 0.791975830078125 -0.22225 0.08843994140625 0.791975830078125 -0.222375 0.04730224609375 0.791975830078125 -0.2225 0.011505126953125 0.791975830078125 -0.222625 -0.02691650390625 0.791975830078125 -0.22275 -0.0596923828125 0.791975830078125 -0.222875 -0.093658447265625 0.791975830078125 -0.223 -0.1246337890625 0.791975830078125 -0.223125 -0.14923095703125 0.791975830078125 -0.22325 -0.179046630859375 0.791975830078125 -0.223375 -0.19805908203125 0.791975830078125 -0.2235 -0.21612548828125 0.791975830078125 -0.223625 -0.2303466796875 0.791975830078125 -0.22375 -0.23895263671875 0.791975830078125 -0.223875 -0.254638671875 0.791975830078125 -0.224 -0.257110595703125 0.9999084491282701 -0.224125 -0.257354736328125 0.9999084491282701 -0.22425 -0.254150390625 0.9999084491282701 -0.224375 -0.24749755859375 0.9999084491282701 -0.2245 -0.23846435546875 0.9999084491282701 -0.224625 -0.227020263671875 0.9999084491282701 -0.22475 -0.213287353515625 0.9999084491282701 -0.224875 -0.207366943359375 0.9999084491282701 -0.225 -0.19073486328125 0.9999084491282701 -0.225125 -0.172119140625 0.9999084491282701 -0.22525 -0.153778076171875 0.9999084491282701 -0.225375 -0.13397216796875 0.9999084491282701 -0.2255 -0.114105224609375 0.9999084491282701 -0.225625 -0.0958251953125 0.9999084491282701 -0.22575 -0.076904296875 0.9999084491282701 -0.225875 -0.060272216796875 0.9999084491282701 -0.226 -0.04364013671875 0.9999084491282701 -0.226125 -0.031097412109375 0.9999084491282701 -0.22625 -0.0179443359375 0.9999084491282701 -0.226375 -0.00543212890625 0.9999084491282701 -0.2265 0.00390625 0.9999084491282701 -0.226625 0.012176513671875 0.9999084491282701 -0.22675 0.018157958984375 0.9999084491282701 -0.226875 0.021209716796875 0.9999084491282701 -0.227 0.022705078125 0.9999084491282701 -0.227125 0.021636962890625 0.9999084491282701 -0.22725 0.018951416015625 0.9999084491282701 -0.227375 0.021453857421875 0.9999084491282701 -0.2275 0.015655517578125 0.9999084491282701 -0.227625 0.00848388671875 0.9999084491282701 +0.21875 0.027618408203125 0.791975830078125 +0.218875 0.057220458984375 0.791975830078125 +0.219 0.082427978515625 0.791975830078125 +0.219125 0.108856201171875 0.791975830078125 +0.21925 0.135345458984375 0.791975830078125 +0.219375 0.15545654296875 0.791975830078125 +0.2195 0.17572021484375 0.791975830078125 +0.219625 0.191375732421875 0.791975830078125 +0.21975 0.2064208984375 0.791975830078125 +0.219875 0.222412109375 0.791975830078125 +0.22 0.230743408203125 0.791975830078125 +0.220125 0.237548828125 0.791975830078125 +0.22025 0.24072265625 0.791975830078125 +0.220375 0.2464599609375 0.791975830078125 +0.2205 0.244903564453125 0.791975830078125 +0.220625 0.240692138671875 0.791975830078125 +0.22075 0.234039306640625 0.791975830078125 +0.220875 0.2254638671875 0.791975830078125 +0.221 0.218719482421875 0.791975830078125 +0.221125 0.205322265625 0.791975830078125 +0.22125 0.191314697265625 0.791975830078125 +0.221375 0.174652099609375 0.791975830078125 +0.2215 0.16168212890625 0.791975830078125 +0.221625 0.14239501953125 0.791975830078125 +0.22175 0.122283935546875 0.791975830078125 +0.221875 0.103485107421875 0.791975830078125 +0.222 0.082611083984375 0.791975830078125 +0.222125 0.065277099609375 0.791975830078125 +0.22225 0.044219970703125 0.791975830078125 +0.222375 0.023651123046875 0.791975830078125 +0.2225 0.0057373046875 0.791975830078125 +0.222625 -0.01348876953125 0.791975830078125 +0.22275 -0.029876708984375 0.791975830078125 +0.222875 -0.046844482421875 0.791975830078125 +0.223 -0.062347412109375 0.791975830078125 +0.223125 -0.07464599609375 0.791975830078125 +0.22325 -0.08953857421875 0.791975830078125 +0.223375 -0.09906005859375 0.791975830078125 +0.2235 -0.10809326171875 0.791975830078125 +0.223625 -0.115203857421875 0.791975830078125 +0.22375 -0.1195068359375 0.791975830078125 +0.223875 -0.127349853515625 0.791975830078125 +0.224 -0.128570556640625 0.9999084491282701 +0.224125 -0.128692626953125 0.9999084491282701 +0.22425 -0.127105712890625 0.9999084491282701 +0.224375 -0.123779296875 0.9999084491282701 +0.2245 -0.1192626953125 0.9999084491282701 +0.224625 -0.113525390625 0.9999084491282701 +0.22475 -0.106658935546875 0.9999084491282701 +0.224875 -0.10369873046875 0.9999084491282701 +0.225 -0.09539794921875 0.9999084491282701 +0.225125 -0.086090087890625 0.9999084491282701 +0.22525 -0.076904296875 0.9999084491282701 +0.225375 -0.0670166015625 0.9999084491282701 +0.2255 -0.05706787109375 0.9999084491282701 +0.225625 -0.047943115234375 0.9999084491282701 +0.22575 -0.038482666015625 0.9999084491282701 +0.225875 -0.0301513671875 0.9999084491282701 +0.226 -0.0218505859375 0.9999084491282701 +0.226125 -0.01556396484375 0.9999084491282701 +0.22625 -0.009002685546875 0.9999084491282701 +0.226375 -0.00274658203125 0.9999084491282701 +0.2265 0.001953125 0.9999084491282701 +0.226625 0.006072998046875 0.9999084491282701 +0.22675 0.009063720703125 0.9999084491282701 +0.226875 0.010589599609375 0.9999084491282701 +0.227 0.0113525390625 0.9999084491282701 +0.227125 0.01080322265625 0.9999084491282701 +0.22725 0.00946044921875 0.9999084491282701 +0.227375 0.010711669921875 0.9999084491282701 +0.2275 0.0078125 0.9999084491282701 +0.227625 0.004241943359375 0.9999084491282701 0.22775 0.0 0.9999084491282701 -0.227875 -0.009521484375 0.9999084491282701 -0.228 -0.019866943359375 0.9999084491282701 -0.228125 -0.030609130859375 0.9999084491282701 -0.22825 -0.041534423828125 0.9999084491282701 -0.228375 -0.05224609375 0.9999084491282701 -0.2285 -0.0625 0.9999084491282701 -0.228625 -0.061614990234375 0.9999084491282701 -0.22875 -0.07025146484375 0.9999084491282701 -0.228875 -0.077392578125 0.9999084491282701 -0.229 -0.083343505859375 0.9999084491282701 -0.229125 -0.087005615234375 0.9999084491282701 -0.22925 -0.0885009765625 0.9999084491282701 -0.229375 -0.08856201171875 0.9999084491282701 -0.2295 -0.0853271484375 0.9999084491282701 -0.229625 -0.080780029296875 0.9999084491282701 -0.22975 -0.072418212890625 0.9999084491282701 -0.229875 -0.057525634765625 0.9999084491282701 -0.23 -0.046478271484375 0.9999084491282701 -0.230125 -0.03131103515625 0.9999084491282701 -0.23025 -0.015625 0.9999084491282701 -0.230375 0.00408935546875 0.9999084491282701 -0.2305 0.0260009765625 0.9999084491282701 -0.230625 0.047515869140625 0.9999084491282701 -0.23075 0.072784423828125 0.9999084491282701 -0.230875 0.096954345703125 0.9999084491282701 -0.231 0.124267578125 0.9999084491282701 -0.231125 0.146087646484375 0.9999084491282701 -0.23125 0.17108154296875 0.9999084491282701 -0.231375 0.1978759765625 0.9999084491282701 -0.2315 0.222137451171875 0.9999084491282701 -0.231625 0.24713134765625 0.9999084491282701 -0.23175 0.2705078125 0.9999084491282701 -0.231875 0.2906494140625 0.9999084491282701 -0.232 0.309661865234375 0.9999084491282701 -0.232125 0.325225830078125 0.9999084491282701 -0.23225 0.338348388671875 0.9999084491282701 -0.232375 0.337982177734375 0.9999084491282701 -0.2325 0.34417724609375 0.9999084491282701 -0.232625 0.3460693359375 0.9999084491282701 -0.23275 0.344940185546875 0.9999084491282701 -0.232875 0.338348388671875 0.9999084491282701 -0.233 0.327117919921875 0.9999084491282701 -0.233125 0.313720703125 0.9999084491282701 -0.23325 0.293487548828125 0.9999084491282701 -0.233375 0.271942138671875 0.9999084491282701 -0.2335 0.242919921875 0.9999084491282701 -0.233625 0.205047607421875 0.9999084491282701 -0.23375 0.17279052734375 0.9999084491282701 -0.233875 0.132904052734375 0.9999084491282701 -0.234 0.094329833984375 0.9999084491282701 -0.234125 0.048370361328125 0.9999084491282701 +0.227875 -0.004791259765625 0.9999084491282701 +0.228 -0.00994873046875 0.9999084491282701 +0.228125 -0.01531982421875 0.9999084491282701 +0.22825 -0.020782470703125 0.9999084491282701 +0.228375 -0.026153564453125 0.9999084491282701 +0.2285 -0.031280517578125 0.9999084491282701 +0.228625 -0.03082275390625 0.9999084491282701 +0.22875 -0.03515625 0.9999084491282701 +0.228875 -0.038726806640625 0.9999084491282701 +0.229 -0.04168701171875 0.9999084491282701 +0.229125 -0.04351806640625 0.9999084491282701 +0.22925 -0.044281005859375 0.9999084491282701 +0.229375 -0.0443115234375 0.9999084491282701 +0.2295 -0.042694091796875 0.9999084491282701 +0.229625 -0.0404052734375 0.9999084491282701 +0.22975 -0.036224365234375 0.9999084491282701 +0.229875 -0.028778076171875 0.9999084491282701 +0.23 -0.02325439453125 0.9999084491282701 +0.230125 -0.01568603515625 0.9999084491282701 +0.23025 -0.007843017578125 0.9999084491282701 +0.230375 0.002044677734375 0.9999084491282701 +0.2305 0.01300048828125 0.9999084491282701 +0.230625 0.02374267578125 0.9999084491282701 +0.23075 0.036376953125 0.9999084491282701 +0.230875 0.0484619140625 0.9999084491282701 +0.231 0.0621337890625 0.9999084491282701 +0.231125 0.073028564453125 0.9999084491282701 +0.23125 0.085540771484375 0.9999084491282701 +0.231375 0.09893798828125 0.9999084491282701 +0.2315 0.111053466796875 0.9999084491282701 +0.231625 0.123565673828125 0.9999084491282701 +0.23175 0.13525390625 0.9999084491282701 +0.231875 0.14532470703125 0.9999084491282701 +0.232 0.154815673828125 0.9999084491282701 +0.232125 0.16259765625 0.9999084491282701 +0.23225 0.169158935546875 0.9999084491282701 +0.232375 0.168975830078125 0.9999084491282701 +0.2325 0.172088623046875 0.9999084491282701 +0.232625 0.17303466796875 0.9999084491282701 +0.23275 0.172454833984375 0.9999084491282701 +0.232875 0.169158935546875 0.9999084491282701 +0.233 0.163543701171875 0.9999084491282701 +0.233125 0.1568603515625 0.9999084491282701 +0.23325 0.146728515625 0.9999084491282701 +0.233375 0.135955810546875 0.9999084491282701 +0.2335 0.1214599609375 0.9999084491282701 +0.233625 0.102508544921875 0.9999084491282701 +0.23375 0.086395263671875 0.9999084491282701 +0.233875 0.066436767578125 0.9999084491282701 +0.234 0.047149658203125 0.9999084491282701 +0.234125 0.024169921875 0.9999084491282701 0.23425 0.0 0.9999084491282701 -0.234375 -0.0452880859375 0.9999084491282701 -0.2345 -0.096954345703125 0.9999084491282701 -0.234625 -0.144439697265625 0.9999084491282701 -0.23475 -0.197174072265625 0.9999084491282701 -0.234875 -0.245147705078125 0.9999084491282701 -0.235 -0.291107177734375 0.9999084491282701 -0.235125 -0.34002685546875 0.9999084491282701 -0.23525 -0.38275146484375 0.9999084491282701 -0.235375 -0.4267578125 0.9999084491282701 -0.2355 -0.467132568359375 0.9999084491282701 -0.235625 -0.50067138671875 0.9999084491282701 -0.23575 -0.532684326171875 0.9999084491282701 -0.235875 -0.55780029296875 0.9999084491282701 -0.236 -0.57940673828125 0.9999084491282701 -0.236125 -0.58648681640625 0.9999084491282701 -0.23625 -0.595794677734375 0.9999084491282701 -0.236375 -0.598846435546875 0.9999084491282701 -0.2365 -0.596588134765625 0.9999084491282701 -0.236625 -0.58648681640625 0.9999084491282701 -0.23675 -0.56927490234375 0.9999084491282701 -0.236875 -0.54852294921875 0.9999084491282701 -0.237 -0.518035888671875 0.9999084491282701 -0.237125 -0.4854736328125 0.9999084491282701 -0.23725 -0.442413330078125 0.9999084491282701 -0.237375 -0.38861083984375 0.9999084491282701 -0.2375 -0.34051513671875 0.9999084491282701 -0.237625 -0.281707763671875 0.9999084491282701 -0.23775 -0.22503662109375 0.9999084491282701 -0.237875 -0.157989501953125 0.9999084491282701 -0.238 -0.087615966796875 0.9999084491282701 -0.238125 -0.02215576171875 0.9999084491282701 -0.23825 0.05224609375 0.9999084491282701 -0.238375 0.12030029296875 0.9999084491282701 -0.2385 0.195953369140625 0.9999084491282701 -0.238625 0.268280029296875 0.9999084491282701 -0.23875 0.334075927734375 0.9999084491282701 -0.238875 0.4046630859375 0.9999084491282701 -0.239 0.4658203125 0.9999084491282701 -0.239125 0.529510498046875 0.9999084491282701 -0.23925 0.58837890625 0.9999084491282701 -0.239375 0.637115478515625 0.9999084491282701 -0.2395 0.68475341796875 0.9999084491282701 -0.239625 0.722320556640625 0.9999084491282701 -0.23975 0.75628662109375 0.9999084491282701 -0.239875 0.776031494140625 0.9999084491282701 -0.24 0.792816162109375 0.9999084491282701 -0.240125 0.8026123046875 0.9999084491282701 -0.24025 0.804443359375 0.9999084491282701 -0.240375 0.797149658203125 0.9999084491282701 -0.2405 0.78082275390625 0.9999084491282701 -0.240625 0.7589111328125 0.9999084491282701 -0.24075 0.72552490234375 0.9999084491282701 -0.240875 0.688507080078125 0.9999084491282701 -0.241 0.6390380859375 0.9999084491282701 -0.241125 0.577850341796875 0.9999084491282701 -0.24125 0.520782470703125 0.9999084491282701 -0.241375 0.45062255859375 0.9999084491282701 -0.2415 0.38262939453125 0.9999084491282701 -0.241625 0.301788330078125 0.9999084491282701 -0.24175 0.216583251953125 0.9999084491282701 -0.241875 0.136993408203125 0.9999084491282701 -0.242 0.046051025390625 0.9999084491282701 -0.242125 -0.03704833984375 0.9999084491282701 -0.24225 -0.130096435546875 0.9999084491282701 -0.242375 -0.22149658203125 0.9999084491282701 -0.2425 -0.303314208984375 0.9999084491282701 -0.242625 -0.391754150390625 0.9999084491282701 -0.24275 -0.4686279296875 0.9999084491282701 -0.242875 -0.549560546875 0.9999084491282701 -0.243 -0.625244140625 0.9999084491282701 -0.243125 -0.688262939453125 0.9999084491282701 -0.24325 -0.75128173828125 0.9999084491282701 -0.243375 -0.80169677734375 0.9999084491282701 -0.2435 -0.8492431640625 0.9999084491282701 -0.243625 -0.85479736328125 0.9999084491282701 -0.24375 -0.85504150390625 0.9999084491282701 -0.243875 -0.855224609375 0.9999084491282701 -0.244 -0.855316162109375 0.9999084491282701 -0.244125 -0.855316162109375 0.9999084491282701 -0.24425 -0.855224609375 0.9999084491282701 -0.244375 -0.855072021484375 0.9999084491282701 -0.2445 -0.854766845703125 0.9999084491282701 -0.244625 -0.848236083984375 0.9999084491282701 -0.24475 -0.7996826171875 0.9999084491282701 -0.244875 -0.739776611328125 0.9999084491282701 -0.245 -0.680908203125 0.9999084491282701 -0.245125 -0.60772705078125 0.9999084491282701 -0.24525 -0.535858154296875 0.9999084491282701 -0.245375 -0.4498291015625 0.9999084491282701 -0.2455 -0.358306884765625 0.9999084491282701 -0.245625 -0.272186279296875 0.9999084491282701 -0.24575 -0.173126220703125 0.9999084491282701 -0.245875 -0.081939697265625 0.9999084491282701 -0.246 0.0205078125 0.9999084491282701 -0.246125 0.123046875 0.9999084491282701 -0.24625 0.214599609375 0.9999084491282701 -0.246375 0.314422607421875 0.9999084491282701 -0.2465 0.401641845703125 0.9999084491282701 -0.246625 0.494537353515625 0.9999084491282701 -0.24675 0.582183837890625 0.9999084491282701 -0.246875 0.655975341796875 0.9999084491282701 -0.247 0.731048583984375 0.9999084491282701 -0.247125 0.7919921875 0.9999084491282701 -0.24725 0.851409912109375 0.9999084491282701 -0.247375 0.85491943359375 0.9999084491282701 -0.2475 0.855255126953125 0.9999084491282701 -0.247625 0.855560302734375 0.9999084491282701 -0.24775 0.855743408203125 0.9999084491282701 -0.247875 0.8558349609375 0.9999084491282701 -0.248 0.8558349609375 0.9999084491282701 -0.248125 0.855743408203125 0.9999084491282701 -0.24825 0.85552978515625 0.9999084491282701 -0.248375 0.855255126953125 0.9999084491282701 -0.2485 0.8548583984375 0.9999084491282701 -0.248625 0.844207763671875 0.9999084491282701 -0.24875 0.78997802734375 0.9999084491282701 -0.248875 0.721435546875 0.9999084491282701 -0.249 0.6529541015625 0.9999084491282701 -0.249125 0.570068359375 0.9999084491282701 -0.24925 0.480987548828125 0.9999084491282701 -0.249375 0.396270751953125 0.9999084491282701 -0.2495 0.29815673828125 0.9999084491282701 -0.249625 0.20709228515625 0.9999084491282701 -0.24975 0.10400390625 0.9999084491282701 +0.234375 -0.022674560546875 0.9999084491282701 +0.2345 -0.048492431640625 0.9999084491282701 +0.234625 -0.072235107421875 0.9999084491282701 +0.23475 -0.098602294921875 0.9999084491282701 +0.234875 -0.122589111328125 0.9999084491282701 +0.235 -0.14556884765625 0.9999084491282701 +0.235125 -0.1700439453125 0.9999084491282701 +0.23525 -0.19140625 0.9999084491282701 +0.235375 -0.213409423828125 0.9999084491282701 +0.2355 -0.23358154296875 0.9999084491282701 +0.235625 -0.2503662109375 0.9999084491282701 +0.23575 -0.266357421875 0.9999084491282701 +0.235875 -0.2789306640625 0.9999084491282701 +0.236 -0.28973388671875 0.9999084491282701 +0.236125 -0.29327392578125 0.9999084491282701 +0.23625 -0.29791259765625 0.9999084491282701 +0.236375 -0.2994384765625 0.9999084491282701 +0.2365 -0.298309326171875 0.9999084491282701 +0.236625 -0.29327392578125 0.9999084491282701 +0.23675 -0.28466796875 0.9999084491282701 +0.236875 -0.2742919921875 0.9999084491282701 +0.237 -0.259033203125 0.9999084491282701 +0.237125 -0.242767333984375 0.9999084491282701 +0.23725 -0.221221923828125 0.9999084491282701 +0.237375 -0.1943359375 0.9999084491282701 +0.2375 -0.1702880859375 0.9999084491282701 +0.237625 -0.140869140625 0.9999084491282701 +0.23775 -0.112548828125 0.9999084491282701 +0.237875 -0.079010009765625 0.9999084491282701 +0.238 -0.0438232421875 0.9999084491282701 +0.238125 -0.0111083984375 0.9999084491282701 +0.23825 0.026123046875 0.9999084491282701 +0.238375 0.060150146484375 0.9999084491282701 +0.2385 0.09796142578125 0.9999084491282701 +0.238625 0.134124755859375 0.9999084491282701 +0.23875 0.167022705078125 0.9999084491282701 +0.238875 0.20233154296875 0.9999084491282701 +0.239 0.23291015625 0.9999084491282701 +0.239125 0.264739990234375 0.9999084491282701 +0.23925 0.294189453125 0.9999084491282701 +0.239375 0.31854248046875 0.9999084491282701 +0.2395 0.342376708984375 0.9999084491282701 +0.239625 0.36114501953125 0.9999084491282701 +0.23975 0.378143310546875 0.9999084491282701 +0.239875 0.38800048828125 0.9999084491282701 +0.24 0.396392822265625 0.9999084491282701 +0.240125 0.40130615234375 0.9999084491282701 +0.24025 0.4022216796875 0.9999084491282701 +0.240375 0.3985595703125 0.9999084491282701 +0.2405 0.390411376953125 0.9999084491282701 +0.240625 0.37945556640625 0.9999084491282701 +0.24075 0.362762451171875 0.9999084491282701 +0.240875 0.34423828125 0.9999084491282701 +0.241 0.31951904296875 0.9999084491282701 +0.241125 0.288909912109375 0.9999084491282701 +0.24125 0.2603759765625 0.9999084491282701 +0.241375 0.225311279296875 0.9999084491282701 +0.2415 0.191314697265625 0.9999084491282701 +0.241625 0.15087890625 0.9999084491282701 +0.24175 0.1082763671875 0.9999084491282701 +0.241875 0.0684814453125 0.9999084491282701 +0.242 0.02301025390625 0.9999084491282701 +0.242125 -0.0185546875 0.9999084491282701 +0.24225 -0.0650634765625 0.9999084491282701 +0.242375 -0.11077880859375 0.9999084491282701 +0.2425 -0.15167236328125 0.9999084491282701 +0.242625 -0.195892333984375 0.9999084491282701 +0.24275 -0.234344482421875 0.9999084491282701 +0.242875 -0.274810791015625 0.9999084491282701 +0.243 -0.312652587890625 0.9999084491282701 +0.243125 -0.344146728515625 0.9999084491282701 +0.24325 -0.37567138671875 0.9999084491282701 +0.243375 -0.40087890625 0.9999084491282701 +0.2435 -0.424652099609375 0.9999084491282701 +0.243625 -0.44207763671875 0.9999084491282701 +0.24375 -0.455474853515625 0.9999084491282701 +0.243875 -0.4654541015625 0.9999084491282701 +0.244 -0.47027587890625 0.9999084491282701 +0.244125 -0.470489501953125 0.9999084491282701 +0.24425 -0.465423583984375 0.9999084491282701 +0.244375 -0.456573486328125 0.9999084491282701 +0.2445 -0.44171142578125 0.9999084491282701 +0.244625 -0.42413330078125 0.9999084491282701 +0.24475 -0.399871826171875 0.9999084491282701 +0.244875 -0.369903564453125 0.9999084491282701 +0.245 -0.340484619140625 0.9999084491282701 +0.245125 -0.30389404296875 0.9999084491282701 +0.24525 -0.2679443359375 0.9999084491282701 +0.245375 -0.224945068359375 0.9999084491282701 +0.2455 -0.179168701171875 0.9999084491282701 +0.245625 -0.1361083984375 0.9999084491282701 +0.24575 -0.086578369140625 0.9999084491282701 +0.245875 -0.040985107421875 0.9999084491282701 +0.246 0.01025390625 0.9999084491282701 +0.246125 0.0615234375 0.9999084491282701 +0.24625 0.1072998046875 0.9999084491282701 +0.246375 0.157196044921875 0.9999084491282701 +0.2465 0.2008056640625 0.9999084491282701 +0.246625 0.24725341796875 0.9999084491282701 +0.24675 0.29107666015625 0.9999084491282701 +0.246875 0.327972412109375 0.9999084491282701 +0.247 0.365509033203125 0.9999084491282701 +0.247125 0.39599609375 0.9999084491282701 +0.24725 0.425689697265625 0.9999084491282701 +0.247375 0.4503173828125 0.9999084491282701 +0.2475 0.46868896484375 0.9999084491282701 +0.247625 0.48419189453125 0.9999084491282701 +0.24775 0.493560791015625 0.9999084491282701 +0.247875 0.498809814453125 0.9999084491282701 +0.248 0.498504638671875 0.9999084491282701 +0.248125 0.493499755859375 0.9999084491282701 +0.24825 0.482757568359375 0.9999084491282701 +0.248375 0.468536376953125 0.9999084491282701 +0.2485 0.447784423828125 0.9999084491282701 +0.248625 0.422088623046875 0.9999084491282701 +0.24875 0.394989013671875 0.9999084491282701 +0.248875 0.3607177734375 0.9999084491282701 +0.249 0.32647705078125 0.9999084491282701 +0.249125 0.2850341796875 0.9999084491282701 +0.24925 0.240478515625 0.9999084491282701 +0.249375 0.1981201171875 0.9999084491282701 +0.2495 0.149078369140625 0.9999084491282701 +0.249625 0.103546142578125 0.9999084491282701 +0.24975 0.052001953125 0.9999084491282701 0.249875 0.0 0.9999084491282701 -0.25 -0.093505859375 0.9999084491282701 -0.250125 -0.196258544921875 0.9999084491282701 -0.25025 -0.286651611328125 0.9999084491282701 -0.250375 -0.383819580078125 0.9999084491282701 -0.2505 -0.476470947265625 0.9999084491282701 -0.250625 -0.555023193359375 0.9999084491282701 -0.25075 -0.63629150390625 0.9999084491282701 -0.250875 -0.70306396484375 0.9999084491282701 -0.251 -0.7696533203125 0.9999084491282701 -0.251125 -0.8292236328125 0.9999084491282701 -0.25125 -0.85467529296875 0.9999084491282701 -0.251375 -0.855072021484375 0.9999084491282701 -0.2515 -0.855316162109375 0.9999084491282701 -0.251625 -0.855499267578125 0.9999084491282701 -0.25175 -0.8555908203125 0.9999084491282701 -0.251875 -0.8555908203125 0.9999084491282701 -0.252 -0.85546875 0.9999084491282701 -0.252125 -0.85528564453125 0.9999084491282701 -0.25225 -0.855010986328125 0.9999084491282701 -0.252375 -0.854644775390625 0.9999084491282701 -0.2525 -0.8238525390625 0.9999084491282701 -0.252625 -0.76593017578125 0.9999084491282701 -0.25275 -0.706634521484375 0.9999084491282701 -0.252875 -0.634033203125 0.9999084491282701 -0.253 -0.554931640625 0.9999084491282701 -0.253125 -0.478851318359375 0.9999084491282701 -0.25325 -0.39007568359375 0.9999084491282701 -0.253375 -0.306915283203125 0.9999084491282701 -0.2535 -0.212249755859375 0.9999084491282701 -0.253625 -0.116455078125 0.9999084491282701 -0.2537500000000001 -0.029022216796875 0.9999084491282701 -0.253875 0.06744384765625 0.9999084491282701 -0.254 0.152984619140625 0.9999084491282701 -0.254125 0.245574951171875 0.9999084491282701 -0.25425 0.334625244140625 0.9999084491282701 -0.254375 0.410675048828125 0.9999084491282701 -0.2545 0.490264892578125 0.9999084491282701 -0.254625 0.556243896484375 0.9999084491282701 -0.25475 0.623260498046875 0.9999084491282701 -0.254875 0.6864013671875 0.9999084491282701 -0.255 0.732818603515625 0.9999084491282701 -0.255125 0.77655029296875 0.9999084491282701 -0.25525 0.80767822265625 0.9999084491282701 -0.255375 0.833892822265625 0.9999084491282701 -0.2555 0.85052490234375 0.9999084491282701 -0.255625 0.8544921875 0.9999084491282701 -0.25575 0.8544921875 0.9999084491282701 -0.255875 0.8450927734375 0.9999084491282701 +0.25 -0.046783447265625 0.9999084491282701 +0.250125 -0.09814453125 0.9999084491282701 +0.25025 -0.143341064453125 0.9999084491282701 +0.250375 -0.191925048828125 0.9999084491282701 +0.2505 -0.238250732421875 0.9999084491282701 +0.250625 -0.27752685546875 0.9999084491282701 +0.25075 -0.31817626953125 0.9999084491282701 +0.250875 -0.3515625 0.9999084491282701 +0.251 -0.384857177734375 0.9999084491282701 +0.251125 -0.414642333984375 0.9999084491282701 +0.25125 -0.4366455078125 0.9999084491282701 +0.251375 -0.456512451171875 0.9999084491282701 +0.2515 -0.46990966796875 0.9999084491282701 +0.251625 -0.47991943359375 0.9999084491282701 +0.25175 -0.48455810546875 0.9999084491282701 +0.251875 -0.483978271484375 0.9999084491282701 +0.252 -0.478424072265625 0.9999084491282701 +0.252125 -0.468780517578125 0.9999084491282701 +0.25225 -0.453369140625 0.9999084491282701 +0.252375 -0.43438720703125 0.9999084491282701 +0.2525 -0.411956787109375 0.9999084491282701 +0.252625 -0.38299560546875 0.9999084491282701 +0.25275 -0.35333251953125 0.9999084491282701 +0.252875 -0.317047119140625 0.9999084491282701 +0.253 -0.277496337890625 0.9999084491282701 +0.253125 -0.23944091796875 0.9999084491282701 +0.25325 -0.195068359375 0.9999084491282701 +0.253375 -0.153472900390625 0.9999084491282701 +0.2535 -0.10614013671875 0.9999084491282701 +0.253625 -0.058258056640625 0.9999084491282701 +0.2537500000000001 -0.0145263671875 0.9999084491282701 +0.253875 0.033721923828125 0.9999084491282701 +0.254 0.07647705078125 0.9999084491282701 +0.254125 0.122772216796875 0.9999084491282701 +0.25425 0.16729736328125 0.9999084491282701 +0.254375 0.205322265625 0.9999084491282701 +0.2545 0.2451171875 0.9999084491282701 +0.254625 0.278106689453125 0.9999084491282701 +0.25475 0.311614990234375 0.9999084491282701 +0.254875 0.34320068359375 0.9999084491282701 +0.255 0.36639404296875 0.9999084491282701 +0.255125 0.388275146484375 0.9999084491282701 +0.25525 0.403839111328125 0.9999084491282701 +0.255375 0.41693115234375 0.9999084491282701 +0.2555 0.425262451171875 0.9999084491282701 +0.255625 0.428375244140625 0.9999084491282701 +0.25575 0.427581787109375 0.9999084491282701 +0.255875 0.42254638671875 0.9999084491282701 diff --git a/tests/circuitpython/synthesizer.py.exp b/tests/circuitpython/synthesizer.py.exp index 98f45f8bf8..fb2e8c07bd 100644 --- a/tests/circuitpython/synthesizer.py.exp +++ b/tests/circuitpython/synthesizer.py.exp @@ -1,30 +1,30 @@ () [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] (80,) -[-16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383, 16383, 16383, 16383, 16383, 16383, -16383, -16383, -16383, -16383, -16383] +[-16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384, 16383, 16383, 16383, 16383, 16383, -16384, -16384, -16384, -16384, -16384] (80, 91) -[0, 0, 28045, 28045, 0, -28046, -28046, 0, 28045, 28045, 0, 0, 28045, 0, 0, -28046, -28046, 0, 28045, 28045, 0, 0, 28045, 0] +[-1, -1, 28045, 28045, -1, -28046, -28046, -1, 28045, 28045, -1, -1, 28045, -1, -1, -28046, -28046, -1, 28045, 28045, -1, -1, 28045, -1] (91,) -[-28046, 0, 0, 28045, 0, 0, 28045, 28045, 0, -28046, -28046, 0, 28045, 28045, 0, 0, 28045, 0, 0, -28046, -28046, -28046, 28045, 28045] -(-5242, 5242) +[-28046, -1, -1, 28045, -1, -1, 28045, 28045, -1, -28046, -28046, -1, 28045, 28045, -1, -1, 28045, -1, -1, -28046, -28046, -28046, 28045, 28045] +(-5243, 5242) (-10485, 10484) -(-15727, 15727) -(-16383, 16383) -(-14286, 14286) -(-13106, 13106) -(-13106, 13106) -(-13106, 13106) -(-13106, 13106) -(-13106, 13106) -(-13106, 13106) -(-13106, 13106) -(-13106, 13106) -(-11009, 11009) -(-8912, 8912) -(-6815, 6815) -(-4718, 4718) -(-2621, 2621) -(-524, 524) +(-15728, 15727) +(-16384, 16383) +(-14287, 14286) +(-13107, 13106) +(-13107, 13106) +(-13107, 13106) +(-13107, 13106) +(-13107, 13106) +(-13107, 13106) +(-13107, 13106) +(-13107, 13106) +(-11010, 11009) +(-8913, 8912) +(-6816, 6815) +(-4719, 4718) +(-2622, 2621) +(-525, 524) (0, 0) (0, 0) (0, 0) diff --git a/tests/circuitpython/synthesizer_note.py.exp b/tests/circuitpython/synthesizer_note.py.exp index 0c2af86681..24b517ce96 100644 --- a/tests/circuitpython/synthesizer_note.py.exp +++ b/tests/circuitpython/synthesizer_note.py.exp @@ -7,7 +7,7 @@ (Note(frequency=830.6076004423605, panning=0.0, amplitude=1.0, bend=0.0, waveform=None, envelope=None, filter=None, ring_frequency=0.0, ring_bend=0.0, ring_waveform=None),) [-1, -1, -1, 28045, -1, -1, -1, -1, -1, -1, -1, -1, 28045, -1, -1, -1, -1, -28046, -1, -1, -1, -1, 28045, -1] (-5242, 5241) -(-10484, 10484) +(-10485, 10484) (-15727, 15726) (-16383, 16382) (-14286, 14285) From 4ad54b285378744a796a2ad2c25e83ab8e12573e Mon Sep 17 00:00:00 2001 From: foamyguy Date: Wed, 31 May 2023 20:57:17 -0500 Subject: [PATCH 017/241] debugging prints. add rendered_hidden field to tilegrid --- shared-module/displayio/Display.c | 3 +++ shared-module/displayio/Group.c | 8 +++++--- shared-module/displayio/TileGrid.c | 25 +++++++++++++++++++------ shared-module/displayio/TileGrid.h | 3 +++ 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/shared-module/displayio/Display.c b/shared-module/displayio/Display.c index 093604214d..ae2b4efe6b 100644 --- a/shared-module/displayio/Display.c +++ b/shared-module/displayio/Display.c @@ -330,7 +330,10 @@ STATIC void _refresh_display(displayio_display_obj_t *self) { return; } const displayio_area_t *current_area = _get_refresh_areas(self); + int i = 0; while (current_area != NULL) { + mp_printf(&mp_plat_print, "calling refresh area: %d \n", i); + i = i + 1; _refresh_area(self, current_area); current_area = current_area->next; } diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c index bd62280c96..3cdb32ca2f 100644 --- a/shared-module/displayio/Group.c +++ b/shared-module/displayio/Group.c @@ -438,7 +438,7 @@ void displayio_group_finish_refresh(displayio_group_t *self) { } displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, displayio_area_t *tail) { - if (! self->hidden){ + //if (! self->hidden){ if (self->item_removed) { self->dirty_area.next = tail; tail = &self->dirty_area; @@ -457,8 +457,10 @@ displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, dis layer = mp_obj_cast_to_native_base( self->members->items[i], &displayio_tilegrid_type); if (layer != MP_OBJ_NULL) { - if (!common_hal_displayio_tilegrid_get_hidden(layer)){ + if (!displayio_tilegrid_get_rendered_hidden(layer)) { + //if (!common_hal_displayio_tilegrid_get_hidden(layer)){ tail = displayio_tilegrid_get_refresh_areas(layer, tail); + //} } continue; } @@ -468,7 +470,7 @@ displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, dis tail = displayio_group_get_refresh_areas(layer, tail); continue; } - } + // } } return tail; diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index 723aa41682..fd972a9b5e 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -82,10 +82,16 @@ bool common_hal_displayio_tilegrid_get_hidden(displayio_tilegrid_t *self) { return self->hidden; } +bool displayio_tilegrid_get_rendered_hidden(displayio_tilegrid_t *self) { + return self->rendered_hidden; +} + void common_hal_displayio_tilegrid_set_hidden(displayio_tilegrid_t *self, bool hidden) { self->hidden = hidden; if (!hidden) { self->full_change = true; + }else{ + self->rendered_hidden = false; } } @@ -578,16 +584,23 @@ void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) { } displayio_area_t *displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *self, displayio_area_t *tail) { + //mp_printf(&mp_plat_print, "x1 : %d x2: %d \n", self->previous_area.x1, self->previous_area.x2); bool first_draw = self->previous_area.x1 == self->previous_area.x2; bool hidden = self->hidden || self->hidden_by_parent; + //mp_printf(&mp_plat_print, "first draw: %d\n", first_draw); // Check hidden first because it trumps all other changes. if (hidden) { - if (!first_draw) { - self->previous_area.next = tail; - return &self->previous_area; - } else { - return tail; - } + //mp_printf(&mp_plat_print, "rendered_hidden: %d\n", self->rendered_hidden); + //if (!self->rendered_hidden){ + self->rendered_hidden = true; + if (!first_draw) { + self->previous_area.next = tail; + return &self->previous_area; + } else { + return tail; + } + //} + } else if (self->moved && !first_draw) { displayio_area_union(&self->previous_area, &self->current_area, &self->dirty_area); if (displayio_area_size(&self->dirty_area) <= 2U * self->pixel_width * self->pixel_height) { diff --git a/shared-module/displayio/TileGrid.h b/shared-module/displayio/TileGrid.h index b5aab51348..4f5cfbc62f 100644 --- a/shared-module/displayio/TileGrid.h +++ b/shared-module/displayio/TileGrid.h @@ -66,6 +66,7 @@ typedef struct { bool transpose_xy : 1; bool hidden : 1; bool hidden_by_parent : 1; + bool rendered_hidden : 1; uint8_t padding : 6; } displayio_tilegrid_t; @@ -86,4 +87,6 @@ void displayio_tilegrid_update_transform(displayio_tilegrid_t *group, const disp bool displayio_tilegrid_get_previous_area(displayio_tilegrid_t *self, displayio_area_t *area); void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self); +bool displayio_tilegrid_get_rendered_hidden(displayio_tilegrid_t *self); + #endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_TILEGRID_H From f8948c2718ec5a3d72c9363b39be05a4916b0620 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Wed, 31 May 2023 20:58:04 -0500 Subject: [PATCH 018/241] format --- shared-module/displayio/TileGrid.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index fd972a9b5e..18f22629ab 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -90,7 +90,7 @@ void common_hal_displayio_tilegrid_set_hidden(displayio_tilegrid_t *self, bool h self->hidden = hidden; if (!hidden) { self->full_change = true; - }else{ + } else { self->rendered_hidden = false; } } @@ -584,22 +584,22 @@ void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) { } displayio_area_t *displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *self, displayio_area_t *tail) { - //mp_printf(&mp_plat_print, "x1 : %d x2: %d \n", self->previous_area.x1, self->previous_area.x2); + // mp_printf(&mp_plat_print, "x1 : %d x2: %d \n", self->previous_area.x1, self->previous_area.x2); bool first_draw = self->previous_area.x1 == self->previous_area.x2; bool hidden = self->hidden || self->hidden_by_parent; - //mp_printf(&mp_plat_print, "first draw: %d\n", first_draw); + // mp_printf(&mp_plat_print, "first draw: %d\n", first_draw); // Check hidden first because it trumps all other changes. if (hidden) { - //mp_printf(&mp_plat_print, "rendered_hidden: %d\n", self->rendered_hidden); - //if (!self->rendered_hidden){ - self->rendered_hidden = true; - if (!first_draw) { - self->previous_area.next = tail; - return &self->previous_area; - } else { - return tail; - } - //} + // mp_printf(&mp_plat_print, "rendered_hidden: %d\n", self->rendered_hidden); + // if (!self->rendered_hidden){ + self->rendered_hidden = true; + if (!first_draw) { + self->previous_area.next = tail; + return &self->previous_area; + } else { + return tail; + } + // } } else if (self->moved && !first_draw) { displayio_area_union(&self->previous_area, &self->current_area, &self->dirty_area); From 4712a9d301ee43aef6e37194f69651fb76ccfb6e Mon Sep 17 00:00:00 2001 From: foamyguy Date: Wed, 31 May 2023 21:00:02 -0500 Subject: [PATCH 019/241] remove old conditions --- shared-module/displayio/Group.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c index 3cdb32ca2f..29ea340c00 100644 --- a/shared-module/displayio/Group.c +++ b/shared-module/displayio/Group.c @@ -438,7 +438,6 @@ void displayio_group_finish_refresh(displayio_group_t *self) { } displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, displayio_area_t *tail) { - //if (! self->hidden){ if (self->item_removed) { self->dirty_area.next = tail; tail = &self->dirty_area; @@ -458,9 +457,7 @@ displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, dis self->members->items[i], &displayio_tilegrid_type); if (layer != MP_OBJ_NULL) { if (!displayio_tilegrid_get_rendered_hidden(layer)) { - //if (!common_hal_displayio_tilegrid_get_hidden(layer)){ tail = displayio_tilegrid_get_refresh_areas(layer, tail); - //} } continue; } @@ -470,7 +467,6 @@ displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, dis tail = displayio_group_get_refresh_areas(layer, tail); continue; } - // } } return tail; From 6fd700eb11879662baad81b66d1ef2b659be750a Mon Sep 17 00:00:00 2001 From: Pierre Constantineau Date: Thu, 1 Jun 2023 10:56:43 -0600 Subject: [PATCH 020/241] added HW_LED_STATUS as requested --- ports/nrf/boards/pca10100/mpconfigboard.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ports/nrf/boards/pca10100/mpconfigboard.h b/ports/nrf/boards/pca10100/mpconfigboard.h index 31b5a350fb..8b1ff19a89 100644 --- a/ports/nrf/boards/pca10100/mpconfigboard.h +++ b/ports/nrf/boards/pca10100/mpconfigboard.h @@ -30,6 +30,8 @@ #define MICROPY_HW_BOARD_NAME "PCA10100 nRF52833 DK" #define MICROPY_HW_MCU_NAME "nRF52833" +#define MICROPY_HW_LED_STATUS (&pin_P0_13) + #define CIRCUITPY_INTERNAL_NVM_SIZE 0 #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE (60 * 1024) From 2fb42579e8aab930a68920aa44ec21df5e0d98bc Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 17 Nov 2022 09:46:08 -0600 Subject: [PATCH 021/241] Add minimally tested Adafruit MatrixPortal S3 board def tested: * board.LED * neopixel as status LED * i2c scan finds lis3dh sensor * psram capacity not tested: * rgb matrix o_O * the gpio pins Introduce new `board` properties for matrixportal-style boards: * MTX_COMMON * MTX_ADDRESS These are intended to simplify use of the RGBMatrix constructor: ```py matrix = RGBMatrix(..., addr_pins=MTX_ADDRESS[:3], **MTX_COMMON) ``` removing the need for sending in the following individual parameters: * rgb_pins * clock_pin * latch_pin * output_enable_pins and making construction of a 16/32/64-row display easy by slicing a tuple of all address pins rather than writing out the individual pins. If it works out it'll be ported back to the matrixportal m4 as well. --- .../boards/adafruit_matrixportal_s3/board.c | 34 +++++++ .../adafruit_matrixportal_s3/mpconfigboard.h | 42 +++++++++ .../adafruit_matrixportal_s3/mpconfigboard.mk | 12 +++ .../boards/adafruit_matrixportal_s3/pins.c | 94 +++++++++++++++++++ .../boards/adafruit_matrixportal_s3/sdkconfig | 39 ++++++++ 5 files changed, 221 insertions(+) create mode 100644 ports/espressif/boards/adafruit_matrixportal_s3/board.c create mode 100644 ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.h create mode 100644 ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.mk create mode 100644 ports/espressif/boards/adafruit_matrixportal_s3/pins.c create mode 100644 ports/espressif/boards/adafruit_matrixportal_s3/sdkconfig diff --git a/ports/espressif/boards/adafruit_matrixportal_s3/board.c b/ports/espressif/boards/adafruit_matrixportal_s3/board.c new file mode 100644 index 0000000000..a023845eb0 --- /dev/null +++ b/ports/espressif/boards/adafruit_matrixportal_s3/board.c @@ -0,0 +1,34 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" +#include "mpconfigboard.h" +#include "shared-bindings/microcontroller/Pin.h" +#include "components/driver/include/driver/gpio.h" +#include "components/hal/include/hal/gpio_hal.h" +#include "common-hal/microcontroller/Pin.h" + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.h b/ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.h new file mode 100644 index 0000000000..8854729aae --- /dev/null +++ b/ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.h @@ -0,0 +1,42 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2019 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Micropython setup + +#define MICROPY_HW_BOARD_NAME "Adafruit MatrixPortal S3" +#define MICROPY_HW_MCU_NAME "ESP32S3" + +#define MICROPY_HW_NEOPIXEL (&pin_GPIO4) + +#define MICROPY_HW_LED_STATUS (&pin_GPIO13) + +#define DEFAULT_I2C_BUS_SCL (&pin_GPIO17) +#define DEFAULT_I2C_BUS_SDA (&pin_GPIO16) + +#define DEFAULT_UART_BUS_RX (&pin_GPIO8) +#define DEFAULT_UART_BUS_TX (&pin_GPIO18) + +#define DOUBLE_TAP_PIN (&pin_GPIO1) diff --git a/ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.mk b/ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.mk new file mode 100644 index 0000000000..0c681bf5a3 --- /dev/null +++ b/ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.mk @@ -0,0 +1,12 @@ +USB_VID = 0x239A +USB_PID = 0x8126 +USB_PRODUCT = "MatrixPortal S3" +USB_MANUFACTURER = "Adafruit" + +IDF_TARGET = esp32s3 + +CIRCUITPY_ESP_FLASH_MODE = dio +CIRCUITPY_ESP_FLASH_FREQ = 40m +CIRCUITPY_ESP_FLASH_SIZE = 4MB + +CIRCUITPY_ESP32_CAMERA = 0 diff --git a/ports/espressif/boards/adafruit_matrixportal_s3/pins.c b/ports/espressif/boards/adafruit_matrixportal_s3/pins.c new file mode 100644 index 0000000000..8284047aae --- /dev/null +++ b/ports/espressif/boards/adafruit_matrixportal_s3/pins.c @@ -0,0 +1,94 @@ +#include "py/objtuple.h" +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_obj_tuple_t matrix_addr_tuple = { + {&mp_type_tuple}, + 5, + { + MP_ROM_PTR(&pin_GPIO35), + MP_ROM_PTR(&pin_GPIO36), + MP_ROM_PTR(&pin_GPIO48), + MP_ROM_PTR(&pin_GPIO45), + MP_ROM_PTR(&pin_GPIO21), + } +}; + +STATIC const mp_rom_obj_tuple_t matrix_data_tuple = { + {&mp_type_tuple}, + 6, + { + MP_ROM_PTR(&pin_GPIO42), + MP_ROM_PTR(&pin_GPIO41), + MP_ROM_PTR(&pin_GPIO40), + + MP_ROM_PTR(&pin_GPIO38), + MP_ROM_PTR(&pin_GPIO39), + MP_ROM_PTR(&pin_GPIO37), + } +}; + +STATIC const mp_rom_map_elem_t matrix_common_table[] = { + { MP_OBJ_NEW_QSTR(MP_QSTR_rgb_pins),MP_ROM_PTR(&matrix_data_tuple) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_clock_pin),MP_ROM_PTR(&pin_GPIO2) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_latch_pin),MP_ROM_PTR(&pin_GPIO47) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_output_enable_pin),MP_ROM_PTR(&pin_GPIO14) }, +}; +MP_DEFINE_CONST_DICT(matrix_common_dict, matrix_common_table); + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) }, + + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO16) }, + { MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_GPIO16) }, + + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO17) }, + { MP_ROM_QSTR(MP_QSTR_D17), MP_ROM_PTR(&pin_GPIO17) }, + + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_GPIO13) }, + + { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_GPIO11) }, + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO10) }, + { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO3) }, + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO11) }, + + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO4) }, + + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO8) }, + + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO18) }, + { MP_ROM_QSTR(MP_QSTR_D18), MP_ROM_PTR(&pin_GPIO18) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRESS),MP_ROM_PTR(&matrix_addr_tuple) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_COMMON),MP_ROM_PTR(&matrix_common_dict) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_R1),MP_ROM_PTR(&pin_GPIO42) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_G1),MP_ROM_PTR(&pin_GPIO41) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_B1),MP_ROM_PTR(&pin_GPIO40) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_R2),MP_ROM_PTR(&pin_GPIO38) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_G2),MP_ROM_PTR(&pin_GPIO39) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_B2),MP_ROM_PTR(&pin_GPIO37) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRA),MP_ROM_PTR(&pin_GPIO35) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRB),MP_ROM_PTR(&pin_GPIO36) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRC),MP_ROM_PTR(&pin_GPIO48) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRD),MP_ROM_PTR(&pin_GPIO45) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRE),MP_ROM_PTR(&pin_GPIO21) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_CLK),MP_ROM_PTR(&pin_GPIO2) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_LAT),MP_ROM_PTR(&pin_GPIO47) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_OE),MP_ROM_PTR(&pin_GPIO14) }, + + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) } +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/espressif/boards/adafruit_matrixportal_s3/sdkconfig b/ports/espressif/boards/adafruit_matrixportal_s3/sdkconfig new file mode 100644 index 0000000000..2b65102e5a --- /dev/null +++ b/ports/espressif/boards/adafruit_matrixportal_s3/sdkconfig @@ -0,0 +1,39 @@ +# +# Component config +# +# +# ESP32S3-Specific +# +CONFIG_ESP32S3_SPIRAM_SUPPORT=y +# +# SPI RAM config +# +CONFIG_SPIRAM_MODE_QUAD=y +# CONFIG_SPIRAM_MODE_OCT is not set +CONFIG_SPIRAM_TYPE_AUTO=y +# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set +CONFIG_SPIRAM_SIZE=2097152 +# +# PSRAM Clock and CS IO for ESP32S3 +# +CONFIG_DEFAULT_PSRAM_CLK_IO=30 +CONFIG_DEFAULT_PSRAM_CS_IO=26 +# end of PSRAM Clock and CS IO for ESP32S3 + +# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set +# CONFIG_SPIRAM_RODATA is not set +# CONFIG_SPIRAM_SPEED_120M is not set +CONFIG_SPIRAM_SPEED_80M=y +# CONFIG_SPIRAM_SPEED_40M is not set +CONFIG_SPIRAM=y +CONFIG_SPIRAM_BOOT_INIT=y +# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set +CONFIG_SPIRAM_USE_MEMMAP=y +# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set +# CONFIG_SPIRAM_USE_MALLOC is not set +CONFIG_SPIRAM_MEMTEST=y +# end of SPI RAM config + +CONFIG_LWIP_LOCAL_HOSTNAME="matrixportal-s3" From ce84ecf3f672f61f62b184b77d05d0bc38c458f9 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 1 Jun 2023 18:57:18 -0500 Subject: [PATCH 022/241] Fix flash size --- .../espressif/boards/adafruit_matrixportal_s3/mpconfigboard.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.mk b/ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.mk index 0c681bf5a3..865fc06d96 100644 --- a/ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.mk +++ b/ports/espressif/boards/adafruit_matrixportal_s3/mpconfigboard.mk @@ -7,6 +7,6 @@ IDF_TARGET = esp32s3 CIRCUITPY_ESP_FLASH_MODE = dio CIRCUITPY_ESP_FLASH_FREQ = 40m -CIRCUITPY_ESP_FLASH_SIZE = 4MB +CIRCUITPY_ESP_FLASH_SIZE = 8MB CIRCUITPY_ESP32_CAMERA = 0 From 40a31390aa6da1222892b00ecb67b3c6a81b53d3 Mon Sep 17 00:00:00 2001 From: applecuckoo Date: Wed, 7 Jun 2023 07:30:02 +1200 Subject: [PATCH 023/241] Remove available modules section --- ports/silabs/README.md | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/ports/silabs/README.md b/ports/silabs/README.md index 1186690911..6c2043e522 100644 --- a/ports/silabs/README.md +++ b/ports/silabs/README.md @@ -120,12 +120,4 @@ With the boards which support USB mass storage, we can drag the files to the boa Refer to the guide below for installing the **Ampy** tool: - - -## Built-in modules available ## - -| Board | Modules Available| -| --------------------------- | ---------------- | -| xG24 Dev Kit | _asyncio, _bleio, _pixelmap, adafruit_ble, adafruit_bus_device, adafruit_pixelbuf, adafruit_register, aesio, analogio, array, atexit, binascii, bitmaptools, board, builtins, busio, collections, digitalio, displayio, errno, fontio, framebufferio, gc, getpass, gifio, json, math, microcontroller, micropython, msgpack, nvm, onewireio, os, pwmio, rainbowio, random, re, rtc, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, traceback, ulab, uselect, vectorio, watchdog, zlib | -| xG24 Explorer Kit | _asyncio, _bleio, _pixelmap, adafruit_ble, adafruit_bus_device, adafruit_pixelbuf, adafruit_register, aesio, analogio, array, atexit, binascii, bitmaptools, board, builtins, busio, collections, digitalio, displayio, errno, fontio, framebufferio, gc, getpass, gifio, json, math, microcontroller, micropython, msgpack, nvm, onewireio, os, pwmio, rainbowio, random, re, rtc, sdcardio, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, traceback, ulab, uselect, vectorio, watchdog, zlib | -| SparkFun Thing Plus MGM240P | _asyncio, _bleio, _pixelmap, adafruit_ble, adafruit_bus_device, adafruit_pixelbuf, adafruit_register, aesio, analogio, array, atexit, binascii, bitmaptools, board, builtins, busio, collections, digitalio, displayio, errno, fontio, framebufferio, gc, getpass, gifio, json, math, microcontroller, micropython, msgpack, nvm, onewireio, os, pwmio, rainbowio, random, re, rtc, sdcardio, select, sharpdisplay, storage, struct, supervisor, sys, terminalio, time, traceback, ulab, uselect, vectorio, watchdog, zlib | + \ No newline at end of file From d4913b04e099fe191d9b7240eadaeb27a9172ca1 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 5 Jun 2023 10:36:31 -0500 Subject: [PATCH 024/241] rgbmatrix: update protomatter and re-organize so that esp32 s2/s3 don't do as much at reset .. it's not necessary (because most data is in esp-idf managed memory) and doing this saves me from having to debug why reconstruct isn't working properly on that platform. This needs to be tested on other platforms again before being merged! --- lib/protomatter | 2 +- .../common-hal/rgbmatrix/RGBMatrix.c | 14 ++- ports/espressif/mpconfigport.mk | 2 + py/circuitpy_mpconfig.mk | 2 + shared-bindings/rgbmatrix/RGBMatrix.c | 19 ++-- shared-bindings/rgbmatrix/RGBMatrix.h | 2 +- shared-module/rgbmatrix/RGBMatrix.c | 86 ++++++++++++------- shared-module/rgbmatrix/allocator.h | 8 ++ supervisor/shared/display.c | 2 +- 9 files changed, 89 insertions(+), 48 deletions(-) diff --git a/lib/protomatter b/lib/protomatter index d0a07e14ad..ce18b6d465 160000 --- a/lib/protomatter +++ b/lib/protomatter @@ -1 +1 @@ -Subproject commit d0a07e14adcd71a7c22bcceb16c55aadb5e0d104 +Subproject commit ce18b6d465d94d89e970ea39a48072a396ad7c27 diff --git a/ports/espressif/common-hal/rgbmatrix/RGBMatrix.c b/ports/espressif/common-hal/rgbmatrix/RGBMatrix.c index d42829985f..1ac1fe2005 100644 --- a/ports/espressif/common-hal/rgbmatrix/RGBMatrix.c +++ b/ports/espressif/common-hal/rgbmatrix/RGBMatrix.c @@ -31,7 +31,7 @@ #include "peripherals/timer.h" void *common_hal_rgbmatrix_timer_allocate(rgbmatrix_rgbmatrix_obj_t *self) { - const timer_config_t config = { + static const timer_config_t config = { .alarm_en = false, .counter_en = false, .intr_type = TIMER_INTR_LEVEL, @@ -43,6 +43,7 @@ void *common_hal_rgbmatrix_timer_allocate(rgbmatrix_rgbmatrix_obj_t *self) { timer_index_t *timer = malloc(sizeof(timer_index_t)); bool res = peripherals_timer_init(&config, timer); if (!res) { + free(timer); return NULL; } peripherals_timer_never_reset(timer); @@ -52,6 +53,11 @@ void *common_hal_rgbmatrix_timer_allocate(rgbmatrix_rgbmatrix_obj_t *self) { extern bool _PM_esp32timerCallback(void *arg); void common_hal_rgbmatrix_timer_enable(void *ptr) { + timer_index_t *timer = (timer_index_t *)ptr; + if (timer->idx == TIMER_MAX) { + return; + } + timer_start(timer->group, timer->idx); } void common_hal_rgbmatrix_timer_disable(void *ptr) { @@ -60,8 +66,6 @@ void common_hal_rgbmatrix_timer_disable(void *ptr) { return; } timer_pause(timer->group, timer->idx); - timer_disable_intr(timer->group, timer->idx); - timer_isr_callback_remove(timer->group, timer->idx); } void common_hal_rgbmatrix_timer_free(void *ptr) { @@ -70,6 +74,8 @@ void common_hal_rgbmatrix_timer_free(void *ptr) { return; } common_hal_rgbmatrix_timer_disable(ptr); + timer_disable_intr(timer->group, timer->idx); + timer_isr_callback_remove(timer->group, timer->idx); peripherals_timer_deinit(timer); - timer->idx = TIMER_MAX; + free(timer); } diff --git a/ports/espressif/mpconfigport.mk b/ports/espressif/mpconfigport.mk index 4637d971a4..1b9808ad64 100644 --- a/ports/espressif/mpconfigport.mk +++ b/ports/espressif/mpconfigport.mk @@ -70,10 +70,12 @@ CIRCUITPY_USB = 0 else ifeq ($(IDF_TARGET),esp32s2) # Modules CIRCUITPY_BLEIO = 0 +CIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION = 0 else ifeq ($(IDF_TARGET),esp32s3) # Modules CIRCUITPY_PARALLELDISPLAY = 0 +CIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION = 0 endif # No room for dualbank on boards with 2MB flash diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 639fae9bbc..3e43909687 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -385,6 +385,8 @@ CFLAGS += -DCIRCUITPY_RP2PIO=$(CIRCUITPY_RP2PIO) CIRCUITPY_RGBMATRIX ?= 0 CFLAGS += -DCIRCUITPY_RGBMATRIX=$(CIRCUITPY_RGBMATRIX) +CIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION ?= 1 +CFLAGS += -DCIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION=$(CIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION) CIRCUITPY_ROTARYIO ?= 1 CFLAGS += -DCIRCUITPY_ROTARYIO=$(CIRCUITPY_ROTARYIO) diff --git a/shared-bindings/rgbmatrix/RGBMatrix.c b/shared-bindings/rgbmatrix/RGBMatrix.c index 129d77e321..0f5cc91fc7 100644 --- a/shared-bindings/rgbmatrix/RGBMatrix.c +++ b/shared-bindings/rgbmatrix/RGBMatrix.c @@ -62,13 +62,16 @@ STATIC void claim_and_never_reset_pins(mp_obj_t seq) { } STATIC void preflight_pins_or_throw(uint8_t clock_pin, uint8_t *rgb_pins, uint8_t rgb_pin_count, bool allow_inefficient) { - uint32_t port = clock_pin / 32; - uint32_t bit_mask = 1 << (clock_pin % 32); - if (rgb_pin_count <= 0 || rgb_pin_count % 6 != 0 || rgb_pin_count > 30) { mp_raise_ValueError_varg(translate("The length of rgb_pins must be 6, 12, 18, 24, or 30")); } +// Most ports have a strict requirement for how the rgbmatrix pins are laid +// out; these two micros don't. Special-case it here. + #if !defined(CONFIG_IDF_TARGET_ESP32S3) && !defined(CONFIG_IDF_TARGET_ESP32S2) + uint32_t port = clock_pin / 32; + uint32_t bit_mask = 1 << (clock_pin % 32); + for (uint8_t i = 0; i < rgb_pin_count; i++) { uint32_t pin_port = rgb_pins[i] / 32; @@ -130,6 +133,7 @@ STATIC void preflight_pins_or_throw(uint8_t clock_pin, uint8_t *rgb_pins, uint8_ translate("Pinout uses %d bytes per element, which consumes more than the ideal %d bytes. If this cannot be avoided, pass allow_inefficient=True to the constructor"), bytes_per_element, ideal_bytes_per_element); } + #endif } //| def __init__( @@ -236,12 +240,6 @@ STATIC mp_obj_t rgbmatrix_rgbmatrix_make_new(const mp_obj_type_t *type, size_t n preflight_pins_or_throw(clock_pin, rgb_pins, rgb_count, true); - mp_obj_t framebuffer = args[ARG_framebuffer].u_obj; - if (framebuffer == mp_const_none) { - int bufsize = 2 * width * computed_height; - framebuffer = mp_obj_new_bytearray_of_zeros(bufsize); - } - common_hal_rgbmatrix_rgbmatrix_construct(self, width, bit_depth, @@ -249,7 +247,7 @@ STATIC mp_obj_t rgbmatrix_rgbmatrix_make_new(const mp_obj_type_t *type, size_t n addr_count, addr_pins, clock_pin, latch_pin, output_enable_pin, args[ARG_doublebuffer].u_bool, - framebuffer, tile, args[ARG_serpentine].u_bool, NULL); + args[ARG_framebuffer].u_obj, tile, args[ARG_serpentine].u_bool, NULL); claim_and_never_reset_pins(args[ARG_rgb_list].u_obj); claim_and_never_reset_pins(args[ARG_addr_list].u_obj); @@ -353,7 +351,6 @@ STATIC MP_DEFINE_CONST_DICT(rgbmatrix_rgbmatrix_locals_dict, rgbmatrix_rgbmatrix STATIC void rgbmatrix_rgbmatrix_get_bufinfo(mp_obj_t self_in, mp_buffer_info_t *bufinfo) { rgbmatrix_rgbmatrix_obj_t *self = (rgbmatrix_rgbmatrix_obj_t *)self_in; - check_for_deinit(self); *bufinfo = self->bufinfo; } diff --git a/shared-bindings/rgbmatrix/RGBMatrix.h b/shared-bindings/rgbmatrix/RGBMatrix.h index 127f920da1..9d85bf2b95 100644 --- a/shared-bindings/rgbmatrix/RGBMatrix.h +++ b/shared-bindings/rgbmatrix/RGBMatrix.h @@ -34,7 +34,7 @@ extern const mp_obj_type_t rgbmatrix_RGBMatrix_type; void common_hal_rgbmatrix_rgbmatrix_construct(rgbmatrix_rgbmatrix_obj_t *self, int width, int bit_depth, uint8_t rgb_count, uint8_t *rgb_pins, uint8_t addr_count, uint8_t *addr_pins, uint8_t clock_pin, uint8_t latch_pin, uint8_t oe_pin, bool doublebuffer, mp_obj_t framebuffer, int8_t tile, bool serpentine, void *timer); void common_hal_rgbmatrix_rgbmatrix_deinit(rgbmatrix_rgbmatrix_obj_t *); void rgbmatrix_rgbmatrix_collect_ptrs(rgbmatrix_rgbmatrix_obj_t *); -void common_hal_rgbmatrix_rgbmatrix_reconstruct(rgbmatrix_rgbmatrix_obj_t *self, mp_obj_t framebuffer); +void common_hal_rgbmatrix_rgbmatrix_reconstruct(rgbmatrix_rgbmatrix_obj_t *self); void common_hal_rgbmatrix_rgbmatrix_set_paused(rgbmatrix_rgbmatrix_obj_t *self, bool paused); bool common_hal_rgbmatrix_rgbmatrix_get_paused(rgbmatrix_rgbmatrix_obj_t *self); void common_hal_rgbmatrix_rgbmatrix_refresh(rgbmatrix_rgbmatrix_obj_t *self); diff --git a/shared-module/rgbmatrix/RGBMatrix.c b/shared-module/rgbmatrix/RGBMatrix.c index 5e8f95b139..556ef431ed 100644 --- a/shared-module/rgbmatrix/RGBMatrix.c +++ b/shared-module/rgbmatrix/RGBMatrix.c @@ -42,6 +42,8 @@ extern Protomatter_core *_PM_protoPtr; +STATIC void common_hal_rgbmatrix_rgbmatrix_construct1(rgbmatrix_rgbmatrix_obj_t *self, mp_obj_t framebuffer); + void common_hal_rgbmatrix_rgbmatrix_construct(rgbmatrix_rgbmatrix_obj_t *self, int width, int bit_depth, uint8_t rgb_count, uint8_t *rgb_pins, uint8_t addr_count, uint8_t *addr_pins, uint8_t clock_pin, uint8_t latch_pin, uint8_t oe_pin, bool doublebuffer, mp_obj_t framebuffer, int8_t tile, bool serpentine, void *timer) { self->width = width; self->bit_depth = bit_depth; @@ -64,15 +66,11 @@ void common_hal_rgbmatrix_rgbmatrix_construct(rgbmatrix_rgbmatrix_obj_t *self, i self->width = width; self->bufsize = 2 * width * common_hal_rgbmatrix_rgbmatrix_get_height(self); - common_hal_rgbmatrix_rgbmatrix_reconstruct(self, framebuffer); + common_hal_rgbmatrix_rgbmatrix_construct1(self, framebuffer); } -void common_hal_rgbmatrix_rgbmatrix_reconstruct(rgbmatrix_rgbmatrix_obj_t *self, mp_obj_t framebuffer) { - self->paused = 1; - - common_hal_rgbmatrix_timer_disable(self->timer); - if (framebuffer) { - self->framebuffer = framebuffer; +STATIC void common_hal_rgbmatrix_rgbmatrix_construct1(rgbmatrix_rgbmatrix_obj_t *self, mp_obj_t framebuffer) { + if (framebuffer != mp_const_none) { mp_get_buffer_raise(self->framebuffer, &self->bufinfo, MP_BUFFER_READ); if (mp_get_buffer(self->framebuffer, &self->bufinfo, MP_BUFFER_RW)) { self->bufinfo.typecode = 'H' | MP_OBJ_ARRAY_TYPECODE_FLAG_RW; @@ -82,16 +80,11 @@ void common_hal_rgbmatrix_rgbmatrix_reconstruct(rgbmatrix_rgbmatrix_obj_t *self, // verify that the matrix is big enough mp_get_index(mp_obj_get_type(self->framebuffer), self->bufinfo.len, MP_OBJ_NEW_SMALL_INT(self->bufsize - 1), false); } else { - common_hal_rgbmatrix_free_impl(self->bufinfo.buf); - common_hal_rgbmatrix_free_impl(self->protomatter.rgbPins); - common_hal_rgbmatrix_free_impl(self->protomatter.addr); - common_hal_rgbmatrix_free_impl(self->protomatter.screenData); - - self->framebuffer = NULL; self->bufinfo.buf = common_hal_rgbmatrix_allocator_impl(self->bufsize); self->bufinfo.len = self->bufsize; self->bufinfo.typecode = 'H' | MP_OBJ_ARRAY_TYPECODE_FLAG_RW; } + self->framebuffer = framebuffer; memset(&self->protomatter, 0, sizeof(self->protomatter)); ProtomatterStatus stat = _PM_init(&self->protomatter, @@ -115,6 +108,9 @@ void common_hal_rgbmatrix_rgbmatrix_reconstruct(rgbmatrix_rgbmatrix_obj_t *self, if (stat != PROTOMATTER_OK) { common_hal_rgbmatrix_rgbmatrix_deinit(self); + if (!gc_alloc_possible()) { + return; + } switch (stat) { case PROTOMATTER_ERR_PINS: raise_ValueError_invalid_pin(); @@ -148,35 +144,65 @@ STATIC void free_pin_seq(uint8_t *seq, int count) { } } -void common_hal_rgbmatrix_rgbmatrix_deinit(rgbmatrix_rgbmatrix_obj_t *self) { - if (self->timer) { - common_hal_rgbmatrix_timer_free(self->timer); - self->timer = 0; - } +extern int pm_row_count; +STATIC void common_hal_rgbmatrix_rgbmatrix_deinit1(rgbmatrix_rgbmatrix_obj_t *self) { + common_hal_rgbmatrix_timer_disable(self->timer); if (_PM_protoPtr == &self->protomatter) { _PM_protoPtr = NULL; } + if (self->protomatter.rgbPins) { + _PM_deallocate(&self->protomatter); + } + + memset(&self->protomatter, 0, sizeof(self->protomatter)); + + // If it was supervisor-allocated, it is supervisor-freed and the pointer + // is zeroed, otherwise the pointer is just zeroed + if (self->bufinfo.buf) { + common_hal_rgbmatrix_free_impl(self->bufinfo.buf); + self->bufinfo.buf = NULL; + } + + + // If a framebuffer was passed in to the constructor, clear the reference + // here so that it will become GC'able + self->framebuffer = mp_const_none; +} + +void common_hal_rgbmatrix_rgbmatrix_deinit(rgbmatrix_rgbmatrix_obj_t *self) { + common_hal_rgbmatrix_rgbmatrix_deinit1(self); + if (self->timer) { + common_hal_rgbmatrix_timer_free(self->timer); + self->timer = 0; + } + free_pin_seq(self->rgb_pins, self->rgb_count); free_pin_seq(self->addr_pins, self->addr_count); free_pin(&self->clock_pin); free_pin(&self->latch_pin); free_pin(&self->oe_pin); - if (self->protomatter.rgbPins) { - _PM_deallocate(&self->protomatter); + self->base.type = &mp_type_NoneType; +} + +void common_hal_rgbmatrix_rgbmatrix_reconstruct(rgbmatrix_rgbmatrix_obj_t *self) { + if (self->framebuffer != mp_const_none) { + memset(&self->bufinfo, 0, sizeof(self->bufinfo)); } - memset(&self->protomatter, 0, sizeof(self->protomatter)); - - // If it was supervisor-allocated, it is supervisor-freed and the pointer - // is zeroed, otherwise the pointer is just zeroed - _PM_free(self->bufinfo.buf); - self->base.type = NULL; - - // If a framebuffer was passed in to the constructor, NULL the reference - // here so that it will become GC'able - self->framebuffer = NULL; + #if CIRCUITPY_RGBMATRIX_USES_SUPERVISOR_ALLOCATION + common_hal_rgbmatrix_rgbmatrix_set_paused(self, true); + common_hal_rgbmatrix_rgbmatrix_deinit1(self); + common_hal_rgbmatrix_rgbmatrix_construct1(self, mp_const_none); + #endif + if (self->bufinfo.buf == NULL) { + self->bufinfo.buf = common_hal_rgbmatrix_allocator_impl(self->bufsize); + self->bufinfo.len = self->bufsize; + self->bufinfo.typecode = 'H' | MP_OBJ_ARRAY_TYPECODE_FLAG_RW; + } + memset(self->bufinfo.buf, 0, self->bufinfo.len); + common_hal_rgbmatrix_rgbmatrix_set_paused(self, false); } void rgbmatrix_rgbmatrix_collect_ptrs(rgbmatrix_rgbmatrix_obj_t *self) { diff --git a/shared-module/rgbmatrix/allocator.h b/shared-module/rgbmatrix/allocator.h index 5c11ad52a7..2a395983d6 100644 --- a/shared-module/rgbmatrix/allocator.h +++ b/shared-module/rgbmatrix/allocator.h @@ -31,7 +31,15 @@ #include "py/misc.h" #include "supervisor/memory.h" +#if defined(CONFIG_IDF_TARGET_ESP32S3) || defined(CONFIG_IDF_TARGET_ESP32S2) +// Use DMA-capable RAM (not PSRAM) for framebuffer: +#include "components/heap/include/esp_heap_caps.h" +#define _PM_allocate(x) heap_caps_malloc(x, MALLOC_CAP_DMA | MALLOC_CAP_8BIT) +#define _PM_free(x) heap_caps_free(x) +#else #define _PM_allocate common_hal_rgbmatrix_allocator_impl #define _PM_free(x) (common_hal_rgbmatrix_free_impl((x)), (x) = NULL, (void)0) +#endif + extern void *common_hal_rgbmatrix_allocator_impl(size_t sz); extern void common_hal_rgbmatrix_free_impl(void *); diff --git a/supervisor/shared/display.c b/supervisor/shared/display.c index 939a13340d..ce7d78c42c 100644 --- a/supervisor/shared/display.c +++ b/supervisor/shared/display.c @@ -191,7 +191,7 @@ void supervisor_display_move_memory(void) { #if CIRCUITPY_RGBMATRIX if (display_buses[i].rgbmatrix.base.type == &rgbmatrix_RGBMatrix_type) { rgbmatrix_rgbmatrix_obj_t *pm = &display_buses[i].rgbmatrix; - common_hal_rgbmatrix_rgbmatrix_reconstruct(pm, NULL); + common_hal_rgbmatrix_rgbmatrix_reconstruct(pm); } #endif #if CIRCUITPY_SHARPDISPLAY From 1e3f1d745ad5babbae310038e98c6e9c65541d9d Mon Sep 17 00:00:00 2001 From: Mario Bodemann Date: Thu, 8 Jun 2023 18:20:09 +0200 Subject: [PATCH 025/241] Update badger2040 start sequence for more contrast This change is taken from the pico-sdk: https://github.com/pimoroni/pimoroni-pico/blob/main/drivers/uc8151_legacy/uc8151_legacy.cpp#L67-L120 and increases the contrast of pictures sent dramatically. It comes with the expense of using way more time when updating though. --- .../boards/pimoroni_badger2040/board.c | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/ports/raspberrypi/boards/pimoroni_badger2040/board.c b/ports/raspberrypi/boards/pimoroni_badger2040/board.c index cd7cd3a194..6163919e97 100644 --- a/ports/raspberrypi/boards/pimoroni_badger2040/board.c +++ b/ports/raspberrypi/boards/pimoroni_badger2040/board.c @@ -206,9 +206,9 @@ const uint8_t display_start_sequence[] = { // Look up tables for voltage sequence for pixel transition // Common voltage LUT_VCOM, 44, - 0x00, 0x16, 0x16, 0x0d, 0x00, 0x01, - 0x00, 0x23, 0x23, 0x00, 0x00, 0x02, - 0x00, 0x16, 0x16, 0x0d, 0x00, 0x01, + 0x00, 0x64, 0x64, 0x37, 0x00, 0x01, + 0x00, 0x8c, 0x8c, 0x00, 0x00, 0x04, + 0x00, 0x64, 0x64, 0x37, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -217,9 +217,9 @@ const uint8_t display_start_sequence[] = { // White to white LUT_WW, 42, - 0x54, 0x16, 0x16, 0x0d, 0x00, 0x01, - 0x60, 0x23, 0x23, 0x00, 0x00, 0x02, - 0xa8, 0x16, 0x16, 0x0d, 0x00, 0x01, + 0x54, 0x64, 0x64, 0x37, 0x00, 0x01, + 0x60, 0x8c, 0x8c, 0x00, 0x00, 0x04, + 0xa8, 0x64, 0x64, 0x37, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -227,9 +227,9 @@ const uint8_t display_start_sequence[] = { // Black to white LUT_BW, 42, - 0x54, 0x16, 0x16, 0x0d, 0x00, 0x01, - 0x60, 0x23, 0x23, 0x00, 0x00, 0x02, - 0xa8, 0x16, 0x16, 0x0d, 0x00, 0x01, + 0x54, 0x64, 0x64, 0x37, 0x00, 0x01, + 0x60, 0x8c, 0x8c, 0x00, 0x00, 0x04, + 0xa8, 0x64, 0x64, 0x37, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -237,9 +237,9 @@ const uint8_t display_start_sequence[] = { // White to black LUT_WB, 42, - 0xa8, 0x16, 0x16, 0x0d, 0x00, 0x01, - 0x60, 0x23, 0x23, 0x00, 0x00, 0x02, - 0x54, 0x16, 0x16, 0x0d, 0x00, 0x01, + 0xa8, 0x64, 0x64, 0x37, 0x00, 0x01, + 0x60, 0x8c, 0x8c, 0x00, 0x00, 0x04, + 0x54, 0x64, 0x64, 0x37, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -247,9 +247,9 @@ const uint8_t display_start_sequence[] = { // Black to black LUT_BB, 42, - 0xa8, 0x16, 0x16, 0x0d, 0x00, 0x01, - 0x60, 0x23, 0x23, 0x00, 0x00, 0x02, - 0x54, 0x16, 0x16, 0x0d, 0x00, 0x01, + 0xa8, 0x64, 0x64, 0x37, 0x00, 0x01, + 0x60, 0x8c, 0x8c, 0x00, 0x00, 0x04, + 0x54, 0x64, 0x64, 0x37, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, From ec21dc6975f5e5fb879e00cfad4a48df40628f28 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Thu, 8 Jun 2023 12:01:39 -0500 Subject: [PATCH 026/241] added debug prints --- shared-module/displayio/TileGrid.c | 5 +++++ shared-module/displayio/__init__.c | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index 18f22629ab..c0a5bb8f6e 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -555,6 +555,11 @@ bool displayio_tilegrid_fill_area(displayio_tilegrid_t *self, } void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) { + + mp_printf(&mp_plat_print, "(cx1: %d, cy1: %d )\n", self->current_area.x1, self->current_area.y1); + //mp_printf(&mp_plat_print, "x1: %d \n", self->previous_area.x1); + //mp_printf(&mp_plat_print, "(x1: %d, y1: %d),(x2: %d, y2: %d)\n", self->previous_area.x1, self->previous_area.y1, self->previous_area.x2, self->previous_area.y2); + //mp_printf(&mp_plat_print, "Hello ", 1); bool first_draw = self->previous_area.x1 == self->previous_area.x2; bool hidden = self->hidden || self->hidden_by_parent; if (!first_draw && hidden) { diff --git a/shared-module/displayio/__init__.c b/shared-module/displayio/__init__.c index e9431dee14..691005c58e 100644 --- a/shared-module/displayio/__init__.c +++ b/shared-module/displayio/__init__.c @@ -293,8 +293,9 @@ void reset_displays(void) { if (display_type == &displayio_display_type) { reset_display(&displays[i].display); } else if (display_type == &displayio_epaperdisplay_type) { - displayio_epaperdisplay_obj_t *display = &displays[i].epaper_display; - common_hal_displayio_epaperdisplay_show(display, NULL); + //displayio_epaperdisplay_obj_t *display = &displays[i].epaper_display; + //common_hal_displayio_epaperdisplay_show(display, NULL); + mp_printf(&mp_plat_print, "Skipping EPaperDisplay show terminal\n"); #if CIRCUITPY_FRAMEBUFFERIO } else if (display_type == &framebufferio_framebufferdisplay_type) { framebufferio_framebufferdisplay_reset(&displays[i].framebuffer_display); From 4d5caff0ed39fd53ad3c0a016e04e5c6a9e89c24 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 8 Jun 2023 13:02:24 -0400 Subject: [PATCH 027/241] fix missing newline --- ports/silabs/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/silabs/README.md b/ports/silabs/README.md index 1637a9a4bf..17423f57a3 100644 --- a/ports/silabs/README.md +++ b/ports/silabs/README.md @@ -120,4 +120,4 @@ With the boards which support USB mass storage, we can drag the files to the boa Refer to the guide below for installing the **Ampy** tool: - \ No newline at end of file + From 50951d8019dd23104218358876f1d492da766113 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 8 Jun 2023 12:30:39 -0500 Subject: [PATCH 028/241] bump protomatter once more --- lib/protomatter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/protomatter b/lib/protomatter index ce18b6d465..ecab2fa75e 160000 --- a/lib/protomatter +++ b/lib/protomatter @@ -1 +1 @@ -Subproject commit ce18b6d465d94d89e970ea39a48072a396ad7c27 +Subproject commit ecab2fa75e9d7675785d2b87f29a22f027da8ce5 From edaff6d1fa173cc22afd62840d26a39db48dda64 Mon Sep 17 00:00:00 2001 From: Reza Almanda Date: Thu, 8 Jun 2023 10:29:55 +0000 Subject: [PATCH 029/241] Translated using Weblate (Indonesian) Currently translated at 34.4% (343 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/id/ --- locale/ID.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 0dd475a3c9..94348e18a8 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-05-21 00:49+0000\n" -"Last-Translator: Scott Shawcroft \n" +"PO-Revision-Date: 2023-06-09 10:50+0000\n" +"Last-Translator: Reza Almanda \n" "Language-Team: LANGUAGE \n" "Language: ID\n" "MIME-Version: 1.0\n" @@ -4364,7 +4364,7 @@ msgstr "jumlah argumen salah" #: py/runtime.c msgid "wrong number of values to unpack" -msgstr "" +msgstr "jumlah nilai yang salah untuk dibongkar" #: extmod/ulab/code/numpy/vector.c msgid "wrong output type" From d5a2293784a1243b19fe271f2bf51104c3b2eb71 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 9 Jun 2023 11:27:54 -0500 Subject: [PATCH 030/241] nrf52840: allow 12 voices In my testing, the feather bluefruit can do 12 voices at 48kHz! This is a simple case (no LFOs, no ring modulation) so other situations might require a lower sample rate, fewer voices, or both. The sound is a little artifacty & low-fi but I think that's down to the speaker & use of PWM instead of I2S. --- ports/nrf/mpconfigport.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/nrf/mpconfigport.mk b/ports/nrf/mpconfigport.mk index 7973453c2f..58700817d5 100644 --- a/ports/nrf/mpconfigport.mk +++ b/ports/nrf/mpconfigport.mk @@ -20,6 +20,7 @@ CIRCUITPY_AUDIOBUSIO ?= 1 CIRCUITPY_AUDIOCORE ?= 1 CIRCUITPY_AUDIOMIXER ?= 1 CIRCUITPY_AUDIOPWMIO ?= 1 +CIRCUITPY_SYNTHIO_MAX_CHANNELS = 12 # Native BLEIO is not compatible with HCI _bleio. CIRCUITPY_BLEIO_HCI = 0 From 18faeb86c7c545970b6d1817113cc78710333c78 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Fri, 9 Jun 2023 14:53:11 -0500 Subject: [PATCH 031/241] more debug prints --- shared-module/displayio/TileGrid.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index c0a5bb8f6e..d6cab6ab11 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -556,7 +556,20 @@ bool displayio_tilegrid_fill_area(displayio_tilegrid_t *self, void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) { - mp_printf(&mp_plat_print, "(cx1: %d, cy1: %d )\n", self->current_area.x1, self->current_area.y1); + //mp_printf(&mp_plat_print, "(cy1: %d)\n", self->current_area.y1); + + //mp_printf(&mp_plat_print, "(px1: %d, py1: %d)\n", self->previous_area.x1, self->previous_area.y1); + mp_printf(&mp_plat_print, "(px2: %d, py2: %d)\n", self->previous_area.x2, self->previous_area.y2); + + //mp_printf(&mp_plat_print, "(cx1: %d, cy1: %d)\n", self->current_area.x1, self->current_area.y1); + //mp_printf(&mp_plat_print, "(cx2: %d, cy2: %d)\n", self->current_area.x2, self->current_area.y2); + + + //mp_printf(&mp_plat_print, "(cx2: %d)\n", self->current_area.x2); + //mp_printf(&mp_plat_print, "(cy2: %d)\n", self->current_area.y2); + + //mp_printf(&mp_plat_print, "(cx1: %d, cy1: %d), (cx2: %d, cy2: %d)\n", self->current_area.x1, self->current_area.y1, self->current_area.x2, self->current_area.y2); + //mp_printf(&mp_plat_print, "x1: %d \n", self->previous_area.x1); //mp_printf(&mp_plat_print, "(x1: %d, y1: %d),(x2: %d, y2: %d)\n", self->previous_area.x1, self->previous_area.y1, self->previous_area.x2, self->previous_area.y2); //mp_printf(&mp_plat_print, "Hello ", 1); From 14af662ab951a6cbbbd60140118a84d990cafcb5 Mon Sep 17 00:00:00 2001 From: Seon Rozenblum Date: Mon, 12 Jun 2023 20:32:46 +1000 Subject: [PATCH 032/241] Added support for Unexpected Maker NANOS3 --- .../boards/unexpectedmaker_nanos3/board.c | 37 ++++++ .../unexpectedmaker_nanos3/mpconfigboard.h | 43 ++++++ .../unexpectedmaker_nanos3/mpconfigboard.mk | 15 +++ .../boards/unexpectedmaker_nanos3/pins.c | 123 ++++++++++++++++++ .../boards/unexpectedmaker_nanos3/sdkconfig | 39 ++++++ 5 files changed, 257 insertions(+) create mode 100644 ports/espressif/boards/unexpectedmaker_nanos3/board.c create mode 100644 ports/espressif/boards/unexpectedmaker_nanos3/mpconfigboard.h create mode 100644 ports/espressif/boards/unexpectedmaker_nanos3/mpconfigboard.mk create mode 100644 ports/espressif/boards/unexpectedmaker_nanos3/pins.c create mode 100644 ports/espressif/boards/unexpectedmaker_nanos3/sdkconfig diff --git a/ports/espressif/boards/unexpectedmaker_nanos3/board.c b/ports/espressif/boards/unexpectedmaker_nanos3/board.c new file mode 100644 index 0000000000..8fd94f6c8b --- /dev/null +++ b/ports/espressif/boards/unexpectedmaker_nanos3/board.c @@ -0,0 +1,37 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" +#include "mpconfigboard.h" +#include "shared-bindings/microcontroller/Pin.h" + +void board_init(void) { + // Debug UART + #ifdef DEBUG + common_hal_never_reset_pin(&pin_GPIO43); + common_hal_never_reset_pin(&pin_GPIO44); + #endif /* DEBUG */ +} diff --git a/ports/espressif/boards/unexpectedmaker_nanos3/mpconfigboard.h b/ports/espressif/boards/unexpectedmaker_nanos3/mpconfigboard.h new file mode 100644 index 0000000000..ed7a9ebf74 --- /dev/null +++ b/ports/espressif/boards/unexpectedmaker_nanos3/mpconfigboard.h @@ -0,0 +1,43 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2019 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Micropython setup + +#define MICROPY_HW_BOARD_NAME "NanoS3" +#define MICROPY_HW_MCU_NAME "ESP32S3" + +#define MICROPY_HW_NEOPIXEL (&pin_GPIO42) +#define CIRCUITPY_STATUS_LED_POWER (&pin_GPIO41) + +#define DEFAULT_I2C_BUS_SCL (&pin_GPIO9) +#define DEFAULT_I2C_BUS_SDA (&pin_GPIO8) + +#define DEFAULT_SPI_BUS_SCK (&pin_GPIO36) +#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO35) +#define DEFAULT_SPI_BUS_MISO (&pin_GPIO37) + +#define DEFAULT_UART_BUS_RX (&pin_GPIO44) +#define DEFAULT_UART_BUS_TX (&pin_GPIO43) diff --git a/ports/espressif/boards/unexpectedmaker_nanos3/mpconfigboard.mk b/ports/espressif/boards/unexpectedmaker_nanos3/mpconfigboard.mk new file mode 100644 index 0000000000..c61654bfc3 --- /dev/null +++ b/ports/espressif/boards/unexpectedmaker_nanos3/mpconfigboard.mk @@ -0,0 +1,15 @@ +USB_VID = 0x303A +USB_PID = 0x817A +USB_PRODUCT = "NanoS3" +USB_MANUFACTURER = "UnexpectedMaker" + +IDF_TARGET = esp32s3 + +CIRCUITPY_ESP_FLASH_MODE = qio +CIRCUITPY_ESP_FLASH_FREQ = 80m +CIRCUITPY_ESP_FLASH_SIZE = 8MB + +# CIRCUITPY_BITBANG_NEOPIXEL = 1 + +# Include these Python libraries in firmware. +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel diff --git a/ports/espressif/boards/unexpectedmaker_nanos3/pins.c b/ports/espressif/boards/unexpectedmaker_nanos3/pins.c new file mode 100644 index 0000000000..58cf58568c --- /dev/null +++ b/ports/espressif/boards/unexpectedmaker_nanos3/pins.c @@ -0,0 +1,123 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + { MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) }, + + { MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO1) }, + + { MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) }, + { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO2) }, + { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO2) }, + + { MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) }, + { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO3) }, + { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO3) }, + + { MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) }, + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO4) }, + { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO4) }, + + { MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) }, + + { MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO6) }, + + { MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO7) }, + + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO8) }, + + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_A8), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) }, + + { MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) }, + { MP_ROM_QSTR(MP_QSTR_A9), MP_ROM_PTR(&pin_GPIO10) }, + { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_GPIO10) }, + + { MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) }, + { MP_ROM_QSTR(MP_QSTR_A10), MP_ROM_PTR(&pin_GPIO11) }, + { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_GPIO11) }, + + { MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) }, + { MP_ROM_QSTR(MP_QSTR_A11), MP_ROM_PTR(&pin_GPIO12) }, + { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO12) }, + + { MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_A12), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) }, + + { MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) }, + { MP_ROM_QSTR(MP_QSTR_A13), MP_ROM_PTR(&pin_GPIO14) }, + { MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_GPIO14) }, + + { MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) }, + { MP_ROM_QSTR(MP_QSTR_A14), MP_ROM_PTR(&pin_GPIO15) }, + { MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_GPIO15) }, + + { MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) }, + { MP_ROM_QSTR(MP_QSTR_A15), MP_ROM_PTR(&pin_GPIO16) }, + { MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_GPIO16) }, + + { MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) }, + { MP_ROM_QSTR(MP_QSTR_A16), MP_ROM_PTR(&pin_GPIO17) }, + { MP_ROM_QSTR(MP_QSTR_D17), MP_ROM_PTR(&pin_GPIO17) }, + + { MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) }, + { MP_ROM_QSTR(MP_QSTR_A17), MP_ROM_PTR(&pin_GPIO18) }, + { MP_ROM_QSTR(MP_QSTR_D18), MP_ROM_PTR(&pin_GPIO18) }, + + { MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) }, + { MP_ROM_QSTR(MP_QSTR_D21), MP_ROM_PTR(&pin_GPIO21) }, + + { MP_ROM_QSTR(MP_QSTR_IO33), MP_ROM_PTR(&pin_GPIO33) }, + { MP_ROM_QSTR(MP_QSTR_D33), MP_ROM_PTR(&pin_GPIO33) }, + + { MP_ROM_QSTR(MP_QSTR_IO34), MP_ROM_PTR(&pin_GPIO34) }, + { MP_ROM_QSTR(MP_QSTR_D34), MP_ROM_PTR(&pin_GPIO34) }, + + { MP_ROM_QSTR(MP_QSTR_IO35), MP_ROM_PTR(&pin_GPIO35) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO35) }, + { MP_ROM_QSTR(MP_QSTR_MO), MP_ROM_PTR(&pin_GPIO35) }, + { MP_ROM_QSTR(MP_QSTR_SDO), MP_ROM_PTR(&pin_GPIO35) }, + { MP_ROM_QSTR(MP_QSTR_D35), MP_ROM_PTR(&pin_GPIO35) }, + + { MP_ROM_QSTR(MP_QSTR_IO37), MP_ROM_PTR(&pin_GPIO37) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO37) }, + { MP_ROM_QSTR(MP_QSTR_MI), MP_ROM_PTR(&pin_GPIO37) }, + { MP_ROM_QSTR(MP_QSTR_SDI), MP_ROM_PTR(&pin_GPIO37) }, + { MP_ROM_QSTR(MP_QSTR_D37), MP_ROM_PTR(&pin_GPIO37) }, + + { MP_ROM_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) }, + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO36) }, + { MP_ROM_QSTR(MP_QSTR_D36), MP_ROM_PTR(&pin_GPIO36) }, + + { MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) }, + { MP_ROM_QSTR(MP_QSTR_D43), MP_ROM_PTR(&pin_GPIO43) }, + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) }, + + { MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44) }, + { MP_ROM_QSTR(MP_QSTR_D44), MP_ROM_PTR(&pin_GPIO44) }, + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) }, + + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL_POWER), MP_ROM_PTR(&pin_GPIO42) }, + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO41) }, + + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/espressif/boards/unexpectedmaker_nanos3/sdkconfig b/ports/espressif/boards/unexpectedmaker_nanos3/sdkconfig new file mode 100644 index 0000000000..c1dee83717 --- /dev/null +++ b/ports/espressif/boards/unexpectedmaker_nanos3/sdkconfig @@ -0,0 +1,39 @@ +CONFIG_ESP32S3_SPIRAM_SUPPORT=y + +# +# SPI RAM config +# +# CONFIG_SPIRAM_TYPE_AUTO is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set +CONFIG_SPIRAM_TYPE_ESPPSRAM64=y +CONFIG_SPIRAM_SIZE=8388608 + +# +# PSRAM clock and cs IO for ESP32S2 +# +CONFIG_DEFAULT_PSRAM_CLK_IO=30 +CONFIG_DEFAULT_PSRAM_CS_IO=26 +# end of PSRAM clock and cs IO for ESP32S2 + +# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set +# CONFIG_SPIRAM_RODATA is not set +CONFIG_SPIRAM_SPEED_80M=y +# CONFIG_SPIRAM_SPEED_40M is not set +# CONFIG_SPIRAM_SPEED_26M is not set +# CONFIG_SPIRAM_SPEED_20M is not set +CONFIG_SPIRAM=y +CONFIG_SPIRAM_BOOT_INIT=y +# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set +CONFIG_SPIRAM_USE_MEMMAP=y +# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set +# CONFIG_SPIRAM_USE_MALLOC is not set +# CONFIG_SPIRAM_MEMTEST=y +# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set +# end of SPI RAM config + +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="UMNanoS3" +# end of LWIP From 46de2cb6828dac92e6611f4938e615a566a71508 Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Tue, 13 Jun 2023 07:59:33 -0700 Subject: [PATCH 033/241] Add buttons and accelerometer interrupt --- ports/espressif/boards/adafruit_matrixportal_s3/pins.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ports/espressif/boards/adafruit_matrixportal_s3/pins.c b/ports/espressif/boards/adafruit_matrixportal_s3/pins.c index 8284047aae..bc2de4299b 100644 --- a/ports/espressif/boards/adafruit_matrixportal_s3/pins.c +++ b/ports/espressif/boards/adafruit_matrixportal_s3/pins.c @@ -87,6 +87,12 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_LAT),MP_ROM_PTR(&pin_GPIO47) }, { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_OE),MP_ROM_PTR(&pin_GPIO14) }, + { MP_ROM_QSTR(MP_QSTR_ACCELEROMETER_INTERRUPT), MP_ROM_PTR(&pin_GPIO15) }, + + // Grounded when closed. + { MP_OBJ_NEW_QSTR(MP_QSTR_BUTTON_UP),MP_ROM_PTR(&pin_GPIO6) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_BUTTON_DOWN),MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) } From 979f2f5ef3dbde361aa088472a27ddaa6dd025f6 Mon Sep 17 00:00:00 2001 From: Kamil Tomaszewski Date: Wed, 14 Jun 2023 12:24:00 +0200 Subject: [PATCH 034/241] spresense: update SDK to 3.0.1 --- ports/cxd56/Makefile | 2 -- ports/cxd56/README.md | 2 +- ports/cxd56/configs/circuitpython/defconfig | 8 +++----- ports/cxd56/spresense-exported-sdk | 2 +- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/ports/cxd56/Makefile b/ports/cxd56/Makefile index 2fbb599c25..35a4df1393 100644 --- a/ports/cxd56/Makefile +++ b/ports/cxd56/Makefile @@ -102,8 +102,6 @@ LIBGCC = "${shell "$(CC)" $(CFLAGS) -print-libgcc-file-name}" LDFLAGS = \ --entry=__start \ - -nostartfiles \ - -nodefaultlibs \ -T$(SPRESENSE_SDK)/nuttx/scripts/ramconfig.ld \ --gc-sections \ -Map=$(BUILD)/output.map \ diff --git a/ports/cxd56/README.md b/ports/cxd56/README.md index 4266c61c0c..d727722249 100644 --- a/ports/cxd56/README.md +++ b/ports/cxd56/README.md @@ -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 v2-4-000](https://developer.sony.com/file/download/download-spresense-firmware-v2-4-000) +Download the spresense binaries zip archive from: [Spresense firmware v3-0-0](https://developer.sony.com/file/download/download-spresense-firmware-v3-0-0) Extract spresense binaries in your PC to ports/spresense/spresense-exported-sdk/firmware/ diff --git a/ports/cxd56/configs/circuitpython/defconfig b/ports/cxd56/configs/circuitpython/defconfig index 92e282649b..3655a5fdcd 100644 --- a/ports/cxd56/configs/circuitpython/defconfig +++ b/ports/cxd56/configs/circuitpython/defconfig @@ -17,6 +17,7 @@ # CONFIG_STANDARD_SERIAL is not set CONFIG_ARCH="arm" CONFIG_ARCH_BOARD="spresense" +CONFIG_ARCH_BOARD_COMMON=y CONFIG_ARCH_BOARD_SPRESENSE=y CONFIG_ARCH_CHIP="cxd56xx" CONFIG_ARCH_CHIP_CXD56XX=y @@ -33,7 +34,6 @@ CONFIG_BOARD_CRASHDUMP=y CONFIG_BOARD_LATE_INITIALIZE=y CONFIG_BOARD_LOOPSPERMSEC=5434 CONFIG_BOOT_RUNFROMISRAM=y -CONFIG_CLOCK_MONOTONIC=y CONFIG_CXD56_ADC=y CONFIG_CXD56_BINARY=y CONFIG_CXD56_CHARGER=y @@ -63,7 +63,8 @@ CONFIG_CXD56_SPI=y CONFIG_CXD56_UART2=y CONFIG_DRIVERS_VIDEO=y CONFIG_FS_FAT=y -CONFIG_LIBC_FLOATINGPOINT=y +CONFIG_INIT_ENTRYPOINT="spresense_main" +CONFIG_INIT_STACKSIZE=8192 CONFIG_MMCSD=y CONFIG_MMCSD_SDIO=y CONFIG_MTD=y @@ -91,7 +92,6 @@ 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_SERIAL_TERMIOS=y CONFIG_SPI=y @@ -110,8 +110,6 @@ CONFIG_USBDEV=y CONFIG_USBDEV_DMA=y CONFIG_USBDEV_DUALSPEED=y CONFIG_USEC_PER_TICK=1000 -CONFIG_USERMAIN_STACKSIZE=8192 -CONFIG_USER_ENTRYPOINT="spresense_main" CONFIG_VIDEO_ISX012=y CONFIG_VIDEO_ISX019=y CONFIG_VIDEO_STREAM=y diff --git a/ports/cxd56/spresense-exported-sdk b/ports/cxd56/spresense-exported-sdk index 4f902ca3ff..c12296c5ff 160000 --- a/ports/cxd56/spresense-exported-sdk +++ b/ports/cxd56/spresense-exported-sdk @@ -1 +1 @@ -Subproject commit 4f902ca3ffeb327e6c325940ef5133eda588c2e4 +Subproject commit c12296c5ffbd0779e630a653c76a78558b463271 From 7354e2ad0355e73c494f8fe9f03b649ca8ef42b5 Mon Sep 17 00:00:00 2001 From: leosun Date: Thu, 15 Jun 2023 07:48:19 +0800 Subject: [PATCH 035/241] fix `invalid pin` error when create `busio.SPI` on specific SCK/MOSI/MISO pins, the `common_hal_busio_spi_construct` method always skip miso pins which will lead to a `invalid pin` exception when SPI initilized --- ports/mimxrt10xx/common-hal/busio/SPI.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/mimxrt10xx/common-hal/busio/SPI.c b/ports/mimxrt10xx/common-hal/busio/SPI.c index 641714bcca..1ab9394244 100644 --- a/ports/mimxrt10xx/common-hal/busio/SPI.c +++ b/ports/mimxrt10xx/common-hal/busio/SPI.c @@ -109,7 +109,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, // if both MOSI and MISO exist, loop search normally if ((mosi != NULL) && (miso != NULL)) { for (uint j = 0; j < mosi_count; j++) { - if ((mcu_spi_sdo_list[i].pin != mosi) + if ((mcu_spi_sdo_list[j].pin != mosi) || (mcu_spi_sck_list[i].bank_idx != mcu_spi_sdo_list[j].bank_idx)) { continue; } From b0e0b4adced39d8e2e7cb46d9f0300d5df995710 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 15 Jun 2023 20:20:17 -0500 Subject: [PATCH 036/241] ap channel validation --- shared-bindings/wifi/Radio.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index 0c632a68b2..0380d33bc7 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -374,6 +374,8 @@ STATIC mp_obj_t wifi_radio_start_ap(size_t n_args, const mp_obj_t *pos_args, mp_ } } + mp_int_t channel = mp_arg_validate_int_range(args[ARG_channel].u_int, 1, 13, MP_QSTR_channel); + if (authmodes == AUTHMODE_OPEN && password.len > 0) { mp_raise_ValueError(translate("AuthMode.OPEN is not used with password")); } @@ -385,7 +387,7 @@ STATIC mp_obj_t wifi_radio_start_ap(size_t n_args, const mp_obj_t *pos_args, mp_ } } - common_hal_wifi_radio_start_ap(self, ssid.buf, ssid.len, password.buf, password.len, args[ARG_channel].u_int, authmodes, args[ARG_max_connections].u_int); + common_hal_wifi_radio_start_ap(self, ssid.buf, ssid.len, password.buf, password.len, channel, authmodes, args[ARG_max_connections].u_int); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_KW(wifi_radio_start_ap_obj, 1, wifi_radio_start_ap); From 340506be5852477c6ce2fa8595edcc6fac5493c4 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Fri, 16 Jun 2023 16:43:10 -0500 Subject: [PATCH 037/241] revert unrelated epd change --- shared-module/displayio/TileGrid.c | 2 +- shared-module/displayio/__init__.c | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index d6cab6ab11..70e81545de 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -559,7 +559,7 @@ void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) { //mp_printf(&mp_plat_print, "(cy1: %d)\n", self->current_area.y1); //mp_printf(&mp_plat_print, "(px1: %d, py1: %d)\n", self->previous_area.x1, self->previous_area.y1); - mp_printf(&mp_plat_print, "(px2: %d, py2: %d)\n", self->previous_area.x2, self->previous_area.y2); + //mp_printf(&mp_plat_print, "(px2: %d, py2: %d)\n", self->previous_area.x2, self->previous_area.y2); //mp_printf(&mp_plat_print, "(cx1: %d, cy1: %d)\n", self->current_area.x1, self->current_area.y1); //mp_printf(&mp_plat_print, "(cx2: %d, cy2: %d)\n", self->current_area.x2, self->current_area.y2); diff --git a/shared-module/displayio/__init__.c b/shared-module/displayio/__init__.c index 691005c58e..e9431dee14 100644 --- a/shared-module/displayio/__init__.c +++ b/shared-module/displayio/__init__.c @@ -293,9 +293,8 @@ void reset_displays(void) { if (display_type == &displayio_display_type) { reset_display(&displays[i].display); } else if (display_type == &displayio_epaperdisplay_type) { - //displayio_epaperdisplay_obj_t *display = &displays[i].epaper_display; - //common_hal_displayio_epaperdisplay_show(display, NULL); - mp_printf(&mp_plat_print, "Skipping EPaperDisplay show terminal\n"); + displayio_epaperdisplay_obj_t *display = &displays[i].epaper_display; + common_hal_displayio_epaperdisplay_show(display, NULL); #if CIRCUITPY_FRAMEBUFFERIO } else if (display_type == &framebufferio_framebufferdisplay_type) { framebufferio_framebufferdisplay_reset(&displays[i].framebuffer_display); From 0e3cdea51e660e6df7a530c6213ed685c1616984 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Fri, 16 Jun 2023 16:47:24 -0500 Subject: [PATCH 038/241] remove prints --- shared-module/displayio/Display.c | 3 --- shared-module/displayio/TileGrid.c | 22 ---------------------- 2 files changed, 25 deletions(-) diff --git a/shared-module/displayio/Display.c b/shared-module/displayio/Display.c index ae2b4efe6b..093604214d 100644 --- a/shared-module/displayio/Display.c +++ b/shared-module/displayio/Display.c @@ -330,10 +330,7 @@ STATIC void _refresh_display(displayio_display_obj_t *self) { return; } const displayio_area_t *current_area = _get_refresh_areas(self); - int i = 0; while (current_area != NULL) { - mp_printf(&mp_plat_print, "calling refresh area: %d \n", i); - i = i + 1; _refresh_area(self, current_area); current_area = current_area->next; } diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index 70e81545de..6b4753b129 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -556,23 +556,6 @@ bool displayio_tilegrid_fill_area(displayio_tilegrid_t *self, void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) { - //mp_printf(&mp_plat_print, "(cy1: %d)\n", self->current_area.y1); - - //mp_printf(&mp_plat_print, "(px1: %d, py1: %d)\n", self->previous_area.x1, self->previous_area.y1); - //mp_printf(&mp_plat_print, "(px2: %d, py2: %d)\n", self->previous_area.x2, self->previous_area.y2); - - //mp_printf(&mp_plat_print, "(cx1: %d, cy1: %d)\n", self->current_area.x1, self->current_area.y1); - //mp_printf(&mp_plat_print, "(cx2: %d, cy2: %d)\n", self->current_area.x2, self->current_area.y2); - - - //mp_printf(&mp_plat_print, "(cx2: %d)\n", self->current_area.x2); - //mp_printf(&mp_plat_print, "(cy2: %d)\n", self->current_area.y2); - - //mp_printf(&mp_plat_print, "(cx1: %d, cy1: %d), (cx2: %d, cy2: %d)\n", self->current_area.x1, self->current_area.y1, self->current_area.x2, self->current_area.y2); - - //mp_printf(&mp_plat_print, "x1: %d \n", self->previous_area.x1); - //mp_printf(&mp_plat_print, "(x1: %d, y1: %d),(x2: %d, y2: %d)\n", self->previous_area.x1, self->previous_area.y1, self->previous_area.x2, self->previous_area.y2); - //mp_printf(&mp_plat_print, "Hello ", 1); bool first_draw = self->previous_area.x1 == self->previous_area.x2; bool hidden = self->hidden || self->hidden_by_parent; if (!first_draw && hidden) { @@ -602,14 +585,10 @@ void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) { } displayio_area_t *displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *self, displayio_area_t *tail) { - // mp_printf(&mp_plat_print, "x1 : %d x2: %d \n", self->previous_area.x1, self->previous_area.x2); bool first_draw = self->previous_area.x1 == self->previous_area.x2; bool hidden = self->hidden || self->hidden_by_parent; - // mp_printf(&mp_plat_print, "first draw: %d\n", first_draw); // Check hidden first because it trumps all other changes. if (hidden) { - // mp_printf(&mp_plat_print, "rendered_hidden: %d\n", self->rendered_hidden); - // if (!self->rendered_hidden){ self->rendered_hidden = true; if (!first_draw) { self->previous_area.next = tail; @@ -617,7 +596,6 @@ displayio_area_t *displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *sel } else { return tail; } - // } } else if (self->moved && !first_draw) { displayio_area_union(&self->previous_area, &self->current_area, &self->dirty_area); From 3222cdf847a9066f14fd5882ba0681db068c3f20 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Fri, 16 Jun 2023 16:50:01 -0500 Subject: [PATCH 039/241] revert indention change --- shared-module/displayio/Group.c | 54 ++++++++++++++++----------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c index 29ea340c00..0152343df8 100644 --- a/shared-module/displayio/Group.c +++ b/shared-module/displayio/Group.c @@ -438,35 +438,35 @@ void displayio_group_finish_refresh(displayio_group_t *self) { } displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, displayio_area_t *tail) { - if (self->item_removed) { - self->dirty_area.next = tail; - tail = &self->dirty_area; - } + if (self->item_removed) { + self->dirty_area.next = tail; + tail = &self->dirty_area; + } - for (int32_t i = self->members->len - 1; i >= 0; i--) { - mp_obj_t layer; - #if CIRCUITPY_VECTORIO - const vectorio_draw_protocol_t *draw_protocol = mp_proto_get(MP_QSTR_protocol_draw, self->members->items[i]); - if (draw_protocol != NULL) { - layer = draw_protocol->draw_get_protocol_self(self->members->items[i]); - tail = draw_protocol->draw_protocol_impl->draw_get_refresh_areas(layer, tail); - continue; - } - #endif - layer = mp_obj_cast_to_native_base( - self->members->items[i], &displayio_tilegrid_type); - if (layer != MP_OBJ_NULL) { - if (!displayio_tilegrid_get_rendered_hidden(layer)) { - tail = displayio_tilegrid_get_refresh_areas(layer, tail); - } - continue; - } - layer = mp_obj_cast_to_native_base( - self->members->items[i], &displayio_group_type); - if (layer != MP_OBJ_NULL) { - tail = displayio_group_get_refresh_areas(layer, tail); - continue; + for (int32_t i = self->members->len - 1; i >= 0; i--) { + mp_obj_t layer; + #if CIRCUITPY_VECTORIO + const vectorio_draw_protocol_t *draw_protocol = mp_proto_get(MP_QSTR_protocol_draw, self->members->items[i]); + if (draw_protocol != NULL) { + layer = draw_protocol->draw_get_protocol_self(self->members->items[i]); + tail = draw_protocol->draw_protocol_impl->draw_get_refresh_areas(layer, tail); + continue; + } + #endif + layer = mp_obj_cast_to_native_base( + self->members->items[i], &displayio_tilegrid_type); + if (layer != MP_OBJ_NULL) { + if (!displayio_tilegrid_get_rendered_hidden(layer)) { + tail = displayio_tilegrid_get_refresh_areas(layer, tail); } + continue; + } + layer = mp_obj_cast_to_native_base( + self->members->items[i], &displayio_group_type); + if (layer != MP_OBJ_NULL) { + tail = displayio_group_get_refresh_areas(layer, tail); + continue; + } } return tail; From 074c13488b6fade34dce5698d65b7fb5aaf49585 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Fri, 16 Jun 2023 16:57:37 -0500 Subject: [PATCH 040/241] revert whitespace change. handle hidden by parent --- shared-module/displayio/Group.c | 4 ++-- shared-module/displayio/TileGrid.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c index 0152343df8..bd92d20c2d 100644 --- a/shared-module/displayio/Group.c +++ b/shared-module/displayio/Group.c @@ -454,7 +454,7 @@ displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, dis } #endif layer = mp_obj_cast_to_native_base( - self->members->items[i], &displayio_tilegrid_type); + self->members->items[i], &displayio_tilegrid_type); if (layer != MP_OBJ_NULL) { if (!displayio_tilegrid_get_rendered_hidden(layer)) { tail = displayio_tilegrid_get_refresh_areas(layer, tail); @@ -462,7 +462,7 @@ displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, dis continue; } layer = mp_obj_cast_to_native_base( - self->members->items[i], &displayio_group_type); + self->members->items[i], &displayio_group_type); if (layer != MP_OBJ_NULL) { tail = displayio_group_get_refresh_areas(layer, tail); continue; diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index 6b4753b129..0b2cba5e0e 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -99,6 +99,8 @@ void displayio_tilegrid_set_hidden_by_parent(displayio_tilegrid_t *self, bool hi self->hidden_by_parent = hidden; if (!hidden) { self->full_change = true; + }else { + self->rendered_hidden = false; } } @@ -555,7 +557,6 @@ bool displayio_tilegrid_fill_area(displayio_tilegrid_t *self, } void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) { - bool first_draw = self->previous_area.x1 == self->previous_area.x2; bool hidden = self->hidden || self->hidden_by_parent; if (!first_draw && hidden) { @@ -596,7 +597,6 @@ displayio_area_t *displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *sel } else { return tail; } - } else if (self->moved && !first_draw) { displayio_area_union(&self->previous_area, &self->current_area, &self->dirty_area); if (displayio_area_size(&self->dirty_area) <= 2U * self->pixel_width * self->pixel_height) { From 4bf4d148c1c7a6b69fb907d95d469786922fb87c Mon Sep 17 00:00:00 2001 From: foamyguy Date: Fri, 16 Jun 2023 18:05:39 -0500 Subject: [PATCH 041/241] always set rendered_hidden false when hidden changes --- shared-module/displayio/TileGrid.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index 0b2cba5e0e..ea65920027 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -88,19 +88,17 @@ bool displayio_tilegrid_get_rendered_hidden(displayio_tilegrid_t *self) { void common_hal_displayio_tilegrid_set_hidden(displayio_tilegrid_t *self, bool hidden) { self->hidden = hidden; + self->rendered_hidden = false; if (!hidden) { self->full_change = true; - } else { - self->rendered_hidden = false; } } void displayio_tilegrid_set_hidden_by_parent(displayio_tilegrid_t *self, bool hidden) { self->hidden_by_parent = hidden; + self->rendered_hidden = false; if (!hidden) { self->full_change = true; - }else { - self->rendered_hidden = false; } } From ec1e7a03b38c625664a4615e60d26956205d7a67 Mon Sep 17 00:00:00 2001 From: Phil Underwood Date: Sat, 17 Jun 2023 22:42:12 +0100 Subject: [PATCH 042/241] Reset UART on deinit, reduces power consumption --- ports/nrf/common-hal/busio/UART.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ports/nrf/common-hal/busio/UART.c b/ports/nrf/common-hal/busio/UART.c index 10a34e09df..94201774de 100644 --- a/ports/nrf/common-hal/busio/UART.c +++ b/ports/nrf/common-hal/busio/UART.c @@ -266,8 +266,15 @@ bool common_hal_busio_uart_deinited(busio_uart_obj_t *self) { } void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { + volatile uint32_t *power_cycle = (void*)(self->uarte->p_reg) + 0xFFC; if (!common_hal_busio_uart_deinited(self)) { + nrfx_uarte_rx_abort(self->uarte); + nrfx_uarte_tx_abort(self->uarte); nrfx_uarte_uninit(self->uarte); + // power cycle the peripheral as per https://devzone.nordicsemi.com/f/nordic-q-a/26030/how-to-reach-nrf52840-uarte-current-supply-specification/102605#102605 + *power_cycle = 0; + *power_cycle; + *power_cycle = 1; reset_pin_number(self->tx_pin_number); reset_pin_number(self->rx_pin_number); reset_pin_number(self->rts_pin_number); From 4bb475b930d4237f09f26ac3a6f841fbd690d026 Mon Sep 17 00:00:00 2001 From: Phil Underwood Date: Sat, 17 Jun 2023 22:49:47 +0100 Subject: [PATCH 043/241] formatting --- ports/nrf/common-hal/busio/UART.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/nrf/common-hal/busio/UART.c b/ports/nrf/common-hal/busio/UART.c index 94201774de..626956946f 100644 --- a/ports/nrf/common-hal/busio/UART.c +++ b/ports/nrf/common-hal/busio/UART.c @@ -266,7 +266,7 @@ bool common_hal_busio_uart_deinited(busio_uart_obj_t *self) { } void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { - volatile uint32_t *power_cycle = (void*)(self->uarte->p_reg) + 0xFFC; + volatile uint32_t *power_cycle = (void *)(self->uarte->p_reg) + 0xFFC; if (!common_hal_busio_uart_deinited(self)) { nrfx_uarte_rx_abort(self->uarte); nrfx_uarte_tx_abort(self->uarte); From fae14cc55b7f9978b97f161654e8707246ce9011 Mon Sep 17 00:00:00 2001 From: Phil Underwood Date: Mon, 19 Jun 2023 22:20:46 +0100 Subject: [PATCH 044/241] Fix for #8093 This adds a check to make sure that SDA and SCL are in a sane condition before starting any I2C operation. If they are not it tries to rectify it, and then returns an error code if unable to do so. --- ports/nrf/Makefile | 1 + ports/nrf/common-hal/busio/I2C.c | 56 ++++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile index 8a8625bd95..d0d5e2a6eb 100755 --- a/ports/nrf/Makefile +++ b/ports/nrf/Makefile @@ -114,6 +114,7 @@ SRC_NRFX = $(addprefix nrfx/,\ drivers/src/nrfx_spim.c \ drivers/src/nrfx_timer.c \ drivers/src/nrfx_twim.c \ + drivers/src/nrfx_twi_twim.c \ drivers/src/nrfx_uarte.c \ drivers/src/nrfx_gpiote.c \ drivers/src/nrfx_rtc.c \ diff --git a/ports/nrf/common-hal/busio/I2C.c b/ports/nrf/common-hal/busio/I2C.c index 2bd1416f5a..23b2413441 100644 --- a/ports/nrf/common-hal/busio/I2C.c +++ b/ports/nrf/common-hal/busio/I2C.c @@ -79,20 +79,54 @@ void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { } } +#define TWI_TWIM_PIN_CONFIGURE(_pin) nrf_gpio_cfg((_pin), \ + NRF_GPIO_PIN_DIR_OUTPUT, \ + NRF_GPIO_PIN_INPUT_CONNECT, \ + NRF_GPIO_PIN_PULLUP, \ + NRF_GPIO_PIN_S0D1, \ + NRF_GPIO_PIN_NOSENSE) + +static nrfx_err_t _safe_twim_enable(busio_i2c_obj_t *self) { + // check to see if bus is in sensible state before enabling twim + nrfx_err_t recover_result; + nrf_gpio_cfg_input(self->scl_pin_number, NRF_GPIO_PIN_PULLDOWN); + nrf_gpio_cfg_input(self->sda_pin_number, NRF_GPIO_PIN_PULLDOWN); + + common_hal_mcu_delay_us(10); + + nrf_gpio_cfg_input(self->scl_pin_number, NRF_GPIO_PIN_NOPULL); + nrf_gpio_cfg_input(self->sda_pin_number, NRF_GPIO_PIN_NOPULL); + + // We must pull up within 3us to achieve 400khz. + common_hal_mcu_delay_us(3); + + if (!nrf_gpio_pin_read(self->sda_pin_number) || !nrf_gpio_pin_read(self->scl_pin_number)) { + // bus not in a sane state - try to recover + recover_result = nrfx_twim_bus_recover(self->scl_pin_number, self->sda_pin_number); + if (NRFX_SUCCESS != recover_result) { + // return error message if unable to recover the bus + return recover_result; + } + } + + nrfx_twim_enable(&self->twim_peripheral->twim); + return NRFX_SUCCESS; +} + static uint8_t twi_error_to_mp(const nrfx_err_t err) { switch (err) { case NRFX_ERROR_DRV_TWI_ERR_ANACK: return MP_ENODEV; case NRFX_ERROR_BUSY: return MP_EBUSY; + case NRFX_SUCCESS: + return 0; case NRFX_ERROR_DRV_TWI_ERR_DNACK: case NRFX_ERROR_INVALID_ADDR: - return MP_EIO; + case NRFX_ERROR_INTERNAL: default: - break; + return MP_EIO; } - - return 0; } void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, const mcu_pin_obj_t *scl, const mcu_pin_obj_t *sda, uint32_t frequency, uint32_t timeout) { @@ -188,7 +222,9 @@ bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) { NRF_TWIM_Type *reg = self->twim_peripheral->twim.p_twim; bool found = true; - nrfx_twim_enable(&self->twim_peripheral->twim); + if (NRFX_SUCCESS != _safe_twim_enable(self)) { + return false; + } nrf_twim_address_set(reg, addr); nrf_twim_tx_buffer_set(reg, NULL, 0); @@ -246,7 +282,10 @@ STATIC uint8_t _common_hal_busio_i2c_write(busio_i2c_obj_t *self, uint16_t addr, nrfx_err_t err = NRFX_SUCCESS; - nrfx_twim_enable(&self->twim_peripheral->twim); + err = _safe_twim_enable(self); + if (NRFX_SUCCESS != err) { + return twi_error_to_mp(err); + } // break into MAX_XFER_LEN transaction while (len) { @@ -278,7 +317,10 @@ uint8_t common_hal_busio_i2c_read(busio_i2c_obj_t *self, uint16_t addr, uint8_t nrfx_err_t err = NRFX_SUCCESS; - nrfx_twim_enable(&self->twim_peripheral->twim); + err = _safe_twim_enable(self); + if (NRFX_SUCCESS != err) { + return twi_error_to_mp(err); + } // break into MAX_XFER_LEN transaction while (len) { From 028a81922bdac954ea59b194f6252cb0930eb4ae Mon Sep 17 00:00:00 2001 From: Phil Underwood Date: Tue, 20 Jun 2023 13:36:12 +0100 Subject: [PATCH 045/241] Remove unneeded #define from I2C.c --- ports/nrf/common-hal/busio/I2C.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ports/nrf/common-hal/busio/I2C.c b/ports/nrf/common-hal/busio/I2C.c index 23b2413441..d64bdcfea4 100644 --- a/ports/nrf/common-hal/busio/I2C.c +++ b/ports/nrf/common-hal/busio/I2C.c @@ -79,13 +79,6 @@ void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { } } -#define TWI_TWIM_PIN_CONFIGURE(_pin) nrf_gpio_cfg((_pin), \ - NRF_GPIO_PIN_DIR_OUTPUT, \ - NRF_GPIO_PIN_INPUT_CONNECT, \ - NRF_GPIO_PIN_PULLUP, \ - NRF_GPIO_PIN_S0D1, \ - NRF_GPIO_PIN_NOSENSE) - static nrfx_err_t _safe_twim_enable(busio_i2c_obj_t *self) { // check to see if bus is in sensible state before enabling twim nrfx_err_t recover_result; From cae02f1cdfdf0c4b3f67d83a4abc12b2f5f36a94 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 20 Jun 2023 11:01:46 -0500 Subject: [PATCH 046/241] Speed LTO builds by using multiple threads On my i5-1235U laptop this speeds LTO "partition=balanced" builds substantially, because each "partition" can be run on a separate CPU thread. I used "pygamer" as my test build with a parallelism of `-j4`, and took the best elapsed time reported over 4 builds. The improvement was from 34.6s to 24.0s (-30%). A link-only build (rm build-pygamer/firmware.elf; make -j...) improved from1 17.4s to 5.1s (-70%) The size of the resulting firmware is unchanged. Boards that are nearly full use "-flto-partition=one" to improve code size optimization. When LTO partition is "one", this feature doesn't help but it doesn't seem to negatively affect anything either (tested building trinket_m0) --- py/circuitpy_defns.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/circuitpy_defns.mk b/py/circuitpy_defns.mk index ae4b1bf3db..4bfd55b0c9 100644 --- a/py/circuitpy_defns.mk +++ b/py/circuitpy_defns.mk @@ -70,7 +70,7 @@ endif CIRCUITPY_LTO ?= 0 CIRCUITPY_LTO_PARTITION ?= balanced ifeq ($(CIRCUITPY_LTO),1) -CFLAGS += -flto -flto-partition=$(CIRCUITPY_LTO_PARTITION) -DCIRCUITPY_LTO=1 +CFLAGS += -flto=jobserver -flto-partition=$(CIRCUITPY_LTO_PARTITION) -DCIRCUITPY_LTO=1 else CFLAGS += -DCIRCUITPY_LTO=0 endif From f5c03e64e58829580e822940896375682dc26ce1 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 20 Jun 2023 12:50:36 -0400 Subject: [PATCH 047/241] fix typos: "CTX mode" -> "CTR mode" --- shared-bindings/aesio/aes.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared-bindings/aesio/aes.c b/shared-bindings/aesio/aes.c index c5c50515ea..7ab895a1bd 100644 --- a/shared-bindings/aesio/aes.c +++ b/shared-bindings/aesio/aes.c @@ -170,7 +170,7 @@ STATIC void validate_length(aesio_aes_obj_t *self, size_t src_length, //| //| For ECB mode, the buffers must be 16 bytes long. For CBC mode, the //| buffers must be a multiple of 16 bytes, and must be equal length. For -//| CTX mode, there are no restrictions.""" +//| CTR mode, there are no restrictions.""" //| ... STATIC mp_obj_t aesio_aes_encrypt_into(mp_obj_t self_in, mp_obj_t src, mp_obj_t dest) { aesio_aes_obj_t *self = MP_OBJ_TO_PTR(self_in); @@ -192,7 +192,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(aesio_aes_encrypt_into_obj, aesio_aes_encrypt_i //| """Decrypt the buffer from ``src`` into ``dest``. //| For ECB mode, the buffers must be 16 bytes long. For CBC mode, the //| buffers must be a multiple of 16 bytes, and must be equal length. For -//| CTX mode, there are no restrictions.""" +//| CTR mode, there are no restrictions.""" //| ... //| STATIC mp_obj_t aesio_aes_decrypt_into(mp_obj_t self_in, mp_obj_t src, mp_obj_t dest) { From a7534908993ab75c095400d70ad675f247c617fc Mon Sep 17 00:00:00 2001 From: Phil Underwood Date: Tue, 20 Jun 2023 23:32:00 +0100 Subject: [PATCH 048/241] Refactor out test for bus sanity state --- ports/nrf/common-hal/busio/I2C.c | 45 ++++++++++++++++---------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/ports/nrf/common-hal/busio/I2C.c b/ports/nrf/common-hal/busio/I2C.c index d64bdcfea4..d5b61ffeea 100644 --- a/ports/nrf/common-hal/busio/I2C.c +++ b/ports/nrf/common-hal/busio/I2C.c @@ -79,21 +79,33 @@ void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { } } -static nrfx_err_t _safe_twim_enable(busio_i2c_obj_t *self) { - // check to see if bus is in sensible state before enabling twim - nrfx_err_t recover_result; - nrf_gpio_cfg_input(self->scl_pin_number, NRF_GPIO_PIN_PULLDOWN); - nrf_gpio_cfg_input(self->sda_pin_number, NRF_GPIO_PIN_PULLDOWN); +static bool _bus_is_sane(uint32_t scl_pin, uint32_t sda_pin) { + #if CIRCUITPY_REQUIRE_I2C_PULLUPS + nrf_gpio_cfg_input(scl_pin, NRF_GPIO_PIN_PULLDOWN); + nrf_gpio_cfg_input(sda_pin, NRF_GPIO_PIN_PULLDOWN); common_hal_mcu_delay_us(10); - nrf_gpio_cfg_input(self->scl_pin_number, NRF_GPIO_PIN_NOPULL); - nrf_gpio_cfg_input(self->sda_pin_number, NRF_GPIO_PIN_NOPULL); + nrf_gpio_cfg_input(scl_pin, NRF_GPIO_PIN_NOPULL); + nrf_gpio_cfg_input(sda_pin, NRF_GPIO_PIN_NOPULL); // We must pull up within 3us to achieve 400khz. common_hal_mcu_delay_us(3); + if (!nrf_gpio_pin_read(sda_pin) || !nrf_gpio_pin_read(scl_pin)) { + return false; + } else { + return true; + } + #else + return true; + #endif +} - if (!nrf_gpio_pin_read(self->sda_pin_number) || !nrf_gpio_pin_read(self->scl_pin_number)) { +static nrfx_err_t _safe_twim_enable(busio_i2c_obj_t *self) { + // check to see if bus is in sensible state before enabling twim + nrfx_err_t recover_result; + + if (!_bus_is_sane(self->scl_pin_number, self->sda_pin_number)) { // bus not in a sane state - try to recover recover_result = nrfx_twim_bus_recover(self->scl_pin_number, self->sda_pin_number); if (NRFX_SUCCESS != recover_result) { @@ -141,25 +153,12 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, const mcu_pin_obj_t * mp_raise_ValueError(translate("All I2C peripherals are in use")); } - #if CIRCUITPY_REQUIRE_I2C_PULLUPS - // Test that the pins are in a high state. (Hopefully indicating they are pulled up.) - nrf_gpio_cfg_input(scl->number, NRF_GPIO_PIN_PULLDOWN); - nrf_gpio_cfg_input(sda->number, NRF_GPIO_PIN_PULLDOWN); - - common_hal_mcu_delay_us(10); - - nrf_gpio_cfg_input(scl->number, NRF_GPIO_PIN_NOPULL); - nrf_gpio_cfg_input(sda->number, NRF_GPIO_PIN_NOPULL); - - // We must pull up within 3us to achieve 400khz. - common_hal_mcu_delay_us(3); - - if (!nrf_gpio_pin_read(sda->number) || !nrf_gpio_pin_read(scl->number)) { + // check bus is in a sane state + if (!_bus_is_sane(scl->number,sda->number)) { reset_pin_number(sda->number); reset_pin_number(scl->number); mp_raise_RuntimeError(translate("No pull up found on SDA or SCL; check your wiring")); } - #endif nrfx_twim_config_t config = NRFX_TWIM_DEFAULT_CONFIG(scl->number, sda->number); From 9a2e9f7e41fe969870bd7f2e8f5e51c035816ae9 Mon Sep 17 00:00:00 2001 From: paul Date: Tue, 20 Jun 2023 18:50:15 -0400 Subject: [PATCH 049/241] added bee data logger --- .../smartbeedesigns_bee_data_logger/board.c | 39 ++++++++ .../mpconfigboard.h | 41 +++++++++ .../mpconfigboard.mk | 18 ++++ .../smartbeedesigns_bee_data_logger/pins.c | 88 +++++++++++++++++++ .../smartbeedesigns_bee_data_logger/sdkconfig | 6 ++ 5 files changed, 192 insertions(+) create mode 100644 ports/espressif/boards/smartbeedesigns_bee_data_logger/board.c create mode 100644 ports/espressif/boards/smartbeedesigns_bee_data_logger/mpconfigboard.h create mode 100644 ports/espressif/boards/smartbeedesigns_bee_data_logger/mpconfigboard.mk create mode 100644 ports/espressif/boards/smartbeedesigns_bee_data_logger/pins.c create mode 100644 ports/espressif/boards/smartbeedesigns_bee_data_logger/sdkconfig diff --git a/ports/espressif/boards/smartbeedesigns_bee_data_logger/board.c b/ports/espressif/boards/smartbeedesigns_bee_data_logger/board.c new file mode 100644 index 0000000000..b3c8cb4191 --- /dev/null +++ b/ports/espressif/boards/smartbeedesigns_bee_data_logger/board.c @@ -0,0 +1,39 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" +#include "mpconfigboard.h" +#include "shared-bindings/microcontroller/Pin.h" + +void board_init(void) { + // Debug UART + #ifdef DEBUG + common_hal_never_reset_pin(&pin_GPIO43); + common_hal_never_reset_pin(&pin_GPIO44); + #endif /* DEBUG */ +} + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/espressif/boards/smartbeedesigns_bee_data_logger/mpconfigboard.h b/ports/espressif/boards/smartbeedesigns_bee_data_logger/mpconfigboard.h new file mode 100644 index 0000000000..1506b34573 --- /dev/null +++ b/ports/espressif/boards/smartbeedesigns_bee_data_logger/mpconfigboard.h @@ -0,0 +1,41 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2019 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Micropython setup + +#define MICROPY_HW_BOARD_NAME "Bee-Data-Logger" +#define MICROPY_HW_MCU_NAME "ESP32S3" + +#define MICROPY_HW_NEOPIXEL (&pin_GPIO48) +#define DEFAULT_UART_BUS_RX (&pin_GPIO44) +#define DEFAULT_UART_BUS_TX (&pin_GPIO43) + +#define DEFAULT_I2C_BUS_SCL (&pin_GPIO36) +#define DEFAULT_I2C_BUS_SDA (&pin_GPIO37) + +#define DEFAULT_SPI_BUS_SCK (&pin_GPIO48) +#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO46) +#define DEFAULT_SPI_BUS_MISO (&pin_GPIO45) diff --git a/ports/espressif/boards/smartbeedesigns_bee_data_logger/mpconfigboard.mk b/ports/espressif/boards/smartbeedesigns_bee_data_logger/mpconfigboard.mk new file mode 100644 index 0000000000..4c9b6c9d20 --- /dev/null +++ b/ports/espressif/boards/smartbeedesigns_bee_data_logger/mpconfigboard.mk @@ -0,0 +1,18 @@ +USB_VID = 0x303A +USB_PID = 0x815D +USB_PRODUCT = "Bee-Data-Logger" +USB_MANUFACTURER = "Smart Bee Designs" + +IDF_TARGET = esp32s3 + +CIRCUITPY_ESP_FLASH_MODE = dio +CIRCUITPY_ESP_FLASH_FREQ = 80m +CIRCUITPY_ESP_FLASH_SIZE = 8MB + + +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Register +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_DS3231 +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_SD +CIRCUITPY_ESPCAMERA = 0 diff --git a/ports/espressif/boards/smartbeedesigns_bee_data_logger/pins.c b/ports/espressif/boards/smartbeedesigns_bee_data_logger/pins.c new file mode 100644 index 0000000000..2f2c1108aa --- /dev/null +++ b/ports/espressif/boards/smartbeedesigns_bee_data_logger/pins.c @@ -0,0 +1,88 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + { MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) }, + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO3) }, + { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO3) }, + + { MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) }, + { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_GPIO4) }, + { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO4) }, + + { MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) }, + + { MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO6) }, + + { MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO7) }, + + { MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_A8), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO8) }, + + { MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_A9), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) }, + + + { MP_ROM_QSTR(MP_QSTR_IO38), MP_ROM_PTR(&pin_GPIO38) }, + { MP_ROM_QSTR(MP_QSTR_D38), MP_ROM_PTR(&pin_GPIO38) }, + + { MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) }, + { MP_ROM_QSTR(MP_QSTR_D39), MP_ROM_PTR(&pin_GPIO39) }, + + { MP_ROM_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) }, + { MP_ROM_QSTR(MP_QSTR_D41), MP_ROM_PTR(&pin_GPIO41) }, + + { MP_ROM_QSTR(MP_QSTR_IO42), MP_ROM_PTR(&pin_GPIO42) }, + { MP_ROM_QSTR(MP_QSTR_D42), MP_ROM_PTR(&pin_GPIO42) }, + + { MP_ROM_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) }, + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO36) }, + { MP_ROM_QSTR(MP_QSTR_D36), MP_ROM_PTR(&pin_GPIO36) }, + + { MP_ROM_QSTR(MP_QSTR_IO37), MP_ROM_PTR(&pin_GPIO37) }, + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO37) }, + { MP_ROM_QSTR(MP_QSTR_D37), MP_ROM_PTR(&pin_GPIO37) }, + + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO45) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO46) }, + { MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO47) }, + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO48) }, + + + + { MP_ROM_QSTR(MP_QSTR_IO48), MP_ROM_PTR(&pin_GPIO48) }, + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO40) }, + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL_POWER), MP_ROM_PTR(&pin_GPIO34) }, + + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) }, + { MP_ROM_QSTR(MP_QSTR_D43), MP_ROM_PTR(&pin_GPIO43) }, + { MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) }, + + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) }, + { MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44)}, + { MP_ROM_QSTR(MP_QSTR_D44), MP_ROM_PTR(&pin_GPIO44) }, + + { MP_ROM_QSTR(MP_QSTR_BOOT_BTN), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_VBAT), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_VBAT_SENSE), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_VBUS_SENSE), MP_ROM_PTR(&pin_GPIO2) }, + { MP_ROM_QSTR(MP_QSTR_LDO2), MP_ROM_PTR(&pin_GPIO34) }, + + + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/espressif/boards/smartbeedesigns_bee_data_logger/sdkconfig b/ports/espressif/boards/smartbeedesigns_bee_data_logger/sdkconfig new file mode 100644 index 0000000000..4008263f8d --- /dev/null +++ b/ports/espressif/boards/smartbeedesigns_bee_data_logger/sdkconfig @@ -0,0 +1,6 @@ +# CONFIG_ESP32S3_SPIRAM_SUPPORT is not set +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="smartbeedesigns_bee_data_logger" +# end of LWIP From 1f2a1a6e78f1a8d5b38a0cebad0f668217e3e93c Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Jun 2023 14:24:48 -0400 Subject: [PATCH 050/241] Improve OnDiskGif doc; check image width --- shared-bindings/gifio/OnDiskGif.c | 6 ++++++ shared-module/gifio/OnDiskGif.c | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/shared-bindings/gifio/OnDiskGif.c b/shared-bindings/gifio/OnDiskGif.c index e4335f9e44..8a7bba3a7f 100644 --- a/shared-bindings/gifio/OnDiskGif.c +++ b/shared-bindings/gifio/OnDiskGif.c @@ -114,6 +114,12 @@ //| `displayio` expects little-endian, so the example above uses `Colorspace.RGB565_SWAPPED`. //| //| :param file file: The name of the GIF file. +//| +//| If the image is too large it will be cropped at the bottom and right when displayed. +//| +//| **Limitations**: The image width is limited to 320 pixels at present. `ValueError` +//| will be raised if the image is too wide. The height +//| is not limited but images that are too large will cause a memory exception. //| """ //| ... STATIC mp_obj_t gifio_ondiskgif_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { diff --git a/shared-module/gifio/OnDiskGif.c b/shared-module/gifio/OnDiskGif.c index c1e6d1f2c2..039e77cf45 100644 --- a/shared-module/gifio/OnDiskGif.c +++ b/shared-module/gifio/OnDiskGif.c @@ -169,7 +169,14 @@ void common_hal_gifio_ondiskgif_construct(gifio_ondiskgif_t *self, pyb_file_obj_ int result = GIF_init(&self->gif); if (result != 1) { - mp_arg_error_invalid(MP_QSTR_file); + switch (self->gif.iError) { + case GIF_TOO_WIDE: + mp_raise_ValueError_varg(translate("%q must be <= %d"), MP_QSTR_width, MAX_WIDTH); + break; + default: + mp_arg_error_invalid(MP_QSTR_file); + break; + } } int bpp = 16; From 8acc8581df86e153bb73bc2218a73d5789595d62 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Jun 2023 14:53:40 -0400 Subject: [PATCH 051/241] note RP2040 countio limitations --- shared-bindings/countio/Counter.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/shared-bindings/countio/Counter.c b/shared-bindings/countio/Counter.c index fc60994f5c..89b205e763 100644 --- a/shared-bindings/countio/Counter.c +++ b/shared-bindings/countio/Counter.c @@ -41,6 +41,10 @@ //| if pin_counter.count >= 100: //| pin_counter.reset() //| print(pin_counter.count) +//| +//| **Limitations:** On RP2040, `Counter` uses the PWM peripheral, and +//| is limited to using PWM channel B pins due to hardware restrictions. +//| See the pin assignments for your board to see which pins can be used. //| """ //| ... STATIC mp_obj_t countio_counter_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { From 540bf581021cc57353d2703f9e6070f25c0467de Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Jun 2023 16:17:47 -0400 Subject: [PATCH 052/241] improve start_ap() doc; make "authmode" use consistent internally --- ports/espressif/common-hal/wifi/Radio.c | 16 ++++---- ports/raspberrypi/common-hal/wifi/Radio.c | 2 +- shared-bindings/wifi/Radio.c | 45 ++++++++++++----------- shared-bindings/wifi/Radio.h | 2 +- 4 files changed, 34 insertions(+), 31 deletions(-) diff --git a/ports/espressif/common-hal/wifi/Radio.c b/ports/espressif/common-hal/wifi/Radio.c index d0592b718f..0dcb02a327 100644 --- a/ports/espressif/common-hal/wifi/Radio.c +++ b/ports/espressif/common-hal/wifi/Radio.c @@ -206,22 +206,22 @@ void common_hal_wifi_radio_stop_station(wifi_radio_obj_t *self) { set_mode_station(self, false); } -void common_hal_wifi_radio_start_ap(wifi_radio_obj_t *self, uint8_t *ssid, size_t ssid_len, uint8_t *password, size_t password_len, uint8_t channel, uint32_t authmodes, uint8_t max_connections) { +void common_hal_wifi_radio_start_ap(wifi_radio_obj_t *self, uint8_t *ssid, size_t ssid_len, uint8_t *password, size_t password_len, uint8_t channel, uint32_t authmode, uint8_t max_connections) { set_mode_ap(self, true); - uint8_t authmode = 0; - switch (authmodes) { + uint8_t esp_authmode = 0; + switch (authmode) { case AUTHMODE_OPEN: - authmode = WIFI_AUTH_OPEN; + esp_authmode = WIFI_AUTH_OPEN; break; case AUTHMODE_WPA | AUTHMODE_PSK: - authmode = WIFI_AUTH_WPA_PSK; + esp_authmode = WIFI_AUTH_WPA_PSK; break; case AUTHMODE_WPA2 | AUTHMODE_PSK: - authmode = WIFI_AUTH_WPA2_PSK; + esp_authmode = WIFI_AUTH_WPA2_PSK; break; case AUTHMODE_WPA | AUTHMODE_WPA2 | AUTHMODE_PSK: - authmode = WIFI_AUTH_WPA_WPA2_PSK; + esp_authmode = WIFI_AUTH_WPA_WPA2_PSK; break; default: mp_arg_error_invalid(MP_QSTR_authmode); @@ -234,7 +234,7 @@ void common_hal_wifi_radio_start_ap(wifi_radio_obj_t *self, uint8_t *ssid, size_ memcpy(&config->ap.password, password, password_len); config->ap.password[password_len] = 0; config->ap.channel = channel; - config->ap.authmode = authmode; + config->ap.authmode = esp_authmode; mp_arg_validate_int_range(max_connections, 0, 10, MP_QSTR_max_connections); diff --git a/ports/raspberrypi/common-hal/wifi/Radio.c b/ports/raspberrypi/common-hal/wifi/Radio.c index c6ee5492ad..e17b35d108 100644 --- a/ports/raspberrypi/common-hal/wifi/Radio.c +++ b/ports/raspberrypi/common-hal/wifi/Radio.c @@ -175,7 +175,7 @@ void common_hal_wifi_radio_stop_station(wifi_radio_obj_t *self) { bindings_cyw43_wifi_enforce_pm(); } -void common_hal_wifi_radio_start_ap(wifi_radio_obj_t *self, uint8_t *ssid, size_t ssid_len, uint8_t *password, size_t password_len, uint8_t channel, uint32_t authmodes, uint8_t max_connections) { +void common_hal_wifi_radio_start_ap(wifi_radio_obj_t *self, uint8_t *ssid, size_t ssid_len, uint8_t *password, size_t password_len, uint8_t channel, uint32_t authmode, uint8_t max_connections) { if (!common_hal_wifi_radio_get_enabled(self)) { mp_raise_RuntimeError(translate("Wifi is not enabled")); } diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index 0380d33bc7..66502426cd 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -316,7 +316,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_stop_station_obj, wifi_radio_stop_station); //| password: Union[str | ReadableBuffer] = b"", //| *, //| channel: int = 1, -//| authmode: Optional[AuthMode] = None, +//| authmode: Iterable[AuthMode] = (), //| max_connections: Optional[int] = 4, //| ) -> None: //| """Starts running an access point with the specified ssid and password. @@ -324,11 +324,16 @@ MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_stop_station_obj, wifi_radio_stop_station); //| If ``channel`` is given, the access point will use that channel unless //| a station is already operating on a different channel. //| -//| If ``authmode`` is not None, the access point will use that Authentication -//| mode. If a non-empty password is given, ``authmode`` must not be ``OPEN``. -//| If ``authmode`` is not given or is None, -//| ``OPEN`` will be used when the password is the empty string, -//| otherwise ``authmode`` will be ``WPA_WPA2_PSK``. +//| If ``authmode`` is not None, the access point will use the given authentication modes. +//| If a non-empty password is given, ``authmode`` must not include ``OPEN``. +//| If ``authmode`` is not given or is an empty iterable, +//| ``(wifi.AuthMode.OPEN,)`` will be used when the password is the empty string, +//| otherwise ``authmode`` will be ``(wifi.AuthMode.WPA, wifi.AuthMode.WPA2, wifi.AuthMode.PSK)``. +//| +//| **Limitations:** On Espressif, ``authmode`` with a non-empty password must include +//| `wifi.AuthMode.PSK`, and one or both of `wifi.AuthMode.WPA` and `wifi.AuthMode.WPA2`. +//| On Pi Pico W, ``authmode`` is ignored; it is always ``(wifi.AuthMode.WPA2, wifi.AuthMode.PSK)` +//| with a non-empty password, or ``(wifi.AuthMode.OPEN,)`` when no password is given. //| //| The length of ``password`` must be 8-63 characters if it is ASCII, //| or exactly 64 hexadecimal characters if it is the hex form of the 256-bit key. @@ -342,7 +347,7 @@ STATIC mp_obj_t wifi_radio_start_ap(size_t n_args, const mp_obj_t *pos_args, mp_ { MP_QSTR_ssid, MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_password, MP_ARG_OBJ, {.u_obj = mp_const_empty_bytes} }, { MP_QSTR_channel, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} }, - { MP_QSTR_authmode, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none } }, + { MP_QSTR_authmode, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_empty_tuple } }, { MP_QSTR_max_connections, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 4} }, }; @@ -350,14 +355,12 @@ STATIC mp_obj_t wifi_radio_start_ap(size_t n_args, const mp_obj_t *pos_args, mp_ mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); - // 0 indicates mode wasn't given. - uint32_t authmodes = 0; - if (args[ARG_authmode].u_obj != mp_const_none) { - mp_obj_iter_buf_t iter_buf; - mp_obj_t item, iterable = mp_getiter(args[ARG_authmode].u_obj, &iter_buf); - while ((item = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) { - authmodes |= cp_enum_value(&wifi_authmode_type, item, MP_QSTR_authmode); - } + // 0 indicates no modes were given. Otherwise authmode is the OR of bits signifying the modes. + uint32_t authmode = 0; + mp_obj_iter_buf_t iter_buf; + mp_obj_t item, iterable = mp_getiter(args[ARG_authmode].u_obj, &iter_buf); + while ((item = mp_iternext(iterable)) != MP_OBJ_STOP_ITERATION) { + authmode |= cp_enum_value(&wifi_authmode_type, item, MP_QSTR_authmode); } mp_buffer_info_t ssid; @@ -366,28 +369,28 @@ STATIC mp_obj_t wifi_radio_start_ap(size_t n_args, const mp_obj_t *pos_args, mp_ mp_buffer_info_t password; mp_get_buffer_raise(args[ARG_password].u_obj, &password, MP_BUFFER_READ); - if (authmodes == 0) { + if (authmode == 0) { if (password.len == 0) { - authmodes = AUTHMODE_OPEN; + authmode = AUTHMODE_OPEN; } else { - authmodes = AUTHMODE_WPA | AUTHMODE_WPA2 | AUTHMODE_PSK; + authmode = AUTHMODE_WPA | AUTHMODE_WPA2 | AUTHMODE_PSK; } } mp_int_t channel = mp_arg_validate_int_range(args[ARG_channel].u_int, 1, 13, MP_QSTR_channel); - if (authmodes == AUTHMODE_OPEN && password.len > 0) { + if (authmode == AUTHMODE_OPEN && password.len > 0) { mp_raise_ValueError(translate("AuthMode.OPEN is not used with password")); } - if (authmodes != AUTHMODE_OPEN) { + if (authmode != AUTHMODE_OPEN) { mp_arg_validate_length_range(password.len, 8, 64, MP_QSTR_password); if (password.len == 64) { validate_hex_password(password.buf, password.len); } } - common_hal_wifi_radio_start_ap(self, ssid.buf, ssid.len, password.buf, password.len, channel, authmodes, args[ARG_max_connections].u_int); + common_hal_wifi_radio_start_ap(self, ssid.buf, ssid.len, password.buf, password.len, channel, authmode, args[ARG_max_connections].u_int); return mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_KW(wifi_radio_start_ap_obj, 1, wifi_radio_start_ap); diff --git a/shared-bindings/wifi/Radio.h b/shared-bindings/wifi/Radio.h index 5a8b48a172..83c1c8be88 100644 --- a/shared-bindings/wifi/Radio.h +++ b/shared-bindings/wifi/Radio.h @@ -93,7 +93,7 @@ extern void common_hal_wifi_radio_stop_scanning_networks(wifi_radio_obj_t *self) extern void common_hal_wifi_radio_start_station(wifi_radio_obj_t *self); extern void common_hal_wifi_radio_stop_station(wifi_radio_obj_t *self); -extern void common_hal_wifi_radio_start_ap(wifi_radio_obj_t *self, uint8_t *ssid, size_t ssid_len, uint8_t *password, size_t password_len, uint8_t channel, uint32_t authmodes, uint8_t max_connections); +extern void common_hal_wifi_radio_start_ap(wifi_radio_obj_t *self, uint8_t *ssid, size_t ssid_len, uint8_t *password, size_t password_len, uint8_t channel, uint32_t authmode, uint8_t max_connections); extern void common_hal_wifi_radio_stop_ap(wifi_radio_obj_t *self); extern bool common_hal_wifi_radio_get_ap_active(wifi_radio_obj_t *self); From fde63427052a7a9e0c4d4d71c85b1784279c59da Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Fri, 23 Jun 2023 13:20:41 -0400 Subject: [PATCH 053/241] Revert "nrf: prevent I2C hangs" --- ports/nrf/Makefile | 1 - ports/nrf/common-hal/busio/I2C.c | 78 +++++++++----------------------- 2 files changed, 22 insertions(+), 57 deletions(-) diff --git a/ports/nrf/Makefile b/ports/nrf/Makefile index d0d5e2a6eb..8a8625bd95 100755 --- a/ports/nrf/Makefile +++ b/ports/nrf/Makefile @@ -114,7 +114,6 @@ SRC_NRFX = $(addprefix nrfx/,\ drivers/src/nrfx_spim.c \ drivers/src/nrfx_timer.c \ drivers/src/nrfx_twim.c \ - drivers/src/nrfx_twi_twim.c \ drivers/src/nrfx_uarte.c \ drivers/src/nrfx_gpiote.c \ drivers/src/nrfx_rtc.c \ diff --git a/ports/nrf/common-hal/busio/I2C.c b/ports/nrf/common-hal/busio/I2C.c index d5b61ffeea..2bd1416f5a 100644 --- a/ports/nrf/common-hal/busio/I2C.c +++ b/ports/nrf/common-hal/busio/I2C.c @@ -79,59 +79,20 @@ void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { } } -static bool _bus_is_sane(uint32_t scl_pin, uint32_t sda_pin) { - #if CIRCUITPY_REQUIRE_I2C_PULLUPS - nrf_gpio_cfg_input(scl_pin, NRF_GPIO_PIN_PULLDOWN); - nrf_gpio_cfg_input(sda_pin, NRF_GPIO_PIN_PULLDOWN); - - common_hal_mcu_delay_us(10); - - nrf_gpio_cfg_input(scl_pin, NRF_GPIO_PIN_NOPULL); - nrf_gpio_cfg_input(sda_pin, NRF_GPIO_PIN_NOPULL); - - // We must pull up within 3us to achieve 400khz. - common_hal_mcu_delay_us(3); - if (!nrf_gpio_pin_read(sda_pin) || !nrf_gpio_pin_read(scl_pin)) { - return false; - } else { - return true; - } - #else - return true; - #endif -} - -static nrfx_err_t _safe_twim_enable(busio_i2c_obj_t *self) { - // check to see if bus is in sensible state before enabling twim - nrfx_err_t recover_result; - - if (!_bus_is_sane(self->scl_pin_number, self->sda_pin_number)) { - // bus not in a sane state - try to recover - recover_result = nrfx_twim_bus_recover(self->scl_pin_number, self->sda_pin_number); - if (NRFX_SUCCESS != recover_result) { - // return error message if unable to recover the bus - return recover_result; - } - } - - nrfx_twim_enable(&self->twim_peripheral->twim); - return NRFX_SUCCESS; -} - static uint8_t twi_error_to_mp(const nrfx_err_t err) { switch (err) { case NRFX_ERROR_DRV_TWI_ERR_ANACK: return MP_ENODEV; case NRFX_ERROR_BUSY: return MP_EBUSY; - case NRFX_SUCCESS: - return 0; case NRFX_ERROR_DRV_TWI_ERR_DNACK: case NRFX_ERROR_INVALID_ADDR: - case NRFX_ERROR_INTERNAL: - default: return MP_EIO; + default: + break; } + + return 0; } void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, const mcu_pin_obj_t *scl, const mcu_pin_obj_t *sda, uint32_t frequency, uint32_t timeout) { @@ -153,12 +114,25 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, const mcu_pin_obj_t * mp_raise_ValueError(translate("All I2C peripherals are in use")); } - // check bus is in a sane state - if (!_bus_is_sane(scl->number,sda->number)) { + #if CIRCUITPY_REQUIRE_I2C_PULLUPS + // Test that the pins are in a high state. (Hopefully indicating they are pulled up.) + nrf_gpio_cfg_input(scl->number, NRF_GPIO_PIN_PULLDOWN); + nrf_gpio_cfg_input(sda->number, NRF_GPIO_PIN_PULLDOWN); + + common_hal_mcu_delay_us(10); + + nrf_gpio_cfg_input(scl->number, NRF_GPIO_PIN_NOPULL); + nrf_gpio_cfg_input(sda->number, NRF_GPIO_PIN_NOPULL); + + // We must pull up within 3us to achieve 400khz. + common_hal_mcu_delay_us(3); + + if (!nrf_gpio_pin_read(sda->number) || !nrf_gpio_pin_read(scl->number)) { reset_pin_number(sda->number); reset_pin_number(scl->number); mp_raise_RuntimeError(translate("No pull up found on SDA or SCL; check your wiring")); } + #endif nrfx_twim_config_t config = NRFX_TWIM_DEFAULT_CONFIG(scl->number, sda->number); @@ -214,9 +188,7 @@ bool common_hal_busio_i2c_probe(busio_i2c_obj_t *self, uint8_t addr) { NRF_TWIM_Type *reg = self->twim_peripheral->twim.p_twim; bool found = true; - if (NRFX_SUCCESS != _safe_twim_enable(self)) { - return false; - } + nrfx_twim_enable(&self->twim_peripheral->twim); nrf_twim_address_set(reg, addr); nrf_twim_tx_buffer_set(reg, NULL, 0); @@ -274,10 +246,7 @@ STATIC uint8_t _common_hal_busio_i2c_write(busio_i2c_obj_t *self, uint16_t addr, nrfx_err_t err = NRFX_SUCCESS; - err = _safe_twim_enable(self); - if (NRFX_SUCCESS != err) { - return twi_error_to_mp(err); - } + nrfx_twim_enable(&self->twim_peripheral->twim); // break into MAX_XFER_LEN transaction while (len) { @@ -309,10 +278,7 @@ uint8_t common_hal_busio_i2c_read(busio_i2c_obj_t *self, uint16_t addr, uint8_t nrfx_err_t err = NRFX_SUCCESS; - err = _safe_twim_enable(self); - if (NRFX_SUCCESS != err) { - return twi_error_to_mp(err); - } + nrfx_twim_enable(&self->twim_peripheral->twim); // break into MAX_XFER_LEN transaction while (len) { From 25498ee5622f3c8533511b5f053a4d1c8325295f Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Thu, 22 Jun 2023 17:41:48 +0000 Subject: [PATCH 054/241] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/pt_BR/ --- locale/pt_BR.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 705ff49b73..68e345351f 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-05-23 22:55+0000\n" +"PO-Revision-Date: 2023-06-23 20:35+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.18-dev\n" +"X-Generator: Weblate 4.18.1\n" #: main.c msgid "" @@ -1373,7 +1373,7 @@ msgstr "A camada deve ser uma subclasse Group ou TileGrid" #: ports/espressif/common-hal/espidf/__init__.c msgid "MAC address was invalid" -msgstr "Endereço MAC inválido" +msgstr "O endereço MAC era inválido" #: shared-bindings/is31fl3741/IS31FL3741.c msgid "Mapping must be a tuple" From c4b57dc2fec7a4d2d5acf2bcdc80c4ae05dcf43c Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sat, 24 Jun 2023 12:42:00 -0500 Subject: [PATCH 055/241] fix shape.set_boundary() --- shared-bindings/displayio/Shape.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared-bindings/displayio/Shape.c b/shared-bindings/displayio/Shape.c index c8b3959837..e7ed29cbad 100644 --- a/shared-bindings/displayio/Shape.c +++ b/shared-bindings/displayio/Shape.c @@ -82,8 +82,8 @@ STATIC mp_obj_t displayio_shape_obj_set_boundary(size_t n_args, const mp_obj_t * (void)n_args; displayio_shape_t *self = MP_OBJ_TO_PTR(args[0]); mp_int_t y = mp_arg_validate_type_int(args[1], MP_QSTR_y); - mp_int_t start_x = mp_arg_validate_type_int(args[1], MP_QSTR_start_x); - mp_int_t end_x = mp_arg_validate_type_int(args[1], MP_QSTR_end_x); + mp_int_t start_x = mp_arg_validate_type_int(args[2], MP_QSTR_start_x); + mp_int_t end_x = mp_arg_validate_type_int(args[3], MP_QSTR_end_x); common_hal_displayio_shape_set_boundary(self, y, start_x, end_x); return mp_const_none; From 6bdfed2bb03077d006b78d257832d2c538d0052d Mon Sep 17 00:00:00 2001 From: Noah Axon Date: Sun, 25 Jun 2023 07:08:59 -0500 Subject: [PATCH 056/241] Adding support for M5Stack Stick C Plus --- .../boards/m5stack_stick_c_plus/board.c | 245 ++++++++++++++++++ .../m5stack_stick_c_plus/mpconfigboard.h | 47 ++++ .../m5stack_stick_c_plus/mpconfigboard.mk | 11 + .../boards/m5stack_stick_c_plus/pins.c | 62 +++++ .../boards/m5stack_stick_c_plus/sdkconfig | 26 ++ 5 files changed, 391 insertions(+) create mode 100755 ports/espressif/boards/m5stack_stick_c_plus/board.c create mode 100644 ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h create mode 100644 ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.mk create mode 100644 ports/espressif/boards/m5stack_stick_c_plus/pins.c create mode 100644 ports/espressif/boards/m5stack_stick_c_plus/sdkconfig diff --git a/ports/espressif/boards/m5stack_stick_c_plus/board.c b/ports/espressif/boards/m5stack_stick_c_plus/board.c new file mode 100755 index 0000000000..8188ac9ded --- /dev/null +++ b/ports/espressif/boards/m5stack_stick_c_plus/board.c @@ -0,0 +1,245 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2023 n0xa + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" +#include "mpconfigboard.h" +#include "shared-bindings/busio/SPI.h" +#include "shared-bindings/busio/I2C.h" +#include "shared-bindings/displayio/FourWire.h" +#include "shared-module/displayio/__init__.h" +#include "shared-module/displayio/mipi_constants.h" +#include "shared-bindings/board/__init__.h" +#include "shared-bindings/microcontroller/Pin.h" +#include "components/driver/include/driver/gpio.h" +#include "components/hal/include/hal/gpio_hal.h" +#include "common-hal/microcontroller/Pin.h" + +#include "../../pmic/axp192/axp192.h" + +// display init sequence according to adafruit_st7735r.py library +uint8_t display_init_sequence[] = { + 0x01,0x80,0x96, // SWRESET and Delay 150ms + 0x11,0x80,0xff, // SLPOUT and Delay + 0xb1,0x03,0x01,0x2C,0x2D, // _FRMCTR1 + 0xb2,0x03,0x01,0x2C,0x2D, // _FRMCTR2 + 0xb3,0x06,0x01,0x2C,0x2D,0x01,0x2C,0x2D, // _FRMCTR3 + 0xb4,0x01,0x07, // _INVCTR line inversion + 0xc0,0x03,0xa2,0x02,0x84, // _PWCTR1 GVDD = 4.7V, 1.0uA + 0xc1,0x01,0xc5, // _PWCTR2 VGH=14.7V, VGL=-7.35V + 0xc2,0x02,0x0a,0x00, // _PWCTR3 Opamp current small, Boost frequency + 0xc3,0x02,0x8a,0x2a, + 0xc4,0x02,0x8a,0xee, + 0xc5,0x01,0x0e, // _VMCTR1 VCOMH = 4V, VOML = -1.1V + 0x36,0x01,0xc8, // MADCTL Rotate display + 0x21,0x00, // _INVON + 0x3a,0x01,0x05, // COLMOD - 16bit color + 0xe0,0x10,0x02,0x1c,0x07,0x12,0x37,0x32,0x29,0x2d,0x29,0x25,0x2B,0x39,0x00,0x01,0x03,0x10, // _GMCTRP1 Gamma + 0xe1,0x10,0x03,0x1d,0x07,0x06,0x2E,0x2C,0x29,0x2D,0x2E,0x2E,0x37,0x3F,0x00,0x00,0x02,0x10, // _GMCTRN1 + 0x13,0x80,0x0a, // _NORON + 0x29,0x80,0x64 // _DISPON +}; + +static bool pmic_init(busio_i2c_obj_t *i2c) { + int rc; + uint8_t write_buf[2]; + + if (!pmic_common_init(i2c)) { + return false; + } + + // Reg: 30h + // The VBUS-IPSOUT path can be selected to be opened regardless of the status of N_VBUSEN + // VBUS VHOLD pressure limit control disabled + // VBUS current limit control disabled + write_buf[0] = AXP192_VBUS_IPSOUT; + write_buf[1] = AXP192_VBUS_IPSOUT_IGNORE_VBUSEN; + rc = common_hal_busio_i2c_write(i2c, AXP192_I2C_ADDRESS, write_buf, sizeof(write_buf)); + if (rc != 0) { + return false; + } + + // Reg: 33h + // Charge function enable control bit, including internal and external channels + // Charging target voltage: 4.2V + // Charging end current: End charging when charging current is less than 10% setting + // Internal path charging current: 100mA + write_buf[0] = AXP192_CHARGING_CTRL1; + write_buf[1] = AXP192_CHARGING_CTRL1_ENABLE | + AXP192_CHARGING_CTRL1_VOLTAGE_4_20V | + AXP192_CHARGING_CTRL1_CURRENT_100mA; + rc = common_hal_busio_i2c_write(i2c, AXP192_I2C_ADDRESS, write_buf, sizeof(write_buf)); + if (rc != 0) { + return false; + } + + // Reg: 90h + // GPIO0(LDOio0) floating + write_buf[0] = AXP192_GPIO0_FUNCTION; + write_buf[1] = AXP192_GPIO0_FUNCTION_FLOATING; + rc = common_hal_busio_i2c_write(i2c, AXP192_I2C_ADDRESS, write_buf, sizeof(write_buf)); + if (rc != 0) { + return false; + } + + // Reg: 91h + // GPIO0(LDOio0) 2.8V + write_buf[0] = AXP192_GPIO0_LDO_VOLTAGE; + write_buf[1] = AXP192_GPIO0_LDO_VOLTAGE_2_8V; + rc = common_hal_busio_i2c_write(i2c, AXP192_I2C_ADDRESS, write_buf, sizeof(write_buf)); + if (rc != 0) { + return false; + } + + // Reg: 28h + // LDO2 (TFT backlight): 2.8V + // LDO3 (TFT logic): 3.0V + write_buf[0] = AXP192_LDO23_OUT_VOLTAGE; + write_buf[1] = AXP192_LDO23_OUT_VOLTAGE_LDO2_2_8V | + AXP192_LDO23_OUT_VOLTAGE_LDO3_3_0V; + rc = common_hal_busio_i2c_write(i2c, AXP192_I2C_ADDRESS, write_buf, sizeof(write_buf)); + if (rc != 0) { + return false; + } + + // Reg: 12h + // Enable CTRL_EXTEN, DCDC1, LDO2 and LDO3 + write_buf[0] = AXP192_DCDC13_LDO23_CTRL; + write_buf[1] = AXP192_DCDC13_LDO23_CTRL_EXTEN | + AXP192_DCDC13_LDO23_CTRL_LDO3 | + AXP192_DCDC13_LDO23_CTRL_LDO2 | + AXP192_DCDC13_LDO23_CTRL_DCDC1; + rc = common_hal_busio_i2c_write(i2c, AXP192_I2C_ADDRESS, write_buf, sizeof(write_buf)); + if (rc != 0) { + return false; + } + + // Reg: 26h + // DCDC1 (ESP32 VDD): 3.350V + write_buf[0] = AXP192_DCDC1_OUT_VOLTAGE; + write_buf[1] = AXP192_DCDC1_OUT_VOLTAGE_3_350V; + rc = common_hal_busio_i2c_write(i2c, AXP192_I2C_ADDRESS, write_buf, sizeof(write_buf)); + if (rc != 0) { + return false; + } + + if (!pmic_disable_all_irq(i2c)) { + return false; + } + + if (!pmic_clear_all_irq(i2c)) { + return false; + } + + if (!pmic_enable_power_key_press_irq(i2c)) { + return false; + } + + if (!pmic_enable_low_battery_irq(i2c)) { + return false; + } + + return true; +} + +static bool display_init(void) { + displayio_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; + busio_spi_obj_t *spi = &bus->inline_bus; + common_hal_busio_spi_construct(spi, &pin_GPIO13, &pin_GPIO15, NULL, false); + common_hal_busio_spi_never_reset(spi); + + bus->base.type = &displayio_fourwire_type; + + common_hal_displayio_fourwire_construct( + bus, + spi, + &pin_GPIO23, // DC + &pin_GPIO5, // CS + &pin_GPIO18, // RST + 10000000, // baudrate + 0, // polarity + 0 // phase + ); + + displayio_display_obj_t *display = &allocate_display()->display; + display->base.type = &displayio_display_type; + + common_hal_displayio_display_construct( + display, + bus, + 135, // width (after rotation) + 240, // height (after rotation) + 40, // column start + 52, // row start + 1, // rotation + 16, // color depth + false, // grayscale + false, // pixels in a byte share a row. Only valid for depths < 8 + 1, // bytes per cell. Only valid for depths < 8 + false, // reverse_pixels_in_byte. Only valid for depths < 8 + true, // reverse_pixels_in_word + MIPI_COMMAND_SET_COLUMN_ADDRESS, // set column command + MIPI_COMMAND_SET_PAGE_ADDRESS, // set row command + MIPI_COMMAND_WRITE_MEMORY_START, // write memory command + display_init_sequence, + sizeof(display_init_sequence), + NULL, // backlight pin + NO_BRIGHTNESS_COMMAND, + 1.0f, // brightness + false, // single_byte_bounds + false, // data_as_commands + true, // auto_refresh + 80, // native_frames_per_second + false, // backlight_on_high + false, // SH1107_addressing + 50000 // backlight pwm frequency + ); + + return true; +} + +void board_init(void) { + busio_i2c_obj_t *internal_i2c = common_hal_board_create_i2c(0); + + if (!pmic_init(internal_i2c)) { + mp_printf(&mp_plat_print, "could not initialize axp192 pmic\n"); + return; + } + + if (!display_init()) { + mp_printf(&mp_plat_print, "could not initialize the display"); + return; + } +} + +bool espressif_board_reset_pin_number(gpio_num_t pin_number) { + // Set IR led gpio high to prevent power drain from the led + if (pin_number == 9) { + gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT); + gpio_set_level(pin_number, true); + return true; + } + return false; +} diff --git a/ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h b/ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h new file mode 100644 index 0000000000..3e988248c6 --- /dev/null +++ b/ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h @@ -0,0 +1,47 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2023 n0xa + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Micropython setup + +#define MICROPY_HW_BOARD_NAME "M5Stack Stick C Plus" +#define MICROPY_HW_MCU_NAME "ESP32" + +#define MICROPY_HW_LED_STATUS (&pin_GPIO10) +#define MICROPY_HW_LED_STATUS_INVERTED (1) + +#define CIRCUITPY_BOARD_I2C (2) +#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO22, .sda = &pin_GPIO21}, \ + {.scl = &pin_GPIO33, .sda = &pin_GPIO32}} + +// For entering safe mode +#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO37) + +// Explanation of how a user got into safe mode +#define BOARD_USER_SAFE_MODE_ACTION translate("You pressed button A at start up.") + +// UART pins attached to the USB-serial converter chip +#define CIRCUITPY_CONSOLE_UART_TX (&pin_GPIO1) +#define CIRCUITPY_CONSOLE_UART_RX (&pin_GPIO3) diff --git a/ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.mk b/ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.mk new file mode 100644 index 0000000000..ce4d23a303 --- /dev/null +++ b/ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.mk @@ -0,0 +1,11 @@ +CIRCUITPY_CREATOR_ID = 0x10151015 +CIRCUITPY_CREATION_ID = 0x00320007 + +IDF_TARGET = esp32 + +CIRCUITPY_ESP_FLASH_MODE = qio +CIRCUITPY_ESP_FLASH_FREQ = 80m +CIRCUITPY_ESP_FLASH_SIZE = 4MB +CIRCUITPY_ESPCAMERA = 0 + +SRC_C += pmic/axp192/axp192.c diff --git a/ports/espressif/boards/m5stack_stick_c_plus/pins.c b/ports/espressif/boards/m5stack_stick_c_plus/pins.c new file mode 100644 index 0000000000..63e3f2d8d9 --- /dev/null +++ b/ports/espressif/boards/m5stack_stick_c_plus/pins.c @@ -0,0 +1,62 @@ +#include "shared-bindings/board/__init__.h" +#include "shared-module/displayio/__init__.h" + +CIRCUITPY_BOARD_BUS_SINGLETON(porta_i2c, i2c, 1) + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + // External pins are in silkscreen order, from top to bottom, left side, then right side + + { MP_ROM_QSTR(MP_QSTR_A26), MP_ROM_PTR(&pin_GPIO26) }, + { MP_ROM_QSTR(MP_QSTR_D26), MP_ROM_PTR(&pin_GPIO26) }, + + { MP_ROM_QSTR(MP_QSTR_A36), MP_ROM_PTR(&pin_GPIO36) }, + { MP_ROM_QSTR(MP_QSTR_D36), MP_ROM_PTR(&pin_GPIO36) }, + + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) }, + + { MP_ROM_QSTR(MP_QSTR_PORTA_SDA), MP_ROM_PTR(&pin_GPIO32) }, + { MP_ROM_QSTR(MP_QSTR_D32), MP_ROM_PTR(&pin_GPIO32) }, + + { MP_ROM_QSTR(MP_QSTR_PORTA_SCL), MP_ROM_PTR(&pin_GPIO33) }, + { MP_ROM_QSTR(MP_QSTR_D33), MP_ROM_PTR(&pin_GPIO33) }, + + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO10) }, + { MP_ROM_QSTR(MP_QSTR_IR_LED), MP_ROM_PTR(&pin_GPIO9) }, + + // buttons + { MP_ROM_QSTR(MP_QSTR_BTN_A), MP_ROM_PTR(&pin_GPIO37) }, + { MP_ROM_QSTR(MP_QSTR_BTN_B), MP_ROM_PTR(&pin_GPIO39) }, + + // internal i2c bus + { MP_ROM_QSTR(MP_QSTR_SYS_SDA), MP_ROM_PTR(&pin_GPIO21) }, + { MP_ROM_QSTR(MP_QSTR_SYS_SCL), MP_ROM_PTR(&pin_GPIO22) }, + + // internal devices interrupt + { MP_ROM_QSTR(MP_QSTR_SYS_INT), MP_ROM_PTR(&pin_GPIO35) }, + + // pmu AXP192 + { MP_ROM_QSTR(MP_QSTR_PMU_N_VBUSEN), MP_ROM_PTR(&pin_GPIO27) }, + + // pdm microphone + { MP_ROM_QSTR(MP_QSTR_PDM_MIC_CLK), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_PDM_MIC_DATA), MP_ROM_PTR(&pin_GPIO34) }, + + // buzzer + { MP_ROM_QSTR(MP_QSTR_SPEAKER), MP_ROM_PTR(&pin_GPIO2) }, + + // lcd spi bus + { MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO15) }, + { MP_ROM_QSTR(MP_QSTR_LCD_CLK), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO23) }, + { MP_ROM_QSTR(MP_QSTR_LCD_RST), MP_ROM_PTR(&pin_GPIO18) }, + { MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO5) }, + + { MP_ROM_QSTR(MP_QSTR_SYS_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_PORTA_I2C), MP_ROM_PTR(&board_porta_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); diff --git a/ports/espressif/boards/m5stack_stick_c_plus/sdkconfig b/ports/espressif/boards/m5stack_stick_c_plus/sdkconfig new file mode 100644 index 0000000000..a37e88cedf --- /dev/null +++ b/ports/espressif/boards/m5stack_stick_c_plus/sdkconfig @@ -0,0 +1,26 @@ +CONFIG_ESP32_SPIRAM_SUPPORT=n + +# CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="M5StaskStickCPlus" +# end of LWIP + +# Uncomment (remove ###) to send ESP_LOG output to TX/RX pins +### # +### # ESP System Settings +### # +### CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT=y +### # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set +### CONFIG_ESP_CONSOLE_UART_CUSTOM=y +### CONFIG_ESP_CONSOLE_NONE is not set +### CONFIG_ESP_CONSOLE_UART=y +### CONFIG_ESP_CONSOLE_UART_CUSTOM_NUM_0=y +### # CONFIG_ESP_CONSOLE_UART_CUSTOM_NUM_1 is not set +### CONFIG_ESP_CONSOLE_UART_NUM=0 +### CONFIG_ESP_CONSOLE_UART_TX_GPIO=17 +### CONFIG_ESP_CONSOLE_UART_RX_GPIO=16 +### CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 +### # CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_5 is not set +### # end of ESP System Settings From 75dbb7d102d1be7ccbfacff4c0aa3f41621ffb52 Mon Sep 17 00:00:00 2001 From: Noah Axon Date: Sun, 25 Jun 2023 07:29:18 -0500 Subject: [PATCH 057/241] Added a new creation ID for this board --- ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.mk b/ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.mk index ce4d23a303..101ef3c2e0 100644 --- a/ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.mk +++ b/ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.mk @@ -1,5 +1,5 @@ CIRCUITPY_CREATOR_ID = 0x10151015 -CIRCUITPY_CREATION_ID = 0x00320007 +CIRCUITPY_CREATION_ID = 0x0032000A IDF_TARGET = esp32 From 232e096f93640d22a577903f21520cc4797b3bbf Mon Sep 17 00:00:00 2001 From: Neradoc Date: Sun, 25 Jun 2023 17:05:49 +0200 Subject: [PATCH 058/241] fix board.BUTTON on espressif_esp32c3_devkitm_1_n4 --- ports/espressif/boards/espressif_esp32c3_devkitm_1_n4/pins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/boards/espressif_esp32c3_devkitm_1_n4/pins.c b/ports/espressif/boards/espressif_esp32c3_devkitm_1_n4/pins.c index e948ae3fc8..243b6040d0 100644 --- a/ports/espressif/boards/espressif_esp32c3_devkitm_1_n4/pins.c +++ b/ports/espressif/boards/espressif_esp32c3_devkitm_1_n4/pins.c @@ -53,7 +53,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_MTCK), MP_ROM_PTR(&pin_GPIO6) }, { MP_ROM_QSTR(MP_QSTR_MTDO), MP_ROM_PTR(&pin_GPIO7) }, - { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO2) }, + { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO9) }, { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO8) }, { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, From b4be2317cbe1c343f76494b72f11349e8ce073b3 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 26 Jun 2023 10:33:41 -0500 Subject: [PATCH 059/241] rp2040: Avoid screeches due to audio underflow during flash writes By pausing audio during flash writes, the worst screeching of #8121 is avoided. I don't consider this a full fix, but it greatly improves the by far most common scenario in which the problem occurs. Tested on rp2040 prop feather with a midi synth playing arpeggios. When writing to the flash e.g., with ``` dd bs=512 count=32 if=/dev/zero of=/media/jepler/CIRCUITPY/boop ``` the audio goes "tap tap tap tap" during the flash write instead of the squawking. This isn't a 100% fix; it will still glitch out, including during USB enumeration which must be taking a long time without servicing background tasks. Add a delay if not usb-connected at startup ameliorates this greatly. --- ports/raspberrypi/audio_dma.c | 21 +++++++++++++++++++ ports/raspberrypi/audio_dma.h | 3 +++ ports/raspberrypi/supervisor/internal_flash.c | 4 ++++ 3 files changed, 28 insertions(+) diff --git a/ports/raspberrypi/audio_dma.c b/ports/raspberrypi/audio_dma.c index 612fbbde4c..3b7ef5ec44 100644 --- a/ports/raspberrypi/audio_dma.c +++ b/ports/raspberrypi/audio_dma.c @@ -388,6 +388,27 @@ bool audio_dma_get_paused(audio_dma_t *dma) { return (control & DMA_CH0_CTRL_TRIG_EN_BITS) == 0; } +uint32_t audio_dma_pause_all(void) { + uint32_t result = 0; + for (size_t channel = 0; channel < NUM_DMA_CHANNELS; channel++) { + audio_dma_t *dma = MP_STATE_PORT(playing_audio)[channel]; + if (dma != NULL && !audio_dma_get_paused(dma)) { + audio_dma_pause(dma); + result |= (1 << channel); + } + } + return result; +} + +void audio_dma_unpause_cookie(uint32_t cookie) { + for (size_t channel = 0; channel < NUM_DMA_CHANNELS; channel++) { + audio_dma_t *dma = MP_STATE_PORT(playing_audio)[channel]; + if (dma != NULL && (cookie & (1 << channel))) { + audio_dma_resume(dma); + } + } +} + void audio_dma_init(audio_dma_t *dma) { dma->buffer[0] = NULL; dma->buffer[1] = NULL; diff --git a/ports/raspberrypi/audio_dma.h b/ports/raspberrypi/audio_dma.h index ae9a07a604..91d692f8ac 100644 --- a/ports/raspberrypi/audio_dma.h +++ b/ports/raspberrypi/audio_dma.h @@ -89,4 +89,7 @@ void audio_dma_pause(audio_dma_t *dma); void audio_dma_resume(audio_dma_t *dma); bool audio_dma_get_paused(audio_dma_t *dma); +uint32_t audio_dma_pause_all(void); +void audio_dma_unpause_cookie(uint32_t cookie); + #endif // MICROPY_INCLUDED_RASPBERRYPI_AUDIO_DMA_OUT_H diff --git a/ports/raspberrypi/supervisor/internal_flash.c b/ports/raspberrypi/supervisor/internal_flash.c index 9216f1ebe2..b0b89d38f1 100644 --- a/ports/raspberrypi/supervisor/internal_flash.c +++ b/ports/raspberrypi/supervisor/internal_flash.c @@ -39,6 +39,7 @@ #include "lib/oofatfs/ff.h" #include "shared-bindings/microcontroller/__init__.h" +#include "audio_dma.h" #include "supervisor/flash.h" #include "supervisor/usb.h" @@ -97,9 +98,12 @@ void port_internal_flash_flush(void) { } // Make sure we don't have an interrupt while we do flash operations. common_hal_mcu_disable_interrupts(); + // and audio DMA must be paused as well + uint32_t cookie = audio_dma_pause_all(); flash_range_erase(CIRCUITPY_CIRCUITPY_DRIVE_START_ADDR + _cache_lba, SECTOR_SIZE); flash_range_program(CIRCUITPY_CIRCUITPY_DRIVE_START_ADDR + _cache_lba, _cache, SECTOR_SIZE); _cache_lba = NO_CACHE; + audio_dma_unpause_cookie(cookie); common_hal_mcu_enable_interrupts(); } From 385366128f067bc0315a108bb046075f5d7366bf Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 27 Jun 2023 09:59:02 -0500 Subject: [PATCH 060/241] Don't use "cookie" variable/function name --- ports/raspberrypi/audio_dma.c | 4 ++-- ports/raspberrypi/audio_dma.h | 2 +- ports/raspberrypi/supervisor/internal_flash.c | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ports/raspberrypi/audio_dma.c b/ports/raspberrypi/audio_dma.c index 3b7ef5ec44..b5bd8c069c 100644 --- a/ports/raspberrypi/audio_dma.c +++ b/ports/raspberrypi/audio_dma.c @@ -400,10 +400,10 @@ uint32_t audio_dma_pause_all(void) { return result; } -void audio_dma_unpause_cookie(uint32_t cookie) { +void audio_dma_unpause_mask(uint32_t channel_mask) { for (size_t channel = 0; channel < NUM_DMA_CHANNELS; channel++) { audio_dma_t *dma = MP_STATE_PORT(playing_audio)[channel]; - if (dma != NULL && (cookie & (1 << channel))) { + if (dma != NULL && (channel_mask & (1 << channel))) { audio_dma_resume(dma); } } diff --git a/ports/raspberrypi/audio_dma.h b/ports/raspberrypi/audio_dma.h index 91d692f8ac..e84a79df26 100644 --- a/ports/raspberrypi/audio_dma.h +++ b/ports/raspberrypi/audio_dma.h @@ -90,6 +90,6 @@ void audio_dma_resume(audio_dma_t *dma); bool audio_dma_get_paused(audio_dma_t *dma); uint32_t audio_dma_pause_all(void); -void audio_dma_unpause_cookie(uint32_t cookie); +void audio_dma_unpause_mask(uint32_t channel_mask); #endif // MICROPY_INCLUDED_RASPBERRYPI_AUDIO_DMA_OUT_H diff --git a/ports/raspberrypi/supervisor/internal_flash.c b/ports/raspberrypi/supervisor/internal_flash.c index b0b89d38f1..42223b29e3 100644 --- a/ports/raspberrypi/supervisor/internal_flash.c +++ b/ports/raspberrypi/supervisor/internal_flash.c @@ -99,11 +99,11 @@ void port_internal_flash_flush(void) { // Make sure we don't have an interrupt while we do flash operations. common_hal_mcu_disable_interrupts(); // and audio DMA must be paused as well - uint32_t cookie = audio_dma_pause_all(); + uint32_t channel_mask = audio_dma_pause_all(); flash_range_erase(CIRCUITPY_CIRCUITPY_DRIVE_START_ADDR + _cache_lba, SECTOR_SIZE); flash_range_program(CIRCUITPY_CIRCUITPY_DRIVE_START_ADDR + _cache_lba, _cache, SECTOR_SIZE); _cache_lba = NO_CACHE; - audio_dma_unpause_cookie(cookie); + audio_dma_unpause_mask(channel_mask); common_hal_mcu_enable_interrupts(); } From 3795de03b6284b5480a38cef692a86125ab47dfb Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 27 Jun 2023 10:05:14 -0500 Subject: [PATCH 061/241] update ulab to 6.3.2 --- extmod/ulab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extmod/ulab b/extmod/ulab index 6619c20b3b..319df10cfe 160000 --- a/extmod/ulab +++ b/extmod/ulab @@ -1 +1 @@ -Subproject commit 6619c20b3b75864554fcee5f88846fac27df5701 +Subproject commit 319df10cfe9cb8f6e5e24627bda3fe1556d8b06b From 9a3fadc072e632bc636faa627b51f3b0e2d3d4f4 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 27 Jun 2023 10:23:26 -0500 Subject: [PATCH 062/241] run pre-commit --- locale/circuitpython.pot | 45 ++++++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 282d229856..3d0b516562 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -182,6 +182,7 @@ msgid "%q must be 1 when %q is True" msgstr "" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "" @@ -1950,10 +1951,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." @@ -2797,6 +2794,10 @@ msgstr "" msgid "cannot create instance" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "" @@ -3254,6 +3255,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3582,6 +3591,10 @@ msgstr "" msgid "native yield" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3685,6 +3698,10 @@ msgstr "" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3795,8 +3812,8 @@ msgstr "" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3833,10 +3850,26 @@ msgstr "" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" From bfcb967edd97673244c2ef9ce5fd1447ab282d52 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 27 Jun 2023 10:41:02 -0500 Subject: [PATCH 063/241] Add expected-output file for this test .. because the first test is actually accepted on python 3.10 and newer. --- tests/basics/string_format_error.py.exp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 tests/basics/string_format_error.py.exp diff --git a/tests/basics/string_format_error.py.exp b/tests/basics/string_format_error.py.exp new file mode 100644 index 0000000000..d6d28b2111 --- /dev/null +++ b/tests/basics/string_format_error.py.exp @@ -0,0 +1,17 @@ +ValueError +IndexError +ValueError +ValueError +ValueError +ValueError +ValueError +ValueError +IndexError +KeyError +ValueError +IndexError +ValueError +ValueError +ValueError +ValueError +ValueError From a9c987d3ce07c8300ef4173c123589f49373b21e Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 27 Jun 2023 10:41:02 -0500 Subject: [PATCH 064/241] Add expected-output file for this test .. because the first test is actually accepted on python 3.10 and newer. --- tests/basics/string_format_error.py.exp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 tests/basics/string_format_error.py.exp diff --git a/tests/basics/string_format_error.py.exp b/tests/basics/string_format_error.py.exp new file mode 100644 index 0000000000..d6d28b2111 --- /dev/null +++ b/tests/basics/string_format_error.py.exp @@ -0,0 +1,17 @@ +ValueError +IndexError +ValueError +ValueError +ValueError +ValueError +ValueError +ValueError +IndexError +KeyError +ValueError +IndexError +ValueError +ValueError +ValueError +ValueError +ValueError From b5ad7f91a30e2a57ffdb6dcbf3f16a110023eae7 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 27 Jun 2023 11:11:23 -0500 Subject: [PATCH 065/241] update expected data for test skip all the byecode hex data, it's adequately checked by the disassembly just below This was tripped up because in exactly the right conditions some qstr could be of the form 'xx 63' and make the expression `\.\+63` match something other than what was intended. This test was re-worked upstream for mpy version 6 so it'll be a conflict to resolve when we get to that. :-/ --- tests/cmdline/cmd_parsetree.py.exp | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/cmdline/cmd_parsetree.py.exp b/tests/cmdline/cmd_parsetree.py.exp index bee4fc99d1..291cc7ecda 100644 --- a/tests/cmdline/cmd_parsetree.py.exp +++ b/tests/cmdline/cmd_parsetree.py.exp @@ -42,7 +42,6 @@ File cmdline/cmd_parsetree.py, code block '' (descriptor: \.\+, bytecode @\.\+ bytes) Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+): ######## -\.\+63 arg names: (N_STATE 5) (N_EXC_STACK 0) From 0f241c9415429d4eb8fd1b92eb20d55a9bf9d2ce Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 27 Jun 2023 10:41:02 -0500 Subject: [PATCH 066/241] bump ulab to fix rp2040 build error --- extmod/ulab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extmod/ulab b/extmod/ulab index 319df10cfe..3728d22732 160000 --- a/extmod/ulab +++ b/extmod/ulab @@ -1 +1 @@ -Subproject commit 319df10cfe9cb8f6e5e24627bda3fe1556d8b06b +Subproject commit 3728d22732dedc8a591b7df18a16d3ef1aed6a39 From d3aea0e15a85540db86b328c36b2c2294f22c731 Mon Sep 17 00:00:00 2001 From: Jim Mussared Date: Tue, 27 Jun 2023 17:14:24 +1000 Subject: [PATCH 067/241] shared-bindings/zlib: Fix docs for zlib.decompress. The docs say the method is called `zlib_decompress` but should be just `decompress`. Signed-off-by: Jim Mussared --- shared-bindings/zlib/__init__.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/shared-bindings/zlib/__init__.c b/shared-bindings/zlib/__init__.c index ba02914638..3b45e605e6 100644 --- a/shared-bindings/zlib/__init__.c +++ b/shared-bindings/zlib/__init__.c @@ -48,9 +48,7 @@ //| (commonly used in zlib library and gzip archiver). Compression is not yet implemented.""" //| -//| def zlib_decompress( -//| data: bytes, wbits: Optional[int] = 0, bufsize: Optional[int] = 0 -//| ) -> bytes: +//| def decompress(data: bytes, wbits: Optional[int] = 0, bufsize: Optional[int] = 0) -> bytes: //| """Return decompressed *data* as bytes. *wbits* is DEFLATE dictionary window //| size used during compression (8-15, the dictionary size is power of 2 of //| that value). Additionally, if value is positive, *data* is assumed to be From 77b3a0570ea7ca9058e2d5772484aea2953cba86 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Tue, 27 Jun 2023 19:11:25 -0400 Subject: [PATCH 068/241] add Adafruit Metro M7 1011 SD --- .../boards/adafruit_metro_m7_1011_sd/board.c | 64 ++++++++ .../adafruit_metro_m7_1011_sd/flash_config.c | 153 ++++++++++++++++++ .../adafruit_metro_m7_1011_sd/mpconfigboard.h | 20 +++ .../mpconfigboard.mk | 8 + .../boards/adafruit_metro_m7_1011_sd/pins.c | 60 +++++++ .../boards/metro_m7_1011/mpconfigboard.mk | 2 +- ports/mimxrt10xx/boards/metro_m7_1011/pins.c | 5 + 7 files changed, 311 insertions(+), 1 deletion(-) create mode 100644 ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/board.c create mode 100644 ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/flash_config.c create mode 100644 ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/mpconfigboard.h create mode 100644 ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/mpconfigboard.mk create mode 100644 ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/pins.c diff --git a/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/board.c b/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/board.c new file mode 100644 index 0000000000..62be2303a5 --- /dev/null +++ b/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/board.c @@ -0,0 +1,64 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2019 Scott Shawcroft for Adafruit Industries + * 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 + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" +#include "shared-bindings/microcontroller/Pin.h" + +// These pins should never ever be reset; doing so could interfere with basic operation. +// Used in common-hal/microcontroller/Pin.c +const mcu_pin_obj_t *mimxrt10xx_reset_forbidden_pins[] = { + // SWD Pins + &pin_GPIO_AD_13,// SWDIO + &pin_GPIO_AD_12,// SWCLK + + // FLEX flash + &pin_GPIO_SD_12, + &pin_GPIO_SD_11, + &pin_GPIO_SD_10, + &pin_GPIO_SD_09, + &pin_GPIO_SD_08, + &pin_GPIO_SD_07, + &pin_GPIO_SD_06, + NULL, // Must end in NULL. +}; + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. + +bool mimxrt10xx_board_reset_pin_number(const mcu_pin_obj_t *pin) { + #if CIRCUITPY_SWO_TRACE + if (pin == &pin_GPIO_AD_09) { + IOMUXC_SetPinMux( /* Add these lines*/ + IOMUXC_GPIO_AD_09_ARM_TRACE_SWO, + 0U); + IOMUXC_SetPinConfig( /* Add these lines*/ + IOMUXC_GPIO_AD_09_ARM_TRACE_SWO, + 0x00F9U); + return true; + } + #endif + return false; +} diff --git a/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/flash_config.c b/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/flash_config.c new file mode 100644 index 0000000000..3b47af1d6c --- /dev/null +++ b/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/flash_config.c @@ -0,0 +1,153 @@ +/* + * Copyright 2017 NXP + * All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "boards/flash_config.h" + +#include "xip/fsl_flexspi_nor_boot.h" + +// Config for W25Q32JV with QSPI routed. (compatible with GD25Q32) +__attribute__((section(".boot_hdr.conf"))) +const flexspi_nor_config_t qspiflash_config = { + .pageSize = 256u, + .sectorSize = 4u * 1024u, + .ipcmdSerialClkFreq = kFLEXSPISerialClk_133MHz, + .blockSize = 0x00010000, + .isUniformBlockSize = false, + .memConfig = + { + .tag = FLEXSPI_CFG_BLK_TAG, + .version = FLEXSPI_CFG_BLK_VERSION, + .readSampleClkSrc = kFLEXSPIReadSampleClk_LoopbackFromSckPad, + .csHoldTime = 3u, + .csSetupTime = 3u, + + .busyOffset = 0u, // Status bit 0 indicates busy. + .busyBitPolarity = 0u, // Busy when the bit is 1. + + .deviceModeCfgEnable = 1u, + .deviceModeType = kDeviceConfigCmdType_QuadEnable, + .deviceModeSeq = { + .seqId = 4u, + .seqNum = 1u, + }, + .deviceModeArg = 0x0200, + .configCmdEnable = 1u, + .configModeType[0] = kDeviceConfigCmdType_Generic, + .configCmdSeqs[0] = { + .seqId = 2u, + .seqNum = 1u, + }, + .deviceType = kFLEXSPIDeviceType_SerialNOR, + .sflashPadType = kSerialFlash_4Pads, + .serialClkFreq = kFLEXSPISerialClk_133MHz, + .sflashA1Size = FLASH_SIZE, + .lookupTable = + { + // FSL_ROM_FLEXSPI_LUT_SEQ(cmd0, pad0, op0, cmd1, pad1, op1) + // The high 16 bits is command 1 and the low are command 0. + // Within a command, the top 6 bits are the opcode, the next two are the number + // of pads and then last byte is the operand. The operand's meaning changes + // per opcode. + + // Indices with ROM should always have the same function because the ROM + // bootloader uses it. + + // 0: ROM: Read LUTs + // Quad version + SEQUENCE(FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xEB /* the command to send */, + RADDR_SDR, FLEXSPI_4PAD, 24 /* bits to transmit */), + FSL_ROM_FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 6 /* 6 dummy cycles, 2 for M7-0 and 4 dummy */, + READ_SDR, FLEXSPI_4PAD, 0x04), + // Single fast read version, good for debugging. + // FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x0B /* the command to send */, + // RADDR_SDR, FLEXSPI_1PAD, 24 /* bits to transmit */), + // FSL_ROM_FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_1PAD, 8 /* 8 dummy clocks */, + // READ_SDR, FLEXSPI_1PAD, 0x04), + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS), + + // 1: ROM: Read status + SEQUENCE(FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05 /* the command to send */, + READ_SDR, FLEXSPI_1PAD, 0x02), + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS), + + // 2: Empty + SEQUENCE(FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x35 /* the command to send */, + DUMMY_SDR, FLEXSPI_1PAD, 8), + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS), + + // 3: ROM: Write Enable + SEQUENCE(FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06 /* the command to send */, + STOP, FLEXSPI_1PAD, 0x00), + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS), + + // 4: Config: Write Status + SEQUENCE(FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x01 /* the command to send */, + WRITE_SDR, FLEXSPI_1PAD, 0x02), + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS), + + // 5: ROM: Erase Sector + SEQUENCE(FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20 /* the command to send */, + RADDR_SDR, FLEXSPI_1PAD, 24 /* bits to transmit */), + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS), + + // 6: Empty + EMPTY_SEQUENCE, + + // 7: Empty + EMPTY_SEQUENCE, + + // 8: Block Erase + SEQUENCE(FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xD8 /* the command to send */, + RADDR_SDR, FLEXSPI_1PAD, 24 /* bits to transmit */), + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS), + + // 9: ROM: Page program + SEQUENCE(FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x02 /* the command to send */, + RADDR_SDR, FLEXSPI_1PAD, 24 /* bits to transmit */), + + FSL_ROM_FLEXSPI_LUT_SEQ(WRITE_SDR, FLEXSPI_1PAD, 0x04 /* data out */, + STOP, FLEXSPI_1PAD, 0), + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS), + + // 10: Empty + EMPTY_SEQUENCE, + + // 11: ROM: Chip erase + SEQUENCE(FSL_ROM_FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x60 /* the command to send */, + STOP, FLEXSPI_1PAD, 0), + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS, + TWO_EMPTY_STEPS), + + // 12: Empty + EMPTY_SEQUENCE, + + // 13: ROM: Read SFDP + EMPTY_SEQUENCE, + + // 14: ROM: Restore no cmd + EMPTY_SEQUENCE, + + // 15: ROM: Dummy + EMPTY_SEQUENCE + }, + }, +}; diff --git a/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/mpconfigboard.h b/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/mpconfigboard.h new file mode 100644 index 0000000000..589b2a2b65 --- /dev/null +++ b/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/mpconfigboard.h @@ -0,0 +1,20 @@ +#define MICROPY_HW_BOARD_NAME "Metro MIMXRT1011" +#define MICROPY_HW_MCU_NAME "IMXRT1011DAE5A" + +#define MICROPY_HW_NEOPIXEL (&pin_GPIO_00) + +// If you change this, then make sure to update the linker scripts as well to +// make sure you don't overwrite code +#define CIRCUITPY_INTERNAL_NVM_SIZE 0 + +#define BOARD_FLASH_SIZE (8 * 1024 * 1024) + +#define DEFAULT_I2C_BUS_SCL (&pin_GPIO_02) +#define DEFAULT_I2C_BUS_SDA (&pin_GPIO_01) + +#define DEFAULT_SPI_BUS_SCK (&pin_GPIO_AD_06) +#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO_AD_04) +#define DEFAULT_SPI_BUS_MISO (&pin_GPIO_AD_03) + +#define DEFAULT_UART_BUS_RX (&pin_GPIO_09) +#define DEFAULT_UART_BUS_TX (&pin_GPIO_10) diff --git a/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/mpconfigboard.mk b/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/mpconfigboard.mk new file mode 100644 index 0000000000..ec4c04c78e --- /dev/null +++ b/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/mpconfigboard.mk @@ -0,0 +1,8 @@ +USB_VID = 0x239A +USB_PID = 0x8142 +USB_PRODUCT = "Metro M7 iMX RT1011 SD" +USB_MANUFACTURER = "Adafruit" + +CHIP_VARIANT = MIMXRT1011DAE5A +CHIP_FAMILY = MIMXRT1011 +FLASH = W25Q64JV diff --git a/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/pins.c b/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/pins.c new file mode 100644 index 0000000000..8096973aaf --- /dev/null +++ b/ports/mimxrt10xx/boards/adafruit_metro_m7_1011_sd/pins.c @@ -0,0 +1,60 @@ +#include "shared-bindings/board/__init__.h" + +#include "supervisor/board.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + // Analog + { MP_OBJ_NEW_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO_AD_02) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO_AD_01) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO_AD_00) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO_AD_05) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_GPIO_AD_10) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_GPIO_AD_08) }, + + // Digital + { MP_OBJ_NEW_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO_09) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO_09) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO_10) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO_10) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO_13) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO_12) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO_SD_00) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO_SD_01) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO_SD_02) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO_11) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO_08) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO_07) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_GPIO_06) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_GPIO_05) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO_04) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_LED),MP_ROM_PTR(&pin_GPIO_03) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D13),MP_ROM_PTR(&pin_GPIO_03) }, + + // SD control + { MP_OBJ_NEW_QSTR(MP_QSTR_SD_CD), MP_ROM_PTR(&pin_GPIO_AD_11) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO_AD_14) }, + + // SPI + { MP_OBJ_NEW_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO_AD_06) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO_AD_03) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO_AD_04) }, + + // I2C + { MP_OBJ_NEW_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO_01) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO_02) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO_00) }, + + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_STEMMA_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_I2S_WORD_SELECT), MP_ROM_PTR(&pin_GPIO_06) }, // D10 + { MP_ROM_QSTR(MP_QSTR_I2S_BIT_CLOCK), MP_ROM_PTR(&pin_GPIO_07) }, // D9 + { MP_ROM_QSTR(MP_QSTR_I2S_DATA), MP_ROM_PTR(&pin_GPIO_04) }, // D12 +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/mimxrt10xx/boards/metro_m7_1011/mpconfigboard.mk b/ports/mimxrt10xx/boards/metro_m7_1011/mpconfigboard.mk index 56155aa4d0..ec7c6c2f1c 100644 --- a/ports/mimxrt10xx/boards/metro_m7_1011/mpconfigboard.mk +++ b/ports/mimxrt10xx/boards/metro_m7_1011/mpconfigboard.mk @@ -1,6 +1,6 @@ USB_VID = 0x239A USB_PID = 0x80E2 -USB_PRODUCT = "Metro M7 iMX RT1011" +USB_PRODUCT = "Metro M7 iMX RT1011 AirLift" USB_MANUFACTURER = "Adafruit" CHIP_VARIANT = MIMXRT1011DAE5A diff --git a/ports/mimxrt10xx/boards/metro_m7_1011/pins.c b/ports/mimxrt10xx/boards/metro_m7_1011/pins.c index 98082e3c11..fe03d09764 100644 --- a/ports/mimxrt10xx/boards/metro_m7_1011/pins.c +++ b/ports/mimxrt10xx/boards/metro_m7_1011/pins.c @@ -58,8 +58,13 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { 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_I2S_WORD_SELECT), MP_ROM_PTR(&pin_GPIO_06) }, // D10 { MP_ROM_QSTR(MP_QSTR_I2S_WSEL), MP_ROM_PTR(&pin_GPIO_06) }, // D10 + + { MP_ROM_QSTR(MP_QSTR_I2S_BIT_CLOCK), MP_ROM_PTR(&pin_GPIO_07) }, // D9 { MP_ROM_QSTR(MP_QSTR_I2S_BCLK), MP_ROM_PTR(&pin_GPIO_07) }, // D9 + + { MP_ROM_QSTR(MP_QSTR_I2S_DATA), MP_ROM_PTR(&pin_GPIO_04) }, // D12 { MP_ROM_QSTR(MP_QSTR_I2S_DOUT), MP_ROM_PTR(&pin_GPIO_04) }, // D12 }; MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From f1d9ee0de3255a3a1605077477812e7c390cab4b Mon Sep 17 00:00:00 2001 From: Neradoc Date: Wed, 28 Jun 2023 15:11:23 +0200 Subject: [PATCH 069/241] Fix PSRAM on espressif ESP32S3 box and box lite --- ports/espressif/boards/espressif_esp32s3_box/sdkconfig | 1 + ports/espressif/boards/espressif_esp32s3_box_lite/sdkconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/ports/espressif/boards/espressif_esp32s3_box/sdkconfig b/ports/espressif/boards/espressif_esp32s3_box/sdkconfig index ead0088da5..6884299abe 100644 --- a/ports/espressif/boards/espressif_esp32s3_box/sdkconfig +++ b/ports/espressif/boards/espressif_esp32s3_box/sdkconfig @@ -1,3 +1,4 @@ +CONFIG_ESP32S3_SPIRAM_SUPPORT=y CONFIG_SPIRAM=y CONFIG_SPIRAM_MODE_OCT=y CONFIG_SPIRAM_SPEED_80M=y diff --git a/ports/espressif/boards/espressif_esp32s3_box_lite/sdkconfig b/ports/espressif/boards/espressif_esp32s3_box_lite/sdkconfig index ead0088da5..6884299abe 100644 --- a/ports/espressif/boards/espressif_esp32s3_box_lite/sdkconfig +++ b/ports/espressif/boards/espressif_esp32s3_box_lite/sdkconfig @@ -1,3 +1,4 @@ +CONFIG_ESP32S3_SPIRAM_SUPPORT=y CONFIG_SPIRAM=y CONFIG_SPIRAM_MODE_OCT=y CONFIG_SPIRAM_SPEED_80M=y From 2a8d6d655c97dde6e40b326955bffefe916236de Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Wed, 28 Jun 2023 22:56:08 -0400 Subject: [PATCH 070/241] adafruit_qtpy_esp32s3_4mbflash_2mbpsram --- .../board.c | 39 ++++++++++++ .../mpconfigboard.h | 45 ++++++++++++++ .../mpconfigboard.mk | 13 ++++ .../pins.c | 62 +++++++++++++++++++ .../sdkconfig | 47 ++++++++++++++ .../mpconfigboard.mk | 3 - 6 files changed, 206 insertions(+), 3 deletions(-) create mode 100644 ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/board.c create mode 100644 ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/mpconfigboard.h create mode 100644 ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/mpconfigboard.mk create mode 100644 ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/pins.c create mode 100644 ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/sdkconfig diff --git a/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/board.c b/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/board.c new file mode 100644 index 0000000000..3b1f5efd87 --- /dev/null +++ b/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/board.c @@ -0,0 +1,39 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" +#include "mpconfigboard.h" +#include "shared-bindings/microcontroller/Pin.h" + +void board_init(void) { + // Debug UART + #ifdef DEBUG + common_hal_never_reset_pin(&pin_GPIO43); + common_hal_never_reset_pin(&pin_GPIO44); + #endif +} + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/mpconfigboard.h b/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/mpconfigboard.h new file mode 100644 index 0000000000..36319ce107 --- /dev/null +++ b/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/mpconfigboard.h @@ -0,0 +1,45 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2019 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Micropython setup + +#define MICROPY_HW_BOARD_NAME "Adafruit QT Py ESP32-S3 4MB Flash 2MB PSRAM" +#define MICROPY_HW_MCU_NAME "ESP32S3" + +#define MICROPY_HW_NEOPIXEL (&pin_GPIO39) +#define CIRCUITPY_STATUS_LED_POWER (&pin_GPIO38) + +#define CIRCUITPY_BOARD_I2C (2) +#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO6, .sda = &pin_GPIO7}, \ + {.scl = &pin_GPIO40, .sda = &pin_GPIO41}} + +#define CIRCUITPY_BOARD_SPI (1) +#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO36, .mosi = &pin_GPIO35, .miso = &pin_GPIO37}} + +#define CIRCUITPY_BOARD_UART (1) +#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO5, .rx = &pin_GPIO16}} + +#define DOUBLE_TAP_PIN (&pin_GPIO10) diff --git a/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/mpconfigboard.mk b/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/mpconfigboard.mk new file mode 100644 index 0000000000..50b1394a25 --- /dev/null +++ b/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/mpconfigboard.mk @@ -0,0 +1,13 @@ +USB_VID = 0x239A +USB_PID = 0x8144 + +USB_PRODUCT = "QT Py ESP32S3 4MB Flash 2MB PSRAM" +USB_MANUFACTURER = "Adafruit" + +IDF_TARGET = esp32s3 + +CIRCUITPY_ESP_FLASH_MODE = dio +CIRCUITPY_ESP_FLASH_FREQ = 80m +CIRCUITPY_ESP_FLASH_SIZE = 8MB + +CIRCUITPY_ESPCAMERA = 0 diff --git a/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/pins.c b/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/pins.c new file mode 100644 index 0000000000..5d0a3c0baa --- /dev/null +++ b/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/pins.c @@ -0,0 +1,62 @@ +#include "shared-bindings/board/__init__.h" + +CIRCUITPY_BOARD_BUS_SINGLETON(stemma_i2c, i2c, 1) + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) }, + + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO18) }, + { MP_ROM_QSTR(MP_QSTR_D18), MP_ROM_PTR(&pin_GPIO18) }, + + { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO17) }, + { MP_ROM_QSTR(MP_QSTR_D17), MP_ROM_PTR(&pin_GPIO17) }, + + { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) }, + + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO8) }, + + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO7) }, + + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO6) }, + + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) }, + + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO16) }, + { MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_GPIO16) }, + { MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_GPIO16) }, + + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO35) }, + { MP_ROM_QSTR(MP_QSTR_D35), MP_ROM_PTR(&pin_GPIO35) }, + + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO36) }, + { MP_ROM_QSTR(MP_QSTR_D36), MP_ROM_PTR(&pin_GPIO36) }, + + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO37) }, + { MP_ROM_QSTR(MP_QSTR_D37), MP_ROM_PTR(&pin_GPIO37) }, + + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL_POWER), MP_ROM_PTR(&pin_GPIO38) }, + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO39) }, + + { MP_ROM_QSTR(MP_QSTR_SCL1), MP_ROM_PTR(&pin_GPIO40) }, + { MP_ROM_QSTR(MP_QSTR_D40), MP_ROM_PTR(&pin_GPIO40) }, + + { MP_ROM_QSTR(MP_QSTR_SDA1), MP_ROM_PTR(&pin_GPIO41) }, + { MP_ROM_QSTR(MP_QSTR_D41), MP_ROM_PTR(&pin_GPIO41) }, + + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_stemma_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/sdkconfig b/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/sdkconfig new file mode 100644 index 0000000000..9a05ab0205 --- /dev/null +++ b/ports/espressif/boards/adafruit_qtpy_esp32s3_4mbflash_2mbpsram/sdkconfig @@ -0,0 +1,47 @@ +# +# Component config +# +# +# ESP32S3-Specific +# +CONFIG_ESP32S3_SPIRAM_SUPPORT=y +# +# SPI RAM config +# +CONFIG_SPIRAM_MODE_QUAD=y +# CONFIG_SPIRAM_MODE_OCT is not set +CONFIG_SPIRAM_TYPE_AUTO=y +# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set +CONFIG_SPIRAM_SIZE=2097152 +# +# PSRAM Clock and CS IO for ESP32S3 +# +CONFIG_DEFAULT_PSRAM_CLK_IO=30 +CONFIG_DEFAULT_PSRAM_CS_IO=26 +# end of PSRAM Clock and CS IO for ESP32S3 + +# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set +# CONFIG_SPIRAM_RODATA is not set +# CONFIG_SPIRAM_SPEED_120M is not set +CONFIG_SPIRAM_SPEED_80M=y +# CONFIG_SPIRAM_SPEED_40M is not set +CONFIG_SPIRAM=y +CONFIG_SPIRAM_BOOT_INIT=y +# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set +CONFIG_SPIRAM_USE_MEMMAP=y +# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set +# CONFIG_SPIRAM_USE_MALLOC is not set +CONFIG_SPIRAM_MEMTEST=y +# end of SPI RAM config + +# end of ESP32S3-Specific + +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="espressif-esp32s3" +# end of LWIP + +# end of Component config diff --git a/ports/espressif/boards/adafruit_qtpy_esp32s3_nopsram/mpconfigboard.mk b/ports/espressif/boards/adafruit_qtpy_esp32s3_nopsram/mpconfigboard.mk index e695bae635..ac1e32a40d 100644 --- a/ports/espressif/boards/adafruit_qtpy_esp32s3_nopsram/mpconfigboard.mk +++ b/ports/espressif/boards/adafruit_qtpy_esp32s3_nopsram/mpconfigboard.mk @@ -10,7 +10,4 @@ CIRCUITPY_ESP_FLASH_MODE = dio CIRCUITPY_ESP_FLASH_FREQ = 80m CIRCUITPY_ESP_FLASH_SIZE = 8MB -FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Requests -FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel -FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Register CIRCUITPY_ESPCAMERA = 0 From 1787e7638983550843d0a7a732d92440aaf5444d Mon Sep 17 00:00:00 2001 From: Miroslav Zuzelka Date: Fri, 30 Jun 2023 11:01:00 +0200 Subject: [PATCH 071/241] Add ES3ink board definition --- ports/espressif/boards/es3ink/board.c | 39 ++++++++++++ ports/espressif/boards/es3ink/mpconfigboard.h | 38 ++++++++++++ .../espressif/boards/es3ink/mpconfigboard.mk | 10 ++++ ports/espressif/boards/es3ink/pins.c | 59 +++++++++++++++++++ ports/espressif/boards/es3ink/sdkconfig | 16 +++++ 5 files changed, 162 insertions(+) create mode 100644 ports/espressif/boards/es3ink/board.c create mode 100644 ports/espressif/boards/es3ink/mpconfigboard.h create mode 100644 ports/espressif/boards/es3ink/mpconfigboard.mk create mode 100644 ports/espressif/boards/es3ink/pins.c create mode 100644 ports/espressif/boards/es3ink/sdkconfig diff --git a/ports/espressif/boards/es3ink/board.c b/ports/espressif/boards/es3ink/board.c new file mode 100644 index 0000000000..b3c8cb4191 --- /dev/null +++ b/ports/espressif/boards/es3ink/board.c @@ -0,0 +1,39 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" +#include "mpconfigboard.h" +#include "shared-bindings/microcontroller/Pin.h" + +void board_init(void) { + // Debug UART + #ifdef DEBUG + common_hal_never_reset_pin(&pin_GPIO43); + common_hal_never_reset_pin(&pin_GPIO44); + #endif /* DEBUG */ +} + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/espressif/boards/es3ink/mpconfigboard.h b/ports/espressif/boards/es3ink/mpconfigboard.h new file mode 100644 index 0000000000..0be6f5abe7 --- /dev/null +++ b/ports/espressif/boards/es3ink/mpconfigboard.h @@ -0,0 +1,38 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2019 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Micropython setup + +#define MICROPY_HW_BOARD_NAME "ES3ink" +#define MICROPY_HW_MCU_NAME "ESP32S3" + +#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO0) + +#define DEFAULT_UART_BUS_RX (&pin_GPIO44) +#define DEFAULT_UART_BUS_TX (&pin_GPIO43) + +#define DEFAULT_I2C_BUS_SCL (&pin_GPIO3) +#define DEFAULT_I2C_BUS_SDA (&pin_GPIO4) diff --git a/ports/espressif/boards/es3ink/mpconfigboard.mk b/ports/espressif/boards/es3ink/mpconfigboard.mk new file mode 100644 index 0000000000..48ea9f122e --- /dev/null +++ b/ports/espressif/boards/es3ink/mpconfigboard.mk @@ -0,0 +1,10 @@ +USB_VID = 0x239A +USB_PID = 0x2031 +USB_PRODUCT = "ES3ink" +USB_MANUFACTURER = "Czech maker" + +IDF_TARGET = esp32s3 + +CIRCUITPY_ESP_FLASH_MODE=dio +CIRCUITPY_ESP_FLASH_FREQ=80m +CIRCUITPY_ESP_FLASH_SIZE=16MB diff --git a/ports/espressif/boards/es3ink/pins.c b/ports/espressif/boards/es3ink/pins.c new file mode 100644 index 0000000000..e9ddf81a7a --- /dev/null +++ b/ports/espressif/boards/es3ink/pins.c @@ -0,0 +1,59 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + { MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) }, + + { MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) }, + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO3) }, + + { MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) }, + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO4) }, + + { MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) }, + { MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) }, + { MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) }, + { MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) }, + { MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) }, + { MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) }, + { MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) }, + + { MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) }, + + { MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) }, + { MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) }, + { MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) }, + { MP_ROM_QSTR(MP_QSTR_IO26), MP_ROM_PTR(&pin_GPIO26) }, + { MP_ROM_QSTR(MP_QSTR_IO33), MP_ROM_PTR(&pin_GPIO33) }, + { MP_ROM_QSTR(MP_QSTR_IO34), MP_ROM_PTR(&pin_GPIO34) }, + { MP_ROM_QSTR(MP_QSTR_IO35), MP_ROM_PTR(&pin_GPIO35) }, + { MP_ROM_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) }, + { MP_ROM_QSTR(MP_QSTR_IO37), MP_ROM_PTR(&pin_GPIO37) }, + { MP_ROM_QSTR(MP_QSTR_IO38), MP_ROM_PTR(&pin_GPIO38) }, + { MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) }, + { MP_ROM_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) }, + { MP_ROM_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) }, + { MP_ROM_QSTR(MP_QSTR_IO42), MP_ROM_PTR(&pin_GPIO42) }, + + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) }, + { MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) }, + + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) }, + { MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44) }, + + { MP_ROM_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) }, + { MP_ROM_QSTR(MP_QSTR_IO46), MP_ROM_PTR(&pin_GPIO46) }, + + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/espressif/boards/es3ink/sdkconfig b/ports/espressif/boards/es3ink/sdkconfig new file mode 100644 index 0000000000..89d29d8ea9 --- /dev/null +++ b/ports/espressif/boards/es3ink/sdkconfig @@ -0,0 +1,16 @@ +CONFIG_ESP32S3_SPIRAM_SUPPORT=y + +CONFIG_SPIRAM_TYPE_ESPPSRAM64=y +CONFIG_SPIRAM_SIZE=8388608 +CONFIG_SPIRAM_MODE_OCT=y +CONFIG_SPIRAM_SPEED_80M=y + +CONFIG_DEFAULT_PSRAM_CLK_IO=30 +CONFIG_DEFAULT_PSRAM_CS_IO=26 + +CONFIG_SPIRAM=y +CONFIG_SPIRAM_BOOT_INIT=y +CONFIG_SPIRAM_USE_MEMMAP=y +CONFIG_SPIRAM_MEMTEST=y + +CONFIG_LWIP_LOCAL_HOSTNAME="es3ink" From abf15125fff9029404d82eb9066db77212dabed2 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sat, 1 Jul 2023 11:50:24 -0500 Subject: [PATCH 072/241] adding skip_self_index argument to bitmap.blit() --- shared-bindings/displayio/Bitmap.c | 24 ++++++++++++++++++++---- shared-bindings/displayio/Bitmap.h | 2 +- shared-module/displayio/Bitmap.c | 16 +++++++++++++--- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/shared-bindings/displayio/Bitmap.c b/shared-bindings/displayio/Bitmap.c index 5b939c5892..9ff8050eab 100644 --- a/shared-bindings/displayio/Bitmap.c +++ b/shared-bindings/displayio/Bitmap.c @@ -196,7 +196,8 @@ STATIC mp_obj_t bitmap_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t val //| y1: int, //| x2: int, //| y2: int, -//| skip_index: int +//| skip_index: int, +//| skip_self_index: int //| ) -> None: //| """Inserts the source_bitmap region defined by rectangular boundaries //| (x1,y1) and (x2,y2) into the bitmap at the specified (x,y) location. @@ -211,10 +212,12 @@ STATIC mp_obj_t bitmap_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t val //| :param int x2: Maximum x-value (exclusive) for rectangular bounding box to be copied from the source bitmap //| :param int y2: Maximum y-value (exclusive) for rectangular bounding box to be copied from the source bitmap //| :param int skip_index: bitmap palette index in the source that will not be copied, -//| set to None to copy all pixels""" +//| set to None to copy all pixels +//| :param int skip_self_index: bitmap palette index in the self bitmap that will not get overwritten +//| by the pixels from the source""" //| ... STATIC mp_obj_t displayio_bitmap_obj_blit(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { - enum {ARG_x, ARG_y, ARG_source, ARG_x1, ARG_y1, ARG_x2, ARG_y2, ARG_skip_index}; + enum {ARG_x, ARG_y, ARG_source, ARG_x1, ARG_y1, ARG_x2, ARG_y2, ARG_skip_index, ARG_skip_self_index}; static const mp_arg_t allowed_args[] = { {MP_QSTR_x, MP_ARG_REQUIRED | MP_ARG_INT, {.u_obj = MP_OBJ_NULL} }, {MP_QSTR_y, MP_ARG_REQUIRED | MP_ARG_INT, {.u_obj = MP_OBJ_NULL} }, @@ -224,6 +227,7 @@ STATIC mp_obj_t displayio_bitmap_obj_blit(size_t n_args, const mp_obj_t *pos_arg {MP_QSTR_x2, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, // None convert to source->width {MP_QSTR_y2, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, // None convert to source->height {MP_QSTR_skip_index, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none} }, + {MP_QSTR_skip_self_index, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none} }, }; mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); @@ -283,7 +287,19 @@ STATIC mp_obj_t displayio_bitmap_obj_blit(size_t n_args, const mp_obj_t *pos_arg skip_index_none = false; } - common_hal_displayio_bitmap_blit(self, x, y, source, x1, y1, x2, y2, skip_index, skip_index_none); + uint32_t skip_self_index; + bool skip_self_index_none; // flag whether skip_self_value was None + + if (args[ARG_skip_self_index].u_obj == mp_const_none) { + skip_self_index = 0; + skip_self_index_none = true; + } else { + skip_self_index = mp_obj_get_int(args[ARG_skip_self_index].u_obj); + skip_self_index_none = false; + } + + common_hal_displayio_bitmap_blit(self, x, y, source, x1, y1, x2, y2, skip_index, skip_index_none, skip_self_index, + skip_self_index_none); return mp_const_none; } diff --git a/shared-bindings/displayio/Bitmap.h b/shared-bindings/displayio/Bitmap.h index b35f4eadbc..8f52cb8f62 100644 --- a/shared-bindings/displayio/Bitmap.h +++ b/shared-bindings/displayio/Bitmap.h @@ -44,7 +44,7 @@ uint32_t common_hal_displayio_bitmap_get_bits_per_value(displayio_bitmap_t *self void common_hal_displayio_bitmap_set_pixel(displayio_bitmap_t *bitmap, int16_t x, int16_t y, uint32_t value); void common_hal_displayio_bitmap_blit(displayio_bitmap_t *self, int16_t x, int16_t y, displayio_bitmap_t *source, int16_t x1, int16_t y1, int16_t x2, int16_t y2, - uint32_t skip_index, bool skip_index_none); + uint32_t skip_index, bool skip_index_none, uint32_t skip_self_index, bool skip_self_index_none); uint32_t common_hal_displayio_bitmap_get_pixel(displayio_bitmap_t *bitmap, int16_t x, int16_t y); void common_hal_displayio_bitmap_fill(displayio_bitmap_t *bitmap, uint32_t value); int common_hal_displayio_bitmap_get_buffer(displayio_bitmap_t *self, mp_buffer_info_t *bufinfo, mp_uint_t flags); diff --git a/shared-module/displayio/Bitmap.c b/shared-module/displayio/Bitmap.c index c9212f6a85..f8b8170395 100644 --- a/shared-module/displayio/Bitmap.c +++ b/shared-module/displayio/Bitmap.c @@ -175,7 +175,8 @@ void displayio_bitmap_write_pixel(displayio_bitmap_t *self, int16_t x, int16_t y } void common_hal_displayio_bitmap_blit(displayio_bitmap_t *self, int16_t x, int16_t y, displayio_bitmap_t *source, - int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint32_t skip_index, bool skip_index_none) { + int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint32_t skip_index, bool skip_index_none, uint32_t skip_self_index, + bool skip_self_index_none) { if (self->read_only) { mp_raise_RuntimeError(translate("Read-only")); } @@ -222,8 +223,17 @@ void common_hal_displayio_bitmap_blit(displayio_bitmap_t *self, int16_t x, int16 if ((yd_index >= 0) && (yd_index < self->height)) { uint32_t value = common_hal_displayio_bitmap_get_pixel(source, xs_index, ys_index); - if ((skip_index_none) || (value != skip_index)) { // write if skip_value_none is True - displayio_bitmap_write_pixel(self, xd_index, yd_index, value); + if (skip_self_index_none) { // if skip_self_index is none, then only check source skip + if ((skip_index_none) || (value != skip_index)) { // write if skip_value_none is True + displayio_bitmap_write_pixel(self, xd_index, yd_index, value); + } + } else { // check dest_value index against skip_self_index and skip if they match + uint32_t dest_value = common_hal_displayio_bitmap_get_pixel(self, xd_index, yd_index); + if (dest_value != skip_self_index) { + if ((skip_index_none) || (value != skip_index)) { // write if skip_value_none is True + displayio_bitmap_write_pixel(self, xd_index, yd_index, value); + } + } } } } From 96d3e662b3c77804ddcd2193085aed0ec4cb9465 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sun, 2 Jul 2023 14:35:40 -0500 Subject: [PATCH 073/241] refactor bitmap.blit into bitmaptools --- shared-bindings/bitmaptools/__init__.c | 127 +++++++++++++++++++++++++ shared-bindings/bitmaptools/__init__.h | 4 + shared-bindings/displayio/Bitmap.c | 120 ----------------------- shared-bindings/displayio/Bitmap.h | 3 - shared-module/bitmaptools/__init__.c | 67 +++++++++++++ shared-module/displayio/Bitmap.c | 67 ------------- 6 files changed, 198 insertions(+), 190 deletions(-) diff --git a/shared-bindings/bitmaptools/__init__.c b/shared-bindings/bitmaptools/__init__.c index d0aea33ef9..6d0680626d 100644 --- a/shared-bindings/bitmaptools/__init__.c +++ b/shared-bindings/bitmaptools/__init__.c @@ -949,6 +949,132 @@ STATIC mp_obj_t bitmaptools_obj_draw_circle(size_t n_args, const mp_obj_t *pos_a MP_DEFINE_CONST_FUN_OBJ_KW(bitmaptools_draw_circle_obj, 0, bitmaptools_obj_draw_circle); +//| def blit( +//| dest_bitmap: Bitmap, +//| source_bitmap: Bitmap, +//| x: int, +//| y: int, +//| *, +//| x1: int, +//| y1: int, +//| x2: int, +//| y2: int, +//| skip_index: int, +//| skip_dest_index: int +//| ) -> None: +//| """Inserts the source_bitmap region defined by rectangular boundaries +//| (x1,y1) and (x2,y2) into the bitmap at the specified (x,y) location. +//| +//| :param bitmap dest_bitmap: Destination bitmap that the area will be copied into. +//| :param bitmap source_bitmap: Source bitmap that contains the graphical region to be copied +//| :param int x: Horizontal pixel location in bitmap where source_bitmap upper-left +//| corner will be placed +//| :param int y: Vertical pixel location in bitmap where source_bitmap upper-left +//| corner will be placed +//| :param int x1: Minimum x-value for rectangular bounding box to be copied from the source bitmap +//| :param int y1: Minimum y-value for rectangular bounding box to be copied from the source bitmap +//| :param int x2: Maximum x-value (exclusive) for rectangular bounding box to be copied from the source bitmap +//| :param int y2: Maximum y-value (exclusive) for rectangular bounding box to be copied from the source bitmap +//| :param int skip_index: bitmap palette index in the source that will not be copied, +//| set to None to copy all pixels +//| :param int skip_dest_index: bitmap palette index in the destination bitmap that will not get overwritten +//| by the pixels from the source""" +//| ... +//| +STATIC mp_obj_t bitmaptools_obj_blit(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + enum {ARG_destination, ARG_source, ARG_x, ARG_y, ARG_x1, ARG_y1, ARG_x2, ARG_y2, ARG_skip_index, ARG_skip_dest_index}; + static const mp_arg_t allowed_args[] = { + {MP_QSTR_dest_bitmap, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, + {MP_QSTR_source_bitmap, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, + {MP_QSTR_x, MP_ARG_REQUIRED | MP_ARG_INT, {.u_obj = MP_OBJ_NULL} }, + {MP_QSTR_y, MP_ARG_REQUIRED | MP_ARG_INT, {.u_obj = MP_OBJ_NULL} }, + {MP_QSTR_x1, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} }, + {MP_QSTR_y1, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} }, + {MP_QSTR_x2, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, // None convert to source->width + {MP_QSTR_y2, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, // None convert to source->height + {MP_QSTR_skip_index, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, + {MP_QSTR_skip_dest_index, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, + }; + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + // mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + // displayio_bitmap_t *self = MP_OBJ_TO_PTR(pos_args[0]); + displayio_bitmap_t *destination = mp_arg_validate_type(args[ARG_destination].u_obj, &displayio_bitmap_type, MP_QSTR_dest_bitmap); + // check_for_deinit(destination); + + // Check x,y are within self (target) bitmap boundary + int16_t x = mp_arg_validate_int_range(args[ARG_x].u_int, 0, MAX(0, destination->width - 1), MP_QSTR_x); + int16_t y = mp_arg_validate_int_range(args[ARG_y].u_int, 0, MAX(0, destination->height - 1), MP_QSTR_y); + + + displayio_bitmap_t *source = mp_arg_validate_type(args[ARG_source].u_obj, &displayio_bitmap_type, MP_QSTR_source_bitmap); + + + // ensure that the target bitmap (self) has at least as many `bits_per_value` as the source + if (destination->bits_per_value < source->bits_per_value) { + mp_raise_ValueError(translate("source palette too large")); + } + + // Check x1,y1,x2,y2 are within source bitmap boundary + int16_t x1 = mp_arg_validate_int_range(args[ARG_x1].u_int, 0, MAX(0, source->width - 1), MP_QSTR_x1); + int16_t y1 = mp_arg_validate_int_range(args[ARG_y1].u_int, 0, MAX(0, source->height - 1), MP_QSTR_y1); + int16_t x2, y2; + // if x2 or y2 is None, then set as the maximum size of the source bitmap + if (args[ARG_x2].u_obj == mp_const_none) { + x2 = source->width; + } else { + x2 = mp_arg_validate_int_range(mp_obj_get_int(args[ARG_x2].u_obj), 0, source->width, MP_QSTR_x2); + } + // int16_t y2; + if (args[ARG_y2].u_obj == mp_const_none) { + y2 = source->height; + } else { + y2 = mp_arg_validate_int_range(mp_obj_get_int(args[ARG_y2].u_obj), 0, source->height, MP_QSTR_y2); + } + + // Ensure x1 < x2 and y1 < y2 + if (x1 > x2) { + int16_t temp = x2; + x2 = x1; + x1 = temp; + } + if (y1 > y2) { + int16_t temp = y2; + y2 = y1; + y1 = temp; + } + + uint32_t skip_index; + bool skip_index_none; // flag whether skip_value was None + + if (args[ARG_skip_index].u_obj == mp_const_none) { + skip_index = 0; + skip_index_none = true; + } else { + skip_index = mp_obj_get_int(args[ARG_skip_index].u_obj); + skip_index_none = false; + } + + uint32_t skip_dest_index; + bool skip_dest_index_none; // flag whether skip_self_value was None + + if (args[ARG_skip_dest_index].u_obj == mp_const_none) { + skip_dest_index = 0; + skip_dest_index_none = true; + } else { + skip_dest_index = mp_obj_get_int(args[ARG_skip_dest_index].u_obj); + skip_dest_index_none = false; + } + + common_hal_bitmaptools_blit(destination, source, x, y, x1, y1, x2, y2, skip_index, skip_index_none, skip_dest_index, + skip_dest_index_none); + + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_KW(bitmaptools_blit_obj, 1, bitmaptools_obj_blit); + + STATIC const mp_rom_map_elem_t bitmaptools_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_bitmaptools) }, { MP_ROM_QSTR(MP_QSTR_readinto), MP_ROM_PTR(&bitmaptools_readinto_obj) }, @@ -960,6 +1086,7 @@ STATIC const mp_rom_map_elem_t bitmaptools_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_draw_line), MP_ROM_PTR(&bitmaptools_draw_line_obj) }, { MP_ROM_QSTR(MP_QSTR_draw_polygon), MP_ROM_PTR(&bitmaptools_draw_polygon_obj) }, { MP_ROM_QSTR(MP_QSTR_draw_circle), MP_ROM_PTR(&bitmaptools_draw_circle_obj) }, + { MP_ROM_QSTR(MP_QSTR_blit), MP_ROM_PTR(&bitmaptools_blit_obj) }, { MP_ROM_QSTR(MP_QSTR_dither), MP_ROM_PTR(&bitmaptools_dither_obj) }, { MP_ROM_QSTR(MP_QSTR_DitherAlgorithm), MP_ROM_PTR(&bitmaptools_dither_algorithm_type) }, }; diff --git a/shared-bindings/bitmaptools/__init__.h b/shared-bindings/bitmaptools/__init__.h index 21fb1b50ab..456d2fcdfb 100644 --- a/shared-bindings/bitmaptools/__init__.h +++ b/shared-bindings/bitmaptools/__init__.h @@ -69,6 +69,10 @@ void common_hal_bitmaptools_draw_circle(displayio_bitmap_t *destination, int16_t radius, uint32_t value); +void common_hal_bitmaptools_blit(displayio_bitmap_t *destination, displayio_bitmap_t *source, int16_t x, int16_t y, + int16_t x1, int16_t y1, int16_t x2, int16_t y2, + uint32_t skip_index, bool skip_index_none, uint32_t skip_self_index, bool skip_self_index_none); + void common_hal_bitmaptools_draw_polygon(displayio_bitmap_t *destination, void *xs, void *ys, size_t points_len, int point_size, uint32_t value, bool close); void common_hal_bitmaptools_readinto(displayio_bitmap_t *self, mp_obj_t *file, int element_size, int bits_per_pixel, bool reverse_pixels_in_word, bool swap_bytes, bool reverse_rows); void common_hal_bitmaptools_arrayblit(displayio_bitmap_t *self, void *data, int element_size, int x1, int y1, int x2, int y2, bool skip_specified, uint32_t skip_index); diff --git a/shared-bindings/displayio/Bitmap.c b/shared-bindings/displayio/Bitmap.c index 9ff8050eab..c678a76703 100644 --- a/shared-bindings/displayio/Bitmap.c +++ b/shared-bindings/displayio/Bitmap.c @@ -186,125 +186,6 @@ STATIC mp_obj_t bitmap_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t val return mp_const_none; } -//| def blit( -//| self, -//| x: int, -//| y: int, -//| source_bitmap: Bitmap, -//| *, -//| x1: int, -//| y1: int, -//| x2: int, -//| y2: int, -//| skip_index: int, -//| skip_self_index: int -//| ) -> None: -//| """Inserts the source_bitmap region defined by rectangular boundaries -//| (x1,y1) and (x2,y2) into the bitmap at the specified (x,y) location. -//| -//| :param int x: Horizontal pixel location in bitmap where source_bitmap upper-left -//| corner will be placed -//| :param int y: Vertical pixel location in bitmap where source_bitmap upper-left -//| corner will be placed -//| :param bitmap source_bitmap: Source bitmap that contains the graphical region to be copied -//| :param int x1: Minimum x-value for rectangular bounding box to be copied from the source bitmap -//| :param int y1: Minimum y-value for rectangular bounding box to be copied from the source bitmap -//| :param int x2: Maximum x-value (exclusive) for rectangular bounding box to be copied from the source bitmap -//| :param int y2: Maximum y-value (exclusive) for rectangular bounding box to be copied from the source bitmap -//| :param int skip_index: bitmap palette index in the source that will not be copied, -//| set to None to copy all pixels -//| :param int skip_self_index: bitmap palette index in the self bitmap that will not get overwritten -//| by the pixels from the source""" -//| ... -STATIC mp_obj_t displayio_bitmap_obj_blit(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { - enum {ARG_x, ARG_y, ARG_source, ARG_x1, ARG_y1, ARG_x2, ARG_y2, ARG_skip_index, ARG_skip_self_index}; - static const mp_arg_t allowed_args[] = { - {MP_QSTR_x, MP_ARG_REQUIRED | MP_ARG_INT, {.u_obj = MP_OBJ_NULL} }, - {MP_QSTR_y, MP_ARG_REQUIRED | MP_ARG_INT, {.u_obj = MP_OBJ_NULL} }, - {MP_QSTR_source_bitmap, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, - {MP_QSTR_x1, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} }, - {MP_QSTR_y1, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} }, - {MP_QSTR_x2, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, // None convert to source->width - {MP_QSTR_y2, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, // None convert to source->height - {MP_QSTR_skip_index, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none} }, - {MP_QSTR_skip_self_index, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = mp_const_none} }, - }; - mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; - mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); - - displayio_bitmap_t *self = MP_OBJ_TO_PTR(pos_args[0]); - check_for_deinit(self); - - // Check x,y are within self (target) bitmap boundary - int16_t x = mp_arg_validate_int_range(args[ARG_x].u_int, 0, MAX(0, self->width - 1), MP_QSTR_x); - int16_t y = mp_arg_validate_int_range(args[ARG_y].u_int, 0, MAX(0, self->height - 1), MP_QSTR_y); - - displayio_bitmap_t *source = mp_arg_validate_type(args[ARG_source].u_obj, &displayio_bitmap_type, MP_QSTR_source_bitmap); - - - // ensure that the target bitmap (self) has at least as many `bits_per_value` as the source - if (self->bits_per_value < source->bits_per_value) { - mp_raise_ValueError(translate("source palette too large")); - } - - // Check x1,y1,x2,y2 are within source bitmap boundary - int16_t x1 = mp_arg_validate_int_range(args[ARG_x1].u_int, 0, MAX(0, source->width - 1), MP_QSTR_x1); - int16_t y1 = mp_arg_validate_int_range(args[ARG_y1].u_int, 0, MAX(0, source->height - 1), MP_QSTR_y1); - int16_t x2, y2; - // if x2 or y2 is None, then set as the maximum size of the source bitmap - if (args[ARG_x2].u_obj == mp_const_none) { - x2 = source->width; - } else { - x2 = mp_arg_validate_int_range(mp_obj_get_int(args[ARG_x2].u_obj), 0, source->width, MP_QSTR_x2); - } - // int16_t y2; - if (args[ARG_y2].u_obj == mp_const_none) { - y2 = source->height; - } else { - y2 = mp_arg_validate_int_range(mp_obj_get_int(args[ARG_y2].u_obj), 0, source->height, MP_QSTR_y2); - } - - // Ensure x1 < x2 and y1 < y2 - if (x1 > x2) { - int16_t temp = x2; - x2 = x1; - x1 = temp; - } - if (y1 > y2) { - int16_t temp = y2; - y2 = y1; - y1 = temp; - } - - uint32_t skip_index; - bool skip_index_none; // flag whether skip_value was None - - if (args[ARG_skip_index].u_obj == mp_const_none) { - skip_index = 0; - skip_index_none = true; - } else { - skip_index = mp_obj_get_int(args[ARG_skip_index].u_obj); - skip_index_none = false; - } - - uint32_t skip_self_index; - bool skip_self_index_none; // flag whether skip_self_value was None - - if (args[ARG_skip_self_index].u_obj == mp_const_none) { - skip_self_index = 0; - skip_self_index_none = true; - } else { - skip_self_index = mp_obj_get_int(args[ARG_skip_self_index].u_obj); - skip_self_index_none = false; - } - - common_hal_displayio_bitmap_blit(self, x, y, source, x1, y1, x2, y2, skip_index, skip_index_none, skip_self_index, - skip_self_index_none); - - return mp_const_none; -} -MP_DEFINE_CONST_FUN_OBJ_KW(displayio_bitmap_blit_obj, 1, displayio_bitmap_obj_blit); - //| def fill(self, value: int) -> None: //| """Fills the bitmap with the supplied palette index value.""" //| ... @@ -379,7 +260,6 @@ MP_DEFINE_CONST_FUN_OBJ_1(displayio_bitmap_deinit_obj, displayio_bitmap_obj_dein STATIC const mp_rom_map_elem_t displayio_bitmap_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&displayio_bitmap_height_obj) }, { MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&displayio_bitmap_width_obj) }, - { MP_ROM_QSTR(MP_QSTR_blit), MP_ROM_PTR(&displayio_bitmap_blit_obj) }, { MP_ROM_QSTR(MP_QSTR_fill), MP_ROM_PTR(&displayio_bitmap_fill_obj) }, { MP_ROM_QSTR(MP_QSTR_dirty), MP_ROM_PTR(&displayio_bitmap_dirty_obj) }, { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&displayio_bitmap_deinit_obj) }, diff --git a/shared-bindings/displayio/Bitmap.h b/shared-bindings/displayio/Bitmap.h index 8f52cb8f62..8f30b3a330 100644 --- a/shared-bindings/displayio/Bitmap.h +++ b/shared-bindings/displayio/Bitmap.h @@ -42,9 +42,6 @@ uint16_t common_hal_displayio_bitmap_get_height(displayio_bitmap_t *self); uint16_t common_hal_displayio_bitmap_get_width(displayio_bitmap_t *self); uint32_t common_hal_displayio_bitmap_get_bits_per_value(displayio_bitmap_t *self); void common_hal_displayio_bitmap_set_pixel(displayio_bitmap_t *bitmap, int16_t x, int16_t y, uint32_t value); -void common_hal_displayio_bitmap_blit(displayio_bitmap_t *self, int16_t x, int16_t y, displayio_bitmap_t *source, - int16_t x1, int16_t y1, int16_t x2, int16_t y2, - uint32_t skip_index, bool skip_index_none, uint32_t skip_self_index, bool skip_self_index_none); uint32_t common_hal_displayio_bitmap_get_pixel(displayio_bitmap_t *bitmap, int16_t x, int16_t y); void common_hal_displayio_bitmap_fill(displayio_bitmap_t *bitmap, uint32_t value); int common_hal_displayio_bitmap_get_buffer(displayio_bitmap_t *self, mp_buffer_info_t *bufinfo, mp_uint_t flags); diff --git a/shared-module/bitmaptools/__init__.c b/shared-module/bitmaptools/__init__.c index 0ded6d6abb..2b3b73030a 100644 --- a/shared-module/bitmaptools/__init__.c +++ b/shared-module/bitmaptools/__init__.c @@ -982,3 +982,70 @@ void common_hal_bitmaptools_draw_circle(displayio_bitmap_t *destination, draw_circle(destination, x, y, radius, value); } + +void common_hal_bitmaptools_blit(displayio_bitmap_t *destination, displayio_bitmap_t *source, int16_t x, int16_t y, + int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint32_t skip_index, bool skip_index_none, uint32_t skip_dest_index, + bool skip_dest_index_none) { + if (destination->read_only) { + mp_raise_RuntimeError(translate("Read-only")); + } + // Copy region of "source" bitmap into "destination" bitmap at location x,y in the "destination" + // If skip_value is encountered in the source bitmap, it will not be copied. + // If skip_value is `None`, then all pixels are copied. + // This function assumes input checks were performed for pixel index entries. + + // Update the dirty area + int16_t dirty_x_max = (x + (x2 - x1)); + if (dirty_x_max > destination->width) { + dirty_x_max = destination->width; + } + int16_t dirty_y_max = y + (y2 - y1); + if (dirty_y_max > destination->height) { + dirty_y_max = destination->height; + } + + displayio_area_t a = { x, y, dirty_x_max, dirty_y_max, NULL}; + displayio_bitmap_set_dirty_area(destination, &a); + + bool x_reverse = false; + bool y_reverse = false; + + // Add reverse direction option to protect blitting of destination bitmap back into destination bitmap + if (x > x1) { + x_reverse = true; + } + if (y > y1) { + y_reverse = true; + } + + // simplest version - use internal functions for get/set pixels + for (int16_t i = 0; i < (x2 - x1); i++) { + + const int xs_index = x_reverse ? ((x2) - i - 1) : x1 + i; // x-index into the source bitmap + const int xd_index = x_reverse ? ((x + (x2 - x1)) - i - 1) : x + i; // x-index into the destination bitmap + + if ((xd_index >= 0) && (xd_index < destination->width)) { + for (int16_t j = 0; j < (y2 - y1); j++) { + + const int ys_index = y_reverse ? ((y2) - j - 1) : y1 + j; // y-index into the source bitmap + const int yd_index = y_reverse ? ((y + (y2 - y1)) - j - 1) : y + j; // y-index into the destination bitmap + + if ((yd_index >= 0) && (yd_index < destination->height)) { + uint32_t value = common_hal_displayio_bitmap_get_pixel(source, xs_index, ys_index); + if (skip_dest_index_none) { // if skip_dest_index is none, then only check source skip + if ((skip_index_none) || (value != skip_index)) { // write if skip_value_none is True + displayio_bitmap_write_pixel(destination, xd_index, yd_index, value); + } + } else { // check dest_value index against skip_dest_index and skip if they match + uint32_t dest_value = common_hal_displayio_bitmap_get_pixel(destination, xd_index, yd_index); + if (dest_value != skip_dest_index) { + if ((skip_index_none) || (value != skip_index)) { // write if skip_value_none is True + displayio_bitmap_write_pixel(destination, xd_index, yd_index, value); + } + } + } + } + } + } + } +} diff --git a/shared-module/displayio/Bitmap.c b/shared-module/displayio/Bitmap.c index f8b8170395..794e2dac19 100644 --- a/shared-module/displayio/Bitmap.c +++ b/shared-module/displayio/Bitmap.c @@ -174,73 +174,6 @@ void displayio_bitmap_write_pixel(displayio_bitmap_t *self, int16_t x, int16_t y } } -void common_hal_displayio_bitmap_blit(displayio_bitmap_t *self, int16_t x, int16_t y, displayio_bitmap_t *source, - int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint32_t skip_index, bool skip_index_none, uint32_t skip_self_index, - bool skip_self_index_none) { - if (self->read_only) { - mp_raise_RuntimeError(translate("Read-only")); - } - // Copy region of "source" bitmap into "self" bitmap at location x,y in the "self" - // If skip_value is encountered in the source bitmap, it will not be copied. - // If skip_value is `None`, then all pixels are copied. - // This function assumes input checks were performed for pixel index entries. - - // Update the dirty area - int16_t dirty_x_max = (x + (x2 - x1)); - if (dirty_x_max > self->width) { - dirty_x_max = self->width; - } - int16_t dirty_y_max = y + (y2 - y1); - if (dirty_y_max > self->height) { - dirty_y_max = self->height; - } - - displayio_area_t a = { x, y, dirty_x_max, dirty_y_max, NULL}; - displayio_bitmap_set_dirty_area(self, &a); - - bool x_reverse = false; - bool y_reverse = false; - - // Add reverse direction option to protect blitting of self bitmap back into self bitmap - if (x > x1) { - x_reverse = true; - } - if (y > y1) { - y_reverse = true; - } - - // simplest version - use internal functions for get/set pixels - for (int16_t i = 0; i < (x2 - x1); i++) { - - const int xs_index = x_reverse ? ((x2) - i - 1) : x1 + i; // x-index into the source bitmap - const int xd_index = x_reverse ? ((x + (x2 - x1)) - i - 1) : x + i; // x-index into the destination bitmap - - if ((xd_index >= 0) && (xd_index < self->width)) { - for (int16_t j = 0; j < (y2 - y1); j++) { - - const int ys_index = y_reverse ? ((y2) - j - 1) : y1 + j; // y-index into the source bitmap - const int yd_index = y_reverse ? ((y + (y2 - y1)) - j - 1) : y + j; // y-index into the destination bitmap - - if ((yd_index >= 0) && (yd_index < self->height)) { - uint32_t value = common_hal_displayio_bitmap_get_pixel(source, xs_index, ys_index); - if (skip_self_index_none) { // if skip_self_index is none, then only check source skip - if ((skip_index_none) || (value != skip_index)) { // write if skip_value_none is True - displayio_bitmap_write_pixel(self, xd_index, yd_index, value); - } - } else { // check dest_value index against skip_self_index and skip if they match - uint32_t dest_value = common_hal_displayio_bitmap_get_pixel(self, xd_index, yd_index); - if (dest_value != skip_self_index) { - if ((skip_index_none) || (value != skip_index)) { // write if skip_value_none is True - displayio_bitmap_write_pixel(self, xd_index, yd_index, value); - } - } - } - } - } - } - } -} - void common_hal_displayio_bitmap_set_pixel(displayio_bitmap_t *self, int16_t x, int16_t y, uint32_t value) { if (self->read_only) { mp_raise_RuntimeError(translate("Read-only")); From a2ff9527dc2b5baa40eb7272315979b83d733343 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sun, 2 Jul 2023 14:40:56 -0500 Subject: [PATCH 074/241] format --- shared-module/bitmaptools/__init__.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/shared-module/bitmaptools/__init__.c b/shared-module/bitmaptools/__init__.c index 2b3b73030a..aa13ba4acb 100644 --- a/shared-module/bitmaptools/__init__.c +++ b/shared-module/bitmaptools/__init__.c @@ -984,8 +984,9 @@ void common_hal_bitmaptools_draw_circle(displayio_bitmap_t *destination, } void common_hal_bitmaptools_blit(displayio_bitmap_t *destination, displayio_bitmap_t *source, int16_t x, int16_t y, - int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint32_t skip_index, bool skip_index_none, uint32_t skip_dest_index, - bool skip_dest_index_none) { + int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint32_t skip_index, bool skip_index_none, uint32_t skip_dest_index, + bool skip_dest_index_none) { + if (destination->read_only) { mp_raise_RuntimeError(translate("Read-only")); } From 16d92ddd3453ca4a478c2172aa7e9755201aad50 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sun, 2 Jul 2023 14:57:44 -0500 Subject: [PATCH 075/241] docs fix --- shared-bindings/bitmaptools/__init__.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared-bindings/bitmaptools/__init__.c b/shared-bindings/bitmaptools/__init__.c index 6d0680626d..3a95ff5500 100644 --- a/shared-bindings/bitmaptools/__init__.c +++ b/shared-bindings/bitmaptools/__init__.c @@ -950,8 +950,8 @@ STATIC mp_obj_t bitmaptools_obj_draw_circle(size_t n_args, const mp_obj_t *pos_a MP_DEFINE_CONST_FUN_OBJ_KW(bitmaptools_draw_circle_obj, 0, bitmaptools_obj_draw_circle); //| def blit( -//| dest_bitmap: Bitmap, -//| source_bitmap: Bitmap, +//| dest_bitmap: displayio.Bitmap, +//| source_bitmap: displayio.Bitmap, //| x: int, //| y: int, //| *, From 5dc7e9472bb7894225678d7e82ff3e2bc4f4ac0c Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Mon, 3 Jul 2023 12:08:10 -0700 Subject: [PATCH 076/241] Swapped address pins for Rev C --- ports/espressif/boards/adafruit_matrixportal_s3/pins.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/espressif/boards/adafruit_matrixportal_s3/pins.c b/ports/espressif/boards/adafruit_matrixportal_s3/pins.c index bc2de4299b..5cdd9ab92c 100644 --- a/ports/espressif/boards/adafruit_matrixportal_s3/pins.c +++ b/ports/espressif/boards/adafruit_matrixportal_s3/pins.c @@ -77,10 +77,10 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_G2),MP_ROM_PTR(&pin_GPIO39) }, { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_B2),MP_ROM_PTR(&pin_GPIO37) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRA),MP_ROM_PTR(&pin_GPIO35) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRA),MP_ROM_PTR(&pin_GPIO45) }, { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRB),MP_ROM_PTR(&pin_GPIO36) }, { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRC),MP_ROM_PTR(&pin_GPIO48) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRD),MP_ROM_PTR(&pin_GPIO45) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRD),MP_ROM_PTR(&pin_GPIO35) }, { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_ADDRE),MP_ROM_PTR(&pin_GPIO21) }, { MP_OBJ_NEW_QSTR(MP_QSTR_MTX_CLK),MP_ROM_PTR(&pin_GPIO2) }, From 72857994f2e3c8562926b2bc05464671401e9283 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Wed, 5 Jul 2023 17:27:41 -0500 Subject: [PATCH 077/241] change skip_index to skip_source_index --- shared-bindings/bitmaptools/__init__.c | 24 ++++++++++++------------ shared-bindings/bitmaptools/__init__.h | 2 +- shared-module/bitmaptools/__init__.c | 6 +++--- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/shared-bindings/bitmaptools/__init__.c b/shared-bindings/bitmaptools/__init__.c index 3a95ff5500..5139a55645 100644 --- a/shared-bindings/bitmaptools/__init__.c +++ b/shared-bindings/bitmaptools/__init__.c @@ -959,7 +959,7 @@ MP_DEFINE_CONST_FUN_OBJ_KW(bitmaptools_draw_circle_obj, 0, bitmaptools_obj_draw_ //| y1: int, //| x2: int, //| y2: int, -//| skip_index: int, +//| skip_source_index: int, //| skip_dest_index: int //| ) -> None: //| """Inserts the source_bitmap region defined by rectangular boundaries @@ -975,14 +975,14 @@ MP_DEFINE_CONST_FUN_OBJ_KW(bitmaptools_draw_circle_obj, 0, bitmaptools_obj_draw_ //| :param int y1: Minimum y-value for rectangular bounding box to be copied from the source bitmap //| :param int x2: Maximum x-value (exclusive) for rectangular bounding box to be copied from the source bitmap //| :param int y2: Maximum y-value (exclusive) for rectangular bounding box to be copied from the source bitmap -//| :param int skip_index: bitmap palette index in the source that will not be copied, +//| :param int skip_source_index: bitmap palette index in the source that will not be copied, //| set to None to copy all pixels //| :param int skip_dest_index: bitmap palette index in the destination bitmap that will not get overwritten //| by the pixels from the source""" //| ... //| STATIC mp_obj_t bitmaptools_obj_blit(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { - enum {ARG_destination, ARG_source, ARG_x, ARG_y, ARG_x1, ARG_y1, ARG_x2, ARG_y2, ARG_skip_index, ARG_skip_dest_index}; + enum {ARG_destination, ARG_source, ARG_x, ARG_y, ARG_x1, ARG_y1, ARG_x2, ARG_y2, ARG_skip_source_index, ARG_skip_dest_index}; static const mp_arg_t allowed_args[] = { {MP_QSTR_dest_bitmap, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, {MP_QSTR_source_bitmap, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, @@ -992,7 +992,7 @@ STATIC mp_obj_t bitmaptools_obj_blit(size_t n_args, const mp_obj_t *pos_args, mp {MP_QSTR_y1, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} }, {MP_QSTR_x2, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, // None convert to source->width {MP_QSTR_y2, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, // None convert to source->height - {MP_QSTR_skip_index, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, + {MP_QSTR_skip_source_index, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, {MP_QSTR_skip_dest_index, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, }; mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; @@ -1045,15 +1045,15 @@ STATIC mp_obj_t bitmaptools_obj_blit(size_t n_args, const mp_obj_t *pos_args, mp y1 = temp; } - uint32_t skip_index; - bool skip_index_none; // flag whether skip_value was None + uint32_t skip_source_index; + bool skip_source_index_none; // flag whether skip_value was None - if (args[ARG_skip_index].u_obj == mp_const_none) { - skip_index = 0; - skip_index_none = true; + if (args[ARG_skip_source_index].u_obj == mp_const_none) { + skip_source_index = 0; + skip_source_index_none = true; } else { - skip_index = mp_obj_get_int(args[ARG_skip_index].u_obj); - skip_index_none = false; + skip_source_index = mp_obj_get_int(args[ARG_skip_source_index].u_obj); + skip_source_index_none = false; } uint32_t skip_dest_index; @@ -1067,7 +1067,7 @@ STATIC mp_obj_t bitmaptools_obj_blit(size_t n_args, const mp_obj_t *pos_args, mp skip_dest_index_none = false; } - common_hal_bitmaptools_blit(destination, source, x, y, x1, y1, x2, y2, skip_index, skip_index_none, skip_dest_index, + common_hal_bitmaptools_blit(destination, source, x, y, x1, y1, x2, y2, skip_source_index, skip_source_index_none, skip_dest_index, skip_dest_index_none); return mp_const_none; diff --git a/shared-bindings/bitmaptools/__init__.h b/shared-bindings/bitmaptools/__init__.h index 456d2fcdfb..be0811cb80 100644 --- a/shared-bindings/bitmaptools/__init__.h +++ b/shared-bindings/bitmaptools/__init__.h @@ -71,7 +71,7 @@ void common_hal_bitmaptools_draw_circle(displayio_bitmap_t *destination, void common_hal_bitmaptools_blit(displayio_bitmap_t *destination, displayio_bitmap_t *source, int16_t x, int16_t y, int16_t x1, int16_t y1, int16_t x2, int16_t y2, - uint32_t skip_index, bool skip_index_none, uint32_t skip_self_index, bool skip_self_index_none); + uint32_t skip_source_index, bool skip_source_index_none, uint32_t skip_dest_index, bool skip_dest_index_none); void common_hal_bitmaptools_draw_polygon(displayio_bitmap_t *destination, void *xs, void *ys, size_t points_len, int point_size, uint32_t value, bool close); void common_hal_bitmaptools_readinto(displayio_bitmap_t *self, mp_obj_t *file, int element_size, int bits_per_pixel, bool reverse_pixels_in_word, bool swap_bytes, bool reverse_rows); diff --git a/shared-module/bitmaptools/__init__.c b/shared-module/bitmaptools/__init__.c index aa13ba4acb..e6c0a9439d 100644 --- a/shared-module/bitmaptools/__init__.c +++ b/shared-module/bitmaptools/__init__.c @@ -984,7 +984,7 @@ void common_hal_bitmaptools_draw_circle(displayio_bitmap_t *destination, } void common_hal_bitmaptools_blit(displayio_bitmap_t *destination, displayio_bitmap_t *source, int16_t x, int16_t y, - int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint32_t skip_index, bool skip_index_none, uint32_t skip_dest_index, + int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint32_t skip_source_index, bool skip_source_index_none, uint32_t skip_dest_index, bool skip_dest_index_none) { if (destination->read_only) { @@ -1034,13 +1034,13 @@ void common_hal_bitmaptools_blit(displayio_bitmap_t *destination, displayio_bitm if ((yd_index >= 0) && (yd_index < destination->height)) { uint32_t value = common_hal_displayio_bitmap_get_pixel(source, xs_index, ys_index); if (skip_dest_index_none) { // if skip_dest_index is none, then only check source skip - if ((skip_index_none) || (value != skip_index)) { // write if skip_value_none is True + if ((skip_source_index_none) || (value != skip_source_index)) { // write if skip_value_none is True displayio_bitmap_write_pixel(destination, xd_index, yd_index, value); } } else { // check dest_value index against skip_dest_index and skip if they match uint32_t dest_value = common_hal_displayio_bitmap_get_pixel(destination, xd_index, yd_index); if (dest_value != skip_dest_index) { - if ((skip_index_none) || (value != skip_index)) { // write if skip_value_none is True + if ((skip_source_index_none) || (value != skip_source_index)) { // write if skip_value_none is True displayio_bitmap_write_pixel(destination, xd_index, yd_index, value); } } From 5fcd90d8fbac07b45ce0fe7410d2d4c8352f5e0b Mon Sep 17 00:00:00 2001 From: Marco van der Kolk Date: Thu, 6 Jul 2023 23:31:15 +0200 Subject: [PATCH 078/241] Extended to support multiple data pins Signed-off-by: Marco van der Kolk --- shared-bindings/keypad/ShiftRegisterKeys.c | 53 ++++++++++- shared-bindings/keypad/ShiftRegisterKeys.h | 2 +- shared-module/keypad/ShiftRegisterKeys.c | 105 ++++++++++++++++----- shared-module/keypad/ShiftRegisterKeys.h | 6 +- 4 files changed, 134 insertions(+), 32 deletions(-) diff --git a/shared-bindings/keypad/ShiftRegisterKeys.c b/shared-bindings/keypad/ShiftRegisterKeys.c index 1fcf517ac3..73e3264ac4 100644 --- a/shared-bindings/keypad/ShiftRegisterKeys.c +++ b/shared-bindings/keypad/ShiftRegisterKeys.c @@ -62,6 +62,7 @@ //| :param microcontroller.Pin clock: The shift register clock pin. //| The shift register should clock on a low-to-high transition. //| :param microcontroller.Pin data: the incoming shift register data pin +//| :param Sequence[microcontroller.Pin] data: a list of incoming shift register data pins //| :param microcontroller.Pin latch: //| Pin used to latch parallel data going into the shift register. //| :param bool value_to_latch: Pin state to latch data being read. @@ -70,6 +71,7 @@ //| The default is ``True``, which is how the 74HC165 operates. The CD4021 latch is the opposite. //| Once the data is latched, it will be shifted out by toggling the clock pin. //| :param int key_count: number of data lines to clock in +//| :param Sequence[int] key_count: a list of key_counts equal sized to data pins //| :param bool value_when_pressed: ``True`` if the pin reads high when the key is pressed. //| ``False`` if the pin reads low (is grounded) when the key is pressed. //| :param float interval: Scan keys no more often than ``interval`` to allow for debouncing. @@ -91,7 +93,7 @@ STATIC mp_obj_t keypad_shiftregisterkeys_make_new(const mp_obj_type_t *type, siz { MP_QSTR_data, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_latch, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_value_to_latch, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = true} }, - { MP_QSTR_key_count, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT }, + { MP_QSTR_key_count, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_value_when_pressed, MP_ARG_REQUIRED | MP_ARG_KW_ONLY | MP_ARG_BOOL }, { MP_QSTR_interval, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, { MP_QSTR_max_events, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 64} }, @@ -99,21 +101,64 @@ STATIC mp_obj_t keypad_shiftregisterkeys_make_new(const mp_obj_type_t *type, siz mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + size_t num_data_pins; + + if (mp_obj_is_type(args[ARG_data].u_obj, &mcu_pin_type)) { + num_data_pins = 1; + } else { + num_data_pins = (size_t)MP_OBJ_SMALL_INT_VALUE(mp_obj_len(args[ARG_data].u_obj)); + } + + const mcu_pin_obj_t *data_pins_array[num_data_pins]; + + if (mp_obj_is_type(args[ARG_data].u_obj, &mcu_pin_type)) { + const mcu_pin_obj_t *datapin = validate_obj_is_free_pin(args[ARG_data].u_obj, MP_QSTR_data); + data_pins_array[0] = datapin; + } else { + for (size_t pin = 0; pin < num_data_pins; pin++) { + const mcu_pin_obj_t *datapin = + validate_obj_is_free_pin(mp_obj_subscr(args[ARG_data].u_obj, MP_OBJ_NEW_SMALL_INT(pin), MP_OBJ_SENTINEL), MP_QSTR_data); + data_pins_array[pin] = datapin; + } + } + + size_t num_key_counts; + + if (mp_obj_is_int(args[ARG_key_count].u_obj)) { + num_key_counts = 1; + } else { + num_key_counts = (size_t)MP_OBJ_SMALL_INT_VALUE(mp_obj_len(args[ARG_key_count].u_obj)); + } + + mp_arg_validate_length(num_key_counts, num_data_pins, MP_QSTR_key_count); + + size_t key_count_array[num_key_counts]; + + if (mp_obj_is_int(args[ARG_key_count].u_obj)) { + const size_t key_count = (size_t)mp_arg_validate_int_min(args[ARG_key_count].u_int, 1, MP_QSTR_key_count); + key_count_array[0] = key_count; + } else { + for (size_t kc = 0; kc < num_key_counts; kc++) { + mp_int_t mpint = mp_obj_get_int(mp_obj_subscr(args[ARG_key_count].u_obj, MP_OBJ_NEW_SMALL_INT(kc), MP_OBJ_SENTINEL)); + const size_t key_count = (size_t)mp_arg_validate_int_min(mpint, 1, MP_QSTR_key_count); + key_count_array[kc] = key_count; + } + } + const mcu_pin_obj_t *clock = validate_obj_is_free_pin(args[ARG_clock].u_obj, MP_QSTR_clock); - const mcu_pin_obj_t *data = validate_obj_is_free_pin(args[ARG_data].u_obj, MP_QSTR_data); const mcu_pin_obj_t *latch = validate_obj_is_free_pin(args[ARG_latch].u_obj, MP_QSTR_latch); const bool value_to_latch = args[ARG_value_to_latch].u_bool; - const size_t key_count = (size_t)mp_arg_validate_int_min(args[ARG_key_count].u_int, 1, MP_QSTR_key_count); const bool value_when_pressed = args[ARG_value_when_pressed].u_bool; const mp_float_t interval = mp_arg_validate_obj_float_non_negative(args[ARG_interval].u_obj, 0.020f, MP_QSTR_interval); const size_t max_events = (size_t)mp_arg_validate_int_min(args[ARG_max_events].u_int, 1, MP_QSTR_max_events); common_hal_keypad_shiftregisterkeys_construct( - self, clock, data, latch, value_to_latch, key_count, value_when_pressed, interval, max_events); + self, clock, num_data_pins, data_pins_array, latch, value_to_latch, num_key_counts, key_count_array, value_when_pressed, interval, max_events); return MP_OBJ_FROM_PTR(self); + #else mp_raise_NotImplementedError_varg(translate("%q"), MP_QSTR_ShiftRegisterKeys); #endif diff --git a/shared-bindings/keypad/ShiftRegisterKeys.h b/shared-bindings/keypad/ShiftRegisterKeys.h index bc91c78ab0..e3d1bc20be 100644 --- a/shared-bindings/keypad/ShiftRegisterKeys.h +++ b/shared-bindings/keypad/ShiftRegisterKeys.h @@ -32,7 +32,7 @@ extern const mp_obj_type_t keypad_shiftregisterkeys_type; -void common_hal_keypad_shiftregisterkeys_construct(keypad_shiftregisterkeys_obj_t *self, const mcu_pin_obj_t *clock_pin, const mcu_pin_obj_t *data_pin, const mcu_pin_obj_t *latch_pin, bool value_to_latch, size_t key_count, bool value_when_pressed, mp_float_t interval, size_t max_events); +void common_hal_keypad_shiftregisterkeys_construct(keypad_shiftregisterkeys_obj_t *self, const mcu_pin_obj_t *clock_pin, mp_uint_t num_data_pins, const mcu_pin_obj_t *data_pins[], const mcu_pin_obj_t *latch_pin, bool value_to_latch, size_t num_key_count, size_t key_counts[], bool value_when_pressed, mp_float_t interval, size_t max_events); void common_hal_keypad_shiftregisterkeys_deinit(keypad_shiftregisterkeys_obj_t *self); diff --git a/shared-module/keypad/ShiftRegisterKeys.c b/shared-module/keypad/ShiftRegisterKeys.c index b2b10c65a2..ee42c2c4b3 100644 --- a/shared-module/keypad/ShiftRegisterKeys.c +++ b/shared-module/keypad/ShiftRegisterKeys.c @@ -44,7 +44,7 @@ static keypad_scanner_funcs_t shiftregisterkeys_funcs = { .get_key_count = shiftregisterkeys_get_key_count, }; -void common_hal_keypad_shiftregisterkeys_construct(keypad_shiftregisterkeys_obj_t *self, const mcu_pin_obj_t *clock_pin, const mcu_pin_obj_t *data_pin, const mcu_pin_obj_t *latch_pin, bool value_to_latch, size_t key_count, bool value_when_pressed, mp_float_t interval, size_t max_events) { +void common_hal_keypad_shiftregisterkeys_construct(keypad_shiftregisterkeys_obj_t *self, const mcu_pin_obj_t *clock_pin, mp_uint_t num_data_pins, const mcu_pin_obj_t *data_pins[], const mcu_pin_obj_t *latch_pin, bool value_to_latch, mp_uint_t num_key_counts, size_t key_counts[], bool value_when_pressed, mp_float_t interval, size_t max_events) { digitalio_digitalinout_obj_t *clock = m_new_obj(digitalio_digitalinout_obj_t); clock->base.type = &digitalio_digitalinout_type; @@ -52,22 +52,46 @@ void common_hal_keypad_shiftregisterkeys_construct(keypad_shiftregisterkeys_obj_ common_hal_digitalio_digitalinout_switch_to_output(clock, false, DRIVE_MODE_PUSH_PULL); self->clock = clock; - digitalio_digitalinout_obj_t *data = m_new_obj(digitalio_digitalinout_obj_t); - data->base.type = &digitalio_digitalinout_type; - common_hal_digitalio_digitalinout_construct(data, data_pin); - common_hal_digitalio_digitalinout_switch_to_input(data, PULL_NONE); - self->data = data; - digitalio_digitalinout_obj_t *latch = m_new_obj(digitalio_digitalinout_obj_t); latch->base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(latch, latch_pin); common_hal_digitalio_digitalinout_switch_to_output(latch, true, DRIVE_MODE_PUSH_PULL); self->latch = latch; - self->value_to_latch = value_to_latch; + mp_obj_t dios[num_data_pins]; + + for (size_t i = 0; i < num_data_pins; i++) { + digitalio_digitalinout_obj_t *dio = m_new_obj(digitalio_digitalinout_obj_t); + dio->base.type = &digitalio_digitalinout_type; + common_hal_digitalio_digitalinout_construct(dio, data_pins[i]); + common_hal_digitalio_digitalinout_switch_to_input(dio, PULL_NONE); + dios[i] = dio; + } + + // Allocate a tuple object with the data pins + self->data = mp_obj_new_tuple(num_data_pins, dios); + + self->key_counts = (mp_uint_t *)gc_alloc(sizeof(mp_uint_t) * num_key_counts, false, false); + self->num_key_counts = num_key_counts; + + // copy to a gc_alloc() and on the fly record pin with largest Shift register + mp_uint_t max = 0; + + for (mp_uint_t i = 0; i < self->num_key_counts; i++) { + mp_uint_t cnt = key_counts[i]; + + if (cnt > max) { + max = cnt; + } + + self->key_counts[i] = cnt; + } + + self->max_key_count = max; + + self->value_to_latch = value_to_latch; self->value_when_pressed = value_when_pressed; - self->key_count = key_count; self->funcs = &shiftregisterkeys_funcs; keypad_construct_common((keypad_scanner_obj_t *)self, interval, max_events); @@ -85,18 +109,33 @@ void common_hal_keypad_shiftregisterkeys_deinit(keypad_shiftregisterkeys_obj_t * common_hal_digitalio_digitalinout_deinit(self->clock); self->clock = MP_ROM_NONE; +/* common_hal_digitalio_digitalinout_deinit(self->data); self->data = MP_ROM_NONE; +*/ common_hal_digitalio_digitalinout_deinit(self->latch); self->latch = MP_ROM_NONE; + for (size_t key = 0; key < self->datas->len; key++) { + common_hal_digitalio_digitalinout_deinit(self->datas->items[key]); + } + self->data = MP_ROM_NONE; + common_hal_keypad_deinit_core(self); } size_t shiftregisterkeys_get_key_count(void *self_in) { keypad_shiftregisterkeys_obj_t *self = self_in; - return self->key_count; + + size_t total = 0; + + for (mp_uint_t i = 0; i < self->num_key_counts; i++) + { + total += self->key_counts[i]; + } + + return total; } static void shiftregisterkeys_scan_now(void *self_in, mp_obj_t timestamp) { @@ -105,28 +144,44 @@ static void shiftregisterkeys_scan_now(void *self_in, mp_obj_t timestamp) { // Latch (freeze) the current state of the input pins. common_hal_digitalio_digitalinout_set_value(self->latch, self->value_to_latch); - const size_t key_count = shiftregisterkeys_get_key_count(self); - - for (mp_uint_t key_number = 0; key_number < key_count; key_number++) { - // Zero-th data appears on on the data pin immediately, without shifting. + // Scan for max_key_count bit + for (mp_uint_t scan_number = 0; scan_number < self->max_key_count; scan_number++) { common_hal_digitalio_digitalinout_set_value(self->clock, false); - // Remember the previous up/down state. - const bool previous = self->currently_pressed[key_number]; - self->previously_pressed[key_number] = previous; + // Zero-th data appears on on the data pin immediately, without shifting. - // Get the current state. - const bool current = - common_hal_digitalio_digitalinout_get_value(self->data) == self->value_when_pressed; - self->currently_pressed[key_number] = current; + // Loop through all the data pins that share the latch + mp_uint_t index = 0; + + for (mp_uint_t i = 0; i < self->datas->len; i++) { + + // When this data pin has less shiftable bits, ignore it + if (scan_number >= self->key_counts[i]) { + continue; + } + + mp_uint_t key_number = scan_number + index; + + // Remember the previous up/down state. + const bool previous = self->currently_pressed[key_number]; + self->previously_pressed[key_number] = previous; + + // Get the current state. + const bool current = + common_hal_digitalio_digitalinout_get_value(self->datas->items[i]) == self->value_when_pressed; + self->currently_pressed[key_number] = current; + + // Record any transitions. + if (previous != current) { + keypad_eventqueue_record(self->events, key_number, current, timestamp); + } + + index += self->key_counts[i]; + } // Trigger a shift to get the next bit. common_hal_digitalio_digitalinout_set_value(self->clock, true); - // Record any transitions. - if (previous != current) { - keypad_eventqueue_record(self->events, key_number, current, timestamp); - } } // Start reading the input pins again. diff --git a/shared-module/keypad/ShiftRegisterKeys.h b/shared-module/keypad/ShiftRegisterKeys.h index 84c66ef627..9ce9692cda 100644 --- a/shared-module/keypad/ShiftRegisterKeys.h +++ b/shared-module/keypad/ShiftRegisterKeys.h @@ -37,9 +37,11 @@ typedef struct { KEYPAD_SCANNER_COMMON_FIELDS; digitalio_digitalinout_obj_t *clock; - digitalio_digitalinout_obj_t *data; digitalio_digitalinout_obj_t *latch; - size_t key_count; + mp_obj_tuple_t *data; + mp_uint_t *key_counts; + mp_uint_t num_key_counts; + mp_uint_t max_key_count; bool value_when_pressed; bool value_to_latch; } keypad_shiftregisterkeys_obj_t; From 4ba4c2a9428e714b53d6eeb2d6e528e572b65878 Mon Sep 17 00:00:00 2001 From: Marco van der Kolk Date: Fri, 7 Jul 2023 00:28:07 +0200 Subject: [PATCH 079/241] Renamed 'datas' to 'data_pins' to keep codespell happy Signed-off-by: Marco van der Kolk --- shared-module/keypad/ShiftRegisterKeys.c | 17 ++++++----------- shared-module/keypad/ShiftRegisterKeys.h | 2 +- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/shared-module/keypad/ShiftRegisterKeys.c b/shared-module/keypad/ShiftRegisterKeys.c index ee42c2c4b3..ae5fa35636 100644 --- a/shared-module/keypad/ShiftRegisterKeys.c +++ b/shared-module/keypad/ShiftRegisterKeys.c @@ -70,7 +70,7 @@ void common_hal_keypad_shiftregisterkeys_construct(keypad_shiftregisterkeys_obj_ } // Allocate a tuple object with the data pins - self->data = mp_obj_new_tuple(num_data_pins, dios); + self->data_pins = mp_obj_new_tuple(num_data_pins, dios); self->key_counts = (mp_uint_t *)gc_alloc(sizeof(mp_uint_t) * num_key_counts, false, false); self->num_key_counts = num_key_counts; @@ -109,18 +109,13 @@ void common_hal_keypad_shiftregisterkeys_deinit(keypad_shiftregisterkeys_obj_t * common_hal_digitalio_digitalinout_deinit(self->clock); self->clock = MP_ROM_NONE; -/* - common_hal_digitalio_digitalinout_deinit(self->data); - self->data = MP_ROM_NONE; -*/ - common_hal_digitalio_digitalinout_deinit(self->latch); self->latch = MP_ROM_NONE; - for (size_t key = 0; key < self->datas->len; key++) { - common_hal_digitalio_digitalinout_deinit(self->datas->items[key]); + for (size_t key = 0; key < self->data_pins->len; key++) { + common_hal_digitalio_digitalinout_deinit(self->data_pins->items[key]); } - self->data = MP_ROM_NONE; + self->data_pins = MP_ROM_NONE; common_hal_keypad_deinit_core(self); } @@ -153,7 +148,7 @@ static void shiftregisterkeys_scan_now(void *self_in, mp_obj_t timestamp) { // Loop through all the data pins that share the latch mp_uint_t index = 0; - for (mp_uint_t i = 0; i < self->datas->len; i++) { + for (mp_uint_t i = 0; i < self->data_pins->len; i++) { // When this data pin has less shiftable bits, ignore it if (scan_number >= self->key_counts[i]) { @@ -168,7 +163,7 @@ static void shiftregisterkeys_scan_now(void *self_in, mp_obj_t timestamp) { // Get the current state. const bool current = - common_hal_digitalio_digitalinout_get_value(self->datas->items[i]) == self->value_when_pressed; + common_hal_digitalio_digitalinout_get_value(self->data_pins->items[i]) == self->value_when_pressed; self->currently_pressed[key_number] = current; // Record any transitions. diff --git a/shared-module/keypad/ShiftRegisterKeys.h b/shared-module/keypad/ShiftRegisterKeys.h index 9ce9692cda..0c2ccfb63b 100644 --- a/shared-module/keypad/ShiftRegisterKeys.h +++ b/shared-module/keypad/ShiftRegisterKeys.h @@ -38,7 +38,7 @@ typedef struct { KEYPAD_SCANNER_COMMON_FIELDS; digitalio_digitalinout_obj_t *clock; digitalio_digitalinout_obj_t *latch; - mp_obj_tuple_t *data; + mp_obj_tuple_t *data_pins; mp_uint_t *key_counts; mp_uint_t num_key_counts; mp_uint_t max_key_count; From 5fedf02806c3edac8fa684a7c8d8e975a82f1add Mon Sep 17 00:00:00 2001 From: Zelin Cai Date: Fri, 7 Jul 2023 00:09:05 +0800 Subject: [PATCH 080/241] Added Makerdiary nRF52840 Connect Kit. Signed-off-by: Zelin Cai --- .../makerdiary_nrf52840_connectkit/README.md | 32 +++++++ .../makerdiary_nrf52840_connectkit/board.c | 29 +++++++ .../mpconfigboard.h | 30 +++++++ .../mpconfigboard.mk | 14 ++++ .../makerdiary_nrf52840_connectkit/pins.c | 84 +++++++++++++++++++ 5 files changed, 189 insertions(+) create mode 100644 ports/nrf/boards/makerdiary_nrf52840_connectkit/README.md create mode 100644 ports/nrf/boards/makerdiary_nrf52840_connectkit/board.c create mode 100644 ports/nrf/boards/makerdiary_nrf52840_connectkit/mpconfigboard.h create mode 100644 ports/nrf/boards/makerdiary_nrf52840_connectkit/mpconfigboard.mk create mode 100644 ports/nrf/boards/makerdiary_nrf52840_connectkit/pins.c diff --git a/ports/nrf/boards/makerdiary_nrf52840_connectkit/README.md b/ports/nrf/boards/makerdiary_nrf52840_connectkit/README.md new file mode 100644 index 0000000000..2d06ff73a0 --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_connectkit/README.md @@ -0,0 +1,32 @@ +# Makerdiary nRF52840 Connect Kit + +## Introduction + +[nRF52840 Connect Kit](https://makerdiary.com/products/nrf52840-connectkit) is an open-source prototyping +kit designed for connected projects. It is built using the nRF52840 SoC, which has protocol support for +Bluetooth LE, Bluetooth mesh, Thread, Zigbee, 802.15.4, ANT and 2.4 GHz proprietary stacks. It provides +Arm TrustZone® CryptoCell cryptographic unit as well as numerous peripherals such as USB 2.0, NFC-A, GPIO, +UART, SPI, TWI, PDM, I2S, QSPI, PWM, ADC, QDEC to support a wide range of applications. + +The design is available in an easy-to-use form factor with USB-C and 40 pin DIP/SMT type, including up to +32 multi-function GPIO pins (7 can be used as ADC inputs) and Serial Wire Debug (SWD) port. It features +RGB LED, Buttons, external 64 Mbit QSPI flash and flexible power management with various options for easily +powering the unit from USB-C, external supplies or batteries, and also has Chip antenna and U.FL receptacle +options to support various wireless scenarios. + +Refer to [nRF52840 Connect Kit wiki page](https://wiki.makerdiary.com/nrf52840-connectkit) for more details. + +![](https://wiki.makerdiary.com/nrf52840-connectkit/assets/images/nrf52840_connectkit_hero.png) + +## Hardware diagram + +The following figure illustrates the nRF52840 Connect Kit hardware diagram. The design is available in +Chip antenna and U.FL receptacle options, both have most of the same components except the antenna +interface. + +[![](https://wiki.makerdiary.com/nrf52840-connectkit/assets/images/pinout.png)](https://wiki.makerdiary.com/nrf52840-connectkit/assets/attachments/nrf52840-connectkit-quick-start-guide.pdf) + +## Get Involved + +We think the best way to learn is by doing. And to help you run CircuitPython on nRF52840 Connect Kit, +we have provided an extensive set of documentation. Find the details [here](https://wiki.makerdiary.com/nrf52840-connectkit/guides/python/). diff --git a/ports/nrf/boards/makerdiary_nrf52840_connectkit/board.c b/ports/nrf/boards/makerdiary_nrf52840_connectkit/board.c new file mode 100644 index 0000000000..fb1ce4fb83 --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_connectkit/board.c @@ -0,0 +1,29 @@ +/* + * 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 "supervisor/board.h" + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/nrf/boards/makerdiary_nrf52840_connectkit/mpconfigboard.h b/ports/nrf/boards/makerdiary_nrf52840_connectkit/mpconfigboard.h new file mode 100644 index 0000000000..3cb15ca66b --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_connectkit/mpconfigboard.h @@ -0,0 +1,30 @@ +#include "nrfx/hal/nrf_gpio.h" + +#define MICROPY_HW_BOARD_NAME "Makerdiary nRF52840 Connect Kit" +#define MICROPY_HW_MCU_NAME "nRF52840" + +#if QSPI_FLASH_FILESYSTEM +#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(0, 20) +#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(0, 21) +#define MICROPY_QSPI_DATA2 NRF_GPIO_PIN_MAP(0, 22) +#define MICROPY_QSPI_DATA3 NRF_GPIO_PIN_MAP(0, 23) +#define MICROPY_QSPI_SCK NRF_GPIO_PIN_MAP(0, 19) +#define MICROPY_QSPI_CS NRF_GPIO_PIN_MAP(0, 17) +#endif + +#define BOARD_HAS_CRYSTAL 1 + +#define DEFAULT_I2C_BUS_SCL (&pin_P0_24) +#define DEFAULT_I2C_BUS_SDA (&pin_P0_25) + +#define DEFAULT_SPI_BUS_SCK (&pin_P0_14) +#define DEFAULT_SPI_BUS_MOSI (&pin_P0_15) +#define DEFAULT_SPI_BUS_MISO (&pin_P0_16) + +#define DEFAULT_UART_BUS_RX (&pin_P0_12) +#define DEFAULT_UART_BUS_TX (&pin_P0_13) + +#define CIRCUITPY_RGB_STATUS_INVERTED_PWM +#define CIRCUITPY_RGB_STATUS_R (&pin_P1_10) +#define CIRCUITPY_RGB_STATUS_G (&pin_P1_11) +#define CIRCUITPY_RGB_STATUS_B (&pin_P1_12) diff --git a/ports/nrf/boards/makerdiary_nrf52840_connectkit/mpconfigboard.mk b/ports/nrf/boards/makerdiary_nrf52840_connectkit/mpconfigboard.mk new file mode 100644 index 0000000000..0e5c1181c7 --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_connectkit/mpconfigboard.mk @@ -0,0 +1,14 @@ +USB_VID = 0x2886 +USB_PID = 0xF003 +USB_PRODUCT = "Makerdiary nRF52840 Connect Kit" +USB_MANUFACTURER = "Makerdiary" +SOFTDEV_VERSION=7.0.1 + +MCU_CHIP = nrf52840 + +QSPI_FLASH_FILESYSTEM = 1 +EXTERNAL_FLASH_DEVICES = "MX25R6435F" + +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BLE +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_HID +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel diff --git a/ports/nrf/boards/makerdiary_nrf52840_connectkit/pins.c b/ports/nrf/boards/makerdiary_nrf52840_connectkit/pins.c new file mode 100644 index 0000000000..80478ca03f --- /dev/null +++ b/ports/nrf/boards/makerdiary_nrf52840_connectkit/pins.c @@ -0,0 +1,84 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + { MP_ROM_QSTR(MP_QSTR_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_P18), MP_ROM_PTR(&pin_P0_18) }, + { MP_ROM_QSTR(MP_QSTR_P24), MP_ROM_PTR(&pin_P0_24) }, + { 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_P32), MP_ROM_PTR(&pin_P1_00) }, + { MP_ROM_QSTR(MP_QSTR_P33), MP_ROM_PTR(&pin_P1_01) }, + { MP_ROM_QSTR(MP_QSTR_P34), MP_ROM_PTR(&pin_P1_02) }, + { MP_ROM_QSTR(MP_QSTR_P35), MP_ROM_PTR(&pin_P1_03) }, + { MP_ROM_QSTR(MP_QSTR_P36), MP_ROM_PTR(&pin_P1_04) }, + { MP_ROM_QSTR(MP_QSTR_P37), MP_ROM_PTR(&pin_P1_05) }, + { MP_ROM_QSTR(MP_QSTR_P38), MP_ROM_PTR(&pin_P1_06) }, + { MP_ROM_QSTR(MP_QSTR_P39), MP_ROM_PTR(&pin_P1_07) }, + { MP_ROM_QSTR(MP_QSTR_P40), MP_ROM_PTR(&pin_P1_08) }, + { MP_ROM_QSTR(MP_QSTR_P41), MP_ROM_PTR(&pin_P1_09) }, + { MP_ROM_QSTR(MP_QSTR_P42), MP_ROM_PTR(&pin_P1_10) }, + { MP_ROM_QSTR(MP_QSTR_P43), MP_ROM_PTR(&pin_P1_11) }, + { MP_ROM_QSTR(MP_QSTR_P44), MP_ROM_PTR(&pin_P1_12) }, + { MP_ROM_QSTR(MP_QSTR_P45), MP_ROM_PTR(&pin_P1_13) }, + { MP_ROM_QSTR(MP_QSTR_P46), MP_ROM_PTR(&pin_P1_14) }, + { MP_ROM_QSTR(MP_QSTR_P47), MP_ROM_PTR(&pin_P1_15) }, + + { 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_04) }, + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_P0_05) }, + { MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_P0_28) }, + { MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_P0_29) }, + { MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_P0_30) }, + { MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_P0_31) }, + + { MP_ROM_QSTR(MP_QSTR_MEAS_EN), MP_ROM_PTR(&pin_P1_14) }, + { MP_ROM_QSTR(MP_QSTR_MODE), MP_ROM_PTR(&pin_P1_13) }, + + { MP_ROM_QSTR(MP_QSTR_USER), MP_ROM_PTR(&pin_P1_00) }, + { MP_ROM_QSTR(MP_QSTR_RESET), MP_ROM_PTR(&pin_P0_18) }, + + { MP_ROM_QSTR(MP_QSTR_LED0), MP_ROM_PTR(&pin_P1_15) }, + { MP_ROM_QSTR(MP_QSTR_LED1), MP_ROM_PTR(&pin_P1_10) }, + { MP_ROM_QSTR(MP_QSTR_LED2), MP_ROM_PTR(&pin_P1_11) }, + { MP_ROM_QSTR(MP_QSTR_LED3), MP_ROM_PTR(&pin_P1_12) }, + { MP_ROM_QSTR(MP_QSTR_RED_LED), MP_ROM_PTR(&pin_P1_10) }, + { MP_ROM_QSTR(MP_QSTR_GREEN_LED), MP_ROM_PTR(&pin_P1_11) }, + { MP_ROM_QSTR(MP_QSTR_BLUE_LED), MP_ROM_PTR(&pin_P1_12) }, + + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P0_13) }, + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P0_12) }, + + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P0_24) }, + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P0_25) }, + + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P0_14) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P0_15) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P0_16) }, + + { 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 8991f0cd7a7d2074f3e8127cec7baaa4427020e8 Mon Sep 17 00:00:00 2001 From: Miroslav Zuzelka Date: Fri, 7 Jul 2023 11:48:03 +0200 Subject: [PATCH 081/241] Update ES3ink board definition - fix wrong VID - add NEOPIXEL definition - add DOUBLE_TAP_PIN definition - add definition for default SPI bus --- ports/espressif/boards/es3ink/mpconfigboard.h | 9 ++++++++ .../espressif/boards/es3ink/mpconfigboard.mk | 2 +- ports/espressif/boards/es3ink/pins.c | 21 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/ports/espressif/boards/es3ink/mpconfigboard.h b/ports/espressif/boards/es3ink/mpconfigboard.h index 0be6f5abe7..5aa60a122a 100644 --- a/ports/espressif/boards/es3ink/mpconfigboard.h +++ b/ports/espressif/boards/es3ink/mpconfigboard.h @@ -29,6 +29,9 @@ #define MICROPY_HW_BOARD_NAME "ES3ink" #define MICROPY_HW_MCU_NAME "ESP32S3" +#define MICROPY_HW_NEOPIXEL (&pin_GPIO8) +#define CIRCUITPY_STATUS_LED_POWER (&pin_GPIO18) + #define CIRCUITPY_BOOT_BUTTON (&pin_GPIO0) #define DEFAULT_UART_BUS_RX (&pin_GPIO44) @@ -36,3 +39,9 @@ #define DEFAULT_I2C_BUS_SCL (&pin_GPIO3) #define DEFAULT_I2C_BUS_SDA (&pin_GPIO4) + +#define DEFAULT_SPI_BUS_SCK (&pin_GPIO12) +#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO11) +#define DEFAULT_SPI_BUS_MISO (&pin_GPIO13) + +#define DOUBLE_TAP_PIN (&pin_GPIO38) diff --git a/ports/espressif/boards/es3ink/mpconfigboard.mk b/ports/espressif/boards/es3ink/mpconfigboard.mk index 48ea9f122e..bd55e68379 100644 --- a/ports/espressif/boards/es3ink/mpconfigboard.mk +++ b/ports/espressif/boards/es3ink/mpconfigboard.mk @@ -1,4 +1,4 @@ -USB_VID = 0x239A +USB_VID = 0x1209 USB_PID = 0x2031 USB_PRODUCT = "ES3ink" USB_MANUFACTURER = "Czech maker" diff --git a/ports/espressif/boards/es3ink/pins.c b/ports/espressif/boards/es3ink/pins.c index e9ddf81a7a..f316137b7f 100644 --- a/ports/espressif/boards/es3ink/pins.c +++ b/ports/espressif/boards/es3ink/pins.c @@ -3,9 +3,14 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) }, { MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) }, + { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_GPIO2) }, { MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) }, { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO3) }, @@ -16,18 +21,29 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) }, { MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) }, { MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL_POWER), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) }, { MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) }, + { MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO11) }, + { MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) }, + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO12) }, + { MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) }, { MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) }, { MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) }, { MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) }, { MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) }, + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO18) }, { MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) }, { MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) }, @@ -52,8 +68,13 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) }, { MP_ROM_QSTR(MP_QSTR_IO46), MP_ROM_PTR(&pin_GPIO46) }, + { MP_ROM_QSTR(MP_QSTR_IO47), MP_ROM_PTR(&pin_GPIO47) }, + { MP_ROM_QSTR(MP_QSTR_IO48), MP_ROM_PTR(&pin_GPIO48) }, { 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_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) } }; MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From e8c7b4a9f4d448dd5ecee5ba9ea7c46161e7c2e9 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 7 Jul 2023 11:28:42 -0500 Subject: [PATCH 082/241] test a zero-byte environment file --- tests/circuitpython/getenv.py | 2 ++ tests/circuitpython/getenv.py.exp | 1 + 2 files changed, 3 insertions(+) diff --git a/tests/circuitpython/getenv.py b/tests/circuitpython/getenv.py index 68dd328cfb..f01189a551 100644 --- a/tests/circuitpython/getenv.py +++ b/tests/circuitpython/getenv.py @@ -72,6 +72,8 @@ def run_test(key, content): print(key, str(e)) +run_test("key", b"") + for i in range(13): run_test(f"key{i}", content_good) diff --git a/tests/circuitpython/getenv.py.exp b/tests/circuitpython/getenv.py.exp index ba1b1b3f90..925dafb469 100644 --- a/tests/circuitpython/getenv.py.exp +++ b/tests/circuitpython/getenv.py.exp @@ -1,3 +1,4 @@ +key None key0 'hello world' key1 7 key2 '\n' From 6dab35e0766fd2f0b9e2aceea9940dd7cfc82057 Mon Sep 17 00:00:00 2001 From: Marco van der Kolk Date: Sat, 8 Jul 2023 15:21:58 +0200 Subject: [PATCH 083/241] Assign key_count to MP_ROM_NONE on deinit (for gc) Signed-off-by: Marco van der Kolk --- shared-module/keypad/ShiftRegisterKeys.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared-module/keypad/ShiftRegisterKeys.c b/shared-module/keypad/ShiftRegisterKeys.c index ae5fa35636..44a7e3323a 100644 --- a/shared-module/keypad/ShiftRegisterKeys.c +++ b/shared-module/keypad/ShiftRegisterKeys.c @@ -116,6 +116,7 @@ void common_hal_keypad_shiftregisterkeys_deinit(keypad_shiftregisterkeys_obj_t * common_hal_digitalio_digitalinout_deinit(self->data_pins->items[key]); } self->data_pins = MP_ROM_NONE; + self->key_counts = MP_ROM_NONE; common_hal_keypad_deinit_core(self); } @@ -125,8 +126,7 @@ size_t shiftregisterkeys_get_key_count(void *self_in) { size_t total = 0; - for (mp_uint_t i = 0; i < self->num_key_counts; i++) - { + for (mp_uint_t i = 0; i < self->num_key_counts; i++) { total += self->key_counts[i]; } From 8704ba158b7b409e037613efb0ab70f2cedcdc1a Mon Sep 17 00:00:00 2001 From: MicroDev <70126934+microdev1@users.noreply.github.com> Date: Sun, 9 Jul 2023 21:25:37 +0530 Subject: [PATCH 084/241] fix set hostname --- ports/raspberrypi/common-hal/wifi/Radio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/raspberrypi/common-hal/wifi/Radio.c b/ports/raspberrypi/common-hal/wifi/Radio.c index e17b35d108..8571d490c4 100644 --- a/ports/raspberrypi/common-hal/wifi/Radio.c +++ b/ports/raspberrypi/common-hal/wifi/Radio.c @@ -88,7 +88,7 @@ mp_obj_t common_hal_wifi_radio_get_hostname(wifi_radio_obj_t *self) { void common_hal_wifi_radio_set_hostname(wifi_radio_obj_t *self, const char *hostname) { assert(strlen(hostname) < MP_ARRAY_SIZE(self->hostname)); - memcpy(self->hostname, hostname, strlen(hostname)); + strncpy(self->hostname, hostname, MP_ARRAY_SIZE(self->hostname) - 1); netif_set_hostname(NETIF_STA, self->hostname); netif_set_hostname(NETIF_AP, self->hostname); } From 21d08646e153763b5567ffa56a0c8a153fe37a7a Mon Sep 17 00:00:00 2001 From: Marco van der Kolk Date: Mon, 10 Jul 2023 12:04:26 +0200 Subject: [PATCH 085/241] updated documentation --- shared-bindings/keypad/ShiftRegisterKeys.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/shared-bindings/keypad/ShiftRegisterKeys.c b/shared-bindings/keypad/ShiftRegisterKeys.c index 73e3264ac4..8765e04c1e 100644 --- a/shared-bindings/keypad/ShiftRegisterKeys.c +++ b/shared-bindings/keypad/ShiftRegisterKeys.c @@ -41,10 +41,10 @@ //| self, //| *, //| clock: microcontroller.Pin, -//| data: microcontroller.Pin, +//| data: Union[microcontroller.Pin, List[microcontroller.Pin]], //| latch: microcontroller.Pin, //| value_to_latch: bool = True, -//| key_count: int, +//| key_count: Union[int, List[int]] //| value_when_pressed: bool, //| interval: float = 0.020, //| max_events: int = 64 @@ -56,13 +56,14 @@ //| //| Key number 0 is the first (or more properly, the zero-th) bit read. In the //| 74HC165, this bit is labeled ``Q7``. Key number 1 will be the value of ``Q6``, etc. +//| When specifying multiple data pins, the key numbers are sequential. +//| So with two data Pins in parallel and key_count[0] = 32, the keys of data[1] will start with 32. //| //| An `EventQueue` is created when this object is created and is available in the `events` attribute. //| //| :param microcontroller.Pin clock: The shift register clock pin. //| The shift register should clock on a low-to-high transition. -//| :param microcontroller.Pin data: the incoming shift register data pin -//| :param Sequence[microcontroller.Pin] data: a list of incoming shift register data pins +//| :param Union[microcontroller.Pin, List[microcontroller.Pin]] data: the incoming shift register data pin(s) //| :param microcontroller.Pin latch: //| Pin used to latch parallel data going into the shift register. //| :param bool value_to_latch: Pin state to latch data being read. @@ -70,8 +71,7 @@ //| ``False`` if the data is latched when ``latch`` goes low. //| The default is ``True``, which is how the 74HC165 operates. The CD4021 latch is the opposite. //| Once the data is latched, it will be shifted out by toggling the clock pin. -//| :param int key_count: number of data lines to clock in -//| :param Sequence[int] key_count: a list of key_counts equal sized to data pins +//| :param Union[int, List[int]] key_count: number of data lines to clock in (per data pin) //| :param bool value_when_pressed: ``True`` if the pin reads high when the key is pressed. //| ``False`` if the pin reads low (is grounded) when the key is pressed. //| :param float interval: Scan keys no more often than ``interval`` to allow for debouncing. @@ -84,7 +84,7 @@ //| ... STATIC mp_obj_t keypad_shiftregisterkeys_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { - #if CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS +#if CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS keypad_shiftregisterkeys_obj_t *self = m_new_obj(keypad_shiftregisterkeys_obj_t); self->base.type = &keypad_shiftregisterkeys_type; enum { ARG_clock, ARG_data, ARG_latch, ARG_value_to_latch, ARG_key_count, ARG_value_when_pressed, ARG_interval, ARG_max_events }; @@ -159,9 +159,9 @@ STATIC mp_obj_t keypad_shiftregisterkeys_make_new(const mp_obj_type_t *type, siz return MP_OBJ_FROM_PTR(self); - #else +#else mp_raise_NotImplementedError_varg(translate("%q"), MP_QSTR_ShiftRegisterKeys); - #endif +#endif } #if CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS @@ -225,7 +225,7 @@ const mp_obj_type_t keypad_shiftregisterkeys_type = { { &mp_type_type }, .name = MP_QSTR_ShiftRegisterKeys, .make_new = keypad_shiftregisterkeys_make_new, - #if CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS +#if CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS .locals_dict = (mp_obj_t)&keypad_shiftregisterkeys_locals_dict, - #endif +#endif }; From 2860593425e356664af3910f3c7e5c0c312fcf49 Mon Sep 17 00:00:00 2001 From: kolkmvd Date: Mon, 10 Jul 2023 12:28:36 +0200 Subject: [PATCH 086/241] fixed missing comma --- shared-bindings/keypad/ShiftRegisterKeys.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-bindings/keypad/ShiftRegisterKeys.c b/shared-bindings/keypad/ShiftRegisterKeys.c index 8765e04c1e..b96c7b0a50 100644 --- a/shared-bindings/keypad/ShiftRegisterKeys.c +++ b/shared-bindings/keypad/ShiftRegisterKeys.c @@ -44,7 +44,7 @@ //| data: Union[microcontroller.Pin, List[microcontroller.Pin]], //| latch: microcontroller.Pin, //| value_to_latch: bool = True, -//| key_count: Union[int, List[int]] +//| key_count: Union[int, List[int]], //| value_when_pressed: bool, //| interval: float = 0.020, //| max_events: int = 64 From 036eca8123a659a257b780e9af9a2823794d360e Mon Sep 17 00:00:00 2001 From: Leah Post Date: Thu, 6 Jul 2023 20:14:09 +0200 Subject: [PATCH 087/241] Add new board: splitkb.com's Liatris --- .../boards/splitkb_liatris/board.c | 29 ++++++++++ .../boards/splitkb_liatris/mpconfigboard.h | 14 +++++ .../boards/splitkb_liatris/mpconfigboard.mk | 9 +++ .../splitkb_liatris/pico-sdk-configboard.h | 1 + .../raspberrypi/boards/splitkb_liatris/pins.c | 55 +++++++++++++++++++ 5 files changed, 108 insertions(+) create mode 100644 ports/raspberrypi/boards/splitkb_liatris/board.c create mode 100644 ports/raspberrypi/boards/splitkb_liatris/mpconfigboard.h create mode 100644 ports/raspberrypi/boards/splitkb_liatris/mpconfigboard.mk create mode 100644 ports/raspberrypi/boards/splitkb_liatris/pico-sdk-configboard.h create mode 100644 ports/raspberrypi/boards/splitkb_liatris/pins.c diff --git a/ports/raspberrypi/boards/splitkb_liatris/board.c b/ports/raspberrypi/boards/splitkb_liatris/board.c new file mode 100644 index 0000000000..7d8b03d5f4 --- /dev/null +++ b/ports/raspberrypi/boards/splitkb_liatris/board.c @@ -0,0 +1,29 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2023 Conor Burns for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/raspberrypi/boards/splitkb_liatris/mpconfigboard.h b/ports/raspberrypi/boards/splitkb_liatris/mpconfigboard.h new file mode 100644 index 0000000000..a38b4a5550 --- /dev/null +++ b/ports/raspberrypi/boards/splitkb_liatris/mpconfigboard.h @@ -0,0 +1,14 @@ +#define MICROPY_HW_BOARD_NAME "splitkb.com Liatris" +#define MICROPY_HW_MCU_NAME "rp2040" + +#define MICROPY_HW_NEOPIXEL (&pin_GPIO25) + +#define DEFAULT_I2C_BUS_SCL (&pin_GPIO3) +#define DEFAULT_I2C_BUS_SDA (&pin_GPIO2) + +#define DEFAULT_SPI_BUS_SCK (&pin_GPIO22) +#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO23) +#define DEFAULT_SPI_BUS_MISO (&pin_GPIO20) + +#define DEFAULT_UART_BUS_RX (&pin_GPIO1) +#define DEFAULT_UART_BUS_TX (&pin_GPIO0) diff --git a/ports/raspberrypi/boards/splitkb_liatris/mpconfigboard.mk b/ports/raspberrypi/boards/splitkb_liatris/mpconfigboard.mk new file mode 100644 index 0000000000..9ce0b7b925 --- /dev/null +++ b/ports/raspberrypi/boards/splitkb_liatris/mpconfigboard.mk @@ -0,0 +1,9 @@ +USB_VID = 0x2E8A +USB_PID = 0x1060 +USB_PRODUCT = "Liatris" +USB_MANUFACTURER = "splitkb.com" + +CHIP_VARIANT = RP2040 +CHIP_FAMILY = rp2 + +EXTERNAL_FLASH_DEVICES = "W25Q128JVxQ" diff --git a/ports/raspberrypi/boards/splitkb_liatris/pico-sdk-configboard.h b/ports/raspberrypi/boards/splitkb_liatris/pico-sdk-configboard.h new file mode 100644 index 0000000000..36da55d457 --- /dev/null +++ b/ports/raspberrypi/boards/splitkb_liatris/pico-sdk-configboard.h @@ -0,0 +1 @@ +// Put board-specific pico-sdk definitions here. This file must exist. diff --git a/ports/raspberrypi/boards/splitkb_liatris/pins.c b/ports/raspberrypi/boards/splitkb_liatris/pins.c new file mode 100644 index 0000000000..8086ee7fb9 --- /dev/null +++ b/ports/raspberrypi/boards/splitkb_liatris/pins.c @@ -0,0 +1,55 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + // Left, top->bottom + { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO2) }, + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO2) }, + { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO3) }, + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO3) }, + { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO4) }, + { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) }, + + // Right, top->bottom + { MP_ROM_QSTR(MP_QSTR_D29), MP_ROM_PTR(&pin_GPIO29) }, + { MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO29) }, + { MP_ROM_QSTR(MP_QSTR_D28), MP_ROM_PTR(&pin_GPIO28) }, + { MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28) }, + { MP_ROM_QSTR(MP_QSTR_D27), MP_ROM_PTR(&pin_GPIO27) }, + { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27) }, + { MP_ROM_QSTR(MP_QSTR_D26), MP_ROM_PTR(&pin_GPIO26) }, + { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26) }, + { MP_ROM_QSTR(MP_QSTR_D22), MP_ROM_PTR(&pin_GPIO22) }, + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO22) }, + { MP_ROM_QSTR(MP_QSTR_D20), MP_ROM_PTR(&pin_GPIO20) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO20) }, + { MP_ROM_QSTR(MP_QSTR_D23), MP_ROM_PTR(&pin_GPIO23) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO23) }, + { MP_ROM_QSTR(MP_QSTR_D21), MP_ROM_PTR(&pin_GPIO21) }, + + // Bottom, left->right + { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO12) }, + { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_GPIO14) }, + { MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_GPIO15) }, + { MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_GPIO16) }, + + // Internals + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO25) }, + { MP_ROM_QSTR(MP_QSTR_VBUS_SENSE), MP_ROM_PTR(&pin_GPIO19) }, + { MP_ROM_QSTR(MP_QSTR_POWER_LED), MP_ROM_PTR(&pin_GPIO24) }, + + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From cf67cfa707289f1e4d38a45d5b9fe23c548c6fb3 Mon Sep 17 00:00:00 2001 From: Luc Date: Sun, 9 Jul 2023 14:29:28 +0000 Subject: [PATCH 088/241] Translated using Weblate (German) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/de/ --- locale/de_DE.po | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/locale/de_DE.po b/locale/de_DE.po index b4b6af060c..df78415721 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -6,14 +6,14 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-06-02 20:48+0000\n" -"Last-Translator: Ettore Atalan \n" +"PO-Revision-Date: 2023-07-10 14:50+0000\n" +"Last-Translator: Luc \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.18-dev\n" +"X-Generator: Weblate 5.0-dev\n" #: main.c msgid "" @@ -216,7 +216,7 @@ msgstr "%q muss ein Array vom Typ 'H' sein" #: shared-module/synthio/__init__.c msgid "%q must be array of type 'h'" -msgstr "" +msgstr "%q muss ein Array vom Typ 'h' sein" #: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c #: shared-bindings/canio/CAN.c shared-bindings/digitalio/Pull.c @@ -2481,7 +2481,7 @@ msgstr "Knopf A wurde beim Starten gedrückt." #: supervisor/shared/safe_mode.c msgid "You pressed the BOOT button at start up" -msgstr "Der BOOT-Knopf wurde beim Starten gedrückt." +msgstr "Der BOOT-Knopf wurde beim Starten gedrückt" #: ports/espressif/boards/adafruit_huzzah32_breakout/mpconfigboard.h msgid "You pressed the GPIO0 button at start up." @@ -2683,7 +2683,7 @@ msgstr "Puffersegmente müssen gleich lang sein" #: py/modstruct.c shared-bindings/struct/__init__.c #: shared-module/struct/__init__.c msgid "buffer too small" -msgstr "Der Puffer ist zu klein" +msgstr "Puffer zu klein" #: shared-bindings/socketpool/Socket.c shared-bindings/ssl/SSLSocket.c msgid "buffer too small for requested bytes" @@ -2720,7 +2720,7 @@ msgstr "kann nur bis zu 4 Parameter für die Xtensa assembly haben" #: extmod/ulab/code/ndarray.c msgid "can only specify one unknown dimension" -msgstr "" +msgstr "nur eine einzige unbekannte Dimension kann angegeben werden" #: py/objtype.c msgid "can't add special method to already-subclassed class" @@ -2883,7 +2883,7 @@ msgstr "Name %q kann nicht importiert werden" #: extmod/ulab/code/ndarray.c msgid "cannot reshape array" -msgstr "" +msgstr "Array kann nicht umgeformt werden" #: extmod/moductypes.c msgid "cannot unambiguously get sizeof scalar" @@ -4068,7 +4068,7 @@ msgstr "nicht unterstützt" #: extmod/ulab/code/ndarray.c msgid "shape must be integer or tuple of integers" -msgstr "" +msgstr "Form muss eine Ganzzahl oder ein Tupel von Ganzzahlen sein" #: shared-module/msgpack/__init__.c msgid "short read" From 293f1e32c45857d36b54644b0cf566b8014f01a3 Mon Sep 17 00:00:00 2001 From: Jose David M Date: Sun, 9 Jul 2023 03:02:18 +0000 Subject: [PATCH 089/241] Translated using Weblate (Spanish) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/es/ --- locale/es.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/es.po b/locale/es.po index 6a158b4bca..7fe8ac2cb1 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: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-05-23 22:55+0000\n" +"PO-Revision-Date: 2023-07-10 14:50+0000\n" "Last-Translator: Jose David M \n" "Language-Team: \n" "Language: es\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.18-dev\n" +"X-Generator: Weblate 5.0-dev\n" #: main.c msgid "" @@ -1213,7 +1213,7 @@ msgstr "La instruccion %d mueve mas bits que la cuenta del pin" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Instruction %d shifts out more bits than pin count" -msgstr "La instruccion %d mueve mas bits que la cuenta del pin" +msgstr "La instrucción %d mueve mas bits que la cuenta del pin" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format From 164fcb22c25f61a9578c70e2c631d500bd01f3af Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 28 Jun 2023 09:59:57 -0500 Subject: [PATCH 090/241] Enable "from __future__ import annotations" on unix build --- .../unix/variants/coverage/mpconfigvariant.mk | 2 ++ tests/unix/extra_coverage.py.exp | 32 +++++++++---------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/ports/unix/variants/coverage/mpconfigvariant.mk b/ports/unix/variants/coverage/mpconfigvariant.mk index f63054bdd6..9289e9cb4d 100644 --- a/ports/unix/variants/coverage/mpconfigvariant.mk +++ b/ports/unix/variants/coverage/mpconfigvariant.mk @@ -28,6 +28,7 @@ $(BUILD)/lib/quirc/lib/%.o: CFLAGS += -Wno-shadow -Wno-sign-compare -include sha SRC_BITMAP := \ shared/runtime/context_manager_helpers.c \ displayio_min.c \ + shared-bindings/__future__/__init__.c \ shared-bindings/aesio/aes.c \ shared-bindings/aesio/__init__.c \ shared-bindings/audiocore/__init__.c \ @@ -85,6 +86,7 @@ CFLAGS += \ -DCIRCUITPY_AUDIOCORE_DEBUG=1 \ -DCIRCUITPY_BITMAPTOOLS=1 \ -DCIRCUITPY_DISPLAYIO_UNIX=1 \ + -DCIRCUITPY_FUTURE=1 \ -DCIRCUITPY_GIFIO=1 \ -DCIRCUITPY_OS_GETENV=1 \ -DCIRCUITPY_RAINBOWIO=1 \ diff --git a/tests/unix/extra_coverage.py.exp b/tests/unix/extra_coverage.py.exp index c750ca0e95..0711da6a22 100644 --- a/tests/unix/extra_coverage.py.exp +++ b/tests/unix/extra_coverage.py.exp @@ -29,22 +29,22 @@ RuntimeError: ame__ mport -builtins micropython _asyncio _thread -_uasyncio aesio array audiocore -audiomixer binascii bitmaptools btree -cexample cmath collections cppexample -displayio errno ffi framebuf -gc hashlib json math -qrio rainbowio re struct -synthio sys termios traceback -ubinascii uctypes uerrno uheapq -uio ujson ulab ulab.numpy -ulab.numpy.fft ulab.numpy.linalg ulab.scipy -ulab.scipy.linalg ulab.scipy.optimize -ulab.scipy.signal ulab.scipy.special -ulab.utils uos urandom ure -uselect utime utimeq uzlib -zlib +builtins micropython __future__ _asyncio +_thread _uasyncio aesio array +audiocore audiomixer binascii bitmaptools +btree cexample cmath collections +cppexample displayio errno ffi +framebuf gc hashlib json +math qrio rainbowio re +struct synthio sys termios +traceback ubinascii uctypes uerrno +uheapq uio ujson ulab +ulab.numpy ulab.numpy.fft ulab.numpy.linalg +ulab.scipy ulab.scipy.linalg +ulab.scipy.optimize ulab.scipy.signal +ulab.scipy.special ulab.utils uos +urandom ure uselect utime +utimeq uzlib zlib ime utime utimeq From f8edecf473198bcdb3bd5e2665a196e2540c2525 Mon Sep 17 00:00:00 2001 From: Marco van der Kolk Date: Mon, 10 Jul 2023 22:16:22 +0200 Subject: [PATCH 091/241] corrected formatting --- shared-bindings/keypad/ShiftRegisterKeys.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/shared-bindings/keypad/ShiftRegisterKeys.c b/shared-bindings/keypad/ShiftRegisterKeys.c index b96c7b0a50..3d1a8d6842 100644 --- a/shared-bindings/keypad/ShiftRegisterKeys.c +++ b/shared-bindings/keypad/ShiftRegisterKeys.c @@ -84,7 +84,7 @@ //| ... STATIC mp_obj_t keypad_shiftregisterkeys_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { -#if CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS + #if CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS keypad_shiftregisterkeys_obj_t *self = m_new_obj(keypad_shiftregisterkeys_obj_t); self->base.type = &keypad_shiftregisterkeys_type; enum { ARG_clock, ARG_data, ARG_latch, ARG_value_to_latch, ARG_key_count, ARG_value_when_pressed, ARG_interval, ARG_max_events }; @@ -159,9 +159,9 @@ STATIC mp_obj_t keypad_shiftregisterkeys_make_new(const mp_obj_type_t *type, siz return MP_OBJ_FROM_PTR(self); -#else + #else mp_raise_NotImplementedError_varg(translate("%q"), MP_QSTR_ShiftRegisterKeys); -#endif + #endif } #if CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS @@ -225,7 +225,7 @@ const mp_obj_type_t keypad_shiftregisterkeys_type = { { &mp_type_type }, .name = MP_QSTR_ShiftRegisterKeys, .make_new = keypad_shiftregisterkeys_make_new, -#if CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS + #if CIRCUITPY_KEYPAD_SHIFTREGISTERKEYS .locals_dict = (mp_obj_t)&keypad_shiftregisterkeys_locals_dict, -#endif + #endif }; From 2686beab36e73975cbb91d0cb87bda1e66a8c83c Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Tue, 2 May 2023 12:13:54 -0700 Subject: [PATCH 092/241] Basic USB host support and keyboard workflow Connects up read, write and ctrl_transfer to TinyUSB. USB Host support is available on iMX RT and RP2040. Fixes #6527 (imx) and fixes #5986 (rp2). --- .gitmodules | 4 + lib/tinyusb | 2 +- locale/circuitpython.pot | 9 +- ports/mimxrt10xx/Makefile | 23 +- .../boards/imxrt1060_evk/mpconfigboard.h | 4 +- ports/mimxrt10xx/linking/common.ld | 7 + ports/raspberrypi/Makefile | 14 +- .../adafruit_feather_rp2040_usb_host/board.c | 14 + .../mpconfigboard.h | 5 + .../common-hal/rp2pio/StateMachine.h | 2 + ports/raspberrypi/common-hal/usb_host/Port.c | 165 ++++++++++++ ports/raspberrypi/common-hal/usb_host/Port.h | 38 +++ .../common-hal/usb_host/__init__.c | 27 ++ ports/raspberrypi/lib/Pico-PIO-USB | 1 + ports/raspberrypi/link.ld | 7 +- ports/raspberrypi/mpconfigport.h | 11 + ports/raspberrypi/mpconfigport.mk | 1 + ports/raspberrypi/supervisor/port.c | 7 +- py/circuitpy_mpconfig.mk | 3 + shared-bindings/usb/core/Device.c | 30 ++- shared-bindings/usb/core/Device.h | 5 +- shared-bindings/usb/core/__init__.c | 13 +- shared-module/usb/core/Device.c | 192 +++++++++++--- shared-module/usb/core/Device.h | 2 + supervisor/shared/background_callback.c | 6 +- supervisor/shared/serial.c | 12 + supervisor/shared/usb/host_keyboard.c | 241 ++++++++++++++++++ supervisor/shared/usb/tusb_config.h | 8 +- supervisor/shared/usb/usb.c | 5 +- supervisor/shared/workflow.c | 3 + supervisor/supervisor.mk | 2 + supervisor/usb.h | 10 + 32 files changed, 811 insertions(+), 62 deletions(-) create mode 100644 ports/raspberrypi/common-hal/usb_host/Port.c create mode 100644 ports/raspberrypi/common-hal/usb_host/Port.h create mode 100644 ports/raspberrypi/common-hal/usb_host/__init__.c create mode 160000 ports/raspberrypi/lib/Pico-PIO-USB create mode 100644 supervisor/shared/usb/host_keyboard.c diff --git a/.gitmodules b/.gitmodules index 91afffe6a6..5c29c41b9f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -341,3 +341,7 @@ [submodule "frozen/Adafruit_CircuitPython_Wave"] path = frozen/Adafruit_CircuitPython_Wave url = http://github.com/adafruit/Adafruit_CircuitPython_Wave.git +[submodule "ports/raspberrypi/lib/Pico-PIO-USB"] + path = ports/raspberrypi/lib/Pico-PIO-USB + url = https://github.com/sekigon-gonnoc/Pico-PIO-USB.git + branch = main diff --git a/lib/tinyusb b/lib/tinyusb index e3b3229d61..f1e006d09b 160000 --- a/lib/tinyusb +++ b/lib/tinyusb @@ -1 +1 @@ -Subproject commit e3b3229d61676585879c81d5f2e3393a2a1f1b16 +Subproject commit f1e006d09bd32088ab421d0b519eb89c531eda4e diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 282d229856..368836a4db 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -471,12 +471,17 @@ msgstr "" msgid "All channels in use" msgstr "" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "" @@ -1950,10 +1955,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/ports/mimxrt10xx/Makefile b/ports/mimxrt10xx/Makefile index c591cf189e..24e3c59b13 100644 --- a/ports/mimxrt10xx/Makefile +++ b/ports/mimxrt10xx/Makefile @@ -229,12 +229,19 @@ include $(TOP)/py/mkrules.mk print-%: @echo $* = $($*) -ifeq ($(CHIP_FAMILY), MIMXRT1062) -PYOCD_TARGET = mimxrt1060 -endif +# Flash using jlink +define jlink_script +halt +loadfile $^ +r +go +exit +endef +export jlink_script -# Flash using pyocd -PYOCD_OPTION ?= -flash: $(BUILD)/firmware.hex - pyocd flash -t $(PYOCD_TARGET) $(PYOCD_OPTION) $< - pyocd reset -t $(PYOCD_TARGET) +JLINKEXE = JLinkExe +flash-jlink: $(BUILD)/firmware.elf + @echo "$$jlink_script" > $(BUILD)/firmware.jlink + $(JLINKEXE) -device $(CHIP_FAMILY)xxx5A -if swd -JTAGConf -1,-1 -speed auto -CommandFile $(BUILD)/firmware.jlink + +flash: flash-jlink diff --git a/ports/mimxrt10xx/boards/imxrt1060_evk/mpconfigboard.h b/ports/mimxrt10xx/boards/imxrt1060_evk/mpconfigboard.h index 3b63172328..23058e6952 100644 --- a/ports/mimxrt10xx/boards/imxrt1060_evk/mpconfigboard.h +++ b/ports/mimxrt10xx/boards/imxrt1060_evk/mpconfigboard.h @@ -21,5 +21,5 @@ // Put host on the first USB so that right angle OTG adapters can fit. This is // the right port when looking at the board. -#define CIRCUITPY_USB_DEVICE_INSTANCE 1 -#define CIRCUITPY_USB_HOST_INSTANCE 0 +#define CIRCUITPY_USB_DEVICE_INSTANCE 0 +#define CIRCUITPY_USB_HOST_INSTANCE 1 diff --git a/ports/mimxrt10xx/linking/common.ld b/ports/mimxrt10xx/linking/common.ld index a3ed2dbdbf..71e2c457c3 100644 --- a/ports/mimxrt10xx/linking/common.ld +++ b/ports/mimxrt10xx/linking/common.ld @@ -72,6 +72,7 @@ SECTIONS *(EXCLUDE_FILE( *fsl_flexspi.o *dcd_ci_hs.o + *ehci.o *tusb_fifo.o *usbd.o *string0.o @@ -88,6 +89,11 @@ SECTIONS We try to only keep USB interrupt related functions. */ *dcd_ci_hs.o(.text.process_*_request .text.dcd_edpt* .text.dcd_init .text.dcd_set_address) *usbd.o(.text.process_*_request .text.process_[gs]et* .text.tud_* .text.usbd_* .text.configuration_reset .text.invoke_*) + *ehci.o(.text.hcd_edpt* .text.hcd_setup* .text.ehci_init* .text.hcd_port* .text.hcd_device* .text.qtd_init* .text.list_remove*) + + /* Less critical portions of the runtime. */ + *runtime.o(.text.mp_import* .text.mp_resume* .text.mp_make_raise* .text.mp_init) + *gc.o(.text.gc_never_free .text.gc_make_long_lived) /* Anything marked cold/unlikely should be in flash. */ *(.text.unlikely.*) @@ -146,6 +152,7 @@ SECTIONS *(.itcm.*) *fsl_flexspi.o(.text*) *dcd_ci_hs.o(.text*) + *ehci.o(.text*) *tusb_fifo.o(.text*) *py/objboundmeth.o(.text*) *py/objtype.o(.text*) diff --git a/ports/raspberrypi/Makefile b/ports/raspberrypi/Makefile index 7eb67b77ba..f635750415 100644 --- a/ports/raspberrypi/Makefile +++ b/ports/raspberrypi/Makefile @@ -148,7 +148,7 @@ INC += \ CFLAGS += -DRASPBERRYPI -DPICO_ON_DEVICE=1 -DPICO_NO_BINARY_INFO=0 -DPICO_TIME_DEFAULT_ALARM_POOL_DISABLED=0 -DPICO_DIVIDER_CALL_IDIV0=0 -DPICO_DIVIDER_CALL_LDIV0=0 -DPICO_DIVIDER_HARDWARE=1 -DPICO_DOUBLE_ROM=1 -DPICO_FLOAT_ROM=1 -DPICO_MULTICORE=1 -DPICO_BITS_IN_RAM=0 -DPICO_DIVIDER_IN_RAM=0 -DPICO_DOUBLE_PROPAGATE_NANS=0 -DPICO_DOUBLE_IN_RAM=0 -DPICO_MEM_IN_RAM=0 -DPICO_FLOAT_IN_RAM=0 -DPICO_FLOAT_PROPAGATE_NANS=1 -DPICO_NO_FLASH=0 -DPICO_COPY_TO_RAM=0 -DPICO_DISABLE_SHARED_IRQ_HANDLERS=0 -DPICO_NO_BI_BOOTSEL_VIA_DOUBLE_RESET=0 -DDVI_1BPP_BIT_REVERSE=0 OPTIMIZATION_FLAGS ?= -O3 # TinyUSB defines -CFLAGS += -DTUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX=1 -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_CDC_RX_BUFSIZE=256 -DCFG_TUD_MIDI_TX_BUFSIZE=128 -DCFG_TUD_CDC_TX_BUFSIZE=256 -DCFG_TUD_MSC_BUFSIZE=1024 +CFLAGS += -DCFG_TUSB_OS=OPT_OS_PICO -DTUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX=1 -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_CDC_RX_BUFSIZE=256 -DCFG_TUD_MIDI_TX_BUFSIZE=128 -DCFG_TUD_CDC_TX_BUFSIZE=256 -DCFG_TUD_MSC_BUFSIZE=1024 # option to override default optimization level, set in boards/$(BOARD)/mpconfigboard.mk CFLAGS += $(OPTIMIZATION_FLAGS) @@ -258,6 +258,18 @@ SRC_C += \ $(SRC_CYW43) \ $(SRC_LWIP) \ + +ifeq ($(CIRCUITPY_USB_HOST), 1) +SRC_C += \ + lib/tinyusb/src/portable/raspberrypi/pio_usb/hcd_pio_usb.c \ + lib/Pico-PIO-USB/src/pio_usb.c \ + lib/Pico-PIO-USB/src/pio_usb_host.c \ + lib/Pico-PIO-USB/src/usb_crc.c \ + +INC += \ + -isystem lib/Pico-PIO-USB/src +endif + ifeq ($(CIRCUITPY_PICODVI),1) SRC_C += \ bindings/picodvi/__init__.c \ diff --git a/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/board.c b/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/board.c index 331653173e..724fde1d27 100644 --- a/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/board.c +++ b/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/board.c @@ -26,4 +26,18 @@ #include "supervisor/board.h" +#include "shared-bindings/digitalio/DigitalInOut.h" +#include "shared-bindings/usb_host/Port.h" + // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. + +usb_host_port_obj_t _host_port; +digitalio_digitalinout_obj_t _host_power; + +void board_init(void) { + common_hal_digitalio_digitalinout_construct(&_host_power, &pin_GPIO18); + common_hal_digitalio_digitalinout_never_reset(&_host_power); + common_hal_digitalio_digitalinout_switch_to_output(&_host_power, true, DRIVE_MODE_PUSH_PULL); + + common_hal_usb_host_port_construct(&_host_port, &pin_GPIO16, &pin_GPIO17); +} diff --git a/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/mpconfigboard.h b/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/mpconfigboard.h index f300bfe711..ba62bca2cb 100644 --- a/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/mpconfigboard.h +++ b/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/mpconfigboard.h @@ -12,3 +12,8 @@ #define DEFAULT_UART_BUS_RX (&pin_GPIO1) #define DEFAULT_UART_BUS_TX (&pin_GPIO0) + +#define CIRCUITPY_CONSOLE_UART_RX DEFAULT_UART_BUS_RX +#define CIRCUITPY_CONSOLE_UART_TX DEFAULT_UART_BUS_TX + +#define CIRCUITPY_USB_HOST_INSTANCE 1 diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.h b/ports/raspberrypi/common-hal/rp2pio/StateMachine.h index 71f85b1f11..f2d642bbad 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.h +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.h @@ -98,6 +98,8 @@ void rp2pio_statemachine_dma_complete(rp2pio_statemachine_obj_t *self, int chann void rp2pio_statemachine_reset_ok(PIO pio, int sm); void rp2pio_statemachine_never_reset(PIO pio, int sm); +uint8_t rp2pio_statemachine_find_pio(int program_size, int sm_count); + extern const mp_obj_type_t rp2pio_statemachine_type; #endif // MICROPY_INCLUDED_RASPBERRYPI_COMMON_HAL_RP2PIO_STATEMACHINE_H diff --git a/ports/raspberrypi/common-hal/usb_host/Port.c b/ports/raspberrypi/common-hal/usb_host/Port.c new file mode 100644 index 0000000000..9ad28c73ea --- /dev/null +++ b/ports/raspberrypi/common-hal/usb_host/Port.c @@ -0,0 +1,165 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2022 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "bindings/rp2pio/StateMachine.h" +#include "shared-bindings/microcontroller/Pin.h" +#include "shared-bindings/microcontroller/Processor.h" +#include "shared-bindings/usb_host/Port.h" +#include "supervisor/usb.h" + +#include "src/common/pico_time/include/pico/time.h" +#include "src/rp2040/hardware_structs/include/hardware/structs/mpu.h" +#include "src/rp2_common/cmsis/stub/CMSIS/Device/RaspberryPi/RP2040/Include/RP2040.h" +#include "src/rp2_common/hardware_dma/include/hardware/dma.h" +#include "src/rp2_common/pico_multicore/include/pico/multicore.h" + +#include "py/runtime.h" + +#include "tusb.h" + +#include "lib/Pico-PIO-USB/src/pio_usb.h" +#include "lib/Pico-PIO-USB/src/pio_usb_configuration.h" + +#include "supervisor/serial.h" + +bool usb_host_init; + +STATIC PIO pio_instances[2] = {pio0, pio1}; +volatile bool _core1_ready = false; + +static void __not_in_flash_func(core1_main)(void) { + // The MPU is reset before this starts. + SysTick->LOAD = (uint32_t)((common_hal_mcu_processor_get_frequency() / 1000) - 1UL); + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | // Processor clock. + SysTick_CTRL_ENABLE_Msk; + + // Turn off flash access. After this, it will hard fault. Better than messing + // up CIRCUITPY. + MPU->CTRL = MPU_CTRL_PRIVDEFENA_Msk | MPU_CTRL_ENABLE_Msk; + MPU->RNR = 6; // 7 is used by pico-sdk stack protection. + MPU->RBAR = XIP_MAIN_BASE | MPU_RBAR_VALID_Msk; + MPU->RASR = MPU_RASR_XN_Msk | // Set execute never and everything else is restricted. + MPU_RASR_ENABLE_Msk | + (0x1b << MPU_RASR_SIZE_Pos); // Size is 0x10000000 which masks up to SRAM region. + MPU->RNR = 7; + + _core1_ready = true; + + while (true) { + pio_usb_host_frame(); + if (tuh_task_event_ready()) { + // Queue the tinyusb background task. + usb_background_schedule(); + } + // Wait for systick to reload. + while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) { + } + } +} + +STATIC uint8_t _sm_free_count(uint8_t pio_index) { + PIO pio = pio_instances[pio_index]; + uint8_t free_count = 0; + for (size_t j = 0; j < NUM_PIO_STATE_MACHINES; j++) { + if (!pio_sm_is_claimed(pio, j)) { + free_count++; + } + } + return free_count; +} + +STATIC bool _has_program_room(uint8_t pio_index, uint8_t program_size) { + PIO pio = pio_instances[pio_index]; + pio_program_t program_struct = { + .instructions = NULL, + .length = program_size, + .origin = -1 + }; + return pio_can_add_program(pio, &program_struct); +} + +void common_hal_usb_host_port_construct(usb_host_port_obj_t *self, const mcu_pin_obj_t *dp, const mcu_pin_obj_t *dm) { + if (dp->number + 1 != dm->number) { + raise_ValueError_invalid_pins(); + } + pio_usb_configuration_t pio_cfg = PIO_USB_DEFAULT_CONFIG; + pio_cfg.skip_alarm_pool = true; + pio_cfg.pin_dp = dp->number; + pio_cfg.pio_tx_num = 0; + pio_cfg.pio_rx_num = 1; + // PIO with room for 22 instructions + // PIO with room for 31 instructions and two free SM. + if (!_has_program_room(pio_cfg.pio_tx_num, 22) || _sm_free_count(pio_cfg.pio_tx_num) < 1 || + !_has_program_room(pio_cfg.pio_rx_num, 31) || _sm_free_count(pio_cfg.pio_rx_num) < 2) { + mp_raise_RuntimeError(translate("All state machines in use")); + } + pio_cfg.tx_ch = dma_claim_unused_channel(false); // DMA channel + if (pio_cfg.tx_ch < 0) { + mp_raise_RuntimeError(translate("All dma channels in use")); + } + + PIO tx_pio = pio_instances[pio_cfg.pio_tx_num]; + pio_cfg.sm_tx = pio_claim_unused_sm(tx_pio, false); + PIO rx_pio = pio_instances[pio_cfg.pio_rx_num]; + pio_cfg.sm_rx = pio_claim_unused_sm(rx_pio, false); + pio_cfg.sm_eop = pio_claim_unused_sm(rx_pio, false); + + // Unclaim everything so that the library can. + dma_channel_unclaim(pio_cfg.tx_ch); + pio_sm_unclaim(tx_pio, pio_cfg.sm_tx); + pio_sm_unclaim(rx_pio, pio_cfg.sm_rx); + pio_sm_unclaim(rx_pio, pio_cfg.sm_eop); + + // Set all of the state machines to never reset. + rp2pio_statemachine_never_reset(tx_pio, pio_cfg.sm_tx); + rp2pio_statemachine_never_reset(rx_pio, pio_cfg.sm_rx); + rp2pio_statemachine_never_reset(rx_pio, pio_cfg.sm_eop); + + common_hal_never_reset_pin(dp); + common_hal_never_reset_pin(dm); + + // Core 1 will run the SOF interrupt directly. + _core1_ready = false; + multicore_launch_core1(core1_main); + while (!_core1_ready) { + } + + tuh_configure(TUH_OPT_RHPORT, TUH_CFGID_RPI_PIO_USB_CONFIGURATION, &pio_cfg); + tuh_init(TUH_OPT_RHPORT); + + self->init = true; + usb_host_init = true; +} + +void common_hal_usb_host_port_deinit(usb_host_port_obj_t *self) { + self->init = false; + usb_host_init = false; +} + +bool common_hal_usb_host_port_deinited(usb_host_port_obj_t *self) { + return !self->init; +} diff --git a/ports/raspberrypi/common-hal/usb_host/Port.h b/ports/raspberrypi/common-hal/usb_host/Port.h new file mode 100644 index 0000000000..c9294debb2 --- /dev/null +++ b/ports/raspberrypi/common-hal/usb_host/Port.h @@ -0,0 +1,38 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2023 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include "py/obj.h" + +typedef struct { + mp_obj_base_t base; + bool init; +} usb_host_port_obj_t; + +// Cheater state so that the usb module knows if it should return the TinyUSB +// state. +extern bool usb_host_init; diff --git a/ports/raspberrypi/common-hal/usb_host/__init__.c b/ports/raspberrypi/common-hal/usb_host/__init__.c new file mode 100644 index 0000000000..3b54bd6a5d --- /dev/null +++ b/ports/raspberrypi/common-hal/usb_host/__init__.c @@ -0,0 +1,27 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2022 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Nothing diff --git a/ports/raspberrypi/lib/Pico-PIO-USB b/ports/raspberrypi/lib/Pico-PIO-USB new file mode 160000 index 0000000000..5a7aa8d4e7 --- /dev/null +++ b/ports/raspberrypi/lib/Pico-PIO-USB @@ -0,0 +1 @@ +Subproject commit 5a7aa8d4e78f9a50e4fb9defcf3488b3fc44aff1 diff --git a/ports/raspberrypi/link.ld b/ports/raspberrypi/link.ld index 1e758f61bf..0e584c94ac 100644 --- a/ports/raspberrypi/link.ld +++ b/ports/raspberrypi/link.ld @@ -80,7 +80,9 @@ SECTIONS *(.property_getset) __property_getset_end = .; - *(EXCLUDE_FILE(*libgcc.a: *libc.a:*lib_a-mem*.o *libm.a: *interp.o *divider.o) .text*) + *(EXCLUDE_FILE(*libgcc.a: *libc.a:*lib_a-mem*.o *libm.a: *interp.o *divider.o *tusb_fifo.o *mem_ops_aeabi.o *usbh.o) .text*) + /* Allow everything in usbh.o except tuh_task_event_ready because we read it from core 1. */ + *usbh.o (.text.[_uphc]* .text.tuh_[cmvied]* .text.tuh_task_ext*) *(.fini) /* Pull all c'tors into .text */ *crtbegin.o(.ctors) @@ -169,7 +171,7 @@ SECTIONS . = ALIGN(4); /* init data */ PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) + KEEP(*(SORT(.init_array*))) KEEP(*(.init_array)) PROVIDE_HIDDEN (__init_array_end = .); @@ -248,6 +250,7 @@ SECTIONS __scratch_x_start__ = .; *(.scratch_x.*) *tmds_encode.o (.time_critical*) + *timer.o (.text.hardware_alarm_irq_handler) . = ALIGN(4); __scratch_x_end__ = .; } > SCRATCH_X AT > FLASH_FIRMWARE diff --git a/ports/raspberrypi/mpconfigport.h b/ports/raspberrypi/mpconfigport.h index a2eb9a15ef..4458107974 100644 --- a/ports/raspberrypi/mpconfigport.h +++ b/ports/raspberrypi/mpconfigport.h @@ -48,6 +48,10 @@ #define CIRCUITPY_PROCESSOR_COUNT (2) +#if CIRCUITPY_USB_HOST +#define CIRCUITPY_USB_HOST_INSTANCE 1 +#endif + // This also includes mpconfigboard.h. #include "py/circuitpy_mpconfig.h" @@ -64,4 +68,11 @@ #define MICROPY_PY_LWIP_EXIT cyw43_arch_lwip_end(); #endif +// Protect the background queue with a lock because both cores may modify it. +#include "pico/critical_section.h" +extern critical_section_t background_queue_lock; +#define CALLBACK_CRITICAL_BEGIN (critical_section_enter_blocking(&background_queue_lock)) +#define CALLBACK_CRITICAL_END (critical_section_exit(&background_queue_lock)) + + #endif // __INCLUDED_MPCONFIGPORT_H diff --git a/ports/raspberrypi/mpconfigport.mk b/ports/raspberrypi/mpconfigport.mk index cdee964410..fdc2b0922a 100644 --- a/ports/raspberrypi/mpconfigport.mk +++ b/ports/raspberrypi/mpconfigport.mk @@ -20,6 +20,7 @@ CIRCUITPY_RGBMATRIX ?= $(CIRCUITPY_DISPLAYIO) CIRCUITPY_ROTARYIO ?= 1 CIRCUITPY_ROTARYIO_SOFTENCODER = 1 CIRCUITPY_SYNTHIO_MAX_CHANNELS = 12 +CIRCUITPY_USB_HOST ?= 1 # Things that need to be implemented. # Use PWM internally diff --git a/ports/raspberrypi/supervisor/port.c b/ports/raspberrypi/supervisor/port.c index 08a9d96c2e..9415d36aa6 100644 --- a/ports/raspberrypi/supervisor/port.c +++ b/ports/raspberrypi/supervisor/port.c @@ -76,6 +76,8 @@ #include "tusb.h" #include +critical_section_t background_queue_lock; + extern volatile bool mp_msc_enabled; STATIC void _tick_callback(uint alarm_num); @@ -128,6 +130,9 @@ safe_mode_t port_init(void) { (&_ld_dtcm_bss_start)[i] = 0; } + // Set up the critical section to protect the background task queue. + critical_section_init(&background_queue_lock); + #if CIRCUITPY_CYW43 never_reset_pin_number(23); never_reset_pin_number(24); @@ -299,7 +304,7 @@ void port_interrupt_after_ticks(uint32_t ticks) { void port_idle_until_interrupt(void) { common_hal_mcu_disable_interrupts(); - if (!background_callback_pending() && !tud_task_event_ready() && !_woken_up) { + if (!background_callback_pending() && !tud_task_event_ready() && !tuh_task_event_ready() && !_woken_up) { __DSB(); __WFI(); } diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 3e43909687..210c402c77 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -525,6 +525,9 @@ CFLAGS += -DCIRCUITPY_USB_HOST=$(CIRCUITPY_USB_HOST) CIRCUITPY_USB_IDENTIFICATION ?= $(CIRCUITPY_USB) CFLAGS += -DCIRCUITPY_USB_IDENTIFICATION=$(CIRCUITPY_USB_IDENTIFICATION) +CIRCUITPY_USB_KEYBOARD_WORKFLOW ?= $(CIRCUITPY_USB_HOST) +CFLAGS += -DCIRCUITPY_USB_KEYBOARD_WORKFLOW=$(CIRCUITPY_USB_KEYBOARD_WORKFLOW) + # MIDI is available by default, but is not turned on if there are fewer than 8 endpoints. CIRCUITPY_USB_MIDI ?= $(CIRCUITPY_USB) CFLAGS += -DCIRCUITPY_USB_MIDI=$(CIRCUITPY_USB_MIDI) diff --git a/shared-bindings/usb/core/Device.c b/shared-bindings/usb/core/Device.c index 40bb01dc08..d5525431a3 100644 --- a/shared-bindings/usb/core/Device.c +++ b/shared-bindings/usb/core/Device.c @@ -123,6 +123,30 @@ MP_DEFINE_CONST_FUN_OBJ_1(usb_core_device_get_manufacturer_obj, usb_core_device_ MP_PROPERTY_GETTER(usb_core_device_manufacturer_obj, (mp_obj_t)&usb_core_device_get_manufacturer_obj); +//| def set_configuration(self, configuration=None): +//| """Set the active configuration. +//| +//| The configuration parameter is the bConfigurationValue field of the +//| configuration you want to set as active. If you call this method +//| without parameter, it will use the first configuration found. As a +//| device hardly ever has more than one configuration, calling the method +//| without arguments is enough to get the device ready. +//| """ +//| ... +STATIC mp_obj_t usb_core_device_set_configuration(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + enum { ARG_configuration }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_configuration, MP_ARG_INT, {.u_int = 0x100} }, + }; + usb_core_device_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]); + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + common_hal_usb_core_device_set_configuration(self, args[ARG_configuration].u_int); + return mp_const_none; +} +MP_DEFINE_CONST_FUN_OBJ_KW(usb_core_device_set_configuration_obj, 1, usb_core_device_set_configuration); + //| def write(self, endpoint: int, data: ReadableBuffer, timeout: Optional[int] = None) -> int: //| """Write data to a specific endpoint on the device. //| @@ -223,7 +247,10 @@ STATIC mp_obj_t usb_core_device_ctrl_transfer(size_t n_args, const mp_obj_t *pos mp_buffer_info_t bufinfo; // check request type - if ((args[ARG_bmRequestType].u_int & 0x80) != 0) { + if (args[ARG_data_or_wLength].u_obj == mp_const_none) { + bufinfo.len = 0; + bufinfo.buf = NULL; + } else if ((args[ARG_bmRequestType].u_int & 0x80) != 0) { mp_get_buffer_raise(args[ARG_data_or_wLength].u_obj, &bufinfo, MP_BUFFER_WRITE); } else { mp_get_buffer_raise(args[ARG_data_or_wLength].u_obj, &bufinfo, MP_BUFFER_READ); @@ -292,6 +319,7 @@ STATIC const mp_rom_map_elem_t usb_core_device_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_product), MP_ROM_PTR(&usb_core_device_product_obj) }, { MP_ROM_QSTR(MP_QSTR_manufacturer), MP_ROM_PTR(&usb_core_device_manufacturer_obj) }, + { MP_ROM_QSTR(MP_QSTR_set_configuration),MP_ROM_PTR(&usb_core_device_set_configuration_obj) }, { MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&usb_core_device_write_obj) }, { MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&usb_core_device_read_obj) }, { MP_ROM_QSTR(MP_QSTR_ctrl_transfer), MP_ROM_PTR(&usb_core_device_ctrl_transfer_obj) }, diff --git a/shared-bindings/usb/core/Device.h b/shared-bindings/usb/core/Device.h index c7086e99ff..c9de5d505f 100644 --- a/shared-bindings/usb/core/Device.h +++ b/shared-bindings/usb/core/Device.h @@ -39,8 +39,9 @@ uint16_t common_hal_usb_core_device_get_idProduct(usb_core_device_obj_t *self); mp_obj_t common_hal_usb_core_device_get_serial_number(usb_core_device_obj_t *self); mp_obj_t common_hal_usb_core_device_get_product(usb_core_device_obj_t *self); mp_obj_t common_hal_usb_core_device_get_manufacturer(usb_core_device_obj_t *self); -mp_obj_t common_hal_usb_core_device_write(usb_core_device_obj_t *self, mp_int_t endpoint, const uint8_t *buffer, mp_int_t len, mp_int_t timeout); -mp_obj_t common_hal_usb_core_device_read(usb_core_device_obj_t *self, mp_int_t endpoint, uint8_t *buffer, mp_int_t len, mp_int_t timeout); +void common_hal_usb_core_device_set_configuration(usb_core_device_obj_t *self, mp_int_t configuration); +mp_int_t common_hal_usb_core_device_write(usb_core_device_obj_t *self, mp_int_t endpoint, const uint8_t *buffer, mp_int_t len, mp_int_t timeout); +mp_int_t common_hal_usb_core_device_read(usb_core_device_obj_t *self, mp_int_t endpoint, uint8_t *buffer, mp_int_t len, mp_int_t timeout); mp_int_t common_hal_usb_core_device_ctrl_transfer(usb_core_device_obj_t *self, mp_int_t bmRequestType, mp_int_t bRequest, mp_int_t wValue, mp_int_t wIndex, diff --git a/shared-bindings/usb/core/__init__.c b/shared-bindings/usb/core/__init__.c index faeef23a88..7c171e85d6 100644 --- a/shared-bindings/usb/core/__init__.c +++ b/shared-bindings/usb/core/__init__.c @@ -49,10 +49,15 @@ //| MP_DEFINE_USB_CORE_EXCEPTION(USBError, OSError) NORETURN void mp_raise_usb_core_USBError(const compressed_string_t *fmt, ...) { - va_list argptr; - va_start(argptr,fmt); - mp_obj_t exception = mp_obj_new_exception_msg_vlist(&mp_type_usb_core_USBError, fmt, argptr); - va_end(argptr); + mp_obj_t exception; + if (fmt == NULL) { + exception = mp_obj_new_exception(&mp_type_usb_core_USBError); + } else { + va_list argptr; + va_start(argptr,fmt); + exception = mp_obj_new_exception_msg_vlist(&mp_type_usb_core_USBError, fmt, argptr); + va_end(argptr); + } nlr_raise(exception); } diff --git a/shared-module/usb/core/Device.c b/shared-module/usb/core/Device.c index 706c94eec3..67756341ec 100644 --- a/shared-module/usb/core/Device.c +++ b/shared-module/usb/core/Device.c @@ -34,15 +34,30 @@ #include "shared-bindings/usb/core/__init__.h" #include "shared-module/usb/utf16le.h" #include "supervisor/shared/tick.h" +#include "supervisor/usb.h" +// Track what device numbers are mounted. We can't use tuh_ready() because it is +// true before enumeration completes and TinyUSB drivers are started. +STATIC size_t _mounted_devices = 0; + +void tuh_mount_cb(uint8_t dev_addr) { + _mounted_devices |= 1 << dev_addr; +} + +void tuh_umount_cb(uint8_t dev_addr) { + _mounted_devices &= ~(1 << dev_addr); +} + +STATIC xfer_result_t _xfer_result; bool common_hal_usb_core_device_construct(usb_core_device_obj_t *self, uint8_t device_number) { if (device_number == 0 || device_number > CFG_TUH_DEVICE_MAX + CFG_TUH_HUB) { return false; } - if (!tuh_ready(device_number)) { + if ((_mounted_devices & (1 << device_number)) == 0) { return false; } self->device_number = device_number; + _xfer_result = 0xff; return true; } @@ -60,19 +75,21 @@ uint16_t common_hal_usb_core_device_get_idProduct(usb_core_device_obj_t *self) { return pid; } -STATIC xfer_result_t _get_string_result; STATIC void _transfer_done_cb(tuh_xfer_t *xfer) { // Store the result so we stop waiting for the transfer. - _get_string_result = xfer->result; + _xfer_result = xfer->result; } -STATIC void _wait_for_callback(void) { +STATIC bool _wait_for_callback(void) { while (!mp_hal_is_interrupted() && - _get_string_result == 0xff) { + _xfer_result == 0xff) { // The background tasks include TinyUSB which will call the function // we provided above. In other words, the callback isn't in an interrupt. RUN_BACKGROUND_TASKS; } + xfer_result_t result = _xfer_result; + _xfer_result = 0xff; + return result == XFER_RESULT_SUCCESS; } STATIC mp_obj_t _get_string(const uint16_t *temp_buf) { @@ -84,46 +101,145 @@ STATIC mp_obj_t _get_string(const uint16_t *temp_buf) { } mp_obj_t common_hal_usb_core_device_get_serial_number(usb_core_device_obj_t *self) { - _get_string_result = 0xff; uint16_t temp_buf[127]; - if (!tuh_descriptor_get_serial_string(self->device_number, 0, temp_buf, MP_ARRAY_SIZE(temp_buf), _transfer_done_cb, 0)) { + if (!tuh_descriptor_get_serial_string(self->device_number, 0, temp_buf, MP_ARRAY_SIZE(temp_buf), _transfer_done_cb, 0) || + !_wait_for_callback()) { return mp_const_none; } - _wait_for_callback(); return _get_string(temp_buf); } mp_obj_t common_hal_usb_core_device_get_product(usb_core_device_obj_t *self) { - _get_string_result = 0xff; uint16_t temp_buf[127]; - if (!tuh_descriptor_get_product_string(self->device_number, 0, temp_buf, MP_ARRAY_SIZE(temp_buf), _transfer_done_cb, 0)) { + if (!tuh_descriptor_get_product_string(self->device_number, 0, temp_buf, MP_ARRAY_SIZE(temp_buf), _transfer_done_cb, 0) || + !_wait_for_callback()) { return mp_const_none; } - _wait_for_callback(); return _get_string(temp_buf); } mp_obj_t common_hal_usb_core_device_get_manufacturer(usb_core_device_obj_t *self) { - _get_string_result = 0xff; uint16_t temp_buf[127]; - if (!tuh_descriptor_get_manufacturer_string(self->device_number, 0, temp_buf, MP_ARRAY_SIZE(temp_buf), _transfer_done_cb, 0)) { + if (!tuh_descriptor_get_manufacturer_string(self->device_number, 0, temp_buf, MP_ARRAY_SIZE(temp_buf), _transfer_done_cb, 0) || + !_wait_for_callback()) { return mp_const_none; } - _wait_for_callback(); return _get_string(temp_buf); } -mp_obj_t common_hal_usb_core_device_write(usb_core_device_obj_t *self, mp_int_t endpoint, const uint8_t *buffer, mp_int_t len, mp_int_t timeout) { - return mp_const_none; +void common_hal_usb_core_device_set_configuration(usb_core_device_obj_t *self, mp_int_t configuration) { + if (configuration == 0x100) { + tusb_desc_configuration_t desc; + if (!tuh_descriptor_get_configuration(self->device_number, 0, &desc, sizeof(desc), _transfer_done_cb, 0) || + !_wait_for_callback()) { + return; + } + configuration = desc.bConfigurationValue; + } + tuh_configuration_set(self->device_number, configuration, _transfer_done_cb, 0); + _wait_for_callback(); } -mp_obj_t common_hal_usb_core_device_read(usb_core_device_obj_t *self, mp_int_t endpoint, uint8_t *buffer, mp_int_t len, mp_int_t timeout) { - return mp_const_none; +STATIC size_t _xfer(tuh_xfer_t *xfer, mp_int_t timeout) { + _xfer_result = 0xff; + xfer->complete_cb = _transfer_done_cb; + if (!tuh_edpt_xfer(xfer)) { + mp_raise_usb_core_USBError(NULL); + } + uint32_t start_time = supervisor_ticks_ms32(); + while ((timeout == 0 || supervisor_ticks_ms32() - start_time < (uint32_t)timeout) && + !mp_hal_is_interrupted() && + _xfer_result == 0xff) { + // The background tasks include TinyUSB which will call the function + // we provided above. In other words, the callback isn't in an interrupt. + RUN_BACKGROUND_TASKS; + } + if (mp_hal_is_interrupted()) { + return 0; + } + xfer_result_t result = _xfer_result; + _xfer_result = 0xff; + if (result == XFER_RESULT_STALLED || result == 0xff) { + mp_raise_usb_core_USBTimeoutError(); + } + if (result == XFER_RESULT_SUCCESS) { + return xfer->actual_len; + } + + return 0; } -xfer_result_t control_result; -STATIC void _control_complete_cb(tuh_xfer_t *xfer) { - control_result = xfer->result; +STATIC bool _open_endpoint(usb_core_device_obj_t *self, mp_int_t endpoint) { + bool endpoint_open = false; + size_t open_size = sizeof(self->open_endpoints); + size_t first_free = open_size; + for (size_t i = 0; i < open_size; i++) { + if (self->open_endpoints[i] == endpoint) { + endpoint_open = true; + } else if (first_free == open_size && self->open_endpoints[i] == 0) { + first_free = i; + } + } + if (endpoint_open) { + return true; + } + + // Fetch the full configuration descriptor and search for the endpoint's descriptor. + uint8_t desc_buf[128]; + if (!tuh_descriptor_get_configuration(self->device_number, self->configuration_index, &desc_buf, sizeof(desc_buf), _transfer_done_cb, 0) || + !_wait_for_callback()) { + return false; + } + tusb_desc_configuration_t *desc_cfg = (tusb_desc_configuration_t *)desc_buf; + + uint8_t const *desc_end = ((uint8_t const *)desc_cfg) + tu_le16toh(desc_cfg->wTotalLength); + uint8_t const *p_desc = tu_desc_next(desc_cfg); + + // parse each interfaces + while (p_desc < desc_end) { + if (TUSB_DESC_ENDPOINT == tu_desc_type(p_desc)) { + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + if (desc_ep->bEndpointAddress == endpoint) { + break; + } + } + + p_desc = tu_desc_next(p_desc); + } + if (p_desc >= desc_end) { + return false; + } + tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *)p_desc; + + bool open = tuh_edpt_open(self->device_number, desc_ep); + if (open) { + self->open_endpoints[first_free] = endpoint; + } + return open; +} + +mp_int_t common_hal_usb_core_device_write(usb_core_device_obj_t *self, mp_int_t endpoint, const uint8_t *buffer, mp_int_t len, mp_int_t timeout) { + if (!_open_endpoint(self, endpoint)) { + mp_raise_usb_core_USBError(NULL); + } + tuh_xfer_t xfer; + xfer.daddr = self->device_number; + xfer.ep_addr = endpoint; + xfer.buffer = (uint8_t *)buffer; + xfer.buflen = len; + return _xfer(&xfer, timeout); +} + +mp_int_t common_hal_usb_core_device_read(usb_core_device_obj_t *self, mp_int_t endpoint, uint8_t *buffer, mp_int_t len, mp_int_t timeout) { + if (!_open_endpoint(self, endpoint)) { + mp_raise_usb_core_USBError(NULL); + } + tuh_xfer_t xfer; + xfer.daddr = self->device_number; + xfer.ep_addr = endpoint; + xfer.buffer = buffer; + xfer.buflen = len; + return _xfer(&xfer, timeout); } mp_int_t common_hal_usb_core_device_ctrl_transfer(usb_core_device_obj_t *self, @@ -144,27 +260,31 @@ mp_int_t common_hal_usb_core_device_ctrl_transfer(usb_core_device_obj_t *self, .ep_addr = 0, .setup = &request, .buffer = buffer, - .complete_cb = _control_complete_cb, + .complete_cb = _transfer_done_cb, }; - control_result = XFER_RESULT_STALLED; + _xfer_result = 0xff; - bool result = tuh_control_xfer(&xfer); - if (!result) { + if (!tuh_control_xfer(&xfer)) { mp_raise_usb_core_USBError(NULL); } uint32_t start_time = supervisor_ticks_ms32(); - while (supervisor_ticks_ms32() - start_time < (uint32_t)timeout && + while ((timeout == 0 || supervisor_ticks_ms32() - start_time < (uint32_t)timeout) && !mp_hal_is_interrupted() && - control_result == XFER_RESULT_STALLED) { + _xfer_result == 0xff) { // The background tasks include TinyUSB which will call the function // we provided above. In other words, the callback isn't in an interrupt. RUN_BACKGROUND_TASKS; } - if (control_result == XFER_RESULT_STALLED) { + if (mp_hal_is_interrupted()) { + return 0; + } + xfer_result_t result = _xfer_result; + _xfer_result = 0xff; + if (result == XFER_RESULT_STALLED || result == 0xff) { mp_raise_usb_core_USBTimeoutError(); } - if (control_result == XFER_RESULT_SUCCESS) { + if (result == XFER_RESULT_SUCCESS) { return len; } @@ -172,14 +292,22 @@ mp_int_t common_hal_usb_core_device_ctrl_transfer(usb_core_device_obj_t *self, } bool common_hal_usb_core_device_is_kernel_driver_active(usb_core_device_obj_t *self, mp_int_t interface) { - // TODO: Implement this when CP natively uses a keyboard. + #if CIRCUITPY_USB_KEYBOARD_WORKFLOW + if (usb_keyboard_in_use(self->device_number, interface)) { + return true; + } + #endif return false; } void common_hal_usb_core_device_detach_kernel_driver(usb_core_device_obj_t *self, mp_int_t interface) { - // TODO: Implement this when CP natively uses a keyboard. + #if CIRCUITPY_USB_KEYBOARD_WORKFLOW + usb_keyboard_detach(self->device_number, interface); + #endif } void common_hal_usb_core_device_attach_kernel_driver(usb_core_device_obj_t *self, mp_int_t interface) { - // TODO: Implement this when CP natively uses a keyboard. + #if CIRCUITPY_USB_KEYBOARD_WORKFLOW + usb_keyboard_attach(self->device_number, interface); + #endif } diff --git a/shared-module/usb/core/Device.h b/shared-module/usb/core/Device.h index 5959639fc8..bb32cb5766 100644 --- a/shared-module/usb/core/Device.h +++ b/shared-module/usb/core/Device.h @@ -32,6 +32,8 @@ typedef struct { mp_obj_base_t base; uint8_t device_number; + uint8_t configuration_index; // not number + uint8_t open_endpoints[8]; } usb_core_device_obj_t; #endif // MICROPY_INCLUDED_SHARED_MODULE_USB_CORE_DEVICE_H diff --git a/supervisor/shared/background_callback.c b/supervisor/shared/background_callback.c index 80f70b528a..17fed37e22 100644 --- a/supervisor/shared/background_callback.c +++ b/supervisor/shared/background_callback.c @@ -36,10 +36,14 @@ STATIC volatile background_callback_t *volatile callback_head, *volatile callback_tail; +#ifndef CALLBACK_CRITICAL_BEGIN #define CALLBACK_CRITICAL_BEGIN (common_hal_mcu_disable_interrupts()) +#endif +#ifndef CALLBACK_CRITICAL_END #define CALLBACK_CRITICAL_END (common_hal_mcu_enable_interrupts()) +#endif -MP_WEAK void port_wake_main_task(void) { +MP_WEAK void PLACE_IN_ITCM(port_wake_main_task)(void) { } void PLACE_IN_ITCM(background_callback_add_core)(background_callback_t * cb) { diff --git a/supervisor/shared/serial.c b/supervisor/shared/serial.c index e683e8eb7c..7bf10ae530 100644 --- a/supervisor/shared/serial.c +++ b/supervisor/shared/serial.c @@ -238,6 +238,12 @@ char serial_read(void) { } #endif + #if CIRCUITPY_USB_KEYBOARD_WORKFLOW + if (usb_keyboard_chars_available() > 0) { + return usb_keyboard_read_char(); + } + #endif + if (port_serial_bytes_available() > 0) { return port_serial_read(); } @@ -279,6 +285,12 @@ bool serial_bytes_available(void) { } #endif + #if CIRCUITPY_USB_KEYBOARD_WORKFLOW + if (usb_keyboard_chars_available() > 0) { + return true; + } + #endif + #if CIRCUITPY_USB_CDC if (usb_cdc_console_enabled() && tud_cdc_available() > 0) { return true; diff --git a/supervisor/shared/usb/host_keyboard.c b/supervisor/shared/usb/host_keyboard.c new file mode 100644 index 0000000000..831914d87a --- /dev/null +++ b/supervisor/shared/usb/host_keyboard.c @@ -0,0 +1,241 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2023 Scott Shawcroft for Adafruit Industries + * Copyright (c) 2023 Jeff Epler 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 "tusb.h" + +#include "py/ringbuf.h" +#include "py/runtime.h" +#include "shared/runtime/interrupt_char.h" +#include "supervisor/usb.h" + +// Buffer the incoming serial data in the background so that we can look for the +// interrupt character. +STATIC ringbuf_t _incoming_ringbuf; +STATIC uint8_t _buf[16]; + +uint8_t _dev_addr; +uint8_t _interface; + +#define FLAG_ALPHABETIC (1) +#define FLAG_SHIFT (2) +#define FLAG_NUMLOCK (4) +#define FLAG_CTRL (8) +#define FLAG_LUT (16) + +const char *const lut[] = { + "!@#$%^&*()", /* 0 - shifted numeric keys */ + "\r\x1b\10\t -=[]\\#;'`,./", /* 1 - symbol keys */ + "\n\x1b\177\t _+{}|~:\"~<>?", /* 2 - shifted */ + "\12\13\10\22", /* 3 - arrow keys RLDU */ + "/*-+\n1234567890.", /* 4 - keypad w/numlock */ + "/*-+\n\xff\2\xff\4\xff\3\xff\1\xff\xff.", /* 5 - keypad w/o numlock */ +}; + +struct keycode_mapper { + uint8_t first, last, code, flags; +} keycode_to_ascii[] = { + { HID_KEY_A, HID_KEY_Z, 'a', FLAG_ALPHABETIC, }, + + { HID_KEY_1, HID_KEY_9, 0, FLAG_SHIFT | FLAG_LUT, }, + { HID_KEY_1, HID_KEY_9, '1', 0, }, + { HID_KEY_0, HID_KEY_0, ')', FLAG_SHIFT, }, + { HID_KEY_0, HID_KEY_0, '0', 0, }, + + { HID_KEY_ENTER, HID_KEY_ENTER, '\n', FLAG_CTRL }, + { HID_KEY_ENTER, HID_KEY_SLASH, 2, FLAG_SHIFT | FLAG_LUT, }, + { HID_KEY_ENTER, HID_KEY_SLASH, 1, FLAG_LUT, }, + + { HID_KEY_F1, HID_KEY_F1, 0x1e, 0, }, // help key on xerox 820 kbd + + { HID_KEY_ARROW_RIGHT, HID_KEY_ARROW_UP, 3, FLAG_LUT }, + + { HID_KEY_KEYPAD_DIVIDE, HID_KEY_KEYPAD_DECIMAL, 4, FLAG_NUMLOCK | FLAG_LUT }, + { HID_KEY_KEYPAD_DIVIDE, HID_KEY_KEYPAD_DECIMAL, 5, FLAG_LUT }, +}; + +STATIC bool report_contains(const hid_keyboard_report_t *report, uint8_t key) { + for (int i = 0; i < 6; i++) { + if (report->keycode[i] == key) { + return true; + } + } + return false; +} + +int old_ascii = -1; +uint32_t repeat_timeout; +// this matches Linux default of 500ms to first repeat, 1/20s thereafter +const uint32_t default_repeat_time = 50; +const uint32_t initial_repeat_time = 500; + +STATIC void send_ascii(uint8_t code, uint32_t repeat_time) { + old_ascii = code; + // repeat_timeout = millis() + repeat_time; + if (code == mp_interrupt_char) { + mp_sched_keyboard_interrupt(); + return; + } + if (ringbuf_num_empty(&_incoming_ringbuf) == 0) { + // Drop on the floor + return; + } + ringbuf_put(&_incoming_ringbuf, code); +} + +hid_keyboard_report_t old_report; + +STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard_report_t *report) { + bool alt = report->modifier & 0x44; + bool shift = report->modifier & 0x22; + bool ctrl = report->modifier & 0x11; + bool caps = old_report.reserved & 1; + bool num = old_report.reserved & 2; + uint8_t code = 0; + + if (report->keycode[0] == 1 && report->keycode[1] == 1) { + // keyboard says it has exceeded max kro + return; + } + + // something was pressed or release, so cancel any key repeat + old_ascii = -1; + + for (int i = 0; i < 6; i++) { + uint8_t keycode = report->keycode[i]; + if (keycode == 0) { + continue; + } + if (report_contains(&old_report, keycode)) { + continue; + } + + /* key is newly pressed */ + if (keycode == HID_KEY_NUM_LOCK) { + num = !num; + } else if (keycode == HID_KEY_CAPS_LOCK) { + caps = !caps; + } else { + for (size_t j = 0; j < MP_ARRAY_SIZE(keycode_to_ascii); j++) { + struct keycode_mapper *mapper = &keycode_to_ascii[j]; + if (!(keycode >= mapper->first && keycode <= mapper->last)) { + continue; + } + if (mapper->flags & FLAG_SHIFT && !shift) { + continue; + } + if (mapper->flags & FLAG_NUMLOCK && !num) { + continue; + } + if (mapper->flags & FLAG_CTRL && !ctrl) { + continue; + } + if (mapper->flags & FLAG_LUT) { + code = lut[mapper->code][keycode - mapper->first]; + } else { + code = keycode - mapper->first + mapper->code; + } + if (mapper->flags & FLAG_ALPHABETIC) { + if (shift ^ caps) { + code ^= ('a' ^ 'A'); + } + } + if (ctrl) { + code &= 0x1f; + } + if (alt) { + code ^= 0x80; + } + send_ascii(code, initial_repeat_time); + break; + } + } + } + + uint8_t leds = (caps | (num << 1)); + if (leds != old_report.reserved) { + tuh_hid_set_report(dev_addr, instance /*idx*/, 0 /*report_id*/, HID_REPORT_TYPE_OUTPUT /*report_type*/, &leds, sizeof(leds)); + } + old_report = *report; + old_report.reserved = leds; +} + +bool usb_keyboard_in_use(uint8_t dev_addr, uint8_t interface) { + return _dev_addr == dev_addr && _interface == interface; +} + +void usb_keyboard_detach(uint8_t dev_addr, uint8_t interface) { + if (!usb_keyboard_in_use(dev_addr, interface)) { + return; + } + _dev_addr = 0; + _interface = 0; +} + +void usb_keyboard_attach(uint8_t dev_addr, uint8_t interface) { + if (usb_keyboard_in_use(dev_addr, interface) || _dev_addr != 0) { + return; + } + uint8_t const itf_protocol = tuh_hid_interface_protocol(dev_addr, interface); + if (itf_protocol == HID_ITF_PROTOCOL_KEYBOARD) { + _dev_addr = dev_addr; + _interface = interface; + tuh_hid_receive_report(dev_addr, interface); + } +} + +void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t interface, uint8_t const *desc_report, uint16_t desc_len) { + usb_keyboard_attach(dev_addr, interface); +} + +void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t interface) { + usb_keyboard_detach(dev_addr, interface); +} + +void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t const *report, uint16_t len) { + if (len != sizeof(hid_keyboard_report_t)) { + return; + } else { + process_event(dev_addr, instance, (hid_keyboard_report_t *)report); + } + // continue to request to receive report + tuh_hid_receive_report(dev_addr, instance); +} + +void usb_keyboard_init(void) { + ringbuf_init(&_incoming_ringbuf, _buf, sizeof(_buf) - 1); +} + +bool usb_keyboard_chars_available(void) { + return ringbuf_num_filled(&_incoming_ringbuf) > 0; +} + +char usb_keyboard_read_char(void) { + if (ringbuf_num_filled(&_incoming_ringbuf) > 0) { + return ringbuf_get(&_incoming_ringbuf); + } + return -1; +} diff --git a/supervisor/shared/usb/tusb_config.h b/supervisor/shared/usb/tusb_config.h index c2ad1362a3..19f5c0a0ce 100644 --- a/supervisor/shared/usb/tusb_config.h +++ b/supervisor/shared/usb/tusb_config.h @@ -51,7 +51,7 @@ extern "C" { // When debugging TinyUSB, only output to the console UART link. #if CIRCUITPY_DEBUG_TINYUSB > 0 && defined(CIRCUITPY_CONSOLE_UART) #define CFG_TUSB_DEBUG CIRCUITPY_DEBUG_TINYUSB -#define CFG_TUSB_DEBUG_PRINTF debug_uart_printf +#define CFG_TUSB_DEBUG_PRINTF console_uart_printf #endif /*------------- RTOS -------------*/ @@ -127,6 +127,10 @@ extern "C" { // -------------------------------------------------------------------- #if CIRCUITPY_USB_HOST +#define CFG_TUH_ENABLED 1 + +// Always use PIO to do host on RP2. +#define CFG_TUH_RPI_PIO_USB 1 #if CIRCUITPY_USB_HOST_INSTANCE == 0 #if USB_HIGHSPEED @@ -147,10 +151,12 @@ extern "C" { #define CFG_TUH_ENUMERATION_BUFSIZE 256 #endif +#define CFG_TUH_HID 2 #define CFG_TUH_HUB 1 #define CFG_TUH_CDC 0 #define CFG_TUH_MSC 0 #define CFG_TUH_VENDOR 0 +#define CFG_TUH_API_EDPT_XFER 1 // max device support (excluding hub device) #define CFG_TUH_DEVICE_MAX (CFG_TUH_HUB ? 4 : 1) // hub typically has 4 ports diff --git a/supervisor/shared/usb/usb.c b/supervisor/shared/usb/usb.c index 133a97a99d..56c8b1897f 100644 --- a/supervisor/shared/usb/usb.c +++ b/supervisor/shared/usb/usb.c @@ -87,7 +87,8 @@ MP_WEAK void post_usb_init(void) { void usb_init(void) { init_usb_hardware(); - tusb_init(); + // Only init device. Host gets inited by the `usb_host` module common-hal. + tud_init(TUD_OPT_RHPORT); post_usb_init(); @@ -199,7 +200,7 @@ void usb_disconnect(void) { void usb_background(void) { if (usb_enabled()) { - #if CFG_TUSB_OS == OPT_OS_NONE + #if CFG_TUSB_OS == OPT_OS_NONE || CFG_TUSB_OS == OPT_OS_PICO tud_task(); #if CIRCUITPY_USB_HOST tuh_task(); diff --git a/supervisor/shared/workflow.c b/supervisor/shared/workflow.c index aebdcc821a..b4e7852b2a 100644 --- a/supervisor/shared/workflow.c +++ b/supervisor/shared/workflow.c @@ -112,6 +112,9 @@ void supervisor_workflow_start(void) { } #endif + #if CIRCUITPY_USB_KEYBOARD_WORKFLOW + usb_keyboard_init(); + #endif } FRESULT supervisor_workflow_mkdir_parents(FATFS *fs, char *path) { diff --git a/supervisor/supervisor.mk b/supervisor/supervisor.mk index c461c5353f..374edf1310 100644 --- a/supervisor/supervisor.mk +++ b/supervisor/supervisor.mk @@ -161,8 +161,10 @@ ifeq ($(CIRCUITPY_USB),1) ifeq ($(CIRCUITPY_USB_HOST), 1) SRC_SUPERVISOR += \ + lib/tinyusb/src/class/hid/hid_host.c \ lib/tinyusb/src/host/hub.c \ lib/tinyusb/src/host/usbh.c \ + supervisor/shared/usb/host_keyboard.c \ endif endif diff --git a/supervisor/usb.h b/supervisor/usb.h index 3c8da6f3b7..11a9cc27d6 100644 --- a/supervisor/usb.h +++ b/supervisor/usb.h @@ -96,4 +96,14 @@ bool usb_msc_lock(void); void usb_msc_unlock(void); #endif +#if CIRCUITPY_USB_KEYBOARD_WORKFLOW +void usb_keyboard_init(void); +bool usb_keyboard_chars_available(void); +char usb_keyboard_read_char(void); + +bool usb_keyboard_in_use(uint8_t dev_addr, uint8_t interface); +void usb_keyboard_detach(uint8_t dev_addr, uint8_t interface); +void usb_keyboard_attach(uint8_t dev_addr, uint8_t interface); +#endif + #endif // MICROPY_INCLUDED_SUPERVISOR_USB_H From ae844415758de8dbecd21f8df76709a8497a1ed2 Mon Sep 17 00:00:00 2001 From: Petr Sedlacek Date: Mon, 10 Jul 2023 22:57:45 +0200 Subject: [PATCH 093/241] Update 42. Keebs Frood support for Rev7 --- ports/raspberrypi/boards/42keebs_frood/mpconfigboard.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/raspberrypi/boards/42keebs_frood/mpconfigboard.mk b/ports/raspberrypi/boards/42keebs_frood/mpconfigboard.mk index 955d8d63f5..50d28c6ea9 100644 --- a/ports/raspberrypi/boards/42keebs_frood/mpconfigboard.mk +++ b/ports/raspberrypi/boards/42keebs_frood/mpconfigboard.mk @@ -6,4 +6,4 @@ USB_MANUFACTURER = "42. Keebs" CHIP_VARIANT = RP2040 CHIP_FAMILY = rp2 -EXTERNAL_FLASH_DEVICES = "ZD25WQ16B" +EXTERNAL_FLASH_DEVICES = "ZD25WQ16B, W25Q32JVxQ" From 52ca0504d99d72a281e35313fb9bab2658ad9840 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Mon, 10 Jul 2023 15:37:57 -0700 Subject: [PATCH 094/241] Comment out debug UART on RP2040 USB host feather --- .../boards/adafruit_feather_rp2040_usb_host/mpconfigboard.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/mpconfigboard.h b/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/mpconfigboard.h index ba62bca2cb..fbf194ed8d 100644 --- a/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/mpconfigboard.h +++ b/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/mpconfigboard.h @@ -13,7 +13,7 @@ #define DEFAULT_UART_BUS_RX (&pin_GPIO1) #define DEFAULT_UART_BUS_TX (&pin_GPIO0) -#define CIRCUITPY_CONSOLE_UART_RX DEFAULT_UART_BUS_RX -#define CIRCUITPY_CONSOLE_UART_TX DEFAULT_UART_BUS_TX +// #define CIRCUITPY_CONSOLE_UART_RX DEFAULT_UART_BUS_RX +// #define CIRCUITPY_CONSOLE_UART_TX DEFAULT_UART_BUS_TX #define CIRCUITPY_USB_HOST_INSTANCE 1 From 449416f5e1f74b60b2d153b86536ae169b9c7d56 Mon Sep 17 00:00:00 2001 From: Sylwester Date: Tue, 11 Jul 2023 09:52:47 +0200 Subject: [PATCH 095/241] Add Datanoise PicoADK --- .../boards/datanoise_picoadk/board.c | 29 +++++++++++ .../boards/datanoise_picoadk/mpconfigboard.h | 14 +++++ .../boards/datanoise_picoadk/mpconfigboard.mk | 9 ++++ .../datanoise_picoadk/pico-sdk-configboard.h | 4 ++ .../boards/datanoise_picoadk/pins.c | 51 +++++++++++++++++++ 5 files changed, 107 insertions(+) create mode 100644 ports/raspberrypi/boards/datanoise_picoadk/board.c create mode 100644 ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.h create mode 100644 ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.mk create mode 100644 ports/raspberrypi/boards/datanoise_picoadk/pico-sdk-configboard.h create mode 100644 ports/raspberrypi/boards/datanoise_picoadk/pins.c diff --git a/ports/raspberrypi/boards/datanoise_picoadk/board.c b/ports/raspberrypi/boards/datanoise_picoadk/board.c new file mode 100644 index 0000000000..331653173e --- /dev/null +++ b/ports/raspberrypi/boards/datanoise_picoadk/board.c @@ -0,0 +1,29 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2021 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.h b/ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.h new file mode 100644 index 0000000000..f287893eeb --- /dev/null +++ b/ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.h @@ -0,0 +1,14 @@ +#define MICROPY_HW_BOARD_NAME "Datanoise PicoADK" +#define MICROPY_HW_MCU_NAME "rp2040" + +#define MICROPY_HW_NEOPIXEL (&pin_GPIO15) + +#define DEFAULT_I2C_BUS_SCL (&pin_GPIO9) +#define DEFAULT_I2C_BUS_SDA (&pin_GPIO8) + +#define DEFAULT_SPI_BUS_SCK (&pin_GPIO18) +#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO12) +#define DEFAULT_SPI_BUS_MISO (&pin_GPIO20) + +#define DEFAULT_UART_BUS_RX (&pin_GPIO1) +#define DEFAULT_UART_BUS_TX (&pin_GPIO0) diff --git a/ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.mk b/ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.mk new file mode 100644 index 0000000000..1398f0b97f --- /dev/null +++ b/ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.mk @@ -0,0 +1,9 @@ +USB_VID = 0x2E8A +USB_PID = 0x104B +USB_PRODUCT = "PicoADK" +USB_MANUFACTURER = "Datanoise" + +CHIP_VARIANT = RP2040 +CHIP_FAMILY = rp2 + +EXTERNAL_FLASH_DEVICES = "GD25Q32C,W25Q32JVxQ" diff --git a/ports/raspberrypi/boards/datanoise_picoadk/pico-sdk-configboard.h b/ports/raspberrypi/boards/datanoise_picoadk/pico-sdk-configboard.h new file mode 100644 index 0000000000..a41131dd22 --- /dev/null +++ b/ports/raspberrypi/boards/datanoise_picoadk/pico-sdk-configboard.h @@ -0,0 +1,4 @@ +// Put board-specific pico-sdk definitions here. This file must exist. + +// Allow extra time for xosc to start. +#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64 diff --git a/ports/raspberrypi/boards/datanoise_picoadk/pins.c b/ports/raspberrypi/boards/datanoise_picoadk/pins.c new file mode 100644 index 0000000000..7bcfd9a6f2 --- /dev/null +++ b/ports/raspberrypi/boards/datanoise_picoadk/pins.c @@ -0,0 +1,51 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO22) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO19) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO20) }, + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO0) }, + + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO9) }, + + { MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO2) }, + { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO3) }, + { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO4) }, + { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_ADC_SCK), MP_ROM_PTR(&pin_GPIO10) }, + { MP_ROM_QSTR(MP_QSTR_ADC_MOSI), MP_ROM_PTR(&pin_GPIO11) }, + { MP_ROM_QSTR(MP_QSTR_ADC_MISO), MP_ROM_PTR(&pin_GPIO12) }, + { MP_ROM_QSTR(MP_QSTR_ADC_CS), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_GPIO14) }, + { MP_ROM_QSTR(MP_QSTR_D29), MP_ROM_PTR(&pin_GPIO29) }, + { MP_ROM_QSTR(MP_QSTR_D19), MP_ROM_PTR(&pin_GPIO19) }, + { MP_ROM_QSTR(MP_QSTR_D20), MP_ROM_PTR(&pin_GPIO20) }, + { MP_ROM_QSTR(MP_QSTR_D21), MP_ROM_PTR(&pin_GPIO21) }, + { MP_ROM_QSTR(MP_QSTR_D22), MP_ROM_PTR(&pin_GPIO22) }, + { MP_ROM_QSTR(MP_QSTR_D26), MP_ROM_PTR(&pin_GPIO26) }, + + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO15) }, + + { MP_ROM_QSTR(MP_QSTR_I2S_DOUT), MP_ROM_PTR(&pin_GPIO16) }, + { MP_ROM_QSTR(MP_QSTR_I2S_BCLK), MP_ROM_PTR(&pin_GPIO17) }, + { MP_ROM_QSTR(MP_QSTR_I2S_LRCLK), MP_ROM_PTR(&pin_GPIO18) }, + { MP_ROM_QSTR(MP_QSTR_I2S_DEMP), MP_ROM_PTR(&pin_GPIO23) }, + { MP_ROM_QSTR(MP_QSTR_I2S_XSMT), MP_ROM_PTR(&pin_GPIO25) }, + + { MP_ROM_QSTR(MP_QSTR_VBUS_SENSE), MP_ROM_PTR(&pin_GPIO24) }, + + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) } +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From 9b80943885c8e928896b9e480075a05fd5e21152 Mon Sep 17 00:00:00 2001 From: Sylwester Date: Tue, 11 Jul 2023 10:01:46 +0200 Subject: [PATCH 096/241] Add Datanoise PicoADK --- ports/raspberrypi/boards/datanoise_picoadk/pins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/raspberrypi/boards/datanoise_picoadk/pins.c b/ports/raspberrypi/boards/datanoise_picoadk/pins.c index 7bcfd9a6f2..9f1cc85b56 100644 --- a/ports/raspberrypi/boards/datanoise_picoadk/pins.c +++ b/ports/raspberrypi/boards/datanoise_picoadk/pins.c @@ -42,7 +42,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_I2S_XSMT), MP_ROM_PTR(&pin_GPIO25) }, { MP_ROM_QSTR(MP_QSTR_VBUS_SENSE), MP_ROM_PTR(&pin_GPIO24) }, - + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, From 0c606c534cdb08f4412ba196e0e0a12f77bebcc9 Mon Sep 17 00:00:00 2001 From: Marco van der Kolk Date: Tue, 11 Jul 2023 11:18:29 +0200 Subject: [PATCH 097/241] Documentation: Sequences are supported, not just Lists Signed-off-by: Marco van der Kolk --- shared-bindings/keypad/ShiftRegisterKeys.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/shared-bindings/keypad/ShiftRegisterKeys.c b/shared-bindings/keypad/ShiftRegisterKeys.c index 3d1a8d6842..0e8789e0cf 100644 --- a/shared-bindings/keypad/ShiftRegisterKeys.c +++ b/shared-bindings/keypad/ShiftRegisterKeys.c @@ -41,10 +41,10 @@ //| self, //| *, //| clock: microcontroller.Pin, -//| data: Union[microcontroller.Pin, List[microcontroller.Pin]], +//| data: Union[microcontroller.Pin, Sequence[microcontroller.Pin]], //| latch: microcontroller.Pin, //| value_to_latch: bool = True, -//| key_count: Union[int, List[int]], +//| key_count: Union[int, Sequence[int]], //| value_when_pressed: bool, //| interval: float = 0.020, //| max_events: int = 64 @@ -63,7 +63,7 @@ //| //| :param microcontroller.Pin clock: The shift register clock pin. //| The shift register should clock on a low-to-high transition. -//| :param Union[microcontroller.Pin, List[microcontroller.Pin]] data: the incoming shift register data pin(s) +//| :param Union[microcontroller.Pin, Sequence[microcontroller.Pin]] data: the incoming shift register data pin(s) //| :param microcontroller.Pin latch: //| Pin used to latch parallel data going into the shift register. //| :param bool value_to_latch: Pin state to latch data being read. @@ -71,7 +71,7 @@ //| ``False`` if the data is latched when ``latch`` goes low. //| The default is ``True``, which is how the 74HC165 operates. The CD4021 latch is the opposite. //| Once the data is latched, it will be shifted out by toggling the clock pin. -//| :param Union[int, List[int]] key_count: number of data lines to clock in (per data pin) +//| :param Union[int, Sequence[int]] key_count: number of data lines to clock in (per data pin) //| :param bool value_when_pressed: ``True`` if the pin reads high when the key is pressed. //| ``False`` if the pin reads low (is grounded) when the key is pressed. //| :param float interval: Scan keys no more often than ``interval`` to allow for debouncing. @@ -200,7 +200,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(keypad_shiftregisterkeys___exit___obj //| ... //| key_count: int -//| """The number of keys that are being scanned. (read-only) +//| """The total number of keys that are being scanned. (read-only) //| """ //| events: EventQueue From bdf9336b8076d08b2202cdfa4dfef30d3f5618e2 Mon Sep 17 00:00:00 2001 From: Marco van der Kolk Date: Tue, 11 Jul 2023 12:09:51 +0200 Subject: [PATCH 098/241] Improved help text Signed-off-by: Marco van der Kolk --- shared-bindings/keypad/ShiftRegisterKeys.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared-bindings/keypad/ShiftRegisterKeys.c b/shared-bindings/keypad/ShiftRegisterKeys.c index 0e8789e0cf..e85e9af837 100644 --- a/shared-bindings/keypad/ShiftRegisterKeys.c +++ b/shared-bindings/keypad/ShiftRegisterKeys.c @@ -53,11 +53,11 @@ //| Create a `Keys` object that will scan keys attached to a parallel-in serial-out shift register //| like the 74HC165 or CD4021. //| Note that you may chain shift registers to load in as many values as you need. +//| Furthermore, you can put multiple shift registers in parallel and share clock and latch. //| //| Key number 0 is the first (or more properly, the zero-th) bit read. In the //| 74HC165, this bit is labeled ``Q7``. Key number 1 will be the value of ``Q6``, etc. -//| When specifying multiple data pins, the key numbers are sequential. -//| So with two data Pins in parallel and key_count[0] = 32, the keys of data[1] will start with 32. +//| With multiple data pins, key numbers of the next pin are sequentially to the current pin. //| //| An `EventQueue` is created when this object is created and is available in the `events` attribute. //| From 96aced8c37c46a3de9ea5bf33742acea789add76 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 11 Jul 2023 18:50:18 +0200 Subject: [PATCH 099/241] 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 | 9 +++++---- locale/de_DE.po | 12 ++++++++---- locale/el.po | 9 +++++---- locale/en_GB.po | 12 ++++++++---- locale/es.po | 12 ++++++++---- locale/fil.po | 9 +++++---- locale/fr.po | 12 ++++++++---- locale/hi.po | 9 +++++---- locale/it_IT.po | 9 +++++---- locale/ja.po | 9 +++++---- locale/ko.po | 9 +++++---- locale/nl.po | 9 +++++---- locale/pl.po | 9 +++++---- locale/pt_BR.po | 12 ++++++++---- locale/ru.po | 9 +++++---- locale/sv.po | 12 ++++++++---- locale/tr.po | 9 +++++---- locale/zh_Latn_pinyin.po | 12 ++++++++---- 19 files changed, 116 insertions(+), 76 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 94348e18a8..6208de5540 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -474,12 +474,17 @@ msgstr "Semua perangkat UART sedang digunakan" msgid "All channels in use" msgstr "" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Semua channel event sedang digunakan" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "" @@ -1976,10 +1981,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/cs.po b/locale/cs.po index 7ea09153a7..751d6394b0 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -475,12 +475,17 @@ msgstr "Všechny UART periferie jsou používány" msgid "All channels in use" msgstr "Všechny kanály jsou používány" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Všechny kanály událostí jsou již používány" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "" @@ -1965,10 +1970,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/de_DE.po b/locale/de_DE.po index df78415721..41d873e7ff 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -485,12 +485,17 @@ msgstr "Alle UART-Peripheriegeräte sind in Benutzung" msgid "All channels in use" msgstr "Alle Kanäle werden verwendet" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Alle Event-Kanäle werden benutzt" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "Alle State-Maschinen in Verwendung" @@ -1999,10 +2004,6 @@ msgstr "Serverseitiger Kontext kann keinen Hostnamen haben" msgid "Size not supported" msgstr "Größe nicht unterstützt" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "Sleep-Speicher nicht verfügbar" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." @@ -4459,6 +4460,9 @@ msgstr "zi muss eine Gleitkommazahl sein" msgid "zi must be of shape (n_section, 2)" msgstr "zi muss die Form (n_section, 2) haben" +#~ msgid "Sleep Memory not available" +#~ msgstr "Sleep-Speicher nicht verfügbar" + #~ msgid "input and output shapes are not compatible" #~ msgstr "Eingabe- und Ausgabeformen sind nicht kompatibel" diff --git a/locale/el.po b/locale/el.po index f320dd8d9f..5e002f27df 100644 --- a/locale/el.po +++ b/locale/el.po @@ -486,12 +486,17 @@ msgstr "Όλα τα UART περιφεριακά ειναι σε χρήση" msgid "All channels in use" msgstr "Όλα τα κανάλια είναι σε χρήση" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Όλα τα κανάλια συμβάντων είναι σε χρήση" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "Όλες οι μηχανές κατάστασης είναι σε χρήση" @@ -1979,10 +1984,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/en_GB.po b/locale/en_GB.po index 35eb8275c4..c4d1039de7 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -484,12 +484,17 @@ msgstr "All UART peripherals are in use" msgid "All channels in use" msgstr "All channels in use" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "All event channels in use" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "All state machines in use" @@ -1979,10 +1984,6 @@ msgstr "Server side context cannot have hostname" msgid "Size not supported" msgstr "Size not supported" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "Sleep Memory not available" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." @@ -4400,6 +4401,9 @@ msgstr "zi must be of float type" msgid "zi must be of shape (n_section, 2)" msgstr "zi must be of shape (n_section, 2)" +#~ msgid "Sleep Memory not available" +#~ msgstr "Sleep Memory not available" + #~ msgid "input and output shapes are not compatible" #~ msgstr "input and output shapes are not compatible" diff --git a/locale/es.po b/locale/es.po index 7fe8ac2cb1..6b832dccfd 100644 --- a/locale/es.po +++ b/locale/es.po @@ -486,12 +486,17 @@ msgstr "Todos los periféricos UART están en uso" msgid "All channels in use" msgstr "Todos los canales están en uso" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Todos los canales de eventos están en uso" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "Todas las máquinas de estado están en uso" @@ -2014,10 +2019,6 @@ msgstr "El contexto del lado del servidor no puede tener un hostname" msgid "Size not supported" msgstr "Sin capacidades para el tamaño" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "Memoria de sueño no disponible" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." @@ -4455,6 +4456,9 @@ msgstr "zi debe ser de tipo flotante" msgid "zi must be of shape (n_section, 2)" msgstr "zi debe ser una forma (n_section,2)" +#~ msgid "Sleep Memory not available" +#~ msgstr "Memoria de sueño no disponible" + #~ msgid "input and output shapes are not compatible" #~ msgstr "Formas de entrada y salida no son compatibles" diff --git a/locale/fil.po b/locale/fil.po index 26d9ab4655..ac2ddf6698 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -474,12 +474,17 @@ msgstr "Lahat ng I2C peripherals ginagamit" msgid "All channels in use" msgstr "" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Lahat ng event channels ginagamit" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "" @@ -1966,10 +1971,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/fr.po b/locale/fr.po index 361952435c..27495cda1b 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -486,12 +486,17 @@ msgstr "Tous les périphériques UART sont utilisés" msgid "All channels in use" msgstr "Tout les canaux sont utilisés" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Tous les canaux d'événements sont utilisés" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "Tous les automates finis sont utilisés" @@ -2024,10 +2029,6 @@ msgstr "Un contexte niveau serveur ne peut avoir de hostname" msgid "Size not supported" msgstr "Taille n'est pas supportée" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "La mémoire de sommeil n'est pas disponible" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." @@ -4478,6 +4479,9 @@ msgstr "zi doit être de type float" msgid "zi must be of shape (n_section, 2)" msgstr "zi doit être de forme (n_section, 2)" +#~ msgid "Sleep Memory not available" +#~ msgstr "La mémoire de sommeil n'est pas disponible" + #~ msgid "input and output shapes are not compatible" #~ msgstr "les formes d'entrée et de sortie ne sont pas compatibles" diff --git a/locale/hi.po b/locale/hi.po index 3684aee25a..bdbcd835dd 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -471,12 +471,17 @@ msgstr "" msgid "All channels in use" msgstr "" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "" @@ -1950,10 +1955,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/it_IT.po b/locale/it_IT.po index d8a609da15..f5519b25cc 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -477,12 +477,17 @@ msgstr "Tutte le periferiche I2C sono in uso" msgid "All channels in use" msgstr "" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Tutti i canali eventi utilizati" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "Tutte le state machines sono in uso" @@ -1973,10 +1978,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/ja.po b/locale/ja.po index 13cae1e02e..65b6274cd4 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -478,12 +478,17 @@ msgstr "全てのUART周辺機器が使用中" msgid "All channels in use" msgstr "" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "全てのイベントチャネルが使用中" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "" @@ -1966,10 +1971,6 @@ msgstr "" msgid "Size not supported" msgstr "サイズは対応していません" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/ko.po b/locale/ko.po index dd36e49950..cb0dad97e2 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -472,12 +472,17 @@ msgstr "사용중인 모든 UART주변 기기" msgid "All channels in use" msgstr "" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "" @@ -1953,10 +1958,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/nl.po b/locale/nl.po index ed3ca55c48..cb2338ad92 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -471,12 +471,17 @@ msgstr "Alle UART peripherals zijn in gebruik" msgid "All channels in use" msgstr "" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Alle event kanalen zijn in gebruik" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "" @@ -1971,10 +1976,6 @@ msgstr "Context aan de serverkant kan geen hostnaam hebben" msgid "Size not supported" msgstr "Afmeting niet ondersteund" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/pl.po b/locale/pl.po index 359c27eaad..a6af1932ee 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -473,12 +473,17 @@ msgstr "Wszystkie peryferia UART w użyciu" msgid "All channels in use" msgstr "" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Wszystkie kanały zdarzeń w użyciu" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "" @@ -1958,10 +1963,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 68e345351f..6f810d93ef 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -488,12 +488,17 @@ msgstr "Todos os periféricos UART estão em uso" msgid "All channels in use" msgstr "Todos os canais estão em uso" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Todos os canais de eventos em uso" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "O estado de todas as máquinas em uso" @@ -2009,10 +2014,6 @@ msgstr "O contexto do lado do servidor não pode ter nome de host" msgid "Size not supported" msgstr "O tamanho não é suportado" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "Sleep memory não está disponível" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." @@ -4456,6 +4457,9 @@ msgstr "zi deve ser de um tipo float" msgid "zi must be of shape (n_section, 2)" msgstr "zi deve estar na forma (n_section, 2)" +#~ msgid "Sleep Memory not available" +#~ msgstr "Sleep memory não está disponível" + #~ msgid "input and output shapes are not compatible" #~ msgstr "as formas de entrada e saída não são compatíveis" diff --git a/locale/ru.po b/locale/ru.po index cc79f036cd..d4bbd20cac 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -478,12 +478,17 @@ msgstr "Все периферийные устройства UART уже исп msgid "All channels in use" msgstr "Все каналы уже используются" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Все каналы событий уже используются" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "Все машины состояний уже используются" @@ -2011,10 +2016,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/sv.po b/locale/sv.po index abb457442b..c869d14a7a 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -485,12 +485,17 @@ msgstr "Alla UART-kringutrustning används" msgid "All channels in use" msgstr "Alla kanaler används" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Alla händelsekanaler används" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "Alla tillståndsmaskiner används" @@ -1990,10 +1995,6 @@ msgstr "Serversidans kontext kan inte ha värdnamn" msgid "Size not supported" msgstr "Storleken stöds inte" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "Sömnminne inte tillgängligt" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." @@ -4418,6 +4419,9 @@ msgstr "zi måste vara av typ float" msgid "zi must be of shape (n_section, 2)" msgstr "zi måste vara i formen (n_section, 2)" +#~ msgid "Sleep Memory not available" +#~ msgstr "Sömnminne inte tillgängligt" + #~ msgid "input and output shapes are not compatible" #~ msgstr "indata- och utdataformer är inte kompatibla" diff --git a/locale/tr.po b/locale/tr.po index f64fb820b9..6fe4fabeab 100644 --- a/locale/tr.po +++ b/locale/tr.po @@ -480,12 +480,17 @@ msgstr "Tüm UART çevre birimleri kullanımda" msgid "All channels in use" msgstr "Tüm kanallar kullanımda" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "Tüm olay kanalları kullanımda" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "Tüm durum makineleri kullanımda" @@ -1972,10 +1977,6 @@ msgstr "" msgid "Size not supported" msgstr "" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 4e0cc053f9..ba6a621b6b 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -487,12 +487,17 @@ msgstr "suǒyǒu UART wàishè dōu zài shǐyòng zhōng" msgid "All channels in use" msgstr "suǒyǒu píndào dōu zài shǐyòng zhōng" +#: ports/raspberrypi/common-hal/usb_host/Port.c +msgid "All dma channels in use" +msgstr "" + #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" msgstr "suǒyǒu shìjiàn píndào dōu zài shǐyòng zhōng" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All state machines in use" msgstr "suǒyǒu zhuàngtàijī dōu zài shǐyòng zhōng" @@ -1995,10 +2000,6 @@ msgstr "Fúwùqì duān shàngxiàwén bùnéng jùyǒu zhǔjī míng" msgid "Size not supported" msgstr "bù zhī chí dà xiǎo" -#: ports/raspberrypi/common-hal/alarm/SleepMemory.c -msgid "Sleep Memory not available" -msgstr "shuì mián jì yì bù kě yòng" - #: shared-bindings/alarm/SleepMemory.c shared-bindings/memorymap/AddressRange.c #: shared-bindings/nvm/ByteArray.c msgid "Slice and value different lengths." @@ -4424,6 +4425,9 @@ msgstr "zi bìxū wèi fú diǎn xíng" msgid "zi must be of shape (n_section, 2)" msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)" +#~ msgid "Sleep Memory not available" +#~ msgstr "shuì mián jì yì bù kě yòng" + #~ msgid "input and output shapes are not compatible" #~ msgstr "shū rù hé shū chū xíng zhuàng bù jiān róng" From 22424ab545739561c403d19fd52b5477d9d18248 Mon Sep 17 00:00:00 2001 From: Jonny Bergdahl Date: Tue, 11 Jul 2023 16:56:49 +0000 Subject: [PATCH 100/241] Translated using Weblate (Swedish) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/sv/ --- locale/sv.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/locale/sv.po b/locale/sv.po index c869d14a7a..d5ab3cb7f2 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-05-26 12:50+0000\n" +"PO-Revision-Date: 2023-07-11 17:05+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" "Language: sv\n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.18-dev\n" +"X-Generator: Weblate 5.0-dev\n" #: main.c msgid "" @@ -450,7 +450,7 @@ msgstr "Adressintervallet är inte tillåtet" #: ports/espressif/common-hal/canio/CAN.c msgid "All CAN peripherals are in use" -msgstr "All I2C-kringutrustning används" +msgstr "All CAN-kringutrustning används" #: ports/espressif/common-hal/busio/I2C.c #: ports/espressif/common-hal/i2ctarget/I2CTarget.c @@ -487,7 +487,7 @@ msgstr "Alla kanaler används" #: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All dma channels in use" -msgstr "" +msgstr "Alla dma-kanaler används" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" @@ -501,7 +501,7 @@ msgstr "Alla tillståndsmaskiner används" #: ports/atmel-samd/audio_dma.c msgid "All sync event channels in use" -msgstr "Alla händelsekanaler används" +msgstr "Alla synkroniseringskanaler används" #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: shared-bindings/pwmio/PWMOut.c @@ -1072,7 +1072,7 @@ msgstr "För RGB-färgrymder måste indatabitmappen ha 16 bitar per pixel" #: ports/cxd56/common-hal/camera/Camera.c msgid "Format not supported" -msgstr "Formatet stöds inte" +msgstr "Format stöds inte" #: ports/mimxrt10xx/common-hal/microcontroller/Processor.c msgid "" @@ -2243,7 +2243,7 @@ msgstr "Kan inte initiera tolken" #: ports/espressif/common-hal/analogbufio/BufferedIn.c #, c-format msgid "Unable to initialize ADC DMA controller, ErrorCode:%d" -msgstr "Kan inte konfigurera ADC DMA controller, Felkod:%d" +msgstr "Kan inte inititiera ADC DMA-controller, Felkod:%d" #: shared-module/displayio/OnDiskBitmap.c msgid "Unable to read color palette data" @@ -2354,7 +2354,7 @@ msgstr "Busstyp för display stöds inte" #: shared-module/audiocore/WaveFile.c msgid "Unsupported format" -msgstr "Formatet stöds inte" +msgstr "Format stöds inte" #: shared-bindings/hashlib/__init__.c msgid "Unsupported hash algorithm" From 5e97ff80f2426e978e2de451ccd224e2e723816a Mon Sep 17 00:00:00 2001 From: madcitygeek Date: Tue, 11 Jul 2023 14:56:10 -0500 Subject: [PATCH 101/241] Added a varient of the luatos board with on-board ch343 --- .../boards/luatos_core_esp32c3_ch343/board.c | 29 ++++++++++++ .../luatos_core_esp32c3_ch343/mpconfigboard.h | 44 +++++++++++++++++++ .../mpconfigboard.mk | 8 ++++ .../boards/luatos_core_esp32c3_ch343/pins.c | 36 +++++++++++++++ .../luatos_core_esp32c3_ch343/sdkconfig | 5 +++ 5 files changed, 122 insertions(+) create mode 100644 ports/espressif/boards/luatos_core_esp32c3_ch343/board.c create mode 100644 ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.h create mode 100644 ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.mk create mode 100644 ports/espressif/boards/luatos_core_esp32c3_ch343/pins.c create mode 100644 ports/espressif/boards/luatos_core_esp32c3_ch343/sdkconfig diff --git a/ports/espressif/boards/luatos_core_esp32c3_ch343/board.c b/ports/espressif/boards/luatos_core_esp32c3_ch343/board.c new file mode 100644 index 0000000000..164430c88c --- /dev/null +++ b/ports/espressif/boards/luatos_core_esp32c3_ch343/board.c @@ -0,0 +1,29 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.h b/ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.h new file mode 100644 index 0000000000..000056e5ee --- /dev/null +++ b/ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.h @@ -0,0 +1,44 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2019 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Board setup + +#define MICROPY_HW_BOARD_NAME "Luatos Core-ESP32C3" +#define MICROPY_HW_MCU_NAME "ESP32-C3" + +// Status LED +#define MICROPY_HW_LED_STATUS (&pin_GPIO12) + +#define CIRCUITPY_BOARD_UART (1) +#define CIRCUITPY_BOARD_UART_PIN {{.tx = &pin_GPIO21, .rx = &pin_GPIO20}} + +// Default bus pins +#define DEFAULT_UART_BUS_RX (&pin_GPIO20) +#define DEFAULT_UART_BUS_TX (&pin_GPIO21) + +// Serial over UART +#define CIRCUITPY_CONSOLE_UART_RX DEFAULT_UART_BUS_RX +#define CIRCUITPY_CONSOLE_UART_TX DEFAULT_UART_BUS_TX diff --git a/ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.mk b/ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.mk new file mode 100644 index 0000000000..e0df58f756 --- /dev/null +++ b/ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.mk @@ -0,0 +1,8 @@ +CIRCUITPY_CREATOR_ID = 0xDEADBEEF +CIRCUITPY_CREATION_ID = 0x00C30001 + +IDF_TARGET = esp32c3 + +CIRCUITPY_ESP_FLASH_MODE=dio +CIRCUITPY_ESP_FLASH_FREQ=80m +CIRCUITPY_ESP_FLASH_SIZE=4MB diff --git a/ports/espressif/boards/luatos_core_esp32c3_ch343/pins.c b/ports/espressif/boards/luatos_core_esp32c3_ch343/pins.c new file mode 100644 index 0000000000..f45205b5c3 --- /dev/null +++ b/ports/espressif/boards/luatos_core_esp32c3_ch343/pins.c @@ -0,0 +1,36 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + // Luatos Core ESP32-C3 + // Documentation (Chinese only): + // https://wiki.luatos.com/chips/esp32c3/index.html + // Pinout: + // https://wiki.luatos.com/_images/20221023.png + // C3 Data Sheet + // https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf + + { MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) }, + { MP_ROM_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) }, + { MP_ROM_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) }, + { MP_ROM_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) }, + { MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) }, + { MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) }, + { MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) }, + { MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_BOOT0), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) }, + // IO11 used internally on this board version despite being broken out to a pin + { MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) }, + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO12) }, + { MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_LED2), MP_ROM_PTR(&pin_GPIO13) }, + { MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) }, + { MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/espressif/boards/luatos_core_esp32c3_ch343/sdkconfig b/ports/espressif/boards/luatos_core_esp32c3_ch343/sdkconfig new file mode 100644 index 0000000000..ccc70917b5 --- /dev/null +++ b/ports/espressif/boards/luatos_core_esp32c3_ch343/sdkconfig @@ -0,0 +1,5 @@ +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="luatos-core-esp32c3" +# end of LWIP From 2746709dfcb25c61ec7c95d9d9917ab29f65697e Mon Sep 17 00:00:00 2001 From: Miroslav Zuzelka Date: Tue, 11 Jul 2023 22:58:12 +0200 Subject: [PATCH 102/241] Update pins.c Add EPD pins definition --- ports/espressif/boards/es3ink/pins.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ports/espressif/boards/es3ink/pins.c b/ports/espressif/boards/es3ink/pins.c index f316137b7f..2a5acc434b 100644 --- a/ports/espressif/boards/es3ink/pins.c +++ b/ports/espressif/boards/es3ink/pins.c @@ -19,14 +19,21 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO4) }, { MP_ROM_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_EPD_RESET), MP_ROM_PTR(&pin_GPIO5) }, + { MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_EPD_BUSY), MP_ROM_PTR(&pin_GPIO6) }, + { MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) }, { MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) }, { MP_ROM_QSTR(MP_QSTR_NEOPIXEL_POWER), MP_ROM_PTR(&pin_GPIO8) }, { MP_ROM_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_EPD_CS), MP_ROM_PTR(&pin_GPIO9) }, + { MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) }, + { MP_ROM_QSTR(MP_QSTR_EPD_DC), MP_ROM_PTR(&pin_GPIO10) }, { MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) }, { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO11) }, From 8d6ef37a7c7cb1bb05baec82bc165dfdc7156add Mon Sep 17 00:00:00 2001 From: Miroslav Zuzelka Date: Tue, 11 Jul 2023 23:12:46 +0200 Subject: [PATCH 103/241] Update pins.c Fix pre-commit error --- ports/espressif/boards/es3ink/pins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/boards/es3ink/pins.c b/ports/espressif/boards/es3ink/pins.c index 2a5acc434b..3706eb09a6 100644 --- a/ports/espressif/boards/es3ink/pins.c +++ b/ports/espressif/boards/es3ink/pins.c @@ -23,7 +23,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) }, { MP_ROM_QSTR(MP_QSTR_EPD_BUSY), MP_ROM_PTR(&pin_GPIO6) }, - + { MP_ROM_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) }, { MP_ROM_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) }, From 910fcf1c939be54e42a795eda994f14d69583e97 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 30 Jun 2023 11:27:50 -0500 Subject: [PATCH 104/241] usb host keyboard: add keymap support This is confined to pure ASCII, but does support Alt Gr. This is enough to make a French keyboard layout work: * home row is "qsdfghjklm" * numerals are all shifted * keys like {} require Alt Gr While not tested, this should also support layouts like Colemak with the necssary keymap file. Layouts can be produced from Neradoc's keyboard layout modules on the device & loaded at runtime. Code to do so is at https://gist.github.com/jepler/597c0a00e0eb014a433e03c0ae363a08 as well as a sketch of how an extended format could support dead keys & the full Unicode BMP instead of just ASCII. --- shared-bindings/usb/__init__.c | 33 ++++++ supervisor/shared/usb/host_keyboard.c | 163 ++++++++++++++++++-------- supervisor/usb.h | 1 + 3 files changed, 151 insertions(+), 46 deletions(-) diff --git a/shared-bindings/usb/__init__.c b/shared-bindings/usb/__init__.c index 443d5cf788..b22fce8011 100644 --- a/shared-bindings/usb/__init__.c +++ b/shared-bindings/usb/__init__.c @@ -30,15 +30,48 @@ #include "shared-bindings/usb/__init__.h" #include "shared-bindings/usb/core/__init__.h" +#include "supervisor/usb.h" //| """PyUSB-compatible USB host API //| //| The `usb` is a subset of PyUSB that allows you to communicate to USB devices. //| """ +//| +//| def set_user_keymap(keymap: ReadableBuffer, /) -> None: +//| """Set the keymap used by a USB HID keyboard in kernel mode +//| +//| The keymap consists of 256 or 384 1-byte entries that map from USB keycodes +//| to ASCII codes. The first 128 entries are for unmodified keys, +//| the next 128 entries are for shifted keys,and the next optional 128 entries are +//| for altgr-modified keys. +//| +//| The values must all be ASCII (32 through 126 inclusive); other values are not valid. +//| +//| The values at index 0, 128, and 256 (if the keymap has 384 entries) must be +//| 0; other values are reserved for future expansion to indicate alternate +//| keymap formats. +//| +//| At other indices, the value 0 is used to indicate that the normal +//| definition is still used. For instance, the entry for HID_KEY_ARROW_UP +//| (0x52) is usually 0 so that the default behavior of sending an escape code +//| is preserved. +//| +//| This function is a CircuitPython extension not present in PyUSB +//| """ +//| +STATIC mp_obj_t usb_set_user_keymap(mp_obj_t buf_in) { + mp_buffer_info_t bufinfo; + mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_READ); + usb_keymap_set(bufinfo.buf, bufinfo.len); + return mp_const_none; +} + +MP_DEFINE_CONST_FUN_OBJ_1(usb_set_user_keymap_obj, usb_set_user_keymap); STATIC mp_rom_map_elem_t usb_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_usb) }, { MP_ROM_QSTR(MP_QSTR_core), MP_OBJ_FROM_PTR(&usb_core_module) }, + { MP_ROM_QSTR(MP_QSTR_set_user_keymap), MP_OBJ_FROM_PTR(&usb_set_user_keymap_obj) }, }; STATIC MP_DEFINE_CONST_DICT(usb_module_globals, usb_module_globals_table); diff --git a/supervisor/shared/usb/host_keyboard.c b/supervisor/shared/usb/host_keyboard.c index 831914d87a..7fa7d1e138 100644 --- a/supervisor/shared/usb/host_keyboard.c +++ b/supervisor/shared/usb/host_keyboard.c @@ -32,49 +32,70 @@ #include "shared/runtime/interrupt_char.h" #include "supervisor/usb.h" +#ifndef DEBUG +#define DEBUG (0) +#endif + // Buffer the incoming serial data in the background so that we can look for the // interrupt character. STATIC ringbuf_t _incoming_ringbuf; STATIC uint8_t _buf[16]; -uint8_t _dev_addr; -uint8_t _interface; +STATIC uint8_t _dev_addr; +STATIC uint8_t _interface; -#define FLAG_ALPHABETIC (1) -#define FLAG_SHIFT (2) -#define FLAG_NUMLOCK (4) -#define FLAG_CTRL (8) -#define FLAG_LUT (16) +#define FLAG_SHIFT (1) +#define FLAG_NUMLOCK (2) +#define FLAG_CTRL (4) +#define FLAG_STRING (8) -const char *const lut[] = { - "!@#$%^&*()", /* 0 - shifted numeric keys */ - "\r\x1b\10\t -=[]\\#;'`,./", /* 1 - symbol keys */ - "\n\x1b\177\t _+{}|~:\"~<>?", /* 2 - shifted */ - "\12\13\10\22", /* 3 - arrow keys RLDU */ - "/*-+\n1234567890.", /* 4 - keypad w/numlock */ - "/*-+\n\xff\2\xff\4\xff\3\xff\1\xff\xff.", /* 5 - keypad w/o numlock */ -}; +STATIC uint8_t user_keymap[384]; +STATIC size_t user_keymap_len = 0; + +void usb_keymap_set(const uint8_t *buf, size_t len) { + user_keymap_len = len = MIN(len, sizeof(user_keymap)); + memcpy(user_keymap, buf, len); + memset(user_keymap + len, 0, sizeof(user_keymap) - len); +} struct keycode_mapper { uint8_t first, last, code, flags; -} keycode_to_ascii[] = { - { HID_KEY_A, HID_KEY_Z, 'a', FLAG_ALPHABETIC, }, + const char *data; +}; - { HID_KEY_1, HID_KEY_9, 0, FLAG_SHIFT | FLAG_LUT, }, +#define SEP "\0" // separator in FLAG_STRING sequences +#define NOTHING "" // in FLAG_STRING sequences +#define CURSOR_UP "\e[A" +#define CURSOR_DOWN "\e[B" +#define CURSOR_LEFT "\e[D" +#define CURSOR_RIGHT "\e[C" +#define CURSOR_PGUP "\e[5~" +#define CURSOR_PGDN "\e[6~" +#define CURSOR_HOME "\e[H" +#define CURSOR_END "\e[F" +#define CURSOR_INS "\e[2~" +#define CURSOR_DEL "\e[3~" + +STATIC struct keycode_mapper keycode_to_ascii[] = { + { HID_KEY_A, HID_KEY_Z, 'a', 0, NULL}, + + { HID_KEY_1, HID_KEY_9, 0, FLAG_SHIFT, "!@#$%^&*()" }, { HID_KEY_1, HID_KEY_9, '1', 0, }, { HID_KEY_0, HID_KEY_0, ')', FLAG_SHIFT, }, { HID_KEY_0, HID_KEY_0, '0', 0, }, { HID_KEY_ENTER, HID_KEY_ENTER, '\n', FLAG_CTRL }, - { HID_KEY_ENTER, HID_KEY_SLASH, 2, FLAG_SHIFT | FLAG_LUT, }, - { HID_KEY_ENTER, HID_KEY_SLASH, 1, FLAG_LUT, }, + { HID_KEY_ENTER, HID_KEY_SLASH, 0, FLAG_SHIFT, "\n\x1b\177\t _+{}|~:\"~<>?" }, + { HID_KEY_ENTER, HID_KEY_SLASH, 0, 0, "\r\x1b\10\t -=[]\\#;'`,./" }, { HID_KEY_F1, HID_KEY_F1, 0x1e, 0, }, // help key on xerox 820 kbd - { HID_KEY_ARROW_RIGHT, HID_KEY_ARROW_UP, 3, FLAG_LUT }, + { HID_KEY_KEYPAD_DIVIDE, HID_KEY_KEYPAD_DECIMAL, 0, FLAG_NUMLOCK | FLAG_STRING, + "/\0" "*\0" "-\0" "+\0" "\n\0" CURSOR_END SEP CURSOR_DOWN SEP CURSOR_PGDN SEP CURSOR_LEFT SEP NOTHING SEP CURSOR_RIGHT SEP CURSOR_HOME SEP CURSOR_UP SEP CURSOR_PGDN SEP CURSOR_INS SEP CURSOR_DEL}, + { HID_KEY_KEYPAD_DIVIDE, HID_KEY_KEYPAD_DECIMAL, 0, 0, "/*-+\n1234567890." }, + + { HID_KEY_ARROW_RIGHT, HID_KEY_ARROW_UP, 0, FLAG_STRING, CURSOR_RIGHT SEP CURSOR_LEFT SEP CURSOR_DOWN SEP CURSOR_UP }, - { HID_KEY_KEYPAD_DIVIDE, HID_KEY_KEYPAD_DECIMAL, 4, FLAG_NUMLOCK | FLAG_LUT }, - { HID_KEY_KEYPAD_DIVIDE, HID_KEY_KEYPAD_DECIMAL, 5, FLAG_LUT }, }; STATIC bool report_contains(const hid_keyboard_report_t *report, uint8_t key) { @@ -86,30 +107,63 @@ STATIC bool report_contains(const hid_keyboard_report_t *report, uint8_t key) { return false; } -int old_ascii = -1; -uint32_t repeat_timeout; +STATIC const char *old_buf = NULL; +STATIC size_t buf_size = 0; // this matches Linux default of 500ms to first repeat, 1/20s thereafter -const uint32_t default_repeat_time = 50; -const uint32_t initial_repeat_time = 500; +STATIC const uint32_t initial_repeat_time = 500; -STATIC void send_ascii(uint8_t code, uint32_t repeat_time) { - old_ascii = code; +STATIC void send_bufn(const char *buf, size_t n, uint32_t repeat_time) { + old_buf = buf; + buf_size = n; // repeat_timeout = millis() + repeat_time; - if (code == mp_interrupt_char) { - mp_sched_keyboard_interrupt(); - return; + for (; n--; buf++) { + int code = *buf; + if (code == mp_interrupt_char) { + mp_sched_keyboard_interrupt(); + return; + } + if (ringbuf_num_empty(&_incoming_ringbuf) == 0) { + // Drop on the floor + return; + } + ringbuf_put(&_incoming_ringbuf, code); } - if (ringbuf_num_empty(&_incoming_ringbuf) == 0) { - // Drop on the floor - return; - } - ringbuf_put(&_incoming_ringbuf, code); } +STATIC void send_bufz(const char *buf, uint32_t repeat_time) { + send_bufn(buf, strlen(buf), repeat_time); +} + +STATIC void send_byte(uint8_t code, uint32_t repeat_time) { + static char buf[1]; + buf[0] = code; + send_bufn(buf, 1, repeat_time); +} + +#if 0 +STATIC uint32_t repeat_timeout; +STATIC const uint32_t default_repeat_time = 50; +// TODO: nothing actually SENDS the repetitions... +STATIC void send_repeat() { + if (old_buf) { + send_bufn(old_buf, old_buf_size, default_repeat_time); + } +} +#endif + hid_keyboard_report_t old_report; +STATIC const char *skip_nuls(const char *buf, size_t n) { + while (n--) { + buf += strlen(buf) + 1; + } + return buf; +} + STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard_report_t *report) { - bool alt = report->modifier & 0x44; + bool has_altgr = (user_keymap_len > 256); + bool altgr = has_altgr && report->modifier & 0x40; + bool alt = has_altgr ? report->modifier & 0x4 : report->modifier & 0x44; bool shift = report->modifier & 0x22; bool ctrl = report->modifier & 0x11; bool caps = old_report.reserved & 1; @@ -122,7 +176,7 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard } // something was pressed or release, so cancel any key repeat - old_ascii = -1; + old_buf = NULL; for (int i = 0; i < 6; i++) { uint8_t keycode = report->keycode[i]; @@ -139,6 +193,22 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard } else if (keycode == HID_KEY_CAPS_LOCK) { caps = !caps; } else { + size_t idx = keycode + (altgr ? 256 : shift ? 128 : 0); + uint8_t ascii = user_keymap[idx]; + #if DEBUG + mp_printf(&mp_plat_print, "lookup HID keycode %d mod %x at idx %d -> ascii %d (%c)\n", + keycode, report->modifier, idx, ascii, ascii >= 32 && ascii <= 126 ? ascii : '.'); + #endif + if (ascii != 0) { + if (ctrl) { + ascii &= 0x1f; + } else if (ascii >= 'a' && ascii <= 'z' && caps) { + ascii ^= ('a' ^ 'A'); + } + send_byte(ascii, initial_repeat_time); + continue; + } + for (size_t j = 0; j < MP_ARRAY_SIZE(keycode_to_ascii); j++) { struct keycode_mapper *mapper = &keycode_to_ascii[j]; if (!(keycode >= mapper->first && keycode <= mapper->last)) { @@ -153,15 +223,16 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard if (mapper->flags & FLAG_CTRL && !ctrl) { continue; } - if (mapper->flags & FLAG_LUT) { - code = lut[mapper->code][keycode - mapper->first]; + if (mapper->flags & FLAG_STRING) { + const char *msg = skip_nuls(mapper->data, keycode - mapper->first); + send_bufz(msg, initial_repeat_time); + } else if (mapper->data) { + code = mapper->data[keycode - mapper->first]; } else { code = keycode - mapper->first + mapper->code; } - if (mapper->flags & FLAG_ALPHABETIC) { - if (shift ^ caps) { - code ^= ('a' ^ 'A'); - } + if (code >= 'a' && code <= 'z' && (shift ^ caps)) { + code ^= ('a' ^ 'A'); } if (ctrl) { code &= 0x1f; @@ -169,7 +240,7 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard if (alt) { code ^= 0x80; } - send_ascii(code, initial_repeat_time); + send_byte(code, initial_repeat_time); break; } } diff --git a/supervisor/usb.h b/supervisor/usb.h index 11a9cc27d6..e05dbc1bab 100644 --- a/supervisor/usb.h +++ b/supervisor/usb.h @@ -104,6 +104,7 @@ char usb_keyboard_read_char(void); bool usb_keyboard_in_use(uint8_t dev_addr, uint8_t interface); void usb_keyboard_detach(uint8_t dev_addr, uint8_t interface); void usb_keyboard_attach(uint8_t dev_addr, uint8_t interface); +void usb_keymap_set(const uint8_t *buf, size_t len); #endif #endif // MICROPY_INCLUDED_SUPERVISOR_USB_H From 1a06169e1882a4b30b322e9024fd1a371cbb9979 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 10 Jul 2023 10:00:23 -0500 Subject: [PATCH 105/241] Implement key-repeat --- supervisor/shared/usb/host_keyboard.c | 54 ++++++++++++++++++--------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/supervisor/shared/usb/host_keyboard.c b/supervisor/shared/usb/host_keyboard.c index 7fa7d1e138..518dcf7f77 100644 --- a/supervisor/shared/usb/host_keyboard.c +++ b/supervisor/shared/usb/host_keyboard.c @@ -31,6 +31,8 @@ #include "py/runtime.h" #include "shared/runtime/interrupt_char.h" #include "supervisor/usb.h" +#include "supervisor/background_callback.h" +#include "supervisor/shared/tick.h" #ifndef DEBUG #define DEBUG (0) @@ -110,9 +112,17 @@ STATIC bool report_contains(const hid_keyboard_report_t *report, uint8_t key) { STATIC const char *old_buf = NULL; STATIC size_t buf_size = 0; // this matches Linux default of 500ms to first repeat, 1/20s thereafter -STATIC const uint32_t initial_repeat_time = 500; +enum { initial_repeat_time = 500, default_repeat_time = 50 }; +STATIC uint64_t repeat_deadline; +STATIC void repeat_f(void *unused); +background_callback_t repeat_cb = {repeat_f, NULL, NULL, NULL}; -STATIC void send_bufn(const char *buf, size_t n, uint32_t repeat_time) { +STATIC void set_repeat_deadline(uint64_t new_deadline) { + repeat_deadline = new_deadline; + background_callback_add_core(&repeat_cb); +} + +STATIC void send_bufn_core(const char *buf, size_t n) { old_buf = buf; buf_size = n; // repeat_timeout = millis() + repeat_time; @@ -130,26 +140,36 @@ STATIC void send_bufn(const char *buf, size_t n, uint32_t repeat_time) { } } -STATIC void send_bufz(const char *buf, uint32_t repeat_time) { - send_bufn(buf, strlen(buf), repeat_time); +STATIC void send_bufn(const char *buf, size_t n) { + send_bufn_core(buf, n); + set_repeat_deadline(supervisor_ticks_ms64() + initial_repeat_time); } -STATIC void send_byte(uint8_t code, uint32_t repeat_time) { +STATIC void send_bufz(const char *buf) { + send_bufn(buf, strlen(buf)); +} + +STATIC void send_byte(uint8_t code) { static char buf[1]; buf[0] = code; - send_bufn(buf, 1, repeat_time); + send_bufn(buf, 1); } -#if 0 -STATIC uint32_t repeat_timeout; -STATIC const uint32_t default_repeat_time = 50; -// TODO: nothing actually SENDS the repetitions... -STATIC void send_repeat() { +STATIC void send_repeat(void) { if (old_buf) { - send_bufn(old_buf, old_buf_size, default_repeat_time); + uint64_t now = supervisor_ticks_ms64(); + if (now >= repeat_deadline) { + send_bufn_core(old_buf, buf_size); + set_repeat_deadline(now + default_repeat_time); + } else { + background_callback_add_core(&repeat_cb); + } } } -#endif + +STATIC void repeat_f(void *unused) { + send_repeat(); +} hid_keyboard_report_t old_report; @@ -175,7 +195,7 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard return; } - // something was pressed or release, so cancel any key repeat + // something was pressed or released, so cancel any key repeat old_buf = NULL; for (int i = 0; i < 6; i++) { @@ -205,7 +225,7 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard } else if (ascii >= 'a' && ascii <= 'z' && caps) { ascii ^= ('a' ^ 'A'); } - send_byte(ascii, initial_repeat_time); + send_byte(ascii); continue; } @@ -225,7 +245,7 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard } if (mapper->flags & FLAG_STRING) { const char *msg = skip_nuls(mapper->data, keycode - mapper->first); - send_bufz(msg, initial_repeat_time); + send_bufz(msg); } else if (mapper->data) { code = mapper->data[keycode - mapper->first]; } else { @@ -240,7 +260,7 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard if (alt) { code ^= 0x80; } - send_byte(code, initial_repeat_time); + send_byte(code); break; } } From 843ea86978c10af168b14ca52edf92668bc010fd Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 10 Jul 2023 13:49:28 -0500 Subject: [PATCH 106/241] fix repeating cursor keys --- supervisor/shared/usb/host_keyboard.c | 1 + 1 file changed, 1 insertion(+) diff --git a/supervisor/shared/usb/host_keyboard.c b/supervisor/shared/usb/host_keyboard.c index 518dcf7f77..0fd64d2662 100644 --- a/supervisor/shared/usb/host_keyboard.c +++ b/supervisor/shared/usb/host_keyboard.c @@ -246,6 +246,7 @@ STATIC void process_event(uint8_t dev_addr, uint8_t instance, const hid_keyboard if (mapper->flags & FLAG_STRING) { const char *msg = skip_nuls(mapper->data, keycode - mapper->first); send_bufz(msg); + break; } else if (mapper->data) { code = mapper->data[keycode - mapper->first]; } else { From 6174e585af89fc2f3974862822fca1853491030e Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 11 Jul 2023 10:51:41 -0500 Subject: [PATCH 107/241] usb.core.Device: fix trailing NUL on e.g., product string .. and simplify the code to use vstr_add_char. --- shared-module/usb/utf16le.c | 79 ++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 45 deletions(-) diff --git a/shared-module/usb/utf16le.c b/shared-module/usb/utf16le.c index 24ccd09360..2b55dc6bab 100644 --- a/shared-module/usb/utf16le.c +++ b/shared-module/usb/utf16le.c @@ -26,60 +26,49 @@ #include "shared-module/usb/utf16le.h" -STATIC void _convert_utf16le_to_utf8(const uint16_t *utf16, size_t utf16_len, uint8_t *utf8, size_t utf8_len) { - // TODO: Check for runover. - (void)utf8_len; +typedef struct { + const uint16_t *buf; + size_t len; +} utf16_str; - for (size_t i = 0; i < utf16_len; i++) { - uint16_t chr = utf16[i]; - if (chr < 0x80) { - *utf8++ = chr & 0xff; - } else if (chr < 0x800) { - *utf8++ = (uint8_t)(0xC0 | (chr >> 6 & 0x1F)); - *utf8++ = (uint8_t)(0x80 | (chr >> 0 & 0x3F)); - } else if (chr < 0x10000) { - // TODO: Verify surrogate. - *utf8++ = (uint8_t)(0xE0 | (chr >> 12 & 0x0F)); - *utf8++ = (uint8_t)(0x80 | (chr >> 6 & 0x3F)); - *utf8++ = (uint8_t)(0x80 | (chr >> 0 & 0x3F)); - } else { - // TODO: Handle UTF-16 code points that take two entries. - uint32_t hc = ((chr & 0xFFFF0000) - 0xD8000000) >> 6; /* Get high 10 bits */ - chr = (chr & 0xFFFF) - 0xDC00; /* Get low 10 bits */ - chr = (hc | chr) + 0x10000; - *utf8++ = (uint8_t)(0xF0 | (chr >> 18 & 0x07)); - *utf8++ = (uint8_t)(0x80 | (chr >> 12 & 0x3F)); - *utf8++ = (uint8_t)(0x80 | (chr >> 6 & 0x3F)); - *utf8++ = (uint8_t)(0x80 | (chr >> 0 & 0x3F)); - } +STATIC uint32_t utf16str_peek_unit(utf16_str *utf) { + if (!utf->len) { + return 0; } + return *utf->buf; } -// Count how many bytes a utf-16-le encoded string will take in utf-8. -STATIC mp_int_t _count_utf8_bytes(const uint16_t *buf, size_t len) { - size_t total_bytes = 0; - for (size_t i = 0; i < len; i++) { - uint16_t chr = buf[i]; - if (chr < 0x80) { - total_bytes += 1; - } else if (chr < 0x800) { - total_bytes += 2; - } else if (chr < 0x10000) { - total_bytes += 3; - } else { - total_bytes += 4; +STATIC uint32_t utf16str_next_unit(utf16_str *utf) { + uint32_t result = utf16str_peek_unit(utf); + if (utf->len) { + utf->len--; + utf->buf++; + } + return result; +} +STATIC uint32_t utf16str_next_codepoint(utf16_str *utf) { + uint32_t unichr = utf16str_next_unit(utf); + if (unichr >= 0xd800 && unichr < 0xdc00) { + uint32_t low_surrogate = utf16str_peek_unit(utf); + if (low_surrogate >= 0xdc00 && low_surrogate < 0xe000) { + (void)utf16str_next_unit(utf); + unichr = (unichr - 0xd800) * 0x400 + low_surrogate - 0xdc00 + 0x10000; } } - return total_bytes; + return unichr; +} + +STATIC void _convert_utf16le_to_utf8(vstr_t *vstr, utf16_str *utf) { + while (utf->len) { + vstr_add_char(vstr, utf16str_next_codepoint(utf)); + } } mp_obj_t utf16le_to_string(const uint16_t *buf, size_t utf16_len) { - size_t size = _count_utf8_bytes(buf, utf16_len); + // will grow if necessary, but will never grow for an all-ASCII descriptor vstr_t vstr; - vstr_init_len(&vstr, size + 1); - byte *p = (byte *)vstr.buf; - // Null terminate. - p[size] = '\0'; - _convert_utf16le_to_utf8(buf, utf16_len, p, size); + vstr_init(&vstr, utf16_len); + utf16_str utf = {buf, utf16_len}; + _convert_utf16le_to_utf8(&vstr, &utf); return mp_obj_new_str_from_vstr(&mp_type_str, &vstr); } From 31c3d7ca429d3559fe87191a4118752f31dc2046 Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Wed, 12 Jul 2023 00:02:26 +0000 Subject: [PATCH 108/241] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/pt_BR/ --- locale/pt_BR.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 6f810d93ef..5b6cca5fb3 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-06-23 20:35+0000\n" +"PO-Revision-Date: 2023-07-13 00:51+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.18.1\n" +"X-Generator: Weblate 5.0-dev\n" #: main.c msgid "" @@ -490,7 +490,7 @@ msgstr "Todos os canais estão em uso" #: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All dma channels in use" -msgstr "" +msgstr "Todos os canais dma estão em uso" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" From efd4fffea61ec921f2bdf673626f9a232e2548d7 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Wed, 12 Jul 2023 22:49:39 -0500 Subject: [PATCH 109/241] start_ap max_connections ignored --- shared-bindings/wifi/Radio.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index 66502426cd..e28725c46c 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -339,7 +339,12 @@ MP_DEFINE_CONST_FUN_OBJ_1(wifi_radio_stop_station_obj, wifi_radio_stop_station); //| or exactly 64 hexadecimal characters if it is the hex form of the 256-bit key. //| //| If ``max_connections`` is given, the access point will allow up to -//| that number of stations to connect.""" +//| that number of stations to connect. +//| +//| .. note:: +//| +//| In the raspberrypi port (RP2040 CYW43), ``max_connections`` is ignored. +//| """ //| ... STATIC mp_obj_t wifi_radio_start_ap(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { enum { ARG_ssid, ARG_password, ARG_channel, ARG_authmode, ARG_max_connections }; From a7bbb05e25b035cc37530ef8a9a40456ff2b2e5f Mon Sep 17 00:00:00 2001 From: madcitygeek Date: Wed, 12 Jul 2023 22:59:43 -0500 Subject: [PATCH 110/241] Update mpconfigboard.mk Use unique CIRCUITPY_CREATION_ID --- .../espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.mk b/ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.mk index e0df58f756..6a19c783f1 100644 --- a/ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.mk +++ b/ports/espressif/boards/luatos_core_esp32c3_ch343/mpconfigboard.mk @@ -1,5 +1,5 @@ CIRCUITPY_CREATOR_ID = 0xDEADBEEF -CIRCUITPY_CREATION_ID = 0x00C30001 +CIRCUITPY_CREATION_ID = 0x00C30002 IDF_TARGET = esp32c3 From bd2072123a9f9f6ba073a597be42237d34cad4dc Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Wed, 12 Jul 2023 23:24:33 -0500 Subject: [PATCH 111/241] web workflow: uses an mdns port service slot --- docs/workflows.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/workflows.md b/docs/workflows.md index 453b425491..a82130e63c 100644 --- a/docs/workflows.md +++ b/docs/workflows.md @@ -94,6 +94,10 @@ MDNS is used to resolve [`circuitpython.local`](http://circuitpython.local) to a hostname of the form `cpy-XXXXXX.local`. The `XXXXXX` is based on network MAC address. The device also provides the MDNS service with service type `_circuitpython` and protocol `_tcp`. +Since port 80 (or the port assigned to `CIRCUITPY_WEB_API_PORT`) is used for MDNS, the `mdns` +[module](https://docs.circuitpython.org/en/latest/shared-bindings/mdns/index.html#mdns.Server.advertise_service) +can't also advertise a service on that port. + ### HTTP The web server is HTTP 1.1 and may use chunked responses so that it doesn't need to precompute content length. From cf5028e85bf13b0d3ce8411ff3f5efbd8385b8f2 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Wed, 12 Jul 2023 23:32:44 -0500 Subject: [PATCH 112/241] mdns: can't use web workflow port --- shared-bindings/mdns/Server.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/shared-bindings/mdns/Server.c b/shared-bindings/mdns/Server.c index 0d06d67f0d..2afc64e02b 100644 --- a/shared-bindings/mdns/Server.c +++ b/shared-bindings/mdns/Server.c @@ -171,6 +171,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mdns_server_find_obj, 1, _mdns_server_find); //| ``service_type`` and ``protocol`` can only occur on one port. Any call after the first //| will update the entry's port. //| +//| If web workflow is active, the port it uses can't also be used to advertise a service. +//| //| :param str service_type: The service type such as "_http" //| :param str protocol: The service protocol such as "_tcp" //| :param int port: The port used by the service""" From d4ac8e75e83b69b73c792c80ffbfac25821a959a Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Wed, 12 Jul 2023 23:41:14 -0500 Subject: [PATCH 113/241] raspberrypi: start AP before set IPv4 --- shared-bindings/wifi/Radio.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index e28725c46c..157803d45c 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -565,6 +565,11 @@ MP_PROPERTY_GETTER(wifi_radio_ipv4_subnet_ap_obj, //| ) -> None: //| """Sets the IP v4 address of the station. Must include the netmask and gateway. DNS address is optional. //| Setting the address manually will stop the DHCP client.""" +//| +//| .. note:: +//| +//| In the raspberrypi port (RP2040 CYW43), the access point needs to be started before the IP v4 address can be set. +//| """ //| ... STATIC mp_obj_t wifi_radio_set_ipv4_address(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { enum { ARG_ipv4, ARG_netmask, ARG_gateway, ARG_ipv4_dns }; From 69d2f5ec2a0481d764f80f8dc342348ad6ea8fb8 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Wed, 12 Jul 2023 23:53:52 -0500 Subject: [PATCH 114/241] formatting fix --- shared-bindings/wifi/Radio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index 157803d45c..17a16eab63 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -564,7 +564,7 @@ MP_PROPERTY_GETTER(wifi_radio_ipv4_subnet_ap_obj, //| ipv4_dns: Optional[ipaddress.IPv4Address], //| ) -> None: //| """Sets the IP v4 address of the station. Must include the netmask and gateway. DNS address is optional. -//| Setting the address manually will stop the DHCP client.""" +//| Setting the address manually will stop the DHCP client. //| //| .. note:: //| From 3ac84281bf2fa7a3fcb1323e2ef4d3cf98b279db Mon Sep 17 00:00:00 2001 From: Sylwester Date: Thu, 13 Jul 2023 12:04:27 +0200 Subject: [PATCH 115/241] Add NeoPixel Library for Datanoise PicoADK. --- ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.mk b/ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.mk index 1398f0b97f..405821da3e 100644 --- a/ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.mk +++ b/ports/raspberrypi/boards/datanoise_picoadk/mpconfigboard.mk @@ -7,3 +7,6 @@ CHIP_VARIANT = RP2040 CHIP_FAMILY = rp2 EXTERNAL_FLASH_DEVICES = "GD25Q32C,W25Q32JVxQ" + +# Include these Python libraries in firmware. +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel From 235983652fb4ea19a555814d7c79f2f9514907ff Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 13 Jul 2023 09:47:38 -0500 Subject: [PATCH 116/241] throw an exception if os.getenv is used on a board without settings.toml support --- shared-bindings/os/__init__.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-bindings/os/__init__.c b/shared-bindings/os/__init__.c index e9e5f0885f..4ff48499a5 100644 --- a/shared-bindings/os/__init__.c +++ b/shared-bindings/os/__init__.c @@ -103,7 +103,7 @@ STATIC mp_obj_t os_getenv(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ return common_hal_os_getenv(mp_obj_str_get_str(args[ARG_key].u_obj), args[ARG_default].u_obj); #else - return mp_const_none; + mp_raise_NotImplementedError(NULL); #endif } STATIC MP_DEFINE_CONST_FUN_OBJ_KW(os_getenv_obj, 1, os_getenv); From 73af1b8a30159fbce89a1e59cd6336c92ccbaba7 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Thu, 13 Jul 2023 12:41:07 -0500 Subject: [PATCH 117/241] Update docs/workflows.md Co-authored-by: Scott Shawcroft --- docs/workflows.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/workflows.md b/docs/workflows.md index a82130e63c..10d2897870 100644 --- a/docs/workflows.md +++ b/docs/workflows.md @@ -94,9 +94,9 @@ MDNS is used to resolve [`circuitpython.local`](http://circuitpython.local) to a hostname of the form `cpy-XXXXXX.local`. The `XXXXXX` is based on network MAC address. The device also provides the MDNS service with service type `_circuitpython` and protocol `_tcp`. -Since port 80 (or the port assigned to `CIRCUITPY_WEB_API_PORT`) is used for MDNS, the `mdns` +Since port 80 (or the port assigned to `CIRCUITPY_WEB_API_PORT`) is used for web workflow, the `mdns` [module](https://docs.circuitpython.org/en/latest/shared-bindings/mdns/index.html#mdns.Server.advertise_service) -can't also advertise a service on that port. +can't advertise an additional service on that port. ### HTTP The web server is HTTP 1.1 and may use chunked responses so that it doesn't need to precompute From 9642e387839c7fad564edc9909f22e8fcf2bec2e Mon Sep 17 00:00:00 2001 From: Seon Rozenblum Date: Tue, 13 Jun 2023 19:00:08 +1000 Subject: [PATCH 118/241] Added second I2C B\bus IO and stuff for FeatherS3 --- .../unexpectedmaker_feathers3/mpconfigboard.h | 5 +-- .../boards/unexpectedmaker_feathers3/pins.c | 32 +++++++++++++++---- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/ports/espressif/boards/unexpectedmaker_feathers3/mpconfigboard.h b/ports/espressif/boards/unexpectedmaker_feathers3/mpconfigboard.h index 67054b8664..1d51cb77d9 100644 --- a/ports/espressif/boards/unexpectedmaker_feathers3/mpconfigboard.h +++ b/ports/espressif/boards/unexpectedmaker_feathers3/mpconfigboard.h @@ -34,8 +34,9 @@ #define MICROPY_HW_LED_STATUS (&pin_GPIO13) -#define DEFAULT_I2C_BUS_SCL (&pin_GPIO9) -#define DEFAULT_I2C_BUS_SDA (&pin_GPIO8) +#define CIRCUITPY_BOARD_I2C (2) +#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO9, .sda = &pin_GPIO8}, \ + {.scl = &pin_GPIO15, .sda = &pin_GPIO16}} #define DEFAULT_SPI_BUS_SCK (&pin_GPIO36) #define DEFAULT_SPI_BUS_MOSI (&pin_GPIO35) diff --git a/ports/espressif/boards/unexpectedmaker_feathers3/pins.c b/ports/espressif/boards/unexpectedmaker_feathers3/pins.c index 9a2fde5a0c..4480e01438 100644 --- a/ports/espressif/boards/unexpectedmaker_feathers3/pins.c +++ b/ports/espressif/boards/unexpectedmaker_feathers3/pins.c @@ -1,5 +1,7 @@ #include "shared-bindings/board/__init__.h" +CIRCUITPY_BOARD_BUS_SINGLETON(stemma_i2c, i2c, 1) + STATIC const mp_rom_map_elem_t board_module_globals_table[] = { CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS @@ -89,11 +91,16 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO11) }, { MP_ROM_QSTR(MP_QSTR_A10), MP_ROM_PTR(&pin_GPIO11) }, - { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) }, // Blue LED + // Blue LED + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) }, + + // STEMMA QT Vertical Connector I2C IO + { MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) }, + { MP_ROM_QSTR(MP_QSTR_SCL2), MP_ROM_PTR(&pin_GPIO15) }, + { MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) }, + { MP_ROM_QSTR(MP_QSTR_SDA2), MP_ROM_PTR(&pin_GPIO16) }, // Battery voltage sense pin - // I really don't know what name to use here. Adafruit use BATTERY & VOLTAGE_MONITOR - // I prefer VBAT or VBAT_SENSE { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_GPIO2) }, { MP_ROM_QSTR(MP_QSTR_VBAT), MP_ROM_PTR(&pin_GPIO2) }, { MP_ROM_QSTR(MP_QSTR_VBAT_SENSE), MP_ROM_PTR(&pin_GPIO2) }, @@ -103,18 +110,29 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_VBUS), MP_ROM_PTR(&pin_GPIO34) }, { MP_ROM_QSTR(MP_QSTR_VBUS_SENSE), MP_ROM_PTR(&pin_GPIO34) }, + // Neopixel pins { MP_ROM_QSTR(MP_QSTR_NEOPIXEL_POWER), MP_ROM_PTR(&pin_GPIO39) }, { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO40) }, - { MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) }, // Ambient Light Sensor - { MP_ROM_QSTR(MP_QSTR_AMB), MP_ROM_PTR(&pin_GPIO4) }, // Ambient Light Sensor + // Ambient Light Sensor + { MP_ROM_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) }, + { MP_ROM_QSTR(MP_QSTR_AMB), MP_ROM_PTR(&pin_GPIO4) }, - { MP_ROM_QSTR(MP_QSTR_LDO2), MP_ROM_PTR(&pin_GPIO39) }, // Second LDO Enable control - { MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) }, // Second LDO Enable control + // Second LDO Enable control + { MP_ROM_QSTR(MP_QSTR_LDO2), MP_ROM_PTR(&pin_GPIO39) }, + { MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) }, + // I2C { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_STEMMA_VERTICAL_I2C), MP_ROM_PTR(&board_stemma_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_STEMMA2_I2C), MP_ROM_PTR(&board_stemma_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_I2C2), MP_ROM_PTR(&board_stemma_i2c_obj) }, + + // SPI { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + + // UART { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, }; MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From 03e93f8e6c5e92ee6d580c998343cd18834c6a37 Mon Sep 17 00:00:00 2001 From: KB Sriram Date: Fri, 14 Jul 2023 21:53:58 -0700 Subject: [PATCH 119/241] py/objdict: Fix fromkeys to return the right type. Fixes https://github.com/adafruit/circuitpython/issues/8173 It looks like a small fix, and mostly independent of upstream plans around https://github.com/micropython/micropython/pull/6173 I also filed an issue upstream https://github.com/micropython/micropython/issues/12011 --- py/objdict.c | 16 ++++++++++++---- tests/basics/ordereddict1.py | 11 +++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/py/objdict.c b/py/objdict.c index 02aedacdd6..b63ea89137 100644 --- a/py/objdict.c +++ b/py/objdict.c @@ -110,8 +110,10 @@ STATIC void dict_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_ } } -mp_obj_t mp_obj_dict_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { - mp_obj_t dict_out = mp_obj_new_dict(0); +// This is a helper function to initialize an empty, but typed dictionary with +// a given number of slots. +STATIC mp_obj_t dict_new_typed(const mp_obj_type_t *type, const size_t n) { + mp_obj_t dict_out = mp_obj_new_dict(n); mp_obj_dict_t *dict = MP_OBJ_TO_PTR(dict_out); dict->base.type = type; #if MICROPY_PY_COLLECTIONS_ORDEREDDICT @@ -119,6 +121,11 @@ mp_obj_t mp_obj_dict_make_new(const mp_obj_type_t *type, size_t n_args, size_t n dict->map.is_ordered = 1; } #endif + return dict_out; +} + +mp_obj_t mp_obj_dict_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { + mp_obj_t dict_out = dict_new_typed(type, 0); if (n_args > 0 || n_kw > 0) { mp_obj_t args2[2] = {dict_out, args[0]}; // args[0] is always valid, even if it's not a positional arg mp_map_t kwargs; @@ -264,6 +271,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(dict_copy_obj, mp_obj_dict_copy); #if MICROPY_PY_BUILTINS_DICT_FROMKEYS // this is a classmethod STATIC mp_obj_t dict_fromkeys(size_t n_args, const mp_obj_t *args) { + mp_obj_type_t *type = MP_OBJ_TO_PTR(args[0]); mp_obj_t iter = mp_getiter(args[1], NULL); mp_obj_t value = mp_const_none; mp_obj_t next = MP_OBJ_NULL; @@ -277,9 +285,9 @@ STATIC mp_obj_t dict_fromkeys(size_t n_args, const mp_obj_t *args) { mp_obj_t len = mp_obj_len_maybe(args[1]); if (len == MP_OBJ_NULL) { /* object's type doesn't have a __len__ slot */ - self_out = mp_obj_new_dict(0); + self_out = dict_new_typed(type, 0); } else { - self_out = mp_obj_new_dict(MP_OBJ_SMALL_INT_VALUE(len)); + self_out = dict_new_typed(type, MP_OBJ_SMALL_INT_VALUE(len)); } mp_obj_dict_t *self = MP_OBJ_TO_PTR(self_out); diff --git a/tests/basics/ordereddict1.py b/tests/basics/ordereddict1.py index a6f305ff78..b70d7ff5d1 100644 --- a/tests/basics/ordereddict1.py +++ b/tests/basics/ordereddict1.py @@ -41,3 +41,14 @@ try: d.popitem() except: print('empty') + +# fromkeys returns the correct type and order +d = dict.fromkeys('abcdefghij') +print(type(d) == dict) +d = OrderedDict.fromkeys('abcdefghij') +print(type(d) == OrderedDict) +print(''.join(d)) + +# fromkey handles ordering with duplicates +d = OrderedDict.fromkeys('abcdefghijjihgfedcba') +print(''.join(d)) From 1e2b25be56f95ae7d36b67c5c69a115a05c917c9 Mon Sep 17 00:00:00 2001 From: Jose David M Date: Sat, 15 Jul 2023 01:18:59 +0000 Subject: [PATCH 120/241] Translated using Weblate (Spanish) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/es/ --- locale/es.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/es.po b/locale/es.po index 6b832dccfd..ba8b07d0dd 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: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-10 14:50+0000\n" +"PO-Revision-Date: 2023-07-16 04:32+0000\n" "Last-Translator: Jose David M \n" "Language-Team: \n" "Language: es\n" @@ -488,7 +488,7 @@ msgstr "Todos los canales están en uso" #: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All dma channels in use" -msgstr "" +msgstr "Todos los canales DMA en uso" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" From 2295b1f1ea8e13d11997df8815714c5948f0853a Mon Sep 17 00:00:00 2001 From: hexthat Date: Sat, 15 Jul 2023 03:49:33 +0000 Subject: [PATCH 121/241] Translated using Weblate (Chinese (Pinyin)) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/zh_Latn/ --- locale/zh_Latn_pinyin.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index ba6a621b6b..4f56b14dfd 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -7,15 +7,15 @@ msgstr "" "Project-Id-Version: circuitpython-cn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-05-21 00:49+0000\n" -"Last-Translator: Scott Shawcroft \n" +"PO-Revision-Date: 2023-07-16 04:32+0000\n" +"Last-Translator: hexthat \n" "Language-Team: Chinese Hanyu Pinyin\n" "Language: zh_Latn_pinyin\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.18-dev\n" +"X-Generator: Weblate 5.0-dev\n" #: main.c msgid "" @@ -489,7 +489,7 @@ msgstr "suǒyǒu píndào dōu zài shǐyòng zhōng" #: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All dma channels in use" -msgstr "" +msgstr "suǒyǒu Zhíjiē nèicún fǎngwèn dōu zài shǐyòng zhōng" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" @@ -2528,7 +2528,7 @@ msgstr "zhù shì bì xū shì biāo zhì fú" #: extmod/ulab/code/numpy/create.c msgid "arange: cannot compute length" -msgstr "" +msgstr "fànwéi: wúfǎ jìsuàn chángdù" #: py/modbuiltins.c msgid "arg is an empty sequence" @@ -2704,7 +2704,7 @@ msgstr "zhǐyǒu Xtensa zǔjiàn zuìduō 4 cānshù" #: extmod/ulab/code/ndarray.c msgid "can only specify one unknown dimension" -msgstr "" +msgstr "zhǐ néngzhǐ dìngyígè wèizhī wéidù" #: py/objtype.c msgid "can't add special method to already-subclassed class" @@ -2860,7 +2860,7 @@ msgstr "wúfǎ dǎorù míngchēng %q" #: extmod/ulab/code/ndarray.c msgid "cannot reshape array" -msgstr "" +msgstr "wúfǎ chóngsù zhènliè xíngzhuàng" #: extmod/moductypes.c msgid "cannot unambiguously get sizeof scalar" @@ -4033,7 +4033,7 @@ msgstr "shè zhì bù shòu zhī chí" #: extmod/ulab/code/ndarray.c msgid "shape must be integer or tuple of integers" -msgstr "" +msgstr "xíngzhuàng bìxū shì zhěngshù huò zhěngshù yuánzǔ" #: shared-module/msgpack/__init__.c msgid "short read" From 8289722679678ce3cf45c642c0658bce0a33d558 Mon Sep 17 00:00:00 2001 From: anecdata <16617689+anecdata@users.noreply.github.com> Date: Sun, 16 Jul 2023 20:35:49 -0500 Subject: [PATCH 122/241] docs: wifi.radio.ipv4_address_ap is read-only --- shared-bindings/wifi/Radio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-bindings/wifi/Radio.c b/shared-bindings/wifi/Radio.c index 66502426cd..c3c271b0da 100644 --- a/shared-bindings/wifi/Radio.c +++ b/shared-bindings/wifi/Radio.c @@ -616,7 +616,7 @@ MP_PROPERTY_GETTER(wifi_radio_ipv4_address_obj, (mp_obj_t)&wifi_radio_get_ipv4_address_obj); //| ipv4_address_ap: Optional[ipaddress.IPv4Address] -//| """IP v4 Address of the access point, when enabled. None otherwise.""" +//| """IP v4 Address of the access point, when enabled. None otherwise. (read-only)""" STATIC mp_obj_t wifi_radio_get_ipv4_address_ap(mp_obj_t self) { return common_hal_wifi_radio_get_ipv4_address_ap(self); } From fd1fdee312881c020f75e3f82c3b89df858b7c71 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 17 Jul 2023 09:08:13 -0500 Subject: [PATCH 123/241] move set_user_keymap to usb_host module --- shared-bindings/usb/__init__.c | 31 --------------------------- shared-bindings/usb_host/__init__.c | 33 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 31 deletions(-) diff --git a/shared-bindings/usb/__init__.c b/shared-bindings/usb/__init__.c index b22fce8011..1227db01e1 100644 --- a/shared-bindings/usb/__init__.c +++ b/shared-bindings/usb/__init__.c @@ -37,41 +37,10 @@ //| The `usb` is a subset of PyUSB that allows you to communicate to USB devices. //| """ //| -//| def set_user_keymap(keymap: ReadableBuffer, /) -> None: -//| """Set the keymap used by a USB HID keyboard in kernel mode -//| -//| The keymap consists of 256 or 384 1-byte entries that map from USB keycodes -//| to ASCII codes. The first 128 entries are for unmodified keys, -//| the next 128 entries are for shifted keys,and the next optional 128 entries are -//| for altgr-modified keys. -//| -//| The values must all be ASCII (32 through 126 inclusive); other values are not valid. -//| -//| The values at index 0, 128, and 256 (if the keymap has 384 entries) must be -//| 0; other values are reserved for future expansion to indicate alternate -//| keymap formats. -//| -//| At other indices, the value 0 is used to indicate that the normal -//| definition is still used. For instance, the entry for HID_KEY_ARROW_UP -//| (0x52) is usually 0 so that the default behavior of sending an escape code -//| is preserved. -//| -//| This function is a CircuitPython extension not present in PyUSB -//| """ -//| -STATIC mp_obj_t usb_set_user_keymap(mp_obj_t buf_in) { - mp_buffer_info_t bufinfo; - mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_READ); - usb_keymap_set(bufinfo.buf, bufinfo.len); - return mp_const_none; -} - -MP_DEFINE_CONST_FUN_OBJ_1(usb_set_user_keymap_obj, usb_set_user_keymap); STATIC mp_rom_map_elem_t usb_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_usb) }, { MP_ROM_QSTR(MP_QSTR_core), MP_OBJ_FROM_PTR(&usb_core_module) }, - { MP_ROM_QSTR(MP_QSTR_set_user_keymap), MP_OBJ_FROM_PTR(&usb_set_user_keymap_obj) }, }; STATIC MP_DEFINE_CONST_DICT(usb_module_globals, usb_module_globals_table); diff --git a/shared-bindings/usb_host/__init__.c b/shared-bindings/usb_host/__init__.c index 5c884b3ec2..74ee78b3b3 100644 --- a/shared-bindings/usb_host/__init__.c +++ b/shared-bindings/usb_host/__init__.c @@ -30,16 +30,49 @@ #include "shared-bindings/usb_host/__init__.h" #include "shared-bindings/usb_host/Port.h" +#include "supervisor/usb.h" //| """USB Host //| //| The `usb_host` module allows you to manage USB host ports. To communicate //| with devices use the `usb` module that is a subset of PyUSB's API. //| """ +//| +//| def set_user_keymap(keymap: ReadableBuffer, /) -> None: +//| """Set the keymap used by a USB HID keyboard in kernel mode +//| +//| The keymap consists of 256 or 384 1-byte entries that map from USB keycodes +//| to ASCII codes. The first 128 entries are for unmodified keys, +//| the next 128 entries are for shifted keys,and the next optional 128 entries are +//| for altgr-modified keys. +//| +//| The values must all be ASCII (32 through 126 inclusive); other values are not valid. +//| +//| The values at index 0, 128, and 256 (if the keymap has 384 entries) must be +//| 0; other values are reserved for future expansion to indicate alternate +//| keymap formats. +//| +//| At other indices, the value 0 is used to indicate that the normal +//| definition is still used. For instance, the entry for HID_KEY_ARROW_UP +//| (0x52) is usually 0 so that the default behavior of sending an escape code +//| is preserved. +//| +//| This function is a CircuitPython extension not present in PyUSB +//| """ +//| +STATIC mp_obj_t usb_set_user_keymap(mp_obj_t buf_in) { + mp_buffer_info_t bufinfo; + mp_get_buffer_raise(buf_in, &bufinfo, MP_BUFFER_READ); + usb_keymap_set(bufinfo.buf, bufinfo.len); + return mp_const_none; +} + +MP_DEFINE_CONST_FUN_OBJ_1(usb_set_user_keymap_obj, usb_set_user_keymap); STATIC mp_map_elem_t usb_host_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_usb_host) }, { MP_ROM_QSTR(MP_QSTR_Port), MP_OBJ_FROM_PTR(&usb_host_port_type) }, + { MP_ROM_QSTR(MP_QSTR_set_user_keymap), MP_OBJ_FROM_PTR(&usb_set_user_keymap_obj) }, }; STATIC MP_DEFINE_CONST_DICT(usb_host_module_globals, usb_host_module_globals_table); From 4f090782934219332d0137f0f07b3bc775d2034e Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 17 Jul 2023 12:56:55 -0500 Subject: [PATCH 124/241] update metro rp2040 to work with 16MB flash --- ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.mk b/ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.mk index 14b3af9d57..20c3042b7a 100644 --- a/ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.mk +++ b/ports/raspberrypi/boards/adafruit_metro_rp2040/mpconfigboard.mk @@ -6,4 +6,4 @@ USB_MANUFACTURER = "Adafruit" CHIP_VARIANT = RP2040 CHIP_FAMILY = rp2 -EXTERNAL_FLASH_DEVICES = "GD25Q64C,W25Q64JVxQ" +EXTERNAL_FLASH_DEVICES = "GD25Q64C,W25Q64JVxQ,W25Q128JV" From dd266f2622ebb864342e75ca778e5a9ca9363626 Mon Sep 17 00:00:00 2001 From: ladyada Date: Tue, 18 Jul 2023 01:02:38 -0400 Subject: [PATCH 125/241] renamed since we are now s3 --- .../board.c | 0 .../mpconfigboard.h | 2 +- .../mpconfigboard.mk | 4 ++- .../pins.c | 0 .../sdkconfig | 29 +++++++++++++++---- 5 files changed, 27 insertions(+), 8 deletions(-) rename ports/espressif/boards/{adafruit_esp32s2_camera => adafruit_esp32s3_camera}/board.c (100%) rename ports/espressif/boards/{adafruit_esp32s2_camera => adafruit_esp32s3_camera}/mpconfigboard.h (97%) rename ports/espressif/boards/{adafruit_esp32s2_camera => adafruit_esp32s3_camera}/mpconfigboard.mk (79%) rename ports/espressif/boards/{adafruit_esp32s2_camera => adafruit_esp32s3_camera}/pins.c (100%) rename ports/espressif/boards/{adafruit_esp32s2_camera => adafruit_esp32s3_camera}/sdkconfig (61%) diff --git a/ports/espressif/boards/adafruit_esp32s2_camera/board.c b/ports/espressif/boards/adafruit_esp32s3_camera/board.c similarity index 100% rename from ports/espressif/boards/adafruit_esp32s2_camera/board.c rename to ports/espressif/boards/adafruit_esp32s3_camera/board.c diff --git a/ports/espressif/boards/adafruit_esp32s2_camera/mpconfigboard.h b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h similarity index 97% rename from ports/espressif/boards/adafruit_esp32s2_camera/mpconfigboard.h rename to ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h index 64ab1b966d..8c0c9cdaae 100644 --- a/ports/espressif/boards/adafruit_esp32s2_camera/mpconfigboard.h +++ b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h @@ -27,7 +27,7 @@ // Micropython setup #define MICROPY_HW_BOARD_NAME "Adafruit Camera" -#define MICROPY_HW_MCU_NAME "ESP32S2" +#define MICROPY_HW_MCU_NAME "ESP32S3" #define MICROPY_HW_NEOPIXEL (&pin_GPIO21) #define MICROPY_HW_NEOPIXEL_COUNT (1) diff --git a/ports/espressif/boards/adafruit_esp32s2_camera/mpconfigboard.mk b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk similarity index 79% rename from ports/espressif/boards/adafruit_esp32s2_camera/mpconfigboard.mk rename to ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk index 1823c1dd88..df7e62511a 100644 --- a/ports/espressif/boards/adafruit_esp32s2_camera/mpconfigboard.mk +++ b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk @@ -3,8 +3,10 @@ USB_PID = 0x8118 USB_PRODUCT = "Camera" USB_MANUFACTURER = "Adafruit" -IDF_TARGET = esp32s2 +IDF_TARGET = esp32s3 CIRCUITPY_ESP_FLASH_MODE = dio CIRCUITPY_ESP_FLASH_FREQ = 40m CIRCUITPY_ESP_FLASH_SIZE = 4MB + +CIRCUITPY_ESPCAMERA = 1 diff --git a/ports/espressif/boards/adafruit_esp32s2_camera/pins.c b/ports/espressif/boards/adafruit_esp32s3_camera/pins.c similarity index 100% rename from ports/espressif/boards/adafruit_esp32s2_camera/pins.c rename to ports/espressif/boards/adafruit_esp32s3_camera/pins.c diff --git a/ports/espressif/boards/adafruit_esp32s2_camera/sdkconfig b/ports/espressif/boards/adafruit_esp32s3_camera/sdkconfig similarity index 61% rename from ports/espressif/boards/adafruit_esp32s2_camera/sdkconfig rename to ports/espressif/boards/adafruit_esp32s3_camera/sdkconfig index 9d8bbde967..02056b1348 100644 --- a/ports/espressif/boards/adafruit_esp32s2_camera/sdkconfig +++ b/ports/espressif/boards/adafruit_esp32s3_camera/sdkconfig @@ -1,25 +1,32 @@ -CONFIG_ESP32S2_SPIRAM_SUPPORT=y +# Component config +# +# +# ESP32S3-Specific +# +CONFIG_ESP32S3_SPIRAM_SUPPORT=y # # SPI RAM config # -# CONFIG_SPIRAM_TYPE_AUTO is not set -CONFIG_SPIRAM_TYPE_ESPPSRAM16=y +CONFIG_SPIRAM_MODE_QUAD=y +# CONFIG_SPIRAM_MODE_OCT is not set +CONFIG_SPIRAM_TYPE_AUTO=y +# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set # CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set # CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set CONFIG_SPIRAM_SIZE=2097152 # -# PSRAM clock and cs IO for ESP32S2 +# PSRAM Clock and CS IO for ESP32S3 # CONFIG_DEFAULT_PSRAM_CLK_IO=30 CONFIG_DEFAULT_PSRAM_CS_IO=26 -# end of PSRAM clock and cs IO for ESP32S2 +# end of PSRAM Clock and CS IO for ESP32S3 # CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set # CONFIG_SPIRAM_RODATA is not set # CONFIG_SPIRAM_SPEED_80M is not set -CONFIG_SPIRAM_SPEED_40M=y +CONFIG_SPIRAM_SPEED_80M=y # CONFIG_SPIRAM_SPEED_26M is not set # CONFIG_SPIRAM_SPEED_20M is not set CONFIG_SPIRAM=y @@ -31,3 +38,13 @@ CONFIG_SPIRAM_USE_MEMMAP=y CONFIG_SPIRAM_MEMTEST=y # CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set # end of SPI RAM config + +# end of ESP32S3-Specific + +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="espressif-esp32s3" +# end of LWIP + +# end of Component config From 1629faf8b3c662d86a9f572b8388263cf9711800 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 13 Jul 2023 14:47:05 -0700 Subject: [PATCH 126/241] Make usb_host.Port a singleton This allows you to initialize usb_host.Port once successfully and then returns the same object as long as you pass the same arguments in. It does allow you to fix incorrect pins but not switching from one valid set to another. (It needs a reset for that.) This also moves hcd cache operations to RAM so that they don't access the cache when doing maintenance. --- lib/tinyusb | 2 +- ports/mimxrt10xx/boards/imxrt1060_evk/board.c | 6 +++ .../mimxrt10xx/boards/imxrt1060_evkb/board.c | 8 ++- ports/mimxrt10xx/boards/teensy41/board.c | 6 +++ ports/mimxrt10xx/common-hal/usb_host/Port.c | 35 +++++++++---- ports/mimxrt10xx/common-hal/usb_host/Port.h | 7 +-- ports/mimxrt10xx/linking/common.ld | 5 +- ports/mimxrt10xx/supervisor/usb.c | 7 ++- .../adafruit_feather_rp2040_usb_host/board.c | 3 +- ports/raspberrypi/common-hal/usb_host/Port.c | 33 +++++++----- ports/raspberrypi/common-hal/usb_host/Port.h | 7 +-- shared-bindings/usb_host/Port.c | 51 +++++-------------- shared-bindings/usb_host/Port.h | 8 +-- supervisor/shared/usb/tusb_config.h | 3 +- 14 files changed, 97 insertions(+), 84 deletions(-) diff --git a/lib/tinyusb b/lib/tinyusb index f1e006d09b..6c7c9f2ef5 160000 --- a/lib/tinyusb +++ b/lib/tinyusb @@ -1 +1 @@ -Subproject commit f1e006d09bd32088ab421d0b519eb89c531eda4e +Subproject commit 6c7c9f2ef5a80d5a6879e9c3558162188c6cf889 diff --git a/ports/mimxrt10xx/boards/imxrt1060_evk/board.c b/ports/mimxrt10xx/boards/imxrt1060_evk/board.c index 4a2e6e0913..12278acabb 100644 --- a/ports/mimxrt10xx/boards/imxrt1060_evk/board.c +++ b/ports/mimxrt10xx/boards/imxrt1060_evk/board.c @@ -28,6 +28,8 @@ #include "supervisor/board.h" #include "shared-bindings/microcontroller/Pin.h" +#include "shared-bindings/usb_host/Port.h" + // These pins should never ever be reset; doing so could interfere with basic operation. // Used in common-hal/microcontroller/Pin.c const mcu_pin_obj_t *mimxrt10xx_reset_forbidden_pins[] = { @@ -55,4 +57,8 @@ const mcu_pin_obj_t *mimxrt10xx_reset_forbidden_pins[] = { NULL, // Must end in NULL. }; +void board_init(void) { + common_hal_usb_host_port_construct(&pin_USB_OTG2_DP, &pin_USB_OTG2_DN); +} + // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/mimxrt10xx/boards/imxrt1060_evkb/board.c b/ports/mimxrt10xx/boards/imxrt1060_evkb/board.c index 4a2e6e0913..26dd28cbb4 100644 --- a/ports/mimxrt10xx/boards/imxrt1060_evkb/board.c +++ b/ports/mimxrt10xx/boards/imxrt1060_evkb/board.c @@ -28,6 +28,8 @@ #include "supervisor/board.h" #include "shared-bindings/microcontroller/Pin.h" +#include "shared-bindings/usb_host/Port.h" + // These pins should never ever be reset; doing so could interfere with basic operation. // Used in common-hal/microcontroller/Pin.c const mcu_pin_obj_t *mimxrt10xx_reset_forbidden_pins[] = { @@ -52,7 +54,11 @@ const mcu_pin_obj_t *mimxrt10xx_reset_forbidden_pins[] = { // USB Pins &pin_GPIO_AD_B0_01, // ID Pin &pin_GPIO_AD_B0_03, // OC/Fault Pin - NULL, // Must end in NULL. + NULL, // Must end in NULL. }; +void board_init(void) { + common_hal_usb_host_port_construct(&pin_USB_OTG2_DP, &pin_USB_OTG2_DN); +} + // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/mimxrt10xx/boards/teensy41/board.c b/ports/mimxrt10xx/boards/teensy41/board.c index 8ece1546d7..3418cff43f 100644 --- a/ports/mimxrt10xx/boards/teensy41/board.c +++ b/ports/mimxrt10xx/boards/teensy41/board.c @@ -28,6 +28,8 @@ #include "supervisor/board.h" #include "shared-bindings/microcontroller/Pin.h" +#include "shared-bindings/usb_host/Port.h" + // These pins should never ever be reset; doing so could interfere with basic operation. // Used in common-hal/microcontroller/Pin.c const mcu_pin_obj_t *mimxrt10xx_reset_forbidden_pins[] = { @@ -54,4 +56,8 @@ const mcu_pin_obj_t *mimxrt10xx_reset_forbidden_pins[] = { NULL, // Must end in NULL. }; +void board_init(void) { + common_hal_usb_host_port_construct(&pin_USB_OTG2_DP, &pin_USB_OTG2_DN); +} + // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/mimxrt10xx/common-hal/usb_host/Port.c b/ports/mimxrt10xx/common-hal/usb_host/Port.c index 126160c69c..444c410729 100644 --- a/ports/mimxrt10xx/common-hal/usb_host/Port.c +++ b/ports/mimxrt10xx/common-hal/usb_host/Port.c @@ -29,9 +29,13 @@ #include "py/runtime.h" -bool usb_host_init; +#include "tusb.h" -void common_hal_usb_host_port_construct(usb_host_port_obj_t *self, const mcu_pin_obj_t *dp, const mcu_pin_obj_t *dm) { +#include "imx_usb.h" + +usb_host_port_obj_t usb_host_instance; + +usb_host_port_obj_t *common_hal_usb_host_port_construct(const mcu_pin_obj_t *dp, const mcu_pin_obj_t *dm) { const mcu_pin_obj_t *supported_dp; const mcu_pin_obj_t *supported_dm; if (CIRCUITPY_USB_HOST_INSTANCE == 0) { @@ -41,18 +45,27 @@ void common_hal_usb_host_port_construct(usb_host_port_obj_t *self, const mcu_pin supported_dp = &pin_USB_OTG2_DP; supported_dm = &pin_USB_OTG2_DN; } + // Return the singleton if given the same pins. + usb_host_port_obj_t *self = &usb_host_instance; + if (self->dp != NULL) { + if (self->dp != dp || self->dm != dm) { + mp_raise_msg_varg(&mp_type_RuntimeError, translate("%q in use"), MP_QSTR_usb_host); + } + return self; + } if (dp != supported_dp || dm != supported_dm) { raise_ValueError_invalid_pins(); } - self->init = true; - usb_host_init = true; -} -void common_hal_usb_host_port_deinit(usb_host_port_obj_t *self) { - self->init = false; - usb_host_init = false; -} + assert_pin_free(dp); + assert_pin_free(dm); -bool common_hal_usb_host_port_deinited(usb_host_port_obj_t *self) { - return !self->init; + init_usb_instance(CIRCUITPY_USB_HOST_INSTANCE); + tuh_init(TUH_OPT_RHPORT); + + self->base.type = &usb_host_port_type; + self->dp = dp; + self->dm = dm; + + return self; } diff --git a/ports/mimxrt10xx/common-hal/usb_host/Port.h b/ports/mimxrt10xx/common-hal/usb_host/Port.h index dad1adf3a2..59f7735439 100644 --- a/ports/mimxrt10xx/common-hal/usb_host/Port.h +++ b/ports/mimxrt10xx/common-hal/usb_host/Port.h @@ -31,11 +31,8 @@ typedef struct { mp_obj_base_t base; - bool init; + const mcu_pin_obj_t *dp; + const mcu_pin_obj_t *dm; } usb_host_port_obj_t; -// Cheater state so that the usb module knows if it should return the TinyUSB -// state. -extern bool usb_host_init; - #endif // MICROPY_INCLUDED_MIMXRT10XX_COMMON_HAL_USB_HOST_PORT_H diff --git a/ports/mimxrt10xx/linking/common.ld b/ports/mimxrt10xx/linking/common.ld index 71e2c457c3..6e674a49f2 100644 --- a/ports/mimxrt10xx/linking/common.ld +++ b/ports/mimxrt10xx/linking/common.ld @@ -71,7 +71,7 @@ SECTIONS . = ALIGN(4); *(EXCLUDE_FILE( *fsl_flexspi.o - *dcd_ci_hs.o + *cd_ci_hs.o *ehci.o *tusb_fifo.o *usbd.o @@ -88,6 +88,9 @@ SECTIONS /* Keep USB processing functions out of RAM because we don't know which will be used. We try to only keep USB interrupt related functions. */ *dcd_ci_hs.o(.text.process_*_request .text.dcd_edpt* .text.dcd_init .text.dcd_set_address) + /* Move hcd_dcache* routines to RAM so that we don't cross execution from + the cache during cache maintenance. Weird things happen when we do. */ + *hcd_ci_hs.o(.text.hcd_i*) *usbd.o(.text.process_*_request .text.process_[gs]et* .text.tud_* .text.usbd_* .text.configuration_reset .text.invoke_*) *ehci.o(.text.hcd_edpt* .text.hcd_setup* .text.ehci_init* .text.hcd_port* .text.hcd_device* .text.qtd_init* .text.list_remove*) diff --git a/ports/mimxrt10xx/supervisor/usb.c b/ports/mimxrt10xx/supervisor/usb.c index 64a2639c16..ab0bd15b51 100644 --- a/ports/mimxrt10xx/supervisor/usb.c +++ b/ports/mimxrt10xx/supervisor/usb.c @@ -31,7 +31,9 @@ #include "supervisor/linker.h" #include "supervisor/usb.h" -STATIC void init_usb_instance(mp_int_t instance) { +#include "imx_usb.h" + +void init_usb_instance(mp_int_t instance) { if (instance < 0) { return; } @@ -72,9 +74,6 @@ STATIC void init_usb_instance(mp_int_t instance) { void init_usb_hardware(void) { init_usb_instance(CIRCUITPY_USB_DEVICE_INSTANCE); - // We can't dynamically start the USB Host port at the moment, so do it - // up front. - init_usb_instance(CIRCUITPY_USB_HOST_INSTANCE); } // Provide the prototypes for the interrupt handlers. The iMX RT SDK doesn't. diff --git a/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/board.c b/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/board.c index 724fde1d27..1d054a03ac 100644 --- a/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/board.c +++ b/ports/raspberrypi/boards/adafruit_feather_rp2040_usb_host/board.c @@ -31,7 +31,6 @@ // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. -usb_host_port_obj_t _host_port; digitalio_digitalinout_obj_t _host_power; void board_init(void) { @@ -39,5 +38,5 @@ void board_init(void) { common_hal_digitalio_digitalinout_never_reset(&_host_power); common_hal_digitalio_digitalinout_switch_to_output(&_host_power, true, DRIVE_MODE_PUSH_PULL); - common_hal_usb_host_port_construct(&_host_port, &pin_GPIO16, &pin_GPIO17); + common_hal_usb_host_port_construct(&pin_GPIO16, &pin_GPIO17); } diff --git a/ports/raspberrypi/common-hal/usb_host/Port.c b/ports/raspberrypi/common-hal/usb_host/Port.c index 9ad28c73ea..93d19acd69 100644 --- a/ports/raspberrypi/common-hal/usb_host/Port.c +++ b/ports/raspberrypi/common-hal/usb_host/Port.c @@ -45,7 +45,7 @@ #include "supervisor/serial.h" -bool usb_host_init; +usb_host_port_obj_t usb_host_instance; STATIC PIO pio_instances[2] = {pio0, pio1}; volatile bool _core1_ready = false; @@ -102,10 +102,23 @@ STATIC bool _has_program_room(uint8_t pio_index, uint8_t program_size) { return pio_can_add_program(pio, &program_struct); } -void common_hal_usb_host_port_construct(usb_host_port_obj_t *self, const mcu_pin_obj_t *dp, const mcu_pin_obj_t *dm) { +usb_host_port_obj_t *common_hal_usb_host_port_construct(const mcu_pin_obj_t *dp, const mcu_pin_obj_t *dm) { if (dp->number + 1 != dm->number) { raise_ValueError_invalid_pins(); } + usb_host_port_obj_t *self = &usb_host_instance; + + // Return the singleton if given the same pins. + if (self->dp != NULL) { + if (self->dp != dp || self->dm != dm) { + mp_raise_msg_varg(&mp_type_RuntimeError, translate("%q in use"), MP_QSTR_usb_host); + } + return self; + } + + assert_pin_free(dp); + assert_pin_free(dm); + pio_usb_configuration_t pio_cfg = PIO_USB_DEFAULT_CONFIG; pio_cfg.skip_alarm_pool = true; pio_cfg.pin_dp = dp->number; @@ -122,6 +135,10 @@ void common_hal_usb_host_port_construct(usb_host_port_obj_t *self, const mcu_pin mp_raise_RuntimeError(translate("All dma channels in use")); } + self->base.type = &usb_host_port_type; + self->dp = dp; + self->dm = dm; + PIO tx_pio = pio_instances[pio_cfg.pio_tx_num]; pio_cfg.sm_tx = pio_claim_unused_sm(tx_pio, false); PIO rx_pio = pio_instances[pio_cfg.pio_rx_num]; @@ -151,15 +168,5 @@ void common_hal_usb_host_port_construct(usb_host_port_obj_t *self, const mcu_pin tuh_configure(TUH_OPT_RHPORT, TUH_CFGID_RPI_PIO_USB_CONFIGURATION, &pio_cfg); tuh_init(TUH_OPT_RHPORT); - self->init = true; - usb_host_init = true; -} - -void common_hal_usb_host_port_deinit(usb_host_port_obj_t *self) { - self->init = false; - usb_host_init = false; -} - -bool common_hal_usb_host_port_deinited(usb_host_port_obj_t *self) { - return !self->init; + return self; } diff --git a/ports/raspberrypi/common-hal/usb_host/Port.h b/ports/raspberrypi/common-hal/usb_host/Port.h index c9294debb2..69a7f8deaf 100644 --- a/ports/raspberrypi/common-hal/usb_host/Port.h +++ b/ports/raspberrypi/common-hal/usb_host/Port.h @@ -30,9 +30,6 @@ typedef struct { mp_obj_base_t base; - bool init; + const mcu_pin_obj_t *dp; + const mcu_pin_obj_t *dm; } usb_host_port_obj_t; - -// Cheater state so that the usb module knows if it should return the TinyUSB -// state. -extern bool usb_host_init; diff --git a/shared-bindings/usb_host/Port.c b/shared-bindings/usb_host/Port.c index 53b1fec54f..9be6da9df3 100644 --- a/shared-bindings/usb_host/Port.c +++ b/shared-bindings/usb_host/Port.c @@ -35,59 +35,36 @@ //| //| def __init__(self, dp: microcontroller.Pin, dm: microcontroller.Pin) -> None: //| """Create a USB host port on the given pins. Access attached devices -//| through the `usb` module. Keep this object referenced while -//| interacting with devices, otherwise they will be disconnected. +//| through the `usb` module. +//| +//| The resulting object lives longer than the CircuitPython VM so that +//| USB devices such as keyboards can continue to be used. Subsequent +//| calls to this constructor will return the same object and *not* +//| reinitialize the USB host port. It will raise an exception when +//| given different arguments from the first successful call. //| //| :param ~microcontroller.Pin dp: The data plus pin //| :param ~microcontroller.Pin dm: The data minus pin //| """ //| ... +//| STATIC mp_obj_t usb_host_port_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) { // check number of arguments mp_arg_check_num(n_args, n_kw, 2, 2, false); - const mcu_pin_obj_t *dp = validate_obj_is_free_pin(args[0], MP_QSTR_dp); - const mcu_pin_obj_t *dm = validate_obj_is_free_pin(args[1], MP_QSTR_dm); + const mcu_pin_obj_t *dp = validate_obj_is_pin(args[0], MP_QSTR_dp); + const mcu_pin_obj_t *dm = validate_obj_is_pin(args[1], MP_QSTR_dm); - usb_host_port_obj_t *self = m_new_obj(usb_host_port_obj_t); - self->base.type = &usb_host_port_type; - common_hal_usb_host_port_construct(self, dp, dm); + // Pin in use checks happen in the implementation so they can be ignored + // when returning the singleton. + + usb_host_port_obj_t *self = common_hal_usb_host_port_construct(dp, dm); return (mp_obj_t)self; } -//| def deinit(self) -> None: -//| """Turn off the USB host port and release the pins for other use.""" -//| ... -STATIC mp_obj_t usb_host_port_obj_deinit(mp_obj_t self_in) { - usb_host_port_obj_t *self = MP_OBJ_TO_PTR(self_in); - common_hal_usb_host_port_deinit(self); - return mp_const_none; -} -MP_DEFINE_CONST_FUN_OBJ_1(usb_host_port_deinit_obj, usb_host_port_obj_deinit); - -//| def __enter__(self) -> Port: -//| """No-op used by Context Managers.""" -//| ... -// Provided by context manager helper. - -//| def __exit__(self) -> None: -//| """Automatically deinitializes the hardware when exiting a context. See -//| :ref:`lifetime-and-contextmanagers` for more info.""" -//| ... -//| -STATIC mp_obj_t usb_host_port_obj___exit__(size_t n_args, const mp_obj_t *args) { - (void)n_args; - common_hal_usb_host_port_deinit(MP_OBJ_TO_PTR(args[0])); - return mp_const_none; -} -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(usb_host_port_obj___exit___obj, 4, 4, usb_host_port_obj___exit__); - STATIC const mp_rom_map_elem_t usb_host_port_locals_dict_table[] = { - { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&usb_host_port_deinit_obj) }, - { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, - { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&usb_host_port_obj___exit___obj) }, }; STATIC MP_DEFINE_CONST_DICT(usb_host_port_locals_dict, usb_host_port_locals_dict_table); diff --git a/shared-bindings/usb_host/Port.h b/shared-bindings/usb_host/Port.h index 68645d1146..ba8d298517 100644 --- a/shared-bindings/usb_host/Port.h +++ b/shared-bindings/usb_host/Port.h @@ -35,8 +35,10 @@ extern const mp_obj_type_t usb_host_port_type; -void common_hal_usb_host_port_construct(usb_host_port_obj_t *self, const mcu_pin_obj_t *dp, const mcu_pin_obj_t *dm); -void common_hal_usb_host_port_deinit(usb_host_port_obj_t *self); -bool common_hal_usb_host_port_deinited(usb_host_port_obj_t *self); +// This is unique to common_hal constructs because it returns a globally stored +// object instead of taking on in that may be on the heap. This allows the +// method to check the internals of the global object against the given arguments +// to determine whether to return the singleton or raise an exception. +usb_host_port_obj_t *common_hal_usb_host_port_construct(const mcu_pin_obj_t *dp, const mcu_pin_obj_t *dm); #endif // MICROPY_INCLUDED_SHARED_BINDINGS_USB_HOST_PORT_H diff --git a/supervisor/shared/usb/tusb_config.h b/supervisor/shared/usb/tusb_config.h index 19f5c0a0ce..d097005aac 100644 --- a/supervisor/shared/usb/tusb_config.h +++ b/supervisor/shared/usb/tusb_config.h @@ -152,7 +152,8 @@ extern "C" { #endif #define CFG_TUH_HID 2 -#define CFG_TUH_HUB 1 +// 2 hubs so we can support "7 port" hubs which have two internal hubs. +#define CFG_TUH_HUB 2 #define CFG_TUH_CDC 0 #define CFG_TUH_MSC 0 #define CFG_TUH_VENDOR 0 From 3f3ec1c8350c1cf6eca3031b9b551034abf6e1ba Mon Sep 17 00:00:00 2001 From: Qyriad Date: Tue, 18 Jul 2023 16:47:37 -0600 Subject: [PATCH 127/241] samx5x: support external clock sources Adds two board config define's, which can be added in a board's mpconfigboard.h: BOARD_XOSC_FREQ_HZ, and BOARD_XOSC_IS_CRYSTAL, which are passed to clock_init(). External clock sources are currently only implemented for SAM_D5X_E5X series chips, so defining BOARD_XOSC_FREQ_HZ for a SAMD21 board will emit an error. Signed-off-by: Qyriad --- ports/atmel-samd/mpconfigport.h | 24 ++++++++++++++++++++++++ ports/atmel-samd/peripherals | 2 +- ports/atmel-samd/supervisor/port.c | 4 ++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/ports/atmel-samd/mpconfigport.h b/ports/atmel-samd/mpconfigport.h index 73686e1445..6fb969e47b 100644 --- a/ports/atmel-samd/mpconfigport.h +++ b/ports/atmel-samd/mpconfigport.h @@ -173,6 +173,30 @@ #define BOARD_HAS_CRYSTAL (0) #endif +#ifndef BOARD_XOSC_FREQ_HZ +// 0 Indicates XOSC is not used. + #define BOARD_XOSC_FREQ_HZ (0) +#else +// For now, only allow external clock sources that divide cleanly into +// the system clock frequency of 120 MHz. + #if (120000000 % BOARD_XOSC_FREQ_HZ) != 0 + #error "BOARD_XOSC_FREQ_HZ must be an integer factor of 120 MHz" + #endif +#endif + +#if BOARD_XOSC_FREQ_HZ != 0 +// External clock sources are currently not implemented for SAMD21 chips. + #ifdef SAMD21 + #error "BOARD_XOSC_FREQ_HZ is non-zero but external clock sources are not yet supported for SAMD21 chips" + #endif + #ifndef BOARD_XOSC_IS_CRYSTAL + #error "BOARD_XOSC_IS_CRYSTAL must be defined to 0 or 1 if BOARD_XOSC_FREQ_HZ is not 0" + #endif +#else +// It doesn't matter what the value is in this case. + #define BOARD_XOSC_IS_CRYSTAL (0) +#endif + // if CALIBRATE_CRYSTALLESS is requested, make room for storing // calibration data generated from external USB. #ifndef CIRCUITPY_INTERNAL_CONFIG_SIZE diff --git a/ports/atmel-samd/peripherals b/ports/atmel-samd/peripherals index baca4c0843..82e514b6e0 160000 --- a/ports/atmel-samd/peripherals +++ b/ports/atmel-samd/peripherals @@ -1 +1 @@ -Subproject commit baca4c084334aa8625f525a4032d66a397199ea6 +Subproject commit 82e514b6e0d1a2b09dc73be9973663b6b837a817 diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index 8cba5c61e0..8ae2d3740e 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -353,10 +353,10 @@ safe_mode_t port_init(void) { if (strcmp((char *)CIRCUITPY_INTERNAL_CONFIG_START_ADDR, "CIRCUITPYTHON1") == 0) { fine = ((uint16_t *)CIRCUITPY_INTERNAL_CONFIG_START_ADDR)[8]; } - clock_init(BOARD_HAS_CRYSTAL, fine); + clock_init(BOARD_HAS_CRYSTAL, BOARD_XOSC_FREQ_HZ, BOARD_XOSC_IS_CRYSTAL, fine); #else // Use a default fine value - clock_init(BOARD_HAS_CRYSTAL, DEFAULT_DFLL48M_FINE_CALIBRATION); + clock_init(BOARD_HAS_CRYSTAL, BOARD_XOSC_FREQ_HZ, BOARD_XOSC_IS_CRYSTAL, DEFAULT_DFLL48M_FINE_CALIBRATION); #endif rtc_init(); From e81ed62cfd8e024929c70d6aeed6c2994de52cd4 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Wed, 19 Jul 2023 11:46:04 -0700 Subject: [PATCH 128/241] Add missing header file --- ports/mimxrt10xx/imx_usb.h | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 ports/mimxrt10xx/imx_usb.h diff --git a/ports/mimxrt10xx/imx_usb.h b/ports/mimxrt10xx/imx_usb.h new file mode 100644 index 0000000000..7ae7df8461 --- /dev/null +++ b/ports/mimxrt10xx/imx_usb.h @@ -0,0 +1,31 @@ +/* + * This file is part of the Micro Python project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2022 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +// Provided by supervisor/usb.c that has a shared, non-port-specific header. So, +// just define it here. +void init_usb_instance(mp_int_t instance); From b10294e939bd97614f8a81c89701f1aed4995236 Mon Sep 17 00:00:00 2001 From: Luc Date: Tue, 18 Jul 2023 20:48:23 +0000 Subject: [PATCH 129/241] Translated using Weblate (German) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/de/ --- locale/de_DE.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/de_DE.po b/locale/de_DE.po index 41d873e7ff..e706cb81c5 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-10 14:50+0000\n" +"PO-Revision-Date: 2023-07-19 21:06+0000\n" "Last-Translator: Luc \n" "Language: de_DE\n" "MIME-Version: 1.0\n" @@ -487,7 +487,7 @@ msgstr "Alle Kanäle werden verwendet" #: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All dma channels in use" -msgstr "" +msgstr "All DMA-Kanäle in Verwendung" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" From b2c329735807aaca1a100663ebee9ca03f0276e1 Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Mon, 17 Jul 2023 20:14:52 +0000 Subject: [PATCH 130/241] Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/en_GB/ --- locale/en_GB.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/locale/en_GB.po b/locale/en_GB.po index c4d1039de7..02d8748cf8 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-05-23 22:55+0000\n" +"PO-Revision-Date: 2023-07-19 21:06+0000\n" "Last-Translator: Andi Chandler \n" "Language-Team: none\n" "Language: en_GB\n" @@ -15,7 +15,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.18-dev\n" +"X-Generator: Weblate 5.0-dev\n" #: main.c msgid "" @@ -486,7 +486,7 @@ msgstr "All channels in use" #: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All dma channels in use" -msgstr "" +msgstr "All DMA channels in use" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" @@ -1378,7 +1378,7 @@ msgstr "Mismatched swap flag" #: ports/mimxrt10xx/common-hal/busio/SPI.c msgid "Missing MISO or MOSI Pin" -msgstr "Missing MISO or MOSI pin" +msgstr "Missing MISO or MOSI Pin" #: ports/stm/common-hal/busio/SPI.c msgid "Missing MISO or MOSI pin" @@ -1493,7 +1493,7 @@ msgstr "No IP" #: ports/espressif/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/SPI.c msgid "No MISO Pin" -msgstr "No MISO pin" +msgstr "No MISO Pin" #: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c msgid "No MISO pin" @@ -1502,7 +1502,7 @@ msgstr "No MISO pin" #: ports/espressif/common-hal/busio/SPI.c #: ports/mimxrt10xx/common-hal/busio/SPI.c msgid "No MOSI Pin" -msgstr "No MOSI pin" +msgstr "No MOSI Pin" #: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c msgid "No MOSI pin" From 346f08f8b9aa7a71e41096339018197f3d649eee Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 20 Jul 2023 13:16:00 -0500 Subject: [PATCH 131/241] synthio: Add Synthesizer.note_state This enables the specific use case of checking whether a note's release phase has ended, but is also potentially useful to implement a sort of "voice stealing" algorithm in Python code, which can take account of the note's envelope state as well as other factors specific to the program. --- shared-bindings/synthio/Synthesizer.c | 23 +++++++++++++++++++- shared-bindings/synthio/Synthesizer.h | 1 + shared-bindings/synthio/__init__.c | 17 +++++++++++++++ shared-bindings/synthio/__init__.h | 6 +++++ shared-module/synthio/Synthesizer.c | 11 ++++++++++ shared-module/synthio/__init__.h | 6 +---- tests/circuitpython/synthio_note_info.py | 17 +++++++++++++++ tests/circuitpython/synthio_note_info.py.exp | 23 ++++++++++++++++++++ 8 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 tests/circuitpython/synthio_note_info.py create mode 100644 tests/circuitpython/synthio_note_info.py.exp diff --git a/shared-bindings/synthio/Synthesizer.c b/shared-bindings/synthio/Synthesizer.c index 8e186573cd..148e773b6b 100644 --- a/shared-bindings/synthio/Synthesizer.c +++ b/shared-bindings/synthio/Synthesizer.c @@ -31,6 +31,7 @@ #include "py/binary.h" #include "py/objproperty.h" #include "py/runtime.h" +#include "py/enum.h" #include "shared-bindings/util.h" #include "shared-bindings/synthio/Biquad.h" #include "shared-bindings/synthio/Synthesizer.h" @@ -256,7 +257,9 @@ MP_PROPERTY_GETTER(synthio_synthesizer_sample_rate_obj, (mp_obj_t)&synthio_synthesizer_get_sample_rate_obj); //| pressed: NoteSequence -//| """A sequence of the currently pressed notes (read-only property)""" +//| """A sequence of the currently pressed notes (read-only property). +//| +//| This does not include notes in the release phase of the envelope.""" //| STATIC mp_obj_t synthio_synthesizer_obj_get_pressed(mp_obj_t self_in) { synthio_synthesizer_obj_t *self = MP_OBJ_TO_PTR(self_in); @@ -268,6 +271,23 @@ MP_DEFINE_CONST_FUN_OBJ_1(synthio_synthesizer_get_pressed_obj, synthio_synthesiz MP_PROPERTY_GETTER(synthio_synthesizer_pressed_obj, (mp_obj_t)&synthio_synthesizer_get_pressed_obj); +//| def note_info(note: Note) -> Tuple[Optional[EnvelopeState], float]: +//| """Get info about a note's current envelope state +//| +//| If the note is currently playing (including in the release phase), the returned value gives the current envelope state and the current envelope value. +//| +//| If the note is not playing on this synthesizer, returns the tuple ``(None, 0.0)``.""" +STATIC mp_obj_t synthio_synthesizer_obj_note_info(mp_obj_t self_in, mp_obj_t note) { + synthio_synthesizer_obj_t *self = MP_OBJ_TO_PTR(self_in); + check_for_deinit(self); + mp_float_t vol = MICROPY_FLOAT_CONST(0.0); + envelope_state_e state = common_hal_synthio_synthesizer_note_info(self, note, &vol); + return MP_OBJ_NEW_TUPLE( + cp_enum_find(&synthio_note_state_type, state), + mp_obj_new_float(vol)); +} +MP_DEFINE_CONST_FUN_OBJ_2(synthio_synthesizer_note_info_obj, synthio_synthesizer_obj_note_info); + //| blocks: List[BlockInput] //| """A list of blocks to advance whether or not they are associated with a playing note. //| @@ -417,6 +437,7 @@ STATIC const mp_rom_map_elem_t synthio_synthesizer_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_sample_rate), MP_ROM_PTR(&synthio_synthesizer_sample_rate_obj) }, { MP_ROM_QSTR(MP_QSTR_max_polyphony), MP_ROM_INT(CIRCUITPY_SYNTHIO_MAX_CHANNELS) }, { MP_ROM_QSTR(MP_QSTR_pressed), MP_ROM_PTR(&synthio_synthesizer_pressed_obj) }, + { MP_ROM_QSTR(MP_QSTR_note_info), MP_ROM_PTR(&synthio_synthesizer_note_info_obj) }, { MP_ROM_QSTR(MP_QSTR_blocks), MP_ROM_PTR(&synthio_synthesizer_blocks_obj) }, }; STATIC MP_DEFINE_CONST_DICT(synthio_synthesizer_locals_dict, synthio_synthesizer_locals_dict_table); diff --git a/shared-bindings/synthio/Synthesizer.h b/shared-bindings/synthio/Synthesizer.h index 16543ce2c3..8ae0af3bf3 100644 --- a/shared-bindings/synthio/Synthesizer.h +++ b/shared-bindings/synthio/Synthesizer.h @@ -45,3 +45,4 @@ void common_hal_synthio_synthesizer_retrigger(synthio_synthesizer_obj_t *self, m void common_hal_synthio_synthesizer_release_all(synthio_synthesizer_obj_t *self); mp_obj_t common_hal_synthio_synthesizer_get_pressed_notes(synthio_synthesizer_obj_t *self); mp_obj_t common_hal_synthio_synthesizer_get_blocks(synthio_synthesizer_obj_t *self); +envelope_state_e common_hal_synthio_synthesizer_note_info(synthio_synthesizer_obj_t *self, mp_obj_t note, mp_float_t *vol_out); diff --git a/shared-bindings/synthio/__init__.c b/shared-bindings/synthio/__init__.c index b295430b09..8eba79d2a0 100644 --- a/shared-bindings/synthio/__init__.c +++ b/shared-bindings/synthio/__init__.c @@ -45,6 +45,22 @@ #include "shared-module/synthio/LFO.h" +MAKE_ENUM_VALUE(synthio_note_state_type, note_state, ATTACK, SYNTHIO_ENVELOPE_STATE_ATTACK); +MAKE_ENUM_VALUE(synthio_note_state_type, note_state, DECAY, SYNTHIO_ENVELOPE_STATE_DECAY); +MAKE_ENUM_VALUE(synthio_note_state_type, note_state, SUSTAIN, SYNTHIO_ENVELOPE_STATE_SUSTAIN); +MAKE_ENUM_VALUE(synthio_note_state_type, note_state, RELEASE, SYNTHIO_ENVELOPE_STATE_RELEASE); + +MAKE_ENUM_MAP(synthio_note_state) { + MAKE_ENUM_MAP_ENTRY(note_state, ATTACK), + MAKE_ENUM_MAP_ENTRY(note_state, DECAY), + MAKE_ENUM_MAP_ENTRY(note_state, SUSTAIN), + MAKE_ENUM_MAP_ENTRY(note_state, RELEASE), +}; + +STATIC MP_DEFINE_CONST_DICT(synthio_note_state_locals_dict, synthio_note_state_locals_table); +MAKE_PRINTER(synthio, synthio_note_state); +MAKE_ENUM_TYPE(synthio, NoteState, synthio_note_state); + #define default_attack_time (MICROPY_FLOAT_CONST(0.1)) #define default_decay_time (MICROPY_FLOAT_CONST(0.05)) #define default_release_time (MICROPY_FLOAT_CONST(0.2)) @@ -316,6 +332,7 @@ STATIC const mp_rom_map_elem_t synthio_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_MathOperation), MP_ROM_PTR(&synthio_math_operation_type) }, { MP_ROM_QSTR(MP_QSTR_MidiTrack), MP_ROM_PTR(&synthio_miditrack_type) }, { MP_ROM_QSTR(MP_QSTR_Note), MP_ROM_PTR(&synthio_note_type) }, + { MP_ROM_QSTR(MP_QSTR_NoteState), MP_ROM_PTR(&synthio_note_state_type) }, { MP_ROM_QSTR(MP_QSTR_LFO), MP_ROM_PTR(&synthio_lfo_type) }, { MP_ROM_QSTR(MP_QSTR_Synthesizer), MP_ROM_PTR(&synthio_synthesizer_type) }, { MP_ROM_QSTR(MP_QSTR_from_file), MP_ROM_PTR(&synthio_from_file_obj) }, diff --git a/shared-bindings/synthio/__init__.h b/shared-bindings/synthio/__init__.h index 2315d92e58..4a44277e85 100644 --- a/shared-bindings/synthio/__init__.h +++ b/shared-bindings/synthio/__init__.h @@ -29,10 +29,16 @@ #include "py/objnamedtuple.h" #include "py/enum.h" +typedef enum { + SYNTHIO_ENVELOPE_STATE_ATTACK, SYNTHIO_ENVELOPE_STATE_DECAY, + SYNTHIO_ENVELOPE_STATE_SUSTAIN, SYNTHIO_ENVELOPE_STATE_RELEASE +} envelope_state_e; + typedef enum synthio_bend_mode_e { SYNTHIO_BEND_MODE_STATIC, SYNTHIO_BEND_MODE_VIBRATO, SYNTHIO_BEND_MODE_SWEEP, SYNTHIO_BEND_MODE_SWEEP_IN } synthio_bend_mode_t; +extern const mp_obj_type_t synthio_note_state_type; extern const cp_enum_obj_t bend_mode_VIBRATO_obj; extern const mp_obj_type_t synthio_bend_mode_type; typedef struct synthio_synth synthio_synth_t; diff --git a/shared-module/synthio/Synthesizer.c b/shared-module/synthio/Synthesizer.c index 7dc888dfd0..672ac5b9e6 100644 --- a/shared-module/synthio/Synthesizer.c +++ b/shared-module/synthio/Synthesizer.c @@ -185,6 +185,17 @@ mp_obj_t common_hal_synthio_synthesizer_get_pressed_notes(synthio_synthesizer_ob return MP_OBJ_FROM_PTR(result); } +envelope_state_e common_hal_synthio_synthesizer_note_info(synthio_synthesizer_obj_t *self, mp_obj_t note, mp_float_t *vol_out) { + for (int chan = 0; chan < CIRCUITPY_SYNTHIO_MAX_CHANNELS; chan++) { + if (self->synth.span.note_obj[chan] == note) { + *vol_out = self->synth.envelope_state[chan].level / 32767.; + return self->synth.envelope_state[chan].state; + } + } + return (envelope_state_e) - 1; +} + + mp_obj_t common_hal_synthio_synthesizer_get_blocks(synthio_synthesizer_obj_t *self) { return self->blocks; } diff --git a/shared-module/synthio/__init__.h b/shared-module/synthio/__init__.h index 9e4db96d50..178e4fb866 100644 --- a/shared-module/synthio/__init__.h +++ b/shared-module/synthio/__init__.h @@ -35,6 +35,7 @@ #define SYNTHIO_FREQUENCY_SHIFT (16) #include "shared-module/audiocore/__init__.h" +#include "shared-bindings/synthio/__init__.h" typedef struct { uint16_t dur; @@ -49,11 +50,6 @@ typedef struct { uint16_t attack_level, sustain_level; } synthio_envelope_definition_t; -typedef enum { - SYNTHIO_ENVELOPE_STATE_ATTACK, SYNTHIO_ENVELOPE_STATE_DECAY, - SYNTHIO_ENVELOPE_STATE_SUSTAIN, SYNTHIO_ENVELOPE_STATE_RELEASE -} envelope_state_e; - typedef struct { int16_t level; uint16_t substep; diff --git a/tests/circuitpython/synthio_note_info.py b/tests/circuitpython/synthio_note_info.py new file mode 100644 index 0000000000..4d4e7a59ae --- /dev/null +++ b/tests/circuitpython/synthio_note_info.py @@ -0,0 +1,17 @@ +from synthio import Synthesizer, Note, Envelope +from audiocore import get_buffer + +s = Synthesizer() +n = Note(440, envelope=Envelope()) +print("{} {:.2f}".format(*s.note_info(n))) +s.press(n) +print("press") +for _ in range(9): + print("{} {:.2f}".format(*s.note_info(n))) + get_buffer(s) + +s.release(n) +print("release") +for _ in range(11): + print("{} {:.2f}".format(*s.note_info(n))) + get_buffer(s) diff --git a/tests/circuitpython/synthio_note_info.py.exp b/tests/circuitpython/synthio_note_info.py.exp new file mode 100644 index 0000000000..a69fb3c8c0 --- /dev/null +++ b/tests/circuitpython/synthio_note_info.py.exp @@ -0,0 +1,23 @@ +None 0.00 +press +synthio.NoteState.ATTACK 0.23 +synthio.NoteState.ATTACK 0.46 +synthio.NoteState.ATTACK 0.70 +synthio.NoteState.ATTACK 0.93 +synthio.NoteState.DECAY 1.00 +synthio.NoteState.DECAY 0.91 +synthio.NoteState.DECAY 0.81 +synthio.NoteState.SUSTAIN 0.80 +synthio.NoteState.SUSTAIN 0.80 +release +synthio.NoteState.RELEASE 0.80 +synthio.NoteState.RELEASE 0.71 +synthio.NoteState.RELEASE 0.61 +synthio.NoteState.RELEASE 0.52 +synthio.NoteState.RELEASE 0.43 +synthio.NoteState.RELEASE 0.34 +synthio.NoteState.RELEASE 0.24 +synthio.NoteState.RELEASE 0.15 +synthio.NoteState.RELEASE 0.06 +synthio.NoteState.RELEASE 0.00 +None 0.00 From 5f082561b32ea010b9bd2a2f797d577d037cae46 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 20 Jul 2023 11:16:31 -0700 Subject: [PATCH 132/241] Unify some error strings --- locale/circuitpython.pot | 70 +++++-------------- ports/broadcom/common-hal/busio/UART.c | 4 +- ports/espressif/common-hal/busio/SPI.c | 8 +-- ports/espressif/common-hal/busio/UART.c | 4 +- ports/mimxrt10xx/common-hal/busio/SPI.c | 13 ++-- ports/mimxrt10xx/common-hal/busio/UART.c | 4 +- ports/nrf/common-hal/busio/UART.c | 4 +- ports/raspberrypi/common-hal/busio/UART.c | 4 +- ports/silabs/common-hal/busio/I2C.c | 2 +- ports/silabs/common-hal/busio/SPI.c | 2 +- ports/silabs/common-hal/busio/UART.c | 2 +- ports/stm/common-hal/busio/I2C.c | 2 +- ports/stm/common-hal/busio/SPI.c | 15 ++-- ports/stm/common-hal/busio/UART.c | 4 +- ports/stm/common-hal/canio/CAN.c | 2 +- ports/stm/common-hal/sdioio/SDCard.c | 2 +- shared-bindings/displayio/FourWire.c | 2 +- shared-bindings/displayio/I2CDisplay.c | 2 +- shared-bindings/paralleldisplay/ParallelBus.c | 2 +- shared-module/bitbangio/SPI.c | 11 +-- 20 files changed, 65 insertions(+), 94 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 368836a4db..9ebb85d13f 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -126,8 +126,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -182,6 +184,7 @@ msgid "%q must be 1 when %q is True" msgstr "" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "" @@ -779,10 +782,6 @@ msgstr "" msgid "Cannot subclass slice" msgstr "" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "" @@ -1090,13 +1089,10 @@ msgstr "" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "" @@ -1355,14 +1351,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1436,6 +1424,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "" @@ -1469,36 +1465,6 @@ msgstr "" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "" @@ -2405,6 +2371,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3628,11 +3595,6 @@ msgstr "" msgid "no module named '%q'" msgstr "" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" diff --git a/ports/broadcom/common-hal/busio/UART.c b/ports/broadcom/common-hal/busio/UART.c index 5be098cf03..0eb72b1456 100644 --- a/ports/broadcom/common-hal/busio/UART.c +++ b/ports/broadcom/common-hal/busio/UART.c @@ -352,7 +352,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { // Write characters. size_t common_hal_busio_uart_write(busio_uart_obj_t *self, const uint8_t *data, size_t len, int *errcode) { if (self->tx_pin == NULL) { - mp_raise_ValueError(translate("No TX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_tx); } COMPLETE_MEMORY_READS; @@ -400,7 +400,7 @@ STATIC void enable_interrupt(busio_uart_obj_t *self) { // Read characters. size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t len, int *errcode) { if (self->rx_pin == NULL) { - mp_raise_ValueError(translate("No RX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_rx); } if (len == 0) { diff --git a/ports/espressif/common-hal/busio/SPI.c b/ports/espressif/common-hal/busio/SPI.c index 5218fdbf9d..0b6b395c51 100644 --- a/ports/espressif/common-hal/busio/SPI.c +++ b/ports/espressif/common-hal/busio/SPI.c @@ -186,7 +186,7 @@ void common_hal_busio_spi_unlock(busio_spi_obj_t *self) { bool common_hal_busio_spi_write(busio_spi_obj_t *self, const uint8_t *data, size_t len) { if (self->MOSI == NULL) { - mp_raise_ValueError(translate("No MOSI Pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_mosi); } return common_hal_busio_spi_transfer(self, data, NULL, len); } @@ -194,7 +194,7 @@ bool common_hal_busio_spi_write(busio_spi_obj_t *self, bool common_hal_busio_spi_read(busio_spi_obj_t *self, uint8_t *data, size_t len, uint8_t write_value) { if (self->MISO == NULL) { - mp_raise_ValueError(translate("No MISO Pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_miso); } if (self->MOSI == NULL) { return common_hal_busio_spi_transfer(self, NULL, data, len); @@ -210,10 +210,10 @@ bool common_hal_busio_spi_transfer(busio_spi_obj_t *self, return true; } if (self->MOSI == NULL && data_out != NULL) { - mp_raise_ValueError(translate("No MOSI Pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_mosi); } if (self->MISO == NULL && data_in != NULL) { - mp_raise_ValueError(translate("No MISO Pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_miso); } spi_transaction_t transactions[MAX_SPI_TRANSACTIONS]; diff --git a/ports/espressif/common-hal/busio/UART.c b/ports/espressif/common-hal/busio/UART.c index c13bdedac0..37e0092726 100644 --- a/ports/espressif/common-hal/busio/UART.c +++ b/ports/espressif/common-hal/busio/UART.c @@ -304,7 +304,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { // Read characters. size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t len, int *errcode) { if (self->rx_pin == NULL) { - mp_raise_ValueError(translate("No RX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_rx); } if (len == 0) { // Nothing to read. @@ -357,7 +357,7 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t // Write characters. size_t common_hal_busio_uart_write(busio_uart_obj_t *self, const uint8_t *data, size_t len, int *errcode) { if (self->tx_pin == NULL) { - mp_raise_ValueError(translate("No TX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_tx); } size_t left_to_write = len; diff --git a/ports/mimxrt10xx/common-hal/busio/SPI.c b/ports/mimxrt10xx/common-hal/busio/SPI.c index 1ab9394244..e32b635611 100644 --- a/ports/mimxrt10xx/common-hal/busio/SPI.c +++ b/ports/mimxrt10xx/common-hal/busio/SPI.c @@ -182,7 +182,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, self->spi = mcu_spi_banks[self->clock->bank_idx - 1]; } else { if (spi_taken) { - mp_raise_ValueError(translate("Hardware busy, try alternative pins")); + mp_raise_ValueError(translate("Hardware in use, try alternative pins")); } else { raise_ValueError_invalid_pins(); } @@ -331,7 +331,7 @@ bool common_hal_busio_spi_write(busio_spi_obj_t *self, return true; } if (self->mosi == NULL) { - mp_raise_ValueError(translate("No MOSI Pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_mosi); } lpspi_transfer_t xfer = { 0 }; @@ -349,7 +349,7 @@ bool common_hal_busio_spi_read(busio_spi_obj_t *self, return true; } if (self->miso == NULL) { - mp_raise_ValueError(translate("No MISO Pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_miso); } LPSPI_SetDummyData(self->spi, write_value); @@ -367,8 +367,11 @@ bool common_hal_busio_spi_transfer(busio_spi_obj_t *self, const uint8_t *data_ou if (len == 0) { return true; } - if (self->miso == NULL || self->mosi == NULL) { - mp_raise_ValueError(translate("Missing MISO or MOSI Pin")); + if (self->MOSI == NULL && data_out != NULL) { + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_mosi); + } + if (self->MISO == NULL && data_in != NULL) { + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_miso); } LPSPI_SetDummyData(self->spi, 0xFF); diff --git a/ports/mimxrt10xx/common-hal/busio/UART.c b/ports/mimxrt10xx/common-hal/busio/UART.c index e4d5fda6ae..d069836295 100644 --- a/ports/mimxrt10xx/common-hal/busio/UART.c +++ b/ports/mimxrt10xx/common-hal/busio/UART.c @@ -401,7 +401,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { // Read characters. size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t len, int *errcode) { if (self->rx == NULL) { - mp_raise_ValueError(translate("No RX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_rx); } if (len == 0) { @@ -458,7 +458,7 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t // Write characters. size_t common_hal_busio_uart_write(busio_uart_obj_t *self, const uint8_t *data, size_t len, int *errcode) { if (self->tx == NULL) { - mp_raise_ValueError(translate("No TX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_tx); } if (self->rs485_dir && len) { GPIO_PinWrite(self->rs485_dir->gpio, self->rs485_dir->number, !self->rs485_invert); diff --git a/ports/nrf/common-hal/busio/UART.c b/ports/nrf/common-hal/busio/UART.c index 626956946f..1c63e73092 100644 --- a/ports/nrf/common-hal/busio/UART.c +++ b/ports/nrf/common-hal/busio/UART.c @@ -297,7 +297,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { // Read characters. size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t len, int *errcode) { if (nrf_uarte_rx_pin_get(self->uarte->p_reg) == NRF_UARTE_PSEL_DISCONNECTED) { - mp_raise_ValueError(translate("No RX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_rx); } uint64_t start_ticks = supervisor_ticks_ms64(); @@ -347,7 +347,7 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t // Write characters. size_t common_hal_busio_uart_write(busio_uart_obj_t *self, const uint8_t *data, size_t len, int *errcode) { if (nrf_uarte_tx_pin_get(self->uarte->p_reg) == NRF_UARTE_PSEL_DISCONNECTED) { - mp_raise_ValueError(translate("No TX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_tx); } if (len == 0) { diff --git a/ports/raspberrypi/common-hal/busio/UART.c b/ports/raspberrypi/common-hal/busio/UART.c index 156a5e11ce..28cfc8b052 100644 --- a/ports/raspberrypi/common-hal/busio/UART.c +++ b/ports/raspberrypi/common-hal/busio/UART.c @@ -211,7 +211,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { // Write characters. size_t common_hal_busio_uart_write(busio_uart_obj_t *self, const uint8_t *data, size_t len, int *errcode) { if (self->tx_pin == NO_PIN) { - mp_raise_ValueError(translate("No TX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_tx); } if (self->rs485_dir_pin != NO_PIN) { @@ -239,7 +239,7 @@ size_t common_hal_busio_uart_write(busio_uart_obj_t *self, const uint8_t *data, // Read characters. size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t len, int *errcode) { if (self->rx_pin == NO_PIN) { - mp_raise_ValueError(translate("No RX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_rx); } if (len == 0) { diff --git a/ports/silabs/common-hal/busio/I2C.c b/ports/silabs/common-hal/busio/I2C.c index 6d858be85e..62ac14f4e9 100644 --- a/ports/silabs/common-hal/busio/I2C.c +++ b/ports/silabs/common-hal/busio/I2C.c @@ -72,7 +72,7 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, common_hal_mcu_pin_claim(sda); in_used = true; } else { - mp_raise_ValueError(translate("Hardware busy, try alternative pins")); + mp_raise_ValueError(translate("Hardware in use, try alternative pins")); } } else { raise_ValueError_invalid_pins(); diff --git a/ports/silabs/common-hal/busio/SPI.c b/ports/silabs/common-hal/busio/SPI.c index a6f3109a32..89c8012477 100644 --- a/ports/silabs/common-hal/busio/SPI.c +++ b/ports/silabs/common-hal/busio/SPI.c @@ -95,7 +95,7 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, mp_raise_ValueError(translate("SPI init error")); } } else { - mp_raise_ValueError(translate("Hardware busy, try alternative pins")); + mp_raise_ValueError(translate("Hardware in use, try alternative pins")); } } else { raise_ValueError_invalid_pins(); diff --git a/ports/silabs/common-hal/busio/UART.c b/ports/silabs/common-hal/busio/UART.c index 8b1883d906..75c46f4725 100644 --- a/ports/silabs/common-hal/busio/UART.c +++ b/ports/silabs/common-hal/busio/UART.c @@ -131,7 +131,7 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self, context = self; } else { - mp_raise_ValueError(translate("Hardware busy, try alternative pins")); + mp_raise_ValueError(translate("Hardware in use, try alternative pins")); } } else { diff --git a/ports/stm/common-hal/busio/I2C.c b/ports/stm/common-hal/busio/I2C.c index 259d678f2b..42c32b2b52 100644 --- a/ports/stm/common-hal/busio/I2C.c +++ b/ports/stm/common-hal/busio/I2C.c @@ -117,7 +117,7 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, I2Cx = mcu_i2c_banks[self->sda->periph_index - 1]; } else { if (i2c_taken) { - mp_raise_ValueError(translate("Hardware busy, try alternative pins")); + mp_raise_ValueError(translate("Hardware in use, try alternative pins")); } else { raise_ValueError_invalid_pins(); } diff --git a/ports/stm/common-hal/busio/SPI.c b/ports/stm/common-hal/busio/SPI.c index 89ec4b7cdc..2fea1149eb 100644 --- a/ports/stm/common-hal/busio/SPI.c +++ b/ports/stm/common-hal/busio/SPI.c @@ -160,7 +160,7 @@ STATIC int check_pins(busio_spi_obj_t *self, } if (spi_taken) { - mp_raise_ValueError(translate("Hardware busy, try alternative pins")); + mp_raise_ValueError(translate("Hardware in use, try alternative pins")); } else { raise_ValueError_invalid_pin(); } @@ -347,7 +347,7 @@ void common_hal_busio_spi_unlock(busio_spi_obj_t *self) { bool common_hal_busio_spi_write(busio_spi_obj_t *self, const uint8_t *data, size_t len) { if (self->mosi == NULL) { - mp_raise_ValueError(translate("No MOSI pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_mosi); } HAL_StatusTypeDef result = HAL_SPI_Transmit(&self->handle, (uint8_t *)data, (uint16_t)len, HAL_MAX_DELAY); return result == HAL_OK; @@ -356,9 +356,9 @@ bool common_hal_busio_spi_write(busio_spi_obj_t *self, bool common_hal_busio_spi_read(busio_spi_obj_t *self, uint8_t *data, size_t len, uint8_t write_value) { if (self->miso == NULL && !self->half_duplex) { - mp_raise_ValueError(translate("No MISO pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_miso); } else if (self->half_duplex && self->mosi == NULL) { - mp_raise_ValueError(translate("No MOSI pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_mosi); } HAL_StatusTypeDef result = HAL_OK; if ((!self->half_duplex && self->mosi == NULL) || (self->half_duplex && self->mosi != NULL && self->miso == NULL)) { @@ -372,8 +372,11 @@ bool common_hal_busio_spi_read(busio_spi_obj_t *self, bool common_hal_busio_spi_transfer(busio_spi_obj_t *self, const uint8_t *data_out, uint8_t *data_in, size_t len) { - if (self->miso == NULL || self->mosi == NULL) { - mp_raise_ValueError(translate("Missing MISO or MOSI pin")); + if (self->mosi == NULL && data_out != NULL) { + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_mosi); + } + if (self->miso == NULL && data_in != NULL) { + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_miso); } HAL_StatusTypeDef result = HAL_SPI_TransmitReceive(&self->handle, (uint8_t *)data_out, data_in, (uint16_t)len,HAL_MAX_DELAY); diff --git a/ports/stm/common-hal/busio/UART.c b/ports/stm/common-hal/busio/UART.c index cdace31639..abf37ab881 100644 --- a/ports/stm/common-hal/busio/UART.c +++ b/ports/stm/common-hal/busio/UART.c @@ -293,7 +293,7 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t len, int *errcode) { if (self->rx == NULL) { - mp_raise_ValueError(translate("No RX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_rx); } uint64_t start_ticks = supervisor_ticks_ms64(); @@ -327,7 +327,7 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t // Write characters. size_t common_hal_busio_uart_write(busio_uart_obj_t *self, const uint8_t *data, size_t len, int *errcode) { if (self->tx == NULL) { - mp_raise_ValueError(translate("No TX pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_tx); } // Disable UART IRQ to avoid resource hazards in Rx IRQ handler diff --git a/ports/stm/common-hal/canio/CAN.c b/ports/stm/common-hal/canio/CAN.c index 992745b80a..ca857d5643 100644 --- a/ports/stm/common-hal/canio/CAN.c +++ b/ports/stm/common-hal/canio/CAN.c @@ -69,7 +69,7 @@ void common_hal_canio_can_construct(canio_can_obj_t *self, const mcu_pin_obj_t * } if (reserved_can[periph_index]) { - mp_raise_ValueError(translate("Hardware busy, try alternative pins")); + mp_raise_ValueError(translate("Hardware in use, try alternative pins")); } const uint32_t can_frequency = 42000000; diff --git a/ports/stm/common-hal/sdioio/SDCard.c b/ports/stm/common-hal/sdioio/SDCard.c index 8eeae2781d..6f3eb682df 100644 --- a/ports/stm/common-hal/sdioio/SDCard.c +++ b/ports/stm/common-hal/sdioio/SDCard.c @@ -113,7 +113,7 @@ STATIC int check_pins(sdioio_sdcard_obj_t *self, } if (sdio_taken) { - mp_raise_ValueError(translate("Hardware busy, try alternative pins")); + mp_raise_ValueError(translate("Hardware in use, try alternative pins")); } else { raise_ValueError_invalid_pin(); } diff --git a/shared-bindings/displayio/FourWire.c b/shared-bindings/displayio/FourWire.c index 1f099f5061..29cdf09299 100644 --- a/shared-bindings/displayio/FourWire.c +++ b/shared-bindings/displayio/FourWire.c @@ -114,7 +114,7 @@ STATIC mp_obj_t displayio_fourwire_obj_reset(mp_obj_t self_in) { displayio_fourwire_obj_t *self = self_in; if (!common_hal_displayio_fourwire_reset(self)) { - mp_raise_RuntimeError(translate("no reset pin available")); + mp_raise_RuntimeError_varg(translate("No %q pin"), MP_QSTR_reset); } return mp_const_none; } diff --git a/shared-bindings/displayio/I2CDisplay.c b/shared-bindings/displayio/I2CDisplay.c index f2647b0b16..ca5968421c 100644 --- a/shared-bindings/displayio/I2CDisplay.c +++ b/shared-bindings/displayio/I2CDisplay.c @@ -91,7 +91,7 @@ STATIC mp_obj_t displayio_i2cdisplay_obj_reset(mp_obj_t self_in) { displayio_i2cdisplay_obj_t *self = self_in; if (!common_hal_displayio_i2cdisplay_reset(self)) { - mp_raise_RuntimeError(translate("no reset pin available")); + mp_raise_RuntimeError_varg(translate("No %q pin"), MP_QSTR_reset); } return mp_const_none; } diff --git a/shared-bindings/paralleldisplay/ParallelBus.c b/shared-bindings/paralleldisplay/ParallelBus.c index ad9a1efdce..f8ab6470e4 100644 --- a/shared-bindings/paralleldisplay/ParallelBus.c +++ b/shared-bindings/paralleldisplay/ParallelBus.c @@ -122,7 +122,7 @@ STATIC mp_obj_t paralleldisplay_parallelbus_obj_reset(mp_obj_t self_in) { paralleldisplay_parallelbus_obj_t *self = self_in; if (!common_hal_paralleldisplay_parallelbus_reset(self)) { - mp_raise_RuntimeError(translate("no reset pin available")); + mp_raise_RuntimeError_varg(translate("No %q pin"), MP_QSTR_reset); } return mp_const_none; } diff --git a/shared-module/bitbangio/SPI.c b/shared-module/bitbangio/SPI.c index d740a214e7..c82cecff62 100644 --- a/shared-module/bitbangio/SPI.c +++ b/shared-module/bitbangio/SPI.c @@ -123,7 +123,7 @@ void shared_module_bitbangio_spi_unlock(bitbangio_spi_obj_t *self) { // Writes out the given data. bool shared_module_bitbangio_spi_write(bitbangio_spi_obj_t *self, const uint8_t *data, size_t len) { if (len > 0 && !self->has_mosi) { - mp_raise_ValueError(translate("No MOSI pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_mosi); } uint32_t delay_half = self->delay_half; @@ -178,7 +178,7 @@ bool shared_module_bitbangio_spi_write(bitbangio_spi_obj_t *self, const uint8_t // Reads in len bytes while outputting zeroes. bool shared_module_bitbangio_spi_read(bitbangio_spi_obj_t *self, uint8_t *data, size_t len, uint8_t write_data) { if (len > 0 && !self->has_miso) { - mp_raise_ValueError(translate("No MISO pin")); + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_miso); } uint32_t delay_half = self->delay_half; @@ -245,8 +245,11 @@ bool shared_module_bitbangio_spi_read(bitbangio_spi_obj_t *self, uint8_t *data, // transfer bool shared_module_bitbangio_spi_transfer(bitbangio_spi_obj_t *self, const uint8_t *dout, uint8_t *din, size_t len) { - if (len > 0 && (!self->has_mosi || !self->has_miso)) { - mp_raise_ValueError(translate("Cannot transfer without MOSI and MISO pins")); + if (!self->has_mosi && dout != NULL) { + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_mosi); + } + if (!self->has_miso && din != NULL) { + mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_miso); } uint32_t delay_half = self->delay_half; From d7fa7380b877aaac628f65acc760fa76624355ca Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 20 Jul 2023 11:18:00 -0700 Subject: [PATCH 133/241] Move some find_qstr wrappers to tcm next to it --- py/qstr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/py/qstr.c b/py/qstr.c index 96e2a79192..09ef9ea7ed 100644 --- a/py/qstr.c +++ b/py/qstr.c @@ -289,18 +289,18 @@ mp_uint_t PLACE_IN_ITCM(qstr_hash)(qstr q) { return attr.hash; } -size_t qstr_len(qstr q) { +size_t PLACE_IN_ITCM(qstr_len)(qstr q) { qstr_attr_t attr; find_qstr(q, &attr); return attr.len; } -const char *qstr_str(qstr q) { +const char *PLACE_IN_ITCM(qstr_str)(qstr q) { qstr_attr_t attr; return find_qstr(q, &attr); } -const byte *qstr_data(qstr q, size_t *len) { +const byte *PLACE_IN_ITCM(qstr_data)(qstr q, size_t *len) { qstr_attr_t attr; const char *qd = find_qstr(q, &attr); *len = attr.len; From a56e97db1df6d5c050c8506414ba9c7c0423fc53 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 20 Jul 2023 11:19:57 -0700 Subject: [PATCH 134/241] Align MP heap allocations to cache lines --- ports/mimxrt10xx/mpconfigport.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ports/mimxrt10xx/mpconfigport.h b/ports/mimxrt10xx/mpconfigport.h index 16cc63bc2d..7cc17494bf 100644 --- a/ports/mimxrt10xx/mpconfigport.h +++ b/ports/mimxrt10xx/mpconfigport.h @@ -37,7 +37,6 @@ extern uint8_t _ld_filesystem_start; extern uint8_t _ld_filesystem_end; extern uint8_t _ld_default_stack_size; -// 20kiB stack #define CIRCUITPY_DEFAULT_STACK_SIZE ((uint32_t)&_ld_default_stack_size) #define MICROPY_PY_BUILTINS_NOTIMPLEMENTED (0) #define MICROPY_PY_FUNCTION_ATTRS (0) @@ -47,6 +46,10 @@ extern uint8_t _ld_default_stack_size; #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_START_ADDR ((uint32_t)&_ld_filesystem_start) #define CIRCUITPY_INTERNAL_FLASH_FILESYSTEM_SIZE ((uint32_t)(&_ld_filesystem_end - &_ld_filesystem_start)) +// Allocate 32 bytes at a time instead of the default 16 so that allocated buffers +// are aligned to cache lines. +#define MICROPY_BYTES_PER_GC_BLOCK (32) + #include "py/circuitpy_mpconfig.h" #define MICROPY_PORT_ROOT_POINTERS \ From 29a4364ba77e11348a7958296ea55ebfc7b69826 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 20 Jul 2023 14:05:56 -0500 Subject: [PATCH 135/241] fix method signature --- shared-bindings/synthio/Synthesizer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-bindings/synthio/Synthesizer.c b/shared-bindings/synthio/Synthesizer.c index 148e773b6b..25d26fc661 100644 --- a/shared-bindings/synthio/Synthesizer.c +++ b/shared-bindings/synthio/Synthesizer.c @@ -271,7 +271,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(synthio_synthesizer_get_pressed_obj, synthio_synthesiz MP_PROPERTY_GETTER(synthio_synthesizer_pressed_obj, (mp_obj_t)&synthio_synthesizer_get_pressed_obj); -//| def note_info(note: Note) -> Tuple[Optional[EnvelopeState], float]: +//| def note_info(self, note: Note) -> Tuple[Optional[EnvelopeState], float]: //| """Get info about a note's current envelope state //| //| If the note is currently playing (including in the release phase), the returned value gives the current envelope state and the current envelope value. From f71831dea93b9e84a8d476025851cea46a71d29f Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 20 Jul 2023 14:10:44 -0500 Subject: [PATCH 136/241] skip all the byecode hex data, it's adequately checked ... by the disassembly just below This was tripped up because in exactly the right conditions some qstr could be of the form 'xx 63' and make the expression `\.\+63` match something other than what was intended. This test was re-worked upstream for mpy version 6 so it'll be a conflict to resolve when we get to that. :-/ --- tests/cmdline/cmd_showbc.py.exp | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/cmdline/cmd_showbc.py.exp b/tests/cmdline/cmd_showbc.py.exp index 22712b79ee..c3dbfd74f8 100644 --- a/tests/cmdline/cmd_showbc.py.exp +++ b/tests/cmdline/cmd_showbc.py.exp @@ -1,7 +1,6 @@ File cmdline/cmd_showbc.py, code block '' (descriptor: \.\+, bytecode @\.\+ bytes) Raw bytecode (code_info_size=\\d\+, bytecode_size=\\d\+): ######## -\.\+63 arg names: (N_STATE 3) (N_EXC_STACK 0) From 70cf0610cc397b0dd71ff64d259a246822f0cf56 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 20 Jul 2023 14:18:03 -0500 Subject: [PATCH 137/241] disable synthio on this board, it's very full --- ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk b/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk index c3e21a4c36..fcbbbd5bf9 100644 --- a/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk +++ b/ports/atmel-samd/boards/mini_sam_m4/mpconfigboard.mk @@ -12,6 +12,7 @@ LONGINT_IMPL = MPZ # No I2S on SAMD51G CIRCUITPY_AUDIOBUSIO = 0 +CIRCUITPY_SYNTHIO = 0 CIRCUITPY_BITBANG_APA102 = 1 From 60b233f160e0ee30f1abf412c0798bce50e7425c Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 20 Jul 2023 16:25:23 -0500 Subject: [PATCH 138/241] document EnvelopeState --- shared-bindings/synthio/__init__.c | 14 ++++++-- tests/circuitpython/synthio_note_info.py.exp | 38 ++++++++++---------- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/shared-bindings/synthio/__init__.c b/shared-bindings/synthio/__init__.c index 8eba79d2a0..52d30cd2c4 100644 --- a/shared-bindings/synthio/__init__.c +++ b/shared-bindings/synthio/__init__.c @@ -45,6 +45,16 @@ #include "shared-module/synthio/LFO.h" +//| class EnvelopeState: +//| ATTACK: EnvelopeState +//| """The note is in its attack phase""" +//| DECAY: EnvelopeState +//| """The note is in its decay phase""" +//| SUSTAIN: EnvelopeState +//| """The note is in its sustain phase""" +//| RELEASE: EnvelopeState +//| """The note is in its release phase""" +//| MAKE_ENUM_VALUE(synthio_note_state_type, note_state, ATTACK, SYNTHIO_ENVELOPE_STATE_ATTACK); MAKE_ENUM_VALUE(synthio_note_state_type, note_state, DECAY, SYNTHIO_ENVELOPE_STATE_DECAY); MAKE_ENUM_VALUE(synthio_note_state_type, note_state, SUSTAIN, SYNTHIO_ENVELOPE_STATE_SUSTAIN); @@ -59,7 +69,7 @@ MAKE_ENUM_MAP(synthio_note_state) { STATIC MP_DEFINE_CONST_DICT(synthio_note_state_locals_dict, synthio_note_state_locals_table); MAKE_PRINTER(synthio, synthio_note_state); -MAKE_ENUM_TYPE(synthio, NoteState, synthio_note_state); +MAKE_ENUM_TYPE(synthio, EnvelopeState, synthio_note_state); #define default_attack_time (MICROPY_FLOAT_CONST(0.1)) #define default_decay_time (MICROPY_FLOAT_CONST(0.05)) @@ -332,7 +342,7 @@ STATIC const mp_rom_map_elem_t synthio_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_MathOperation), MP_ROM_PTR(&synthio_math_operation_type) }, { MP_ROM_QSTR(MP_QSTR_MidiTrack), MP_ROM_PTR(&synthio_miditrack_type) }, { MP_ROM_QSTR(MP_QSTR_Note), MP_ROM_PTR(&synthio_note_type) }, - { MP_ROM_QSTR(MP_QSTR_NoteState), MP_ROM_PTR(&synthio_note_state_type) }, + { MP_ROM_QSTR(MP_QSTR_EnvelopeState), MP_ROM_PTR(&synthio_note_state_type) }, { MP_ROM_QSTR(MP_QSTR_LFO), MP_ROM_PTR(&synthio_lfo_type) }, { MP_ROM_QSTR(MP_QSTR_Synthesizer), MP_ROM_PTR(&synthio_synthesizer_type) }, { MP_ROM_QSTR(MP_QSTR_from_file), MP_ROM_PTR(&synthio_from_file_obj) }, diff --git a/tests/circuitpython/synthio_note_info.py.exp b/tests/circuitpython/synthio_note_info.py.exp index a69fb3c8c0..cd75174a11 100644 --- a/tests/circuitpython/synthio_note_info.py.exp +++ b/tests/circuitpython/synthio_note_info.py.exp @@ -1,23 +1,23 @@ None 0.00 press -synthio.NoteState.ATTACK 0.23 -synthio.NoteState.ATTACK 0.46 -synthio.NoteState.ATTACK 0.70 -synthio.NoteState.ATTACK 0.93 -synthio.NoteState.DECAY 1.00 -synthio.NoteState.DECAY 0.91 -synthio.NoteState.DECAY 0.81 -synthio.NoteState.SUSTAIN 0.80 -synthio.NoteState.SUSTAIN 0.80 +synthio.EnvelopeState.ATTACK 0.23 +synthio.EnvelopeState.ATTACK 0.46 +synthio.EnvelopeState.ATTACK 0.70 +synthio.EnvelopeState.ATTACK 0.93 +synthio.EnvelopeState.DECAY 1.00 +synthio.EnvelopeState.DECAY 0.91 +synthio.EnvelopeState.DECAY 0.81 +synthio.EnvelopeState.SUSTAIN 0.80 +synthio.EnvelopeState.SUSTAIN 0.80 release -synthio.NoteState.RELEASE 0.80 -synthio.NoteState.RELEASE 0.71 -synthio.NoteState.RELEASE 0.61 -synthio.NoteState.RELEASE 0.52 -synthio.NoteState.RELEASE 0.43 -synthio.NoteState.RELEASE 0.34 -synthio.NoteState.RELEASE 0.24 -synthio.NoteState.RELEASE 0.15 -synthio.NoteState.RELEASE 0.06 -synthio.NoteState.RELEASE 0.00 +synthio.EnvelopeState.RELEASE 0.80 +synthio.EnvelopeState.RELEASE 0.71 +synthio.EnvelopeState.RELEASE 0.61 +synthio.EnvelopeState.RELEASE 0.52 +synthio.EnvelopeState.RELEASE 0.43 +synthio.EnvelopeState.RELEASE 0.34 +synthio.EnvelopeState.RELEASE 0.24 +synthio.EnvelopeState.RELEASE 0.15 +synthio.EnvelopeState.RELEASE 0.06 +synthio.EnvelopeState.RELEASE 0.00 None 0.00 From 525dad71c3e26c076e24f587cf9c5c11e0302422 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 20 Jul 2023 16:00:43 -0700 Subject: [PATCH 139/241] Add RuntimeError_varg and fix imx capitalization --- ports/mimxrt10xx/common-hal/busio/SPI.c | 4 ++-- py/runtime.c | 7 +++++++ py/runtime.h | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ports/mimxrt10xx/common-hal/busio/SPI.c b/ports/mimxrt10xx/common-hal/busio/SPI.c index e32b635611..11dea30a48 100644 --- a/ports/mimxrt10xx/common-hal/busio/SPI.c +++ b/ports/mimxrt10xx/common-hal/busio/SPI.c @@ -367,10 +367,10 @@ bool common_hal_busio_spi_transfer(busio_spi_obj_t *self, const uint8_t *data_ou if (len == 0) { return true; } - if (self->MOSI == NULL && data_out != NULL) { + if (self->mosi == NULL && data_out != NULL) { mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_mosi); } - if (self->MISO == NULL && data_in != NULL) { + if (self->miso == NULL && data_in != NULL) { mp_raise_ValueError_varg(translate("No %q pin"), MP_QSTR_miso); } diff --git a/py/runtime.c b/py/runtime.c index ebe1590484..9bc5f9a584 100644 --- a/py/runtime.c +++ b/py/runtime.c @@ -1655,6 +1655,13 @@ NORETURN MP_COLD void mp_raise_RuntimeError(const compressed_string_t *msg) { mp_raise_msg(&mp_type_RuntimeError, msg); } +NORETURN MP_COLD void mp_raise_RuntimeError_varg(const compressed_string_t *fmt, ...) { + va_list argptr; + va_start(argptr,fmt); + mp_raise_msg_vlist(&mp_type_RuntimeError, fmt, argptr); + va_end(argptr); +} + NORETURN MP_COLD void mp_raise_ImportError(const compressed_string_t *msg) { mp_raise_msg(&mp_type_ImportError, msg); } diff --git a/py/runtime.h b/py/runtime.h index 196874bff9..d870bbc634 100644 --- a/py/runtime.h +++ b/py/runtime.h @@ -219,6 +219,7 @@ NORETURN void mp_raise_TypeError(const compressed_string_t *msg); NORETURN void mp_raise_TypeError_varg(const compressed_string_t *fmt, ...); NORETURN void mp_raise_AttributeError(const compressed_string_t *msg); NORETURN void mp_raise_RuntimeError(const compressed_string_t *msg); +NORETURN void mp_raise_RuntimeError_varg(const compressed_string_t *fmt, ...); NORETURN void mp_raise_ImportError(const compressed_string_t *msg); NORETURN void mp_raise_IndexError(const compressed_string_t *msg); NORETURN void mp_raise_IndexError_varg(const compressed_string_t *msg, ...); From c0de8a9cd946f8545d010ea60f69179401cf661c Mon Sep 17 00:00:00 2001 From: hexthat Date: Wed, 19 Jul 2023 23:24:25 +0000 Subject: [PATCH 140/241] Translated using Weblate (Chinese (Pinyin)) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/zh_Latn/ --- locale/zh_Latn_pinyin.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 4f56b14dfd..8ff874492e 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: circuitpython-cn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-16 04:32+0000\n" +"PO-Revision-Date: 2023-07-21 00:10+0000\n" "Last-Translator: hexthat \n" "Language-Team: Chinese Hanyu Pinyin\n" "Language: zh_Latn_pinyin\n" @@ -1641,7 +1641,7 @@ msgstr "Bù zhīchí jīshù" #: supervisor/shared/bluetooth/bluetooth.c msgid "Off" -msgstr "guānbì" +msgstr "Guānbì" #: supervisor/shared/bluetooth/bluetooth.c msgid "Ok" @@ -3286,7 +3286,7 @@ msgstr "bù zhèngquè de tiánchōng" #: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/transform.c msgid "index is out of bounds" -msgstr "suǒyǐn chāochū fànwéi" +msgstr "suǒyǐn yuèjiè" #: shared-bindings/_pixelmap/PixelMap.c msgid "index must be tuple or int" From a5fc766b2f78d4bb960ba6a77dbd5ec9cfd23e02 Mon Sep 17 00:00:00 2001 From: Tod Kurt Date: Fri, 21 Jul 2023 10:06:17 -0700 Subject: [PATCH 141/241] ESP32 synthio channels to 12 --- ports/espressif/mpconfigport.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/espressif/mpconfigport.mk b/ports/espressif/mpconfigport.mk index 1b9808ad64..63cea3d0a8 100644 --- a/ports/espressif/mpconfigport.mk +++ b/ports/espressif/mpconfigport.mk @@ -38,6 +38,7 @@ CIRCUITPY_NVM ?= 1 CIRCUITPY_PS2IO ?= 1 CIRCUITPY_RGBMATRIX ?= 1 CIRCUITPY_ROTARYIO ?= 1 +CIRCUITPY_SYNTHIO_MAX_CHANNELS ?= 12 CIRCUITPY_TOUCHIO_USE_NATIVE ?= 1 CIRCUITPY_WATCHDOG ?= 1 CIRCUITPY_WIFI ?= 1 From e58496feb281450235ca54c25d31b3de6e5ed723 Mon Sep 17 00:00:00 2001 From: Gaweng Tan Date: Sat, 22 Jul 2023 13:26:34 +0200 Subject: [PATCH 142/241] added Mapping to bits_per_value getter --- shared-bindings/displayio/Bitmap.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/shared-bindings/displayio/Bitmap.c b/shared-bindings/displayio/Bitmap.c index c678a76703..17a4b4c87f 100644 --- a/shared-bindings/displayio/Bitmap.c +++ b/shared-bindings/displayio/Bitmap.c @@ -116,6 +116,21 @@ MP_DEFINE_CONST_FUN_OBJ_1(displayio_bitmap_get_height_obj, displayio_bitmap_obj_ MP_PROPERTY_GETTER(displayio_bitmap_height_obj, (mp_obj_t)&displayio_bitmap_get_height_obj); +//| bits_per_value: int +//| """Bits per Pixel of the bitmap. (read only)""" +STATIC mp_obj_t displayio_bitmap_obj_get_bits_per_value(mp_obj_t self_in) { + displayio_bitmap_t *self = MP_OBJ_TO_PTR(self_in); + + check_for_deinit(self); + return MP_OBJ_NEW_SMALL_INT(common_hal_displayio_bitmap_get_bits_per_value(self)); +} + +MP_DEFINE_CONST_FUN_OBJ_1(displayio_bitmap_get_bits_per_value_obj, displayio_bitmap_obj_get_bits_per_value); + +MP_PROPERTY_GETTER(displayio_bitmap_bits_per_value_obj, + (mp_obj_t)&displayio_bitmap_get_bits_per_value_obj); + + //| def __getitem__(self, index: Union[Tuple[int, int], int]) -> int: //| """Returns the value at the given index. The index can either be an x,y tuple or an int equal //| to ``y * width + x``. @@ -260,6 +275,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(displayio_bitmap_deinit_obj, displayio_bitmap_obj_dein STATIC const mp_rom_map_elem_t displayio_bitmap_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&displayio_bitmap_height_obj) }, { MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&displayio_bitmap_width_obj) }, + { MP_ROM_QSTR(MP_QSTR_bits_per_value), MP_ROM_PTR(&displayio_bitmap_bits_per_value_obj) }, { MP_ROM_QSTR(MP_QSTR_fill), MP_ROM_PTR(&displayio_bitmap_fill_obj) }, { MP_ROM_QSTR(MP_QSTR_dirty), MP_ROM_PTR(&displayio_bitmap_dirty_obj) }, { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&displayio_bitmap_deinit_obj) }, From 8140d0cb03cdb3b49ff5c22631a5478a52e72c9b Mon Sep 17 00:00:00 2001 From: Gaweng Tan Date: Sat, 22 Jul 2023 14:34:06 +0200 Subject: [PATCH 143/241] Mapping python None to NULL in cadata var --- shared-bindings/ssl/SSLContext.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shared-bindings/ssl/SSLContext.c b/shared-bindings/ssl/SSLContext.c index ac5f7ad42d..ef227542fe 100644 --- a/shared-bindings/ssl/SSLContext.c +++ b/shared-bindings/ssl/SSLContext.c @@ -108,7 +108,10 @@ STATIC mp_obj_t ssl_sslcontext_load_verify_locations(size_t n_args, const mp_obj mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); - const char *cadata = mp_obj_str_get_str(args[ARG_cadata].u_obj); + const char *cadata = NULL; + if (args[ARG_cadata].u_obj != mp_const_none) { + cadata = mp_obj_str_get_str(args[ARG_cadata].u_obj); + } common_hal_ssl_sslcontext_load_verify_locations(self, cadata); return mp_const_none; From 4bc12d9fb0887a7db264afea4e14f1978bfc76e4 Mon Sep 17 00:00:00 2001 From: Unexpected Maker Date: Sun, 23 Jul 2023 13:39:53 +1000 Subject: [PATCH 144/241] Update pins.c Changed naming of the second I2C board reference to match how others name things. --- ports/espressif/boards/unexpectedmaker_feathers3/pins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/boards/unexpectedmaker_feathers3/pins.c b/ports/espressif/boards/unexpectedmaker_feathers3/pins.c index 4480e01438..5cdfc69ed2 100644 --- a/ports/espressif/boards/unexpectedmaker_feathers3/pins.c +++ b/ports/espressif/boards/unexpectedmaker_feathers3/pins.c @@ -126,7 +126,7 @@ 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_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_STEMMA_VERTICAL_I2C), MP_ROM_PTR(&board_stemma_i2c_obj) }, - { MP_ROM_QSTR(MP_QSTR_STEMMA2_I2C), MP_ROM_PTR(&board_stemma_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_STEMMA_I2C2), MP_ROM_PTR(&board_stemma_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_I2C2), MP_ROM_PTR(&board_stemma_i2c_obj) }, // SPI From 3ee9aaff970c97d3a8abe493722ddee1d9949d61 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Mon, 24 Jul 2023 18:42:48 +0200 Subject: [PATCH 145/241] 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 | 88 +++++++++++++-------------------- locale/cs.po | 97 ++++++++++++++++-------------------- locale/de_DE.po | 103 +++++++++++++++++++-------------------- locale/el.po | 73 ++++++++------------------- locale/en_GB.po | 103 +++++++++++++++++++-------------------- locale/es.po | 103 +++++++++++++++++++-------------------- locale/fil.po | 76 +++++++++-------------------- locale/fr.po | 103 +++++++++++++++++++-------------------- locale/hi.po | 70 ++++++-------------------- locale/it_IT.po | 76 +++++++++-------------------- locale/ja.po | 91 ++++++++++++++-------------------- locale/ko.po | 70 ++++++-------------------- locale/nl.po | 91 ++++++++++++++-------------------- locale/pl.po | 88 +++++++++++++-------------------- locale/pt_BR.po | 103 +++++++++++++++++++-------------------- locale/ru.po | 103 +++++++++++++++++++-------------------- locale/sv.po | 103 +++++++++++++++++++-------------------- locale/tr.po | 100 +++++++++++++++++-------------------- locale/zh_Latn_pinyin.po | 103 +++++++++++++++++++-------------------- 19 files changed, 718 insertions(+), 1026 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 6208de5540..65084356f1 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -129,8 +129,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -185,6 +187,7 @@ msgid "%q must be 1 when %q is True" msgstr "" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q harus <= %d" @@ -786,10 +789,6 @@ msgstr "Tidak dapat menentukan RTS atau CTS dalam mode RS485" msgid "Cannot subclass slice" msgstr "Tidak dapat membuat subkelas dari irisan" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "" @@ -1100,13 +1099,10 @@ msgstr "Grup sudah digunakan" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Perangkat keras sibuk, coba pin alternatif" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Perangkat keras sedang digunakan, coba pin alternatif" @@ -1367,14 +1363,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Tidak menemukan Pin MISO atau MOSI" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1448,6 +1436,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Tidak pin %q" @@ -1481,36 +1477,6 @@ msgstr "" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Tidak ada Pin MISO" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Tidak ada Pin MOSI" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Tidak pin RX" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Tidak ada pin TX" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Tidak ada clocks yang tersedia" @@ -2433,6 +2399,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3656,11 +3623,6 @@ msgstr "" msgid "no module named '%q'" msgstr "tidak ada modul yang bernama '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" @@ -4387,6 +4349,24 @@ msgstr "zi harus berjenis float" msgid "zi must be of shape (n_section, 2)" msgstr "Zi harus berbentuk (n_section, 2)" +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Perangkat keras sibuk, coba pin alternatif" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Tidak menemukan Pin MISO atau MOSI" + +#~ msgid "No MISO Pin" +#~ msgstr "Tidak ada Pin MISO" + +#~ msgid "No MOSI Pin" +#~ msgstr "Tidak ada Pin MOSI" + +#~ msgid "No RX pin" +#~ msgstr "Tidak pin RX" + +#~ msgid "No TX pin" +#~ msgstr "Tidak ada pin TX" + #~ msgid "Brightness must be 0-1.0" #~ msgstr "Kecerahan harus di antara 0-1.0" diff --git a/locale/cs.po b/locale/cs.po index 751d6394b0..501cfed1c4 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -130,8 +130,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -186,6 +188,7 @@ msgid "%q must be 1 when %q is True" msgstr "%q musí být 1, pokud %q je True" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q musí být <= %d" @@ -786,10 +789,6 @@ msgstr "Nelze určit RTS nebo CTS v režimu RS485" msgid "Cannot subclass slice" msgstr "Nelze použít řez podtřídy" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "Nelze měnit frekvenci časovače, který je již používán" @@ -1100,13 +1099,10 @@ msgstr "Skupina již byla použita" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Hardware je zaneprázdněn, zkuste alternativní piny" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Hardware je používán, zkuste alternativní piny" @@ -1367,14 +1363,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Chybí pin MISO nebo MOSI" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "Chybějící MISO nebo MOSI pin" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1448,6 +1436,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Žádný %q pin" @@ -1481,36 +1477,6 @@ msgstr "Žádné I2C zařízení na adrese: 0x%x" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Žádný pin MISO" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "Žádný MISO pin" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Žádný pin MOSI" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "Žádný MOSI pin" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Žádný RX pin" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Žádný TX pin" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Žádné dostupné hodiny" @@ -2420,6 +2386,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3643,11 +3610,6 @@ msgstr "" msgid "no module named '%q'" msgstr "" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" @@ -4373,6 +4335,33 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Hardware je zaneprázdněn, zkuste alternativní piny" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Chybí pin MISO nebo MOSI" + +#~ msgid "Missing MISO or MOSI pin" +#~ msgstr "Chybějící MISO nebo MOSI pin" + +#~ msgid "No MISO Pin" +#~ msgstr "Žádný pin MISO" + +#~ msgid "No MISO pin" +#~ msgstr "Žádný MISO pin" + +#~ msgid "No MOSI Pin" +#~ msgstr "Žádný pin MOSI" + +#~ msgid "No MOSI pin" +#~ msgstr "Žádný MOSI pin" + +#~ msgid "No RX pin" +#~ msgstr "Žádný RX pin" + +#~ msgid "No TX pin" +#~ msgstr "Žádný TX pin" + #~ msgid "Brightness must be 0-1.0" #~ msgstr "Jas musí být 0-1,0" diff --git a/locale/de_DE.po b/locale/de_DE.po index e706cb81c5..16c48fa6b6 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -138,8 +138,10 @@ msgstr "%q in %q muss von Typ %q sein, nicht %q" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -194,6 +196,7 @@ msgid "%q must be 1 when %q is True" msgstr "%q muss 1 sein, wenn %q wahr ist" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q muss <= %d sein" @@ -798,10 +801,6 @@ msgstr "RTS oder CTS können im RS485-Modus nicht angegeben werden" msgid "Cannot subclass slice" msgstr "Slice kann keine sub-klasse sein" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "Kann nicht ohne MISO und MOSI Pins transferieren" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "" @@ -1119,13 +1118,10 @@ msgstr "Gruppe schon benutzt" msgid "Half duplex SPI is not implemented" msgstr "Hald-Duplex SPI is tnicht implementiert" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Hardware beschäftigt, versuche alternative Pins" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Hardware in Benutzung, probiere alternative Pins" @@ -1392,14 +1388,6 @@ msgstr "Nicht übereinstimmende Datengröße" msgid "Mismatched swap flag" msgstr "Nicht übereinstimmendes Swap-Flag" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Fehlender MISO- oder MOSI-Pin" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "MISO oder MOSI Pin fehlt" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1473,6 +1461,14 @@ msgid "Nimble out of memory" msgstr "Kein Speicher mehr für Nible vorhanden" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Kein %q-Pin" @@ -1506,36 +1502,6 @@ msgstr "Kein I2C-Gerät an Adresse: 0x%x" msgid "No IP" msgstr "Keine IP" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Kein MISO-Pin" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "Miso Pin fehlt" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Kein MOSI-Pin" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "MOSI Pin fehlt" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Kein RX-Pin" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Kein TX-Pin" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Keine Taktgeber verfügbar" @@ -2477,6 +2443,7 @@ msgstr "Beide Knöpfe wurden beim Starten gedrückt." #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "Knopf A wurde beim Starten gedrückt." @@ -3722,11 +3689,6 @@ msgstr "kein Standard-Seed" msgid "no module named '%q'" msgstr "Kein Modul mit dem Namen '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "kein Reset Pin verfügbar" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "keine Antwort von der SD-Karte" @@ -4460,6 +4422,39 @@ msgstr "zi muss eine Gleitkommazahl sein" msgid "zi must be of shape (n_section, 2)" msgstr "zi muss die Form (n_section, 2) haben" +#~ msgid "Cannot transfer without MOSI and MISO pins" +#~ msgstr "Kann nicht ohne MISO und MOSI Pins transferieren" + +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Hardware beschäftigt, versuche alternative Pins" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Fehlender MISO- oder MOSI-Pin" + +#~ msgid "Missing MISO or MOSI pin" +#~ msgstr "MISO oder MOSI Pin fehlt" + +#~ msgid "No MISO Pin" +#~ msgstr "Kein MISO-Pin" + +#~ msgid "No MISO pin" +#~ msgstr "Miso Pin fehlt" + +#~ msgid "No MOSI Pin" +#~ msgstr "Kein MOSI-Pin" + +#~ msgid "No MOSI pin" +#~ msgstr "MOSI Pin fehlt" + +#~ msgid "No RX pin" +#~ msgstr "Kein RX-Pin" + +#~ msgid "No TX pin" +#~ msgstr "Kein TX-Pin" + +#~ msgid "no reset pin available" +#~ msgstr "kein Reset Pin verfügbar" + #~ msgid "Sleep Memory not available" #~ msgstr "Sleep-Speicher nicht verfügbar" diff --git a/locale/el.po b/locale/el.po index 5e002f27df..d8b55956e8 100644 --- a/locale/el.po +++ b/locale/el.po @@ -141,8 +141,10 @@ msgstr "%q στο %q πρέπει να είναι τύπου %q, όχι %q" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -197,6 +199,7 @@ msgid "%q must be 1 when %q is True" msgstr "%q πρέπει να είναι 1 όταν %q είναι True" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q πρέπει να είναι <= %d" @@ -802,10 +805,6 @@ msgstr "Δεν μπορεί να οριστεί RTS ή CTS σε RS485 mode" msgid "Cannot subclass slice" msgstr "Δεν γίνεται υποκατηγορία ενός slice" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "Δεν μπορεί να γίνει μεταφορά χωρίς MOSI και MISO pins" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "" @@ -1117,13 +1116,10 @@ msgstr "" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "" @@ -1382,14 +1378,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1463,6 +1451,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "" @@ -1496,36 +1492,6 @@ msgstr "" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "" @@ -2434,6 +2400,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3657,11 +3624,6 @@ msgstr "" msgid "no module named '%q'" msgstr "" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" @@ -4387,6 +4349,9 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "Cannot transfer without MOSI and MISO pins" +#~ msgstr "Δεν μπορεί να γίνει μεταφορά χωρίς MOSI και MISO pins" + #~ msgid "Brightness must be 0-1.0" #~ msgstr "Η φωτινότητα πρέπει να είναι μεταξύ 0-1.0" diff --git a/locale/en_GB.po b/locale/en_GB.po index 02d8748cf8..0984565599 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -139,8 +139,10 @@ msgstr "%q in %q must be of type %q, not %q" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -195,6 +197,7 @@ msgid "%q must be 1 when %q is True" msgstr "%q must be 1 when %q is True" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q must be <= %d" @@ -794,10 +797,6 @@ msgstr "Cannot specify RTS or CTS in RS485 mode" msgid "Cannot subclass slice" msgstr "Cannot subclass slice" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "Cannot transfer without MOSI and MISO pins" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "Cannot vary frequency on a timer that is already in use" @@ -1108,13 +1107,10 @@ msgstr "Group already used" msgid "Half duplex SPI is not implemented" msgstr "Half duplex SPI is not implemented" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Hardware busy, try alternative pins" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Hardware in use, try alternative pins" @@ -1376,14 +1372,6 @@ msgstr "Mismatched data size" msgid "Mismatched swap flag" msgstr "Mismatched swap flag" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Missing MISO or MOSI Pin" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "Missing MISO or MOSI pin" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1457,6 +1445,14 @@ msgid "Nimble out of memory" msgstr "Nimble out of memory" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "No %q pin" @@ -1490,36 +1486,6 @@ msgstr "No I2C device at address: 0x%x" msgid "No IP" msgstr "No IP" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "No MISO Pin" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "No MISO pin" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "No MOSI Pin" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "No MOSI pin" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "No RX pin" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "No TX pin" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "No available clocks" @@ -2443,6 +2409,7 @@ msgstr "You pressed both buttons at start up." #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "You pressed button A at start up." @@ -3671,11 +3638,6 @@ msgstr "no default seed" msgid "no module named '%q'" msgstr "no module named '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "no reset pin available" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "no response from SD card" @@ -4401,6 +4363,39 @@ msgstr "zi must be of float type" msgid "zi must be of shape (n_section, 2)" msgstr "zi must be of shape (n_section, 2)" +#~ msgid "Cannot transfer without MOSI and MISO pins" +#~ msgstr "Cannot transfer without MOSI and MISO pins" + +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Hardware busy, try alternative pins" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Missing MISO or MOSI Pin" + +#~ msgid "Missing MISO or MOSI pin" +#~ msgstr "Missing MISO or MOSI pin" + +#~ msgid "No MISO Pin" +#~ msgstr "No MISO Pin" + +#~ msgid "No MISO pin" +#~ msgstr "No MISO pin" + +#~ msgid "No MOSI Pin" +#~ msgstr "No MOSI Pin" + +#~ msgid "No MOSI pin" +#~ msgstr "No MOSI pin" + +#~ msgid "No RX pin" +#~ msgstr "No RX pin" + +#~ msgid "No TX pin" +#~ msgstr "No TX pin" + +#~ msgid "no reset pin available" +#~ msgstr "no reset pin available" + #~ msgid "Sleep Memory not available" #~ msgstr "Sleep Memory not available" diff --git a/locale/es.po b/locale/es.po index ba8b07d0dd..931c391e50 100644 --- a/locale/es.po +++ b/locale/es.po @@ -141,8 +141,10 @@ msgstr "%q en %q debe ser del tipo %q, no %q" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -197,6 +199,7 @@ msgid "%q must be 1 when %q is True" msgstr "%q debe ser 1 cuando %q es True" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q debe ser <= %d" @@ -805,10 +808,6 @@ msgstr "No se puede especificar RTS o CTS en modo RS485" msgid "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" -msgstr "No puede ser transferido si los pines MOSI y MISO" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "No puede variar la frecuencia en un temporizador que ya está en uso" @@ -1125,13 +1124,10 @@ msgstr "Grupo ya está siendo utilizado" msgid "Half duplex SPI is not implemented" msgstr "SPI Half Duplex no está implementado" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Hardware ocupado, pruebe pines alternativos" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Hardware en uso, pruebe pines alternativos" @@ -1400,14 +1396,6 @@ msgstr "Inconsistencia en el tamaño de los datos" msgid "Mismatched swap flag" msgstr "Inconsistencia en el flag de recambio" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Falta el pin MISO o MOSI" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "Falta el pin MISO o MOSI" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1485,6 +1473,14 @@ msgid "Nimble out of memory" msgstr "Nimble sin memoria" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Sin pin %q" @@ -1518,36 +1514,6 @@ msgstr "No hay dispositivo en la dirección: 0x%x" msgid "No IP" msgstr "No IP" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Sin pin MISO" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "No pin MISO" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Sin pin MOSI" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "No pin MOSI" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Sin pin RX" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Sin pin TX" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Relojes no disponibles" @@ -2486,6 +2452,7 @@ msgstr "Usted presionó ambos botones al iniciar." #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "Usted presionó el botón A al iniciar." @@ -3722,11 +3689,6 @@ msgstr "sin semilla por omisión" msgid "no module named '%q'" msgstr "ningún módulo se llama '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "no hay pin de reinicio disponible" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "no hay respuesta de la tarjeta SD" @@ -4456,6 +4418,39 @@ msgstr "zi debe ser de tipo flotante" msgid "zi must be of shape (n_section, 2)" msgstr "zi debe ser una forma (n_section,2)" +#~ msgid "Cannot transfer without MOSI and MISO pins" +#~ msgstr "No puede ser transferido si los pines MOSI y MISO" + +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Hardware ocupado, pruebe pines alternativos" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Falta el pin MISO o MOSI" + +#~ msgid "Missing MISO or MOSI pin" +#~ msgstr "Falta el pin MISO o MOSI" + +#~ msgid "No MISO Pin" +#~ msgstr "Sin pin MISO" + +#~ msgid "No MISO pin" +#~ msgstr "No pin MISO" + +#~ msgid "No MOSI Pin" +#~ msgstr "Sin pin MOSI" + +#~ msgid "No MOSI pin" +#~ msgstr "No pin MOSI" + +#~ msgid "No RX pin" +#~ msgstr "Sin pin RX" + +#~ msgid "No TX pin" +#~ msgstr "Sin pin TX" + +#~ msgid "no reset pin available" +#~ msgstr "no hay pin de reinicio disponible" + #~ msgid "Sleep Memory not available" #~ msgstr "Memoria de sueño no disponible" diff --git a/locale/fil.po b/locale/fil.po index ac2ddf6698..bc3f3bc1e6 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -127,8 +127,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -183,6 +185,7 @@ msgid "%q must be 1 when %q is True" msgstr "" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "" @@ -786,10 +789,6 @@ msgstr "" msgid "Cannot subclass slice" msgstr "Hindi magawa ang sublcass slice" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "" @@ -1100,13 +1099,10 @@ msgstr "" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "" @@ -1367,14 +1363,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1448,6 +1436,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Walang %q pin" @@ -1481,36 +1477,6 @@ msgstr "" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Walang RX pin" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Walang TX pin" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "" @@ -2423,6 +2389,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3662,11 +3629,6 @@ msgstr "" msgid "no module named '%q'" msgstr "walang module na '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" @@ -4394,6 +4356,12 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "No RX pin" +#~ msgstr "Walang RX pin" + +#~ msgid "No TX pin" +#~ msgstr "Walang TX pin" + #, fuzzy #~ msgid "x value out of bounds" #~ msgstr "wala sa sakop ang address" diff --git a/locale/fr.po b/locale/fr.po index 27495cda1b..a466a12359 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -141,8 +141,10 @@ msgstr "%q dans %q doit être de type %q, pas %q" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -197,6 +199,7 @@ msgid "%q must be 1 when %q is True" msgstr "%q doit être 1 quand %q est True" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q doit être <= %d" @@ -807,10 +810,6 @@ msgstr "Impossible de spécifier RTS ou CTS en mode RS485" msgid "Cannot subclass slice" msgstr "On ne peut faire de sous-classes de tranches" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "Impossible de transférer sans une broche MOSI ou MISO" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "Impossible de faire varier la fréquence sur un minuteur déjà utilisée" @@ -1133,13 +1132,10 @@ msgstr "Groupe déjà utilisé" msgid "Half duplex SPI is not implemented" msgstr "Le half duplex du SPI n'est pas implémenté" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Matériel occupé, essayez d'autres broches" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Matériel utilisé, essayez d'autres broches" @@ -1411,14 +1407,6 @@ msgstr "La taille des données ne correspond pas" msgid "Mismatched swap flag" msgstr "Le drapeau d'échange ne correspond pas" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Broche MISO ou MOSI manquante" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "La broche MISO ou MOSI est manquante" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1495,6 +1483,14 @@ msgid "Nimble out of memory" msgstr "Nimble n'a plus de mémoire" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Pas de broche %q" @@ -1528,36 +1524,6 @@ msgstr "Aucun périphérique I2S à l'adresse : 0x%x" msgid "No IP" msgstr "Aucune IP" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Pas de broche MISO" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "Aucune broche MISO" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Pas de broche MOSI" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "Aucune broche MOSI" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Pas de broche RX" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Pas de broche TX" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Pas d'horloge disponible" @@ -2498,6 +2464,7 @@ msgstr "Vous avez appuyé les deux boutons au démarrage." #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "Vous avez appuyé le bouton A au démarrage." @@ -3743,11 +3710,6 @@ msgstr "aucun seed par défaut" msgid "no module named '%q'" msgstr "pas de module '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "pas de broche de réinitialisation disponible" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "pas de réponse de la carte SD" @@ -4479,6 +4441,39 @@ msgstr "zi doit être de type float" msgid "zi must be of shape (n_section, 2)" msgstr "zi doit être de forme (n_section, 2)" +#~ msgid "Cannot transfer without MOSI and MISO pins" +#~ msgstr "Impossible de transférer sans une broche MOSI ou MISO" + +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Matériel occupé, essayez d'autres broches" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Broche MISO ou MOSI manquante" + +#~ msgid "Missing MISO or MOSI pin" +#~ msgstr "La broche MISO ou MOSI est manquante" + +#~ msgid "No MISO Pin" +#~ msgstr "Pas de broche MISO" + +#~ msgid "No MISO pin" +#~ msgstr "Aucune broche MISO" + +#~ msgid "No MOSI Pin" +#~ msgstr "Pas de broche MOSI" + +#~ msgid "No MOSI pin" +#~ msgstr "Aucune broche MOSI" + +#~ msgid "No RX pin" +#~ msgstr "Pas de broche RX" + +#~ msgid "No TX pin" +#~ msgstr "Pas de broche TX" + +#~ msgid "no reset pin available" +#~ msgstr "pas de broche de réinitialisation disponible" + #~ msgid "Sleep Memory not available" #~ msgstr "La mémoire de sommeil n'est pas disponible" diff --git a/locale/hi.po b/locale/hi.po index bdbcd835dd..f684a9d9b8 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -126,8 +126,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -182,6 +184,7 @@ msgid "%q must be 1 when %q is True" msgstr "" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "" @@ -779,10 +782,6 @@ msgstr "" msgid "Cannot subclass slice" msgstr "" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "" @@ -1090,13 +1089,10 @@ msgstr "" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "" @@ -1355,14 +1351,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1436,6 +1424,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "" @@ -1469,36 +1465,6 @@ msgstr "" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "" @@ -2405,6 +2371,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3628,11 +3595,6 @@ msgstr "" msgid "no module named '%q'" msgstr "" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" diff --git a/locale/it_IT.po b/locale/it_IT.po index f5519b25cc..ba9b3dc227 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -130,8 +130,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -186,6 +188,7 @@ msgid "%q must be 1 when %q is True" msgstr "" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "" @@ -789,10 +792,6 @@ msgstr "" msgid "Cannot subclass slice" msgstr "Impossibile subclasare slice" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "" @@ -1102,13 +1101,10 @@ msgstr "" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "" @@ -1370,14 +1366,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1451,6 +1439,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Nessun pin %q" @@ -1484,36 +1480,6 @@ msgstr "" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Nessun pin RX" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Nessun pin TX" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Nessun orologio a disposizione" @@ -2430,6 +2396,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3668,11 +3635,6 @@ msgstr "" msgid "no module named '%q'" msgstr "nessun modulo chiamato '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" @@ -4404,6 +4366,12 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "No RX pin" +#~ msgstr "Nessun pin RX" + +#~ msgid "No TX pin" +#~ msgstr "Nessun pin TX" + #~ msgid "Brightness must be 0-1.0" #~ msgstr "La luminosità deve essere tra 0-1.0" diff --git a/locale/ja.po b/locale/ja.po index 65b6274cd4..0d7498178c 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -133,8 +133,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -189,6 +191,7 @@ msgid "%q must be 1 when %q is True" msgstr "" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "" @@ -790,10 +793,6 @@ msgstr "RS485モードにRTSまたはCTSを指定できません" msgid "Cannot subclass slice" msgstr "sliceをサブクラス化することはできません" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "使用中のタイマー上では周波数を変えられません" @@ -1101,13 +1100,10 @@ msgstr "グループはすでに使われています" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "ハードウェアビジー。代替のピンを試してください" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "ハードウェア使用中。代わりのピンを試してください" @@ -1368,14 +1364,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "MISOまたはMOSIピンがありません" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1449,6 +1437,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "%qピンがありません" @@ -1482,36 +1478,6 @@ msgstr "" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "MISOピンなし" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "MOSIピンがありません" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "RXピンがありません" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "TXピンがありません" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "利用できるクロックがありません" @@ -2422,6 +2388,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3650,11 +3617,6 @@ msgstr "" msgid "no module named '%q'" msgstr "'%q' という名前のモジュールはありません" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "利用可能なリセットピンがありません" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "SDカードからの応答がありません" @@ -4382,6 +4344,27 @@ msgstr "ziはfloat値でなければなりません" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "ハードウェアビジー。代替のピンを試してください" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "MISOまたはMOSIピンがありません" + +#~ msgid "No MISO Pin" +#~ msgstr "MISOピンなし" + +#~ msgid "No MOSI Pin" +#~ msgstr "MOSIピンがありません" + +#~ msgid "No RX pin" +#~ msgstr "RXピンがありません" + +#~ msgid "No TX pin" +#~ msgstr "TXピンがありません" + +#~ msgid "no reset pin available" +#~ msgstr "利用可能なリセットピンがありません" + #~ msgid "Brightness must be 0-1.0" #~ msgstr "brightnessは0から1.0まででなければなりません" diff --git a/locale/ko.po b/locale/ko.po index cb0dad97e2..2fc43e592c 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -127,8 +127,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -183,6 +185,7 @@ msgid "%q must be 1 when %q is True" msgstr "" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "" @@ -782,10 +785,6 @@ msgstr "" msgid "Cannot subclass slice" msgstr "" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "" @@ -1093,13 +1092,10 @@ msgstr "" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "" @@ -1358,14 +1354,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1439,6 +1427,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "" @@ -1472,36 +1468,6 @@ msgstr "" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "" @@ -2409,6 +2375,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3632,11 +3599,6 @@ msgstr "" msgid "no module named '%q'" msgstr "" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" diff --git a/locale/nl.po b/locale/nl.po index cb2338ad92..719efe6914 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -126,8 +126,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -182,6 +184,7 @@ msgid "%q must be 1 when %q is True" msgstr "" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "" @@ -782,10 +785,6 @@ msgstr "Kan RTS of CTS niet specificeren in RS485 modus" msgid "Cannot subclass slice" msgstr "Kan slice niet subclasseren" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "Kan de frequentie van een timer die al in gebruik is niet variëren" @@ -1096,13 +1095,10 @@ msgstr "Groep al gebruikt" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Hardware bezig, probeer alternatieve pinnen" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Hardware in gebruik, probeer alternatieve pinnen" @@ -1363,14 +1359,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Ontbrekende MISO of MOSI Pin" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1444,6 +1432,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Geen %q pin" @@ -1477,36 +1473,6 @@ msgstr "" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Geen MISO pin" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Geen MOSI pin" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Geen RX pin" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Geen TX pin" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Geen klokken beschikbaar" @@ -2432,6 +2398,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3662,11 +3629,6 @@ msgstr "" msgid "no module named '%q'" msgstr "geen module met naam '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "geen reset pin beschikbaar" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "geen antwoord van SD kaart" @@ -4392,6 +4354,27 @@ msgstr "zi moet van type float zijn" msgid "zi must be of shape (n_section, 2)" msgstr "zi moet vorm (n_section, 2) hebben" +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Hardware bezig, probeer alternatieve pinnen" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Ontbrekende MISO of MOSI Pin" + +#~ msgid "No MISO Pin" +#~ msgstr "Geen MISO pin" + +#~ msgid "No MOSI Pin" +#~ msgstr "Geen MOSI pin" + +#~ msgid "No RX pin" +#~ msgstr "Geen RX pin" + +#~ msgid "No TX pin" +#~ msgstr "Geen TX pin" + +#~ msgid "no reset pin available" +#~ msgstr "geen reset pin beschikbaar" + #~ msgid "input and output shapes are not compatible" #~ msgstr "in- en uitvoervormen zijn niet compatibel" diff --git a/locale/pl.po b/locale/pl.po index a6af1932ee..35cc808126 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -128,8 +128,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -184,6 +186,7 @@ msgid "%q must be 1 when %q is True" msgstr "" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "" @@ -783,10 +786,6 @@ msgstr "Nie można określić RTS ani CTS w trybie RS485" msgid "Cannot subclass slice" msgstr "Nie można dziedziczyć ze slice" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "Nie można zmieniać częstotliwości timera, który jest już używany" @@ -1096,13 +1095,10 @@ msgstr "Grupa już używana" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Sprzęt zajęty, wypróbuj alternatywne piny" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Sprzęt w użyciu, wypróbuj alternatywne piny" @@ -1363,14 +1359,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Brak pinu MISO lub MOSI" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1444,6 +1432,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Brak nóżki %q" @@ -1477,36 +1473,6 @@ msgstr "" msgid "No IP" msgstr "" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Brak pinu MISO" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Brak pinu MOSI" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Brak nóżki RX" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Brak nóżki TX" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Brak wolnych zegarów" @@ -2413,6 +2379,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3637,11 +3604,6 @@ msgstr "" msgid "no module named '%q'" msgstr "brak modułu o nazwie '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" @@ -4368,6 +4330,24 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Sprzęt zajęty, wypróbuj alternatywne piny" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Brak pinu MISO lub MOSI" + +#~ msgid "No MISO Pin" +#~ msgstr "Brak pinu MISO" + +#~ msgid "No MOSI Pin" +#~ msgstr "Brak pinu MOSI" + +#~ msgid "No RX pin" +#~ msgstr "Brak nóżki RX" + +#~ msgid "No TX pin" +#~ msgstr "Brak nóżki TX" + #~ msgid "Brightness must be 0-1.0" #~ msgstr "Jasność musi wynosić 0-1,0" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 5b6cca5fb3..d44d309ad6 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -139,8 +139,10 @@ msgstr "%q em %q deve ser do tipo %q e não %q" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -195,6 +197,7 @@ msgid "%q must be 1 when %q is True" msgstr "%q deve ser 1 quando %q for verdadeiro" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q deve ser <= %d" @@ -806,10 +809,6 @@ msgstr "Não é possível definir o RTS ou CTS no modo RS485" msgid "Cannot subclass slice" msgstr "Não é possível subclassificar a fatia" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "Não é possível transferir sem os pinos MOSI e MISO" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "Não é possível variar a frequência em um timer que já esteja em uso" @@ -1122,13 +1121,10 @@ msgstr "O grupo já está em uso" msgid "Half duplex SPI is not implemented" msgstr "O SPI half duplex ainda não está implementado" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "O hardware está ocupado, tente os pinos alternativos" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "O hardware está em uso, tente os pinos alternativos" @@ -1397,14 +1393,6 @@ msgstr "O tamanho dos dados é incompatível" msgid "Mismatched swap flag" msgstr "Sinalizador de troca incompatível" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "O pino MISO ou MOSI está ausente" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "Falta o pino MISO ou o MOSI" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1478,6 +1466,14 @@ msgid "Nimble out of memory" msgstr "Ágil fora da memória" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Sem pin %q" @@ -1511,36 +1507,6 @@ msgstr "Não há nenhum dispositivo I2C no endereço: 0x%x" msgid "No IP" msgstr "Sem IP" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Nenhum pino MISO" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "Nenhum pino MISO" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Nenhum pino MOSI" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "Nenhum pino MOSI" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Nenhum pino RX" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Nenhum pino TX" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Nenhum clock disponível" @@ -2482,6 +2448,7 @@ msgstr "Você pressionou os dois botões durante a inicialização." #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "Você pressionou o botão A na inicialização." @@ -3722,11 +3689,6 @@ msgstr "nenhuma semente padrão" msgid "no module named '%q'" msgstr "nenhum módulo chamado '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "nenhum pino de redefinição está disponível" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "não houve resposta do cartão SD" @@ -4457,6 +4419,39 @@ msgstr "zi deve ser de um tipo float" msgid "zi must be of shape (n_section, 2)" msgstr "zi deve estar na forma (n_section, 2)" +#~ msgid "Cannot transfer without MOSI and MISO pins" +#~ msgstr "Não é possível transferir sem os pinos MOSI e MISO" + +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "O hardware está ocupado, tente os pinos alternativos" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "O pino MISO ou MOSI está ausente" + +#~ msgid "Missing MISO or MOSI pin" +#~ msgstr "Falta o pino MISO ou o MOSI" + +#~ msgid "No MISO Pin" +#~ msgstr "Nenhum pino MISO" + +#~ msgid "No MISO pin" +#~ msgstr "Nenhum pino MISO" + +#~ msgid "No MOSI Pin" +#~ msgstr "Nenhum pino MOSI" + +#~ msgid "No MOSI pin" +#~ msgstr "Nenhum pino MOSI" + +#~ msgid "No RX pin" +#~ msgstr "Nenhum pino RX" + +#~ msgid "No TX pin" +#~ msgstr "Nenhum pino TX" + +#~ msgid "no reset pin available" +#~ msgstr "nenhum pino de redefinição está disponível" + #~ msgid "Sleep Memory not available" #~ msgstr "Sleep memory não está disponível" diff --git a/locale/ru.po b/locale/ru.po index d4bbd20cac..8dd6627ad5 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -133,8 +133,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -189,6 +191,7 @@ msgid "%q must be 1 when %q is True" msgstr "%q должно быть 1 когда %q is True" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q должно быть <= %d" @@ -799,10 +802,6 @@ msgstr "Невозможно указать RTS или CTS в режиме RS485 msgid "Cannot subclass slice" msgstr "Срез субкласса невозможен" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "Невозможно передать данные без пинов MOSI и MISO" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "Невозможно изменить частоту на таймере, который уже используется" @@ -1127,13 +1126,10 @@ msgstr "Группа уже используется" msgid "Half duplex SPI is not implemented" msgstr "Полудуплексный SPI не реализован" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Оборудование занято, попробуйте использовать другие пины" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Оборудование используется, попробуйте использовать другие пины" @@ -1402,14 +1398,6 @@ msgstr "Размер данных различается" msgid "Mismatched swap flag" msgstr "Несоответствие флага swap" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Отсутствует пин MISO или MOSI" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "Отсутствует пин MISO или MOSI" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1484,6 +1472,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Нет пина %q" @@ -1517,36 +1513,6 @@ msgstr "Не найдено устройство I2C по адресу: %x" msgid "No IP" msgstr "Нет IP" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Нет пина MISO" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "Нет пина MISO" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Нет пина MOSI" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "Нет пина MOSI" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Нет пина RX" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Нет пина TX" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "" @@ -2468,6 +2434,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3691,11 +3658,6 @@ msgstr "" msgid "no module named '%q'" msgstr "" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "нет доступного контакта сброса" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" @@ -4421,6 +4383,39 @@ msgstr "zi должно быть типа float" msgid "zi must be of shape (n_section, 2)" msgstr "zi должен иметь форму (n_section, 2)" +#~ msgid "Cannot transfer without MOSI and MISO pins" +#~ msgstr "Невозможно передать данные без пинов MOSI и MISO" + +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Оборудование занято, попробуйте использовать другие пины" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Отсутствует пин MISO или MOSI" + +#~ msgid "Missing MISO or MOSI pin" +#~ msgstr "Отсутствует пин MISO или MOSI" + +#~ msgid "No MISO Pin" +#~ msgstr "Нет пина MISO" + +#~ msgid "No MISO pin" +#~ msgstr "Нет пина MISO" + +#~ msgid "No MOSI Pin" +#~ msgstr "Нет пина MOSI" + +#~ msgid "No MOSI pin" +#~ msgstr "Нет пина MOSI" + +#~ msgid "No RX pin" +#~ msgstr "Нет пина RX" + +#~ msgid "No TX pin" +#~ msgstr "Нет пина TX" + +#~ msgid "no reset pin available" +#~ msgstr "нет доступного контакта сброса" + #~ msgid "Brightness must be 0-1.0" #~ msgstr "Яркость должна быть в диапазоне от 0 до 1.0" diff --git a/locale/sv.po b/locale/sv.po index d5ab3cb7f2..28e2ee490e 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -138,8 +138,10 @@ msgstr "%q i %q måste vara av typen %q, inte %q" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -194,6 +196,7 @@ msgid "%q must be 1 when %q is True" msgstr "%q måste vara 1 när %q är sann" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q måste vara <= %d" @@ -797,10 +800,6 @@ msgstr "Det går inte att specificera RTS eller CTS i RS485-läget" msgid "Cannot subclass slice" msgstr "Det går inte att subklassa slice" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "Det går inte att överföra utan MOSI- och MISO-pinnar" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "Det går inte att ändra frekvensen på en timer som redan används" @@ -1113,13 +1112,10 @@ msgstr "Grupp används redan" msgid "Half duplex SPI is not implemented" msgstr "Halvduplex SPI är inte implementerat" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Hårdvaran är upptagen, prova alternativa pinnar" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Hårdvaran används redan, prova alternativa pinnar" @@ -1383,14 +1379,6 @@ msgstr "Datastorlek matchar inte" msgid "Mismatched swap flag" msgstr "Felaktig swapflagga" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "MISO- eller MOSI-pinne saknas" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "Saknad MISO- eller MOSI-pinne" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1464,6 +1452,14 @@ msgid "Nimble out of memory" msgstr "Nimble har inget minne kvar" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Ingen %q-pinne" @@ -1497,36 +1493,6 @@ msgstr "Ingen I2C-enhet på adress: 0x%x" msgid "No IP" msgstr "Ingen IP" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Ingen MISO-pinne" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "Ingen MISO-pinne" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Ingen MOSI-pinne" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "Ingen MOSI-pinne" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Ingen RX-pinne" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Ingen TX-pinne" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Inga tillgängliga klockor" @@ -2455,6 +2421,7 @@ msgstr "Du tryckte ner båda knapparna vid start." #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "Du tryckte ner knapp A vid start." @@ -3688,11 +3655,6 @@ msgstr "inget standard seed" msgid "no module named '%q'" msgstr "ingen modul med namnet '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "ingen reset-pinne tillgänglig" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "inget svar från SD-kort" @@ -4419,6 +4381,39 @@ msgstr "zi måste vara av typ float" msgid "zi must be of shape (n_section, 2)" msgstr "zi måste vara i formen (n_section, 2)" +#~ msgid "Cannot transfer without MOSI and MISO pins" +#~ msgstr "Det går inte att överföra utan MOSI- och MISO-pinnar" + +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Hårdvaran är upptagen, prova alternativa pinnar" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "MISO- eller MOSI-pinne saknas" + +#~ msgid "Missing MISO or MOSI pin" +#~ msgstr "Saknad MISO- eller MOSI-pinne" + +#~ msgid "No MISO Pin" +#~ msgstr "Ingen MISO-pinne" + +#~ msgid "No MISO pin" +#~ msgstr "Ingen MISO-pinne" + +#~ msgid "No MOSI Pin" +#~ msgstr "Ingen MOSI-pinne" + +#~ msgid "No MOSI pin" +#~ msgstr "Ingen MOSI-pinne" + +#~ msgid "No RX pin" +#~ msgstr "Ingen RX-pinne" + +#~ msgid "No TX pin" +#~ msgstr "Ingen TX-pinne" + +#~ msgid "no reset pin available" +#~ msgstr "ingen reset-pinne tillgänglig" + #~ msgid "Sleep Memory not available" #~ msgstr "Sömnminne inte tillgängligt" diff --git a/locale/tr.po b/locale/tr.po index 6fe4fabeab..71ba460288 100644 --- a/locale/tr.po +++ b/locale/tr.po @@ -134,8 +134,10 @@ msgstr "" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -190,6 +192,7 @@ msgid "%q must be 1 when %q is True" msgstr "%q 1 olmalı, %q True olduğu zaman" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q <= %d olmalıdır" @@ -791,10 +794,6 @@ msgstr "RS485 modunda RTS veya CTS belirtilemez" msgid "Cannot subclass slice" msgstr "" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "MOSI ve MISO pinleri olmadan transfer edilemiyor" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "Kullanımda olan bir zamanlayıcının frekansı değiştirilemez" @@ -1106,13 +1105,10 @@ msgstr "Grup zaten kullanılıyor" msgid "Half duplex SPI is not implemented" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Donanım meşgul, alternatif pinleri deneyin" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Donanım kullanımda, alternatif pinleri deneyin" @@ -1374,14 +1370,6 @@ msgstr "" msgid "Mismatched swap flag" msgstr "" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Eksik MISO veya MOSI pini" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "Eksik MISO veya MOSI pini" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1455,6 +1443,14 @@ msgid "Nimble out of memory" msgstr "" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "%q pini yok" @@ -1488,36 +1484,6 @@ msgstr "" msgid "No IP" msgstr "IP yok" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "MISO pini yok" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "MISO pini yok" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "MOSI pini yok" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "MOSI pini yok" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "RX pini yok" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "TX pini yok" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Kullanılabilir saat yok" @@ -2427,6 +2393,7 @@ msgstr "" #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "" @@ -3650,11 +3617,6 @@ msgstr "" msgid "no module named '%q'" msgstr "" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "" @@ -4380,6 +4342,36 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "Cannot transfer without MOSI and MISO pins" +#~ msgstr "MOSI ve MISO pinleri olmadan transfer edilemiyor" + +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Donanım meşgul, alternatif pinleri deneyin" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Eksik MISO veya MOSI pini" + +#~ msgid "Missing MISO or MOSI pin" +#~ msgstr "Eksik MISO veya MOSI pini" + +#~ msgid "No MISO Pin" +#~ msgstr "MISO pini yok" + +#~ msgid "No MISO pin" +#~ msgstr "MISO pini yok" + +#~ msgid "No MOSI Pin" +#~ msgstr "MOSI pini yok" + +#~ msgid "No MOSI pin" +#~ msgstr "MOSI pini yok" + +#~ msgid "No RX pin" +#~ msgstr "RX pini yok" + +#~ msgid "No TX pin" +#~ msgstr "TX pini yok" + #~ msgid "Brightness must be 0-1.0" #~ msgstr "Parlaklık 0-1.0 aralığında olmalı" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 8ff874492e..9bcb0640c2 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -141,8 +141,10 @@ msgstr "%q zhōng de %q bì xū shì %q lèi xíng, ér bù shì %q" #: ports/espressif/common-hal/espulp/ULP.c #: ports/mimxrt10xx/common-hal/audiobusio/__init__.c +#: ports/mimxrt10xx/common-hal/usb_host/Port.c #: ports/raspberrypi/common-hal/picodvi/Framebuffer.c #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +#: ports/raspberrypi/common-hal/usb_host/Port.c #: shared-bindings/digitalio/DigitalInOut.c #: shared-bindings/microcontroller/Pin.c msgid "%q in use" @@ -197,6 +199,7 @@ msgid "%q must be 1 when %q is True" msgstr "sāng %q wèi True shí, %q bìxū wèi 1" #: py/argcheck.c shared-bindings/gifio/GifWriter.c +#: shared-module/gifio/OnDiskGif.c msgid "%q must be <= %d" msgstr "%q bìxū <= %d" @@ -800,10 +803,6 @@ msgstr "wúfǎ zài RS485 móshì xià zhǐdìng RTS huò CTS" msgid "Cannot subclass slice" msgstr "bùnéng zǐlèihuà qiēpiàn" -#: shared-module/bitbangio/SPI.c -msgid "Cannot transfer without MOSI and MISO pins" -msgstr "méiyǒu MOSI hé MISO yǐnjiǎo, wúfǎ chuánshū" - #: shared-bindings/pwmio/PWMOut.c msgid "Cannot vary frequency on a timer that is already in use" msgstr "Wúfǎ zài shǐyòng zhōng de jìshí qì shàng gēnggǎi pínlǜ" @@ -1117,13 +1116,10 @@ msgstr "Jítuán yǐjīng shǐyòngguò" msgid "Half duplex SPI is not implemented" msgstr "wèi shí xiàn bàn shuāng gōng SPI" -#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c -#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/canio/CAN.c -#: ports/stm/common-hal/sdioio/SDCard.c -msgid "Hardware busy, try alternative pins" -msgstr "Yìngjiàn máng, qǐng chángshì qítā zhēnjiǎo" - -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/stm/common-hal/busio/I2C.c +#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/busio/UART.c +#: ports/stm/common-hal/canio/CAN.c ports/stm/common-hal/sdioio/SDCard.c msgid "Hardware in use, try alternative pins" msgstr "Shǐyòng de yìngjiàn, qǐng chángshì qítā yǐn jiǎo" @@ -1389,14 +1385,6 @@ msgstr "shùjù dàxiǎo bù pǐpèi" msgid "Mismatched swap flag" msgstr "jiāohuàn biāozhì bù pǐpèi" -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI Pin" -msgstr "Quēshǎo MISO huò MOSI yǐn jiǎo" - -#: ports/stm/common-hal/busio/SPI.c -msgid "Missing MISO or MOSI pin" -msgstr "quēshǎo MISO huò MOSI yǐn jiǎo" - #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c #, c-format msgid "Missing first_in_pin. Instruction %d reads pin(s)" @@ -1471,6 +1459,14 @@ msgid "Nimble out of memory" msgstr "líng huó de bǎi tuō jì yì" #: ports/atmel-samd/common-hal/busio/UART.c +#: ports/espressif/common-hal/busio/SPI.c +#: ports/espressif/common-hal/busio/UART.c +#: ports/mimxrt10xx/common-hal/busio/SPI.c +#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c +#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/SPI.c +#: ports/stm/common-hal/busio/UART.c shared-bindings/displayio/FourWire.c +#: shared-bindings/displayio/I2CDisplay.c +#: shared-bindings/paralleldisplay/ParallelBus.c shared-module/bitbangio/SPI.c msgid "No %q pin" msgstr "Wèi zhǎodào %q yǐn jiǎo" @@ -1504,36 +1500,6 @@ msgstr "dì zhǐ: 0x%x shí méi yǒu I2C qì jiàn" msgid "No IP" msgstr "wú IP" -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MISO Pin" -msgstr "Méiyǒu MISO yǐn jiǎo" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MISO pin" -msgstr "wú MISO pin" - -#: ports/espressif/common-hal/busio/SPI.c -#: ports/mimxrt10xx/common-hal/busio/SPI.c -msgid "No MOSI Pin" -msgstr "Méiyǒu MOSI yǐn jiǎo" - -#: ports/stm/common-hal/busio/SPI.c shared-module/bitbangio/SPI.c -msgid "No MOSI pin" -msgstr "wú MOSI pin" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No RX pin" -msgstr "Wèi zhǎodào RX yǐn jiǎo" - -#: ports/espressif/common-hal/busio/UART.c -#: ports/mimxrt10xx/common-hal/busio/UART.c ports/nrf/common-hal/busio/UART.c -#: ports/raspberrypi/common-hal/busio/UART.c ports/stm/common-hal/busio/UART.c -msgid "No TX pin" -msgstr "Wèi zhǎodào TX yǐn jiǎo" - #: ports/atmel-samd/common-hal/frequencyio/FrequencyIn.c msgid "No available clocks" msgstr "Méiyǒu kěyòng de shízhōng" @@ -2460,6 +2426,7 @@ msgstr "nín zài qǐ dòng shí àn xià le liǎng gè àn niǔ." #: ports/espressif/boards/m5stack_core_basic/mpconfigboard.h #: ports/espressif/boards/m5stack_core_fire/mpconfigboard.h #: ports/espressif/boards/m5stack_stick_c/mpconfigboard.h +#: ports/espressif/boards/m5stack_stick_c_plus/mpconfigboard.h msgid "You pressed button A at start up." msgstr "nín zài qǐ dòng shí àn xià le àn niǔ A." @@ -3692,11 +3659,6 @@ msgstr "wú mò rèn zhǒng zi" msgid "no module named '%q'" msgstr "méiyǒu mókuài '%q'" -#: shared-bindings/displayio/FourWire.c shared-bindings/displayio/I2CDisplay.c -#: shared-bindings/paralleldisplay/ParallelBus.c -msgid "no reset pin available" -msgstr "Méiyǒu kěyòng de fùwèi yǐn jiǎo" - #: shared-module/sdcardio/SDCard.c msgid "no response from SD card" msgstr "SD kǎ wú huíyīng" @@ -4425,6 +4387,39 @@ msgstr "zi bìxū wèi fú diǎn xíng" msgid "zi must be of shape (n_section, 2)" msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)" +#~ msgid "Cannot transfer without MOSI and MISO pins" +#~ msgstr "méiyǒu MOSI hé MISO yǐnjiǎo, wúfǎ chuánshū" + +#~ msgid "Hardware busy, try alternative pins" +#~ msgstr "Yìngjiàn máng, qǐng chángshì qítā zhēnjiǎo" + +#~ msgid "Missing MISO or MOSI Pin" +#~ msgstr "Quēshǎo MISO huò MOSI yǐn jiǎo" + +#~ msgid "Missing MISO or MOSI pin" +#~ msgstr "quēshǎo MISO huò MOSI yǐn jiǎo" + +#~ msgid "No MISO Pin" +#~ msgstr "Méiyǒu MISO yǐn jiǎo" + +#~ msgid "No MISO pin" +#~ msgstr "wú MISO pin" + +#~ msgid "No MOSI Pin" +#~ msgstr "Méiyǒu MOSI yǐn jiǎo" + +#~ msgid "No MOSI pin" +#~ msgstr "wú MOSI pin" + +#~ msgid "No RX pin" +#~ msgstr "Wèi zhǎodào RX yǐn jiǎo" + +#~ msgid "No TX pin" +#~ msgstr "Wèi zhǎodào TX yǐn jiǎo" + +#~ msgid "no reset pin available" +#~ msgstr "Méiyǒu kěyòng de fùwèi yǐn jiǎo" + #~ msgid "Sleep Memory not available" #~ msgstr "shuì mián jì yì bù kě yòng" From 8f1ebdbd1087dc3581e5487d95b7b9720d31090f Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Mon, 24 Jul 2023 18:41:52 -0700 Subject: [PATCH 146/241] Added initial Adafruit Metro ESP32-S3 --- .../boards/adafruit_metro_esp32s3/board.c | 29 ++++++++ .../adafruit_metro_esp32s3/mpconfigboard.h | 46 ++++++++++++ .../adafruit_metro_esp32s3/mpconfigboard.mk | 10 +++ .../boards/adafruit_metro_esp32s3/pins.c | 71 +++++++++++++++++++ .../boards/adafruit_metro_esp32s3/sdkconfig | 46 ++++++++++++ 5 files changed, 202 insertions(+) create mode 100644 ports/espressif/boards/adafruit_metro_esp32s3/board.c create mode 100644 ports/espressif/boards/adafruit_metro_esp32s3/mpconfigboard.h create mode 100644 ports/espressif/boards/adafruit_metro_esp32s3/mpconfigboard.mk create mode 100644 ports/espressif/boards/adafruit_metro_esp32s3/pins.c create mode 100644 ports/espressif/boards/adafruit_metro_esp32s3/sdkconfig diff --git a/ports/espressif/boards/adafruit_metro_esp32s3/board.c b/ports/espressif/boards/adafruit_metro_esp32s3/board.c new file mode 100644 index 0000000000..164430c88c --- /dev/null +++ b/ports/espressif/boards/adafruit_metro_esp32s3/board.c @@ -0,0 +1,29 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2020 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/espressif/boards/adafruit_metro_esp32s3/mpconfigboard.h b/ports/espressif/boards/adafruit_metro_esp32s3/mpconfigboard.h new file mode 100644 index 0000000000..d1e0ba0c26 --- /dev/null +++ b/ports/espressif/boards/adafruit_metro_esp32s3/mpconfigboard.h @@ -0,0 +1,46 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2019 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +// Micropython setup + +#define MICROPY_HW_BOARD_NAME "Adafruit Metro ESP32S3" +#define MICROPY_HW_MCU_NAME "ESP32S3" + +#define MICROPY_HW_NEOPIXEL (&pin_GPIO45) + +#define MICROPY_HW_LED_STATUS (&pin_GPIO13) + +#define DEFAULT_I2C_BUS_SCL (&pin_GPIO48) +#define DEFAULT_I2C_BUS_SDA (&pin_GPIO47) + +#define DEFAULT_SPI_BUS_SCK (&pin_GPIO36) +#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO35) +#define DEFAULT_SPI_BUS_MISO (&pin_GPIO37) + +#define DEFAULT_UART_BUS_RX (&pin_GPIO41) +#define DEFAULT_UART_BUS_TX (&pin_GPIO40) + +#define DOUBLE_TAP_PIN (&pin_GPIO38) diff --git a/ports/espressif/boards/adafruit_metro_esp32s3/mpconfigboard.mk b/ports/espressif/boards/adafruit_metro_esp32s3/mpconfigboard.mk new file mode 100644 index 0000000000..039c689eaf --- /dev/null +++ b/ports/espressif/boards/adafruit_metro_esp32s3/mpconfigboard.mk @@ -0,0 +1,10 @@ +USB_VID = 0x239A +USB_PID = 0x0145 +USB_PRODUCT = "Metro ESP32-S3" +USB_MANUFACTURER = "Adafruit" + +IDF_TARGET = esp32s3 + +CIRCUITPY_ESP_FLASH_MODE = dio +CIRCUITPY_ESP_FLASH_FREQ = 40m +CIRCUITPY_ESP_FLASH_SIZE = 16MB diff --git a/ports/espressif/boards/adafruit_metro_esp32s3/pins.c b/ports/espressif/boards/adafruit_metro_esp32s3/pins.c new file mode 100644 index 0000000000..e27f72f3bb --- /dev/null +++ b/ports/espressif/boards/adafruit_metro_esp32s3/pins.c @@ -0,0 +1,71 @@ +#include "shared-bindings/board/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + + { MP_OBJ_NEW_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO14) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO15) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO16) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_GPIO17) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_GPIO18) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_GPIO1) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO40) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO41) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_SDA),MP_ROM_PTR(&pin_GPIO47) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO47),MP_ROM_PTR(&pin_GPIO47) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_SCL),MP_ROM_PTR(&pin_GPIO48) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO48),MP_ROM_PTR(&pin_GPIO48) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO36) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_MOSI),MP_ROM_PTR(&pin_GPIO35) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO35),MP_ROM_PTR(&pin_GPIO35) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_MISO),MP_ROM_PTR(&pin_GPIO37) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO37),MP_ROM_PTR(&pin_GPIO37) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO45) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_DEBUG_RX), MP_ROM_PTR(&pin_GPIO44) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_DEBUG_TX), MP_ROM_PTR(&pin_GPIO43) }, + + { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) }, + { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, + { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, +}; +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); diff --git a/ports/espressif/boards/adafruit_metro_esp32s3/sdkconfig b/ports/espressif/boards/adafruit_metro_esp32s3/sdkconfig new file mode 100644 index 0000000000..2d819ad274 --- /dev/null +++ b/ports/espressif/boards/adafruit_metro_esp32s3/sdkconfig @@ -0,0 +1,46 @@ +# +# Component config +# +# +# ESP32S3-Specific +# +CONFIG_ESP32S3_SPIRAM_SUPPORT=y +# +# SPI RAM config +# +CONFIG_SPIRAM_MODE_QUAD=y +# CONFIG_SPIRAM_MODE_OCT is not set +CONFIG_SPIRAM_TYPE_AUTO=y +# CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set +# CONFIG_SPIRAM_TYPE_ESPPSRAM64 is not set +CONFIG_SPIRAM_SIZE=8388608 +# end of SPI RAM config + +# PSRAM Clock and CS IO for ESP32S3 +# +CONFIG_DEFAULT_PSRAM_CLK_IO=30 +CONFIG_DEFAULT_PSRAM_CS_IO=26 +# end of PSRAM Clock and CS IO for ESP32S3 + +# CONFIG_SPIRAM_FETCH_INSTRUCTIONS is not set +# CONFIG_SPIRAM_RODATA is not set +# CONFIG_SPIRAM_SPEED_120M is not set +CONFIG_SPIRAM_SPEED_80M=y +# CONFIG_SPIRAM_SPEED_40M is not set +CONFIG_SPIRAM=y +CONFIG_SPIRAM_BOOT_INIT=y +# CONFIG_SPIRAM_IGNORE_NOTFOUND is not set +CONFIG_SPIRAM_USE_MEMMAP=y +# CONFIG_SPIRAM_USE_CAPS_ALLOC is not set +# CONFIG_SPIRAM_USE_MALLOC is not set +CONFIG_SPIRAM_MEMTEST=y +# end of SPI RAM config + +# end of ESP32S3-Specific + +# +# LWIP +# +CONFIG_LWIP_LOCAL_HOSTNAME="Metro-ESP32S3" +# end of LWIP From ad782664ad7abee86070b84e721462f06f632937 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Mon, 24 Jul 2023 21:29:30 -0500 Subject: [PATCH 147/241] update esp32spi and requests submodules --- frozen/Adafruit_CircuitPython_ESP32SPI | 2 +- frozen/Adafruit_CircuitPython_Requests | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frozen/Adafruit_CircuitPython_ESP32SPI b/frozen/Adafruit_CircuitPython_ESP32SPI index ee6bfcf9e6..c8bb6258a0 160000 --- a/frozen/Adafruit_CircuitPython_ESP32SPI +++ b/frozen/Adafruit_CircuitPython_ESP32SPI @@ -1 +1 @@ -Subproject commit ee6bfcf9e676eb435c8890db37f07719984a60a1 +Subproject commit c8bb6258a0444c31ab5ae69e3af1fffbd7761a99 diff --git a/frozen/Adafruit_CircuitPython_Requests b/frozen/Adafruit_CircuitPython_Requests index 558fff7223..36f1bb0f1b 160000 --- a/frozen/Adafruit_CircuitPython_Requests +++ b/frozen/Adafruit_CircuitPython_Requests @@ -1 +1 @@ -Subproject commit 558fff7223178eae6228e5262f3a08d3a4101394 +Subproject commit 36f1bb0f1b739a06b7e2782580ce08eecf17c78a From c781204105fcc83edac4897ab576e8835de2b279 Mon Sep 17 00:00:00 2001 From: Vladimir Smitka Date: Tue, 25 Jul 2023 14:40:53 +0200 Subject: [PATCH 148/241] Add PicoPad support --- .../boards/pajenicko_picopad/board.c | 114 ++++++++++++++++++ .../boards/pajenicko_picopad/link.ld | 1 + .../boards/pajenicko_picopad/mpconfigboard.h | 12 ++ .../boards/pajenicko_picopad/mpconfigboard.mk | 34 ++++++ .../pajenicko_picopad/pico-sdk-configboard.h | 1 + .../boards/pajenicko_picopad/pins.c | 113 +++++++++++++++++ 6 files changed, 275 insertions(+) create mode 100644 ports/raspberrypi/boards/pajenicko_picopad/board.c create mode 100644 ports/raspberrypi/boards/pajenicko_picopad/link.ld create mode 100644 ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.h create mode 100644 ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.mk create mode 100644 ports/raspberrypi/boards/pajenicko_picopad/pico-sdk-configboard.h create mode 100644 ports/raspberrypi/boards/pajenicko_picopad/pins.c diff --git a/ports/raspberrypi/boards/pajenicko_picopad/board.c b/ports/raspberrypi/boards/pajenicko_picopad/board.c new file mode 100644 index 0000000000..0d092a1f4d --- /dev/null +++ b/ports/raspberrypi/boards/pajenicko_picopad/board.c @@ -0,0 +1,114 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2021 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "supervisor/board.h" +#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" +#include "supervisor/shared/board.h" + +displayio_fourwire_obj_t board_display_obj; + +#define DELAY 0x80 + +uint8_t display_init_sequence[] = { + 0x01, 0 | DELAY, 150, // SWRESET + + 0x36, 1, 0x68, // MADCTL + 0x35, 1, 0x00, // TEON + 0xB2, 5, 0x0c, 0x0c, 0x00, 0x33, 0x33, // FRMCTR2 + 0x3A, 1, 0x05, // COLMOD + 0xB7, 1, 0x14, // GCTRL + 0xBB, 1, 0x37, // VCOMS + 0xC0, 1, 0x2c, // LCMCTRL + 0xC2, 1, 0x01, // VDVVRHEN + 0xC3, 1, 0x12, // VRHS + 0xC4, 1, 0x20, // VDVS + 0xD0, 2, 0xa4, 0xa1, // PWRCTRL1 + 0xC6, 1, 0x0f, // FRCTRL2 + 0xE0, 14, 0xd0, 0x04, 0x0d, 0x11, 0x13, 0x2b, 0x3f, 0x54, 0x4c, 0x18, 0x0d, 0x0b, 0x1f, 0x23, // GMCTRP1 + 0xE1, 14, 0xd0, 0x04, 0x0c, 0x11, 0x13, 0x2c, 0x3f, 0x44, 0x51, 0x2f, 0x1f, 0x1f, 0x20, 0x23, // GMCTRN1 + 0x21, 0, // INVON + + 0x11, 0 | DELAY, 255, // SLPOUT + 0x29, 0 | DELAY, 100, // DISPON + + 0x2a, 4, 0x00, 0, 0x00, 0xfe, // CASET + 0x2b, 4, 0x00, 0, 0x00, 0xfe, // RASET + 0x2c, 0, // RAMWR +}; + +void board_init(void) { + displayio_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; + busio_spi_obj_t *spi = &bus->inline_bus; + common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO19, NULL, false); + common_hal_busio_spi_never_reset(spi); + + bus->base.type = &displayio_fourwire_type; + common_hal_displayio_fourwire_construct(bus, + spi, + &pin_GPIO17, // TFT_DC Command or data + &pin_GPIO21, // TFT_CS Chip select + &pin_GPIO20, // TFT_RST Reset + 60000000, // Baudrate + 0, // Polarity + 0); // Phase + + displayio_display_obj_t *display = &allocate_display()->display; + display->base.type = &displayio_display_type; + common_hal_displayio_display_construct(display, + bus, + 320, // Width + 240, // Height + 0, // column start + 0, // row start + 0, // rotation + 16, // Color depth + false, // Grayscale + false, // pixels in a byte share a row. Only valid for depths < 8 + 1, // bytes per cell. Only valid for depths < 8 + false, // reverse_pixels_in_byte. Only valid for depths < 8 + true, // reverse_bytes_in_word + MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command + MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command + MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command + display_init_sequence, + sizeof(display_init_sequence), + &pin_GPIO16, // backlight pin + NO_BRIGHTNESS_COMMAND, + 1.0f, // brightness + false, // single_byte_bounds + false, // data_as_commands + true, // auto_refresh + 60, // native_frames_per_second + true, // backlight_on_high + false, // SH1107_addressing + 50000); // backlight pwm frequency +} + +// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/raspberrypi/boards/pajenicko_picopad/link.ld b/ports/raspberrypi/boards/pajenicko_picopad/link.ld new file mode 100644 index 0000000000..e814bead4c --- /dev/null +++ b/ports/raspberrypi/boards/pajenicko_picopad/link.ld @@ -0,0 +1 @@ +firmware_size = 1532k; diff --git a/ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.h b/ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.h new file mode 100644 index 0000000000..26b8447860 --- /dev/null +++ b/ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.h @@ -0,0 +1,12 @@ +#define MICROPY_HW_BOARD_NAME "Pajenicko PicoPad" +#define MICROPY_HW_MCU_NAME "rp2040" + +#define CIRCUITPY_DIGITALIO_HAVE_INVALID_PULL (1) +#define CIRCUITPY_DIGITALIO_HAVE_INVALID_DRIVE_MODE (1) + +#define MICROPY_HW_LED_STATUS (&pin_CYW0) + +#define DEFAULT_UART_BUS_TX (&pin_GPIO0) +#define DEFAULT_UART_BUS_RX (&pin_GPIO1) +#define DEFAULT_I2C_BUS_SDA (&pin_GPIO0) +#define DEFAULT_I2C_BUS_SCL (&pin_GPIO1) diff --git a/ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.mk b/ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.mk new file mode 100644 index 0000000000..2eeea9723f --- /dev/null +++ b/ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.mk @@ -0,0 +1,34 @@ +USB_VID = 0x2E8A +USB_PID = 0x1063 + +USB_PRODUCT = "PicoPad" +USB_MANUFACTURER = "Pajenicko s.r.o." + +CHIP_VARIANT = RP2040 +CHIP_FAMILY = rp2 + +EXTERNAL_FLASH_DEVICES = "W25Q16JVxQ" + +CIRCUITPY_KEYPAD = 1 +CIRCUITPY_STAGE = 1 +CIRCUITPY_AUDIOIO = 1 + +CIRCUITPY__EVE = 1 + +CIRCUITPY_CYW43 = 1 +CIRCUITPY_SSL = 1 +CIRCUITPY_SSL_MBEDTLS = 1 +CIRCUITPY_HASHLIB = 1 +CIRCUITPY_WEB_WORKFLOW = 1 +CIRCUITPY_MDNS = 1 +CIRCUITPY_SOCKETPOOL = 1 +CIRCUITPY_WIFI = 1 + +CIRCUITPY_PICODVI = 1 + +# Pimoroni PicoSystem peripherals are compatible, we can use of existing ugame.py +FROZEN_MPY_DIRS += $(TOP)/frozen/circuitpython-stage/picosystem + +CFLAGS += -DCYW43_PIN_WL_HOST_WAKE=24 -DCYW43_PIN_WL_REG_ON=23 -DCYW43_WL_GPIO_COUNT=3 -DCYW43_WL_GPIO_LED_PIN=0 +# Must be accompanied by a linker script change +CFLAGS += -DCIRCUITPY_FIRMWARE_SIZE='(1536 * 1024)' \ No newline at end of file diff --git a/ports/raspberrypi/boards/pajenicko_picopad/pico-sdk-configboard.h b/ports/raspberrypi/boards/pajenicko_picopad/pico-sdk-configboard.h new file mode 100644 index 0000000000..36da55d457 --- /dev/null +++ b/ports/raspberrypi/boards/pajenicko_picopad/pico-sdk-configboard.h @@ -0,0 +1 @@ +// Put board-specific pico-sdk definitions here. This file must exist. diff --git a/ports/raspberrypi/boards/pajenicko_picopad/pins.c b/ports/raspberrypi/boards/pajenicko_picopad/pins.c new file mode 100644 index 0000000000..de59502d69 --- /dev/null +++ b/ports/raspberrypi/boards/pajenicko_picopad/pins.c @@ -0,0 +1,113 @@ +#include "shared-bindings/board/__init__.h" +#include "shared-module/displayio/__init__.h" + +STATIC const mp_rom_map_elem_t board_module_globals_table[] = { + CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS + //Default RPi Pico Pins + {MP_ROM_QSTR(MP_QSTR_GP0), MP_ROM_PTR(&pin_GPIO0)}, + {MP_ROM_QSTR(MP_QSTR_GP1), MP_ROM_PTR(&pin_GPIO1)}, + {MP_ROM_QSTR(MP_QSTR_GP2), MP_ROM_PTR(&pin_GPIO2)}, + {MP_ROM_QSTR(MP_QSTR_GP3), MP_ROM_PTR(&pin_GPIO3)}, + {MP_ROM_QSTR(MP_QSTR_GP4), MP_ROM_PTR(&pin_GPIO4)}, + {MP_ROM_QSTR(MP_QSTR_GP5), MP_ROM_PTR(&pin_GPIO5)}, + {MP_ROM_QSTR(MP_QSTR_GP6), MP_ROM_PTR(&pin_GPIO6)}, + {MP_ROM_QSTR(MP_QSTR_GP7), MP_ROM_PTR(&pin_GPIO7)}, + {MP_ROM_QSTR(MP_QSTR_GP8), MP_ROM_PTR(&pin_GPIO8)}, + {MP_ROM_QSTR(MP_QSTR_GP9), MP_ROM_PTR(&pin_GPIO9)}, + {MP_ROM_QSTR(MP_QSTR_GP10), MP_ROM_PTR(&pin_GPIO10)}, + {MP_ROM_QSTR(MP_QSTR_GP11), MP_ROM_PTR(&pin_GPIO11)}, + {MP_ROM_QSTR(MP_QSTR_GP12), MP_ROM_PTR(&pin_GPIO12)}, + {MP_ROM_QSTR(MP_QSTR_GP13), MP_ROM_PTR(&pin_GPIO13)}, + {MP_ROM_QSTR(MP_QSTR_GP14), MP_ROM_PTR(&pin_GPIO14)}, + {MP_ROM_QSTR(MP_QSTR_GP15), MP_ROM_PTR(&pin_GPIO15)}, + {MP_ROM_QSTR(MP_QSTR_GP16), MP_ROM_PTR(&pin_GPIO16)}, + {MP_ROM_QSTR(MP_QSTR_GP17), MP_ROM_PTR(&pin_GPIO17)}, + {MP_ROM_QSTR(MP_QSTR_GP18), MP_ROM_PTR(&pin_GPIO18)}, + {MP_ROM_QSTR(MP_QSTR_GP19), MP_ROM_PTR(&pin_GPIO19)}, + {MP_ROM_QSTR(MP_QSTR_GP20), MP_ROM_PTR(&pin_GPIO20)}, + {MP_ROM_QSTR(MP_QSTR_GP21), MP_ROM_PTR(&pin_GPIO21)}, + {MP_ROM_QSTR(MP_QSTR_GP22), MP_ROM_PTR(&pin_GPIO22)}, + {MP_ROM_QSTR(MP_QSTR_GP26), MP_ROM_PTR(&pin_GPIO26)}, + {MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27)}, + {MP_ROM_QSTR(MP_QSTR_GP28), MP_ROM_PTR(&pin_GPIO28)}, + + //PicoPad external connector + /* + ┌──────┐ + GND -│1 2│- GND + 3V3 -│3 4│- VBAT + D5/A2 -│5 6│- ADC_VREF + D4/A1 -│7 8│- AGND + D3/TX/SDA -│9 10│- D0/A0 + D2/RX/SCL -│11 12│- D1 + └──────┘ + */ + + {MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO26)}, + {MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO14)}, + {MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO1)}, + {MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO0)}, + {MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO27)}, + {MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO28)}, + + {MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO26)}, + {MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27)}, + {MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28)}, + + //PicoPad LCD + {MP_ROM_QSTR(MP_QSTR_LCD_RESET), MP_ROM_PTR(&pin_GPIO20)}, + {MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO21)}, + {MP_ROM_QSTR(MP_QSTR_LCD_SCLK), MP_ROM_PTR(&pin_GPIO18)}, + {MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO19)}, + {MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO17)}, + {MP_ROM_QSTR(MP_QSTR_LCD_BL), MP_ROM_PTR(&pin_GPIO16)}, + + //PicoPad Audio + {MP_ROM_QSTR(MP_QSTR_AUDIO), MP_ROM_PTR(&pin_GPIO15)}, + + //PicoPad USR LED (yellow) + {MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO22)}, + + //PicoPad Buttons + {MP_ROM_QSTR(MP_QSTR_SW_X), MP_ROM_PTR(&pin_GPIO9)}, + {MP_ROM_QSTR(MP_QSTR_SW_Y), MP_ROM_PTR(&pin_GPIO8)}, + {MP_ROM_QSTR(MP_QSTR_SW_A), MP_ROM_PTR(&pin_GPIO7)}, + {MP_ROM_QSTR(MP_QSTR_SW_B), MP_ROM_PTR(&pin_GPIO6)}, + + {MP_ROM_QSTR(MP_QSTR_SW_DOWN), MP_ROM_PTR(&pin_GPIO5)}, + {MP_ROM_QSTR(MP_QSTR_SW_RIGHT), MP_ROM_PTR(&pin_GPIO2)}, + {MP_ROM_QSTR(MP_QSTR_SW_LEFT), MP_ROM_PTR(&pin_GPIO3)}, + {MP_ROM_QSTR(MP_QSTR_SW_UP), MP_ROM_PTR(&pin_GPIO4)}, + + //PicoPad SD Card + {MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO13)}, + {MP_ROM_QSTR(MP_QSTR_SD_SCK), MP_ROM_PTR(&pin_GPIO10)}, + {MP_ROM_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_GPIO11)}, + {MP_ROM_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_GPIO12)}, + + //PicoPad Battery + {MP_ROM_QSTR(MP_QSTR_BAT_SENSE), MP_ROM_PTR(&pin_GPIO29)}, + + //PicoPad UART0 + {MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO0)}, + {MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO1)}, + + //PicoPad I2C0 + {MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO0)}, + {MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO1)}, + + //PicoPad I2C1 + {MP_ROM_QSTR(MP_QSTR_SDA_ALT), MP_ROM_PTR(&pin_GPIO14)}, + {MP_ROM_QSTR(MP_QSTR_SCL_ALT), MP_ROM_PTR(&pin_GPIO27)}, + + + {MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj)}, + {MP_ROM_QSTR(MP_QSTR_I2C_ALT), MP_ROM_PTR(&board_i2c_obj)}, + {MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj)}, + + {MP_ROM_QSTR(MP_QSTR_SMPS_MODE), MP_ROM_PTR(&pin_CYW1)}, + {MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_CYW0)}, + {MP_ROM_QSTR(MP_QSTR_VBUS_SENSE), MP_ROM_PTR(&pin_CYW2)}, + {MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)}}; + +MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From 8b6800e4d47c377591597ab295d5a5f86d229b7f Mon Sep 17 00:00:00 2001 From: foamyguy Date: Tue, 25 Jul 2023 08:58:37 -0500 Subject: [PATCH 149/241] update frozen libraries --- frozen/Adafruit_CircuitPython_APDS9960 | 2 +- frozen/Adafruit_CircuitPython_BLE | 2 +- frozen/Adafruit_CircuitPython_BLE_Apple_Notification_Center | 2 +- frozen/Adafruit_CircuitPython_BusDevice | 2 +- frozen/Adafruit_CircuitPython_CircuitPlayground | 2 +- frozen/Adafruit_CircuitPython_Crickit | 2 +- frozen/Adafruit_CircuitPython_DRV2605 | 2 +- frozen/Adafruit_CircuitPython_DS3231 | 2 +- frozen/Adafruit_CircuitPython_Display_Shapes | 2 +- frozen/Adafruit_CircuitPython_Display_Text | 2 +- frozen/Adafruit_CircuitPython_DotStar | 2 +- frozen/Adafruit_CircuitPython_FakeRequests | 2 +- frozen/Adafruit_CircuitPython_FocalTouch | 2 +- frozen/Adafruit_CircuitPython_HID | 2 +- frozen/Adafruit_CircuitPython_IRRemote | 2 +- frozen/Adafruit_CircuitPython_IS31FL3731 | 2 +- frozen/Adafruit_CircuitPython_LC709203F | 2 +- frozen/Adafruit_CircuitPython_LIS3DH | 2 +- frozen/Adafruit_CircuitPython_LSM6DS | 2 +- frozen/Adafruit_CircuitPython_MIDI | 2 +- frozen/Adafruit_CircuitPython_Motor | 2 +- frozen/Adafruit_CircuitPython_NeoPixel | 2 +- frozen/Adafruit_CircuitPython_PortalBase | 2 +- frozen/Adafruit_CircuitPython_ProgressBar | 2 +- frozen/Adafruit_CircuitPython_RFM69 | 2 +- frozen/Adafruit_CircuitPython_RFM9x | 2 +- frozen/Adafruit_CircuitPython_Register | 2 +- frozen/Adafruit_CircuitPython_SD | 2 +- frozen/Adafruit_CircuitPython_SSD1680 | 2 +- frozen/Adafruit_CircuitPython_ST7789 | 2 +- frozen/Adafruit_CircuitPython_SimpleIO | 2 +- frozen/Adafruit_CircuitPython_SimpleMath | 2 +- frozen/Adafruit_CircuitPython_Thermistor | 2 +- frozen/Adafruit_CircuitPython_Ticks | 2 +- frozen/Adafruit_CircuitPython_UC8151D | 2 +- frozen/Adafruit_CircuitPython_Wave | 2 +- frozen/Adafruit_CircuitPython_asyncio | 2 +- frozen/Adafruit_CircuitPython_seesaw | 2 +- 38 files changed, 38 insertions(+), 38 deletions(-) diff --git a/frozen/Adafruit_CircuitPython_APDS9960 b/frozen/Adafruit_CircuitPython_APDS9960 index 9ddd596505..2582575b50 160000 --- a/frozen/Adafruit_CircuitPython_APDS9960 +++ b/frozen/Adafruit_CircuitPython_APDS9960 @@ -1 +1 @@ -Subproject commit 9ddd59650598b7a0641d70aabcc8aab71799cb93 +Subproject commit 2582575b500547f26dae04c83e540367c121c7b4 diff --git a/frozen/Adafruit_CircuitPython_BLE b/frozen/Adafruit_CircuitPython_BLE index e07e1853d7..f32e7b953e 160000 --- a/frozen/Adafruit_CircuitPython_BLE +++ b/frozen/Adafruit_CircuitPython_BLE @@ -1 +1 @@ -Subproject commit e07e1853d7e995b9797a064c098bccc5c384632e +Subproject commit f32e7b953ec93f71fcb292074b6d25c7c4355a88 diff --git a/frozen/Adafruit_CircuitPython_BLE_Apple_Notification_Center b/frozen/Adafruit_CircuitPython_BLE_Apple_Notification_Center index b06b47037a..8455eb0b1f 160000 --- a/frozen/Adafruit_CircuitPython_BLE_Apple_Notification_Center +++ b/frozen/Adafruit_CircuitPython_BLE_Apple_Notification_Center @@ -1 +1 @@ -Subproject commit b06b47037aed97475b1676b104d1f4b05c3f5e86 +Subproject commit 8455eb0b1f5be39638a88df84c9ab360f50ecc90 diff --git a/frozen/Adafruit_CircuitPython_BusDevice b/frozen/Adafruit_CircuitPython_BusDevice index 9ace770b04..14f5a0b957 160000 --- a/frozen/Adafruit_CircuitPython_BusDevice +++ b/frozen/Adafruit_CircuitPython_BusDevice @@ -1 +1 @@ -Subproject commit 9ace770b048be9ab0da4a154af279dbb643bbdb0 +Subproject commit 14f5a0b957a11814339f0e22896243fecc9a78f2 diff --git a/frozen/Adafruit_CircuitPython_CircuitPlayground b/frozen/Adafruit_CircuitPython_CircuitPlayground index 47f848f13f..bdf4373d73 160000 --- a/frozen/Adafruit_CircuitPython_CircuitPlayground +++ b/frozen/Adafruit_CircuitPython_CircuitPlayground @@ -1 +1 @@ -Subproject commit 47f848f13f75d2f62d16407edaaf6dd0ec1fc3cc +Subproject commit bdf4373d734a5c000ef500f70c94b5b24d2663af diff --git a/frozen/Adafruit_CircuitPython_Crickit b/frozen/Adafruit_CircuitPython_Crickit index a37c7cc836..a1f6652943 160000 --- a/frozen/Adafruit_CircuitPython_Crickit +++ b/frozen/Adafruit_CircuitPython_Crickit @@ -1 +1 @@ -Subproject commit a37c7cc83685f2ff84a171a519207567a75d0947 +Subproject commit a1f66529437232d85dbbd3ce7d9688357966cc26 diff --git a/frozen/Adafruit_CircuitPython_DRV2605 b/frozen/Adafruit_CircuitPython_DRV2605 index ab0ffa938d..547a7d2a73 160000 --- a/frozen/Adafruit_CircuitPython_DRV2605 +++ b/frozen/Adafruit_CircuitPython_DRV2605 @@ -1 +1 @@ -Subproject commit ab0ffa938dfa7eb1fd7260353a7a4e28f55e537a +Subproject commit 547a7d2a738eeee18e511d71505a645915094395 diff --git a/frozen/Adafruit_CircuitPython_DS3231 b/frozen/Adafruit_CircuitPython_DS3231 index e6a9a0140e..fc3a6a651e 160000 --- a/frozen/Adafruit_CircuitPython_DS3231 +++ b/frozen/Adafruit_CircuitPython_DS3231 @@ -1 +1 @@ -Subproject commit e6a9a0140ed44ef5f15d8040fce35b5319c1f216 +Subproject commit fc3a6a651ee6211b02903ec0bc6808b359bf6d4b diff --git a/frozen/Adafruit_CircuitPython_Display_Shapes b/frozen/Adafruit_CircuitPython_Display_Shapes index cf2b173d0f..12beb94e47 160000 --- a/frozen/Adafruit_CircuitPython_Display_Shapes +++ b/frozen/Adafruit_CircuitPython_Display_Shapes @@ -1 +1 @@ -Subproject commit cf2b173d0fc3ac2cd961754c6adf8f614a1c7c39 +Subproject commit 12beb94e4758d6d0f4965b731b086a1bf8c3704e diff --git a/frozen/Adafruit_CircuitPython_Display_Text b/frozen/Adafruit_CircuitPython_Display_Text index 911201504a..c8bc5431f9 160000 --- a/frozen/Adafruit_CircuitPython_Display_Text +++ b/frozen/Adafruit_CircuitPython_Display_Text @@ -1 +1 @@ -Subproject commit 911201504a269dbfc49b04ca59bc54adabd4716a +Subproject commit c8bc5431f9ac20ca5b40d0760ac407368d640c4d diff --git a/frozen/Adafruit_CircuitPython_DotStar b/frozen/Adafruit_CircuitPython_DotStar index 187279a95e..67f8c35e2c 160000 --- a/frozen/Adafruit_CircuitPython_DotStar +++ b/frozen/Adafruit_CircuitPython_DotStar @@ -1 +1 @@ -Subproject commit 187279a95e5cdd634d233af59352558cea4c1227 +Subproject commit 67f8c35e2ce4a8abc3cfb24ab5029b40a64857b8 diff --git a/frozen/Adafruit_CircuitPython_FakeRequests b/frozen/Adafruit_CircuitPython_FakeRequests index 8eedf860be..bf7763ef99 160000 --- a/frozen/Adafruit_CircuitPython_FakeRequests +++ b/frozen/Adafruit_CircuitPython_FakeRequests @@ -1 +1 @@ -Subproject commit 8eedf860beca0d32219189b72ea6fc8eea7e66db +Subproject commit bf7763ef99ca00d1808a9aa47bb1d593a2cc0334 diff --git a/frozen/Adafruit_CircuitPython_FocalTouch b/frozen/Adafruit_CircuitPython_FocalTouch index 3d7d404a1c..5e4d371d21 160000 --- a/frozen/Adafruit_CircuitPython_FocalTouch +++ b/frozen/Adafruit_CircuitPython_FocalTouch @@ -1 +1 @@ -Subproject commit 3d7d404a1cafc02f6c3391b100157490132e5c5f +Subproject commit 5e4d371d210bbe00e63f83ce698f5bfa8652fa51 diff --git a/frozen/Adafruit_CircuitPython_HID b/frozen/Adafruit_CircuitPython_HID index 93c7e0ed55..9ec404f8b3 160000 --- a/frozen/Adafruit_CircuitPython_HID +++ b/frozen/Adafruit_CircuitPython_HID @@ -1 +1 @@ -Subproject commit 93c7e0ed55e7ed011908ac9a1c0f8228f0f4323b +Subproject commit 9ec404f8b318af5b4f02855311e5a00233ce29b5 diff --git a/frozen/Adafruit_CircuitPython_IRRemote b/frozen/Adafruit_CircuitPython_IRRemote index 340c62ef6c..fc377ac405 160000 --- a/frozen/Adafruit_CircuitPython_IRRemote +++ b/frozen/Adafruit_CircuitPython_IRRemote @@ -1 +1 @@ -Subproject commit 340c62ef6ce867b3924d166afc3d2a171680f799 +Subproject commit fc377ac4050c95eb8ea5eeacb8b68ef0d6152abb diff --git a/frozen/Adafruit_CircuitPython_IS31FL3731 b/frozen/Adafruit_CircuitPython_IS31FL3731 index 5433ba3760..31a6a9b69e 160000 --- a/frozen/Adafruit_CircuitPython_IS31FL3731 +++ b/frozen/Adafruit_CircuitPython_IS31FL3731 @@ -1 +1 @@ -Subproject commit 5433ba3760ca605267223de883a44cb8394f40a5 +Subproject commit 31a6a9b69e75144bdf29377b95f52213dab83e8a diff --git a/frozen/Adafruit_CircuitPython_LC709203F b/frozen/Adafruit_CircuitPython_LC709203F index 38bd02f014..02b4bacba3 160000 --- a/frozen/Adafruit_CircuitPython_LC709203F +++ b/frozen/Adafruit_CircuitPython_LC709203F @@ -1 +1 @@ -Subproject commit 38bd02f014403954ab52154e3877e502d83862dc +Subproject commit 02b4bacba30d029422e1df49be917e89f496067d diff --git a/frozen/Adafruit_CircuitPython_LIS3DH b/frozen/Adafruit_CircuitPython_LIS3DH index 240fe51935..6791d3fe75 160000 --- a/frozen/Adafruit_CircuitPython_LIS3DH +++ b/frozen/Adafruit_CircuitPython_LIS3DH @@ -1 +1 @@ -Subproject commit 240fe51935f4a9def33ef347d40b13862a60b7ac +Subproject commit 6791d3fe751239acbfc8dc293652b068f0dcc2f6 diff --git a/frozen/Adafruit_CircuitPython_LSM6DS b/frozen/Adafruit_CircuitPython_LSM6DS index d689ca77c6..691fefb264 160000 --- a/frozen/Adafruit_CircuitPython_LSM6DS +++ b/frozen/Adafruit_CircuitPython_LSM6DS @@ -1 +1 @@ -Subproject commit d689ca77c67806484037e00110c669cf55846b6e +Subproject commit 691fefb26458b872520988acf315ad72fd67798d diff --git a/frozen/Adafruit_CircuitPython_MIDI b/frozen/Adafruit_CircuitPython_MIDI index e38bf1f9cf..c572416239 160000 --- a/frozen/Adafruit_CircuitPython_MIDI +++ b/frozen/Adafruit_CircuitPython_MIDI @@ -1 +1 @@ -Subproject commit e38bf1f9cf1e8faeb7d15a1d10674fb2c0a81e72 +Subproject commit c572416239621066656c18dd88ee69ce383cfff5 diff --git a/frozen/Adafruit_CircuitPython_Motor b/frozen/Adafruit_CircuitPython_Motor index 9c3de3abce..cc5fa11ceb 160000 --- a/frozen/Adafruit_CircuitPython_Motor +++ b/frozen/Adafruit_CircuitPython_Motor @@ -1 +1 @@ -Subproject commit 9c3de3abce00b50ba936f4f8daad0a8a6bee34a6 +Subproject commit cc5fa11ceb68af5597f6a308fed5d9c8480c32a3 diff --git a/frozen/Adafruit_CircuitPython_NeoPixel b/frozen/Adafruit_CircuitPython_NeoPixel index 9516aa97e9..8211388d13 160000 --- a/frozen/Adafruit_CircuitPython_NeoPixel +++ b/frozen/Adafruit_CircuitPython_NeoPixel @@ -1 +1 @@ -Subproject commit 9516aa97e9216eac2b229fbb7dac34fa60c347c4 +Subproject commit 8211388d13f216a3933e7dc896c1fe054edc7bed diff --git a/frozen/Adafruit_CircuitPython_PortalBase b/frozen/Adafruit_CircuitPython_PortalBase index 759c5c3488..98d1d12b79 160000 --- a/frozen/Adafruit_CircuitPython_PortalBase +++ b/frozen/Adafruit_CircuitPython_PortalBase @@ -1 +1 @@ -Subproject commit 759c5c348878932adc5fcc9e4f3b3f570b43e17f +Subproject commit 98d1d12b79674e5e7722dcc31123ba990e3e83f7 diff --git a/frozen/Adafruit_CircuitPython_ProgressBar b/frozen/Adafruit_CircuitPython_ProgressBar index 74a1c26110..80501daf8f 160000 --- a/frozen/Adafruit_CircuitPython_ProgressBar +++ b/frozen/Adafruit_CircuitPython_ProgressBar @@ -1 +1 @@ -Subproject commit 74a1c261103cda43172053ff2370777255b9bf8d +Subproject commit 80501daf8f0cd7710d53f107a13821f63875a874 diff --git a/frozen/Adafruit_CircuitPython_RFM69 b/frozen/Adafruit_CircuitPython_RFM69 index af1cba8a7e..34c48e70f4 160000 --- a/frozen/Adafruit_CircuitPython_RFM69 +++ b/frozen/Adafruit_CircuitPython_RFM69 @@ -1 +1 @@ -Subproject commit af1cba8a7e4e3950fcc5367e9c55a024d9ab9f64 +Subproject commit 34c48e70f4209c363dac65d1a265ce9bb819c0a3 diff --git a/frozen/Adafruit_CircuitPython_RFM9x b/frozen/Adafruit_CircuitPython_RFM9x index c46c59e300..769bcbfe4b 160000 --- a/frozen/Adafruit_CircuitPython_RFM9x +++ b/frozen/Adafruit_CircuitPython_RFM9x @@ -1 +1 @@ -Subproject commit c46c59e3004817c708c78c59d247b02161c6bf06 +Subproject commit 769bcbfe4bc4366ab59958ca3042ded0029362ce diff --git a/frozen/Adafruit_CircuitPython_Register b/frozen/Adafruit_CircuitPython_Register index 46a49205f3..59ebc1930d 160000 --- a/frozen/Adafruit_CircuitPython_Register +++ b/frozen/Adafruit_CircuitPython_Register @@ -1 +1 @@ -Subproject commit 46a49205f3f14546273dd1267e66cad82f03986c +Subproject commit 59ebc1930d1e82b9a5a82e855077151ff6454fe2 diff --git a/frozen/Adafruit_CircuitPython_SD b/frozen/Adafruit_CircuitPython_SD index eb17bffa75..5537f45295 160000 --- a/frozen/Adafruit_CircuitPython_SD +++ b/frozen/Adafruit_CircuitPython_SD @@ -1 +1 @@ -Subproject commit eb17bffa757dc8c0a53fe9e61c45246c06418099 +Subproject commit 5537f452959b4f2d44742f24808fac7f7098c03d diff --git a/frozen/Adafruit_CircuitPython_SSD1680 b/frozen/Adafruit_CircuitPython_SSD1680 index 91b6867aca..916bf37b92 160000 --- a/frozen/Adafruit_CircuitPython_SSD1680 +++ b/frozen/Adafruit_CircuitPython_SSD1680 @@ -1 +1 @@ -Subproject commit 91b6867aca2b0511571fed14ab051d37f1f1544c +Subproject commit 916bf37b9270dfd60596a455e1405de01150397b diff --git a/frozen/Adafruit_CircuitPython_ST7789 b/frozen/Adafruit_CircuitPython_ST7789 index e23c487145..d939bbf939 160000 --- a/frozen/Adafruit_CircuitPython_ST7789 +++ b/frozen/Adafruit_CircuitPython_ST7789 @@ -1 +1 @@ -Subproject commit e23c4871456cdf0ef1bfb59d1c2f6e38b7b640ee +Subproject commit d939bbf9395a27d3200d12de333d7c78956a80a4 diff --git a/frozen/Adafruit_CircuitPython_SimpleIO b/frozen/Adafruit_CircuitPython_SimpleIO index eac33b430b..6897d6ff21 160000 --- a/frozen/Adafruit_CircuitPython_SimpleIO +++ b/frozen/Adafruit_CircuitPython_SimpleIO @@ -1 +1 @@ -Subproject commit eac33b430b0cbe1f6f583000f6b29f75bfe8507e +Subproject commit 6897d6ff21132e99111c72b2e60cf1d20223e9bb diff --git a/frozen/Adafruit_CircuitPython_SimpleMath b/frozen/Adafruit_CircuitPython_SimpleMath index dc605bb229..d85c19bf00 160000 --- a/frozen/Adafruit_CircuitPython_SimpleMath +++ b/frozen/Adafruit_CircuitPython_SimpleMath @@ -1 +1 @@ -Subproject commit dc605bb22914d77d80c5342cbb4c10f773aede95 +Subproject commit d85c19bf00e01f32382b1ef0ad9218bea4b6b234 diff --git a/frozen/Adafruit_CircuitPython_Thermistor b/frozen/Adafruit_CircuitPython_Thermistor index 43a4f15d60..16e712f385 160000 --- a/frozen/Adafruit_CircuitPython_Thermistor +++ b/frozen/Adafruit_CircuitPython_Thermistor @@ -1 +1 @@ -Subproject commit 43a4f15d604919d6e143e975a85abf7b96a4061d +Subproject commit 16e712f385526f2edbdf37394addf764cea35f29 diff --git a/frozen/Adafruit_CircuitPython_Ticks b/frozen/Adafruit_CircuitPython_Ticks index 2634ca0163..1542544d27 160000 --- a/frozen/Adafruit_CircuitPython_Ticks +++ b/frozen/Adafruit_CircuitPython_Ticks @@ -1 +1 @@ -Subproject commit 2634ca0163020bebec300fcca6e0b5afcdc655b8 +Subproject commit 1542544d2774895c4d9ef732f851b8a40796fe5c diff --git a/frozen/Adafruit_CircuitPython_UC8151D b/frozen/Adafruit_CircuitPython_UC8151D index b6d9f852f5..b9a599ae27 160000 --- a/frozen/Adafruit_CircuitPython_UC8151D +++ b/frozen/Adafruit_CircuitPython_UC8151D @@ -1 +1 @@ -Subproject commit b6d9f852f50b489615f3f357f9758d0073335334 +Subproject commit b9a599ae279f560d434206b947e3353e9c35bbea diff --git a/frozen/Adafruit_CircuitPython_Wave b/frozen/Adafruit_CircuitPython_Wave index 02b748f2e6..c4c4453f9a 160000 --- a/frozen/Adafruit_CircuitPython_Wave +++ b/frozen/Adafruit_CircuitPython_Wave @@ -1 +1 @@ -Subproject commit 02b748f2e6826dc442c842885e58b07ad10d9287 +Subproject commit c4c4453f9a7097df2683cf29341cb2d9e1167da6 diff --git a/frozen/Adafruit_CircuitPython_asyncio b/frozen/Adafruit_CircuitPython_asyncio index 596cc896e5..18a411eb87 160000 --- a/frozen/Adafruit_CircuitPython_asyncio +++ b/frozen/Adafruit_CircuitPython_asyncio @@ -1 +1 @@ -Subproject commit 596cc896e5c8815caa2a6f405560833193848149 +Subproject commit 18a411eb8749b8de94dcd9ddd0a2863f3ff17622 diff --git a/frozen/Adafruit_CircuitPython_seesaw b/frozen/Adafruit_CircuitPython_seesaw index d4ff0388f3..b317568508 160000 --- a/frozen/Adafruit_CircuitPython_seesaw +++ b/frozen/Adafruit_CircuitPython_seesaw @@ -1 +1 @@ -Subproject commit d4ff0388f3e3af2745864f2c3e5926f500673a40 +Subproject commit b317568508d67ed07f8078b9f941cf72945859fe From 8579766edea063dc681a8cac503f0af8101f569e Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 25 Jul 2023 09:35:49 -0500 Subject: [PATCH 150/241] Optimize ulab for size on samd51/same51 --- ports/atmel-samd/mpconfigport.mk | 2 ++ py/circuitpy_mpconfig.mk | 3 +++ py/py.mk | 3 +++ 3 files changed, 8 insertions(+) diff --git a/ports/atmel-samd/mpconfigport.mk b/ports/atmel-samd/mpconfigport.mk index 032e49ce36..5f4bf1e603 100644 --- a/ports/atmel-samd/mpconfigport.mk +++ b/ports/atmel-samd/mpconfigport.mk @@ -106,6 +106,7 @@ CIRCUITPY_PS2IO ?= 1 CIRCUITPY_RGBMATRIX ?= $(CIRCUITPY_FRAMEBUFFERIO) CIRCUITPY_SAMD ?= 1 CIRCUITPY_SYNTHIO_MAX_CHANNELS = 12 +CIRCUITPY_ULAB_OPTIMIZE_SIZE ?= 1 CIRCUITPY_WATCHDOG ?= 1 endif # samd51 @@ -131,6 +132,7 @@ CIRCUITPY_SAMD ?= 1 CIRCUITPY_FLOPPYIO ?= $(CIRCUITPY_FULL_BUILD) CIRCUITPY_FRAMEBUFFERIO ?= $(CIRCUITPY_FULL_BUILD) CIRCUITPY_RGBMATRIX ?= $(CIRCUITPY_FRAMEBUFFERIO) +CIRCUITPY_ULAB_OPTIMIZE_SIZE ?= 1 endif # same51 ###################################################################### diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 3e43909687..90ef13ad9b 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -559,6 +559,9 @@ CFLAGS += -DCIRCUITPY_ZLIB=$(CIRCUITPY_ZLIB) CIRCUITPY_ULAB ?= $(CIRCUITPY_FULL_BUILD) CFLAGS += -DCIRCUITPY_ULAB=$(CIRCUITPY_ULAB) +# whether to use -Os optimization on files in ulab +CIRCUITPY_ULAB_OPTIMIZE_SIZE ?= 0 + # CIRCUITPY_VIDEOCORE is handled in the broadcom tree. # Only for Broadcom chips. # Assume not a Broadcom build. diff --git a/py/py.mk b/py/py.mk index c598f44cbd..4a2d8544f1 100644 --- a/py/py.mk +++ b/py/py.mk @@ -57,6 +57,9 @@ ULAB_SRCS := $(shell find $(TOP)/extmod/ulab/code -type f -name "*.c") SRC_MOD += $(patsubst $(TOP)/%,%,$(ULAB_SRCS)) CFLAGS_MOD += -DCIRCUITPY_ULAB=1 -DMODULE_ULAB_ENABLED=1 -DULAB_HAS_USER_MODULE=0 -iquote $(TOP)/extmod/ulab/code $(BUILD)/extmod/ulab/code/%.o: CFLAGS += -Wno-missing-declarations -Wno-missing-prototypes -Wno-unused-parameter -Wno-float-equal -Wno-sign-compare -Wno-cast-align -Wno-shadow -DCIRCUITPY +ifeq ($(CIRCUITPY_ULAB_OPTIMIZE_SIZE),1) +$(BUILD)/extmod/ulab/code/%.o: CFLAGS += -Os +endif endif # py object files From adc2dab3a99f2facda156874e354b3e42fb04014 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 25 Jul 2023 09:35:55 -0500 Subject: [PATCH 151/241] disable ulab on pyb_nano_v2 --- ports/stm/boards/pyb_nano_v2/mpconfigboard.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/stm/boards/pyb_nano_v2/mpconfigboard.mk b/ports/stm/boards/pyb_nano_v2/mpconfigboard.mk index c8b548c50f..1ab3c91a08 100644 --- a/ports/stm/boards/pyb_nano_v2/mpconfigboard.mk +++ b/ports/stm/boards/pyb_nano_v2/mpconfigboard.mk @@ -17,3 +17,4 @@ LD_FILE = boards/STM32F411_fs.ld CIRCUITPY_AUDIOCORE = 0 CIRCUITPY_AUDIOPWMIO = 0 CIRCUITPY_BLEIO_HCI = 0 +CIRCUITPY_ULAB = 0 From 509ddf2f890dffc106d0685b8ba3f95184088524 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 25 Jul 2023 10:48:35 -0500 Subject: [PATCH 152/241] samd: disable some modules so updated ulab fits * floppyio: disable on itsybitsy m4, metro m4 express & airlift, pybadge, pygamer, wio terminal * gifio: disable on itsybitsy m4 express * framebufferio: disable on treills m4 express, wio terminal * terminalio: disable on metro m4 express/airlift for ja/ko/ru --- .../boards/itsybitsy_m4_express/mpconfigboard.mk | 2 ++ .../boards/metro_m4_airlift_lite/mpconfigboard.mk | 11 +++++++++++ .../boards/metro_m4_express/mpconfigboard.mk | 11 +++++++++++ ports/atmel-samd/boards/pybadge/mpconfigboard.mk | 1 + ports/atmel-samd/boards/pygamer/mpconfigboard.mk | 1 + .../boards/seeeduino_wio_terminal/mpconfigboard.mk | 2 ++ .../boards/trellis_m4_express/mpconfigboard.mk | 2 ++ 7 files changed, 30 insertions(+) diff --git a/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.mk b/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.mk index 7a45ef21e9..d805d49aff 100644 --- a/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.mk +++ b/ports/atmel-samd/boards/itsybitsy_m4_express/mpconfigboard.mk @@ -12,5 +12,7 @@ LONGINT_IMPL = MPZ # No I2S on SAMD51G CIRCUITPY_AUDIOBUSIO = 0 +CIRCUITPY_FLOPPYIO = 0 +CIRCUITPY_GIFIO = 0 CIRCUITPY_BITBANG_APA102 = 1 diff --git a/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.mk b/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.mk index ed1cd2455c..065c48d064 100644 --- a/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.mk +++ b/ports/atmel-samd/boards/metro_m4_airlift_lite/mpconfigboard.mk @@ -11,4 +11,15 @@ EXTERNAL_FLASH_DEVICES = "S25FL116K, S25FL216K, GD25Q16C" LONGINT_IMPL = MPZ CIRCUITPY__EVE = 1 +CIRCUITPY_FLOPPYIO = 0 CIRCUITPY_SYNTHIO = 0 + +# We don't have room for the fonts for terminalio for certain languages, +# so turn off terminalio, and if it's off and displayio is on, +# force a clean build. +# Note that we cannot test $(CIRCUITPY_DISPLAYIO) directly with an +# ifeq, because it's not set yet. +ifneq (,$(filter $(TRANSLATION),ja ko ru)) +CIRCUITPY_TERMINALIO = 0 +RELEASE_NEEDS_CLEAN_BUILD = $(CIRCUITPY_DISPLAYIO) +endif diff --git a/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.mk b/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.mk index 50780cff07..61bc46ea4b 100644 --- a/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.mk +++ b/ports/atmel-samd/boards/metro_m4_express/mpconfigboard.mk @@ -11,4 +11,15 @@ EXTERNAL_FLASH_DEVICES = "S25FL116K, S25FL216K, GD25Q16C" LONGINT_IMPL = MPZ CIRCUITPY__EVE = 1 +CIRCUITPY_FLOPPYIO = 0 CIRCUITPY_SYNTHIO = 0 + +# We don't have room for the fonts for terminalio for certain languages, +# so turn off terminalio, and if it's off and displayio is on, +# force a clean build. +# Note that we cannot test $(CIRCUITPY_DISPLAYIO) directly with an +# ifeq, because it's not set yet. +ifneq (,$(filter $(TRANSLATION),ja ko ru)) +CIRCUITPY_TERMINALIO = 0 +RELEASE_NEEDS_CLEAN_BUILD = $(CIRCUITPY_DISPLAYIO) +endif diff --git a/ports/atmel-samd/boards/pybadge/mpconfigboard.mk b/ports/atmel-samd/boards/pybadge/mpconfigboard.mk index fd002609b1..baaea5ca63 100644 --- a/ports/atmel-samd/boards/pybadge/mpconfigboard.mk +++ b/ports/atmel-samd/boards/pybadge/mpconfigboard.mk @@ -11,6 +11,7 @@ EXTERNAL_FLASH_DEVICES = GD25Q16C LONGINT_IMPL = MPZ CIRCUITPY_AESIO = 0 +CIRCUITPY_FLOPPYIO = 0 CIRCUITPY_FRAMEBUFFERIO = 0 CIRCUITPY_GIFIO = 0 CIRCUITPY_KEYPAD = 1 diff --git a/ports/atmel-samd/boards/pygamer/mpconfigboard.mk b/ports/atmel-samd/boards/pygamer/mpconfigboard.mk index f6112b4110..080592bcd3 100644 --- a/ports/atmel-samd/boards/pygamer/mpconfigboard.mk +++ b/ports/atmel-samd/boards/pygamer/mpconfigboard.mk @@ -11,6 +11,7 @@ EXTERNAL_FLASH_DEVICES = "GD25Q64C,W25Q64JVxQ" LONGINT_IMPL = MPZ CIRCUITPY_AESIO = 0 +CIRCUITPY_FLOPPYIO = 0 CIRCUITPY_FRAMEBUFFERIO = 0 CIRCUITPY_GIFIO = 0 CIRCUITPY_KEYPAD = 1 diff --git a/ports/atmel-samd/boards/seeeduino_wio_terminal/mpconfigboard.mk b/ports/atmel-samd/boards/seeeduino_wio_terminal/mpconfigboard.mk index 3441e601b8..dd8afd51f6 100644 --- a/ports/atmel-samd/boards/seeeduino_wio_terminal/mpconfigboard.mk +++ b/ports/atmel-samd/boards/seeeduino_wio_terminal/mpconfigboard.mk @@ -9,4 +9,6 @@ CHIP_FAMILY = samd51 QSPI_FLASH_FILESYSTEM = 1 EXTERNAL_FLASH_DEVICES = "W25Q32JVxQ" LONGINT_IMPL = MPZ +CIRCUITPY_FLOPPYIO = 0 +CIRCUITPY_FRAMEBUFFERIO = 0 CIRCUITPY_SYNTHIO = 0 diff --git a/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.mk b/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.mk index 81df26b0c6..687138a1f7 100644 --- a/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.mk +++ b/ports/atmel-samd/boards/trellis_m4_express/mpconfigboard.mk @@ -12,5 +12,7 @@ LONGINT_IMPL = MPZ # No I2S on SAMD51G CIRCUITPY_AUDIOBUSIO = 0 +CIRCUITPY_FLOPPYIO = 0 +CIRCUITPY_FRAMEBUFFERIO = 0 CIRCUITPY_BITBANG_APA102 = 1 From 6a5e4e665257a13d65559c57001fc11d9cea16f8 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 25 Jul 2023 11:19:16 -0500 Subject: [PATCH 153/241] turn off terminalio in a few more builds for space --- .../atmel-samd/boards/feather_m4_can/mpconfigboard.mk | 10 ++++++++++ .../boards/feather_m4_express/mpconfigboard.mk | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/ports/atmel-samd/boards/feather_m4_can/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m4_can/mpconfigboard.mk index 8c9779e5f9..b1ea31f867 100644 --- a/ports/atmel-samd/boards/feather_m4_can/mpconfigboard.mk +++ b/ports/atmel-samd/boards/feather_m4_can/mpconfigboard.mk @@ -15,3 +15,13 @@ CIRCUITPY_CANIO = 1 CIRCUITPY_SYNTHIO = 0 CIRCUITPY_LTO_PARTITION = one + +# We don't have room for the fonts for terminalio for certain languages, +# so turn off terminalio, and if it's off and displayio is on, +# force a clean build. +# Note that we cannot test $(CIRCUITPY_DISPLAYIO) directly with an +# ifeq, because it's not set yet. +ifneq (,$(filter $(TRANSLATION),ja ko ru)) +CIRCUITPY_TERMINALIO = 0 +RELEASE_NEEDS_CLEAN_BUILD = $(CIRCUITPY_DISPLAYIO) +endif diff --git a/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.mk index 9a5008be85..c763fa44d5 100644 --- a/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.mk +++ b/ports/atmel-samd/boards/feather_m4_express/mpconfigboard.mk @@ -12,3 +12,13 @@ LONGINT_IMPL = MPZ CIRCUITPY__EVE = 1 CIRCUITPY_SYNTHIO = 0 + +# We don't have room for the fonts for terminalio for certain languages, +# so turn off terminalio, and if it's off and displayio is on, +# force a clean build. +# Note that we cannot test $(CIRCUITPY_DISPLAYIO) directly with an +# ifeq, because it's not set yet. +ifneq (,$(filter $(TRANSLATION),ja ko ru)) +CIRCUITPY_TERMINALIO = 0 +RELEASE_NEEDS_CLEAN_BUILD = $(CIRCUITPY_DISPLAYIO) +endif From 58d6c3ac9d18371851270692c9beeb6f6cdd06b4 Mon Sep 17 00:00:00 2001 From: Vladimir Smitka Date: Tue, 25 Jul 2023 19:25:27 +0200 Subject: [PATCH 154/241] Formatting --- .../boards/pajenicko_picopad/mpconfigboard.mk | 2 +- .../boards/pajenicko_picopad/pins.c | 27 ++++++++++--------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.mk b/ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.mk index 2eeea9723f..65ad4bba91 100644 --- a/ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.mk +++ b/ports/raspberrypi/boards/pajenicko_picopad/mpconfigboard.mk @@ -31,4 +31,4 @@ FROZEN_MPY_DIRS += $(TOP)/frozen/circuitpython-stage/picosystem CFLAGS += -DCYW43_PIN_WL_HOST_WAKE=24 -DCYW43_PIN_WL_REG_ON=23 -DCYW43_WL_GPIO_COUNT=3 -DCYW43_WL_GPIO_LED_PIN=0 # Must be accompanied by a linker script change -CFLAGS += -DCIRCUITPY_FIRMWARE_SIZE='(1536 * 1024)' \ No newline at end of file +CFLAGS += -DCIRCUITPY_FIRMWARE_SIZE='(1536 * 1024)' diff --git a/ports/raspberrypi/boards/pajenicko_picopad/pins.c b/ports/raspberrypi/boards/pajenicko_picopad/pins.c index de59502d69..da1fe3b9dc 100644 --- a/ports/raspberrypi/boards/pajenicko_picopad/pins.c +++ b/ports/raspberrypi/boards/pajenicko_picopad/pins.c @@ -3,7 +3,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS - //Default RPi Pico Pins + // Default RPi Pico Pins {MP_ROM_QSTR(MP_QSTR_GP0), MP_ROM_PTR(&pin_GPIO0)}, {MP_ROM_QSTR(MP_QSTR_GP1), MP_ROM_PTR(&pin_GPIO1)}, {MP_ROM_QSTR(MP_QSTR_GP2), MP_ROM_PTR(&pin_GPIO2)}, @@ -31,7 +31,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27)}, {MP_ROM_QSTR(MP_QSTR_GP28), MP_ROM_PTR(&pin_GPIO28)}, - //PicoPad external connector + // PicoPad external connector /* ┌──────┐ GND -│1 2│- GND @@ -40,7 +40,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { D4/A1 -│7 8│- AGND D3/TX/SDA -│9 10│- D0/A0 D2/RX/SCL -│11 12│- D1 - └──────┘ + └──────┘ */ {MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO26)}, @@ -54,7 +54,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO27)}, {MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_GPIO28)}, - //PicoPad LCD + // PicoPad LCD {MP_ROM_QSTR(MP_QSTR_LCD_RESET), MP_ROM_PTR(&pin_GPIO20)}, {MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO21)}, {MP_ROM_QSTR(MP_QSTR_LCD_SCLK), MP_ROM_PTR(&pin_GPIO18)}, @@ -62,13 +62,13 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO17)}, {MP_ROM_QSTR(MP_QSTR_LCD_BL), MP_ROM_PTR(&pin_GPIO16)}, - //PicoPad Audio + // PicoPad Audio {MP_ROM_QSTR(MP_QSTR_AUDIO), MP_ROM_PTR(&pin_GPIO15)}, - //PicoPad USR LED (yellow) + // PicoPad USR LED (yellow) {MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO22)}, - //PicoPad Buttons + // PicoPad Buttons {MP_ROM_QSTR(MP_QSTR_SW_X), MP_ROM_PTR(&pin_GPIO9)}, {MP_ROM_QSTR(MP_QSTR_SW_Y), MP_ROM_PTR(&pin_GPIO8)}, {MP_ROM_QSTR(MP_QSTR_SW_A), MP_ROM_PTR(&pin_GPIO7)}, @@ -79,24 +79,24 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_SW_LEFT), MP_ROM_PTR(&pin_GPIO3)}, {MP_ROM_QSTR(MP_QSTR_SW_UP), MP_ROM_PTR(&pin_GPIO4)}, - //PicoPad SD Card + // PicoPad SD Card {MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO13)}, {MP_ROM_QSTR(MP_QSTR_SD_SCK), MP_ROM_PTR(&pin_GPIO10)}, {MP_ROM_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_GPIO11)}, {MP_ROM_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_GPIO12)}, - //PicoPad Battery + // PicoPad Battery {MP_ROM_QSTR(MP_QSTR_BAT_SENSE), MP_ROM_PTR(&pin_GPIO29)}, - //PicoPad UART0 + // PicoPad UART0 {MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO0)}, {MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO1)}, - //PicoPad I2C0 + // PicoPad I2C0 {MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO0)}, {MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO1)}, - //PicoPad I2C1 + // PicoPad I2C1 {MP_ROM_QSTR(MP_QSTR_SDA_ALT), MP_ROM_PTR(&pin_GPIO14)}, {MP_ROM_QSTR(MP_QSTR_SCL_ALT), MP_ROM_PTR(&pin_GPIO27)}, @@ -108,6 +108,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_SMPS_MODE), MP_ROM_PTR(&pin_CYW1)}, {MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_CYW0)}, {MP_ROM_QSTR(MP_QSTR_VBUS_SENSE), MP_ROM_PTR(&pin_CYW2)}, - {MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)}}; + {MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)} +}; MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table); From 318191433d0d01519db869ee72a536ebc0801cf6 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 25 Jul 2023 14:03:47 -0500 Subject: [PATCH 155/241] disable gifio on feather_m4_can --- ports/atmel-samd/boards/feather_m4_can/mpconfigboard.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/atmel-samd/boards/feather_m4_can/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m4_can/mpconfigboard.mk index b1ea31f867..b68a2c989b 100644 --- a/ports/atmel-samd/boards/feather_m4_can/mpconfigboard.mk +++ b/ports/atmel-samd/boards/feather_m4_can/mpconfigboard.mk @@ -13,6 +13,7 @@ LONGINT_IMPL = MPZ CIRCUITPY__EVE = 1 CIRCUITPY_CANIO = 1 CIRCUITPY_SYNTHIO = 0 +CIRCUITPY_GIFIO = 0 CIRCUITPY_LTO_PARTITION = one From 767b7a0506772c231b5b4dfd3138240da057b54c Mon Sep 17 00:00:00 2001 From: ladyada Date: Tue, 25 Jul 2023 16:12:53 -0400 Subject: [PATCH 156/241] compiling --- .../boards/adafruit_esp32s3_camera/board.c | 2 +- .../boards/adafruit_esp32s3_camera/mpconfigboard.h | 4 +--- .../adafruit_esp32s3_camera/mpconfigboard.mk | 1 + .../boards/adafruit_esp32s3_camera/pins.c | 14 +++++++------- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/ports/espressif/boards/adafruit_esp32s3_camera/board.c b/ports/espressif/boards/adafruit_esp32s3_camera/board.c index 4799a07b79..0ec1046901 100644 --- a/ports/espressif/boards/adafruit_esp32s3_camera/board.c +++ b/ports/espressif/boards/adafruit_esp32s3_camera/board.c @@ -84,7 +84,7 @@ void board_init(void) { MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command display_init_sequence, sizeof(display_init_sequence), - &pin_GPIO41, // backlight pin + NULL, // backlight pin NO_BRIGHTNESS_COMMAND, 1.0f, // brightness false, // single_byte_bounds diff --git a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h index 8c0c9cdaae..daa9bc92e5 100644 --- a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h +++ b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h @@ -29,11 +29,9 @@ #define MICROPY_HW_BOARD_NAME "Adafruit Camera" #define MICROPY_HW_MCU_NAME "ESP32S3" -#define MICROPY_HW_NEOPIXEL (&pin_GPIO21) +#define MICROPY_HW_NEOPIXEL (&pin_GPIO1) #define MICROPY_HW_NEOPIXEL_COUNT (1) -#define MICROPY_HW_LED_STATUS (&pin_GPIO1) - #define DEFAULT_I2C_BUS_SDA (&pin_GPIO33) #define DEFAULT_I2C_BUS_SCL (&pin_GPIO34) diff --git a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk index df7e62511a..c60cc8b563 100644 --- a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk +++ b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk @@ -10,3 +10,4 @@ CIRCUITPY_ESP_FLASH_FREQ = 40m CIRCUITPY_ESP_FLASH_SIZE = 4MB CIRCUITPY_ESPCAMERA = 1 +CIRCUITPY_ULAB = 0 diff --git a/ports/espressif/boards/adafruit_esp32s3_camera/pins.c b/ports/espressif/boards/adafruit_esp32s3_camera/pins.c index 5de2d800aa..743788bb7f 100644 --- a/ports/espressif/boards/adafruit_esp32s3_camera/pins.c +++ b/ports/espressif/boards/adafruit_esp32s3_camera/pins.c @@ -24,21 +24,21 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO35) }, { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO36) }, { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO37) }, - { MP_ROM_QSTR(MP_QSTR_TFT_BACKLIGHT), MP_ROM_PTR(&pin_GPIO41) }, - { MP_ROM_QSTR(MP_QSTR_TFT_DC), MP_ROM_PTR(&pin_GPIO40) }, - { MP_ROM_QSTR(MP_QSTR_TFT_CS), MP_ROM_PTR(&pin_GPIO39) }, { MP_ROM_QSTR(MP_QSTR_TFT_RESET), MP_ROM_PTR(&pin_GPIO38) }, + { MP_ROM_QSTR(MP_QSTR_TFT_CS), MP_ROM_PTR(&pin_GPIO39) }, + { MP_ROM_QSTR(MP_QSTR_TFT_DC), MP_ROM_PTR(&pin_GPIO40) }, - { MP_ROM_QSTR(MP_QSTR_CARD_CS), MP_ROM_PTR(&pin_GPIO2) }, + { MP_ROM_QSTR(MP_QSTR_CARD_CS), MP_ROM_PTR(&pin_GPIO48) }, { MP_ROM_QSTR(MP_QSTR_IRQ), MP_ROM_PTR(&pin_GPIO3) }, - { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO21) }, + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO1) }, - { MP_ROM_QSTR(MP_QSTR_SPEAKER), MP_ROM_PTR(&pin_GPIO45) }, + { MP_ROM_QSTR(MP_QSTR_SPEAKER), MP_ROM_PTR(&pin_GPIO41) }, { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_GPIO0) }, - { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO1) }, + + { MP_ROM_QSTR(MP_QSTR_BATTERY_MONITOR), MP_ROM_PTR(&pin_GPIO4) }, { MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_GPIO17) }, { MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_GPIO18) }, From fd60cccb069db6a159ccec45f564465bcf513cfd Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 25 Jul 2023 16:01:11 -0500 Subject: [PATCH 157/241] Re-enable ulab at the expense of some other modules .. and gate audiomixer based on audiocore (should be no net change) .. and get rid of now-redundant enables in the espressif mpconfigport --- .../boards/adafruit_esp32s3_camera/mpconfigboard.mk | 9 ++++++++- ports/espressif/mpconfigport.mk | 2 -- py/circuitpy_mpconfig.mk | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk index c60cc8b563..fc22fd2cd7 100644 --- a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk +++ b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk @@ -9,5 +9,12 @@ CIRCUITPY_ESP_FLASH_MODE = dio CIRCUITPY_ESP_FLASH_FREQ = 40m CIRCUITPY_ESP_FLASH_SIZE = 4MB +CIRCUITPY_AUDIOBUSIO = 0 +CIRCUITPY_CANIO = 0 CIRCUITPY_ESPCAMERA = 1 -CIRCUITPY_ULAB = 0 +CIRCUITPY_FRAMEBUFFERIO = 0 +CIRCUITPY_KEYPAD = 0 +CIRCUITPY_ONEWIREIO = 0 +CIRCUITPY_PARALLELDISPLAY = 0 +CIRCUITPY_RGBMATRIX = 0 +CIRCUITPY_ROTARYIO = 0 diff --git a/ports/espressif/mpconfigport.mk b/ports/espressif/mpconfigport.mk index 63cea3d0a8..7c6e5610d9 100644 --- a/ports/espressif/mpconfigport.mk +++ b/ports/espressif/mpconfigport.mk @@ -16,9 +16,7 @@ CIRCUITPY_ANALOGBUFIO ?= 1 CIRCUITPY_AUDIOBUSIO ?= 1 CIRCUITPY_AUDIOBUSIO_I2SOUT ?= 1 CIRCUITPY_AUDIOBUSIO_PDMIN ?= 0 -CIRCUITPY_AUDIOCORE ?= 1 CIRCUITPY_AUDIOIO ?= 0 -CIRCUITPY_AUDIOMIXER ?= 1 CIRCUITPY_AUDIOMP3 ?= 0 CIRCUITPY_BLEIO ?= 1 CIRCUITPY_BLEIO_HCI = 0 diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 210c402c77..1c4b48f75c 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -104,7 +104,7 @@ endif endif CFLAGS += -DCIRCUITPY_AUDIOCORE=$(CIRCUITPY_AUDIOCORE) -CIRCUITPY_AUDIOMIXER ?= $(CIRCUITPY_AUDIOIO) +CIRCUITPY_AUDIOMIXER ?= $(CIRCUITPY_AUDIOCORE) CFLAGS += -DCIRCUITPY_AUDIOMIXER=$(CIRCUITPY_AUDIOMIXER) ifndef CIRCUITPY_AUDIOCORE_DEBUG From 6030d87025c5db315ac74d29bc80c015e65492da Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Tue, 25 Jul 2023 16:30:21 -0700 Subject: [PATCH 158/241] Change to octal ram --- ports/espressif/boards/adafruit_metro_esp32s3/sdkconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/espressif/boards/adafruit_metro_esp32s3/sdkconfig b/ports/espressif/boards/adafruit_metro_esp32s3/sdkconfig index 2d819ad274..2d72ed5391 100644 --- a/ports/espressif/boards/adafruit_metro_esp32s3/sdkconfig +++ b/ports/espressif/boards/adafruit_metro_esp32s3/sdkconfig @@ -8,8 +8,8 @@ CONFIG_ESP32S3_SPIRAM_SUPPORT=y # # SPI RAM config # -CONFIG_SPIRAM_MODE_QUAD=y -# CONFIG_SPIRAM_MODE_OCT is not set +# CONFIG_SPIRAM_MODE_QUAD is not set +CONFIG_SPIRAM_MODE_OCT=y CONFIG_SPIRAM_TYPE_AUTO=y # CONFIG_SPIRAM_TYPE_ESPPSRAM16 is not set # CONFIG_SPIRAM_TYPE_ESPPSRAM32 is not set From 9a18524c3098ac44f723f5b918377b48dbfe0d11 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 25 Jul 2023 18:25:59 -0500 Subject: [PATCH 159/241] simplify circuitpy_mpconfig with enable-if-any, -all and make corresponding simplifications in shared-bindings-matrix, but directly using the final defines from CFLAGS instead of the status quo. The net changes are to disable audiocore & audiomixer on some espressif devices that have no audio output at all. Other than that, the shared-bindings-matrix seems to be identical. --- docs/shared_bindings_matrix.py | 45 +++++----------------------- ports/espressif/mpconfigport.mk | 1 - py/circuitpy_mpconfig.mk | 52 ++++++++++++--------------------- 3 files changed, 27 insertions(+), 71 deletions(-) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index f7efb47385..75f5e37337 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -148,50 +148,21 @@ def get_board_mapping(): return boards -def read_mpconfig(): - """Open 'circuitpy_mpconfig.mk' and return the contents.""" - configs = [] - cpy_mpcfg = get_circuitpython_root_dir() / "py" / "circuitpy_mpconfig.mk" - with open(cpy_mpcfg) as mpconfig: - configs = mpconfig.read() - - return configs - - def build_module_map(): """Establish the base of the JSON file, based on the contents from - `configs`. Base will contain module names, if they're part of - the `FULL_BUILD`, or their default value (0, 1, or a list of - modules that determine default [see audiocore, audiomixer, etc.]). - + `configs`. Base contains the module name and the controlling C macro name. """ base = dict() modules = get_bindings() - configs = read_mpconfig() - full_build = False for module in modules: full_name = module if module in ADDITIONAL_MODULES: search_identifier = ADDITIONAL_MODULES[module] else: search_identifier = "CIRCUITPY_" + module.lstrip("_").upper() - re_pattern = f"{re.escape(search_identifier)}\s*\??=\s*(.+)" - find_config = re.findall(re_pattern, configs) - if not find_config: - continue - find_config = ", ".join([x.strip("$()") for x in find_config]) - - full_build = int("CIRCUITPY_FULL_BUILD" in find_config) - if not full_build: - default_val = find_config - else: - default_val = "None" base[module] = { "name": full_name, - "full_build": str(full_build), - "default_value": default_val, - "excluded": {}, "key": search_identifier, } @@ -199,15 +170,14 @@ def build_module_map(): def get_settings_from_makefile(port_dir, board_name): - """Invoke make in a mode which prints the database, then parse it for - settings. + """Invoke make to print the value of critical build settings This means that the effect of all Makefile directives is taken into account, without having to re-encode the logic that sets them in this script, something that has proved error-prone """ contents = subprocess.run( - ["make", "-C", port_dir, f"BOARD={board_name}", "-qp", "print-CC"], + ["make", "-C", port_dir, "-f", "Makefile", f"BOARD={board_name}", "print-CFLAGS", "print-CIRCUITPY_BUILD_EXTENSIONS", "print-FROZEN_MPY_DIRS"], encoding="utf-8", errors="replace", stdout=subprocess.PIPE, @@ -223,9 +193,10 @@ def get_settings_from_makefile(port_dir, board_name): settings = {} for line in contents.stdout.split("\n"): - # Handle both = and := definitions. - m = re.match(r"^([A-Z][A-Z0-9_]*) :?= (.*)$", line) - if m: + if line.startswith('CFLAGS ='): + for m in re.findall('-D([A-Z][A-Z0-9_]*)=(\d+)', line): + settings[m[0]] = m[1] + elif m := re.match(r"^([A-Z][A-Z0-9_]*) = (.*)$", line): settings[m.group(1)] = m.group(2) return settings @@ -280,7 +251,7 @@ def frozen_modules_from_dirs(frozen_mpy_dirs, withurl): """ frozen_modules = [] for frozen_path in filter(lambda x: x, frozen_mpy_dirs.split(" ")): - source_dir = get_circuitpython_root_dir() / frozen_path[7:] + source_dir = get_circuitpython_root_dir() / frozen_path[6:] url_repository = get_repository_url(source_dir) for sub in source_dir.glob("*"): if sub.name in FROZEN_EXCLUDES: diff --git a/ports/espressif/mpconfigport.mk b/ports/espressif/mpconfigport.mk index 7c6e5610d9..982e3bde36 100644 --- a/ports/espressif/mpconfigport.mk +++ b/ports/espressif/mpconfigport.mk @@ -14,7 +14,6 @@ CIRCUITPY_FULL_BUILD ?= 1 CIRCUITPY_ALARM ?= 1 CIRCUITPY_ANALOGBUFIO ?= 1 CIRCUITPY_AUDIOBUSIO ?= 1 -CIRCUITPY_AUDIOBUSIO_I2SOUT ?= 1 CIRCUITPY_AUDIOBUSIO_PDMIN ?= 0 CIRCUITPY_AUDIOIO ?= 0 CIRCUITPY_AUDIOMP3 ?= 0 diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 1c4b48f75c..780dd1d854 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -26,6 +26,18 @@ # Boards default to all modules enabled (with exceptions) # Manually disable by overriding in #mpconfigboard.mk +enable-if-any=$(lastword $(sort $(1) 0)) +enable-if-all=$(firstword $(sort $(1) 1)) + +#$(info enable-if-any 0 1 -> $(call enable-if-any,0 1)) +#$(info enable-if-any 1 0 -> $(call enable-if-any,1 0)) +#$(info enable-if-any 1 1 -> $(call enable-if-any,1 1)) +#$(info enable-if-any 0 0 -> $(call enable-if-any,0 0)) +#$(info enable-if-all 0 1 -> $(call enable-if-all,0 1)) +#$(info enable-if-all 1 0 -> $(call enable-if-all,1 0)) +#$(info enable-if-all 1 1 -> $(call enable-if-all,1 1)) +#$(info enable-if-all 0 0 -> $(call enable-if-all,0 0)) + # Always on. Present here to help generate documentation module support matrix for "builtins". CIRCUITPY = 1 CFLAGS += -DCIRCUITPY=$(CIRCUITPY) @@ -95,13 +107,7 @@ CFLAGS += -DCIRCUITPY_AUDIOIO=$(CIRCUITPY_AUDIOIO) CIRCUITPY_AUDIOPWMIO ?= 0 CFLAGS += -DCIRCUITPY_AUDIOPWMIO=$(CIRCUITPY_AUDIOPWMIO) -ifndef CIRCUITPY_AUDIOCORE -ifeq ($(CIRCUITPY_AUDIOPWMIO),1) -CIRCUITPY_AUDIOCORE = $(CIRCUITPY_AUDIOPWMIO) -else -CIRCUITPY_AUDIOCORE = $(CIRCUITPY_AUDIOIO) -endif -endif +CIRCUITPY_AUDIOCORE ?= $(call enable-if-any,$(CIRCUITPY_AUDIOPWMIO) $(CIRCUITPY_AUDIOIO) $(CIRCUITPY_AUDIOBUSIO)) CFLAGS += -DCIRCUITPY_AUDIOCORE=$(CIRCUITPY_AUDIOCORE) CIRCUITPY_AUDIOMIXER ?= $(CIRCUITPY_AUDIOCORE) @@ -112,13 +118,7 @@ CIRCUITPY_AUDIOCORE_DEBUG ?= 0 endif CFLAGS += -DCIRCUITPY_AUDIOCORE_DEBUG=$(CIRCUITPY_AUDIOCORE_DEBUG) -ifndef CIRCUITPY_AUDIOMP3 -ifeq ($(CIRCUITPY_FULL_BUILD),1) -CIRCUITPY_AUDIOMP3 = $(CIRCUITPY_AUDIOCORE) -else -CIRCUITPY_AUDIOMP3 = 0 -endif -endif +CIRCUITPY_AUDIOMP3 ?= $(call enable-if-all,$(CIRCUITPY_FULL_BUILD) $(CIRCUITPY_AUDIOCORE)) CFLAGS += -DCIRCUITPY_AUDIOMP3=$(CIRCUITPY_AUDIOMP3) CIRCUITPY_BINASCII ?= $(CIRCUITPY_FULL_BUILD) @@ -200,15 +200,9 @@ endif CFLAGS += -DCIRCUITPY_PARALLELDISPLAY=$(CIRCUITPY_PARALLELDISPLAY) # bitmaptools and framebufferio rely on displayio -ifeq ($(CIRCUITPY_DISPLAYIO),1) -CIRCUITPY_BITMAPTOOLS ?= $(CIRCUITPY_FULL_BUILD) -CIRCUITPY_FRAMEBUFFERIO ?= $(CIRCUITPY_FULL_BUILD) -CIRCUITPY_VECTORIO ?= 1 -else -CIRCUITPY_BITMAPTOOLS ?= 0 -CIRCUITPY_FRAMEBUFFERIO ?= 0 -CIRCUITPY_VECTORIO ?= 0 -endif +CIRCUITPY_BITMAPTOOLS ?= $(call enable-if-all,$(CIRCUITPY_FULL_BUILD) $(CIRCUITPY_DISPLAYIO)) +CIRCUITPY_FRAMEBUFFERIO ?= $(call enable-if-all,$(CIRCUITPY_FULL_BUILD) $(CIRCUITPY_DISPLAYIO)) +CIRCUITPY_VECTORIO ?= $(CIRCUITPY_DISPLAYIO) CFLAGS += -DCIRCUITPY_BITMAPTOOLS=$(CIRCUITPY_BITMAPTOOLS) CFLAGS += -DCIRCUITPY_FRAMEBUFFERIO=$(CIRCUITPY_FRAMEBUFFERIO) CFLAGS += -DCIRCUITPY_VECTORIO=$(CIRCUITPY_VECTORIO) @@ -255,12 +249,7 @@ CFLAGS += -DCIRCUITPY_FUTURE=$(CIRCUITPY_FUTURE) CIRCUITPY_GETPASS ?= $(CIRCUITPY_FULL_BUILD) CFLAGS += -DCIRCUITPY_GETPASS=$(CIRCUITPY_GETPASS) -ifeq ($(CIRCUITPY_DISPLAYIO),1) -#CIRCUITPY_GIFIO ?= $(CIRCUITPY_CAMERA) -CIRCUITPY_GIFIO ?= 1 -else -CIRCUITPY_GIFIO ?= 0 -endif +CIRCUITPY_GIFIO ?= $(call enable-if-any,$(CIRCUITPY_DISPLAYIO) $(CIRCUITPY_CAMERA)) CFLAGS += -DCIRCUITPY_GIFIO=$(CIRCUITPY_GIFIO) CIRCUITPY_GNSS ?= 0 @@ -468,10 +457,7 @@ CFLAGS += -DCIRCUITPY_SYS=$(CIRCUITPY_SYS) CIRCUITPY_TERMINALIO ?= $(CIRCUITPY_DISPLAYIO) CFLAGS += -DCIRCUITPY_TERMINALIO=$(CIRCUITPY_TERMINALIO) -ifeq ($(CIRCUITPY_DISPLAYIO),1) -CIRCUITPY_FONTIO ?= $(CIRCUITPY_TERMINALIO) -endif -CFLAGS += -DCIRCUITPY_FONTIO=$(CIRCUITPY_FONTIO) +CIRCUITPY_FONTIO ?= $(call enable-if-all,$(CIRCUITPY_DISPLAYIO) $(CIRCUITPY_TERMINALIO)) CIRCUITPY_TIME ?= 1 CFLAGS += -DCIRCUITPY_TIME=$(CIRCUITPY_TIME) From d83b8db67875749a7373e17704d3f6d8fbc9d3f8 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 25 Jul 2023 21:34:57 -0500 Subject: [PATCH 160/241] restore fontio define --- py/circuitpy_mpconfig.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 780dd1d854..724151c4bd 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -458,6 +458,7 @@ CIRCUITPY_TERMINALIO ?= $(CIRCUITPY_DISPLAYIO) CFLAGS += -DCIRCUITPY_TERMINALIO=$(CIRCUITPY_TERMINALIO) CIRCUITPY_FONTIO ?= $(call enable-if-all,$(CIRCUITPY_DISPLAYIO) $(CIRCUITPY_TERMINALIO)) +CFLAGS += -DCIRCUITPY_FONTIO=$(CIRCUITPY_FONTIO) CIRCUITPY_TIME ?= 1 CFLAGS += -DCIRCUITPY_TIME=$(CIRCUITPY_TIME) From f503b37b2b14b0a5b1a2a16a1155f7dfe252726b Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 26 Jul 2023 08:32:25 -0500 Subject: [PATCH 161/241] espressif: allow setting FLASH_SDKCONFIG at board level --- ports/espressif/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ports/espressif/Makefile b/ports/espressif/Makefile index 10ac738cac..151c31c373 100644 --- a/ports/espressif/Makefile +++ b/ports/espressif/Makefile @@ -330,13 +330,13 @@ $(BUILD)/esp-idf: TARGET_SDKCONFIG = esp-idf-config/sdkconfig-$(IDF_TARGET).defaults ifeq ($(CIRCUITPY_ESP_FLASH_SIZE), 2MB) - FLASH_SDKCONFIG = esp-idf-config/sdkconfig-$(CIRCUITPY_ESP_FLASH_SIZE)-no-ota-no-uf2.defaults + FLASH_SDKCONFIG ?= esp-idf-config/sdkconfig-$(CIRCUITPY_ESP_FLASH_SIZE)-no-ota-no-uf2.defaults else UF2_BOOTLOADER ?= $(CIRCUITPY_USB) ifeq ($(UF2_BOOTLOADER), 1) - FLASH_SDKCONFIG = esp-idf-config/sdkconfig-$(CIRCUITPY_ESP_FLASH_SIZE).defaults + FLASH_SDKCONFIG ?= esp-idf-config/sdkconfig-$(CIRCUITPY_ESP_FLASH_SIZE).defaults else - FLASH_SDKCONFIG = esp-idf-config/sdkconfig-$(CIRCUITPY_ESP_FLASH_SIZE)-no-uf2.defaults + FLASH_SDKCONFIG ?= esp-idf-config/sdkconfig-$(CIRCUITPY_ESP_FLASH_SIZE)-no-uf2.defaults endif endif From 9edd8957a1e33cca610419ffbfadb36a8e2e6daf Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 26 Jul 2023 08:38:30 -0500 Subject: [PATCH 162/241] Add a "4MB without OTA" partition scheme This is needed on the camera board, because we have a lot of code. --- .../esp-idf-config/partitions-4MB-no-ota.csv | 7 +++++++ .../sdkconfig-4MB-no-ota.defaults | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 ports/espressif/esp-idf-config/partitions-4MB-no-ota.csv create mode 100644 ports/espressif/esp-idf-config/sdkconfig-4MB-no-ota.defaults diff --git a/ports/espressif/esp-idf-config/partitions-4MB-no-ota.csv b/ports/espressif/esp-idf-config/partitions-4MB-no-ota.csv new file mode 100644 index 0000000000..24a0695dc9 --- /dev/null +++ b/ports/espressif/esp-idf-config/partitions-4MB-no-ota.csv @@ -0,0 +1,7 @@ +# Name, Type, SubType, Offset, Size +# bootloader, app, boot, 0x1000/0x0, 28/32K +# partition_table, data, table, 0x8000, 4K +nvs, data, nvs, 0x9000, 28K +ota_0, app, ota_0, 0x10000, 2112K +uf2, app, factory, 0x220000, 256K +user_fs, data, fat, 0x260000, 1664K diff --git a/ports/espressif/esp-idf-config/sdkconfig-4MB-no-ota.defaults b/ports/espressif/esp-idf-config/sdkconfig-4MB-no-ota.defaults new file mode 100644 index 0000000000..36899aeda9 --- /dev/null +++ b/ports/espressif/esp-idf-config/sdkconfig-4MB-no-ota.defaults @@ -0,0 +1,18 @@ +# +# Serial flasher config +# +# CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set +# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE="4MB" +CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y +# end of Serial flasher config + +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="esp-idf-config/partitions-4MB-no-ota.csv" +# +# Partition Table +# +CONFIG_PARTITION_TABLE_FILENAME="esp-idf-config/partitions-4MB-no-ota.csv" +# end of Partition Table From c516870f89ffa82b33e52ade0e96baff5e31cc85 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 26 Jul 2023 08:38:59 -0500 Subject: [PATCH 163/241] switch camera to use the no-ota partition scheme this gives us a comfortable few hundred kB flash space left for the app 1398912 bytes used, 763776 bytes free in flash firmware space out of 2162688 bytes (2112.0kB). --- .../boards/adafruit_esp32s3_camera/mpconfigboard.mk | 1 + .../boards/adafruit_esp32s3_camera/sdkconfig | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk index fc22fd2cd7..6455e68a90 100644 --- a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk +++ b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk @@ -8,6 +8,7 @@ IDF_TARGET = esp32s3 CIRCUITPY_ESP_FLASH_MODE = dio CIRCUITPY_ESP_FLASH_FREQ = 40m CIRCUITPY_ESP_FLASH_SIZE = 4MB +FLASH_SDKCONFIG = esp-idf-config/sdkconfig-4MB-no-ota.defaults CIRCUITPY_AUDIOBUSIO = 0 CIRCUITPY_CANIO = 0 diff --git a/ports/espressif/boards/adafruit_esp32s3_camera/sdkconfig b/ports/espressif/boards/adafruit_esp32s3_camera/sdkconfig index 02056b1348..cf6a6def7c 100644 --- a/ports/espressif/boards/adafruit_esp32s3_camera/sdkconfig +++ b/ports/espressif/boards/adafruit_esp32s3_camera/sdkconfig @@ -47,4 +47,16 @@ CONFIG_SPIRAM_MEMTEST=y CONFIG_LWIP_LOCAL_HOSTNAME="espressif-esp32s3" # end of LWIP +# CONFIG_OV7670_SUPPORT is not set +# CONFIG_NT99141_SUPPORT is not set +CONFIG_OV3360_SUPPORT=n +# CONFIG_OV2640_SUPPORT is not set +CONFIG_OV5640_SUPPORT=y +# CONFIG_GC2145_SUPPORT is not set +# CONFIG_GC032A_SUPPORT is not set +# CONFIG_GC0308_SUPPORT is not set +# CONFIG_BF3005_SUPPORT is not set +# CONFIG_BF20A6_SUPPORT is not set +# CONFIG_SC101IOT_SUPPORT is not set +# CONFIG_SC030IOT_SUPPORT is not set # end of Component config From c026704fd29b760f7189654aaf20beaf6260a242 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 26 Jul 2023 08:54:02 -0500 Subject: [PATCH 164/241] gifio does require displayio --- py/circuitpy_mpconfig.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 724151c4bd..47025d564c 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -249,7 +249,7 @@ CFLAGS += -DCIRCUITPY_FUTURE=$(CIRCUITPY_FUTURE) CIRCUITPY_GETPASS ?= $(CIRCUITPY_FULL_BUILD) CFLAGS += -DCIRCUITPY_GETPASS=$(CIRCUITPY_GETPASS) -CIRCUITPY_GIFIO ?= $(call enable-if-any,$(CIRCUITPY_DISPLAYIO) $(CIRCUITPY_CAMERA)) +CIRCUITPY_GIFIO ?= $(CIRCUITPY_DISPLAYIO) CFLAGS += -DCIRCUITPY_GIFIO=$(CIRCUITPY_GIFIO) CIRCUITPY_GNSS ?= 0 From 46d7771152abca30dfee095cd72bc3ebb6a26f32 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 26 Jul 2023 09:41:10 -0500 Subject: [PATCH 165/241] tinyuf2 adopted the partition scheme called "1ota" .. which irritated our partition table parser in build_memory_info, so make it work again. --- .../boards/adafruit_esp32s3_camera/mpconfigboard.mk | 2 +- ports/espressif/esp-idf-config/partitions-4MB-1ota.csv | 10 ++++++++++ .../espressif/esp-idf-config/partitions-4MB-no-ota.csv | 7 ------- ...4MB-no-ota.defaults => sdkconfig-4MB-1ota.defaults} | 4 ++-- ports/espressif/tools/build_memory_info.py | 4 +++- 5 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 ports/espressif/esp-idf-config/partitions-4MB-1ota.csv delete mode 100644 ports/espressif/esp-idf-config/partitions-4MB-no-ota.csv rename ports/espressif/esp-idf-config/{sdkconfig-4MB-no-ota.defaults => sdkconfig-4MB-1ota.defaults} (82%) diff --git a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk index 6455e68a90..6b94c979dc 100644 --- a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk +++ b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.mk @@ -8,7 +8,7 @@ IDF_TARGET = esp32s3 CIRCUITPY_ESP_FLASH_MODE = dio CIRCUITPY_ESP_FLASH_FREQ = 40m CIRCUITPY_ESP_FLASH_SIZE = 4MB -FLASH_SDKCONFIG = esp-idf-config/sdkconfig-4MB-no-ota.defaults +FLASH_SDKCONFIG = esp-idf-config/sdkconfig-4MB-1ota.defaults CIRCUITPY_AUDIOBUSIO = 0 CIRCUITPY_CANIO = 0 diff --git a/ports/espressif/esp-idf-config/partitions-4MB-1ota.csv b/ports/espressif/esp-idf-config/partitions-4MB-1ota.csv new file mode 100644 index 0000000000..ab7fa8669d --- /dev/null +++ b/ports/espressif/esp-idf-config/partitions-4MB-1ota.csv @@ -0,0 +1,10 @@ +# ESP-IDF Partition Table +# Name, Type, SubType, Offset, Size, Flags +# bootloader.bin,, 0x1000, 32K +# partition table, 0x8000, 4K + +nvs, data, nvs, 0x9000, 20K, +otadata, data, ota, 0xe000, 8K, +ota_0, app, ota_0, 0x10000, 2816K, +uf2, app, factory,0x2d0000, 256K, +ffat, data, fat, 0x310000, 960K, diff --git a/ports/espressif/esp-idf-config/partitions-4MB-no-ota.csv b/ports/espressif/esp-idf-config/partitions-4MB-no-ota.csv deleted file mode 100644 index 24a0695dc9..0000000000 --- a/ports/espressif/esp-idf-config/partitions-4MB-no-ota.csv +++ /dev/null @@ -1,7 +0,0 @@ -# Name, Type, SubType, Offset, Size -# bootloader, app, boot, 0x1000/0x0, 28/32K -# partition_table, data, table, 0x8000, 4K -nvs, data, nvs, 0x9000, 28K -ota_0, app, ota_0, 0x10000, 2112K -uf2, app, factory, 0x220000, 256K -user_fs, data, fat, 0x260000, 1664K diff --git a/ports/espressif/esp-idf-config/sdkconfig-4MB-no-ota.defaults b/ports/espressif/esp-idf-config/sdkconfig-4MB-1ota.defaults similarity index 82% rename from ports/espressif/esp-idf-config/sdkconfig-4MB-no-ota.defaults rename to ports/espressif/esp-idf-config/sdkconfig-4MB-1ota.defaults index 36899aeda9..5677b79418 100644 --- a/ports/espressif/esp-idf-config/sdkconfig-4MB-no-ota.defaults +++ b/ports/espressif/esp-idf-config/sdkconfig-4MB-1ota.defaults @@ -10,9 +10,9 @@ CONFIG_ESPTOOLPY_FLASHSIZE="4MB" CONFIG_ESPTOOLPY_FLASHSIZE_DETECT=y # end of Serial flasher config -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="esp-idf-config/partitions-4MB-no-ota.csv" +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="esp-idf-config/partitions-4MB-1ota.csv" # # Partition Table # -CONFIG_PARTITION_TABLE_FILENAME="esp-idf-config/partitions-4MB-no-ota.csv" +CONFIG_PARTITION_TABLE_FILENAME="esp-idf-config/partitions-4MB-1ota.csv" # end of Partition Table diff --git a/ports/espressif/tools/build_memory_info.py b/ports/espressif/tools/build_memory_info.py index a11bef82bc..bbcd3d2df7 100644 --- a/ports/espressif/tools/build_memory_info.py +++ b/ports/espressif/tools/build_memory_info.py @@ -73,7 +73,9 @@ with open(sys.argv[2], "r") as f: ota = None app = None for partition in csv.reader(f): - if partition[0][0] == "#": + if not partition: # empty row + continue + if partition[0].startswith("#"): continue subtype = partition[2].strip() if subtype == "factory": From 245bbdfd80c76995a10b4ef703c8277b546d2f91 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 26 Jul 2023 17:54:52 +0200 Subject: [PATCH 166/241] 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 | 40 ++++++++++++++++++++++++++++++++++++++-- locale/cs.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/de_DE.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/el.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/en_GB.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/es.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/fil.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/fr.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/hi.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/it_IT.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/ja.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/ko.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/nl.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/pl.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/pt_BR.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/ru.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/sv.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/tr.po | 40 ++++++++++++++++++++++++++++++++++++++-- locale/zh_Latn_pinyin.po | 40 ++++++++++++++++++++++++++++++++++++++-- 19 files changed, 722 insertions(+), 38 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 65084356f1..483c5f48ac 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -2793,6 +2793,10 @@ msgstr "" msgid "cannot create instance" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "" @@ -3250,6 +3254,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "inline assembler harus sebuah fungsi" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3578,6 +3590,10 @@ msgstr "" msgid "native yield" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3676,6 +3692,10 @@ msgstr "" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3787,8 +3807,8 @@ msgstr "" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3825,10 +3845,26 @@ msgstr "" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/cs.po b/locale/cs.po index 501cfed1c4..0ffa07aed8 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -2780,6 +2780,10 @@ msgstr "" msgid "cannot create instance" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "" @@ -3237,6 +3241,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3565,6 +3577,10 @@ msgstr "" msgid "native yield" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3663,6 +3679,10 @@ msgstr "" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3773,8 +3793,8 @@ msgstr "" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3811,10 +3831,26 @@ msgstr "" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/de_DE.po b/locale/de_DE.po index 16c48fa6b6..609437e439 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -2845,6 +2845,10 @@ msgstr "Kann '%q' Instanzen nicht erstellen" msgid "cannot create instance" msgstr "Kann Instanz nicht erstellen" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "Name %q kann nicht importiert werden" @@ -3310,6 +3314,14 @@ msgstr "Länge von initial_value ist falsch" msgid "inline assembler must be a function" msgstr "inline assembler muss eine function sein" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "das Eingabeargument muss ein Integer, Tupel oder eine Liste sein" @@ -3644,6 +3656,10 @@ msgstr "native Methode zu groß" msgid "native yield" msgstr "natives yield" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3744,6 +3760,10 @@ msgstr "Nicht genügend Argumente für die Formatzeichenfolge" msgid "not implemented for complex dtype" msgstr "nicht implementiert für komplexe dtype" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "Die Anzahl der Punkte muss mindestens 2 betragen" @@ -3856,8 +3876,8 @@ msgstr "" msgid "opcode" msgstr "Opcode" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "Operanden konnten nicht zusammen gesendet werden" @@ -3896,10 +3916,26 @@ msgstr "" msgid "out array is too small" msgstr "Ausgabe-Array ist zu klein" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "Ausgabe muss ein floatdichtes Array sein" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "Außerhalb des Bereichs des Ziels" diff --git a/locale/el.po b/locale/el.po index d8b55956e8..57fd874dd6 100644 --- a/locale/el.po +++ b/locale/el.po @@ -2794,6 +2794,10 @@ msgstr "" msgid "cannot create instance" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "" @@ -3251,6 +3255,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3579,6 +3591,10 @@ msgstr "" msgid "native yield" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3677,6 +3693,10 @@ msgstr "" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3787,8 +3807,8 @@ msgstr "" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3825,10 +3845,26 @@ msgstr "" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/en_GB.po b/locale/en_GB.po index 0984565599..e524cd27af 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -2805,6 +2805,10 @@ msgstr "can't create '%q' instances" msgid "cannot create instance" msgstr "can't create instance" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "can't import name %q" @@ -3265,6 +3269,14 @@ msgstr "initial_value length is wrong" msgid "inline assembler must be a function" msgstr "inline assembler must be a function" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "input argument must be an integer, a tuple, or a list" @@ -3593,6 +3605,10 @@ msgstr "native method too big" msgid "native yield" msgstr "native yield" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3691,6 +3707,10 @@ msgstr "not enough arguments for format string" msgid "not implemented for complex dtype" msgstr "not implemented for complex dtype" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "number of points must be at least 2" @@ -3801,8 +3821,8 @@ msgstr "only slices with step=1 (aka None) are supported" msgid "opcode" msgstr "opcode" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "operands could not be broadcast together" @@ -3839,10 +3859,26 @@ msgstr "ord() expected a character, but string of length %d found" msgid "out array is too small" msgstr "out array is too small" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "out must be a float dense array" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "out of range of target" diff --git a/locale/es.po b/locale/es.po index 931c391e50..92af54c327 100644 --- a/locale/es.po +++ b/locale/es.po @@ -2851,6 +2851,10 @@ msgstr "no se pueden crear '%q' instancias" msgid "cannot create instance" msgstr "no se puede crear instancia" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "no se puede importar name '%q'" @@ -3312,6 +3316,14 @@ msgstr "el tamaño de initial_value es incorrecto" msgid "inline assembler must be a function" msgstr "ensamblador en línea debe ser una función" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "argumento de entrada debe ser un entero, una tupla o una lista" @@ -3644,6 +3656,10 @@ msgstr "método nativo muy grande" msgid "native yield" msgstr "yield nativo" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3745,6 +3761,10 @@ msgstr "no suficientes argumentos para format string" msgid "not implemented for complex dtype" msgstr "no esta implementado para complex dtype" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "el número de puntos debe ser al menos 2" @@ -3855,8 +3875,8 @@ msgstr "solo se admiten segmentos con step=1 (alias None)" msgid "opcode" msgstr "código de operación" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "los operandos no se pueden transmitir juntos" @@ -3893,10 +3913,26 @@ msgstr "ord() espera un carácter, pero encontró un string de longitud %d" msgid "out array is too small" msgstr "La matriz de salida es demasiado pequeña" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "la matriz de salida debe ser densa de números float" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "fuera de rango del objetivo" diff --git a/locale/fil.po b/locale/fil.po index bc3f3bc1e6..aff40a5bb7 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -2790,6 +2790,10 @@ msgstr "hindi magawa '%q' instances" msgid "cannot create instance" msgstr "hindi magawa ang instance" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "hindi ma-import ang name %q" @@ -3252,6 +3256,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "inline assembler ay dapat na function" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3584,6 +3596,10 @@ msgstr "" msgid "native yield" msgstr "native yield" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3682,6 +3698,10 @@ msgstr "kulang sa arguments para sa format string" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3793,8 +3813,8 @@ msgstr "ang mga slices lamang na may hakbang = 1 (aka None) ang sinusuportahan" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3831,10 +3851,26 @@ msgstr "ord() umaasa ng character pero string ng %d haba ang nakita" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/fr.po b/locale/fr.po index a466a12359..18c0d68845 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -2865,6 +2865,10 @@ msgstr "ne peut pas créer une instance de '%q'" msgid "cannot create instance" msgstr "ne peut pas créer une instance" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "ne peut pas importer le nom %q" @@ -3331,6 +3335,14 @@ msgstr "la longueur de initial_value est incorrecte" msgid "inline assembler must be a function" msgstr "l'assembleur doit être une fonction" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "Paramètre entrant doit être un chiffre entier, un tuple, ou une liste" @@ -3665,6 +3677,10 @@ msgstr "la méthode native est trop longue" msgid "native yield" msgstr "'yield' natif" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3765,6 +3781,10 @@ msgstr "pas assez d'arguments pour la chaîne de format" msgid "not implemented for complex dtype" msgstr "n'est pas implémenté pour les dtype complexes" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "le nombre de points doit être d'au moins 2" @@ -3876,8 +3896,8 @@ msgstr "seules les tranches avec 'step=1' (cad None) sont supportées" msgid "opcode" msgstr "opcode" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "les opérandes ne pouvaient pas être diffusés ensemble" @@ -3915,10 +3935,26 @@ msgstr "" msgid "out array is too small" msgstr "matrice de sortie est trop petite" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "la matrice sortante doit être de type float" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "dépassement des bornes de target" diff --git a/locale/hi.po b/locale/hi.po index f684a9d9b8..7469814d21 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -2765,6 +2765,10 @@ msgstr "" msgid "cannot create instance" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "" @@ -3222,6 +3226,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3550,6 +3562,10 @@ msgstr "" msgid "native yield" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3648,6 +3664,10 @@ msgstr "" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3758,8 +3778,8 @@ msgstr "" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3796,10 +3816,26 @@ msgstr "" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/it_IT.po b/locale/it_IT.po index ba9b3dc227..6a4e37a0ef 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -2794,6 +2794,10 @@ msgstr "creare '%q' istanze" msgid "cannot create instance" msgstr "impossibile creare un istanza" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "impossibile imporate il nome %q" @@ -3257,6 +3261,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "inline assembler deve essere una funzione" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3590,6 +3602,10 @@ msgstr "" msgid "native yield" msgstr "yield nativo" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3690,6 +3706,10 @@ msgstr "argomenti non sufficienti per la stringa di formattazione" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3801,8 +3821,8 @@ msgstr "solo slice con step=1 (aka None) sono supportate" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3840,10 +3860,26 @@ msgstr "" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/ja.po b/locale/ja.po index 0d7498178c..32b5569072 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -2782,6 +2782,10 @@ msgstr "" msgid "cannot create instance" msgstr "インスタンスを作れません" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "" @@ -3244,6 +3248,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "インラインアセンブラは関数でなければなりません" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3572,6 +3584,10 @@ msgstr "" msgid "native yield" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3670,6 +3686,10 @@ msgstr "書式化文字列への引数が足りません" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3780,8 +3800,8 @@ msgstr "" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3818,10 +3838,26 @@ msgstr "ord()は1文字を要求しますが、長さ %d の文字列が与え msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/ko.po b/locale/ko.po index 2fc43e592c..0dd12d03e5 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -2769,6 +2769,10 @@ msgstr "" msgid "cannot create instance" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "" @@ -3226,6 +3230,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3554,6 +3566,10 @@ msgstr "" msgid "native yield" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3652,6 +3668,10 @@ msgstr "" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3762,8 +3782,8 @@ msgstr "" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3800,10 +3820,26 @@ msgstr "" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/nl.po b/locale/nl.po index 719efe6914..7d115254be 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -2793,6 +2793,10 @@ msgstr "kan geen instanties van '%q' creëren" msgid "cannot create instance" msgstr "kan geen instantie creëren" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "kan naam %q niet importeren" @@ -3253,6 +3257,14 @@ msgstr "lengte van initial_value is onjuist" msgid "inline assembler must be a function" msgstr "inline assembler moet een functie zijn" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3584,6 +3596,10 @@ msgstr "" msgid "native yield" msgstr "natuurlijke opbrengst (native yield)" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3682,6 +3698,10 @@ msgstr "niet genoeg argumenten om string te formatteren" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "aantal punten moet minimaal 2 zijn" @@ -3792,8 +3812,8 @@ msgstr "alleen segmenten met step=1 (ook wel None) worden ondersteund" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "operands konden niet samen verzonden worden" @@ -3830,10 +3850,26 @@ msgstr "ord() verwacht een teken (char) maar vond een string van lengte %d" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "buiten bereik van doel" diff --git a/locale/pl.po b/locale/pl.po index 35cc808126..b97a3ba2a8 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -2773,6 +2773,10 @@ msgstr "nie można tworzyć instancji '%q'" msgid "cannot create instance" msgstr "nie można stworzyć instancji" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "nie można zaimportować nazwy %q" @@ -3231,6 +3235,14 @@ msgstr "długość initial_value jest nieprawidłowa" msgid "inline assembler must be a function" msgstr "wtrącony asembler musi być funkcją" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3559,6 +3571,10 @@ msgstr "" msgid "native yield" msgstr "natywny yield" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3657,6 +3673,10 @@ msgstr "nie dość argumentów przy formatowaniu" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "liczba punktów musi wynosić co najmniej 2" @@ -3767,8 +3787,8 @@ msgstr "tylko fragmenty ze step=1 (lub None) są wspierane" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "operandy nie mogły być rozgłaszane razem" @@ -3805,10 +3825,26 @@ msgstr "ord() oczekuje znaku, a jest łańcuch od długości %d" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index d44d309ad6..13f70534df 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -2846,6 +2846,10 @@ msgstr "não é possível criar instâncias '%q'" msgid "cannot create instance" msgstr "não é possível criar instância" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "não pode importar nome %q" @@ -3310,6 +3314,14 @@ msgstr "O comprimento do initial_value está errado" msgid "inline assembler must be a function" msgstr "o assembler em linha deve ser uma função" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3644,6 +3656,10 @@ msgstr "o método nativo é grande demais" msgid "native yield" msgstr "rendimento nativo" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3742,6 +3758,10 @@ msgstr "argumentos insuficientes para o formato da string" msgid "not implemented for complex dtype" msgstr "não foi implementado para dtype complexo" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "a quantidade dos pontos deve ser pelo menos 2" @@ -3853,8 +3873,8 @@ msgstr "" msgid "opcode" msgstr "opcode" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "os operandos não puderam ser transmitidos juntos" @@ -3893,10 +3913,26 @@ msgstr "" msgid "out array is too small" msgstr "a matriz externa é muito pequena" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "deve ser uma matriz densa flutuante" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "fora do alcance do alvo" diff --git a/locale/ru.po b/locale/ru.po index 8dd6627ad5..12040cc439 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -2828,6 +2828,10 @@ msgstr "" msgid "cannot create instance" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "" @@ -3285,6 +3289,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3613,6 +3625,10 @@ msgstr "" msgid "native yield" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3711,6 +3727,10 @@ msgstr "" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3821,8 +3841,8 @@ msgstr "" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3859,10 +3879,26 @@ msgstr "" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/sv.po b/locale/sv.po index 28e2ee490e..fd8c63a0a6 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -2817,6 +2817,10 @@ msgstr "kan inte skapa instanser av '%q'" msgid "cannot create instance" msgstr "kan inte skapa instans" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "kan inte importera namn %q" @@ -3279,6 +3283,14 @@ msgstr "initial_value-längd är fel" msgid "inline assembler must be a function" msgstr "inline assembler måste vara en funktion" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "indataargument måste vara integer, en tuple eller list" @@ -3610,6 +3622,10 @@ msgstr "inbyggd metod för stor" msgid "native yield" msgstr "native yield" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3708,6 +3724,10 @@ msgstr "inte tillräckligt med argument för formatsträng" msgid "not implemented for complex dtype" msgstr "inte implementerat för complex dtype" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "antal punkter måste vara minst 2" @@ -3818,8 +3838,8 @@ msgstr "endast segment med steg=1 (aka Ingen) stöds" msgid "opcode" msgstr "opkod" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "operander kan inte sändas tillsammans" @@ -3856,10 +3876,26 @@ msgstr "ord() förväntade sig ett tecken, men en sträng med längden %d hittad msgid "out array is too small" msgstr "matrisen för out är för liten" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "out måste vara en float dense array" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "utanför räckvidd för target" diff --git a/locale/tr.po b/locale/tr.po index 71ba460288..851fef7f94 100644 --- a/locale/tr.po +++ b/locale/tr.po @@ -2787,6 +2787,10 @@ msgstr "" msgid "cannot create instance" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "" @@ -3244,6 +3248,14 @@ msgstr "" msgid "inline assembler must be a function" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "" @@ -3572,6 +3584,10 @@ msgstr "" msgid "native yield" msgstr "" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3670,6 +3686,10 @@ msgstr "" msgid "not implemented for complex dtype" msgstr "" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "" @@ -3780,8 +3800,8 @@ msgstr "" msgid "opcode" msgstr "" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "" @@ -3818,10 +3838,26 @@ msgstr "" msgid "out array is too small" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 9bcb0640c2..3853fdc0d7 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -2821,6 +2821,10 @@ msgstr "wúfǎ chuàngjiàn '%q' ' shílì" msgid "cannot create instance" msgstr "wúfǎ chuàngjiàn shílì" +#: extmod/ulab/code/ndarray.c +msgid "cannot delete array elements" +msgstr "" + #: py/runtime.c msgid "cannot import name %q" msgstr "wúfǎ dǎorù míngchēng %q" @@ -3285,6 +3289,14 @@ msgstr "Initial_value chángdù cuòwù" msgid "inline assembler must be a function" msgstr "nèi lián jíhé bìxū shì yīgè hánshù" +#: extmod/ulab/code/numpy/vector.c +msgid "input and output dimensions differ" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "input and output shapes differ" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" msgstr "shū rù cān shù bì xū shì zhěng shù, yuán zǔ huò liè biǎo" @@ -3614,6 +3626,10 @@ msgstr "yuán shēng fāng fǎ tài dà" msgid "native yield" msgstr "yuán chǎn" +#: extmod/ulab/code/ndarray.c +msgid "ndarray length overflows" +msgstr "" + #: py/runtime.c #, c-format msgid "need more than %d values to unpack" @@ -3712,6 +3728,10 @@ msgstr "géshì zìfú chuàn cān shǔ bùzú" msgid "not implemented for complex dtype" msgstr "wèi zhēn duì fù zá de dtype shí xiàn" +#: extmod/ulab/code/numpy/bitwise.c +msgid "not supported for input types" +msgstr "" + #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" msgstr "diǎnshù bìxū zhìshǎo wèi 2" @@ -3822,8 +3842,8 @@ msgstr "jǐn zhīchí bù zhǎng = 1(jí wú) de qiēpiàn" msgid "opcode" msgstr "cāo zuò dài mǎ" -#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/compare.c -#: extmod/ulab/code/numpy/vector.c +#: extmod/ulab/code/ndarray.c extmod/ulab/code/numpy/bitwise.c +#: extmod/ulab/code/numpy/compare.c extmod/ulab/code/numpy/vector.c msgid "operands could not be broadcast together" msgstr "cāozuò shǔ bùnéng yīqǐ guǎngbò" @@ -3860,10 +3880,26 @@ msgstr "ord() yùqí zìfú, dàn chángdù zìfú chuàn %d" msgid "out array is too small" msgstr "chū zhèn liè tài xiǎo" +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for complex dtype" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out keyword is not supported for function" +msgstr "" + #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" msgstr "chū bì xū shì yí gè fú dòng mì jí zhèn liè" +#: extmod/ulab/code/numpy/vector.c +msgid "out must be an ndarray" +msgstr "" + +#: extmod/ulab/code/numpy/vector.c +msgid "out must be of float dtype" +msgstr "" + #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" msgstr "mù biāo fàn wéi wài" From 020e4d2e0c1904fc54b1d0c8ce3f7fb09f3d169a Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 26 Jul 2023 12:55:44 -0500 Subject: [PATCH 167/241] update camera submodule --- ports/espressif/esp32-camera | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/esp32-camera b/ports/espressif/esp32-camera index 4ff7f348d0..2cd2a6d69f 160000 --- a/ports/espressif/esp32-camera +++ b/ports/espressif/esp32-camera @@ -1 +1 @@ -Subproject commit 4ff7f348d0713ea8eca022f73a059b0fe0934531 +Subproject commit 2cd2a6d69faaba9ebb6105814a50039d82e2f899 From e45a61f57e505d80f4828f568ebb78239851487e Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 27 Jul 2023 09:15:58 -0700 Subject: [PATCH 168/241] Align fatfs window buffer for tinyusb Also, update tinyusb. --- lib/oofatfs/ff.h | 2 +- lib/oofatfs/ffconf.h | 6 ++++++ lib/tinyusb | 2 +- locale/circuitpython.pot | 9 +++++++-- ports/raspberrypi/lib/Pico-PIO-USB | 2 +- py/circuitpy_mpconfig.h | 6 ++++++ shared-module/usb/core/Device.c | 21 +++++++++++++++++---- 7 files changed, 39 insertions(+), 9 deletions(-) diff --git a/lib/oofatfs/ff.h b/lib/oofatfs/ff.h index b133d770db..d77ddf5761 100644 --- a/lib/oofatfs/ff.h +++ b/lib/oofatfs/ff.h @@ -162,7 +162,7 @@ typedef struct { DWORD bitbase; /* Allocation bitmap base sector */ #endif DWORD winsect; /* Current sector appearing in the win[] */ - BYTE win[FF_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg) */ + __attribute__((aligned(FF_WINDOW_ALIGNMENT),)) BYTE win[FF_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg). */ } FATFS; diff --git a/lib/oofatfs/ffconf.h b/lib/oofatfs/ffconf.h index 52ff6d0a7a..2967244118 100644 --- a/lib/oofatfs/ffconf.h +++ b/lib/oofatfs/ffconf.h @@ -267,6 +267,12 @@ / for variable sector size mode and disk_ioctl() function needs to implement / GET_SECTOR_SIZE command. */ +#ifdef MICROPY_FATFS_WINDOW_ALIGNMENT +#define FF_WINDOW_ALIGNMENT (MICROPY_FATFS_WINDOW_ALIGNMENT) +#else +#define FF_WINDOW_ALIGNMENT 1 +#endif + #define FF_USE_TRIM 0 /* This option switches support for ATA-TRIM. (0:Disable or 1:Enable) diff --git a/lib/tinyusb b/lib/tinyusb index 6c7c9f2ef5..db59494b1b 160000 --- a/lib/tinyusb +++ b/lib/tinyusb @@ -1 +1 @@ -Subproject commit 6c7c9f2ef5a80d5a6879e9c3558162188c6cf889 +Subproject commit db59494b1b24f7dad26c5c66c85a195a2cf09466 diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 9ebb85d13f..892b1368c4 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -1748,6 +1748,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "" @@ -1825,7 +1829,8 @@ msgstr "" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "" @@ -3985,7 +3990,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/ports/raspberrypi/lib/Pico-PIO-USB b/ports/raspberrypi/lib/Pico-PIO-USB index 5a7aa8d4e7..d00a10a8c4 160000 --- a/ports/raspberrypi/lib/Pico-PIO-USB +++ b/ports/raspberrypi/lib/Pico-PIO-USB @@ -1 +1 @@ -Subproject commit 5a7aa8d4e78f9a50e4fb9defcf3488b3fc44aff1 +Subproject commit d00a10a8c425d0d40f81b87169102944b01f3bb3 diff --git a/py/circuitpy_mpconfig.h b/py/circuitpy_mpconfig.h index e1909a064f..7e858212a5 100644 --- a/py/circuitpy_mpconfig.h +++ b/py/circuitpy_mpconfig.h @@ -611,6 +611,12 @@ void background_callback_run_all(void); #define CIRCUITPY_DIGITALIO_HAVE_INVALID_DRIVE_MODE (0) #endif +// Align the internal sector buffer. Useful when it is passed into TinyUSB for +// loads. +#ifndef MICROPY_FATFS_WINDOW_ALIGNMENT +#define MICROPY_FATFS_WINDOW_ALIGNMENT CIRCUITPY_TUSB_MEM_ALIGN +#endif + #define FF_FS_CASE_INSENSITIVE_COMPARISON_ASCII_ONLY (1) #define FF_FS_MAKE_VOLID (1) diff --git a/shared-module/usb/core/Device.c b/shared-module/usb/core/Device.c index 67756341ec..faed49e383 100644 --- a/shared-module/usb/core/Device.c +++ b/shared-module/usb/core/Device.c @@ -49,6 +49,7 @@ void tuh_umount_cb(uint8_t dev_addr) { } STATIC xfer_result_t _xfer_result; +STATIC size_t _actual_len; bool common_hal_usb_core_device_construct(usb_core_device_obj_t *self, uint8_t device_number) { if (device_number == 0 || device_number > CFG_TUH_DEVICE_MAX + CFG_TUH_HUB) { return false; @@ -78,6 +79,9 @@ uint16_t common_hal_usb_core_device_get_idProduct(usb_core_device_obj_t *self) { STATIC void _transfer_done_cb(tuh_xfer_t *xfer) { // Store the result so we stop waiting for the transfer. _xfer_result = xfer->result; + // The passed in xfer is not the original one we passed in, so we need to + // copy any info out that we want (like actual_len.) + _actual_len = xfer->actual_len; } STATIC bool _wait_for_callback(void) { @@ -159,11 +163,14 @@ STATIC size_t _xfer(tuh_xfer_t *xfer, mp_int_t timeout) { } xfer_result_t result = _xfer_result; _xfer_result = 0xff; - if (result == XFER_RESULT_STALLED || result == 0xff) { + if (result == XFER_RESULT_STALLED) { + mp_raise_usb_core_USBError(translate("Pipe error")); + } + if (result == 0xff) { mp_raise_usb_core_USBTimeoutError(); } if (result == XFER_RESULT_SUCCESS) { - return xfer->actual_len; + return _actual_len; } return 0; @@ -192,7 +199,10 @@ STATIC bool _open_endpoint(usb_core_device_obj_t *self, mp_int_t endpoint) { } tusb_desc_configuration_t *desc_cfg = (tusb_desc_configuration_t *)desc_buf; - uint8_t const *desc_end = ((uint8_t const *)desc_cfg) + tu_le16toh(desc_cfg->wTotalLength); + uint32_t total_length = tu_le16toh(desc_cfg->wTotalLength); + // Cap to the buffer size we requested. + total_length = MIN(total_length, sizeof(desc_buf)); + uint8_t const *desc_end = ((uint8_t const *)desc_cfg) + total_length; uint8_t const *p_desc = tu_desc_next(desc_cfg); // parse each interfaces @@ -281,7 +291,10 @@ mp_int_t common_hal_usb_core_device_ctrl_transfer(usb_core_device_obj_t *self, } xfer_result_t result = _xfer_result; _xfer_result = 0xff; - if (result == XFER_RESULT_STALLED || result == 0xff) { + if (result == XFER_RESULT_STALLED) { + mp_raise_usb_core_USBError(translate("Pipe error")); + } + if (result == 0xff) { mp_raise_usb_core_USBTimeoutError(); } if (result == XFER_RESULT_SUCCESS) { From d6e47fd76fac42cacf9575c8b3d5a1a956d1e0b6 Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Wed, 26 Jul 2023 16:09:47 +0000 Subject: [PATCH 169/241] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (995 of 995 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/pt_BR/ --- locale/pt_BR.po | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 13f70534df..af480bd9aa 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-13 00:51+0000\n" +"PO-Revision-Date: 2023-07-27 17:07+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -2848,7 +2848,7 @@ msgstr "não é possível criar instância" #: extmod/ulab/code/ndarray.c msgid "cannot delete array elements" -msgstr "" +msgstr "não é possível excluir os elementos da matriz" #: py/runtime.c msgid "cannot import name %q" @@ -3316,11 +3316,11 @@ msgstr "o assembler em linha deve ser uma função" #: extmod/ulab/code/numpy/vector.c msgid "input and output dimensions differ" -msgstr "" +msgstr "as dimensões da entrada e da saída diferem" #: extmod/ulab/code/numpy/vector.c msgid "input and output shapes differ" -msgstr "" +msgstr "as formas da entrada e da saída diferem" #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" @@ -3658,7 +3658,7 @@ msgstr "rendimento nativo" #: extmod/ulab/code/ndarray.c msgid "ndarray length overflows" -msgstr "" +msgstr "estouros de comprimento no ndarray" #: py/runtime.c #, c-format @@ -3760,7 +3760,7 @@ msgstr "não foi implementado para dtype complexo" #: extmod/ulab/code/numpy/bitwise.c msgid "not supported for input types" -msgstr "" +msgstr "não compatível para os tipos de entrada" #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" @@ -3915,11 +3915,11 @@ msgstr "a matriz externa é muito pequena" #: extmod/ulab/code/numpy/vector.c msgid "out keyword is not supported for complex dtype" -msgstr "" +msgstr "a palavra-chave out não é compatível para o dtype complexo" #: extmod/ulab/code/numpy/vector.c msgid "out keyword is not supported for function" -msgstr "" +msgstr "a palavra-chave out não é compatível com a função" #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" @@ -3927,11 +3927,11 @@ msgstr "deve ser uma matriz densa flutuante" #: extmod/ulab/code/numpy/vector.c msgid "out must be an ndarray" -msgstr "" +msgstr "out deve ser um ndarray" #: extmod/ulab/code/numpy/vector.c msgid "out must be of float dtype" -msgstr "" +msgstr "out deve ser do tipo float dtype" #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" From ab33ec6332fdae0ec152c57dca5665a22e483773 Mon Sep 17 00:00:00 2001 From: Jonny Bergdahl Date: Wed, 26 Jul 2023 16:00:16 +0000 Subject: [PATCH 170/241] Translated using Weblate (Swedish) Currently translated at 100.0% (995 of 995 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/sv/ --- locale/sv.po | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/locale/sv.po b/locale/sv.po index fd8c63a0a6..1b927ef549 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-11 17:05+0000\n" +"PO-Revision-Date: 2023-07-27 17:07+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" "Language: sv\n" @@ -2819,7 +2819,7 @@ msgstr "kan inte skapa instans" #: extmod/ulab/code/ndarray.c msgid "cannot delete array elements" -msgstr "" +msgstr "kan inte ta bort arrayelement" #: py/runtime.c msgid "cannot import name %q" @@ -3285,11 +3285,11 @@ msgstr "inline assembler måste vara en funktion" #: extmod/ulab/code/numpy/vector.c msgid "input and output dimensions differ" -msgstr "" +msgstr "In- och utdimensionerna skiljer sig åt" #: extmod/ulab/code/numpy/vector.c msgid "input and output shapes differ" -msgstr "" +msgstr "In- och utdataformerna skiljer sig åt" #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" @@ -3624,7 +3624,7 @@ msgstr "native yield" #: extmod/ulab/code/ndarray.c msgid "ndarray length overflows" -msgstr "" +msgstr "ndarray-längden överskriden" #: py/runtime.c #, c-format @@ -3726,7 +3726,7 @@ msgstr "inte implementerat för complex dtype" #: extmod/ulab/code/numpy/bitwise.c msgid "not supported for input types" -msgstr "" +msgstr "stöds inte för indatatyper" #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" @@ -3878,11 +3878,11 @@ msgstr "matrisen för out är för liten" #: extmod/ulab/code/numpy/vector.c msgid "out keyword is not supported for complex dtype" -msgstr "" +msgstr "nyckelordet out stöds inte för komplex dtyp" #: extmod/ulab/code/numpy/vector.c msgid "out keyword is not supported for function" -msgstr "" +msgstr "nyckelordet out stöds inte för function" #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" @@ -3890,11 +3890,11 @@ msgstr "out måste vara en float dense array" #: extmod/ulab/code/numpy/vector.c msgid "out must be an ndarray" -msgstr "" +msgstr "out måste vara en ndarray" #: extmod/ulab/code/numpy/vector.c msgid "out must be of float dtype" -msgstr "" +msgstr "out måste vara av float dtype" #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" From 5780d9a3d2d7597ffdf954a591d26b140076040b Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 27 Jul 2023 11:39:40 -0500 Subject: [PATCH 171/241] rp2: Add StateMachine.may_exec and also sanity-check the init instructions, thanks to the newly factored-out checker. Closes: #8221 --- locale/circuitpython.pot | 62 ++--- .../bindings/rp2pio/StateMachine.c | 12 +- .../bindings/rp2pio/StateMachine.h | 1 + .../common-hal/audiobusio/I2SOut.c | 3 +- .../raspberrypi/common-hal/audiobusio/PDMIn.c | 1 + .../imagecapture/ParallelImageCapture.c | 1 + .../common-hal/paralleldisplay/ParallelBus.c | 1 + .../raspberrypi/common-hal/pulseio/PulseIn.c | 1 + .../common-hal/rotaryio/IncrementalEncoder.c | 1 + .../common-hal/rp2pio/StateMachine.c | 223 ++++++++++-------- 10 files changed, 167 insertions(+), 139 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 3d21ca793e..ee22656685 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -251,6 +251,22 @@ msgstr "" msgid "%q=%q" msgstr "" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1161,26 +1177,6 @@ msgstr "" msgid "Input/output error" msgstr "" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "" @@ -1352,38 +1348,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c @@ -1825,7 +1814,8 @@ msgstr "" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "" @@ -4021,7 +4011,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/ports/raspberrypi/bindings/rp2pio/StateMachine.c b/ports/raspberrypi/bindings/rp2pio/StateMachine.c index bbf076ba68..757edc7004 100644 --- a/ports/raspberrypi/bindings/rp2pio/StateMachine.c +++ b/ports/raspberrypi/bindings/rp2pio/StateMachine.c @@ -100,6 +100,10 @@ //| :param int frequency: the target clock frequency of the state machine. Actual may be less. Use 0 for system clock speed. //| :param ReadableBuffer init: a program to run once at start up. This is run after program //| is started so instructions may be intermingled +//| :param ReadableBuffer may_exec: Instructions that may be executed via `StateMachine.exec` calls. +//| Some elements of the `StateMachine`'s configuration are inferred from the instructions used; +//| for instance, if there is no ``in`` or ``push`` instruction, then the `StateMachine` is configured without a receive FIFO. +//| In this case, passing a ``may_exec`` program containing an ``in`` instruction such as ``in x``, a receive FIFO will be configured. //| :param ~microcontroller.Pin first_out_pin: the first pin to use with the OUT instruction //| :param int out_pin_count: the count of consecutive pins to use with OUT starting at first_out_pin //| :param int initial_out_pin_state: the initial output value for out pins starting at first_out_pin @@ -152,7 +156,7 @@ STATIC mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) { rp2pio_statemachine_obj_t *self = m_new_obj(rp2pio_statemachine_obj_t); self->base.type = &rp2pio_statemachine_type; - enum { ARG_program, ARG_frequency, ARG_init, + enum { ARG_program, ARG_frequency, ARG_init, ARG_may_exec, ARG_first_out_pin, ARG_out_pin_count, ARG_initial_out_pin_state, ARG_initial_out_pin_direction, ARG_first_in_pin, ARG_in_pin_count, ARG_pull_in_pin_up, ARG_pull_in_pin_down, @@ -171,6 +175,7 @@ STATIC mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n { MP_QSTR_program, MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_frequency, MP_ARG_REQUIRED | MP_ARG_INT }, { MP_QSTR_init, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, + { MP_QSTR_may_exec, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, { MP_QSTR_first_out_pin, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} }, { MP_QSTR_out_pin_count, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1} }, @@ -220,6 +225,10 @@ STATIC mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n init_bufinfo.len = 0; mp_get_buffer(args[ARG_init].u_obj, &init_bufinfo, MP_BUFFER_READ); + mp_buffer_info_t may_exec_bufinfo; + may_exec_bufinfo.len = 0; + mp_get_buffer(args[ARG_may_exec].u_obj, &may_exec_bufinfo, MP_BUFFER_READ); + // We don't validate pin in use here because we may be ok sharing them within a PIO. const mcu_pin_obj_t *first_out_pin = validate_obj_is_pin_or_none(args[ARG_first_out_pin].u_obj, MP_QSTR_first_out_pin); @@ -264,6 +273,7 @@ STATIC mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n bufinfo.buf, bufinfo.len / 2, args[ARG_frequency].u_int, init_bufinfo.buf, init_bufinfo.len / 2, + may_exec_bufinfo.buf, bufinfo.len / 2, first_out_pin, out_pin_count, args[ARG_initial_out_pin_state].u_int, args[ARG_initial_out_pin_direction].u_int, first_in_pin, in_pin_count, args[ARG_pull_in_pin_up].u_int, args[ARG_pull_in_pin_down].u_int, first_set_pin, set_pin_count, args[ARG_initial_set_pin_state].u_int, args[ARG_initial_set_pin_direction].u_int, diff --git a/ports/raspberrypi/bindings/rp2pio/StateMachine.h b/ports/raspberrypi/bindings/rp2pio/StateMachine.h index 6f07ac1fa1..3238d0dfbd 100644 --- a/ports/raspberrypi/bindings/rp2pio/StateMachine.h +++ b/ports/raspberrypi/bindings/rp2pio/StateMachine.h @@ -41,6 +41,7 @@ void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, const uint16_t *program, size_t program_len, size_t frequency, const uint16_t *init, size_t init_len, + const uint16_t *may_exec, size_t may_exec_len, const mcu_pin_obj_t *first_out_pin, uint8_t out_pin_count, uint32_t initial_out_pin_state, uint32_t initial_out_pin_direction, const mcu_pin_obj_t *first_in_pin, uint8_t in_pin_count, uint32_t pull_pin_up, uint32_t pull_pin_down, const mcu_pin_obj_t *first_set_pin, uint8_t set_pin_count, uint32_t initial_set_pin_state, uint32_t initial_set_pin_direction, diff --git a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c index 7db053a39d..1e16b51241 100644 --- a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c +++ b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c @@ -121,7 +121,8 @@ void common_hal_audiobusio_i2sout_construct(audiobusio_i2sout_obj_t *self, &self->state_machine, program, program_len, 44100 * 32 * 6, // Clock at 44.1 khz to warm the DAC up. - NULL, 0, + NULL, 0, // init + NULL, 0, // may_exec data, 1, 0, 0xffffffff, // out pin NULL, 0, // in pins 0, 0, // in pulls diff --git a/ports/raspberrypi/common-hal/audiobusio/PDMIn.c b/ports/raspberrypi/common-hal/audiobusio/PDMIn.c index c3aadd2bbe..3f84dfe18e 100644 --- a/ports/raspberrypi/common-hal/audiobusio/PDMIn.c +++ b/ports/raspberrypi/common-hal/audiobusio/PDMIn.c @@ -66,6 +66,7 @@ void common_hal_audiobusio_pdmin_construct(audiobusio_pdmin_obj_t *self, pdmin, MP_ARRAY_SIZE(pdmin), sample_rate * 32 * 2, // Frequency based on sample rate NULL, 0, + NULL, 0, // may_exec NULL, 1, 0, 0xffffffff, // out pin data_pin, 1, // in pins 0, 0, // in pulls diff --git a/ports/raspberrypi/common-hal/imagecapture/ParallelImageCapture.c b/ports/raspberrypi/common-hal/imagecapture/ParallelImageCapture.c index 7ad6acbaff..7f065b92a0 100644 --- a/ports/raspberrypi/common-hal/imagecapture/ParallelImageCapture.c +++ b/ports/raspberrypi/common-hal/imagecapture/ParallelImageCapture.c @@ -102,6 +102,7 @@ void common_hal_imagecapture_parallelimagecapture_construct(imagecapture_paralle imagecapture_code, MP_ARRAY_SIZE(imagecapture_code), common_hal_mcu_processor_get_frequency(), // full speed (4 instructions per loop -> max pclk 30MHz @ 120MHz) 0, 0, // init + NULL, 0, // may_exec NULL, 0, 0, 0, // out pins pin_from_number(data_pins[0]), data_count, // in pins 0, 0, // in pulls diff --git a/ports/raspberrypi/common-hal/paralleldisplay/ParallelBus.c b/ports/raspberrypi/common-hal/paralleldisplay/ParallelBus.c index 96c89ade95..8d25471821 100644 --- a/ports/raspberrypi/common-hal/paralleldisplay/ParallelBus.c +++ b/ports/raspberrypi/common-hal/paralleldisplay/ParallelBus.c @@ -98,6 +98,7 @@ void common_hal_paralleldisplay_parallelbus_construct(paralleldisplay_parallelbu parallel_program, MP_ARRAY_SIZE(parallel_program), frequency * 2, // frequency multiplied by 2 as 2 PIO instructions NULL, 0, // init + NULL, 0, // may_exec data0, 8, 0, 255, // first out pin, # out pins NULL, 0, 0, 0, // first in pin, # in pins NULL, 0, 0, 0, // first set pin diff --git a/ports/raspberrypi/common-hal/pulseio/PulseIn.c b/ports/raspberrypi/common-hal/pulseio/PulseIn.c index 346c0951ed..247b48eea0 100644 --- a/ports/raspberrypi/common-hal/pulseio/PulseIn.c +++ b/ports/raspberrypi/common-hal/pulseio/PulseIn.c @@ -61,6 +61,7 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t *self, pulsein_program, MP_ARRAY_SIZE(pulsein_program), 1000000, // frequency NULL, 0, // init, init_len + NULL, 0, // may_exec NULL, 0, 0, 0, // first out pin, # out pins, initial_out_pin_state pin, 1, 0, 0, // first in pin, # in pins NULL, 0, 0, 0, // first set pin diff --git a/ports/raspberrypi/common-hal/rotaryio/IncrementalEncoder.c b/ports/raspberrypi/common-hal/rotaryio/IncrementalEncoder.c index 7cb4c84382..06397a590f 100644 --- a/ports/raspberrypi/common-hal/rotaryio/IncrementalEncoder.c +++ b/ports/raspberrypi/common-hal/rotaryio/IncrementalEncoder.c @@ -81,6 +81,7 @@ void common_hal_rotaryio_incrementalencoder_construct(rotaryio_incrementalencode encoder, MP_ARRAY_SIZE(encoder), 1000000, encoder_init, MP_ARRAY_SIZE(encoder_init), // init + NULL, 0, // may_exec NULL, 0, 0, 0, // out pin pins[0], 2, // in pins 3, 0, // in pulls diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c index 9034b64242..2c0bd8d66a 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c @@ -387,10 +387,115 @@ static uint32_t mask_and_rotate(const mcu_pin_obj_t *first_pin, uint32_t bit_cou return value << shift | value >> (32 - shift); } +typedef struct { + uint32_t pins_we_use, in_pin_count, out_pin_count; + bool has_jmp_pin, auto_push, auto_pull, has_in_pin, has_out_pin, has_set_pin; + bool tx_fifo, rx_fifo, in_loaded, out_loaded, in_used, out_used; +} introspect_t; + +static void consider_instruction(introspect_t *state, uint16_t full_instruction, qstr what, size_t i) { + uint16_t instruction = full_instruction & 0xe000; + if (instruction == 0x8000) { + if ((full_instruction & 0xe080) == pio_instr_bits_push) { + state->rx_fifo = true; + state->in_loaded = true; + } else { // pull otherwise. + state->tx_fifo = true; + state->out_loaded = true; + } + } + if (instruction == pio_instr_bits_jmp) { + uint16_t condition = (full_instruction & 0x00e0) >> 5; + if ((condition == 0x6) && !state->has_jmp_pin) { + mp_raise_ValueError_varg(translate("Missing jmp_pin. %q[%u] jumps on pin"), what, i); + } + } + if (instruction == pio_instr_bits_wait) { + uint16_t wait_source = (full_instruction & 0x0060) >> 5; + uint16_t wait_index = full_instruction & 0x001f; + if (wait_source == 0 && (state->pins_we_use & (1 << wait_index)) == 0) { // GPIO + mp_raise_ValueError_varg(translate("%q[%u] uses extra pin"), i); + } + if (wait_source == 1) { // Input pin + if (state->has_in_pin) { + mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] waits based on pin"), what, i); + } + if (wait_index >= state->in_pin_count) { + mp_raise_ValueError_varg(translate("%q[%u] waits on input outside of count"), what, i); + } + } + } + if (instruction == pio_instr_bits_in) { + uint16_t source = (full_instruction & 0x00e0) >> 5; + uint16_t bit_count = full_instruction & 0x001f; + if (source == 0) { + if (!state->has_in_pin) { + mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] shifts in from pin(s)"), i); + } + if (bit_count > state->in_pin_count) { + mp_raise_ValueError_varg(translate("%q[%u] shifts in more bits than pin count"), i); + } + } + if (state->auto_push) { + state->in_loaded = true; + state->rx_fifo = true; + } + state->in_used = true; + } + if (instruction == pio_instr_bits_out) { + uint16_t bit_count = full_instruction & 0x001f; + uint16_t destination = (full_instruction & 0x00e0) >> 5; + // Check for pins or pindirs destination. + if (destination == 0x0 || destination == 0x4) { + if (!state->has_out_pin) { + mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] shifts out to pin(s)"), i); + } + if (bit_count > state->out_pin_count) { + mp_raise_ValueError_varg(translate("%q[%u] shifts out more bits than pin count"), i); + } + } + if (state->auto_pull) { + state->out_loaded = true; + state->tx_fifo = true; + } + state->out_used = true; + } + if (instruction == pio_instr_bits_set) { + uint16_t destination = (full_instruction & 0x00e0) >> 5; + // Check for pins or pindirs destination. + if ((destination == 0x00 || destination == 0x4) && !state->has_set_pin) { + mp_raise_ValueError_varg(translate("Missing first_set_pin. %q[%u] sets pin(s)"), i); + } + } + if (instruction == pio_instr_bits_mov) { + uint16_t source = full_instruction & 0x0007; + uint16_t destination = (full_instruction & 0x00e0) >> 5; + // Check for pins or pindirs destination. + if (destination == 0x0 && !state->has_out_pin) { + mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] writes pin(s)"), i); + } + if (source == 0x0 && !state->has_out_pin) { + mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] reads pin(s)"), i); + } + if (destination == 0x6) { + state->in_loaded = true; + } else if (destination == 0x7) { + state->out_loaded = true; + } + } +} + +static void consider_program(introspect_t *state, const uint16_t *program, size_t program_len, qstr what) { + for (size_t i = 0; i < program_len; i++) { + consider_instruction(state, program[i], what, i); + } +} + void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, const uint16_t *program, size_t program_len, size_t frequency, const uint16_t *init, size_t init_len, + const uint16_t *may_exec, size_t may_exec_len, const mcu_pin_obj_t *first_out_pin, uint8_t out_pin_count, uint32_t initial_out_pin_state, uint32_t initial_out_pin_direction, const mcu_pin_obj_t *first_in_pin, uint8_t in_pin_count, uint32_t pull_pin_up, uint32_t pull_pin_down, @@ -415,109 +520,25 @@ void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, pins_we_use |= _check_pins_free(jmp_pin, 1, exclusive_pin_use); // Look through the program to see what we reference and make sure it was provided. - bool tx_fifo = false; - bool rx_fifo = false; - bool in_loaded = false; // can be loaded in other ways besides the fifo - bool out_loaded = false; - bool in_used = false; - bool out_used = false; - for (size_t i = 0; i < program_len; i++) { - uint16_t full_instruction = program[i]; - uint16_t instruction = full_instruction & 0xe000; - if (instruction == 0x8000) { - if ((full_instruction & 0xe080) == pio_instr_bits_push) { - rx_fifo = true; - in_loaded = true; - } else { // pull otherwise. - tx_fifo = true; - out_loaded = true; - } - } - if (instruction == pio_instr_bits_jmp) { - uint16_t condition = (full_instruction & 0x00e0) >> 5; - if ((condition == 0x6) && (jmp_pin == NULL)) { - mp_raise_ValueError_varg(translate("Missing jmp_pin. Instruction %d jumps on pin"), i); - } - } - if (instruction == pio_instr_bits_wait) { - uint16_t wait_source = (full_instruction & 0x0060) >> 5; - uint16_t wait_index = full_instruction & 0x001f; - if (wait_source == 0 && (pins_we_use & (1 << wait_index)) == 0) { // GPIO - mp_raise_ValueError_varg(translate("Instruction %d uses extra pin"), i); - } - if (wait_source == 1) { // Input pin - if (first_in_pin == NULL) { - mp_raise_ValueError_varg(translate("Missing first_in_pin. Instruction %d waits based on pin"), i); - } - if (wait_index >= in_pin_count) { - mp_raise_ValueError_varg(translate("Instruction %d waits on input outside of count"), i); - } - } - } - if (instruction == pio_instr_bits_in) { - uint16_t source = (full_instruction & 0x00e0) >> 5; - uint16_t bit_count = full_instruction & 0x001f; - if (source == 0) { - if (first_in_pin == NULL) { - mp_raise_ValueError_varg(translate("Missing first_in_pin. Instruction %d shifts in from pin(s)"), i); - } - if (bit_count > in_pin_count) { - mp_raise_ValueError_varg(translate("Instruction %d shifts in more bits than pin count"), i); - } - } - if (auto_push) { - in_loaded = true; - rx_fifo = true; - } - in_used = true; - } - if (instruction == pio_instr_bits_out) { - uint16_t bit_count = full_instruction & 0x001f; - uint16_t destination = (full_instruction & 0x00e0) >> 5; - // Check for pins or pindirs destination. - if (destination == 0x0 || destination == 0x4) { - if (first_out_pin == NULL) { - mp_raise_ValueError_varg(translate("Missing first_out_pin. Instruction %d shifts out to pin(s)"), i); - } - if (bit_count > out_pin_count) { - mp_raise_ValueError_varg(translate("Instruction %d shifts out more bits than pin count"), i); - } - } - if (auto_pull) { - out_loaded = true; - tx_fifo = true; - } - out_used = true; - } - if (instruction == pio_instr_bits_set) { - uint16_t destination = (full_instruction & 0x00e0) >> 5; - // Check for pins or pindirs destination. - if ((destination == 0x00 || destination == 0x4) && first_set_pin == NULL) { - mp_raise_ValueError_varg(translate("Missing first_set_pin. Instruction %d sets pin(s)"), i); - } - } - if (instruction == pio_instr_bits_mov) { - uint16_t source = full_instruction & 0x0007; - uint16_t destination = (full_instruction & 0x00e0) >> 5; - // Check for pins or pindirs destination. - if (destination == 0x0 && first_out_pin == NULL) { - mp_raise_ValueError_varg(translate("Missing first_out_pin. Instruction %d writes pin(s)"), i); - } - if (source == 0x0 && first_in_pin == NULL) { - mp_raise_ValueError_varg(translate("Missing first_in_pin. Instruction %d reads pin(s)"), i); - } - if (destination == 0x6) { - in_loaded = true; - } else if (destination == 0x7) { - out_loaded = true; - } - } - } + introspect_t state = { + .pins_we_use = pins_we_use, + .has_jmp_pin = jmp_pin != NULL, + .has_in_pin = first_in_pin != NULL, + .has_out_pin = first_out_pin != NULL, + .has_set_pin = first_set_pin != NULL, + .in_pin_count = in_pin_count, + .out_pin_count = out_pin_count, + .auto_pull = auto_pull, + .auto_push = auto_push, + }; + consider_program(&state, program, program_len, MP_QSTR_program); + consider_program(&state, init, init_len, MP_QSTR_init); + consider_program(&state, may_exec, may_exec_len, MP_QSTR_may_exec); - if (!in_loaded && in_used) { + if (!state.in_loaded && state.in_used) { mp_raise_ValueError_varg(translate("Program does IN without loading ISR")); } - if (!out_loaded && out_used) { + if (!state.out_loaded && state.out_used) { mp_raise_ValueError_varg(translate("Program does OUT without loading OSR")); } @@ -570,7 +591,7 @@ void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, first_sideset_pin, sideset_pin_count, initial_pin_state, initial_pin_direction, jmp_pin, - pins_we_use, tx_fifo, rx_fifo, + pins_we_use, state.tx_fifo, state.rx_fifo, auto_pull, pull_threshold, out_shift_right, wait_for_txstall, auto_push, push_threshold, in_shift_right, From 92e21340091a575178521214dcb2559c3e356593 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 27 Jul 2023 11:58:43 -0500 Subject: [PATCH 172/241] rp2: StateMachine: Allow loading programs at fixed offsets --- .../bindings/rp2pio/StateMachine.c | 10 +++++-- .../bindings/rp2pio/StateMachine.h | 3 +- .../common-hal/audiobusio/I2SOut.c | 3 +- .../raspberrypi/common-hal/audiobusio/PDMIn.c | 4 +-- .../imagecapture/ParallelImageCapture.c | 3 +- .../common-hal/neopixel_write/__init__.c | 4 ++- .../common-hal/paralleldisplay/ParallelBus.c | 3 +- .../raspberrypi/common-hal/pulseio/PulseIn.c | 3 +- .../common-hal/rotaryio/IncrementalEncoder.c | 3 +- .../common-hal/rp2pio/StateMachine.c | 30 +++++++++++++++---- .../common-hal/rp2pio/StateMachine.h | 4 ++- 11 files changed, 52 insertions(+), 18 deletions(-) diff --git a/ports/raspberrypi/bindings/rp2pio/StateMachine.c b/ports/raspberrypi/bindings/rp2pio/StateMachine.c index 757edc7004..8615875e87 100644 --- a/ports/raspberrypi/bindings/rp2pio/StateMachine.c +++ b/ports/raspberrypi/bindings/rp2pio/StateMachine.c @@ -93,6 +93,7 @@ //| user_interruptible: bool = True, //| wrap_target: int = 0, //| wrap: int = -1, +//| offset: int = -1, //| ) -> None: //| """Construct a StateMachine object on the given pins with the given program. //| @@ -150,6 +151,9 @@ //| :param int wrap: The instruction after which to wrap to the ``wrap`` //| instruction. As a special case, -1 (the default) indicates the //| last instruction of the program. +//| :param int offset: A specific offset in the state machine's program memory where the program must be loaded. +//| The default value, -1, allows the program to be loaded at any offset. +//| This is appropriate for most programs. //| """ //| ... @@ -170,7 +174,8 @@ STATIC mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n ARG_auto_push, ARG_push_threshold, ARG_in_shift_right, ARG_user_interruptible, ARG_wrap_target, - ARG_wrap,}; + ARG_wrap, + ARG_offset,}; static const mp_arg_t allowed_args[] = { { MP_QSTR_program, MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_frequency, MP_ARG_REQUIRED | MP_ARG_INT }, @@ -214,6 +219,7 @@ STATIC mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n { MP_QSTR_wrap_target, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} }, { MP_QSTR_wrap, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -1} }, + { MP_QSTR_offset, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -1} }, }; mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); @@ -286,7 +292,7 @@ STATIC mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n args[ARG_wait_for_txstall].u_bool, args[ARG_auto_push].u_bool, push_threshold, args[ARG_in_shift_right].u_bool, args[ARG_user_interruptible].u_bool, - wrap_target, wrap); + wrap_target, wrap, args[ARG_offset].u_int); return MP_OBJ_FROM_PTR(self); } diff --git a/ports/raspberrypi/bindings/rp2pio/StateMachine.h b/ports/raspberrypi/bindings/rp2pio/StateMachine.h index 3238d0dfbd..c1c7d6cd27 100644 --- a/ports/raspberrypi/bindings/rp2pio/StateMachine.h +++ b/ports/raspberrypi/bindings/rp2pio/StateMachine.h @@ -54,7 +54,8 @@ void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, bool wait_for_txstall, bool auto_push, uint8_t push_threshold, bool in_shift_right, bool user_interruptible, - int wrap_taget, int wrap); + int wrap_taget, int wrap, + int offset); void common_hal_rp2pio_statemachine_deinit(rp2pio_statemachine_obj_t *self); bool common_hal_rp2pio_statemachine_deinited(rp2pio_statemachine_obj_t *self); diff --git a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c index 1e16b51241..62d4058d1d 100644 --- a/ports/raspberrypi/common-hal/audiobusio/I2SOut.c +++ b/ports/raspberrypi/common-hal/audiobusio/I2SOut.c @@ -136,7 +136,8 @@ void common_hal_audiobusio_i2sout_construct(audiobusio_i2sout_obj_t *self, false, // Wait for txstall false, 32, false, // in settings false, // Not user-interruptible. - 0, -1); // wrap settings + 0, -1, // wrap settings + PIO_ANY_OFFSET); self->playing = false; audio_dma_init(&self->dma); diff --git a/ports/raspberrypi/common-hal/audiobusio/PDMIn.c b/ports/raspberrypi/common-hal/audiobusio/PDMIn.c index 3f84dfe18e..5d94afcecc 100644 --- a/ports/raspberrypi/common-hal/audiobusio/PDMIn.c +++ b/ports/raspberrypi/common-hal/audiobusio/PDMIn.c @@ -80,8 +80,8 @@ void common_hal_audiobusio_pdmin_construct(audiobusio_pdmin_obj_t *self, false, // Wait for txstall false, 32, true, // in settings false, // Not user-interruptible. - 0, -1); // wrap settings - + 0, -1, // wrap settings + PIO_ANY_OFFSET); uint32_t actual_frequency = common_hal_rp2pio_statemachine_get_frequency(&self->state_machine); if (actual_frequency < MIN_MIC_CLOCK) { mp_raise_ValueError(translate("sampling rate out of range")); diff --git a/ports/raspberrypi/common-hal/imagecapture/ParallelImageCapture.c b/ports/raspberrypi/common-hal/imagecapture/ParallelImageCapture.c index 7f065b92a0..501e905af1 100644 --- a/ports/raspberrypi/common-hal/imagecapture/ParallelImageCapture.c +++ b/ports/raspberrypi/common-hal/imagecapture/ParallelImageCapture.c @@ -120,7 +120,8 @@ void common_hal_imagecapture_parallelimagecapture_construct(imagecapture_paralle false, // wait for txstall true, 32, true, // in settings false, // Not user-interruptible. - 2, 5); // wrap settings + 2, 5, // wrap settings + PIO_ANY_OFFSET); } void common_hal_imagecapture_parallelimagecapture_deinit(imagecapture_parallelimagecapture_obj_t *self) { diff --git a/ports/raspberrypi/common-hal/neopixel_write/__init__.c b/ports/raspberrypi/common-hal/neopixel_write/__init__.c index d473285b02..c4a2282bdf 100644 --- a/ports/raspberrypi/common-hal/neopixel_write/__init__.c +++ b/ports/raspberrypi/common-hal/neopixel_write/__init__.c @@ -79,7 +79,9 @@ void common_hal_neopixel_write(const digitalio_digitalinout_obj_t *digitalinout, false, // claim pins false, // Not user-interruptible. false, // No sideset enable - 0, -1); // wrap + 0, -1, // wrap + PIO_ANY_OFFSET // offset + ); if (!ok) { // Do nothing. Maybe bitbang? return; diff --git a/ports/raspberrypi/common-hal/paralleldisplay/ParallelBus.c b/ports/raspberrypi/common-hal/paralleldisplay/ParallelBus.c index 8d25471821..827b72ebd7 100644 --- a/ports/raspberrypi/common-hal/paralleldisplay/ParallelBus.c +++ b/ports/raspberrypi/common-hal/paralleldisplay/ParallelBus.c @@ -111,7 +111,8 @@ void common_hal_paralleldisplay_parallelbus_construct(paralleldisplay_parallelbu false, // wait for TX stall false, 32, true, // RX setting we don't use false, // Not user-interruptible. - 0, -1); // wrap settings + 0, -1, // wrap settings + PIO_ANY_OFFSET); common_hal_rp2pio_statemachine_never_reset(&self->state_machine); } diff --git a/ports/raspberrypi/common-hal/pulseio/PulseIn.c b/ports/raspberrypi/common-hal/pulseio/PulseIn.c index 247b48eea0..2d21713e60 100644 --- a/ports/raspberrypi/common-hal/pulseio/PulseIn.c +++ b/ports/raspberrypi/common-hal/pulseio/PulseIn.c @@ -74,7 +74,8 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t *self, false, // wait for TX stall true, 32, true, // RX auto pull every 32 bits. shift left to output msb first false, // Not user-interruptible. - 0, -1); // wrap settings + 0, -1, // wrap settings + PIO_ANY_OFFSET); common_hal_pulseio_pulsein_pause(self); diff --git a/ports/raspberrypi/common-hal/rotaryio/IncrementalEncoder.c b/ports/raspberrypi/common-hal/rotaryio/IncrementalEncoder.c index 06397a590f..54d0fd7858 100644 --- a/ports/raspberrypi/common-hal/rotaryio/IncrementalEncoder.c +++ b/ports/raspberrypi/common-hal/rotaryio/IncrementalEncoder.c @@ -95,7 +95,8 @@ void common_hal_rotaryio_incrementalencoder_construct(rotaryio_incrementalencode false, // Wait for txstall false, 32, false, // in settings false, // Not user-interruptible. - 0, MP_ARRAY_SIZE(encoder) - 1 // wrap settings + 0, MP_ARRAY_SIZE(encoder) - 1, // wrap settings + PIO_ANY_OFFSET ); // We're guaranteed by the init code that some output will be available promptly diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c index 2c0bd8d66a..20ff359461 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c @@ -178,6 +178,21 @@ STATIC uint32_t _check_pins_free(const mcu_pin_obj_t *first_pin, uint8_t pin_cou return pins_we_use; } +static bool can_add_program(PIO pio, const pio_program_t *program, int offset) { + if (offset == -1) { + return pio_can_add_program(pio, program); + } + return pio_can_add_program_at_offset(pio, program, offset); +} + +static uint add_program(PIO pio, const pio_program_t *program, int offset) { + if (offset == -1) { + return pio_add_program(pio, program); + } else { + pio_add_program_at_offset(pio, program, offset); + return offset; + } +} bool rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, const uint16_t *program, size_t program_len, @@ -197,7 +212,8 @@ bool rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, bool claim_pins, bool user_interruptible, bool sideset_enable, - int wrap_target, int wrap + int wrap_target, int wrap, + int offset ) { // Create a program id that isn't the pointer so we can store it without storing the original object. uint32_t program_id = ~((uint32_t)program); @@ -215,14 +231,15 @@ bool rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, uint8_t free_count = 0; for (size_t j = 0; j < NUM_PIO_STATE_MACHINES; j++) { if (_current_program_id[i][j] == program_id && - _current_program_len[i][j] == program_len) { + _current_program_len[i][j] == program_len && + (offset == -1 || offset == _current_program_offset[i][j])) { program_offset = _current_program_offset[i][j]; } if (!pio_sm_is_claimed(pio, j)) { free_count++; } } - if (free_count > 0 && (program_offset < 32 || pio_can_add_program(pio, &program_struct))) { + if (free_count > 0 && (program_offset < 32 || can_add_program(pio, &program_struct, offset))) { pio_index = i; if (program_offset < 32) { break; @@ -254,7 +271,7 @@ bool rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, self->pio = pio_instances[pio_index]; self->state_machine = state_machine; if (program_offset == 32) { - program_offset = pio_add_program(self->pio, &program_struct); + program_offset = add_program(self->pio, &program_struct, offset); } self->offset = program_offset; _current_program_id[pio_index][state_machine] = program_id; @@ -509,7 +526,8 @@ void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, bool wait_for_txstall, bool auto_push, uint8_t push_threshold, bool in_shift_right, bool user_interruptible, - int wrap_target, int wrap) { + int wrap_target, int wrap, + int offset) { // First, check that all pins are free OR already in use by any PIO if exclusive_pin_use is false. uint32_t pins_we_use = wait_gpio_mask; @@ -598,7 +616,7 @@ void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, true /* claim pins */, user_interruptible, sideset_enable, - wrap_target, wrap); + wrap_target, wrap, offset); if (!ok) { mp_raise_RuntimeError(translate("All state machines in use")); } diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.h b/ports/raspberrypi/common-hal/rp2pio/StateMachine.h index f2d642bbad..fde578a9e6 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.h +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.h @@ -32,6 +32,8 @@ #include "common-hal/microcontroller/Pin.h" #include "src/rp2_common/hardware_pio/include/hardware/pio.h" +enum { PIO_ANY_OFFSET = -1 }; + typedef struct sm_buf_info { mp_obj_t obj; mp_buffer_info_t info; @@ -88,7 +90,7 @@ bool rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, bool claim_pins, bool interruptible, bool sideset_enable, - int wrap_target, int wrap); + int wrap_target, int wrap, int offset); uint8_t rp2pio_statemachine_program_offset(rp2pio_statemachine_obj_t *self); From ffb1cf116d2fa40df56ac5d4ac22ac784e5e4a2a Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Thu, 27 Jul 2023 16:46:15 -0700 Subject: [PATCH 173/241] Add D pins --- .../boards/adafruit_metro_esp32s3/pins.c | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/ports/espressif/boards/adafruit_metro_esp32s3/pins.c b/ports/espressif/boards/adafruit_metro_esp32s3/pins.c index e27f72f3bb..4ac6c49d29 100644 --- a/ports/espressif/boards/adafruit_metro_esp32s3/pins.c +++ b/ports/espressif/boards/adafruit_metro_esp32s3/pins.c @@ -27,18 +27,42 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO41) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO2) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_GPIO3) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO3), MP_ROM_PTR(&pin_GPIO3) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_GPIO4) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO4), MP_ROM_PTR(&pin_GPIO4) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_GPIO5) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO5), MP_ROM_PTR(&pin_GPIO5) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_GPIO6) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO6), MP_ROM_PTR(&pin_GPIO6) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_GPIO7) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO7), MP_ROM_PTR(&pin_GPIO7) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_GPIO8) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO8), MP_ROM_PTR(&pin_GPIO8) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_GPIO9) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO9), MP_ROM_PTR(&pin_GPIO9) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_GPIO10) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_GPIO11) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_GPIO12) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) }, + + { MP_OBJ_NEW_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) }, { MP_OBJ_NEW_QSTR(MP_QSTR_SDA),MP_ROM_PTR(&pin_GPIO47) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO47),MP_ROM_PTR(&pin_GPIO47) }, @@ -55,8 +79,6 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_MISO),MP_ROM_PTR(&pin_GPIO37) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO37),MP_ROM_PTR(&pin_GPIO37) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO45) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) }, From 1ff3097c77b5f473e129af84b95455e9e0b6cf3c Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Fri, 28 Jul 2023 00:08:52 +0000 Subject: [PATCH 174/241] Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (995 of 995 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/en_GB/ --- locale/en_GB.po | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/locale/en_GB.po b/locale/en_GB.po index e524cd27af..13de7645fe 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-07-19 21:06+0000\n" +"PO-Revision-Date: 2023-07-28 00:10+0000\n" "Last-Translator: Andi Chandler \n" "Language-Team: none\n" "Language: en_GB\n" @@ -2807,7 +2807,7 @@ msgstr "can't create instance" #: extmod/ulab/code/ndarray.c msgid "cannot delete array elements" -msgstr "" +msgstr "cannot delete array elements" #: py/runtime.c msgid "cannot import name %q" @@ -3271,11 +3271,11 @@ msgstr "inline assembler must be a function" #: extmod/ulab/code/numpy/vector.c msgid "input and output dimensions differ" -msgstr "" +msgstr "input and output dimensions differ" #: extmod/ulab/code/numpy/vector.c msgid "input and output shapes differ" -msgstr "" +msgstr "input and output shapes differ" #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" @@ -3607,7 +3607,7 @@ msgstr "native yield" #: extmod/ulab/code/ndarray.c msgid "ndarray length overflows" -msgstr "" +msgstr "ndarray length overflows" #: py/runtime.c #, c-format @@ -3709,7 +3709,7 @@ msgstr "not implemented for complex dtype" #: extmod/ulab/code/numpy/bitwise.c msgid "not supported for input types" -msgstr "" +msgstr "not supported for input types" #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" @@ -3861,11 +3861,11 @@ msgstr "out array is too small" #: extmod/ulab/code/numpy/vector.c msgid "out keyword is not supported for complex dtype" -msgstr "" +msgstr "out keyword is not supported for complex dtype" #: extmod/ulab/code/numpy/vector.c msgid "out keyword is not supported for function" -msgstr "" +msgstr "out keyword is not supported for function" #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" @@ -3873,11 +3873,11 @@ msgstr "out must be a float dense array" #: extmod/ulab/code/numpy/vector.c msgid "out must be an ndarray" -msgstr "" +msgstr "out must be an ndarray" #: extmod/ulab/code/numpy/vector.c msgid "out must be of float dtype" -msgstr "" +msgstr "out must be of float dtype" #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" From e9eaa63aef2e8d3b56b617841f2fe7f5f34f33c3 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 28 Jul 2023 02:35:32 +0200 Subject: [PATCH 175/241] 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 | 9 +++++++-- locale/de_DE.po | 9 +++++++-- locale/el.po | 9 +++++++-- locale/en_GB.po | 9 +++++++-- locale/es.po | 9 +++++++-- locale/fil.po | 9 +++++++-- locale/fr.po | 9 +++++++-- locale/hi.po | 9 +++++++-- locale/it_IT.po | 9 +++++++-- locale/ja.po | 9 +++++++-- locale/ko.po | 9 +++++++-- locale/nl.po | 9 +++++++-- locale/pl.po | 9 +++++++-- locale/pt_BR.po | 9 +++++++-- locale/ru.po | 9 +++++++-- locale/sv.po | 9 +++++++-- locale/tr.po | 9 +++++++-- locale/zh_Latn_pinyin.po | 9 +++++++-- 19 files changed, 133 insertions(+), 38 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 483c5f48ac..51ecc1b3ce 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -1770,6 +1770,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "Tambahkan module apapun pada filesystem\n" @@ -1849,7 +1853,8 @@ msgstr "Kesalahan pembuatan nomor acak" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Baca-saja" @@ -4050,7 +4055,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/locale/cs.po b/locale/cs.po index 0ffa07aed8..063af8520e 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -1761,6 +1761,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "" @@ -1840,7 +1844,8 @@ msgstr "" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "" @@ -4036,7 +4041,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/locale/de_DE.po b/locale/de_DE.po index 609437e439..ade8b1e291 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -1794,6 +1794,10 @@ msgstr "Pins müssen geordnete GPIO-Pins sein" msgid "Pins must share PWM slice" msgstr "Pins muss ein geteiltes PWM-Stück sein" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "und alle Module im Dateisystem\n" @@ -1874,7 +1878,8 @@ msgstr "Fehler bei der Erzeugung von Zufallszahlen" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Nur lesen möglich, da Schreibgeschützt" @@ -4121,7 +4126,7 @@ msgstr "sos[:, 3] sollten alle Einsen sein" msgid "sosfilt requires iterable arguments" msgstr "sosfilt erfordert iterierbare Argumente" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "Quell-Palette zu groß" diff --git a/locale/el.po b/locale/el.po index 57fd874dd6..7c8998b140 100644 --- a/locale/el.po +++ b/locale/el.po @@ -1775,6 +1775,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "" @@ -1854,7 +1858,8 @@ msgstr "" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "" @@ -4050,7 +4055,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/locale/en_GB.po b/locale/en_GB.po index 13de7645fe..cdda9a8f9b 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -1777,6 +1777,10 @@ msgstr "Pins must be sequential GPIO pins" msgid "Pins must share PWM slice" msgstr "Pins must share PWM slice" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "Plus any modules on the filesystem\n" @@ -1854,7 +1858,8 @@ msgstr "Random number generation error" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Read-only" @@ -4064,7 +4069,7 @@ msgstr "sos[:, 3] should be all ones" msgid "sosfilt requires iterable arguments" msgstr "sosfilt requires iterable arguments" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "source palette too large" diff --git a/locale/es.po b/locale/es.po index 92af54c327..0e892a1636 100644 --- a/locale/es.po +++ b/locale/es.po @@ -1808,6 +1808,10 @@ msgstr "Los pines deben ser pines GPIO secuenciales" msgid "Pins must share PWM slice" msgstr "Los pines deben compartir la división PWM" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "Además de cualquier módulo en el sistema de archivos\n" @@ -1888,7 +1892,8 @@ msgstr "Error de generación de números aleatorios" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Solo-lectura" @@ -4118,7 +4123,7 @@ msgstr "sos[:, 3] deberían ser todos unos" msgid "sosfilt requires iterable arguments" msgstr "sosfilt requiere argumentos iterables" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "paleta fuente muy larga" diff --git a/locale/fil.po b/locale/fil.po index aff40a5bb7..8d7ea45e45 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -1764,6 +1764,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "Kasama ang kung ano pang modules na sa filesystem\n" @@ -1841,7 +1845,8 @@ msgstr "" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Basahin-lamang" @@ -4057,7 +4062,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/locale/fr.po b/locale/fr.po index 18c0d68845..1d8a0b8b4b 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -1818,6 +1818,10 @@ msgstr "Les broches doivent être des broches GPIO à la suite" msgid "Pins must share PWM slice" msgstr "Les broches doivent partager la tranche PWM" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "Ainsi que tout autres modules présents sur le système de fichiers\n" @@ -1899,7 +1903,8 @@ msgstr "Erreur de génération de chiffres aléatoires" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Lecture seule" @@ -4141,7 +4146,7 @@ msgstr "sos[:, 3] doivent tous être à un" msgid "sosfilt requires iterable arguments" msgstr "sosfilt nécessite des argument itératifs" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "la palette source est trop grande" diff --git a/locale/hi.po b/locale/hi.po index 7469814d21..e3faa63ef1 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -1748,6 +1748,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "" @@ -1825,7 +1829,8 @@ msgstr "" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "" @@ -4021,7 +4026,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/locale/it_IT.po b/locale/it_IT.po index 6a4e37a0ef..4e020abc59 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -1770,6 +1770,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c #, fuzzy msgid "Plus any modules on the filesystem\n" @@ -1848,7 +1852,8 @@ msgstr "" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Sola lettura" @@ -4067,7 +4072,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/locale/ja.po b/locale/ja.po index 32b5569072..898ee0ecec 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -1763,6 +1763,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "" @@ -1841,7 +1845,8 @@ msgstr "乱数生成エラー" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "読み込み専用" @@ -4045,7 +4050,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/locale/ko.po b/locale/ko.po index 0dd12d03e5..a9f2802a24 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -1751,6 +1751,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "" @@ -1828,7 +1832,8 @@ msgstr "" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "" @@ -4025,7 +4030,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/locale/nl.po b/locale/nl.po index 7d115254be..380f48f925 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -1767,6 +1767,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "En iedere module in het bestandssysteem\n" @@ -1846,7 +1850,8 @@ msgstr "Random number generatie fout" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Alleen-lezen" @@ -4055,7 +4060,7 @@ msgstr "sos[:, 3] moeten allemaal 1 zijn" msgid "sosfilt requires iterable arguments" msgstr "sosfilt vereist itereerbare argumenten" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "bronpalet te groot" diff --git a/locale/pl.po b/locale/pl.po index b97a3ba2a8..4f7e4c4f3e 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -1756,6 +1756,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "Oraz moduły w systemie plików\n" @@ -1833,7 +1837,8 @@ msgstr "Błąd generowania liczb losowych" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Tylko do odczytu" @@ -4031,7 +4036,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "źródłowa paleta jest zbyt duża" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index af480bd9aa..0343664e30 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -1802,6 +1802,10 @@ msgstr "Pinos devem ser pinos GPIO sequenciais" msgid "Pins must share PWM slice" msgstr "Os pinos devem compartilhar a fatia do PWM" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "Além de quaisquer módulos no sistema de arquivos\n" @@ -1884,7 +1888,8 @@ msgstr "Houve um erro na geração do número aleatório" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Somente leitura" @@ -4120,7 +4125,7 @@ msgstr "sos[:, 3] deve ser um em todos" msgid "sosfilt requires iterable arguments" msgstr "o sosfilt requer que os argumentos sejam iteráveis" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "a paleta de origem é muito grande" diff --git a/locale/ru.po b/locale/ru.po index 12040cc439..7d7effef42 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -1807,6 +1807,10 @@ msgstr "Пины должны быть последовательными выв msgid "Pins must share PWM slice" msgstr "Пины должны иметь общий срез ШИМ" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "" @@ -1886,7 +1890,8 @@ msgstr "" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "" @@ -4084,7 +4089,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/locale/sv.po b/locale/sv.po index 1b927ef549..ac191b0efc 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -1786,6 +1786,10 @@ msgstr "Pins måste vara sekventiella GPIO-pinnar" msgid "Pins must share PWM slice" msgstr "Pinnar måste dela PWM-segment" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "Plus eventuella moduler i filsystemet\n" @@ -1865,7 +1869,8 @@ msgstr "Fel vid generering av slumptal" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Skrivskyddad" @@ -4082,7 +4087,7 @@ msgstr "sos[:, 3] måste vara ettor" msgid "sosfilt requires iterable arguments" msgstr "sosfilt kräver iterable argument" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "källpalett för stor" diff --git a/locale/tr.po b/locale/tr.po index 851fef7f94..d2a7184bd8 100644 --- a/locale/tr.po +++ b/locale/tr.po @@ -1767,6 +1767,10 @@ msgstr "" msgid "Pins must share PWM slice" msgstr "" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "" @@ -1847,7 +1851,8 @@ msgstr "" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "" @@ -4043,7 +4048,7 @@ msgstr "" msgid "sosfilt requires iterable arguments" msgstr "" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 3853fdc0d7..bd67ab9500 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -1791,6 +1791,10 @@ msgstr "yǐn jiǎo bì xū shì lián xù de GPIO yǐn jiǎo" msgid "Pins must share PWM slice" msgstr "yǐn jiǎo bì xū gòng xiǎng PWM qiē piàn" +#: shared-module/usb/core/Device.c +msgid "Pipe error" +msgstr "" + #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" msgstr "Zài wénjiàn xìtǒng shàng tiānjiā rènhé mókuài\n" @@ -1870,7 +1874,8 @@ msgstr "Suíjī shù shēngchéng cuòwù" #: shared-bindings/_bleio/__init__.c #: shared-bindings/memorymonitor/AllocationSize.c -#: shared-bindings/pulseio/PulseIn.c shared-module/displayio/Bitmap.c +#: shared-bindings/pulseio/PulseIn.c shared-module/bitmaptools/__init__.c +#: shared-module/displayio/Bitmap.c msgid "Read-only" msgstr "Zhǐ dú" @@ -4085,7 +4090,7 @@ msgstr "sos [:, 3] yīnggāi quán shì" msgid "sosfilt requires iterable arguments" msgstr "sosfilt xūyào diédài cānshù" -#: shared-bindings/bitmaptools/__init__.c shared-bindings/displayio/Bitmap.c +#: shared-bindings/bitmaptools/__init__.c msgid "source palette too large" msgstr "yuán miànbǎn tài dà" From 6083de017a0058f146e7602b5c7699a30c64bc79 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 27 Jul 2023 20:09:13 -0500 Subject: [PATCH 176/241] fix method name in docstr --- ports/raspberrypi/bindings/rp2pio/StateMachine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/raspberrypi/bindings/rp2pio/StateMachine.c b/ports/raspberrypi/bindings/rp2pio/StateMachine.c index 8615875e87..a885a844b9 100644 --- a/ports/raspberrypi/bindings/rp2pio/StateMachine.c +++ b/ports/raspberrypi/bindings/rp2pio/StateMachine.c @@ -101,7 +101,7 @@ //| :param int frequency: the target clock frequency of the state machine. Actual may be less. Use 0 for system clock speed. //| :param ReadableBuffer init: a program to run once at start up. This is run after program //| is started so instructions may be intermingled -//| :param ReadableBuffer may_exec: Instructions that may be executed via `StateMachine.exec` calls. +//| :param ReadableBuffer may_exec: Instructions that may be executed via `StateMachine.run` calls. //| Some elements of the `StateMachine`'s configuration are inferred from the instructions used; //| for instance, if there is no ``in`` or ``push`` instruction, then the `StateMachine` is configured without a receive FIFO. //| In this case, passing a ``may_exec`` program containing an ``in`` instruction such as ``in x``, a receive FIFO will be configured. From 45b1c42be517fc6c03eed0d5aa101634b6842efd Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Thu, 27 Jul 2023 19:26:37 -0700 Subject: [PATCH 177/241] Add D0 and D1 --- ports/espressif/boards/adafruit_metro_esp32s3/pins.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ports/espressif/boards/adafruit_metro_esp32s3/pins.c b/ports/espressif/boards/adafruit_metro_esp32s3/pins.c index 4ac6c49d29..dfad4381ef 100644 --- a/ports/espressif/boards/adafruit_metro_esp32s3/pins.c +++ b/ports/espressif/boards/adafruit_metro_esp32s3/pins.c @@ -21,12 +21,14 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_GPIO1) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO1), MP_ROM_PTR(&pin_GPIO1) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO40) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) }, - + { MP_OBJ_NEW_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_GPIO41) }, { MP_OBJ_NEW_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO41) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_GPIO40) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO40) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) }, + { MP_OBJ_NEW_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_GPIO2) }, { MP_OBJ_NEW_QSTR(MP_QSTR_IO2), MP_ROM_PTR(&pin_GPIO2) }, From 1ece85ee1e72bc1e5b8fc44870d5ca462976df5f Mon Sep 17 00:00:00 2001 From: elpekenin Date: Fri, 28 Jul 2023 23:49:45 +0200 Subject: [PATCH 178/241] Fix logic (i think) --- ports/stm/supervisor/internal_flash.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ports/stm/supervisor/internal_flash.c b/ports/stm/supervisor/internal_flash.c index f3f9719753..c7b792616c 100644 --- a/ports/stm/supervisor/internal_flash.c +++ b/ports/stm/supervisor/internal_flash.c @@ -303,9 +303,8 @@ mp_uint_t supervisor_flash_read_blocks(uint8_t *dest, uint32_t block, uint32_t n flash_get_sector_info(src, §or_start_addr, §or_size); // Count how many blocks are left in the sector uint32_t count = (sector_size - (src - sector_start_addr)) / FILESYSTEM_BLOCK_SIZE; - count = MIN(num_blocks, count); - if (count < num_blocks && _cache_flash_addr == sector_start_addr) { + if (count <= num_blocks && _cache_flash_addr == sector_start_addr) { // Read is contained in the cache, so just read cache memcpy(dest, (_flash_cache + (src - sector_start_addr)), FILESYSTEM_BLOCK_SIZE * num_blocks); } else { From c4e915c3b271dd652d99fc1e1d8443cacbe8bbe2 Mon Sep 17 00:00:00 2001 From: elpekenin Date: Sat, 29 Jul 2023 14:39:44 +0200 Subject: [PATCH 179/241] Improve error message --- locale/circuitpython.pot | 2 +- shared-module/displayio/__init__.c | 2 +- tools/check_translations.py | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 1892339213..665594c1b9 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -2056,7 +2056,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/shared-module/displayio/__init__.c b/shared-module/displayio/__init__.c index e9431dee14..2ec0fa7316 100644 --- a/shared-module/displayio/__init__.c +++ b/shared-module/displayio/__init__.c @@ -386,5 +386,5 @@ primary_display_bus_t *allocate_display_bus_or_raise(void) { if (result) { return result; } - mp_raise_RuntimeError(translate("Too many display busses")); + mp_raise_RuntimeError(translate("Too many display busses; forgot display.release_displays() ?")); } diff --git a/tools/check_translations.py b/tools/check_translations.py index 95776a5449..19bfa8afb0 100644 --- a/tools/check_translations.py +++ b/tools/check_translations.py @@ -22,7 +22,9 @@ for po_filename in po_filenames: missing = all_ids - po_ids if missing: - print("Missing message id. Please run `make translate`") + print( + "Missing message id. Please run `make translate` and then `git commit locale/circuitpython.pot`" + ) print(missing) sys.exit(-1) else: From 9dbdf593676685285329660a5f65124007bcb2e3 Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Fri, 28 Jul 2023 02:58:23 +0000 Subject: [PATCH 180/241] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (996 of 996 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 0343664e30..e9368e97ef 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-27 17:07+0000\n" +"PO-Revision-Date: 2023-07-29 12:56+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -1804,7 +1804,7 @@ msgstr "Os pinos devem compartilhar a fatia do PWM" #: shared-module/usb/core/Device.c msgid "Pipe error" -msgstr "" +msgstr "Erro de pipe" #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" From 6843901aa29674a7e1a05ead78a16c62b625596f Mon Sep 17 00:00:00 2001 From: Jonny Bergdahl Date: Fri, 28 Jul 2023 12:38:42 +0000 Subject: [PATCH 181/241] Translated using Weblate (Swedish) Currently translated at 100.0% (996 of 996 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/sv/ --- locale/sv.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/sv.po b/locale/sv.po index ac191b0efc..5160cb795a 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-27 17:07+0000\n" +"PO-Revision-Date: 2023-07-29 12:56+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" "Language: sv\n" @@ -1788,7 +1788,7 @@ msgstr "Pinnar måste dela PWM-segment" #: shared-module/usb/core/Device.c msgid "Pipe error" -msgstr "" +msgstr "Pipe-fel" #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" From e46fe64ea3101c6c1cf72348ccac445dca64edba Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 29 Jul 2023 14:56:43 +0200 Subject: [PATCH 182/241] 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 | 7 +++++-- locale/cs.po | 2 +- locale/de_DE.po | 7 +++++-- locale/el.po | 2 +- locale/en_GB.po | 7 +++++-- locale/es.po | 7 +++++-- locale/fil.po | 2 +- locale/fr.po | 7 +++++-- locale/hi.po | 2 +- locale/it_IT.po | 2 +- locale/ja.po | 2 +- locale/ko.po | 2 +- locale/nl.po | 7 +++++-- locale/pl.po | 7 +++++-- locale/pt_BR.po | 7 +++++-- locale/ru.po | 2 +- locale/sv.po | 7 +++++-- locale/tr.po | 2 +- locale/zh_Latn_pinyin.po | 7 +++++-- 19 files changed, 59 insertions(+), 29 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 51ecc1b3ce..45523b9085 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -2082,8 +2082,8 @@ msgid "Too many channels in sample." msgstr "Terlalu banyak channel dalam sampel" #: shared-module/displayio/__init__.c -msgid "Too many display busses" -msgstr "Terlalu banyak tampilan bus" +msgid "Too many display busses; forgot display.release_displays() ?" +msgstr "" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -4390,6 +4390,9 @@ msgstr "zi harus berjenis float" msgid "zi must be of shape (n_section, 2)" msgstr "Zi harus berbentuk (n_section, 2)" +#~ msgid "Too many display busses" +#~ msgstr "Terlalu banyak tampilan bus" + #~ msgid "Hardware busy, try alternative pins" #~ msgstr "Perangkat keras sibuk, coba pin alternatif" diff --git a/locale/cs.po b/locale/cs.po index 063af8520e..ed7a98bf0b 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -2071,7 +2071,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/de_DE.po b/locale/de_DE.po index ade8b1e291..42d8107441 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -2114,8 +2114,8 @@ msgid "Too many channels in sample." msgstr "Zu viele Kanäle im sample." #: shared-module/displayio/__init__.c -msgid "Too many display busses" -msgstr "Zu viele Anzeigebusse" +msgid "Too many display busses; forgot display.release_displays() ?" +msgstr "" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -4463,6 +4463,9 @@ msgstr "zi muss eine Gleitkommazahl sein" msgid "zi must be of shape (n_section, 2)" msgstr "zi muss die Form (n_section, 2) haben" +#~ msgid "Too many display busses" +#~ msgstr "Zu viele Anzeigebusse" + #~ msgid "Cannot transfer without MOSI and MISO pins" #~ msgstr "Kann nicht ohne MISO und MOSI Pins transferieren" diff --git a/locale/el.po b/locale/el.po index 7c8998b140..db55e92252 100644 --- a/locale/el.po +++ b/locale/el.po @@ -2085,7 +2085,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/en_GB.po b/locale/en_GB.po index cdda9a8f9b..7b1646a846 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -2087,8 +2087,8 @@ msgid "Too many channels in sample." msgstr "Too many channels in sample." #: shared-module/displayio/__init__.c -msgid "Too many display busses" -msgstr "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" +msgstr "" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -4404,6 +4404,9 @@ msgstr "zi must be of float type" msgid "zi must be of shape (n_section, 2)" msgstr "zi must be of shape (n_section, 2)" +#~ msgid "Too many display busses" +#~ msgstr "Too many display busses" + #~ msgid "Cannot transfer without MOSI and MISO pins" #~ msgstr "Cannot transfer without MOSI and MISO pins" diff --git a/locale/es.po b/locale/es.po index 0e892a1636..070fe6cc41 100644 --- a/locale/es.po +++ b/locale/es.po @@ -2126,8 +2126,8 @@ msgid "Too many channels in sample." msgstr "Demasiados canales en sample." #: shared-module/displayio/__init__.c -msgid "Too many display busses" -msgstr "Demasiados buses de pantalla" +msgid "Too many display busses; forgot display.release_displays() ?" +msgstr "" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -4459,6 +4459,9 @@ msgstr "zi debe ser de tipo flotante" msgid "zi must be of shape (n_section, 2)" msgstr "zi debe ser una forma (n_section,2)" +#~ msgid "Too many display busses" +#~ msgstr "Demasiados buses de pantalla" + #~ msgid "Cannot transfer without MOSI and MISO pins" #~ msgstr "No puede ser transferido si los pines MOSI y MISO" diff --git a/locale/fil.po b/locale/fil.po index 8d7ea45e45..8f0c316c0e 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -2072,7 +2072,7 @@ msgid "Too many channels in sample." msgstr "Sobra ang channels sa sample." #: shared-module/displayio/__init__.c -msgid "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/fr.po b/locale/fr.po index 1d8a0b8b4b..b6f111e30e 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -2133,8 +2133,8 @@ msgid "Too many channels in sample." msgstr "Trop de canaux dans l'échantillon." #: shared-module/displayio/__init__.c -msgid "Too many display busses" -msgstr "Trop de bus d'affichage" +msgid "Too many display busses; forgot display.release_displays() ?" +msgstr "" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -4482,6 +4482,9 @@ msgstr "zi doit être de type float" msgid "zi must be of shape (n_section, 2)" msgstr "zi doit être de forme (n_section, 2)" +#~ msgid "Too many display busses" +#~ msgstr "Trop de bus d'affichage" + #~ msgid "Cannot transfer without MOSI and MISO pins" #~ msgstr "Impossible de transférer sans une broche MOSI ou MISO" diff --git a/locale/hi.po b/locale/hi.po index e3faa63ef1..0f2d364447 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -2056,7 +2056,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/it_IT.po b/locale/it_IT.po index 4e020abc59..9f469e92ed 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -2079,7 +2079,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/ja.po b/locale/ja.po index 898ee0ecec..d20c5050a7 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -2072,7 +2072,7 @@ msgid "Too many channels in sample." msgstr "サンプルのチャンネル数が多すぎます" #: shared-module/displayio/__init__.c -msgid "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/ko.po b/locale/ko.po index a9f2802a24..e6d207ed28 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -2059,7 +2059,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/nl.po b/locale/nl.po index 380f48f925..ded4e7f621 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -2077,8 +2077,8 @@ msgid "Too many channels in sample." msgstr "Teveel kanalen in sample." #: shared-module/displayio/__init__.c -msgid "Too many display busses" -msgstr "Teveel beeldscherm bussen" +msgid "Too many display busses; forgot display.release_displays() ?" +msgstr "" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -4395,6 +4395,9 @@ msgstr "zi moet van type float zijn" msgid "zi must be of shape (n_section, 2)" msgstr "zi moet vorm (n_section, 2) hebben" +#~ msgid "Too many display busses" +#~ msgstr "Teveel beeldscherm bussen" + #~ msgid "Hardware busy, try alternative pins" #~ msgstr "Hardware bezig, probeer alternatieve pinnen" diff --git a/locale/pl.po b/locale/pl.po index 4f7e4c4f3e..075faf0766 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -2064,8 +2064,8 @@ msgid "Too many channels in sample." msgstr "Zbyt wiele kanałów." #: shared-module/displayio/__init__.c -msgid "Too many display busses" -msgstr "Zbyt wiele magistrali" +msgid "Too many display busses; forgot display.release_displays() ?" +msgstr "" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -4371,6 +4371,9 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#~ msgid "Too many display busses" +#~ msgstr "Zbyt wiele magistrali" + #~ msgid "Hardware busy, try alternative pins" #~ msgstr "Sprzęt zajęty, wypróbuj alternatywne piny" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index e9368e97ef..9eca832ae9 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -2121,8 +2121,8 @@ msgid "Too many channels in sample." msgstr "Muitos canais na amostra." #: shared-module/displayio/__init__.c -msgid "Too many display busses" -msgstr "Muitos barramentos estão sendo exibidos" +msgid "Too many display busses; forgot display.release_displays() ?" +msgstr "" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -4460,6 +4460,9 @@ msgstr "zi deve ser de um tipo float" msgid "zi must be of shape (n_section, 2)" msgstr "zi deve estar na forma (n_section, 2)" +#~ msgid "Too many display busses" +#~ msgstr "Muitos barramentos estão sendo exibidos" + #~ msgid "Cannot transfer without MOSI and MISO pins" #~ msgstr "Não é possível transferir sem os pinos MOSI e MISO" diff --git a/locale/ru.po b/locale/ru.po index 7d7effef42..cf7d8724f1 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -2119,7 +2119,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/sv.po b/locale/sv.po index 5160cb795a..9b6b650966 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -2098,8 +2098,8 @@ msgid "Too many channels in sample." msgstr "För många kanaler i sampling." #: shared-module/displayio/__init__.c -msgid "Too many display busses" -msgstr "För många display-bussar" +msgid "Too many display busses; forgot display.release_displays() ?" +msgstr "" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -4422,6 +4422,9 @@ msgstr "zi måste vara av typ float" msgid "zi must be of shape (n_section, 2)" msgstr "zi måste vara i formen (n_section, 2)" +#~ msgid "Too many display busses" +#~ msgstr "För många display-bussar" + #~ msgid "Cannot transfer without MOSI and MISO pins" #~ msgstr "Det går inte att överföra utan MOSI- och MISO-pinnar" diff --git a/locale/tr.po b/locale/tr.po index d2a7184bd8..0e2b0e1122 100644 --- a/locale/tr.po +++ b/locale/tr.po @@ -2078,7 +2078,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses" +msgid "Too many display busses; forgot display.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index bd67ab9500..3ebc8166f1 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -2103,8 +2103,8 @@ msgid "Too many channels in sample." msgstr "Chōuyàng zhōng de píndào tài duō." #: shared-module/displayio/__init__.c -msgid "Too many display busses" -msgstr "Xiǎnshì zǒngxiàn tài duōle" +msgid "Too many display busses; forgot display.release_displays() ?" +msgstr "" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -4428,6 +4428,9 @@ msgstr "zi bìxū wèi fú diǎn xíng" msgid "zi must be of shape (n_section, 2)" msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)" +#~ msgid "Too many display busses" +#~ msgstr "Xiǎnshì zǒngxiàn tài duōle" + #~ msgid "Cannot transfer without MOSI and MISO pins" #~ msgstr "méiyǒu MOSI hé MISO yǐnjiǎo, wúfǎ chuánshū" From a51be16d9ec6ff29c758ebe68725479e48a4a4bf Mon Sep 17 00:00:00 2001 From: elpekenin Date: Sat, 29 Jul 2023 15:10:09 +0200 Subject: [PATCH 183/241] Fix typo, oopsie --- locale/circuitpython.pot | 2 +- shared-module/displayio/__init__.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index 665594c1b9..f32d14c409 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -2056,7 +2056,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/shared-module/displayio/__init__.c b/shared-module/displayio/__init__.c index 2ec0fa7316..f01cca781e 100644 --- a/shared-module/displayio/__init__.c +++ b/shared-module/displayio/__init__.c @@ -386,5 +386,5 @@ primary_display_bus_t *allocate_display_bus_or_raise(void) { if (result) { return result; } - mp_raise_RuntimeError(translate("Too many display busses; forgot display.release_displays() ?")); + mp_raise_RuntimeError(translate("Too many display busses; forgot displayio.release_displays() ?")); } From e1fd97170a5a9db4be4cd8e09ed5d5fbc34f9c79 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 29 Jul 2023 15:31:41 +0200 Subject: [PATCH 184/241] 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 | 2 +- locale/cs.po | 2 +- locale/de_DE.po | 2 +- locale/el.po | 2 +- locale/en_GB.po | 2 +- locale/es.po | 2 +- locale/fil.po | 2 +- locale/fr.po | 2 +- locale/hi.po | 2 +- locale/it_IT.po | 2 +- locale/ja.po | 2 +- locale/ko.po | 2 +- locale/nl.po | 2 +- locale/pl.po | 2 +- locale/pt_BR.po | 2 +- locale/ru.po | 2 +- locale/sv.po | 2 +- locale/tr.po | 2 +- locale/zh_Latn_pinyin.po | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 45523b9085..302186b549 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -2082,7 +2082,7 @@ msgid "Too many channels in sample." msgstr "Terlalu banyak channel dalam sampel" #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/cs.po b/locale/cs.po index ed7a98bf0b..2a23f16976 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -2071,7 +2071,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/de_DE.po b/locale/de_DE.po index 42d8107441..349539049f 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -2114,7 +2114,7 @@ msgid "Too many channels in sample." msgstr "Zu viele Kanäle im sample." #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/el.po b/locale/el.po index db55e92252..f9b61bdeae 100644 --- a/locale/el.po +++ b/locale/el.po @@ -2085,7 +2085,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/en_GB.po b/locale/en_GB.po index 7b1646a846..bedbe3c09a 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -2087,7 +2087,7 @@ msgid "Too many channels in sample." msgstr "Too many channels in sample." #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/es.po b/locale/es.po index 070fe6cc41..208d6edca8 100644 --- a/locale/es.po +++ b/locale/es.po @@ -2126,7 +2126,7 @@ msgid "Too many channels in sample." msgstr "Demasiados canales en sample." #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/fil.po b/locale/fil.po index 8f0c316c0e..1d7373f63e 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -2072,7 +2072,7 @@ msgid "Too many channels in sample." msgstr "Sobra ang channels sa sample." #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/fr.po b/locale/fr.po index b6f111e30e..ffddbdf6f1 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -2133,7 +2133,7 @@ msgid "Too many channels in sample." msgstr "Trop de canaux dans l'échantillon." #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/hi.po b/locale/hi.po index 0f2d364447..18ed2bf5fc 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -2056,7 +2056,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/it_IT.po b/locale/it_IT.po index 9f469e92ed..4a0101fc47 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -2079,7 +2079,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/ja.po b/locale/ja.po index d20c5050a7..b3d7dd67b3 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -2072,7 +2072,7 @@ msgid "Too many channels in sample." msgstr "サンプルのチャンネル数が多すぎます" #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/ko.po b/locale/ko.po index e6d207ed28..1946d9572f 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -2059,7 +2059,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/nl.po b/locale/nl.po index ded4e7f621..ea4d0698b4 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -2077,7 +2077,7 @@ msgid "Too many channels in sample." msgstr "Teveel kanalen in sample." #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/pl.po b/locale/pl.po index 075faf0766..5817ac80c7 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -2064,7 +2064,7 @@ msgid "Too many channels in sample." msgstr "Zbyt wiele kanałów." #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 9eca832ae9..66f3f3c0b9 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -2121,7 +2121,7 @@ msgid "Too many channels in sample." msgstr "Muitos canais na amostra." #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/ru.po b/locale/ru.po index cf7d8724f1..043d802835 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -2119,7 +2119,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/sv.po b/locale/sv.po index 9b6b650966..7d1226f051 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -2098,7 +2098,7 @@ msgid "Too many channels in sample." msgstr "För många kanaler i sampling." #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/tr.po b/locale/tr.po index 0e2b0e1122..a58eb36211 100644 --- a/locale/tr.po +++ b/locale/tr.po @@ -2078,7 +2078,7 @@ msgid "Too many channels in sample." msgstr "" #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 3ebc8166f1..32527b4e8b 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -2103,7 +2103,7 @@ msgid "Too many channels in sample." msgstr "Chōuyàng zhōng de píndào tài duō." #: shared-module/displayio/__init__.c -msgid "Too many display busses; forgot display.release_displays() ?" +msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" #: shared-module/displayio/__init__.c From a9da9bc3035a7f84c4097a25afb52a1010f5b6d9 Mon Sep 17 00:00:00 2001 From: KB Sriram Date: Sat, 29 Jul 2023 18:11:48 -0700 Subject: [PATCH 185/241] docs: update sphinx conf.py to use cp_typing. - Adds circuitpython_typing to the intersphinx configuration. - Adds a workaround to resolve TypeAliased references. Fixes https://github.com/adafruit/circuitpython/issues/8119 --- conf.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/conf.py b/conf.py index e14c6ace83..645961c457 100644 --- a/conf.py +++ b/conf.py @@ -30,6 +30,7 @@ from collections import defaultdict from sphinx.transforms import SphinxTransform from docutils import nodes from sphinx import addnodes +from sphinx.ext import intersphinx tools_describe = str(pathlib.Path(__file__).parent / "tools/describe") @@ -441,7 +442,8 @@ texinfo_documents = [ # Example configuration for intersphinx: refer to the Python standard library. intersphinx_mapping = {"cpython": ('https://docs.python.org/3/', None), - "register": ('https://circuitpython.readthedocs.io/projects/register/en/latest/', None)} + "register": ('https://circuitpython.readthedocs.io/projects/register/en/latest/', None), + "typing": ('https://circuitpython.readthedocs.io/projects/adafruit-circuitpython-typing/en/latest/', None)} # Adapted from sphinxcontrib-redirects from sphinx.builders import html as builders @@ -483,6 +485,26 @@ def generate_redirects(app): with open(redirected_filename, 'w') as f: f.write(TEMPLATE % urllib.parse.quote(to_path, '#/')) +def adafruit_typing_workaround(app, env, node, contnode): + # Sphinx marks a requesting node that uses circuitpython-typing + # as looking for a "class" definition, but unfortunately + # Sphinx doesn't recognize TypeAlias based types usefully from + # the typing library. + # (see: https://github.com/sphinx-doc/sphinx/issues/8934) + # Instead, it categorizes these types as "data". + # (see: python -m sphinx.ext.intersphinx \ + # https://docs.circuitpython.org/projects/adafruit-circuitpython-typing/en/latest/objects.inv) + # This workaround traps missing references, checks if + # they are likely to be in the circuitpython_typing package, + # and changes the requesting type from "class" to "data" if + # needed, and re-tries the reference resolver. + ref = node.get("reftarget", None) + if ref and ref.startswith("circuitpython_typing."): + dtype = node.get("reftype", None) + if dtype != "data": + node.attributes.update({"reftype": "data"}) + return intersphinx.missing_reference(app, env, node, contnode) + class CoreModuleTransform(SphinxTransform): default_priority = 870 @@ -519,4 +541,5 @@ def setup(app): app.add_js_file("filter.js") app.add_config_value('redirects_file', 'redirects', 'env') app.connect('builder-inited', generate_redirects) + app.connect('missing-reference', adafruit_typing_workaround) app.add_transform(CoreModuleTransform) From 88608ce1cb7786f83d7514b26454898c797052f3 Mon Sep 17 00:00:00 2001 From: Pablo Martinez Bernal Date: Sat, 29 Jul 2023 14:13:34 +0000 Subject: [PATCH 186/241] Translated using Weblate (Spanish) Currently translated at 100.0% (996 of 996 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/es/ --- locale/es.po | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/locale/es.po b/locale/es.po index 208d6edca8..f76b3d6534 100644 --- a/locale/es.po +++ b/locale/es.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-16 04:32+0000\n" -"Last-Translator: Jose David M \n" +"PO-Revision-Date: 2023-07-30 11:47+0000\n" +"Last-Translator: Pablo Martinez Bernal \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" @@ -1810,7 +1810,7 @@ msgstr "Los pines deben compartir la división PWM" #: shared-module/usb/core/Device.c msgid "Pipe error" -msgstr "" +msgstr "Error de conexión" #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" @@ -2128,6 +2128,7 @@ msgstr "Demasiados canales en sample." #: shared-module/displayio/__init__.c msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" +"Demasiados buses para displays. Olvidaste displayio.release_displays() ?" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -2858,7 +2859,7 @@ msgstr "no se puede crear instancia" #: extmod/ulab/code/ndarray.c msgid "cannot delete array elements" -msgstr "" +msgstr "no se pudo eliminar elementos del array" #: py/runtime.c msgid "cannot import name %q" @@ -3323,11 +3324,11 @@ msgstr "ensamblador en línea debe ser una función" #: extmod/ulab/code/numpy/vector.c msgid "input and output dimensions differ" -msgstr "" +msgstr "dimensiones de entrada y salida distintas" #: extmod/ulab/code/numpy/vector.c msgid "input and output shapes differ" -msgstr "" +msgstr "formas de entrada y salida distintas" #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" @@ -3663,7 +3664,7 @@ msgstr "yield nativo" #: extmod/ulab/code/ndarray.c msgid "ndarray length overflows" -msgstr "" +msgstr "la longitud de ndarray desborda" #: py/runtime.c #, c-format @@ -3768,7 +3769,7 @@ msgstr "no esta implementado para complex dtype" #: extmod/ulab/code/numpy/bitwise.c msgid "not supported for input types" -msgstr "" +msgstr "no soportado para los tipos de entrada" #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" @@ -3920,11 +3921,11 @@ msgstr "La matriz de salida es demasiado pequeña" #: extmod/ulab/code/numpy/vector.c msgid "out keyword is not supported for complex dtype" -msgstr "" +msgstr "out no soportado para el dtype 'complex'" #: extmod/ulab/code/numpy/vector.c msgid "out keyword is not supported for function" -msgstr "" +msgstr "out no soportado para funciones" #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" @@ -3932,11 +3933,11 @@ msgstr "la matriz de salida debe ser densa de números float" #: extmod/ulab/code/numpy/vector.c msgid "out must be an ndarray" -msgstr "" +msgstr "out debe ser un ndarray" #: extmod/ulab/code/numpy/vector.c msgid "out must be of float dtype" -msgstr "" +msgstr "el dtype de out debe ser float" #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" From 9ff97b4c377d9059393c6c35c875666e848ee7bb Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Sat, 29 Jul 2023 18:20:29 +0000 Subject: [PATCH 187/241] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (996 of 996 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/pt_BR/ --- locale/pt_BR.po | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 66f3f3c0b9..ed7b6ae9c4 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-29 12:56+0000\n" +"PO-Revision-Date: 2023-07-30 11:47+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -2123,6 +2123,8 @@ msgstr "Muitos canais na amostra." #: shared-module/displayio/__init__.c msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" +"Excesso de barramentos de exibição; esqueceu do displayio.release_displays() " +"?" #: shared-module/displayio/__init__.c msgid "Too many displays" From a32e933876fd1d0e78e8936cc5d8b28cf05131c5 Mon Sep 17 00:00:00 2001 From: Jonny Bergdahl Date: Sat, 29 Jul 2023 13:59:43 +0000 Subject: [PATCH 188/241] Translated using Weblate (Swedish) Currently translated at 100.0% (996 of 996 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/sv/ --- locale/sv.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/sv.po b/locale/sv.po index 7d1226f051..df519cab05 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-29 12:56+0000\n" +"PO-Revision-Date: 2023-07-30 11:47+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" "Language: sv\n" @@ -2099,7 +2099,7 @@ msgstr "För många kanaler i sampling." #: shared-module/displayio/__init__.c msgid "Too many display busses; forgot displayio.release_displays() ?" -msgstr "" +msgstr "För många displaybussar; glömt displayio.release_displays() ?" #: shared-module/displayio/__init__.c msgid "Too many displays" From 4f30c178d6fde3796247a8f93b423b635dbc8826 Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Sat, 29 Jul 2023 23:30:40 +0000 Subject: [PATCH 189/241] Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (996 of 996 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/en_GB/ --- locale/en_GB.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/en_GB.po b/locale/en_GB.po index bedbe3c09a..0abf8ef25e 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-07-28 00:10+0000\n" +"PO-Revision-Date: 2023-07-30 11:47+0000\n" "Last-Translator: Andi Chandler \n" "Language-Team: none\n" "Language: en_GB\n" @@ -1779,7 +1779,7 @@ msgstr "Pins must share PWM slice" #: shared-module/usb/core/Device.c msgid "Pipe error" -msgstr "" +msgstr "Pipe error" #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" @@ -2088,7 +2088,7 @@ msgstr "Too many channels in sample." #: shared-module/displayio/__init__.c msgid "Too many display busses; forgot displayio.release_displays() ?" -msgstr "" +msgstr "Too many display busses; forgot displayio.release_displays() ?" #: shared-module/displayio/__init__.c msgid "Too many displays" From d5daa7ad27578ddad1920204afb844be6cd6b5c9 Mon Sep 17 00:00:00 2001 From: KB Sriram Date: Sun, 30 Jul 2023 22:13:10 -0700 Subject: [PATCH 190/241] boards/beetle-esp32-c3: fix sdkconfig minor typo. Fixes https://github.com/adafruit/circuitpython/issues/8239 --- ports/espressif/boards/beetle-esp32-c3/sdkconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/boards/beetle-esp32-c3/sdkconfig b/ports/espressif/boards/beetle-esp32-c3/sdkconfig index 68be40df7a..69da6d30fd 100644 --- a/ports/espressif/boards/beetle-esp32-c3/sdkconfig +++ b/ports/espressif/boards/beetle-esp32-c3/sdkconfig @@ -1,5 +1,5 @@ # # LWIP # -CONFIG_LWIP_LOCAL_HOSTNAME="beetle-esp32-c3 +CONFIG_LWIP_LOCAL_HOSTNAME="beetle-esp32-c3" # end of LWIP From a9c828011a2c392779431496564785fff42d09b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Smitka?= Date: Mon, 31 Jul 2023 12:22:27 +0200 Subject: [PATCH 191/241] Fix RGB/BGR color order --- ports/raspberrypi/boards/pajenicko_picopad/board.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/raspberrypi/boards/pajenicko_picopad/board.c b/ports/raspberrypi/boards/pajenicko_picopad/board.c index 0d092a1f4d..e81525d0d8 100644 --- a/ports/raspberrypi/boards/pajenicko_picopad/board.c +++ b/ports/raspberrypi/boards/pajenicko_picopad/board.c @@ -39,7 +39,7 @@ displayio_fourwire_obj_t board_display_obj; uint8_t display_init_sequence[] = { 0x01, 0 | DELAY, 150, // SWRESET - 0x36, 1, 0x68, // MADCTL + 0x36, 1, 0x60, // MADCTL 0x35, 1, 0x00, // TEON 0xB2, 5, 0x0c, 0x0c, 0x00, 0x33, 0x33, // FRMCTR2 0x3A, 1, 0x05, // COLMOD From e8307a4c02750922d7864147555c85e3fc17a27f Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 31 Jul 2023 10:21:53 -0500 Subject: [PATCH 192/241] enable-if-any/all deserve some commentary. --- py/circuitpy_mpconfig.mk | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 47025d564c..522d14af99 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -26,17 +26,18 @@ # Boards default to all modules enabled (with exceptions) # Manually disable by overriding in #mpconfigboard.mk +# These Makefile variables are used to implement the "any" and "all" functions. +# Make's "sort" will transform a mixed sequence of 0s and 1s to "0 1" (because +# it also eliminates duplicates), or a non-mixed sequence of "0" or "1" to just +# itself. Thus, if all the inputs are 1 then the first word will be 1; if any +# of the inputs are 1, then the last word will be 1. enable-if-any=$(lastword $(sort $(1) 0)) enable-if-all=$(firstword $(sort $(1) 1)) -#$(info enable-if-any 0 1 -> $(call enable-if-any,0 1)) -#$(info enable-if-any 1 0 -> $(call enable-if-any,1 0)) -#$(info enable-if-any 1 1 -> $(call enable-if-any,1 1)) -#$(info enable-if-any 0 0 -> $(call enable-if-any,0 0)) -#$(info enable-if-all 0 1 -> $(call enable-if-all,0 1)) -#$(info enable-if-all 1 0 -> $(call enable-if-all,1 0)) -#$(info enable-if-all 1 1 -> $(call enable-if-all,1 1)) -#$(info enable-if-all 0 0 -> $(call enable-if-all,0 0)) +# To use any/all, you "$(call)" it, with the values to test after a comma. +# Usually the values are other $(CIRCUITPY_foo) variables. The definition +# of CIRCUITPY_AUDIOCORE and CIRCUITPY_AUDIOMP3 below are typical of how +# any/all are expected to be used. # Always on. Present here to help generate documentation module support matrix for "builtins". CIRCUITPY = 1 From f3c4a981c31a307a3b21cc17ab2c1daf4ffad605 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 31 Jul 2023 10:22:54 -0500 Subject: [PATCH 193/241] be explicit about the prefix we expect to remove from frozen_path --- docs/shared_bindings_matrix.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index 75f5e37337..ec23d4af7f 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -251,7 +251,8 @@ def frozen_modules_from_dirs(frozen_mpy_dirs, withurl): """ frozen_modules = [] for frozen_path in filter(lambda x: x, frozen_mpy_dirs.split(" ")): - source_dir = get_circuitpython_root_dir() / frozen_path[6:] + frozen_path = frozen_path.removeprefix('../../') + source_dir = get_circuitpython_root_dir() / frozen_path url_repository = get_repository_url(source_dir) for sub in source_dir.glob("*"): if sub.name in FROZEN_EXCLUDES: From 2e040b0d13ff5b185e9845ae9a9b908a422b938a Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 31 Jul 2023 10:41:10 -0500 Subject: [PATCH 194/241] make starting with an unexpected prefix an exception --- docs/shared_bindings_matrix.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index ec23d4af7f..27c48fb293 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -239,6 +239,10 @@ def get_repository_url(directory): repository_urls[directory] = path return path +def remove_prefix(s, prefix): + if not s.startswith(prefix): + raise ValueError(f"{s=} does not start with {prefix=}") + return s.removeprefix(prefix) def frozen_modules_from_dirs(frozen_mpy_dirs, withurl): """ @@ -251,7 +255,7 @@ def frozen_modules_from_dirs(frozen_mpy_dirs, withurl): """ frozen_modules = [] for frozen_path in filter(lambda x: x, frozen_mpy_dirs.split(" ")): - frozen_path = frozen_path.removeprefix('../../') + frozen_path = remove_prefix(frozen_path, '../../') source_dir = get_circuitpython_root_dir() / frozen_path url_repository = get_repository_url(source_dir) for sub in source_dir.glob("*"): From cd181eb5b4801ca7bbf736df295c34e7f59db294 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 31 Jul 2023 10:44:06 -0500 Subject: [PATCH 195/241] expand on the 0/1 requirement --- py/circuitpy_mpconfig.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk index 522d14af99..d313746e13 100644 --- a/py/circuitpy_mpconfig.mk +++ b/py/circuitpy_mpconfig.mk @@ -27,6 +27,9 @@ # Manually disable by overriding in #mpconfigboard.mk # These Makefile variables are used to implement the "any" and "all" functions. +# Note that these only work when the arguments expand to "0" and/or "1" but not +# if they expand to other values like "yes", "/bin/sh", or "false". +# # Make's "sort" will transform a mixed sequence of 0s and 1s to "0 1" (because # it also eliminates duplicates), or a non-mixed sequence of "0" or "1" to just # itself. Thus, if all the inputs are 1 then the first word will be 1; if any From 539f34f7fdd170af92c7b17875da299299e04dc4 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Tue, 1 Aug 2023 13:16:38 -0700 Subject: [PATCH 196/241] Three small changes 1. Raise an exception when creating a USB device when host isn't initialized. 2. Mark RP2040 dtcm_bss as NOLOAD since it doesn't need to be loaded (just zeroed.) 3. Fix submodule location for ulab to Jeff's copy. --- .gitmodules | 2 +- locale/circuitpython.pot | 4 ++++ ports/raspberrypi/link.ld | 2 +- shared-module/usb/core/Device.c | 4 ++++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 5c29c41b9f..dcd9415759 100644 --- a/.gitmodules +++ b/.gitmodules @@ -106,7 +106,7 @@ url = https://github.com/adafruit/Adafruit_CircuitPython_Register.git [submodule "extmod/ulab"] path = extmod/ulab - url = https://github.com/v923z/micropython-ulab + url = https://github.com/jepler/micropython-ulab [submodule "frozen/Adafruit_CircuitPython_ESP32SPI"] path = frozen/Adafruit_CircuitPython_ESP32SPI url = https://github.com/adafruit/Adafruit_CircuitPython_ESP32SPI diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index f32d14c409..8c32760ab5 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -1536,6 +1536,10 @@ msgstr "" msgid "No timer available" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/ports/raspberrypi/link.ld b/ports/raspberrypi/link.ld index 0e584c94ac..0e0e7a3c5c 100644 --- a/ports/raspberrypi/link.ld +++ b/ports/raspberrypi/link.ld @@ -211,7 +211,7 @@ SECTIONS _ld_dtcm_data_flash_copy = LOADADDR(.dtcm_data); _ld_dtcm_data_size = SIZEOF(.dtcm_data); - .dtcm_bss : + .dtcm_bss (NOLOAD) : { . = ALIGN(4); diff --git a/shared-module/usb/core/Device.c b/shared-module/usb/core/Device.c index faed49e383..b8c4e4fcd1 100644 --- a/shared-module/usb/core/Device.c +++ b/shared-module/usb/core/Device.c @@ -51,6 +51,10 @@ void tuh_umount_cb(uint8_t dev_addr) { STATIC xfer_result_t _xfer_result; STATIC size_t _actual_len; bool common_hal_usb_core_device_construct(usb_core_device_obj_t *self, uint8_t device_number) { + if (!tuh_inited()) { + mp_raise_RuntimeError(translate("No usb host port initialized")); + } + if (device_number == 0 || device_number > CFG_TUH_DEVICE_MAX + CFG_TUH_HUB) { return false; } From 2b0f1cd087bc75f3ee9472e8c1575063ddb28c86 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 2 Aug 2023 07:52:45 -0500 Subject: [PATCH 197/241] espressif: fix dependencies in esp-idf modules while developing esp-camera I had the problem that firmware.elf was not regenerated if the only file I edited was in the esp32-camera submodule. By telling make that $(IDF_CMAKE_TARGETS), the list of .a fliles produced by ninja-building esp-idf, depend on esp-idf-stamp and that firmware.elf in turn depends on these files, the ninja build is re-run on each make, which is reasonably quick if nothing needs to be rebuilt. --- ports/espressif/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ports/espressif/Makefile b/ports/espressif/Makefile index 151c31c373..b1bfa4f8c7 100644 --- a/ports/espressif/Makefile +++ b/ports/espressif/Makefile @@ -446,11 +446,13 @@ else all: $(BUILD)/firmware.bin endif +$(IDF_CMAKE_TARGETS): esp-idf-stamp + .PHONY: esp-idf-stamp esp-idf-stamp: $(BUILD)/esp-idf/config/sdkconfig.h $(Q)ninja -C $(BUILD)/esp-idf $(IDF_CMAKE_TARGETS) -$(BUILD)/firmware.elf: $(OBJ) | esp-idf-stamp +$(BUILD)/firmware.elf: $(OBJ) | esp-idf-stamp $(IDF_CMAKE_TARGETS) $(STEPECHO) "LINK $@" $(Q)$(CC) -o $@ $(LDFLAGS) $^ -Wl,--start-group $(ESP_IDF_COMPONENTS_EXPANDED) $(BINARY_BLOBS) $(MBEDTLS_COMPONENTS_LINK_EXPANDED) $(BUILD)/esp-idf/esp-idf/newlib/libnewlib.a -Wl,--end-group -u newlib_include_pthread_impl -u ld_include_highint_hdl -Wl,--start-group $(LIBS) -Wl,--end-group $(BUILD)/esp-idf/esp-idf/pthread/libpthread.a -u __cxx_fatal_exception From 4e01e6bbe513f99ffa22ec1de37a1eb18a34ce05 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 2 Aug 2023 08:09:13 -0500 Subject: [PATCH 198/241] adafruit-esp32s3-camera: set up backlight at boot & add solarize the backlight situation will be revisited with the next board prototype, but it's good to prove this can be done. Depends on https://github.com/adafruit/esp32-camera/pull/6 which should be merged before this. --- .../boards/adafruit_esp32s3_camera/board.c | 64 +++++++++++++++++++ ports/espressif/esp32-camera | 2 +- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/ports/espressif/boards/adafruit_esp32s3_camera/board.c b/ports/espressif/boards/adafruit_esp32s3_camera/board.c index 0ec1046901..65042bcea5 100644 --- a/ports/espressif/boards/adafruit_esp32s3_camera/board.c +++ b/ports/espressif/boards/adafruit_esp32s3_camera/board.c @@ -35,6 +35,8 @@ #include "shared-bindings/board/__init__.h" #include "esp_log.h" +#include "esp_err.h" +#include "driver/i2c.h" displayio_fourwire_obj_t board_display_obj; @@ -50,7 +52,69 @@ uint8_t display_init_sequence[] = { 0x29, 0 | DELAY, 5, // _DISPON }; +#define I2C_MASTER_SCL_IO 34 +#define I2C_MASTER_SDA_IO 33 +#define I2C_MASTER_NUM 0 +#define I2C_MASTER_FREQ_HZ 400000 +#define I2C_MASTER_TX_BUF_DISABLE 0 +#define I2C_MASTER_RX_BUF_DISABLE 0 +#define I2C_MASTER_TIMEOUT_MS 1000 +#define I2C_WAIT 40 // Timing (in microseconds) for I2C + +#define AW9523_ADDR (0x5B) +#define AW9523_REG_SOFTRESET (0x7f) +#define AW9523_REG_OUTPUT0 (0x02) +#define AW9523_REG_CONFIG0 (0x04) +#define AW9523_DEFAULT_OUTPUT (0) +#define AW9523_DEFAULT_CONFIG (0x2) + + +static void io_expander_backlight_init(void) { + int i2c_num = I2C_MASTER_NUM; + i2c_config_t conf = { + .mode = I2C_MODE_MASTER, + .sda_io_num = I2C_MASTER_SDA_IO, + .scl_io_num = I2C_MASTER_SCL_IO, + .sda_pullup_en = GPIO_PULLUP_ENABLE, + .scl_pullup_en = GPIO_PULLUP_ENABLE, + .master.clk_speed = I2C_MASTER_FREQ_HZ, + }; + i2c_param_config(i2c_num, &conf); + i2c_driver_install(i2c_num, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0); + i2c_cmd_handle_t cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, AW9523_ADDR << 1 | I2C_MASTER_WRITE, true); + i2c_master_write_byte(cmd, AW9523_REG_SOFTRESET, true); + i2c_master_write_byte(cmd, 0, true); + i2c_master_stop(cmd); + i2c_master_cmd_begin(i2c_num, cmd, 1000 / portTICK_RATE_MS); + i2c_cmd_link_delete(cmd); + + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, AW9523_ADDR << 1 | I2C_MASTER_WRITE, true); + i2c_master_write_byte(cmd, AW9523_REG_CONFIG0, true); + i2c_master_write_byte(cmd, AW9523_DEFAULT_CONFIG >> 8, true); + i2c_master_write_byte(cmd, AW9523_DEFAULT_CONFIG & 0xff, true); + i2c_master_stop(cmd); + i2c_master_cmd_begin(i2c_num, cmd, 1000 / portTICK_RATE_MS); + i2c_cmd_link_delete(cmd); + + cmd = i2c_cmd_link_create(); + i2c_master_start(cmd); + i2c_master_write_byte(cmd, AW9523_ADDR << 1 | I2C_MASTER_WRITE, true); + i2c_master_write_byte(cmd, AW9523_REG_OUTPUT0, true); + i2c_master_write_byte(cmd, AW9523_DEFAULT_OUTPUT >> 8, true); + i2c_master_write_byte(cmd, AW9523_DEFAULT_OUTPUT & 0xff, true); + i2c_master_stop(cmd); + i2c_master_cmd_begin(i2c_num, cmd, 1000 / portTICK_RATE_MS); + i2c_cmd_link_delete(cmd); + + i2c_driver_delete(i2c_num); +} + void board_init(void) { + io_expander_backlight_init(); busio_spi_obj_t *spi = common_hal_board_create_spi(0); displayio_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; bus->base.type = &displayio_fourwire_type; diff --git a/ports/espressif/esp32-camera b/ports/espressif/esp32-camera index 2cd2a6d69f..2758089a06 160000 --- a/ports/espressif/esp32-camera +++ b/ports/espressif/esp32-camera @@ -1 +1 @@ -Subproject commit 2cd2a6d69faaba9ebb6105814a50039d82e2f899 +Subproject commit 2758089a06ccae79d8fcab6c93e2ca3761646f9f From 94ed725fd30d5f878e2dda27510b97d605944154 Mon Sep 17 00:00:00 2001 From: Jeremy Littler <87398149+BrainBoardz@users.noreply.github.com> Date: Wed, 2 Aug 2023 10:24:58 -0400 Subject: [PATCH 199/241] Update mpconfigboard.h --- ports/espressif/boards/brainboardz_neuron/mpconfigboard.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ports/espressif/boards/brainboardz_neuron/mpconfigboard.h b/ports/espressif/boards/brainboardz_neuron/mpconfigboard.h index 72cda83c9b..760041ddf4 100755 --- a/ports/espressif/boards/brainboardz_neuron/mpconfigboard.h +++ b/ports/espressif/boards/brainboardz_neuron/mpconfigboard.h @@ -35,6 +35,6 @@ #define DEFAULT_I2C_BUS_SCL (&pin_GPIO9) #define DEFAULT_I2C_BUS_SDA (&pin_GPIO8) -#define DEFAULT_SPI_BUS_SCK (&pin_GPIO14) -#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO15) -#define DEFAULT_SPI_BUS_MISO (&pin_GPIO13) +#define DEFAULT_SPI_BUS_SCK (&pin_GPIO40) +#define DEFAULT_SPI_BUS_MOSI (&pin_GPIO41) +#define DEFAULT_SPI_BUS_MISO (&pin_GPIO39) From 1325e5e2b95ab9fb70444cc7fe7f264b7c083b3d Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 2 Aug 2023 09:24:14 -0500 Subject: [PATCH 200/241] Add index.html as a redirect to README.html closes #8246 --- docs/redirects.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/redirects.txt b/docs/redirects.txt index b8282635ab..47ec20d577 100644 --- a/docs/redirects.txt +++ b/docs/redirects.txt @@ -1,3 +1,4 @@ +index.rst README.html shared-bindings//__init__.rst shared-bindings// shared-bindings/_bleio/Adapter.rst shared-bindings/_bleio/#_bleio.Adapter shared-bindings/_bleio/Address.rst shared-bindings/_bleio/#_bleio.Address From 37dbe3e24a841bc3a5969944171a0f37fd8823a8 Mon Sep 17 00:00:00 2001 From: Jeremy Littler <87398149+BrainBoardz@users.noreply.github.com> Date: Wed, 2 Aug 2023 10:32:40 -0400 Subject: [PATCH 201/241] Update pins.c --- .../boards/brainboardz_neuron/pins.c | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/ports/espressif/boards/brainboardz_neuron/pins.c b/ports/espressif/boards/brainboardz_neuron/pins.c index 5c198c20a7..9b16f410ba 100755 --- a/ports/espressif/boards/brainboardz_neuron/pins.c +++ b/ports/espressif/boards/brainboardz_neuron/pins.c @@ -23,36 +23,33 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_IO10), MP_ROM_PTR(&pin_GPIO10) }, { MP_ROM_QSTR(MP_QSTR_IO11), MP_ROM_PTR(&pin_GPIO11) }, { MP_ROM_QSTR(MP_QSTR_IO12), MP_ROM_PTR(&pin_GPIO12) }, - { MP_ROM_QSTR(MP_QSTR_IO13), MP_ROM_PTR(&pin_GPIO13) }, - { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO13) }, - { MP_ROM_QSTR(MP_QSTR_IO14), MP_ROM_PTR(&pin_GPIO14) }, - { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO14) }, - { MP_ROM_QSTR(MP_QSTR_IO15), MP_ROM_PTR(&pin_GPIO15) }, - { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO15) }, - { MP_ROM_QSTR(MP_QSTR_IO16), MP_ROM_PTR(&pin_GPIO16) }, - { MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO16) }, - { MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) }, { MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) }, { MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) }, { MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) }, - { MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) }, - { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO21) }, - + { MP_ROM_QSTR(MP_QSTR_IO35), MP_ROM_PTR(&pin_GPIO35) }, { MP_ROM_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) }, { MP_ROM_QSTR(MP_QSTR_IO37), MP_ROM_PTR(&pin_GPIO37) }, { MP_ROM_QSTR(MP_QSTR_IO38), MP_ROM_PTR(&pin_GPIO38) }, - { MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) }, - { MP_ROM_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) }, - { MP_ROM_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) }, - { MP_ROM_QSTR(MP_QSTR_IO42), MP_ROM_PTR(&pin_GPIO42) }, + { MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_GPIO39) }, + + { MP_ROM_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) }, + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_GPIO40) }, + + { MP_ROM_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_GPIO41) }, + + { MP_ROM_QSTR(MP_QSTR_IO42), MP_ROM_PTR(&pin_GPIO42) }, + { MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO42) }, + { MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) }, { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) }, @@ -61,7 +58,10 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) }, { MP_ROM_QSTR(MP_QSTR_IO46), MP_ROM_PTR(&pin_GPIO46) }, + { MP_ROM_QSTR(MP_QSTR_IO47), MP_ROM_PTR(&pin_GPIO47) }, + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO47) }, + { MP_ROM_QSTR(MP_QSTR_IO48), MP_ROM_PTR(&pin_GPIO48) }, { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, From b88e359b00e22d69fd2b83eea451c32e47fdeeaa Mon Sep 17 00:00:00 2001 From: Jeremy Littler <87398149+BrainBoardz@users.noreply.github.com> Date: Wed, 2 Aug 2023 10:41:46 -0400 Subject: [PATCH 202/241] Update pins.c --- ports/espressif/boards/brainboardz_neuron/pins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/boards/brainboardz_neuron/pins.c b/ports/espressif/boards/brainboardz_neuron/pins.c index 9b16f410ba..e079854470 100755 --- a/ports/espressif/boards/brainboardz_neuron/pins.c +++ b/ports/espressif/boards/brainboardz_neuron/pins.c @@ -49,7 +49,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_IO42), MP_ROM_PTR(&pin_GPIO42) }, { MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO42) }, - + { MP_ROM_QSTR(MP_QSTR_IO43), MP_ROM_PTR(&pin_GPIO43) }, { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) }, From f9b98ce54d01e389c14db6cb56c3d142d75d4b6a Mon Sep 17 00:00:00 2001 From: Jeremy Littler <87398149+BrainBoardz@users.noreply.github.com> Date: Wed, 2 Aug 2023 10:57:46 -0400 Subject: [PATCH 203/241] Update pins.c --- ports/espressif/boards/brainboardz_neuron/pins.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ports/espressif/boards/brainboardz_neuron/pins.c b/ports/espressif/boards/brainboardz_neuron/pins.c index e079854470..6f564f1347 100755 --- a/ports/espressif/boards/brainboardz_neuron/pins.c +++ b/ports/espressif/boards/brainboardz_neuron/pins.c @@ -31,8 +31,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) }, { MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) }, { MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) }, - { MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) }, - + { MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) }, { MP_ROM_QSTR(MP_QSTR_IO35), MP_ROM_PTR(&pin_GPIO35) }, { MP_ROM_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) }, { MP_ROM_QSTR(MP_QSTR_IO37), MP_ROM_PTR(&pin_GPIO37) }, From f7cc20e9369b92adaa16cb9b8c08b97593a8bd52 Mon Sep 17 00:00:00 2001 From: Jeremy Littler <87398149+BrainBoardz@users.noreply.github.com> Date: Wed, 2 Aug 2023 11:01:44 -0400 Subject: [PATCH 204/241] Update pins.c --- ports/espressif/boards/brainboardz_neuron/pins.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/espressif/boards/brainboardz_neuron/pins.c b/ports/espressif/boards/brainboardz_neuron/pins.c index 6f564f1347..62b95421f8 100755 --- a/ports/espressif/boards/brainboardz_neuron/pins.c +++ b/ports/espressif/boards/brainboardz_neuron/pins.c @@ -31,7 +31,7 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = { { MP_ROM_QSTR(MP_QSTR_IO18), MP_ROM_PTR(&pin_GPIO18) }, { MP_ROM_QSTR(MP_QSTR_IO19), MP_ROM_PTR(&pin_GPIO19) }, { MP_ROM_QSTR(MP_QSTR_IO20), MP_ROM_PTR(&pin_GPIO20) }, - { MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) }, + { MP_ROM_QSTR(MP_QSTR_IO21), MP_ROM_PTR(&pin_GPIO21) }, { MP_ROM_QSTR(MP_QSTR_IO35), MP_ROM_PTR(&pin_GPIO35) }, { MP_ROM_QSTR(MP_QSTR_IO36), MP_ROM_PTR(&pin_GPIO36) }, { MP_ROM_QSTR(MP_QSTR_IO37), MP_ROM_PTR(&pin_GPIO37) }, From 16937b8a0dcddd07c6dc2292924fb066495d72a2 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 2 Aug 2023 10:54:47 -0500 Subject: [PATCH 205/241] Fix markup of bitmaptools.blit stubs this prevented bitmaptools.blit from properly appearing in documentation. --- shared-bindings/bitmaptools/__init__.c | 60 +++++++++++++------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/shared-bindings/bitmaptools/__init__.c b/shared-bindings/bitmaptools/__init__.c index 5139a55645..2eb966ef8d 100644 --- a/shared-bindings/bitmaptools/__init__.c +++ b/shared-bindings/bitmaptools/__init__.c @@ -949,37 +949,37 @@ STATIC mp_obj_t bitmaptools_obj_draw_circle(size_t n_args, const mp_obj_t *pos_a MP_DEFINE_CONST_FUN_OBJ_KW(bitmaptools_draw_circle_obj, 0, bitmaptools_obj_draw_circle); -//| def blit( -//| dest_bitmap: displayio.Bitmap, -//| source_bitmap: displayio.Bitmap, -//| x: int, -//| y: int, -//| *, -//| x1: int, -//| y1: int, -//| x2: int, -//| y2: int, -//| skip_source_index: int, -//| skip_dest_index: int -//| ) -> None: -//| """Inserts the source_bitmap region defined by rectangular boundaries -//| (x1,y1) and (x2,y2) into the bitmap at the specified (x,y) location. +//| def blit( +//| dest_bitmap: displayio.Bitmap, +//| source_bitmap: displayio.Bitmap, +//| x: int, +//| y: int, +//| *, +//| x1: int, +//| y1: int, +//| x2: int, +//| y2: int, +//| skip_source_index: int, +//| skip_dest_index: int +//| ) -> None: +//| """Inserts the source_bitmap region defined by rectangular boundaries +//| (x1,y1) and (x2,y2) into the bitmap at the specified (x,y) location. //| -//| :param bitmap dest_bitmap: Destination bitmap that the area will be copied into. -//| :param bitmap source_bitmap: Source bitmap that contains the graphical region to be copied -//| :param int x: Horizontal pixel location in bitmap where source_bitmap upper-left -//| corner will be placed -//| :param int y: Vertical pixel location in bitmap where source_bitmap upper-left -//| corner will be placed -//| :param int x1: Minimum x-value for rectangular bounding box to be copied from the source bitmap -//| :param int y1: Minimum y-value for rectangular bounding box to be copied from the source bitmap -//| :param int x2: Maximum x-value (exclusive) for rectangular bounding box to be copied from the source bitmap -//| :param int y2: Maximum y-value (exclusive) for rectangular bounding box to be copied from the source bitmap -//| :param int skip_source_index: bitmap palette index in the source that will not be copied, -//| set to None to copy all pixels -//| :param int skip_dest_index: bitmap palette index in the destination bitmap that will not get overwritten -//| by the pixels from the source""" -//| ... +//| :param bitmap dest_bitmap: Destination bitmap that the area will be copied into. +//| :param bitmap source_bitmap: Source bitmap that contains the graphical region to be copied +//| :param int x: Horizontal pixel location in bitmap where source_bitmap upper-left +//| corner will be placed +//| :param int y: Vertical pixel location in bitmap where source_bitmap upper-left +//| corner will be placed +//| :param int x1: Minimum x-value for rectangular bounding box to be copied from the source bitmap +//| :param int y1: Minimum y-value for rectangular bounding box to be copied from the source bitmap +//| :param int x2: Maximum x-value (exclusive) for rectangular bounding box to be copied from the source bitmap +//| :param int y2: Maximum y-value (exclusive) for rectangular bounding box to be copied from the source bitmap +//| :param int skip_source_index: bitmap palette index in the source that will not be copied, +//| set to None to copy all pixels +//| :param int skip_dest_index: bitmap palette index in the destination bitmap that will not get overwritten +//| by the pixels from the source""" +//| ... //| STATIC mp_obj_t bitmaptools_obj_blit(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { enum {ARG_destination, ARG_source, ARG_x, ARG_y, ARG_x1, ARG_y1, ARG_x2, ARG_y2, ARG_skip_source_index, ARG_skip_dest_index}; From af0245ab24314f41919bd0e91c8f8ab2bf6294e7 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Wed, 2 Aug 2023 11:11:30 -0700 Subject: [PATCH 206/241] Revert .gitmodules --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index dcd9415759..5c29c41b9f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -106,7 +106,7 @@ url = https://github.com/adafruit/Adafruit_CircuitPython_Register.git [submodule "extmod/ulab"] path = extmod/ulab - url = https://github.com/jepler/micropython-ulab + url = https://github.com/v923z/micropython-ulab [submodule "frozen/Adafruit_CircuitPython_ESP32SPI"] path = frozen/Adafruit_CircuitPython_ESP32SPI url = https://github.com/adafruit/Adafruit_CircuitPython_ESP32SPI From 40e833c74667b400de9a81f1e31c4e83ecbbfeed Mon Sep 17 00:00:00 2001 From: elpekenin Date: Wed, 2 Aug 2023 20:13:52 +0200 Subject: [PATCH 207/241] [Fix] Wrong fix of cache use for STM32 --- ports/stm/supervisor/internal_flash.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/stm/supervisor/internal_flash.c b/ports/stm/supervisor/internal_flash.c index c7b792616c..3bbc50ae74 100644 --- a/ports/stm/supervisor/internal_flash.c +++ b/ports/stm/supervisor/internal_flash.c @@ -302,9 +302,9 @@ mp_uint_t supervisor_flash_read_blocks(uint8_t *dest, uint32_t block, uint32_t n uint32_t sector_start_addr; flash_get_sector_info(src, §or_start_addr, §or_size); // Count how many blocks are left in the sector - uint32_t count = (sector_size - (src - sector_start_addr)) / FILESYSTEM_BLOCK_SIZE; + uint32_t blocks_left_in_sector = (sector_size - (src - sector_start_addr)) / FILESYSTEM_BLOCK_SIZE; - if (count <= num_blocks && _cache_flash_addr == sector_start_addr) { + if (num_blocks <= blocks_left_in_sector && _cache_flash_addr == sector_start_addr) { // Read is contained in the cache, so just read cache memcpy(dest, (_flash_cache + (src - sector_start_addr)), FILESYSTEM_BLOCK_SIZE * num_blocks); } else { From 59e6cab252214496cdb32473b571a1887256ed9b Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Wed, 2 Aug 2023 11:03:43 -0700 Subject: [PATCH 208/241] Cache configuration descriptor We use it to open endpoints as they are used. Fetching the descriptor as needed can cause issues with devices that we're expecting a control packet while another transaction was ongoing. Specifically, a usb thumb drive didn't expect a control transaction while doing a SCSI transaction. This PR also aborts transactions on timeout or ctrl-c interrupt. It doesn't always recover though... --- locale/circuitpython.pot | 4 ++++ shared-bindings/usb/core/Device.c | 4 ++-- shared-module/usb/core/Device.c | 40 +++++++++++++++++++------------ shared-module/usb/core/Device.h | 3 ++- 4 files changed, 33 insertions(+), 18 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index f32d14c409..b4469dcce8 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -1473,6 +1473,10 @@ msgstr "" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "" diff --git a/shared-bindings/usb/core/Device.c b/shared-bindings/usb/core/Device.c index d5525431a3..7af131cde7 100644 --- a/shared-bindings/usb/core/Device.c +++ b/shared-bindings/usb/core/Device.c @@ -123,7 +123,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(usb_core_device_get_manufacturer_obj, usb_core_device_ MP_PROPERTY_GETTER(usb_core_device_manufacturer_obj, (mp_obj_t)&usb_core_device_get_manufacturer_obj); -//| def set_configuration(self, configuration=None): +//| def set_configuration(self, configuration=1): //| """Set the active configuration. //| //| The configuration parameter is the bConfigurationValue field of the @@ -136,7 +136,7 @@ MP_PROPERTY_GETTER(usb_core_device_manufacturer_obj, STATIC mp_obj_t usb_core_device_set_configuration(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { enum { ARG_configuration }; static const mp_arg_t allowed_args[] = { - { MP_QSTR_configuration, MP_ARG_INT, {.u_int = 0x100} }, + { MP_QSTR_configuration, MP_ARG_INT, {.u_int = 1} }, }; usb_core_device_obj_t *self = MP_OBJ_TO_PTR(pos_args[0]); mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; diff --git a/shared-module/usb/core/Device.c b/shared-module/usb/core/Device.c index faed49e383..cc6de011dc 100644 --- a/shared-module/usb/core/Device.c +++ b/shared-module/usb/core/Device.c @@ -132,13 +132,23 @@ mp_obj_t common_hal_usb_core_device_get_manufacturer(usb_core_device_obj_t *self } void common_hal_usb_core_device_set_configuration(usb_core_device_obj_t *self, mp_int_t configuration) { - if (configuration == 0x100) { - tusb_desc_configuration_t desc; - if (!tuh_descriptor_get_configuration(self->device_number, 0, &desc, sizeof(desc), _transfer_done_cb, 0) || - !_wait_for_callback()) { - return; - } - configuration = desc.bConfigurationValue; + // We assume that the config index is one less than the value. + uint8_t config_index = configuration - 1; + // Get the configuration descriptor and cache it. We'll use it later to open + // endpoints. + + // Get only the config descriptor first. + tusb_desc_configuration_t desc; + if (!tuh_descriptor_get_configuration(self->device_number, config_index, &desc, sizeof(desc), _transfer_done_cb, 0) || + !_wait_for_callback()) { + return; + } + + // Get the config descriptor plus interfaces and endpoints. + self->configuration_descriptor = m_realloc(self->configuration_descriptor, desc.wTotalLength); + if (!tuh_descriptor_get_configuration(self->device_number, config_index, self->configuration_descriptor, desc.wTotalLength, _transfer_done_cb, 0) || + !_wait_for_callback()) { + return; } tuh_configuration_set(self->device_number, configuration, _transfer_done_cb, 0); _wait_for_callback(); @@ -159,6 +169,7 @@ STATIC size_t _xfer(tuh_xfer_t *xfer, mp_int_t timeout) { RUN_BACKGROUND_TASKS; } if (mp_hal_is_interrupted()) { + tuh_edpt_abort_xfer(xfer->daddr, xfer->ep_addr); return 0; } xfer_result_t result = _xfer_result; @@ -167,6 +178,7 @@ STATIC size_t _xfer(tuh_xfer_t *xfer, mp_int_t timeout) { mp_raise_usb_core_USBError(translate("Pipe error")); } if (result == 0xff) { + tuh_edpt_abort_xfer(xfer->daddr, xfer->ep_addr); mp_raise_usb_core_USBTimeoutError(); } if (result == XFER_RESULT_SUCCESS) { @@ -191,17 +203,13 @@ STATIC bool _open_endpoint(usb_core_device_obj_t *self, mp_int_t endpoint) { return true; } - // Fetch the full configuration descriptor and search for the endpoint's descriptor. - uint8_t desc_buf[128]; - if (!tuh_descriptor_get_configuration(self->device_number, self->configuration_index, &desc_buf, sizeof(desc_buf), _transfer_done_cb, 0) || - !_wait_for_callback()) { - return false; + if (self->configuration_descriptor == NULL) { + mp_raise_usb_core_USBError(translate("No configuration set")); } - tusb_desc_configuration_t *desc_cfg = (tusb_desc_configuration_t *)desc_buf; + + tusb_desc_configuration_t *desc_cfg = (tusb_desc_configuration_t *)self->configuration_descriptor; uint32_t total_length = tu_le16toh(desc_cfg->wTotalLength); - // Cap to the buffer size we requested. - total_length = MIN(total_length, sizeof(desc_buf)); uint8_t const *desc_end = ((uint8_t const *)desc_cfg) + total_length; uint8_t const *p_desc = tu_desc_next(desc_cfg); @@ -287,6 +295,7 @@ mp_int_t common_hal_usb_core_device_ctrl_transfer(usb_core_device_obj_t *self, RUN_BACKGROUND_TASKS; } if (mp_hal_is_interrupted()) { + tuh_edpt_abort_xfer(xfer.daddr, xfer.ep_addr); return 0; } xfer_result_t result = _xfer_result; @@ -295,6 +304,7 @@ mp_int_t common_hal_usb_core_device_ctrl_transfer(usb_core_device_obj_t *self, mp_raise_usb_core_USBError(translate("Pipe error")); } if (result == 0xff) { + tuh_edpt_abort_xfer(xfer.daddr, xfer.ep_addr); mp_raise_usb_core_USBTimeoutError(); } if (result == XFER_RESULT_SUCCESS) { diff --git a/shared-module/usb/core/Device.h b/shared-module/usb/core/Device.h index bb32cb5766..b68a015f7a 100644 --- a/shared-module/usb/core/Device.h +++ b/shared-module/usb/core/Device.h @@ -32,7 +32,8 @@ typedef struct { mp_obj_base_t base; uint8_t device_number; - uint8_t configuration_index; // not number + uint8_t configuration_index; // not bConfigurationValue + uint8_t *configuration_descriptor; // Contains the length of the all descriptors. uint8_t open_endpoints[8]; } usb_core_device_obj_t; From 2e3b30a749aea275f8d4f99e7d58d3e93c7179c1 Mon Sep 17 00:00:00 2001 From: hexthat Date: Tue, 1 Aug 2023 22:00:58 +0000 Subject: [PATCH 209/241] Translated using Weblate (Chinese (Pinyin)) Currently translated at 100.0% (996 of 996 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/zh_Latn/ --- locale/zh_Latn_pinyin.po | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 32527b4e8b..f041b2e9d2 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: circuitpython-cn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-21 00:10+0000\n" +"PO-Revision-Date: 2023-08-02 22:07+0000\n" "Last-Translator: hexthat \n" "Language-Team: Chinese Hanyu Pinyin\n" "Language: zh_Latn_pinyin\n" @@ -1793,7 +1793,7 @@ msgstr "yǐn jiǎo bì xū gòng xiǎng PWM qiē piàn" #: shared-module/usb/core/Device.c msgid "Pipe error" -msgstr "" +msgstr "guǎndào cuòwù" #: py/builtinhelp.c msgid "Plus any modules on the filesystem\n" @@ -2104,7 +2104,7 @@ msgstr "Chōuyàng zhōng de píndào tài duō." #: shared-module/displayio/__init__.c msgid "Too many display busses; forgot displayio.release_displays() ?" -msgstr "" +msgstr "Xiǎnshì zǒngxiàn guòduō;wàngjì displayio.release_displays() ?" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -2828,7 +2828,7 @@ msgstr "wúfǎ chuàngjiàn shílì" #: extmod/ulab/code/ndarray.c msgid "cannot delete array elements" -msgstr "" +msgstr "wúfǎ shānchú shùzǔ yuánsù" #: py/runtime.c msgid "cannot import name %q" @@ -3296,11 +3296,11 @@ msgstr "nèi lián jíhé bìxū shì yīgè hánshù" #: extmod/ulab/code/numpy/vector.c msgid "input and output dimensions differ" -msgstr "" +msgstr "shūrù hé shūchū chǐcùn bùtóng" #: extmod/ulab/code/numpy/vector.c msgid "input and output shapes differ" -msgstr "" +msgstr "shūrù hé shūchū xíngzhuàng bùtóng" #: extmod/ulab/code/numpy/create.c msgid "input argument must be an integer, a tuple, or a list" @@ -3633,7 +3633,7 @@ msgstr "yuán chǎn" #: extmod/ulab/code/ndarray.c msgid "ndarray length overflows" -msgstr "" +msgstr "ndarray chángdù yìchū" #: py/runtime.c #, c-format @@ -3735,7 +3735,7 @@ msgstr "wèi zhēn duì fù zá de dtype shí xiàn" #: extmod/ulab/code/numpy/bitwise.c msgid "not supported for input types" -msgstr "" +msgstr "bù zhīchí shūrù lèixíng" #: extmod/ulab/code/numpy/create.c msgid "number of points must be at least 2" @@ -3887,11 +3887,11 @@ msgstr "chū zhèn liè tài xiǎo" #: extmod/ulab/code/numpy/vector.c msgid "out keyword is not supported for complex dtype" -msgstr "" +msgstr "fùzá de dtype bù zhīchí out guānjiànzì" #: extmod/ulab/code/numpy/vector.c msgid "out keyword is not supported for function" -msgstr "" +msgstr "hánshù bù zhīchí out guānjiànzì" #: extmod/ulab/code/utils/utils.c msgid "out must be a float dense array" @@ -3899,11 +3899,11 @@ msgstr "chū bì xū shì yí gè fú dòng mì jí zhèn liè" #: extmod/ulab/code/numpy/vector.c msgid "out must be an ndarray" -msgstr "" +msgstr "shūchū bìxū shì ndarray" #: extmod/ulab/code/numpy/vector.c msgid "out must be of float dtype" -msgstr "" +msgstr "out bìxū shì fúdiǎn xíng dtype" #: shared-bindings/bitmaptools/__init__.c msgid "out of range of target" From aa638f8054c3fd30881cedfaa0ddddc3b71a3a7f Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 3 Aug 2023 07:10:08 -0500 Subject: [PATCH 210/241] update ulab to fix fpclassify compiler diagnostic --- extmod/ulab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extmod/ulab b/extmod/ulab index 3728d22732..84f99f17fc 160000 --- a/extmod/ulab +++ b/extmod/ulab @@ -1 +1 @@ -Subproject commit 3728d22732dedc8a591b7df18a16d3ef1aed6a39 +Subproject commit 84f99f17fc02b03c13f99485d9cf68bc9d17c600 From 1fe70ba8a961a813814ed98430feafe66cd65bd0 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 3 Aug 2023 07:50:33 -0500 Subject: [PATCH 211/241] update messages --- locale/circuitpython.pot | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index f32d14c409..c3f935348e 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -3259,6 +3259,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3304,10 +3308,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" From 9304d7ac8ec8f02fb88bf89f35c2c8c5efb110b5 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 3 Aug 2023 15:29:05 +0200 Subject: [PATCH 212/241] 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 | 8 ++++---- locale/cs.po | 8 ++++---- locale/de_DE.po | 11 +++++++---- locale/el.po | 8 ++++---- locale/en_GB.po | 11 +++++++---- locale/es.po | 11 +++++++---- locale/fil.po | 8 ++++---- locale/fr.po | 11 +++++++---- locale/hi.po | 8 ++++---- locale/it_IT.po | 8 ++++---- locale/ja.po | 8 ++++---- locale/ko.po | 8 ++++---- locale/nl.po | 11 +++++++---- locale/pl.po | 8 ++++---- locale/pt_BR.po | 15 +++++++++------ locale/ru.po | 8 ++++---- locale/sv.po | 11 +++++++---- locale/tr.po | 8 ++++---- locale/zh_Latn_pinyin.po | 11 +++++++---- 19 files changed, 102 insertions(+), 78 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 302186b549..795848785a 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -3287,6 +3287,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3332,10 +3336,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/cs.po b/locale/cs.po index 2a23f16976..c9c6b2bd72 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -3274,6 +3274,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3319,10 +3323,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/de_DE.po b/locale/de_DE.po index 349539049f..394ab6875f 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -3347,6 +3347,10 @@ msgstr "Eingabedaten müssen iterierbar sein" msgid "input dtype must be float or complex" msgstr "Eingabe dtype muss float oder complex sein" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "Eingabematrix ist asymmetrisch" @@ -3392,10 +3396,6 @@ msgstr "Die Eingabe muss Tupel, Liste, Bereich oder Ndarray sein" msgid "input vectors must be of equal length" msgstr "Eingabevektoren müssen gleich lang sein" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "Eingaben sind nicht iterierbar" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "interp ist für 1D-Iterables gleicher Länge definiert" @@ -4463,6 +4463,9 @@ msgstr "zi muss eine Gleitkommazahl sein" msgid "zi must be of shape (n_section, 2)" msgstr "zi muss die Form (n_section, 2) haben" +#~ msgid "inputs are not iterable" +#~ msgstr "Eingaben sind nicht iterierbar" + #~ msgid "Too many display busses" #~ msgstr "Zu viele Anzeigebusse" diff --git a/locale/el.po b/locale/el.po index f9b61bdeae..a6fccf1ae7 100644 --- a/locale/el.po +++ b/locale/el.po @@ -3288,6 +3288,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3333,10 +3337,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/en_GB.po b/locale/en_GB.po index 0abf8ef25e..42ed734f7a 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -3302,6 +3302,10 @@ msgstr "input data must be an iterable" msgid "input dtype must be float or complex" msgstr "input dtype must be float or complex" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "input matrix is asymmetric" @@ -3347,10 +3351,6 @@ msgstr "input must be tuple, list, range, or ndarray" msgid "input vectors must be of equal length" msgstr "input vectors must be of equal length" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "inputs are not iterable" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "interp is defined for 1D iterables of equal length" @@ -4404,6 +4404,9 @@ msgstr "zi must be of float type" msgid "zi must be of shape (n_section, 2)" msgstr "zi must be of shape (n_section, 2)" +#~ msgid "inputs are not iterable" +#~ msgstr "inputs are not iterable" + #~ msgid "Too many display busses" #~ msgstr "Too many display busses" diff --git a/locale/es.po b/locale/es.po index f76b3d6534..8a6a67e02c 100644 --- a/locale/es.po +++ b/locale/es.po @@ -3350,6 +3350,10 @@ msgstr "los datos de entrada deben ser iterables" msgid "input dtype must be float or complex" msgstr "dtype de entrada debe ser float o complex" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "la matriz de entrada es asimétrica" @@ -3395,10 +3399,6 @@ msgstr "la entrada debe ser una tupla, lista, rango o ndarray" msgid "input vectors must be of equal length" msgstr "los vectores de entrada deben ser de igual tamaño" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "Entradas no son iterables" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "interp está definido para iterables 1D de igual tamaño" @@ -4460,6 +4460,9 @@ msgstr "zi debe ser de tipo flotante" msgid "zi must be of shape (n_section, 2)" msgstr "zi debe ser una forma (n_section,2)" +#~ msgid "inputs are not iterable" +#~ msgstr "Entradas no son iterables" + #~ msgid "Too many display busses" #~ msgstr "Demasiados buses de pantalla" diff --git a/locale/fil.po b/locale/fil.po index 1d7373f63e..15b2f87c02 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -3289,6 +3289,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3334,10 +3338,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/fr.po b/locale/fr.po index ffddbdf6f1..f99e183c0e 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -3368,6 +3368,10 @@ msgstr "les données d'entrée doivent être un itérable" msgid "input dtype must be float or complex" msgstr "le dtype d'entrée doit être un flottant ou un complexe" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "la matrice d'entrée est asymétrique" @@ -3413,10 +3417,6 @@ msgstr "l'entrée 'input' doit être tuple, list, range ou ndarray" msgid "input vectors must be of equal length" msgstr "les vecteurs d'entrée doivent être de longueur égale" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "les entrées ne sont pas itérables" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "interp n'est défini que pour les 1D itérables de taille identique" @@ -4482,6 +4482,9 @@ msgstr "zi doit être de type float" msgid "zi must be of shape (n_section, 2)" msgstr "zi doit être de forme (n_section, 2)" +#~ msgid "inputs are not iterable" +#~ msgstr "les entrées ne sont pas itérables" + #~ msgid "Too many display busses" #~ msgstr "Trop de bus d'affichage" diff --git a/locale/hi.po b/locale/hi.po index 18ed2bf5fc..a6bd1fc756 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -3259,6 +3259,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3304,10 +3308,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/it_IT.po b/locale/it_IT.po index 4a0101fc47..3a82f92b53 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -3294,6 +3294,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3339,10 +3343,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/ja.po b/locale/ja.po index b3d7dd67b3..fe8a1440c4 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -3281,6 +3281,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "入力行列が非対称" @@ -3326,10 +3330,6 @@ msgstr "入力はtuple, list, range, ndarrayでなければなりません" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/ko.po b/locale/ko.po index 1946d9572f..a55f2a3588 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -3263,6 +3263,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3308,10 +3312,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/nl.po b/locale/nl.po index ea4d0698b4..4ece57854a 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -3290,6 +3290,10 @@ msgstr "invoerdata moet itereerbaar zijn" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "invoermatrix is asymmetrisch" @@ -3335,10 +3339,6 @@ msgstr "invoer moet een tuple, lijst, bereik of ndarray zijn" msgid "input vectors must be of equal length" msgstr "invoervectors moeten van gelijke lengte zijn" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "invoer is niet itereerbaar" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" @@ -4395,6 +4395,9 @@ msgstr "zi moet van type float zijn" msgid "zi must be of shape (n_section, 2)" msgstr "zi moet vorm (n_section, 2) hebben" +#~ msgid "inputs are not iterable" +#~ msgstr "invoer is niet itereerbaar" + #~ msgid "Too many display busses" #~ msgstr "Teveel beeldscherm bussen" diff --git a/locale/pl.po b/locale/pl.po index 5817ac80c7..1c6c1b16d5 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -3268,6 +3268,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3313,10 +3317,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "wektory wejściowe muszą być równej długości" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index ed7b6ae9c4..c3a7acdfd6 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -2123,8 +2123,8 @@ msgstr "Muitos canais na amostra." #: shared-module/displayio/__init__.c msgid "Too many display busses; forgot displayio.release_displays() ?" msgstr "" -"Excesso de barramentos de exibição; esqueceu do displayio.release_displays() " -"?" +"Excesso de barramentos de exibição; esqueceu do displayio." +"release_displays() ?" #: shared-module/displayio/__init__.c msgid "Too many displays" @@ -3350,6 +3350,10 @@ msgstr "os dados da entrada devem ser iteráveis" msgid "input dtype must be float or complex" msgstr "o tipo da entrada dtype deve ser flutuante ou complexo" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "a matriz da entrada é assimétrica" @@ -3395,10 +3399,6 @@ msgstr "A entrada deve ser tupla, lista, intervalo ou matriz" msgid "input vectors must be of equal length" msgstr "os vetores da entrada devem ter o mesmo comprimento" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "as entradas não são iteráveis" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "o interp é definido para iteráveis 1D com comprimento igual" @@ -4462,6 +4462,9 @@ msgstr "zi deve ser de um tipo float" msgid "zi must be of shape (n_section, 2)" msgstr "zi deve estar na forma (n_section, 2)" +#~ msgid "inputs are not iterable" +#~ msgstr "as entradas não são iteráveis" + #~ msgid "Too many display busses" #~ msgstr "Muitos barramentos estão sendo exibidos" diff --git a/locale/ru.po b/locale/ru.po index 043d802835..8e354a4960 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -3322,6 +3322,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3367,10 +3371,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/sv.po b/locale/sv.po index df519cab05..279c3fd9bc 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -3316,6 +3316,10 @@ msgstr "indata måste vara en iterable" msgid "input dtype must be float or complex" msgstr "indatatyp måste vara float eller complex" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "indatamatrisen är asymmetrisk" @@ -3361,10 +3365,6 @@ msgstr "indata måste vara tupel, lista, range, eller ndarray" msgid "input vectors must be of equal length" msgstr "indatavektorer måste ha samma längd" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "indata är inte iterbara" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "interp är definierad för 1D-iterabla med samma längd" @@ -4422,6 +4422,9 @@ msgstr "zi måste vara av typ float" msgid "zi must be of shape (n_section, 2)" msgstr "zi måste vara i formen (n_section, 2)" +#~ msgid "inputs are not iterable" +#~ msgstr "indata är inte iterbara" + #~ msgid "Too many display busses" #~ msgstr "För många display-bussar" diff --git a/locale/tr.po b/locale/tr.po index a58eb36211..c741fce473 100644 --- a/locale/tr.po +++ b/locale/tr.po @@ -3281,6 +3281,10 @@ msgstr "" msgid "input dtype must be float or complex" msgstr "" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "" @@ -3326,10 +3330,6 @@ msgstr "" msgid "input vectors must be of equal length" msgstr "" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index f041b2e9d2..8171696471 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -3322,6 +3322,10 @@ msgstr "shūrù shùjù bìxū shì kě diédài de" msgid "input dtype must be float or complex" msgstr "shū rù dtype bì xū shì fú diǎn xíng huò fù shù" +#: extmod/ulab/code/numpy/poly.c +msgid "input is not iterable" +msgstr "" + #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" msgstr "shūrù jǔzhèn bù duìchèn" @@ -3367,10 +3371,6 @@ msgstr "shūrù bìxū shì yuán zǔ, lièbiǎo, fànwéi huò ndarray" msgid "input vectors must be of equal length" msgstr "shūrù xiàngliàng de chángdù bìxū xiāngděng" -#: extmod/ulab/code/numpy/poly.c -msgid "inputs are not iterable" -msgstr "shū rù bù kě yí dòng" - #: extmod/ulab/code/numpy/approx.c msgid "interp is defined for 1D iterables of equal length" msgstr "zhōng jiān wéi cháng dù xiāng děng de 1D kě yì jiāo qì dìng yì" @@ -4428,6 +4428,9 @@ msgstr "zi bìxū wèi fú diǎn xíng" msgid "zi must be of shape (n_section, 2)" msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)" +#~ msgid "inputs are not iterable" +#~ msgstr "shū rù bù kě yí dòng" + #~ msgid "Too many display busses" #~ msgstr "Xiǎnshì zǒngxiàn tài duōle" From dbafba889dd36f09ba171dad8f9e7fb4d8be5f2b Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Thu, 3 Aug 2023 08:55:56 -0500 Subject: [PATCH 213/241] include SRC_PATTERNS for ci_set_matrix Originally, all Makefile variables were implicitly included in settings[]. When I revised ci_set_matrix, only explicltly named variables are included. Depending on the set of changed files, ci_set_matrix needs the SRC_PATTERNS variable, so include it explicitly. Typical error, seen in the history of building this PR: ``` Traceback (most recent call last): File "/home/runner/work/circuitpython/circuitpython/tools/ci_set_matrix.py", line 309, in main() File "/home/runner/work/circuitpython/circuitpython/tools/ci_set_matrix.py", line 305, in main set_boards(run_all) File "/home/runner/work/circuitpython/circuitpython/tools/ci_set_matrix.py", line 215, in set_boards if module in settings["SRC_PATTERNS"]: ~~~~~~~~^^^^^^^^^^^^^^^^ KeyError: 'SRC_PATTERNS' Error: Process completed with exit code 1. ``` --- 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 27c48fb293..92def05fbf 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -177,7 +177,7 @@ def get_settings_from_makefile(port_dir, board_name): in this script, something that has proved error-prone """ contents = subprocess.run( - ["make", "-C", port_dir, "-f", "Makefile", f"BOARD={board_name}", "print-CFLAGS", "print-CIRCUITPY_BUILD_EXTENSIONS", "print-FROZEN_MPY_DIRS"], + ["make", "-C", port_dir, "-f", "Makefile", f"BOARD={board_name}", "print-CFLAGS", "print-CIRCUITPY_BUILD_EXTENSIONS", "print-FROZEN_MPY_DIRS", "print-SRC_PATTERNS"], encoding="utf-8", errors="replace", stdout=subprocess.PIPE, From bcf0a56aaffb22377e226aa427b27edd66120ec5 Mon Sep 17 00:00:00 2001 From: Jonny Bergdahl Date: Thu, 3 Aug 2023 13:39:55 +0000 Subject: [PATCH 214/241] Translated using Weblate (Swedish) Currently translated at 100.0% (996 of 996 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/sv/ --- locale/sv.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/sv.po b/locale/sv.po index 279c3fd9bc..2f4914442a 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-30 11:47+0000\n" +"PO-Revision-Date: 2023-08-03 16:12+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" "Language: sv\n" @@ -3318,7 +3318,7 @@ msgstr "indatatyp måste vara float eller complex" #: extmod/ulab/code/numpy/poly.c msgid "input is not iterable" -msgstr "" +msgstr "indata är inte itererbar" #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" From 98d5d3af806419f0029f9f9460931d021fbb985e Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 3 Aug 2023 21:38:53 +0200 Subject: [PATCH 215/241] 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 | 4 ++++ locale/cs.po | 4 ++++ locale/de_DE.po | 4 ++++ locale/el.po | 4 ++++ locale/en_GB.po | 4 ++++ locale/es.po | 4 ++++ locale/fil.po | 4 ++++ locale/fr.po | 4 ++++ locale/hi.po | 4 ++++ locale/it_IT.po | 4 ++++ locale/ja.po | 4 ++++ locale/ko.po | 4 ++++ locale/nl.po | 4 ++++ locale/pl.po | 4 ++++ locale/pt_BR.po | 4 ++++ locale/ru.po | 4 ++++ locale/sv.po | 4 ++++ locale/tr.po | 4 ++++ locale/zh_Latn_pinyin.po | 4 ++++ 19 files changed, 76 insertions(+) diff --git a/locale/ID.po b/locale/ID.po index 795848785a..ef97425b13 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -1548,6 +1548,10 @@ msgstr "Tidak ada file/direktori" msgid "No timer available" msgstr "Penghitung waktu tidak tersedia" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/cs.po b/locale/cs.po index c9c6b2bd72..ad6196b078 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -1548,6 +1548,10 @@ msgstr "Žádný takový soubor / adresář" msgid "No timer available" msgstr "Není k dispozici žádný časovač" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/de_DE.po b/locale/de_DE.po index 394ab6875f..b09dfa93dd 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -1573,6 +1573,10 @@ msgstr "Keine solche Datei/Verzeichnis" msgid "No timer available" msgstr "Kein Timer verfügbar" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "Nordic System-Firmware kein Speicher verfügbar" diff --git a/locale/el.po b/locale/el.po index a6fccf1ae7..568a03aacd 100644 --- a/locale/el.po +++ b/locale/el.po @@ -1563,6 +1563,10 @@ msgstr "" msgid "No timer available" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/en_GB.po b/locale/en_GB.po index 42ed734f7a..db0bb1965b 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -1557,6 +1557,10 @@ msgstr "No such file/directory" msgid "No timer available" msgstr "No timer available" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "Nordic system firmware out of memory" diff --git a/locale/es.po b/locale/es.po index 8a6a67e02c..8c4b74ff9e 100644 --- a/locale/es.po +++ b/locale/es.po @@ -1585,6 +1585,10 @@ msgstr "No existe el archivo/directorio" msgid "No timer available" msgstr "No hay temporizador disponible" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "El firmware del sistema Nordic no tiene memoria" diff --git a/locale/fil.po b/locale/fil.po index 15b2f87c02..252a2c80a7 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -1548,6 +1548,10 @@ msgstr "Walang file/directory" msgid "No timer available" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/fr.po b/locale/fr.po index f99e183c0e..7f82c629ba 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -1595,6 +1595,10 @@ msgstr "Fichier/répertoire introuvable" msgid "No timer available" msgstr "Aucun minuteur disponible" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "Logiciel système Nordic n'a plus de mémoire" diff --git a/locale/hi.po b/locale/hi.po index a6bd1fc756..2f6d4d0fe4 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -1536,6 +1536,10 @@ msgstr "" msgid "No timer available" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/it_IT.po b/locale/it_IT.po index 3a82f92b53..dc6d3f00e4 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -1551,6 +1551,10 @@ msgstr "Nessun file/directory esistente" msgid "No timer available" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/ja.po b/locale/ja.po index fe8a1440c4..eed64806b4 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -1549,6 +1549,10 @@ msgstr "指定されたファイル/ディレクトリはありません" msgid "No timer available" msgstr "利用できるタイマーなし" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/ko.po b/locale/ko.po index a55f2a3588..75fcc1647d 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -1539,6 +1539,10 @@ msgstr "" msgid "No timer available" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/nl.po b/locale/nl.po index 4ece57854a..67f5250ed2 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -1544,6 +1544,10 @@ msgstr "Bestand/map bestaat niet" msgid "No timer available" msgstr "Geen timer beschikbaar" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/pl.po b/locale/pl.po index 1c6c1b16d5..007e71afc5 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -1544,6 +1544,10 @@ msgstr "Brak pliku/katalogu" msgid "No timer available" msgstr "Brak dostępnego timera" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index c3a7acdfd6..15f88efa74 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -1580,6 +1580,10 @@ msgstr "Este arquivo/diretório não existe" msgid "No timer available" msgstr "Não há um temporizador disponível" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "O firmware do sistema nórdico está sem memória" diff --git a/locale/ru.po b/locale/ru.po index 8e354a4960..709cb812c3 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -1586,6 +1586,10 @@ msgstr "Файл/директория не существует" msgid "No timer available" msgstr "Нет доступного таймера" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/sv.po b/locale/sv.po index 2f4914442a..b9d9053731 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -1564,6 +1564,10 @@ msgstr "Ingen sådan fil/katalog" msgid "No timer available" msgstr "Ingen timer tillgänglig" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "Nordic systemfirmware fick slut på minne" diff --git a/locale/tr.po b/locale/tr.po index c741fce473..5ea9735b0a 100644 --- a/locale/tr.po +++ b/locale/tr.po @@ -1555,6 +1555,10 @@ msgstr "" msgid "No timer available" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 8171696471..072637c669 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -1571,6 +1571,10 @@ msgstr "Méiyǒu cǐ lèi wénjiàn/mùlù" msgid "No timer available" msgstr "Méiyǒu jìshí qì" +#: shared-module/usb/core/Device.c +msgid "No usb host port initialized" +msgstr "" + #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" msgstr "běi ōu xì tǒng gù jiàn chū nèi cún" From b5a449ab14e971c03b77b46acaeb7955207f7aa3 Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Thu, 3 Aug 2023 22:38:47 +0000 Subject: [PATCH 216/241] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/pt_BR/ --- locale/pt_BR.po | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 15f88efa74..5d12c6796e 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-30 11:47+0000\n" +"PO-Revision-Date: 2023-08-04 02:36+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -1582,7 +1582,7 @@ msgstr "Não há um temporizador disponível" #: shared-module/usb/core/Device.c msgid "No usb host port initialized" -msgstr "" +msgstr "Nenhuma porta do host usb foi inicializada" #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" @@ -3356,7 +3356,7 @@ msgstr "o tipo da entrada dtype deve ser flutuante ou complexo" #: extmod/ulab/code/numpy/poly.c msgid "input is not iterable" -msgstr "" +msgstr "a entrada não é iterável" #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" From 329f9b170a9f6d2e10e4909f8736a3dac5a16fab Mon Sep 17 00:00:00 2001 From: Jonny Bergdahl Date: Thu, 3 Aug 2023 19:42:26 +0000 Subject: [PATCH 217/241] Translated using Weblate (Swedish) Currently translated at 100.0% (997 of 997 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/sv/ --- locale/sv.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/sv.po b/locale/sv.po index b9d9053731..48e742e977 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-08-03 16:12+0000\n" +"PO-Revision-Date: 2023-08-04 02:36+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" "Language: sv\n" @@ -1566,7 +1566,7 @@ msgstr "Ingen timer tillgänglig" #: shared-module/usb/core/Device.c msgid "No usb host port initialized" -msgstr "" +msgstr "Ingen usb värdport initialiserad" #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" From 50eb62adb3284dd55ca6de3310749ef757c65f49 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 4 Aug 2023 04:36:05 +0200 Subject: [PATCH 218/241] 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 | 4 ++++ locale/cs.po | 4 ++++ locale/de_DE.po | 4 ++++ locale/el.po | 4 ++++ locale/en_GB.po | 4 ++++ locale/es.po | 4 ++++ locale/fil.po | 4 ++++ locale/fr.po | 4 ++++ locale/hi.po | 4 ++++ locale/it_IT.po | 4 ++++ locale/ja.po | 4 ++++ locale/ko.po | 4 ++++ locale/nl.po | 4 ++++ locale/pl.po | 4 ++++ locale/pt_BR.po | 4 ++++ locale/ru.po | 4 ++++ locale/sv.po | 4 ++++ locale/tr.po | 4 ++++ locale/zh_Latn_pinyin.po | 4 ++++ 19 files changed, 76 insertions(+) diff --git a/locale/ID.po b/locale/ID.po index ef97425b13..2ca87027c2 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -1485,6 +1485,10 @@ msgstr "Tidak ada clocks yang tersedia" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Tidak ada koneksi: panjang tidak dapat ditentukan" diff --git a/locale/cs.po b/locale/cs.po index ad6196b078..04bf2aecc2 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -1485,6 +1485,10 @@ msgstr "Žádné dostupné hodiny" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Žádné připojení: nelze určit délku" diff --git a/locale/de_DE.po b/locale/de_DE.po index b09dfa93dd..70e0182b57 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -1510,6 +1510,10 @@ msgstr "Keine Taktgeber verfügbar" msgid "No capture in progress" msgstr "Kein laufende Aufzeichnung" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Keine Verbindung: Länge kann nicht bestimmt werden" diff --git a/locale/el.po b/locale/el.po index 568a03aacd..44e8de1d4c 100644 --- a/locale/el.po +++ b/locale/el.po @@ -1500,6 +1500,10 @@ msgstr "" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "" diff --git a/locale/en_GB.po b/locale/en_GB.po index db0bb1965b..289e53b9ae 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -1494,6 +1494,10 @@ msgstr "No available clocks" msgid "No capture in progress" msgstr "No capture in progress" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "No connection: length cannot be determined" diff --git a/locale/es.po b/locale/es.po index 8c4b74ff9e..7db37ec8c0 100644 --- a/locale/es.po +++ b/locale/es.po @@ -1522,6 +1522,10 @@ msgstr "Relojes no disponibles" msgid "No capture in progress" msgstr "No hay captura en marcha" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Sin conexión: no se puede determinar la longitud" diff --git a/locale/fil.po b/locale/fil.po index 252a2c80a7..2d84f82afc 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -1485,6 +1485,10 @@ msgstr "" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "" diff --git a/locale/fr.po b/locale/fr.po index 7f82c629ba..83cca9f61c 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -1532,6 +1532,10 @@ msgstr "Pas d'horloge disponible" msgid "No capture in progress" msgstr "Aucune capture en cours" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Pas de connexion : la longueur ne peut pas être déterminée" diff --git a/locale/hi.po b/locale/hi.po index 2f6d4d0fe4..392e1bbf6d 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -1473,6 +1473,10 @@ msgstr "" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "" diff --git a/locale/it_IT.po b/locale/it_IT.po index dc6d3f00e4..5de8a79ef9 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -1488,6 +1488,10 @@ msgstr "Nessun orologio a disposizione" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "" diff --git a/locale/ja.po b/locale/ja.po index eed64806b4..14c9dd84d1 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -1486,6 +1486,10 @@ msgstr "利用できるクロックがありません" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "接続なし: 長さが決定できません" diff --git a/locale/ko.po b/locale/ko.po index 75fcc1647d..dc3002a256 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -1476,6 +1476,10 @@ msgstr "" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "" diff --git a/locale/nl.po b/locale/nl.po index 67f5250ed2..c6e1decfc1 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -1481,6 +1481,10 @@ msgstr "Geen klokken beschikbaar" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Geen verbinding: lengte kan niet worden bepaald" diff --git a/locale/pl.po b/locale/pl.po index 007e71afc5..32ae38249f 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -1481,6 +1481,10 @@ msgstr "Brak wolnych zegarów" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Brak połączenia: nie można ustalić długości" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 5d12c6796e..f34a6a5d6d 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -1515,6 +1515,10 @@ msgstr "Nenhum clock disponível" msgid "No capture in progress" msgstr "Não há nenhuma captura em andamento" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Sem conexão: o comprimento não pode ser determinado" diff --git a/locale/ru.po b/locale/ru.po index 709cb812c3..f1fd186a24 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -1521,6 +1521,10 @@ msgstr "" msgid "No capture in progress" msgstr "Захват не ведется" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Нет соединения: длина не может быть определена" diff --git a/locale/sv.po b/locale/sv.po index 48e742e977..dfd8d2df6f 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -1501,6 +1501,10 @@ msgstr "Inga tillgängliga klockor" msgid "No capture in progress" msgstr "Ingen insamling pågår" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Ingen anslutning: längden kan inte bestämmas" diff --git a/locale/tr.po b/locale/tr.po index 5ea9735b0a..3faed02135 100644 --- a/locale/tr.po +++ b/locale/tr.po @@ -1492,6 +1492,10 @@ msgstr "Kullanılabilir saat yok" msgid "No capture in progress" msgstr "" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 072637c669..930361eea9 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -1508,6 +1508,10 @@ msgstr "Méiyǒu kěyòng de shízhōng" msgid "No capture in progress" msgstr "zhèng zài jìn xíng zhōng de wèi bǔ huò" +#: shared-module/usb/core/Device.c +msgid "No configuration set" +msgstr "" + #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" msgstr "Wú liánjiē: Wúfǎ quèdìng chángdù" From 84d8224a54bf8e118414a199a93b4535e0a227c5 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 4 Aug 2023 08:38:07 -0500 Subject: [PATCH 219/241] set reserved psram for pycamera --- ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h index daa9bc92e5..1e62da71c4 100644 --- a/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h +++ b/ports/espressif/boards/adafruit_esp32s3_camera/mpconfigboard.h @@ -40,3 +40,5 @@ #define DEFAULT_SPI_BUS_MISO (&pin_GPIO37) #define DOUBLE_TAP_PIN (&pin_GPIO42) + +#define DEFAULT_RESERVED_PSRAM (1048576) From 46db0366b85b61ac103d3db0f18abb55ae8313aa Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 4 Aug 2023 09:25:52 -0500 Subject: [PATCH 220/241] OrderedDict.move_to_end: alternate implementation of #8234 this implementation is hoped to be smaller. (feather_m4_express/fr fits unlike the other PR; approximate savings ~600 bytes) Minor difference to standard Python: A `dict` object has a `move_to_end` method. However, calling this method always results in TypeError. Implementing it this way means that the method table can still be shared between OrderedDict and builtin dict. Closes #4408. --- py/objdict.c | 50 ++++++++++++++++++++++++++++++++++++ tests/basics/ordereddict2.py | 44 +++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 tests/basics/ordereddict2.py diff --git a/py/objdict.c b/py/objdict.c index b63ea89137..abe72e7839 100644 --- a/py/objdict.c +++ b/py/objdict.c @@ -421,6 +421,53 @@ STATIC mp_obj_t dict_update(size_t n_args, const mp_obj_t *args, mp_map_t *kwarg } STATIC MP_DEFINE_CONST_FUN_OBJ_KW(dict_update_obj, 1, dict_update); +#if MICROPY_PY_COLLECTIONS_ORDEREDDICT +STATIC mp_obj_t dict_move_to_end(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { + mp_obj_dict_t *self = MP_OBJ_TO_PTR(pos_args[0]); + mp_arg_validate_type(self, &mp_type_ordereddict, MP_QSTR_self); + + // parse args + enum { ARG_key, ARG_last }; + static const mp_arg_t allowed_args[] = { + { MP_QSTR_key, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_rom_obj = MP_ROM_NONE } }, + { MP_QSTR_last, MP_ARG_BOOL, {.u_bool = true } } + }; + mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)]; + mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); + + mp_obj_t *key = args[ARG_key].u_obj; + bool last = args[ARG_last].u_bool; + + mp_map_elem_t *elem = mp_map_lookup(&self->map, key, MP_MAP_LOOKUP); + if (!elem) { + mp_raise_type_arg(&mp_type_KeyError, key); + } + + mp_map_elem_t tmp = *elem; + mp_map_elem_t *table = self->map.table; + mp_map_elem_t *dest, *move_begin, *move_dest; + size_t move_count; + + if (last) { + mp_map_elem_t *top = &table[self->map.used]; + dest = top - 1; + move_begin = elem + 1; + move_dest = elem; + move_count = top - move_begin; + } else { + dest = &table[0]; + move_begin = table; + move_dest = table + 1; + move_count = elem - table; + } + memmove(move_dest, move_begin, move_count * sizeof(*elem)); + *dest = tmp; + + return mp_const_none; +} +STATIC MP_DEFINE_CONST_FUN_OBJ_KW(dict_move_to_end_obj, 1, dict_move_to_end); +#endif + /******************************************************************************/ /* dict views */ @@ -590,6 +637,9 @@ STATIC const mp_rom_map_elem_t dict_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_get), MP_ROM_PTR(&dict_get_obj) }, { MP_ROM_QSTR(MP_QSTR_items), MP_ROM_PTR(&dict_items_obj) }, { MP_ROM_QSTR(MP_QSTR_keys), MP_ROM_PTR(&dict_keys_obj) }, + #if MICROPY_PY_COLLECTIONS_ORDEREDDICT + { MP_ROM_QSTR(MP_QSTR_move_to_end), MP_ROM_PTR(&dict_move_to_end_obj) }, + #endif { MP_ROM_QSTR(MP_QSTR_pop), MP_ROM_PTR(&dict_pop_obj) }, { MP_ROM_QSTR(MP_QSTR_popitem), MP_ROM_PTR(&dict_popitem_obj) }, { MP_ROM_QSTR(MP_QSTR_setdefault), MP_ROM_PTR(&dict_setdefault_obj) }, diff --git a/tests/basics/ordereddict2.py b/tests/basics/ordereddict2.py new file mode 100644 index 0000000000..f85b08fea5 --- /dev/null +++ b/tests/basics/ordereddict2.py @@ -0,0 +1,44 @@ +try: + from collections import OrderedDict +except ImportError: + print("SKIP") + raise SystemExit + +try: + {'a': None}.move_to_end('a') +except (TypeError, AttributeError): + print("Exception") + +d = OrderedDict(a=1, b=2, c=3) +d.move_to_end('a') +print(list(d.items())) + +d = OrderedDict(a=1, b=2, c=3) +d.move_to_end('b') +print(list(d.items())) + +d = OrderedDict(a=1, b=2, c=3) +d.move_to_end('c') +print(list(d.items())) + +try: + d.move_to_end('x') +except KeyError: + print("KeyError") + +d = OrderedDict(a=1, b=2, c=3) +d.move_to_end('a', last=False) +print(list(d.items())) + +d = OrderedDict(a=1, b=2, c=3) +d.move_to_end('b', last=False) +print(list(d.items())) + +d = OrderedDict(a=1, b=2, c=3) +d.move_to_end('c', last=False) +print(list(d.items())) + +try: + d.move_to_end('x', last=False) +except KeyError: + print("KeyError") From b9a9ae595c879d18c26a8b8c4d5475ba3192e40b Mon Sep 17 00:00:00 2001 From: Jonny Bergdahl Date: Fri, 4 Aug 2023 12:26:24 +0000 Subject: [PATCH 221/241] Translated using Weblate (Swedish) Currently translated at 100.0% (998 of 998 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/sv/ --- locale/sv.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locale/sv.po b/locale/sv.po index dfd8d2df6f..57164b7062 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-08-04 02:36+0000\n" +"PO-Revision-Date: 2023-08-04 16:42+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" "Language: sv\n" @@ -1503,7 +1503,7 @@ msgstr "Ingen insamling pågår" #: shared-module/usb/core/Device.c msgid "No configuration set" -msgstr "" +msgstr "Ingen konfiguration gjord" #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" From ddeb27d335c1c292d5900b0ee9e823cde2de1a8f Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 4 Aug 2023 18:40:30 -0500 Subject: [PATCH 222/241] the note is in its attack phase --- shared-bindings/synthio/__init__.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/shared-bindings/synthio/__init__.c b/shared-bindings/synthio/__init__.c index 52d30cd2c4..48a4d407c7 100644 --- a/shared-bindings/synthio/__init__.c +++ b/shared-bindings/synthio/__init__.c @@ -45,6 +45,13 @@ #include "shared-module/synthio/LFO.h" +//| +//| """Support for multi-channel audio synthesis +//| +//| At least 2 simultaneous notes are supported. samd5x, mimxrt10xx and rp2040 platforms support up to 12 notes. +//| """ +//| + //| class EnvelopeState: //| ATTACK: EnvelopeState //| """The note is in its attack phase""" @@ -85,12 +92,6 @@ static const mp_arg_t envelope_properties[] = { { MP_QSTR_sustain_level, MP_ARG_OBJ | MP_ARG_KW_ONLY, {.u_obj = MP_OBJ_NULL } }, }; -//| -//| """Support for multi-channel audio synthesis -//| -//| At least 2 simultaneous notes are supported. samd5x, mimxrt10xx and rp2040 platforms support up to 12 notes. -//| """ -//| //| BlockInput = Union["Math", "LFO", float, None] //| """Blocks and Notes can take any of these types as inputs on certain attributes //| From 8c45abbd8939e39bc78771326117a499dce7ef04 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Sat, 5 Aug 2023 14:23:26 -0500 Subject: [PATCH 223/241] pass correct may_exec buffer length --- ports/raspberrypi/bindings/rp2pio/StateMachine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/raspberrypi/bindings/rp2pio/StateMachine.c b/ports/raspberrypi/bindings/rp2pio/StateMachine.c index a885a844b9..ae89fcdffb 100644 --- a/ports/raspberrypi/bindings/rp2pio/StateMachine.c +++ b/ports/raspberrypi/bindings/rp2pio/StateMachine.c @@ -279,7 +279,7 @@ STATIC mp_obj_t rp2pio_statemachine_make_new(const mp_obj_type_t *type, size_t n bufinfo.buf, bufinfo.len / 2, args[ARG_frequency].u_int, init_bufinfo.buf, init_bufinfo.len / 2, - may_exec_bufinfo.buf, bufinfo.len / 2, + may_exec_bufinfo.buf, may_exec_bufinfo.len / 2, first_out_pin, out_pin_count, args[ARG_initial_out_pin_state].u_int, args[ARG_initial_out_pin_direction].u_int, first_in_pin, in_pin_count, args[ARG_pull_in_pin_up].u_int, args[ARG_pull_in_pin_down].u_int, first_set_pin, set_pin_count, args[ARG_initial_set_pin_state].u_int, args[ARG_initial_set_pin_direction].u_int, From a6e86199402c9e99191414bfc6c6fce65dbed961 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Sat, 5 Aug 2023 14:24:03 -0500 Subject: [PATCH 224/241] fix 'uses extra pin' message --- ports/raspberrypi/common-hal/rp2pio/StateMachine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c index 20ff359461..fe392566c1 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c @@ -431,7 +431,7 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, uint16_t wait_source = (full_instruction & 0x0060) >> 5; uint16_t wait_index = full_instruction & 0x001f; if (wait_source == 0 && (state->pins_we_use & (1 << wait_index)) == 0) { // GPIO - mp_raise_ValueError_varg(translate("%q[%u] uses extra pin"), i); + mp_raise_ValueError_varg(translate("%q[%u] uses extra pin"), what, i); } if (wait_source == 1) { // Input pin if (state->has_in_pin) { From 9a354a4eb8120d6484db75618c34d9ef7935fb7f Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Sat, 5 Aug 2023 14:24:11 -0500 Subject: [PATCH 225/241] fix checking for in-pin --- ports/raspberrypi/common-hal/rp2pio/StateMachine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c index fe392566c1..7d9103d046 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c @@ -434,7 +434,7 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, mp_raise_ValueError_varg(translate("%q[%u] uses extra pin"), what, i); } if (wait_source == 1) { // Input pin - if (state->has_in_pin) { + if (!state->has_in_pin) { mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] waits based on pin"), what, i); } if (wait_index >= state->in_pin_count) { From c918d8048d287fc8e5dbdc088323228497d4881e Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Sat, 5 Aug 2023 14:46:50 -0500 Subject: [PATCH 226/241] correct more error detection --- .../raspberrypi/common-hal/rp2pio/StateMachine.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c index 7d9103d046..4ac57397e0 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c @@ -447,10 +447,10 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, uint16_t bit_count = full_instruction & 0x001f; if (source == 0) { if (!state->has_in_pin) { - mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] shifts in from pin(s)"), i); + mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] shifts in from pin(s)"), what, i); } if (bit_count > state->in_pin_count) { - mp_raise_ValueError_varg(translate("%q[%u] shifts in more bits than pin count"), i); + mp_raise_ValueError_varg(translate("%q[%u] shifts in more bits than pin count"), what, i); } } if (state->auto_push) { @@ -465,10 +465,10 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, // Check for pins or pindirs destination. if (destination == 0x0 || destination == 0x4) { if (!state->has_out_pin) { - mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] shifts out to pin(s)"), i); + mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] shifts out to pin(s)"), what, i); } if (bit_count > state->out_pin_count) { - mp_raise_ValueError_varg(translate("%q[%u] shifts out more bits than pin count"), i); + mp_raise_ValueError_varg(translate("%q[%u] shifts out more bits than pin count"), what, i); } } if (state->auto_pull) { @@ -481,7 +481,7 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, uint16_t destination = (full_instruction & 0x00e0) >> 5; // Check for pins or pindirs destination. if ((destination == 0x00 || destination == 0x4) && !state->has_set_pin) { - mp_raise_ValueError_varg(translate("Missing first_set_pin. %q[%u] sets pin(s)"), i); + mp_raise_ValueError_varg(translate("Missing first_set_pin. %q[%u] sets pin(s)"), what, i); } } if (instruction == pio_instr_bits_mov) { @@ -489,10 +489,10 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, uint16_t destination = (full_instruction & 0x00e0) >> 5; // Check for pins or pindirs destination. if (destination == 0x0 && !state->has_out_pin) { - mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] writes pin(s)"), i); + mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] writes pin(s)"), what, i); } - if (source == 0x0 && !state->has_out_pin) { - mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] reads pin(s)"), i); + if (source == 0x0 && !state->has_in_pin) { + mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] reads pin(s)"), what, i); } if (destination == 0x6) { state->in_loaded = true; From 432f928286c5278481e6b5904af84e79ceb49043 Mon Sep 17 00:00:00 2001 From: Blake Ramsdell Date: Sun, 6 Aug 2023 13:46:34 +0000 Subject: [PATCH 227/241] Add RUNMODE_UF2 handling for SAMD --- ports/atmel-samd/common-hal/microcontroller/__init__.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/atmel-samd/common-hal/microcontroller/__init__.c b/ports/atmel-samd/common-hal/microcontroller/__init__.c index d1c02b360f..054d7ee7f8 100644 --- a/ports/atmel-samd/common-hal/microcontroller/__init__.c +++ b/ports/atmel-samd/common-hal/microcontroller/__init__.c @@ -63,7 +63,7 @@ void common_hal_mcu_enable_interrupts(void) { } void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) { - if (runmode == RUNMODE_BOOTLOADER) { + if ((runmode == RUNMODE_BOOTLOADER) || (runmode == RUNMODE_UF2)) { if (!bootloader_available()) { mp_raise_ValueError(translate("Cannot reset into bootloader because no bootloader is present")); } From bcef82758e7c37adf2a783f53b8e2b0fec33fc4d Mon Sep 17 00:00:00 2001 From: Pablo Martinez Bernal Date: Fri, 4 Aug 2023 22:55:02 +0000 Subject: [PATCH 228/241] Translated using Weblate (Spanish) Currently translated at 100.0% (998 of 998 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/es/ --- locale/es.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locale/es.po b/locale/es.po index 7db37ec8c0..242242bbeb 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: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-07-30 11:47+0000\n" +"PO-Revision-Date: 2023-08-06 17:45+0000\n" "Last-Translator: Pablo Martinez Bernal \n" "Language-Team: \n" "Language: es\n" @@ -1524,7 +1524,7 @@ msgstr "No hay captura en marcha" #: shared-module/usb/core/Device.c msgid "No configuration set" -msgstr "" +msgstr "No hay configuración" #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" @@ -1591,7 +1591,7 @@ msgstr "No hay temporizador disponible" #: shared-module/usb/core/Device.c msgid "No usb host port initialized" -msgstr "" +msgstr "No hay ningún puerto USB host inicializado" #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" @@ -3360,7 +3360,7 @@ msgstr "dtype de entrada debe ser float o complex" #: extmod/ulab/code/numpy/poly.c msgid "input is not iterable" -msgstr "" +msgstr "input no es iterable" #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" From 9a9106f10797c82dc6aff5f4db82cea6614d7b46 Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Fri, 4 Aug 2023 22:44:52 +0000 Subject: [PATCH 229/241] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (998 of 998 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 f34a6a5d6d..f6bd115445 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-08-04 02:36+0000\n" +"PO-Revision-Date: 2023-08-06 17:45+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -1517,7 +1517,7 @@ msgstr "Não há nenhuma captura em andamento" #: shared-module/usb/core/Device.c msgid "No configuration set" -msgstr "" +msgstr "Nenhum conjunto de configuração" #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" From 8ba261d51c86a66d464be59df5cd7d63e8ad3534 Mon Sep 17 00:00:00 2001 From: Andi Chandler Date: Sat, 5 Aug 2023 17:32:57 +0000 Subject: [PATCH 230/241] Translated using Weblate (English (United Kingdom)) Currently translated at 100.0% (998 of 998 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/en_GB/ --- locale/en_GB.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locale/en_GB.po b/locale/en_GB.po index 289e53b9ae..0971690f8d 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-07-30 11:47+0000\n" +"PO-Revision-Date: 2023-08-06 17:45+0000\n" "Last-Translator: Andi Chandler \n" "Language-Team: none\n" "Language: en_GB\n" @@ -1496,7 +1496,7 @@ msgstr "No capture in progress" #: shared-module/usb/core/Device.c msgid "No configuration set" -msgstr "" +msgstr "No configuration set" #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" @@ -1563,7 +1563,7 @@ msgstr "No timer available" #: shared-module/usb/core/Device.c msgid "No usb host port initialized" -msgstr "" +msgstr "No USB host port initialised" #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" @@ -3312,7 +3312,7 @@ msgstr "input dtype must be float or complex" #: extmod/ulab/code/numpy/poly.c msgid "input is not iterable" -msgstr "" +msgstr "input is not iterable" #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" From 1f010f95418530400e1f1015bc19e9b7d1294820 Mon Sep 17 00:00:00 2001 From: hexthat Date: Mon, 7 Aug 2023 06:18:17 +0000 Subject: [PATCH 231/241] Translated using Weblate (Chinese (Pinyin)) Currently translated at 100.0% (998 of 998 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/zh_Latn/ --- locale/zh_Latn_pinyin.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 930361eea9..9dc9b39c21 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: circuitpython-cn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-08-02 22:07+0000\n" +"PO-Revision-Date: 2023-08-07 14:52+0000\n" "Last-Translator: hexthat \n" "Language-Team: Chinese Hanyu Pinyin\n" "Language: zh_Latn_pinyin\n" @@ -1510,7 +1510,7 @@ msgstr "zhèng zài jìn xíng zhōng de wèi bǔ huò" #: shared-module/usb/core/Device.c msgid "No configuration set" -msgstr "" +msgstr "wèi shèzhì pèizhì" #: shared-bindings/_bleio/PacketBuffer.c msgid "No connection: length cannot be determined" @@ -1577,7 +1577,7 @@ msgstr "Méiyǒu jìshí qì" #: shared-module/usb/core/Device.c msgid "No usb host port initialized" -msgstr "" +msgstr "wèi chūshǐhuà USB zhǔjī duānkǒu" #: ports/nrf/common-hal/_bleio/__init__.c msgid "Nordic system firmware out of memory" @@ -3332,7 +3332,7 @@ msgstr "shū rù dtype bì xū shì fú diǎn xíng huò fù shù" #: extmod/ulab/code/numpy/poly.c msgid "input is not iterable" -msgstr "" +msgstr "shūrù bùkě diédài" #: extmod/ulab/code/numpy/linalg/linalg.c msgid "input matrix is asymmetric" From 2077ac150b2b67955a4f3e573a3f6007b4c5a5db Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 7 Aug 2023 11:51:52 -0500 Subject: [PATCH 232/241] Apply suggestions from code review Co-authored-by: Scott Shawcroft --- ports/raspberrypi/common-hal/rp2pio/StateMachine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c index 4ac57397e0..e2385d427d 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c @@ -410,7 +410,7 @@ typedef struct { bool tx_fifo, rx_fifo, in_loaded, out_loaded, in_used, out_used; } introspect_t; -static void consider_instruction(introspect_t *state, uint16_t full_instruction, qstr what, size_t i) { +static void consider_instruction(introspect_t *state, uint16_t full_instruction, qstr what_program, size_t i) { uint16_t instruction = full_instruction & 0xe000; if (instruction == 0x8000) { if ((full_instruction & 0xe080) == pio_instr_bits_push) { From 755fdfab7ada7a8503975ba36ac111a384c40976 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 7 Aug 2023 16:26:57 -0500 Subject: [PATCH 233/241] rename variable based on review --- .../common-hal/rp2pio/StateMachine.c | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c index e2385d427d..c4e11133c2 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c @@ -424,21 +424,21 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, if (instruction == pio_instr_bits_jmp) { uint16_t condition = (full_instruction & 0x00e0) >> 5; if ((condition == 0x6) && !state->has_jmp_pin) { - mp_raise_ValueError_varg(translate("Missing jmp_pin. %q[%u] jumps on pin"), what, i); + mp_raise_ValueError_varg(translate("Missing jmp_pin. %q[%u] jumps on pin"), what_program, i); } } if (instruction == pio_instr_bits_wait) { uint16_t wait_source = (full_instruction & 0x0060) >> 5; uint16_t wait_index = full_instruction & 0x001f; if (wait_source == 0 && (state->pins_we_use & (1 << wait_index)) == 0) { // GPIO - mp_raise_ValueError_varg(translate("%q[%u] uses extra pin"), what, i); + mp_raise_ValueError_varg(translate("%q[%u] uses extra pin"), what_program, i); } if (wait_source == 1) { // Input pin if (!state->has_in_pin) { - mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] waits based on pin"), what, i); + mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] waits based on pin"), what_program, i); } if (wait_index >= state->in_pin_count) { - mp_raise_ValueError_varg(translate("%q[%u] waits on input outside of count"), what, i); + mp_raise_ValueError_varg(translate("%q[%u] waits on input outside of count"), what_program, i); } } } @@ -447,10 +447,10 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, uint16_t bit_count = full_instruction & 0x001f; if (source == 0) { if (!state->has_in_pin) { - mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] shifts in from pin(s)"), what, i); + mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] shifts in from pin(s)"), what_program, i); } if (bit_count > state->in_pin_count) { - mp_raise_ValueError_varg(translate("%q[%u] shifts in more bits than pin count"), what, i); + mp_raise_ValueError_varg(translate("%q[%u] shifts in more bits than pin count"), what_program, i); } } if (state->auto_push) { @@ -465,10 +465,10 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, // Check for pins or pindirs destination. if (destination == 0x0 || destination == 0x4) { if (!state->has_out_pin) { - mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] shifts out to pin(s)"), what, i); + mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] shifts out to pin(s)"), what_program, i); } if (bit_count > state->out_pin_count) { - mp_raise_ValueError_varg(translate("%q[%u] shifts out more bits than pin count"), what, i); + mp_raise_ValueError_varg(translate("%q[%u] shifts out more bits than pin count"), what_program, i); } } if (state->auto_pull) { @@ -481,7 +481,7 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, uint16_t destination = (full_instruction & 0x00e0) >> 5; // Check for pins or pindirs destination. if ((destination == 0x00 || destination == 0x4) && !state->has_set_pin) { - mp_raise_ValueError_varg(translate("Missing first_set_pin. %q[%u] sets pin(s)"), what, i); + mp_raise_ValueError_varg(translate("Missing first_set_pin. %q[%u] sets pin(s)"), what_program, i); } } if (instruction == pio_instr_bits_mov) { @@ -489,10 +489,10 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, uint16_t destination = (full_instruction & 0x00e0) >> 5; // Check for pins or pindirs destination. if (destination == 0x0 && !state->has_out_pin) { - mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] writes pin(s)"), what, i); + mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] writes pin(s)"), what_program, i); } if (source == 0x0 && !state->has_in_pin) { - mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] reads pin(s)"), what, i); + mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] reads pin(s)"), what_program, i); } if (destination == 0x6) { state->in_loaded = true; @@ -502,9 +502,9 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, } } -static void consider_program(introspect_t *state, const uint16_t *program, size_t program_len, qstr what) { +static void consider_program(introspect_t *state, const uint16_t *program, size_t program_len, qstr what_program) { for (size_t i = 0; i < program_len; i++) { - consider_instruction(state, program[i], what, i); + consider_instruction(state, program[i], what_program, i); } } From e06f836e952e96bb42d41fdea60d58b85415131a Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 7 Aug 2023 16:28:35 -0500 Subject: [PATCH 234/241] add may_exec to parameter list --- ports/raspberrypi/bindings/rp2pio/StateMachine.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/raspberrypi/bindings/rp2pio/StateMachine.c b/ports/raspberrypi/bindings/rp2pio/StateMachine.c index ae89fcdffb..cce64ac8c3 100644 --- a/ports/raspberrypi/bindings/rp2pio/StateMachine.c +++ b/ports/raspberrypi/bindings/rp2pio/StateMachine.c @@ -62,6 +62,7 @@ //| program: ReadableBuffer, //| frequency: int, //| *, +//| may_exec: Optional[ReadableBuffer] = None, //| init: Optional[ReadableBuffer] = None, //| first_out_pin: Optional[microcontroller.Pin] = None, //| out_pin_count: int = 1, From 10330b273ce83f34aa370f9a2be078deb4741127 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 8 Aug 2023 10:44:12 -0500 Subject: [PATCH 235/241] Divide 'introspect_t' into inputs & outputs leave as a single structure because it's more efficient to call functions with 4 or fewer arguments, and having two struct pointers would make `consider_instruction` have 5 arguments instead. --- .../common-hal/rp2pio/StateMachine.c | 86 ++++++++++--------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c index c4e11133c2..0583e4f803 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c @@ -405,39 +405,43 @@ static uint32_t mask_and_rotate(const mcu_pin_obj_t *first_pin, uint32_t bit_cou } typedef struct { - uint32_t pins_we_use, in_pin_count, out_pin_count; - bool has_jmp_pin, auto_push, auto_pull, has_in_pin, has_out_pin, has_set_pin; - bool tx_fifo, rx_fifo, in_loaded, out_loaded, in_used, out_used; + struct { + uint32_t pins_we_use, in_pin_count, out_pin_count; + bool has_jmp_pin, auto_push, auto_pull, has_in_pin, has_out_pin, has_set_pin; + } inputs; + struct { + bool tx_fifo, rx_fifo, in_loaded, out_loaded, in_used, out_used; + } outputs; } introspect_t; static void consider_instruction(introspect_t *state, uint16_t full_instruction, qstr what_program, size_t i) { uint16_t instruction = full_instruction & 0xe000; if (instruction == 0x8000) { if ((full_instruction & 0xe080) == pio_instr_bits_push) { - state->rx_fifo = true; - state->in_loaded = true; + state->outputs.rx_fifo = true; + state->outputs.in_loaded = true; } else { // pull otherwise. - state->tx_fifo = true; - state->out_loaded = true; + state->outputs.tx_fifo = true; + state->outputs.out_loaded = true; } } if (instruction == pio_instr_bits_jmp) { uint16_t condition = (full_instruction & 0x00e0) >> 5; - if ((condition == 0x6) && !state->has_jmp_pin) { + if ((condition == 0x6) && !state->inputs.has_jmp_pin) { mp_raise_ValueError_varg(translate("Missing jmp_pin. %q[%u] jumps on pin"), what_program, i); } } if (instruction == pio_instr_bits_wait) { uint16_t wait_source = (full_instruction & 0x0060) >> 5; uint16_t wait_index = full_instruction & 0x001f; - if (wait_source == 0 && (state->pins_we_use & (1 << wait_index)) == 0) { // GPIO + if (wait_source == 0 && (state->inputs.pins_we_use & (1 << wait_index)) == 0) { // GPIO mp_raise_ValueError_varg(translate("%q[%u] uses extra pin"), what_program, i); } if (wait_source == 1) { // Input pin - if (!state->has_in_pin) { + if (!state->inputs.has_in_pin) { mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] waits based on pin"), what_program, i); } - if (wait_index >= state->in_pin_count) { + if (wait_index >= state->inputs.in_pin_count) { mp_raise_ValueError_varg(translate("%q[%u] waits on input outside of count"), what_program, i); } } @@ -446,41 +450,41 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, uint16_t source = (full_instruction & 0x00e0) >> 5; uint16_t bit_count = full_instruction & 0x001f; if (source == 0) { - if (!state->has_in_pin) { + if (!state->inputs.has_in_pin) { mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] shifts in from pin(s)"), what_program, i); } - if (bit_count > state->in_pin_count) { + if (bit_count > state->inputs.in_pin_count) { mp_raise_ValueError_varg(translate("%q[%u] shifts in more bits than pin count"), what_program, i); } } - if (state->auto_push) { - state->in_loaded = true; - state->rx_fifo = true; + if (state->inputs.auto_push) { + state->outputs.in_loaded = true; + state->outputs.rx_fifo = true; } - state->in_used = true; + state->outputs.in_used = true; } if (instruction == pio_instr_bits_out) { uint16_t bit_count = full_instruction & 0x001f; uint16_t destination = (full_instruction & 0x00e0) >> 5; // Check for pins or pindirs destination. if (destination == 0x0 || destination == 0x4) { - if (!state->has_out_pin) { + if (!state->inputs.has_out_pin) { mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] shifts out to pin(s)"), what_program, i); } - if (bit_count > state->out_pin_count) { + if (bit_count > state->inputs.out_pin_count) { mp_raise_ValueError_varg(translate("%q[%u] shifts out more bits than pin count"), what_program, i); } } - if (state->auto_pull) { - state->out_loaded = true; - state->tx_fifo = true; + if (state->inputs.auto_pull) { + state->outputs.out_loaded = true; + state->outputs.tx_fifo = true; } - state->out_used = true; + state->outputs.out_used = true; } if (instruction == pio_instr_bits_set) { uint16_t destination = (full_instruction & 0x00e0) >> 5; // Check for pins or pindirs destination. - if ((destination == 0x00 || destination == 0x4) && !state->has_set_pin) { + if ((destination == 0x00 || destination == 0x4) && !state->inputs.has_set_pin) { mp_raise_ValueError_varg(translate("Missing first_set_pin. %q[%u] sets pin(s)"), what_program, i); } } @@ -488,16 +492,16 @@ static void consider_instruction(introspect_t *state, uint16_t full_instruction, uint16_t source = full_instruction & 0x0007; uint16_t destination = (full_instruction & 0x00e0) >> 5; // Check for pins or pindirs destination. - if (destination == 0x0 && !state->has_out_pin) { + if (destination == 0x0 && !state->inputs.has_out_pin) { mp_raise_ValueError_varg(translate("Missing first_out_pin. %q[%u] writes pin(s)"), what_program, i); } - if (source == 0x0 && !state->has_in_pin) { + if (source == 0x0 && !state->inputs.has_in_pin) { mp_raise_ValueError_varg(translate("Missing first_in_pin. %q[%u] reads pin(s)"), what_program, i); } if (destination == 0x6) { - state->in_loaded = true; + state->outputs.in_loaded = true; } else if (destination == 0x7) { - state->out_loaded = true; + state->outputs.out_loaded = true; } } } @@ -539,24 +543,26 @@ void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, // Look through the program to see what we reference and make sure it was provided. introspect_t state = { - .pins_we_use = pins_we_use, - .has_jmp_pin = jmp_pin != NULL, - .has_in_pin = first_in_pin != NULL, - .has_out_pin = first_out_pin != NULL, - .has_set_pin = first_set_pin != NULL, - .in_pin_count = in_pin_count, - .out_pin_count = out_pin_count, - .auto_pull = auto_pull, - .auto_push = auto_push, + .inputs = { + .pins_we_use = pins_we_use, + .has_jmp_pin = jmp_pin != NULL, + .has_in_pin = first_in_pin != NULL, + .has_out_pin = first_out_pin != NULL, + .has_set_pin = first_set_pin != NULL, + .in_pin_count = in_pin_count, + .out_pin_count = out_pin_count, + .auto_pull = auto_pull, + .auto_push = auto_push, + } }; consider_program(&state, program, program_len, MP_QSTR_program); consider_program(&state, init, init_len, MP_QSTR_init); consider_program(&state, may_exec, may_exec_len, MP_QSTR_may_exec); - if (!state.in_loaded && state.in_used) { + if (!state.outputs.in_loaded && state.outputs.in_used) { mp_raise_ValueError_varg(translate("Program does IN without loading ISR")); } - if (!state.out_loaded && state.out_used) { + if (!state.outputs.out_loaded && state.outputs.out_used) { mp_raise_ValueError_varg(translate("Program does OUT without loading OSR")); } @@ -609,7 +615,7 @@ void common_hal_rp2pio_statemachine_construct(rp2pio_statemachine_obj_t *self, first_sideset_pin, sideset_pin_count, initial_pin_state, initial_pin_direction, jmp_pin, - pins_we_use, state.tx_fifo, state.rx_fifo, + pins_we_use, state.outputs.tx_fifo, state.outputs.rx_fifo, auto_pull, pull_threshold, out_shift_right, wait_for_txstall, auto_push, push_threshold, in_shift_right, From 3c66a55341fdb152b4031429482baa444871abaf Mon Sep 17 00:00:00 2001 From: Daniel Schaefer Date: Wed, 2 Aug 2023 12:06:47 +0800 Subject: [PATCH 236/241] raspberrypi: Allow build without audio Signed-off-by: Daniel Schaefer --- ports/raspberrypi/supervisor/internal_flash.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ports/raspberrypi/supervisor/internal_flash.c b/ports/raspberrypi/supervisor/internal_flash.c index 42223b29e3..f5dff80d72 100644 --- a/ports/raspberrypi/supervisor/internal_flash.c +++ b/ports/raspberrypi/supervisor/internal_flash.c @@ -99,11 +99,15 @@ void port_internal_flash_flush(void) { // Make sure we don't have an interrupt while we do flash operations. common_hal_mcu_disable_interrupts(); // and audio DMA must be paused as well + #if CIRCUITPY_AUDIOCORE uint32_t channel_mask = audio_dma_pause_all(); + #endif flash_range_erase(CIRCUITPY_CIRCUITPY_DRIVE_START_ADDR + _cache_lba, SECTOR_SIZE); flash_range_program(CIRCUITPY_CIRCUITPY_DRIVE_START_ADDR + _cache_lba, _cache, SECTOR_SIZE); _cache_lba = NO_CACHE; + #if CIRCUITPY_AUDIOCORE audio_dma_unpause_mask(channel_mask); + #endif common_hal_mcu_enable_interrupts(); } From 6cbbebbfb1f7daf88940ce7bdc49d4ebb89da943 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Wed, 9 Aug 2023 19:44:11 +0200 Subject: [PATCH 237/241] 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 | 57 +++++++---------- locale/cs.po | 57 +++++++---------- locale/de_DE.po | 115 +++++++++++++++++++++------------ locale/el.po | 57 +++++++---------- locale/en_GB.po | 115 +++++++++++++++++++++------------ locale/es.po | 130 +++++++++++++++++++++++-------------- locale/fil.po | 57 +++++++---------- locale/fr.po | 132 ++++++++++++++++++++++++-------------- locale/hi.po | 57 +++++++---------- locale/it_IT.po | 57 +++++++---------- locale/ja.po | 57 +++++++---------- locale/ko.po | 57 +++++++---------- locale/nl.po | 57 +++++++---------- locale/pl.po | 57 +++++++---------- locale/pt_BR.po | 115 +++++++++++++++++++++------------ locale/ru.po | 135 ++++++++++++++++++++++++--------------- locale/sv.po | 115 +++++++++++++++++++++------------ locale/tr.po | 73 +++++++++++---------- locale/zh_Latn_pinyin.po | 125 +++++++++++++++++++++++------------- 19 files changed, 895 insertions(+), 730 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index 2ca87027c2..efbdd10479 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -254,6 +254,22 @@ msgstr "%q, %q, dan %q semuanya harus memiliki panjang yang sama" msgid "%q=%q" msgstr "" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1173,26 +1189,6 @@ msgstr "" msgid "Input/output error" msgstr "Kesalahan input/output" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Otentikasi tidak cukup" @@ -1364,38 +1360,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c diff --git a/locale/cs.po b/locale/cs.po index 04bf2aecc2..62e9fd389e 100644 --- a/locale/cs.po +++ b/locale/cs.po @@ -255,6 +255,22 @@ msgstr "%q, %q, a %q musí mít všechny shodnou délku" msgid "%q=%q" msgstr "" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1173,26 +1189,6 @@ msgstr "Vstup trval příliš dlouho" msgid "Input/output error" msgstr "Vstupně/výstupní chyba" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Nedostatečná autentizace" @@ -1364,38 +1360,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c diff --git a/locale/de_DE.po b/locale/de_DE.po index 70e0182b57..d30229687e 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -265,6 +265,22 @@ msgstr "%q, %q und %q müssen alle die gleiche Länge haben" msgid "%q=%q" msgstr "%q=%q" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1197,26 +1213,6 @@ msgstr "Input benötigt zu lange" msgid "Input/output error" msgstr "Eingabe-/Ausgabefehler" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "Anweisung %d verschiebt mehr Bits als die Anzahl der Pins" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "Der Befehl %d verschiebt mehr Bits als die Anzahl der Pins" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "Instruktion %d benötigt extra Pin" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "Anweisung %d wartet auf Eingaben außerhalb der vorhandenen Anzahl" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Unzureichende Authentifizierung" @@ -1389,39 +1385,32 @@ msgid "Mismatched swap flag" msgstr "Nicht übereinstimmendes Swap-Flag" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" -msgstr "Fehlender first_in_pin. Instruktion %d liest Pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" -msgstr "Fehlende first_in_pin. Anweisung %d verschiebt sich um Pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" -msgstr "Fehlende first_in_pin. Anweisung %d wartet basierend auf Pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" -msgstr "First_out_pin fehlt. Befehl %d verschiebt sich zu Pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" -msgstr "Fehlender first_out_pin. Instruktion %d schreibt Pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" -msgstr "Fehlender first_set_pin. Instruktion %d setzt Pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" -msgstr "jmp_pin fehlt. Befehl %d springt auf Pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" +msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c msgid "Must be a %q subclass." @@ -4471,6 +4460,50 @@ msgstr "zi muss eine Gleitkommazahl sein" msgid "zi must be of shape (n_section, 2)" msgstr "zi muss die Form (n_section, 2) haben" +#, c-format +#~ msgid "Instruction %d shifts in more bits than pin count" +#~ msgstr "Anweisung %d verschiebt mehr Bits als die Anzahl der Pins" + +#, c-format +#~ msgid "Instruction %d shifts out more bits than pin count" +#~ msgstr "Der Befehl %d verschiebt mehr Bits als die Anzahl der Pins" + +#, c-format +#~ msgid "Instruction %d uses extra pin" +#~ msgstr "Instruktion %d benötigt extra Pin" + +#, c-format +#~ msgid "Instruction %d waits on input outside of count" +#~ msgstr "Anweisung %d wartet auf Eingaben außerhalb der vorhandenen Anzahl" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d reads pin(s)" +#~ msgstr "Fehlender first_in_pin. Instruktion %d liest Pin(s)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +#~ msgstr "Fehlende first_in_pin. Anweisung %d verschiebt sich um Pin(s)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d waits based on pin" +#~ msgstr "Fehlende first_in_pin. Anweisung %d wartet basierend auf Pin" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +#~ msgstr "First_out_pin fehlt. Befehl %d verschiebt sich zu Pin(s)" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d writes pin(s)" +#~ msgstr "Fehlender first_out_pin. Instruktion %d schreibt Pin(s)" + +#, c-format +#~ msgid "Missing first_set_pin. Instruction %d sets pin(s)" +#~ msgstr "Fehlender first_set_pin. Instruktion %d setzt Pin(s)" + +#, c-format +#~ msgid "Missing jmp_pin. Instruction %d jumps on pin" +#~ msgstr "jmp_pin fehlt. Befehl %d springt auf Pin" + #~ msgid "inputs are not iterable" #~ msgstr "Eingaben sind nicht iterierbar" diff --git a/locale/el.po b/locale/el.po index 44e8de1d4c..1c4eca2c6d 100644 --- a/locale/el.po +++ b/locale/el.po @@ -266,6 +266,22 @@ msgstr "%q, %q, και %q πρέπει να είναι όλα του ιδίου msgid "%q=%q" msgstr "%q=%q" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1188,26 +1204,6 @@ msgstr "" msgid "Input/output error" msgstr "" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "" @@ -1379,38 +1375,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c diff --git a/locale/en_GB.po b/locale/en_GB.po index 0971690f8d..085c7e7b47 100644 --- a/locale/en_GB.po +++ b/locale/en_GB.po @@ -264,6 +264,22 @@ msgstr "%q, %q, and %q must all be the same length" msgid "%q=%q" msgstr "%q=%q" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1182,26 +1198,6 @@ msgstr "Input taking too long" msgid "Input/output error" msgstr "Input/output error" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "Instruction %d shifts in more bits than pin count" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "Instruction %d shifts out more bits than pin count" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "Instruction %d uses extra pin" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "Instruction %d waits on input outside of count" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Insufficient authentication" @@ -1373,39 +1369,32 @@ msgid "Mismatched swap flag" msgstr "Mismatched swap flag" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" -msgstr "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" -msgstr "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" -msgstr "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" -msgstr "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" -msgstr "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" -msgstr "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" -msgstr "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" +msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c msgid "Must be a %q subclass." @@ -4412,6 +4401,50 @@ msgstr "zi must be of float type" msgid "zi must be of shape (n_section, 2)" msgstr "zi must be of shape (n_section, 2)" +#, c-format +#~ msgid "Instruction %d shifts in more bits than pin count" +#~ msgstr "Instruction %d shifts in more bits than pin count" + +#, c-format +#~ msgid "Instruction %d shifts out more bits than pin count" +#~ msgstr "Instruction %d shifts out more bits than pin count" + +#, c-format +#~ msgid "Instruction %d uses extra pin" +#~ msgstr "Instruction %d uses extra pin" + +#, c-format +#~ msgid "Instruction %d waits on input outside of count" +#~ msgstr "Instruction %d waits on input outside of count" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d reads pin(s)" +#~ msgstr "Missing first_in_pin. Instruction %d reads pin(s)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +#~ msgstr "Missing first_in_pin. Instruction %d shifts in from pin(s)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d waits based on pin" +#~ msgstr "Missing first_in_pin. Instruction %d waits based on pin" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +#~ msgstr "Missing first_out_pin. Instruction %d shifts out to pin(s)" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d writes pin(s)" +#~ msgstr "Missing first_out_pin. Instruction %d writes pin(s)" + +#, c-format +#~ msgid "Missing first_set_pin. Instruction %d sets pin(s)" +#~ msgstr "Missing first_set_pin. Instruction %d sets pin(s)" + +#, c-format +#~ msgid "Missing jmp_pin. Instruction %d jumps on pin" +#~ msgstr "Missing jmp_pin. Instruction %d jumps on pin" + #~ msgid "inputs are not iterable" #~ msgstr "inputs are not iterable" diff --git a/locale/es.po b/locale/es.po index 242242bbeb..f7211f8926 100644 --- a/locale/es.po +++ b/locale/es.po @@ -266,6 +266,22 @@ msgstr "%q, %q, y %q deben tener la misma longitud" msgid "%q=%q" msgstr "%q=%q" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1206,26 +1222,6 @@ msgstr "La entrada está durando mucho tiempo" msgid "Input/output error" msgstr "error Input/output" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "La instruccion %d mueve mas bits que la cuenta del pin" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "La instrucción %d mueve mas bits que la cuenta del pin" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "La instrucción %d usa un pin extra" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "La instrucción %d espera una entrada fuera del conteo" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Autenticación insuficiente" @@ -1397,43 +1393,32 @@ msgid "Mismatched swap flag" msgstr "Inconsistencia en el flag de recambio" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" -msgstr "first-in-pin no encontrado. La instrucción %d lee el/los pin(es)" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" -msgstr "first_in_pin no encontrado. La instrucción %d desplaza de los pin(es)" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" -"first_in_pin no encontrado. La instrucción %d espera basada en este pin" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" -"first_in_pin no encontrado. La instrucción %d mueve hacia afuera hacia el/" -"los pin(es)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" -msgstr "first_in_pin no encontrado. La instrucción %d escribe pin(es)" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" -"first_set_pin no encontrado. La instrucción %d configura el/los pin(es)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" -msgstr "Falta el jmp_pin. La instrucción %d se dispara en el pin" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "Missing first_out_pin. %q[%u] writes pin(s)" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "Missing first_set_pin. %q[%u] sets pin(s)" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "Missing jmp_pin. %q[%u] jumps on pin" +msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c msgid "Must be a %q subclass." @@ -4468,6 +4453,55 @@ msgstr "zi debe ser de tipo flotante" msgid "zi must be of shape (n_section, 2)" msgstr "zi debe ser una forma (n_section,2)" +#, c-format +#~ msgid "Instruction %d shifts in more bits than pin count" +#~ msgstr "La instruccion %d mueve mas bits que la cuenta del pin" + +#, c-format +#~ msgid "Instruction %d shifts out more bits than pin count" +#~ msgstr "La instrucción %d mueve mas bits que la cuenta del pin" + +#, c-format +#~ msgid "Instruction %d uses extra pin" +#~ msgstr "La instrucción %d usa un pin extra" + +#, c-format +#~ msgid "Instruction %d waits on input outside of count" +#~ msgstr "La instrucción %d espera una entrada fuera del conteo" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d reads pin(s)" +#~ msgstr "first-in-pin no encontrado. La instrucción %d lee el/los pin(es)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +#~ msgstr "" +#~ "first_in_pin no encontrado. La instrucción %d desplaza de los pin(es)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d waits based on pin" +#~ msgstr "" +#~ "first_in_pin no encontrado. La instrucción %d espera basada en este pin" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +#~ msgstr "" +#~ "first_in_pin no encontrado. La instrucción %d mueve hacia afuera hacia el/" +#~ "los pin(es)" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d writes pin(s)" +#~ msgstr "first_in_pin no encontrado. La instrucción %d escribe pin(es)" + +#, c-format +#~ msgid "Missing first_set_pin. Instruction %d sets pin(s)" +#~ msgstr "" +#~ "first_set_pin no encontrado. La instrucción %d configura el/los pin(es)" + +#, c-format +#~ msgid "Missing jmp_pin. Instruction %d jumps on pin" +#~ msgstr "Falta el jmp_pin. La instrucción %d se dispara en el pin" + #~ msgid "inputs are not iterable" #~ msgstr "Entradas no son iterables" diff --git a/locale/fil.po b/locale/fil.po index 2d84f82afc..51dc2ab776 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -253,6 +253,22 @@ msgstr "" msgid "%q=%q" msgstr "" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1173,26 +1189,6 @@ msgstr "" msgid "Input/output error" msgstr "May mali sa Input/Output" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "" @@ -1364,38 +1360,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c diff --git a/locale/fr.po b/locale/fr.po index 83cca9f61c..da50428ded 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -266,6 +266,22 @@ msgstr "%q, %q, et %q doivent tous être de la même longueur" msgid "%q=%q" msgstr "%q=%q" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1211,30 +1227,6 @@ msgstr "L'entrée prend trop de temps" msgid "Input/output error" msgstr "Erreur d'entrée/sortie" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" -"Instruction %d décale vers l'intérieur de plus de bits que le nombre de " -"broches" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" -"instruction %d décale vers l'extérieur de plus de bits que le nombre de " -"broches" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "instruction %d utilise des broches supplémentaires" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "instruction %d attend sur une entrée hors du compte" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Authentification insuffisante" @@ -1408,41 +1400,32 @@ msgid "Mismatched swap flag" msgstr "Le drapeau d'échange ne correspond pas" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" -msgstr "first_in_pin manquant. Instruction %d lit une/des broche(s)" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" -"first_in_pin manquant. Instruction %d est déplacée par la/les broche(s)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" -msgstr "first_in_pin manquant. L'instruction %d attends dépends de la broche" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" -"first_out_pin manquant. Instruction %d est déplacée par la/les broche(s)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" -msgstr "first_out_pin manquant. Instruction %d écrit un/des broche(s)" +msgid "Missing first_in_pin. %q[%u] waits based on pin" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" -msgstr "first_set_pin manquant. L'instruction %d règle la/les broche(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" -msgstr "jmp_pin manquant. L'instruction %d va passer à la broche" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "Missing first_set_pin. %q[%u] sets pin(s)" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "Missing jmp_pin. %q[%u] jumps on pin" +msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c msgid "Must be a %q subclass." @@ -4490,6 +4473,57 @@ msgstr "zi doit être de type float" msgid "zi must be of shape (n_section, 2)" msgstr "zi doit être de forme (n_section, 2)" +#, c-format +#~ msgid "Instruction %d shifts in more bits than pin count" +#~ msgstr "" +#~ "Instruction %d décale vers l'intérieur de plus de bits que le nombre de " +#~ "broches" + +#, c-format +#~ msgid "Instruction %d shifts out more bits than pin count" +#~ msgstr "" +#~ "instruction %d décale vers l'extérieur de plus de bits que le nombre de " +#~ "broches" + +#, c-format +#~ msgid "Instruction %d uses extra pin" +#~ msgstr "instruction %d utilise des broches supplémentaires" + +#, c-format +#~ msgid "Instruction %d waits on input outside of count" +#~ msgstr "instruction %d attend sur une entrée hors du compte" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d reads pin(s)" +#~ msgstr "first_in_pin manquant. Instruction %d lit une/des broche(s)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +#~ msgstr "" +#~ "first_in_pin manquant. Instruction %d est déplacée par la/les broche(s)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d waits based on pin" +#~ msgstr "" +#~ "first_in_pin manquant. L'instruction %d attends dépends de la broche" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +#~ msgstr "" +#~ "first_out_pin manquant. Instruction %d est déplacée par la/les broche(s)" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d writes pin(s)" +#~ msgstr "first_out_pin manquant. Instruction %d écrit un/des broche(s)" + +#, c-format +#~ msgid "Missing first_set_pin. Instruction %d sets pin(s)" +#~ msgstr "first_set_pin manquant. L'instruction %d règle la/les broche(s)" + +#, c-format +#~ msgid "Missing jmp_pin. Instruction %d jumps on pin" +#~ msgstr "jmp_pin manquant. L'instruction %d va passer à la broche" + #~ msgid "inputs are not iterable" #~ msgstr "les entrées ne sont pas itérables" diff --git a/locale/hi.po b/locale/hi.po index 392e1bbf6d..ee8317745f 100644 --- a/locale/hi.po +++ b/locale/hi.po @@ -251,6 +251,22 @@ msgstr "" msgid "%q=%q" msgstr "" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1161,26 +1177,6 @@ msgstr "" msgid "Input/output error" msgstr "" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "" @@ -1352,38 +1348,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c diff --git a/locale/it_IT.po b/locale/it_IT.po index 5de8a79ef9..2e08d149ed 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -255,6 +255,22 @@ msgstr "" msgid "%q=%q" msgstr "" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1175,26 +1191,6 @@ msgstr "" msgid "Input/output error" msgstr "Errore input/output" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "" @@ -1367,38 +1363,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c diff --git a/locale/ja.po b/locale/ja.po index 14c9dd84d1..ae1b71a8db 100644 --- a/locale/ja.po +++ b/locale/ja.po @@ -258,6 +258,22 @@ msgstr "" msgid "%q=%q" msgstr "" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1174,26 +1190,6 @@ msgstr "" msgid "Input/output error" msgstr "入力/出力エラー" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "認証が不十分" @@ -1365,38 +1361,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c diff --git a/locale/ko.po b/locale/ko.po index dc3002a256..2fd584eb20 100644 --- a/locale/ko.po +++ b/locale/ko.po @@ -252,6 +252,22 @@ msgstr "" msgid "%q=%q" msgstr "" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1164,26 +1180,6 @@ msgstr "" msgid "Input/output error" msgstr "" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "" @@ -1355,38 +1351,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c diff --git a/locale/nl.po b/locale/nl.po index c6e1decfc1..aa522ad111 100644 --- a/locale/nl.po +++ b/locale/nl.po @@ -251,6 +251,22 @@ msgstr "" msgid "%q=%q" msgstr "" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1169,26 +1185,6 @@ msgstr "Invoer duurt te lang" msgid "Input/output error" msgstr "Input/Output fout" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Onvoldoende authenticatie" @@ -1360,38 +1356,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c diff --git a/locale/pl.po b/locale/pl.po index 32ae38249f..56ef448d61 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -253,6 +253,22 @@ msgstr "" msgid "%q=%q" msgstr "" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1169,26 +1185,6 @@ msgstr "" msgid "Input/output error" msgstr "Błąd I/O" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Niewystarczające uwierzytelnienie" @@ -1360,38 +1356,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c diff --git a/locale/pt_BR.po b/locale/pt_BR.po index f6bd115445..49935b2c74 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -264,6 +264,22 @@ msgstr "todos os %q, %q, e %q devem ter mesmo comprimento" msgid "%q=%q" msgstr "%q=%q" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1203,26 +1219,6 @@ msgstr "A entrada está demorando demais" msgid "Input/output error" msgstr "Erro de entrada/saída" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "A instrução %d muda com mais bits do que a quantidade dos pinos" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "A instrução %d desloca mais bits do que a quantidade dos pinos" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "A instrução %d usa um pino extra" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "A instrução %d aguarda a entrada de fora da contagem" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Autenticação insuficiente" @@ -1394,39 +1390,32 @@ msgid "Mismatched swap flag" msgstr "Sinalizador de troca incompatível" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" -msgstr "Faltando first_in_pin. A instrução %d lê pinos(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" -msgstr "Faltando first_in_pin. A instrução %d muda a partir do(s) pino(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" -msgstr "Faltando first_in_pin. A instrução %d aguarda com base no pino" +msgid "Missing first_in_pin. %q[%u] waits based on pin" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" -msgstr "Faltando first_out_pin. A instrução %d muda para o(s) pinos(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" -msgstr "Faltando first_out_pin. A instrução %d escreve nos pinos(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" -msgstr "Faltando first_set_pin. A instrução %d define os pinos(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" -msgstr "Falta o jmp_pin. A instrução %d salta no pino" +msgid "Missing jmp_pin. %q[%u] jumps on pin" +msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c msgid "Must be a %q subclass." @@ -4470,6 +4459,50 @@ msgstr "zi deve ser de um tipo float" msgid "zi must be of shape (n_section, 2)" msgstr "zi deve estar na forma (n_section, 2)" +#, c-format +#~ msgid "Instruction %d shifts in more bits than pin count" +#~ msgstr "A instrução %d muda com mais bits do que a quantidade dos pinos" + +#, c-format +#~ msgid "Instruction %d shifts out more bits than pin count" +#~ msgstr "A instrução %d desloca mais bits do que a quantidade dos pinos" + +#, c-format +#~ msgid "Instruction %d uses extra pin" +#~ msgstr "A instrução %d usa um pino extra" + +#, c-format +#~ msgid "Instruction %d waits on input outside of count" +#~ msgstr "A instrução %d aguarda a entrada de fora da contagem" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d reads pin(s)" +#~ msgstr "Faltando first_in_pin. A instrução %d lê pinos(s)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +#~ msgstr "Faltando first_in_pin. A instrução %d muda a partir do(s) pino(s)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d waits based on pin" +#~ msgstr "Faltando first_in_pin. A instrução %d aguarda com base no pino" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +#~ msgstr "Faltando first_out_pin. A instrução %d muda para o(s) pinos(s)" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d writes pin(s)" +#~ msgstr "Faltando first_out_pin. A instrução %d escreve nos pinos(s)" + +#, c-format +#~ msgid "Missing first_set_pin. Instruction %d sets pin(s)" +#~ msgstr "Faltando first_set_pin. A instrução %d define os pinos(s)" + +#, c-format +#~ msgid "Missing jmp_pin. Instruction %d jumps on pin" +#~ msgstr "Falta o jmp_pin. A instrução %d salta no pino" + #~ msgid "inputs are not iterable" #~ msgstr "as entradas não são iteráveis" diff --git a/locale/ru.po b/locale/ru.po index f1fd186a24..8d5739ae4d 100644 --- a/locale/ru.po +++ b/locale/ru.po @@ -258,6 +258,22 @@ msgstr "%q, %q, и %q должны быть одной длинны" msgid "%q=%q" msgstr "%q=%q" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1202,29 +1218,6 @@ msgstr "Ввод занимает слишком много времени" msgid "Input/output error" msgstr "Ошибка ввода/вывода" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "" -"Инструкция %d вводит (shifts in) большее количество бит, чем количество пинов" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "" -"Инструкция %d выводит (shifts out) большее количество бит, чем количество " -"пинов" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "Инструкция %d использует дополнительный пин" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "Инструкция %d ожидает ввода за пределами count" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Неполная аутентификация" @@ -1399,40 +1392,32 @@ msgid "Mismatched swap flag" msgstr "Несоответствие флага swap" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" -msgstr "Отсутствует first_in_pin. Инструкция %d читает состояние пина (-ов)" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" -msgstr "Отсутствует first_out_pin. Инструкция %d вводит (shifts out) на пин(ы)" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" -msgstr "Отсутствует first_in_pin. Инструкция %d ожидает на основе пина" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" -"Отсутствует first_out_pin. Инструкция %d выводит (shifts out) на пин(ы)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" -msgstr "Отсутствует first_out_pin. Инструкция %d записывает пин(ы)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" -msgstr "Отсутствует first_set_pin. Инструкция %d устанавливает пин(ы)" +msgid "Missing first_in_pin. %q[%u] waits based on pin" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" -msgstr "Отсутствует jmp_pin. Инструкция %d перепрыгивает на пин" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "Missing first_out_pin. %q[%u] writes pin(s)" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "Missing first_set_pin. %q[%u] sets pin(s)" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "Missing jmp_pin. %q[%u] jumps on pin" +msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c msgid "Must be a %q subclass." @@ -4432,6 +4417,56 @@ msgstr "zi должно быть типа float" msgid "zi must be of shape (n_section, 2)" msgstr "zi должен иметь форму (n_section, 2)" +#, c-format +#~ msgid "Instruction %d shifts in more bits than pin count" +#~ msgstr "" +#~ "Инструкция %d вводит (shifts in) большее количество бит, чем количество " +#~ "пинов" + +#, c-format +#~ msgid "Instruction %d shifts out more bits than pin count" +#~ msgstr "" +#~ "Инструкция %d выводит (shifts out) большее количество бит, чем количество " +#~ "пинов" + +#, c-format +#~ msgid "Instruction %d uses extra pin" +#~ msgstr "Инструкция %d использует дополнительный пин" + +#, c-format +#~ msgid "Instruction %d waits on input outside of count" +#~ msgstr "Инструкция %d ожидает ввода за пределами count" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d reads pin(s)" +#~ msgstr "Отсутствует first_in_pin. Инструкция %d читает состояние пина (-ов)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +#~ msgstr "" +#~ "Отсутствует first_out_pin. Инструкция %d вводит (shifts out) на пин(ы)" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d waits based on pin" +#~ msgstr "Отсутствует first_in_pin. Инструкция %d ожидает на основе пина" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +#~ msgstr "" +#~ "Отсутствует first_out_pin. Инструкция %d выводит (shifts out) на пин(ы)" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d writes pin(s)" +#~ msgstr "Отсутствует first_out_pin. Инструкция %d записывает пин(ы)" + +#, c-format +#~ msgid "Missing first_set_pin. Instruction %d sets pin(s)" +#~ msgstr "Отсутствует first_set_pin. Инструкция %d устанавливает пин(ы)" + +#, c-format +#~ msgid "Missing jmp_pin. Instruction %d jumps on pin" +#~ msgstr "Отсутствует jmp_pin. Инструкция %d перепрыгивает на пин" + #~ msgid "Cannot transfer without MOSI and MISO pins" #~ msgstr "Невозможно передать данные без пинов MOSI и MISO" diff --git a/locale/sv.po b/locale/sv.po index 57164b7062..cf72378e93 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -265,6 +265,22 @@ msgstr "%q, %q och %q måste vara lika långa" msgid "%q=%q" msgstr "%q=%q" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1188,26 +1204,6 @@ msgstr "Indata tar för lång tid" msgid "Input/output error" msgstr "Indata-/utdatafel" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "Instruktion %d skiftar fler bitar än antalet pinnar" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "Instruktion %d skiftar fler bitar än antal pinnar" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "Instruktion %d använder extra pinne" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "Instruktion %d väntar på inmatning utanför intervallet" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Otillräcklig autentisering" @@ -1380,39 +1376,32 @@ msgid "Mismatched swap flag" msgstr "Felaktig swapflagga" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" -msgstr "Saknad first_in_pin. Instruktion %d läser pinnar" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" -msgstr "Saknad first_in_pin. Instruktion %d skiftar in från pinnar" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" -msgstr "Saknad first_in_pin. Instruktion %d väntar baserat på pinne" +msgid "Missing first_in_pin. %q[%u] waits based on pin" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" -msgstr "Saknad first_out_pin. Instruktion %d skiftar ut till pinnar" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" -msgstr "Saknad first_out_pin. Instruktion %d skriver till pinnar" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" -msgstr "Saknad first_set_pin. Instruktion %d sätter pinnar" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" -msgstr "Saknar jmp_pin. Instruktion %d hoppar på pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" +msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c msgid "Must be a %q subclass." @@ -4430,6 +4419,50 @@ msgstr "zi måste vara av typ float" msgid "zi must be of shape (n_section, 2)" msgstr "zi måste vara i formen (n_section, 2)" +#, c-format +#~ msgid "Instruction %d shifts in more bits than pin count" +#~ msgstr "Instruktion %d skiftar fler bitar än antalet pinnar" + +#, c-format +#~ msgid "Instruction %d shifts out more bits than pin count" +#~ msgstr "Instruktion %d skiftar fler bitar än antal pinnar" + +#, c-format +#~ msgid "Instruction %d uses extra pin" +#~ msgstr "Instruktion %d använder extra pinne" + +#, c-format +#~ msgid "Instruction %d waits on input outside of count" +#~ msgstr "Instruktion %d väntar på inmatning utanför intervallet" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d reads pin(s)" +#~ msgstr "Saknad first_in_pin. Instruktion %d läser pinnar" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +#~ msgstr "Saknad first_in_pin. Instruktion %d skiftar in från pinnar" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d waits based on pin" +#~ msgstr "Saknad first_in_pin. Instruktion %d väntar baserat på pinne" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +#~ msgstr "Saknad first_out_pin. Instruktion %d skiftar ut till pinnar" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d writes pin(s)" +#~ msgstr "Saknad first_out_pin. Instruktion %d skriver till pinnar" + +#, c-format +#~ msgid "Missing first_set_pin. Instruction %d sets pin(s)" +#~ msgstr "Saknad first_set_pin. Instruktion %d sätter pinnar" + +#, c-format +#~ msgid "Missing jmp_pin. Instruction %d jumps on pin" +#~ msgstr "Saknar jmp_pin. Instruktion %d hoppar på pin" + #~ msgid "inputs are not iterable" #~ msgstr "indata är inte iterbara" diff --git a/locale/tr.po b/locale/tr.po index 3faed02135..2a04dabdcf 100644 --- a/locale/tr.po +++ b/locale/tr.po @@ -259,6 +259,22 @@ msgstr "%q, %q ve %q aynı uzunlukta olmalıdır" msgid "%q=%q" msgstr "%q=%q" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1179,26 +1195,6 @@ msgstr "Giriş çok uzun sürüyor" msgid "Input/output error" msgstr "Giriş/çıkış hatası" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "Komut %d pin sayısından daha fazla bit içe kaydırıyor" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "Komut %d pin sayısından daha fazla bit dışa kaydırıyor" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "Komut %d extra pin kullanıyor" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "Komut %d sayım dışında, girişte bekler" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Yetersiz kimlik doğrulama" @@ -1371,38 +1367,31 @@ msgid "Mismatched swap flag" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] waits based on pin" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" +msgid "Missing first_set_pin. %q[%u] sets pin(s)" msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" +msgid "Missing jmp_pin. %q[%u] jumps on pin" msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c @@ -4391,6 +4380,22 @@ msgstr "" msgid "zi must be of shape (n_section, 2)" msgstr "" +#, c-format +#~ msgid "Instruction %d shifts in more bits than pin count" +#~ msgstr "Komut %d pin sayısından daha fazla bit içe kaydırıyor" + +#, c-format +#~ msgid "Instruction %d shifts out more bits than pin count" +#~ msgstr "Komut %d pin sayısından daha fazla bit dışa kaydırıyor" + +#, c-format +#~ msgid "Instruction %d uses extra pin" +#~ msgstr "Komut %d extra pin kullanıyor" + +#, c-format +#~ msgid "Instruction %d waits on input outside of count" +#~ msgstr "Komut %d sayım dışında, girişte bekler" + #~ msgid "Cannot transfer without MOSI and MISO pins" #~ msgstr "MOSI ve MISO pinleri olmadan transfer edilemiyor" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 9dc9b39c21..c285611635 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -267,6 +267,22 @@ msgstr "%q, %q, hé %q bì xū cháng dù xiāng tóng" msgid "%q=%q" msgstr "%q=%q" +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts in more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] shifts out more bits than pin count" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] uses extra pin" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "%q[%u] waits on input outside of count" +msgstr "" + #: ports/espressif/common-hal/espidf/__init__.c #, c-format msgid "%s error 0x%x" @@ -1195,26 +1211,6 @@ msgstr "Shūrù shíjiānguò zhǎng" msgid "Input/output error" msgstr "Shūrù/shūchū cuòwù" -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts in more bits than pin count" -msgstr "zhǐ lìng %d yí wèi chāo guò yǐn jiǎo jì shù" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d shifts out more bits than pin count" -msgstr "zhǐ lìng %d yí chū de wèi bǐ yǐn jiǎo shù duō" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d uses extra pin" -msgstr "zhǐ lìng %d shǐ yòng é wài de yǐn jiǎo" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Instruction %d waits on input outside of count" -msgstr "zhǐ lìng %d děng dài jì shù zhī wài de shū rù" - #: ports/nrf/common-hal/_bleio/__init__.c msgid "Insufficient authentication" msgstr "Rènzhèng bùzú" @@ -1386,40 +1382,32 @@ msgid "Mismatched swap flag" msgstr "jiāohuàn biāozhì bù pǐpèi" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d reads pin(s)" -msgstr "shǒu xiān zài yǐn jiǎo zhōng quē shī. zhǐ lìng %d dú qǔ yǐn jiǎo" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" -msgstr "shǒu xiān zài yǐn jiǎo zhōng quē shī. zhǐ lìng %d cóng yǐn jiǎo yí wèi" - -#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_in_pin. Instruction %d waits based on pin" +msgid "Missing first_in_pin. %q[%u] reads pin(s)" msgstr "" -"shǒu xiān zài yǐn jiǎo zhōng quē shī. jī yú yǐn jiǎo de zhǐ lìng %d děng dài" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" -msgstr "xiān lòu chū yǐn jiǎo. zhǐ lìng %d yí chū dào yǐn jiǎo" +msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_out_pin. Instruction %d writes pin(s)" -msgstr "xiān lòu chū yǐn jiǎo. zhǐ lìng %d xiě rù yǐn jiǎo" +msgid "Missing first_in_pin. %q[%u] waits based on pin" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing first_set_pin. Instruction %d sets pin(s)" -msgstr "quē shǎo dì yī zǔ yǐn jiǎo. zhǐ lìng %d shè zhì yǐn jiǎo" +msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" +msgstr "" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c -#, c-format -msgid "Missing jmp_pin. Instruction %d jumps on pin" -msgstr "shī zōng de jmp_pin. zhǐ lìng %d zài yǐn jiǎo shàng tiào yuè" +msgid "Missing first_out_pin. %q[%u] writes pin(s)" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "Missing first_set_pin. %q[%u] sets pin(s)" +msgstr "" + +#: ports/raspberrypi/common-hal/rp2pio/StateMachine.c +msgid "Missing jmp_pin. %q[%u] jumps on pin" +msgstr "" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c msgid "Must be a %q subclass." @@ -4436,6 +4424,53 @@ msgstr "zi bìxū wèi fú diǎn xíng" msgid "zi must be of shape (n_section, 2)" msgstr "zi bìxū jùyǒu xíngzhuàng (n_section,2)" +#, c-format +#~ msgid "Instruction %d shifts in more bits than pin count" +#~ msgstr "zhǐ lìng %d yí wèi chāo guò yǐn jiǎo jì shù" + +#, c-format +#~ msgid "Instruction %d shifts out more bits than pin count" +#~ msgstr "zhǐ lìng %d yí chū de wèi bǐ yǐn jiǎo shù duō" + +#, c-format +#~ msgid "Instruction %d uses extra pin" +#~ msgstr "zhǐ lìng %d shǐ yòng é wài de yǐn jiǎo" + +#, c-format +#~ msgid "Instruction %d waits on input outside of count" +#~ msgstr "zhǐ lìng %d děng dài jì shù zhī wài de shū rù" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d reads pin(s)" +#~ msgstr "shǒu xiān zài yǐn jiǎo zhōng quē shī. zhǐ lìng %d dú qǔ yǐn jiǎo" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d shifts in from pin(s)" +#~ msgstr "" +#~ "shǒu xiān zài yǐn jiǎo zhōng quē shī. zhǐ lìng %d cóng yǐn jiǎo yí wèi" + +#, c-format +#~ msgid "Missing first_in_pin. Instruction %d waits based on pin" +#~ msgstr "" +#~ "shǒu xiān zài yǐn jiǎo zhōng quē shī. jī yú yǐn jiǎo de zhǐ lìng %d děng " +#~ "dài" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d shifts out to pin(s)" +#~ msgstr "xiān lòu chū yǐn jiǎo. zhǐ lìng %d yí chū dào yǐn jiǎo" + +#, c-format +#~ msgid "Missing first_out_pin. Instruction %d writes pin(s)" +#~ msgstr "xiān lòu chū yǐn jiǎo. zhǐ lìng %d xiě rù yǐn jiǎo" + +#, c-format +#~ msgid "Missing first_set_pin. Instruction %d sets pin(s)" +#~ msgstr "quē shǎo dì yī zǔ yǐn jiǎo. zhǐ lìng %d shè zhì yǐn jiǎo" + +#, c-format +#~ msgid "Missing jmp_pin. Instruction %d jumps on pin" +#~ msgstr "shī zōng de jmp_pin. zhǐ lìng %d zài yǐn jiǎo shàng tiào yuè" + #~ msgid "inputs are not iterable" #~ msgstr "shū rù bù kě yí dòng" From 8a468354fef079fd7928f9848cdeebd22f0fd7e2 Mon Sep 17 00:00:00 2001 From: Jonny Bergdahl Date: Wed, 9 Aug 2023 17:48:14 +0000 Subject: [PATCH 238/241] Translated using Weblate (Swedish) Currently translated at 99.2% (991 of 998 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/sv/ --- locale/sv.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/locale/sv.po b/locale/sv.po index cf72378e93..c0ea509420 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-08-04 16:42+0000\n" +"PO-Revision-Date: 2023-08-09 17:50+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" "Language: sv\n" @@ -267,19 +267,19 @@ msgstr "%q=%q" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] shifts in more bits than pin count" -msgstr "" +msgstr "%q[%u] skiftar in fler bita än antal pinnar" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] shifts out more bits than pin count" -msgstr "" +msgstr "%q[%u] skiftar ut fler bits än antal pinnar" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] uses extra pin" -msgstr "" +msgstr "%q[%u] använder extra pinnar" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] waits on input outside of count" -msgstr "" +msgstr "%q[%u] väntar på input utanför count" #: ports/espressif/common-hal/espidf/__init__.c #, c-format From b650320f51a523c36d6387ee6d5b8fbb64f19b7c Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Wed, 9 Aug 2023 21:32:26 +0000 Subject: [PATCH 239/241] Translated using Weblate (French) Currently translated at 95.5% (954 of 998 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/fr/ --- locale/fr.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/locale/fr.po b/locale/fr.po index da50428ded..30e75859e9 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -8,14 +8,14 @@ msgstr "" "Project-Id-Version: 0.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-05-21 00:49+0000\n" -"Last-Translator: Scott Shawcroft \n" +"PO-Revision-Date: 2023-08-10 23:51+0000\n" +"Last-Translator: Jeff Epler \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.18-dev\n" +"X-Generator: Weblate 5.0-dev\n" #: main.c msgid "" @@ -160,7 +160,7 @@ msgstr "échec de l'initialisation %q" #: ports/espressif/bindings/espnow/Peer.c shared-bindings/dualbank/__init__.c msgid "%q is %q" -msgstr "" +msgstr "%q est %q" #: ports/raspberrypi/common-hal/wifi/Radio.c msgid "%q is read-only for this board" @@ -217,11 +217,11 @@ msgstr "%q doit être a bytearray ou array de type 'h', 'H', 'b', ou 'B'" #: ports/espressif/common-hal/analogbufio/BufferedIn.c msgid "%q must be array of type 'H'" -msgstr "" +msgstr "%q doit être array de type 'H'" #: shared-module/synthio/__init__.c msgid "%q must be array of type 'h'" -msgstr "" +msgstr "%q doit être array de type 'h'" #: ports/raspberrypi/bindings/cyw43/__init__.c py/argcheck.c py/objexcept.c #: shared-bindings/canio/CAN.c shared-bindings/digitalio/Pull.c @@ -268,19 +268,19 @@ msgstr "%q=%q" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] shifts in more bits than pin count" -msgstr "" +msgstr "%q[%u] décale vers l'intérieur de plus de bits que le nombre de broches" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] shifts out more bits than pin count" -msgstr "" +msgstr "%q[%u] décale vers l'extérieur de plus de bits que le nombre de broches" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] uses extra pin" -msgstr "" +msgstr "%q[%u] utilise des broches supplémentaires" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] waits on input outside of count" -msgstr "" +msgstr "%q[%u] attend sur une entrée hors du compte" #: ports/espressif/common-hal/espidf/__init__.c #, c-format @@ -507,7 +507,7 @@ msgstr "Tout les canaux sont utilisés" #: ports/raspberrypi/common-hal/usb_host/Port.c msgid "All dma channels in use" -msgstr "" +msgstr "Toutes les canals DMA sont utilisées" #: ports/atmel-samd/common-hal/audioio/AudioOut.c msgid "All event channels in use" From 9ec83cd896193870bf26f0df4098efb797ba94b9 Mon Sep 17 00:00:00 2001 From: Wellington Terumi Uemura Date: Wed, 9 Aug 2023 23:09:41 +0000 Subject: [PATCH 240/241] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (998 of 998 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/pt_BR/ --- locale/pt_BR.po | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 49935b2c74..3b1a55297c 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-08-06 17:45+0000\n" +"PO-Revision-Date: 2023-08-10 23:51+0000\n" "Last-Translator: Wellington Terumi Uemura \n" "Language-Team: \n" "Language: pt_BR\n" @@ -266,19 +266,19 @@ msgstr "%q=%q" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] shifts in more bits than pin count" -msgstr "" +msgstr "%q[%u] desloca mais bits na entrada do que a contagem de pinos" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] shifts out more bits than pin count" -msgstr "" +msgstr "%q[%u] desloca mais bits na saída do que a contagem de pinos" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] uses extra pin" -msgstr "" +msgstr "%q[%u] usa pino extra" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "%q[%u] waits on input outside of count" -msgstr "" +msgstr "%q[%u] espera na entrada fora da contagem" #: ports/espressif/common-hal/espidf/__init__.c #, c-format @@ -1391,31 +1391,31 @@ msgstr "Sinalizador de troca incompatível" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_in_pin. %q[%u] reads pin(s)" -msgstr "" +msgstr "Faltando first_in_pin. %q[%u] lê pino(s)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" -msgstr "" +msgstr "Faltando first_in_pin. %q[%u] muda de pino(s)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_in_pin. %q[%u] waits based on pin" -msgstr "" +msgstr "Faltando first_in_pin. %q[%u] espera com base no pino" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" -msgstr "" +msgstr "Faltando first_out_pin. %q[%u] desloca para fora dos pino(s)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_out_pin. %q[%u] writes pin(s)" -msgstr "" +msgstr "Faltando first_out_pin. %q[%u] escreve pino(s)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_set_pin. %q[%u] sets pin(s)" -msgstr "" +msgstr "Faltando first_set_pin. %q[%u] define pino(s)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing jmp_pin. %q[%u] jumps on pin" -msgstr "" +msgstr "Falta jmp_pin. %q[%u] jumper no pino" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c msgid "Must be a %q subclass." From 6c8bfe3386c1b6eb7c488142fc6b191dde8660a8 Mon Sep 17 00:00:00 2001 From: Jonny Bergdahl Date: Wed, 9 Aug 2023 17:51:59 +0000 Subject: [PATCH 241/241] Translated using Weblate (Swedish) Currently translated at 100.0% (998 of 998 strings) Translation: CircuitPython/main Translate-URL: https://hosted.weblate.org/projects/circuitpython/main/sv/ --- locale/sv.po | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/locale/sv.po b/locale/sv.po index c0ea509420..a631e4fce0 100644 --- a/locale/sv.po +++ b/locale/sv.po @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-04 12:55-0600\n" -"PO-Revision-Date: 2023-08-09 17:50+0000\n" +"PO-Revision-Date: 2023-08-10 23:51+0000\n" "Last-Translator: Jonny Bergdahl \n" "Language-Team: LANGUAGE \n" "Language: sv\n" @@ -1377,31 +1377,31 @@ msgstr "Felaktig swapflagga" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_in_pin. %q[%u] reads pin(s)" -msgstr "" +msgstr "Saknad first_in_pin. %q[%u] läser pin(s)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_in_pin. %q[%u] shifts in from pin(s)" -msgstr "" +msgstr "Saknad first_in_pin. %q[%u] skiftar in från pinne" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_in_pin. %q[%u] waits based on pin" -msgstr "" +msgstr "Saknad first_in_pin. %q[%u] väntar baserat på pin" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_out_pin. %q[%u] shifts out to pin(s)" -msgstr "" +msgstr "Saknad first_in_pin. %q[%u] skiftar ut från pinne" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_out_pin. %q[%u] writes pin(s)" -msgstr "" +msgstr "Saknad first_out_pin. %q[%u] skriver pin(s)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing first_set_pin. %q[%u] sets pin(s)" -msgstr "" +msgstr "Saknad first_set_pin. %q[%u] sätter pin(s)" #: ports/raspberrypi/common-hal/rp2pio/StateMachine.c msgid "Missing jmp_pin. %q[%u] jumps on pin" -msgstr "" +msgstr "Saknad jmp_pin. %q[%u] hoppar på pin" #: shared-bindings/busio/UART.c shared-bindings/displayio/Group.c msgid "Must be a %q subclass."