From f1256c0b35d8ff3e1893bd345a6ff29c2ee2e752 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Thu, 4 Jul 2019 01:18:16 -0500 Subject: [PATCH 01/59] add script to gather module support matrix info; add initial json file --- docs/shared_bindings_matrix.py | 130 ++++++++ shared-bindings/support_matrix.json | 441 ++++++++++++++++++++++++++++ 2 files changed, 571 insertions(+) create mode 100644 docs/shared_bindings_matrix.py create mode 100644 shared-bindings/support_matrix.json diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py new file mode 100644 index 0000000000..ebcadb7ad5 --- /dev/null +++ b/docs/shared_bindings_matrix.py @@ -0,0 +1,130 @@ +# The MIT License (MIT) +# +# Copyright (c) 2019 Michael Schroeder +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# 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. +# + +import json +import os +import re + + +SUPPORTED_PORTS = ["atmel-samd", "nrf"] + + +def get_shared_bindings(): + """ Get a list of modules in shared-bindings based on folder names + """ + return [item for item in os.listdir("./shared-bindings")] + + +def read_mpconfig(): + """ Open 'circuitpy_mpconfig.mk' and return the contents. + """ + configs = [] + with open("py/circuitpy_mpconfig.mk") as mpconfig: + configs = mpconfig.read() + + return configs + + +def build_json(modules, configs): + """ 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). + + """ + base_json = dict() + full_build = False + for module in modules: + full_name = module + search_name = module.lstrip("_") + re_pattern = "CIRCUITPY_{}\s=\s(.+)".format(search_name.upper()) + find_config = re.search(re_pattern, configs) + #print(module, "|", find_config) + if not find_config: + continue + full_build = int("FULL_BUILD" in find_config[0]) + #print(find_config[1]) + if not full_build: + default_val = find_config[1] + else: + default_val = "None" + base_json[search_name] = { + "name": full_name, + "full_build": str(full_build), + "default_value": default_val, + "excluded": [] + } + + return get_excluded_boards(base_json) + + +def get_excluded_boards(base_json): + """ Cycles through each board's `mpconfigboard.mk` file to determine + if each module is included or not. Boards are selected by existence + in a port listed in `SUPPORTED_PORTS` (e.g. `/port/nrf/feather_52840`) + """ + modules = list(base_json.keys()) + for port in SUPPORTED_PORTS: + port_dir = "ports/{}/boards".format(port) + with os.scandir(port_dir) as boards: + for entry in boards: + if not entry.is_dir(): + continue + contents = "" + board_dir = os.path.join(entry.path, "mpconfigboard.mk") + #print(board_dir) + with open(board_dir) as board: + contents = board.read() + for module in modules: + # check if board uses `SMALL_BUILD`. if yes, and current + # module is marked as `FULL_BUILD`, board is excluded + small_build = re.search("CIRCUITPY_SMALL_BUILD = 1", contents) + if small_build and base_json[module]["full_build"] == "1": + base_json[module]["excluded"].append(entry.name) + continue + + # check if module is specifically disabled for this board + re_pattern = "CIRCUITPY_{}\s=\s(\w)".format(module.upper()) + find_module = re.search(re_pattern, contents) + if not find_module: + continue + if (find_module[1] == "0" and + find_module[1] != base_json[module]["default_value"]): + base_json[module]["excluded"].append(entry.name) + + return base_json + +if __name__ == "__main__": + modules = get_shared_bindings() + configs = read_mpconfig() + base = build_json(sorted(modules), configs) + + final_json = json.dumps(base, indent=2) + + shared_bindings_json = 'support_matrix.json' + if 'TRAVIS' in os.environ: + shared_bindings_json = os.path.join('$HOME', shared_bindings_json) + else: + print(final_json) + shared_bindings_json = os.path.join('shared-bindings', shared_bindings_json) + with open(shared_bindings_json, "w") as matrix: + json.dump(base, matrix, indent=2) diff --git a/shared-bindings/support_matrix.json b/shared-bindings/support_matrix.json new file mode 100644 index 0000000000..2d2a7d1ed3 --- /dev/null +++ b/shared-bindings/support_matrix.json @@ -0,0 +1,441 @@ +{ + "pew": { + "name": "_pew", + "full_build": "0", + "default_value": "0", + "excluded": [] + }, + "pixelbuf": { + "name": "_pixelbuf", + "full_build": "1", + "default_value": "None", + "excluded": [ + "circuitplayground_express_crickit", + "feather_m0_rfm69", + "arduino_mkr1300", + "bast_pro_mini_m0", + "feather_m0_adalogger", + "ugame10", + "pewpew10", + "trinket_m0", + "catwan_usbstick", + "pirkey_m0", + "feather_m0_rfm9x", + "sparkfun_samd21_mini", + "feather_m0_basic", + "gemma_m0", + "arduino_mkrzero", + "meowmeow", + "escornabot_makech", + "sparkfun_samd21_dev", + "arduino_zero", + "uchip" + ] + }, + "stage": { + "name": "_stage", + "full_build": "0", + "default_value": "0", + "excluded": [] + }, + "analogio": { + "name": "analogio", + "full_build": "0", + "default_value": "1", + "excluded": [ + "pirkey_m0" + ] + }, + "audiobusio": { + "name": "audiobusio", + "full_build": "1", + "default_value": "None", + "excluded": [ + "feather_m0_rfm69", + "arduino_mkr1300", + "kicksat-sprite", + "bast_pro_mini_m0", + "feather_m0_adalogger", + "ugame10", + "pewpew10", + "mini_sam_m4", + "trinket_m0", + "catwan_usbstick", + "pirkey_m0", + "sparkfun_lumidrive", + "feather_m0_rfm9x", + "sparkfun_samd21_mini", + "capablerobot_usbhub", + "feather_m0_basic", + "gemma_m0", + "hallowing_m0_express", + "arduino_mkrzero", + "trellis_m4_express", + "feather_radiofruit_zigbee", + "itsybitsy_m4_express", + "meowmeow", + "cp32-m4", + "escornabot_makech", + "sparkfun_samd21_dev", + "arduino_zero", + "uchip" + ] + }, + "audioio": { + "name": "audioio", + "full_build": "1", + "default_value": "None", + "excluded": [ + "feather_m0_rfm69", + "arduino_mkr1300", + "bast_pro_mini_m0", + "feather_m0_adalogger", + "pewpew10", + "trinket_m0", + "catwan_usbstick", + "pirkey_m0", + "sparkfun_lumidrive", + "feather_m0_rfm9x", + "sparkfun_samd21_mini", + "feather_m0_basic", + "gemma_m0", + "arduino_mkrzero", + "feather_radiofruit_zigbee", + "meowmeow", + "escornabot_makech", + "sparkfun_samd21_dev", + "arduino_zero", + "uchip" + ] + }, + "bitbangio": { + "name": "bitbangio", + "full_build": "1", + "default_value": "None", + "excluded": [ + "feather_m0_rfm69", + "arduino_mkr1300", + "bast_pro_mini_m0", + "feather_m0_adalogger", + "pewpew10", + "feather_m0_express_crickit", + "trinket_m0", + "catwan_usbstick", + "pirkey_m0", + "feather_m0_rfm9x", + "sparkfun_samd21_mini", + "feather_m0_basic", + "gemma_m0", + "arduino_mkrzero", + "meowmeow", + "escornabot_makech", + "sparkfun_samd21_dev", + "arduino_zero", + "uchip" + ] + }, + "bleio": { + "name": "bleio", + "full_build": "0", + "default_value": "0", + "excluded": [] + }, + "board": { + "name": "board", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "busio": { + "name": "busio", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "digitalio": { + "name": "digitalio", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "displayio": { + "name": "displayio", + "full_build": "1", + "default_value": "None", + "excluded": [ + "circuitplayground_express_crickit", + "feather_m0_rfm69", + "arduino_mkr1300", + "kicksat-sprite", + "bast_pro_mini_m0", + "feather_m0_adalogger", + "circuitplayground_express", + "pewpew10", + "feather_m0_express_crickit", + "trinket_m0", + "catwan_usbstick", + "pirkey_m0", + "feather_m0_rfm9x", + "sparkfun_samd21_mini", + "robohatmm1", + "feather_m0_basic", + "gemma_m0", + "arduino_mkrzero", + "meowmeow", + "escornabot_makech", + "sparkfun_samd21_dev", + "arduino_zero", + "uchip" + ] + }, + "frequencyio": { + "name": "frequencyio", + "full_build": "1", + "default_value": "None", + "excluded": [ + "circuitplayground_express_crickit", + "feather_m0_rfm69", + "arduino_mkr1300", + "bast_pro_mini_m0", + "feather_m0_adalogger", + "ugame10", + "circuitplayground_express", + "pewpew10", + "feather_m0_express_crickit", + "trinket_m0", + "catwan_usbstick", + "pirkey_m0", + "feather_m0_rfm9x", + "sparkfun_samd21_mini", + "robohatmm1", + "feather_m0_basic", + "gemma_m0", + "hallowing_m0_express", + "arduino_mkrzero", + "meowmeow", + "escornabot_makech", + "sparkfun_samd21_dev", + "arduino_zero", + "uchip" + ] + }, + "gamepad": { + "name": "gamepad", + "full_build": "1", + "default_value": "None", + "excluded": [ + "feather_m0_rfm69", + "arduino_mkr1300", + "bast_pro_mini_m0", + "feather_m0_adalogger", + "pewpew10", + "feather_m0_express_crickit", + "trinket_m0", + "catwan_usbstick", + "pirkey_m0", + "feather_m0_rfm9x", + "sparkfun_samd21_mini", + "feather_m0_basic", + "gemma_m0", + "arduino_mkrzero", + "meowmeow", + "escornabot_makech", + "sparkfun_samd21_dev", + "arduino_zero", + "uchip" + ] + }, + "gamepadshift": { + "name": "gamepadshift", + "full_build": "0", + "default_value": "0", + "excluded": [] + }, + "i2cslave": { + "name": "i2cslave", + "full_build": "1", + "default_value": "None", + "excluded": [ + "circuitplayground_express_crickit", + "feather_m0_rfm69", + "arduino_mkr1300", + "bast_pro_mini_m0", + "feather_m0_adalogger", + "ugame10", + "circuitplayground_express", + "pewpew10", + "feather_m0_express_crickit", + "trinket_m0", + "catwan_usbstick", + "pirkey_m0", + "feather_m0_rfm9x", + "sparkfun_samd21_mini", + "feather_m0_basic", + "gemma_m0", + "hallowing_m0_express", + "arduino_mkrzero", + "meowmeow", + "escornabot_makech", + "sparkfun_samd21_dev", + "arduino_zero", + "uchip" + ] + }, + "math": { + "name": "math", + "full_build": "0", + "default_value": "1", + "excluded": [ + "pirkey_m0" + ] + }, + "microcontroller": { + "name": "microcontroller", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "neopixel_write": { + "name": "neopixel_write", + "full_build": "0", + "default_value": "1", + "excluded": [ + "ugame10", + "pirkey_m0" + ] + }, + "network": { + "name": "network", + "full_build": "0", + "default_value": "0", + "excluded": [] + }, + "nvm": { + "name": "nvm", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "os": { + "name": "os", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "ps2io": { + "name": "ps2io", + "full_build": "0", + "default_value": "0", + "excluded": [] + }, + "pulseio": { + "name": "pulseio", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "random": { + "name": "random", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "rotaryio": { + "name": "rotaryio", + "full_build": "0", + "default_value": "1", + "excluded": [ + "pewpew10", + "pirkey_m0" + ] + }, + "rtc": { + "name": "rtc", + "full_build": "0", + "default_value": "1", + "excluded": [ + "ugame10", + "pewpew10", + "pirkey_m0" + ] + }, + "storage": { + "name": "storage", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "struct": { + "name": "struct", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "supervisor": { + "name": "supervisor", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "time": { + "name": "time", + "full_build": "0", + "default_value": "1", + "excluded": [] + }, + "touchio": { + "name": "touchio", + "full_build": "0", + "default_value": "1", + "excluded": [ + "kicksat-sprite", + "ugame10", + "datalore_ip_m4", + "pybadge", + "pyportal", + "sam32", + "mini_sam_m4", + "grandcentral_m4_express", + "feather_m4_express", + "pirkey_m0", + "pygamer", + "capablerobot_usbhub", + "metro_m4_airlift_lite", + "trellis_m4_express", + "itsybitsy_m4_express", + "pygamer_advance", + "metro_m4_express", + "cp32-m4", + "pybadge_airlift" + ] + }, + "uheap": { + "name": "uheap", + "full_build": "0", + "default_value": "0", + "excluded": [] + }, + "usb_hid": { + "name": "usb_hid", + "full_build": "0", + "default_value": "1", + "excluded": [ + "ugame10" + ] + }, + "usb_midi": { + "name": "usb_midi", + "full_build": "0", + "default_value": "1", + "excluded": [ + "ugame10", + "pewpew10" + ] + }, + "ustack": { + "name": "ustack", + "full_build": "0", + "default_value": "0", + "excluded": [] + } +} \ No newline at end of file From 4342383d9595914786475aa55c001864333ddcc1 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Thu, 4 Jul 2019 01:19:56 -0500 Subject: [PATCH 02/59] add jinja extension; update shared-bindings/index.rst to use jinja --- conf.py | 17 ++++++++++++++- docs/rstjinja.py | 24 +++++++++++++++++++++ shared-bindings/index.rst | 45 ++++----------------------------------- 3 files changed, 44 insertions(+), 42 deletions(-) create mode 100644 docs/rstjinja.py diff --git a/conf.py b/conf.py index 8586573887..3bc7d2764b 100644 --- a/conf.py +++ b/conf.py @@ -13,6 +13,7 @@ # All configuration values have a default; values that are commented out # serve to show the default. +import json import sys import os @@ -26,6 +27,19 @@ sys.path.insert(0, os.path.abspath('.')) master_doc = 'docs/index' +# Grab the JSON values to use while building the module support matrix +# in 'shared-bindings/index.rst' +shared_bindings_json = 'support_matrix.json' +if 'TRAVIS' in os.environ: + shared_bindings_json = os.path.join('$HOME', shared_bindings_json) +else: + shared_bindings_json = os.path.join('shared-bindings', shared_bindings_json) +with open(shared_bindings_json) as json_file: + modules_support_matrix = json.load(json_file) +html_context = { + 'support_matrix': modules_support_matrix +} + # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. @@ -40,7 +54,8 @@ extensions = [ 'sphinxcontrib.rsvgconverter', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', - 'sphinx.ext.coverage' + 'sphinx.ext.coverage', + 'rstjinja' ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/rstjinja.py b/docs/rstjinja.py new file mode 100644 index 0000000000..a92f2280c8 --- /dev/null +++ b/docs/rstjinja.py @@ -0,0 +1,24 @@ +# Derived from code on Eric Holscher's blog, found at: +# https://www.ericholscher.com/blog/2016/jul/25/integrating-jinja-rst-sphinx/ + +def rstjinja(app, docname, source): + """ + Render our pages as a jinja template for fancy templating goodness. + """ + # Make sure we're outputting HTML + if app.builder.format != 'html': + return + + # we only want our one jinja template to run through this func + if "shared-bindings/index" not in docname: + return + + src = source[0] + print(docname) + rendered = app.builder.templates.render_string( + src, app.config.html_context + ) + source[0] = rendered + +def setup(app): + app.connect("source-read", rstjinja) diff --git a/shared-bindings/index.rst b/shared-bindings/index.rst index 8f9bbbb31a..f32745bc76 100644 --- a/shared-bindings/index.rst +++ b/shared-bindings/index.rst @@ -21,48 +21,11 @@ Modules Support Matrix --------------- -NOTE 1: **All Supported** means the following ports are supported: SAMD21, SAMD21 Express, -SAMD51, SAMD51 Express, and ESP8266. - -NOTE 2: **SAMD** and/or **SAMD Express** without additional numbers, means both SAMD21 & SAMD51 versions -are supported. - -NOTE 3: The `pIRkey SAMD21 board `_ is specialized and may not -have modules as listed below. ================= ============================== -Module Supported Ports +Module Not Available On ================= ============================== -`analogio` **All Supported** -`audiobusio` **SAMD/SAMD Express** -`audioio` **SAMD Express** -`binascii` **ESP8266** -`bitbangio` **SAMD Express, ESP8266** -`board` **All Supported** -`bleio` **nRF** -`busio` **All Supported** -`digitalio` **All Supported** -`frequencyio` **SAMD51** -`gamepad` **SAMD Express, nRF** -`hashlib` **ESP8266** -`i2cslave` **SAMD Express** -`math` **All Supported** -`microcontroller` **All Supported** -`multiterminal` **ESP8266** -`neopixel_write` **All Supported** -`nvm` **SAMD Express** -`os` **All Supported** -`pulseio` **SAMD/SAMD Express** -`ps2io` **SAMD/SAMD Express** -`random` **All Supported** -`rotaryio` **SAMD51, SAMD Express** -`storage` **All Supported** -`struct` **All Supported** -`supervisor` **SAMD/SAMD Express** -`time` **All Supported** -`touchio` **SAMD/SAMD Express** -`uheap` **Debug (All)** -`usb_hid` **SAMD/SAMD Express** -`_pixelbuf` **SAMD Express** -`_stage` **SAMD/SAMD Express** +{%- for key, value in support_matrix|dictsort %} +{{ value.name.ljust(18) }} {{ value.excluded|join(", ") }}{{ '\n'|e }} +{%- endfor %} ================= ============================== From 9ccebb09686a31da928b332391ad5cc355556c88 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Thu, 4 Jul 2019 01:20:25 -0500 Subject: [PATCH 03/59] run support matrix script on travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index de5f34c684..c9306e3d30 100755 --- a/.travis.yml +++ b/.travis.yml @@ -129,7 +129,7 @@ script: - echo 'travis_fold:end:test_mpy' && tools/print_status.py status - (echo 'Building docs' && echo 'travis_fold:start:build_docs') - - (! var_search "${TRAVIS_TESTS-}" docs || sphinx-build -E -W -b html . _build/html) ; S=$? ; echo $S > status ; (exit $S) + - (! var_search "${TRAVIS_TESTS-}" docs || python3 -m docs.shared_bindings_matrix ; sphinx-build -E -W -b html . _build/html) ; S=$? ; echo $S > status ; (exit $S) - echo 'travis_fold:end:build_docs' && tools/print_status.py status - (echo 'Building translations' && echo 'travis_fold:start:build_translations') From 42ed84141ebdf821131bd477700e399f4fa76c98 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Thu, 4 Jul 2019 01:49:40 -0500 Subject: [PATCH 04/59] fix late-night directory snafu --- conf.py | 2 +- docs/shared_bindings_matrix.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/conf.py b/conf.py index 3bc7d2764b..152c718b59 100644 --- a/conf.py +++ b/conf.py @@ -31,7 +31,7 @@ master_doc = 'docs/index' # in 'shared-bindings/index.rst' shared_bindings_json = 'support_matrix.json' if 'TRAVIS' in os.environ: - shared_bindings_json = os.path.join('$HOME', shared_bindings_json) + shared_bindings_json = os.path.join(os.environ['HOME'], shared_bindings_json) else: shared_bindings_json = os.path.join('shared-bindings', shared_bindings_json) with open(shared_bindings_json) as json_file: diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index ebcadb7ad5..5d7ada7016 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -122,7 +122,7 @@ if __name__ == "__main__": shared_bindings_json = 'support_matrix.json' if 'TRAVIS' in os.environ: - shared_bindings_json = os.path.join('$HOME', shared_bindings_json) + shared_bindings_json = os.path.join(os.environ['HOME'], shared_bindings_json) else: print(final_json) shared_bindings_json = os.path.join('shared-bindings', shared_bindings_json) From 7378744bb2357c9b949fc3b74a9dfbb4b7cdb85e Mon Sep 17 00:00:00 2001 From: sommersoft Date: Fri, 5 Jul 2019 16:11:19 -0500 Subject: [PATCH 05/59] update regex module use to be python3.5 compatible --- docs/shared_bindings_matrix.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index 5d7ada7016..f0942b4261 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -61,10 +61,10 @@ def build_json(modules, configs): #print(module, "|", find_config) if not find_config: continue - full_build = int("FULL_BUILD" in find_config[0]) + full_build = int("FULL_BUILD" in find_config.group(0)) #print(find_config[1]) if not full_build: - default_val = find_config[1] + default_val = find_config.group(1) else: default_val = "None" base_json[search_name] = { @@ -107,8 +107,8 @@ def get_excluded_boards(base_json): find_module = re.search(re_pattern, contents) if not find_module: continue - if (find_module[1] == "0" and - find_module[1] != base_json[module]["default_value"]): + if (find_module.group(1) == "0" and + find_module.group(1) != base_json[module]["default_value"]): base_json[module]["excluded"].append(entry.name) return base_json From 86e885c5fc1d22217da56d9a0d29b798f95bb99d Mon Sep 17 00:00:00 2001 From: sommersoft Date: Fri, 5 Jul 2019 18:00:26 -0500 Subject: [PATCH 06/59] handle module exclusion when the default is to not include a module --- docs/shared_bindings_matrix.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index f0942b4261..8aa5171291 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -106,6 +106,10 @@ def get_excluded_boards(base_json): re_pattern = "CIRCUITPY_{}\s=\s(\w)".format(module.upper()) find_module = re.search(re_pattern, contents) if not find_module: + # check if default inclusion is off ('0'). if the board doesn't + # have it explicitly enabled, its excluded. + if base_json[module]["default_value"] == "0": + base_json[module]["excluded"].append(entry.name) continue if (find_module.group(1) == "0" and find_module.group(1) != base_json[module]["default_value"]): From fce1efc74c0397447a79c94701b9f17cc9038d91 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sun, 7 Jul 2019 09:14:46 -0500 Subject: [PATCH 07/59] more python3.5 compatibility fixes --- docs/shared_bindings_matrix.py | 53 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index 8aa5171291..d690e4718b 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -85,35 +85,34 @@ def get_excluded_boards(base_json): modules = list(base_json.keys()) for port in SUPPORTED_PORTS: port_dir = "ports/{}/boards".format(port) - with os.scandir(port_dir) as boards: - for entry in boards: - if not entry.is_dir(): + for entry in os.scandir(port_dir): + if not entry.is_dir(): + continue + contents = "" + board_dir = os.path.join(entry.path, "mpconfigboard.mk") + #print(board_dir) + with open(board_dir) as board: + contents = board.read() + for module in modules: + # check if board uses `SMALL_BUILD`. if yes, and current + # module is marked as `FULL_BUILD`, board is excluded + small_build = re.search("CIRCUITPY_SMALL_BUILD = 1", contents) + if small_build and base_json[module]["full_build"] == "1": + base_json[module]["excluded"].append(entry.name) continue - contents = "" - board_dir = os.path.join(entry.path, "mpconfigboard.mk") - #print(board_dir) - with open(board_dir) as board: - contents = board.read() - for module in modules: - # check if board uses `SMALL_BUILD`. if yes, and current - # module is marked as `FULL_BUILD`, board is excluded - small_build = re.search("CIRCUITPY_SMALL_BUILD = 1", contents) - if small_build and base_json[module]["full_build"] == "1": - base_json[module]["excluded"].append(entry.name) - continue - # check if module is specifically disabled for this board - re_pattern = "CIRCUITPY_{}\s=\s(\w)".format(module.upper()) - find_module = re.search(re_pattern, contents) - if not find_module: - # check if default inclusion is off ('0'). if the board doesn't - # have it explicitly enabled, its excluded. - if base_json[module]["default_value"] == "0": - base_json[module]["excluded"].append(entry.name) - continue - if (find_module.group(1) == "0" and - find_module.group(1) != base_json[module]["default_value"]): - base_json[module]["excluded"].append(entry.name) + # check if module is specifically disabled for this board + re_pattern = "CIRCUITPY_{}\s=\s(\w)".format(module.upper()) + find_module = re.search(re_pattern, contents) + if not find_module: + # check if default inclusion is off ('0'). if the board doesn't + # have it explicitly enabled, its excluded. + if base_json[module]["default_value"] == "0": + base_json[module]["excluded"].append(entry.name) + continue + if (find_module.group(1) == "0" and + find_module.group(1) != base_json[module]["default_value"]): + base_json[module]["excluded"].append(entry.name) return base_json From db702053c3db54c5ff817ba536e82a74de8048c6 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Wed, 10 Jul 2019 18:32:01 -0500 Subject: [PATCH 08/59] properly group doc commands so non-doc builds don't fail --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c9306e3d30..c5f4f721a0 100755 --- a/.travis.yml +++ b/.travis.yml @@ -129,7 +129,7 @@ script: - echo 'travis_fold:end:test_mpy' && tools/print_status.py status - (echo 'Building docs' && echo 'travis_fold:start:build_docs') - - (! var_search "${TRAVIS_TESTS-}" docs || python3 -m docs.shared_bindings_matrix ; sphinx-build -E -W -b html . _build/html) ; S=$? ; echo $S > status ; (exit $S) + - (! var_search "${TRAVIS_TESTS-}" docs || (python3 -m docs.shared_bindings_matrix && sphinx-build -E -W -b html . _build/html)) ; S=$? ; echo $S > status ; (exit $S) - echo 'travis_fold:end:build_docs' && tools/print_status.py status - (echo 'Building translations' && echo 'travis_fold:start:build_translations') From a1db6c4379c787124d7ee825adbcc76d2069a3c6 Mon Sep 17 00:00:00 2001 From: C47D Date: Fri, 19 Jul 2019 10:01:35 -0500 Subject: [PATCH 09/59] [Draft] Add check to travis to make sure new boards are built, fix #1886 --- tools/travis_new_boards_check.py | 42 ++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 tools/travis_new_boards_check.py diff --git a/tools/travis_new_boards_check.py b/tools/travis_new_boards_check.py new file mode 100644 index 0000000000..b12f6d1274 --- /dev/null +++ b/tools/travis_new_boards_check.py @@ -0,0 +1,42 @@ +#! /usr/bin/env python3 + +import os +import re +import json + +import build_board_info + +# Get boards in json format +boards_info_json = build_board_info.get_board_mapping() +# print(boards_info_json) + +# TODO (Carlos) Find all the boards on the json format + +# We need to know the path of the .travis.yml file +base_path = os.path.dirname(__file__) +travis_path = os.path.abspath(os.path.join(base_path, '..', '.travis.yml')) + +# Loading board list based on TRAVIS_BOARDS env variable on .travis.yml +travis_boards = [] +with open(travis_path, 'r') as travis: + + # Get all lines that contain the substring 'TRAVIS_BOARDS' + for line in travis: + line = travis.readline() + + if 'TRAVIS_BOARDS' in line: + print('TRAVIS_BOARDS found') + print(line) + # TODO (Carlos) Store the line content + + # We've reached the end of the env: section + elif 'addons' in line: + break + else: + pass + + # TODO (Carlos) Getting all the boards on TRAVIS_BOARDS using regex matching + # Tranks sommersoft for the pattern + pattern = '(.+)' + +# TODO (Carlos) Comparing boards listed in TRAVIS_BOARDS and boards got from get_board_mapping From b279d6b335f6968c1cca281ef2ad250e68a688c2 Mon Sep 17 00:00:00 2001 From: C47D Date: Fri, 19 Jul 2019 12:11:16 -0500 Subject: [PATCH 10/59] [travis new boards check] We now have two lists that contain the boards based on board_info and TRAVIS_BOARDS --- tools/travis_new_boards_check.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/tools/travis_new_boards_check.py b/tools/travis_new_boards_check.py index b12f6d1274..0d6d4ebf92 100644 --- a/tools/travis_new_boards_check.py +++ b/tools/travis_new_boards_check.py @@ -8,9 +8,9 @@ import build_board_info # Get boards in json format boards_info_json = build_board_info.get_board_mapping() -# print(boards_info_json) -# TODO (Carlos) Find all the boards on the json format +# Get all the boards out of the json format +info_boards = boards_info_json.keys() # We need to know the path of the .travis.yml file base_path = os.path.dirname(__file__) @@ -22,12 +22,15 @@ with open(travis_path, 'r') as travis: # Get all lines that contain the substring 'TRAVIS_BOARDS' for line in travis: - line = travis.readline() - if 'TRAVIS_BOARDS' in line: - print('TRAVIS_BOARDS found') - print(line) - # TODO (Carlos) Store the line content + # Get the lines with TRAVIS_BOARDS= in it + if line.find('TRAVIS_BOARDS=') is not -1: + # Store all the boards names into travis_boards + begin_of_names = line.find('TRAVIS_BOARDS=') + len('TRAVIS_BOARDS=') + 1 + end_of_names = line.rfind('"') + boards = line[begin_of_names:end_of_names] + boards = boards.split(' ') + travis_boards.extend(boards) # We've reached the end of the env: section elif 'addons' in line: @@ -35,8 +38,4 @@ with open(travis_path, 'r') as travis: else: pass - # TODO (Carlos) Getting all the boards on TRAVIS_BOARDS using regex matching - # Tranks sommersoft for the pattern - pattern = '(.+)' - # TODO (Carlos) Comparing boards listed in TRAVIS_BOARDS and boards got from get_board_mapping From ae41bb369f23169a79c8b4164f2eebb46b1771fb Mon Sep 17 00:00:00 2001 From: C47D Date: Fri, 19 Jul 2019 12:36:13 -0500 Subject: [PATCH 11/59] [travis new boards check] sort both lists of boards --- tools/travis_new_boards_check.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tools/travis_new_boards_check.py b/tools/travis_new_boards_check.py index 0d6d4ebf92..389c2a2376 100644 --- a/tools/travis_new_boards_check.py +++ b/tools/travis_new_boards_check.py @@ -11,6 +11,8 @@ boards_info_json = build_board_info.get_board_mapping() # Get all the boards out of the json format info_boards = boards_info_json.keys() +# Turn the dict_keys into a list +info_boards = list(info_boards) # We need to know the path of the .travis.yml file base_path = os.path.dirname(__file__) @@ -38,4 +40,6 @@ with open(travis_path, 'r') as travis: else: pass -# TODO (Carlos) Comparing boards listed in TRAVIS_BOARDS and boards got from get_board_mapping +# All the travis_boards elements must be on info_boards +info_boards.sort() +travis_boards.sort() From fc1594104b4c09ab7576da2f87a98bb76f0fe6d2 Mon Sep 17 00:00:00 2001 From: C47D Date: Fri, 19 Jul 2019 12:59:04 -0500 Subject: [PATCH 12/59] [travis new boards check] Exit with failure if a board in info isn't in travis --- tools/travis_new_boards_check.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/travis_new_boards_check.py b/tools/travis_new_boards_check.py index 389c2a2376..568df50ae9 100644 --- a/tools/travis_new_boards_check.py +++ b/tools/travis_new_boards_check.py @@ -1,5 +1,6 @@ #! /usr/bin/env python3 +import sys import os import re import json @@ -43,3 +44,17 @@ with open(travis_path, 'r') as travis: # All the travis_boards elements must be on info_boards info_boards.sort() travis_boards.sort() + +exit_status = 0 + +missing_boards = list(set(info_boards) - set(travis_boards)) + +if len(missing_boards) is not 0: + exit_status = 1 + +if exit_status is 1: + print('Boards missing in TRAVIS_BOARDS:') + for board in missing_boards: + print(board) + +sys.exit(exit_status) From 22c265b170ec57fc78e9b2eb01ed2120e0116e95 Mon Sep 17 00:00:00 2001 From: C47D Date: Fri, 19 Jul 2019 16:54:42 -0500 Subject: [PATCH 13/59] [travis check new boards] Reduce code logic to exit with failure --- tools/travis_new_boards_check.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tools/travis_new_boards_check.py b/tools/travis_new_boards_check.py index 568df50ae9..f4492830d4 100644 --- a/tools/travis_new_boards_check.py +++ b/tools/travis_new_boards_check.py @@ -45,16 +45,10 @@ with open(travis_path, 'r') as travis: info_boards.sort() travis_boards.sort() -exit_status = 0 - missing_boards = list(set(info_boards) - set(travis_boards)) if len(missing_boards) is not 0: - exit_status = 1 - -if exit_status is 1: print('Boards missing in TRAVIS_BOARDS:') for board in missing_boards: print(board) - -sys.exit(exit_status) + sys.exit(1) From 00d91bed32ef55ce543af4da51b3aaf68fca50e9 Mon Sep 17 00:00:00 2001 From: C47D Date: Fri, 19 Jul 2019 17:01:04 -0500 Subject: [PATCH 14/59] [travis check new boards] Add command so Travis runs the travis_new_boards_check.py script --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index d75b4e7d4a..32511a21d1 100755 --- a/.travis.yml +++ b/.travis.yml @@ -103,6 +103,10 @@ script: - cd tools && python3 -u build_release_files.py - cd .. + # Check if there's any board missing in TRAVIS_BOARDS + - cd tools && python3 -u travis_new_boards_check.py + - cd .. + - echo 'Building unix' && echo 'travis_fold:start:unix' - (! var_search "${TRAVIS_TESTS-}" unix || (make -C ports/unix deplibs -j2 && make -C ports/unix -j2 && make -C ports/unix coverage -j2)) ; S=$? ; echo $S > status ; (exit $S) - echo 'travis_fold:end:unix' && tools/print_status.py status From 06cb075025c70647155e2db7cc3f2d825840d4b6 Mon Sep 17 00:00:00 2001 From: C47D Date: Fri, 19 Jul 2019 18:19:17 -0500 Subject: [PATCH 15/59] [travis check new boards] Move script into the before_script section --- .travis.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 32511a21d1..528582eae5 100755 --- a/.travis.yml +++ b/.travis.yml @@ -71,6 +71,9 @@ before_script: - function var_search () { case "$1" in *$2*) true;; *) false;; esac; } - sudo dpkg --add-architecture i386 + # Check if there's any board missing in TRAVIS_BOARDS + - cd tools && python3 -u travis_new_boards_check.py + - cd .. - (! var_search "${TRAVIS_SDK-}" arm || (wget https://s3.amazonaws.com/adafruit-circuit-python/gcc-arm-embedded_7-2018q2-1~xenial1_amd64.deb && sudo dpkg -i gcc-arm-embedded*_amd64.deb)) @@ -103,10 +106,6 @@ script: - cd tools && python3 -u build_release_files.py - cd .. - # Check if there's any board missing in TRAVIS_BOARDS - - cd tools && python3 -u travis_new_boards_check.py - - cd .. - - echo 'Building unix' && echo 'travis_fold:start:unix' - (! var_search "${TRAVIS_TESTS-}" unix || (make -C ports/unix deplibs -j2 && make -C ports/unix -j2 && make -C ports/unix coverage -j2)) ; S=$? ; echo $S > status ; (exit $S) - echo 'travis_fold:end:unix' && tools/print_status.py status From d1fecf5025958ac4c2447a3757ab03a0bfdebdbf Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 20 Jul 2019 01:08:22 -0500 Subject: [PATCH 16/59] Fix missing module sh and remove unused module re --- .travis.yml | 8 ++++---- tools/travis_new_boards_check.py | 1 - 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 528582eae5..ce7cba9449 100755 --- a/.travis.yml +++ b/.travis.yml @@ -71,10 +71,6 @@ before_script: - function var_search () { case "$1" in *$2*) true;; *) false;; esac; } - sudo dpkg --add-architecture i386 - # Check if there's any board missing in TRAVIS_BOARDS - - cd tools && python3 -u travis_new_boards_check.py - - cd .. - - (! var_search "${TRAVIS_SDK-}" arm || (wget https://s3.amazonaws.com/adafruit-circuit-python/gcc-arm-embedded_7-2018q2-1~xenial1_amd64.deb && sudo dpkg -i gcc-arm-embedded*_amd64.deb)) # For huzzah builds @@ -89,6 +85,10 @@ before_script: - (! var_search "${TRAVIS_TESTS-}" docs || pip install --user Sphinx sphinx-rtd-theme recommonmark sphinxcontrib-svg2pdfconverter) - (! var_search "${TRAVIS_TESTS-}" translations || pip3 install --user polib) + # Check if there's any board missing in TRAVIS_BOARDS + - cd tools && python3 -u travis_new_boards_check.py + - cd .. + # report some good version numbers to the build - gcc --version - (! var_search "${TRAVIS_SDK-}" arm || arm-none-eabi-gcc --version) diff --git a/tools/travis_new_boards_check.py b/tools/travis_new_boards_check.py index f4492830d4..01751b4b97 100644 --- a/tools/travis_new_boards_check.py +++ b/tools/travis_new_boards_check.py @@ -2,7 +2,6 @@ import sys import os -import re import json import build_board_info From b630e561a7186637965560c4a902b1811c8b90c3 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sun, 21 Jul 2019 12:13:13 -0500 Subject: [PATCH 17/59] exclude aliased boards from 'get_board_mapping()' --- tools/travis_new_boards_check.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/travis_new_boards_check.py b/tools/travis_new_boards_check.py index 01751b4b97..7e8116a1a2 100644 --- a/tools/travis_new_boards_check.py +++ b/tools/travis_new_boards_check.py @@ -10,9 +10,7 @@ import build_board_info boards_info_json = build_board_info.get_board_mapping() # Get all the boards out of the json format -info_boards = boards_info_json.keys() -# Turn the dict_keys into a list -info_boards = list(info_boards) +info_boards = [board for board in boards_info_json.keys() if not boards_info_json[board].get("alias", False)] # We need to know the path of the .travis.yml file base_path = os.path.dirname(__file__) From c316231dd23f333cd8d7be869f8018bd17082fda Mon Sep 17 00:00:00 2001 From: C47D Date: Tue, 23 Jul 2019 13:02:07 -0500 Subject: [PATCH 18/59] [travis check new boards] Do not end test if there are missing boards --- tools/travis_new_boards_check.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/travis_new_boards_check.py b/tools/travis_new_boards_check.py index 7e8116a1a2..facfb601db 100644 --- a/tools/travis_new_boards_check.py +++ b/tools/travis_new_boards_check.py @@ -48,4 +48,3 @@ if len(missing_boards) is not 0: print('Boards missing in TRAVIS_BOARDS:') for board in missing_boards: print(board) - sys.exit(1) From 8864cefba6a6b307a2678d4de7540a9db15c03e1 Mon Sep 17 00:00:00 2001 From: C47D Date: Tue, 23 Jul 2019 13:03:29 -0500 Subject: [PATCH 19/59] [travis check new boards] missing_boards as set --- tools/travis_new_boards_check.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/travis_new_boards_check.py b/tools/travis_new_boards_check.py index facfb601db..81ccec6754 100644 --- a/tools/travis_new_boards_check.py +++ b/tools/travis_new_boards_check.py @@ -42,9 +42,9 @@ with open(travis_path, 'r') as travis: info_boards.sort() travis_boards.sort() -missing_boards = list(set(info_boards) - set(travis_boards)) +missing_boards = set(info_boards) - set(travis_boards) -if len(missing_boards) is not 0: +if missing_boards: print('Boards missing in TRAVIS_BOARDS:') for board in missing_boards: print(board) From 7b67ef15c4e8b142bf226df0c1eed91e3f934f39 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Tue, 23 Jul 2019 17:11:39 -0500 Subject: [PATCH 20/59] remove local copy of 'support_matrix.json' --- shared-bindings/support_matrix.json | 441 ---------------------------- 1 file changed, 441 deletions(-) delete mode 100644 shared-bindings/support_matrix.json diff --git a/shared-bindings/support_matrix.json b/shared-bindings/support_matrix.json deleted file mode 100644 index 2d2a7d1ed3..0000000000 --- a/shared-bindings/support_matrix.json +++ /dev/null @@ -1,441 +0,0 @@ -{ - "pew": { - "name": "_pew", - "full_build": "0", - "default_value": "0", - "excluded": [] - }, - "pixelbuf": { - "name": "_pixelbuf", - "full_build": "1", - "default_value": "None", - "excluded": [ - "circuitplayground_express_crickit", - "feather_m0_rfm69", - "arduino_mkr1300", - "bast_pro_mini_m0", - "feather_m0_adalogger", - "ugame10", - "pewpew10", - "trinket_m0", - "catwan_usbstick", - "pirkey_m0", - "feather_m0_rfm9x", - "sparkfun_samd21_mini", - "feather_m0_basic", - "gemma_m0", - "arduino_mkrzero", - "meowmeow", - "escornabot_makech", - "sparkfun_samd21_dev", - "arduino_zero", - "uchip" - ] - }, - "stage": { - "name": "_stage", - "full_build": "0", - "default_value": "0", - "excluded": [] - }, - "analogio": { - "name": "analogio", - "full_build": "0", - "default_value": "1", - "excluded": [ - "pirkey_m0" - ] - }, - "audiobusio": { - "name": "audiobusio", - "full_build": "1", - "default_value": "None", - "excluded": [ - "feather_m0_rfm69", - "arduino_mkr1300", - "kicksat-sprite", - "bast_pro_mini_m0", - "feather_m0_adalogger", - "ugame10", - "pewpew10", - "mini_sam_m4", - "trinket_m0", - "catwan_usbstick", - "pirkey_m0", - "sparkfun_lumidrive", - "feather_m0_rfm9x", - "sparkfun_samd21_mini", - "capablerobot_usbhub", - "feather_m0_basic", - "gemma_m0", - "hallowing_m0_express", - "arduino_mkrzero", - "trellis_m4_express", - "feather_radiofruit_zigbee", - "itsybitsy_m4_express", - "meowmeow", - "cp32-m4", - "escornabot_makech", - "sparkfun_samd21_dev", - "arduino_zero", - "uchip" - ] - }, - "audioio": { - "name": "audioio", - "full_build": "1", - "default_value": "None", - "excluded": [ - "feather_m0_rfm69", - "arduino_mkr1300", - "bast_pro_mini_m0", - "feather_m0_adalogger", - "pewpew10", - "trinket_m0", - "catwan_usbstick", - "pirkey_m0", - "sparkfun_lumidrive", - "feather_m0_rfm9x", - "sparkfun_samd21_mini", - "feather_m0_basic", - "gemma_m0", - "arduino_mkrzero", - "feather_radiofruit_zigbee", - "meowmeow", - "escornabot_makech", - "sparkfun_samd21_dev", - "arduino_zero", - "uchip" - ] - }, - "bitbangio": { - "name": "bitbangio", - "full_build": "1", - "default_value": "None", - "excluded": [ - "feather_m0_rfm69", - "arduino_mkr1300", - "bast_pro_mini_m0", - "feather_m0_adalogger", - "pewpew10", - "feather_m0_express_crickit", - "trinket_m0", - "catwan_usbstick", - "pirkey_m0", - "feather_m0_rfm9x", - "sparkfun_samd21_mini", - "feather_m0_basic", - "gemma_m0", - "arduino_mkrzero", - "meowmeow", - "escornabot_makech", - "sparkfun_samd21_dev", - "arduino_zero", - "uchip" - ] - }, - "bleio": { - "name": "bleio", - "full_build": "0", - "default_value": "0", - "excluded": [] - }, - "board": { - "name": "board", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "busio": { - "name": "busio", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "digitalio": { - "name": "digitalio", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "displayio": { - "name": "displayio", - "full_build": "1", - "default_value": "None", - "excluded": [ - "circuitplayground_express_crickit", - "feather_m0_rfm69", - "arduino_mkr1300", - "kicksat-sprite", - "bast_pro_mini_m0", - "feather_m0_adalogger", - "circuitplayground_express", - "pewpew10", - "feather_m0_express_crickit", - "trinket_m0", - "catwan_usbstick", - "pirkey_m0", - "feather_m0_rfm9x", - "sparkfun_samd21_mini", - "robohatmm1", - "feather_m0_basic", - "gemma_m0", - "arduino_mkrzero", - "meowmeow", - "escornabot_makech", - "sparkfun_samd21_dev", - "arduino_zero", - "uchip" - ] - }, - "frequencyio": { - "name": "frequencyio", - "full_build": "1", - "default_value": "None", - "excluded": [ - "circuitplayground_express_crickit", - "feather_m0_rfm69", - "arduino_mkr1300", - "bast_pro_mini_m0", - "feather_m0_adalogger", - "ugame10", - "circuitplayground_express", - "pewpew10", - "feather_m0_express_crickit", - "trinket_m0", - "catwan_usbstick", - "pirkey_m0", - "feather_m0_rfm9x", - "sparkfun_samd21_mini", - "robohatmm1", - "feather_m0_basic", - "gemma_m0", - "hallowing_m0_express", - "arduino_mkrzero", - "meowmeow", - "escornabot_makech", - "sparkfun_samd21_dev", - "arduino_zero", - "uchip" - ] - }, - "gamepad": { - "name": "gamepad", - "full_build": "1", - "default_value": "None", - "excluded": [ - "feather_m0_rfm69", - "arduino_mkr1300", - "bast_pro_mini_m0", - "feather_m0_adalogger", - "pewpew10", - "feather_m0_express_crickit", - "trinket_m0", - "catwan_usbstick", - "pirkey_m0", - "feather_m0_rfm9x", - "sparkfun_samd21_mini", - "feather_m0_basic", - "gemma_m0", - "arduino_mkrzero", - "meowmeow", - "escornabot_makech", - "sparkfun_samd21_dev", - "arduino_zero", - "uchip" - ] - }, - "gamepadshift": { - "name": "gamepadshift", - "full_build": "0", - "default_value": "0", - "excluded": [] - }, - "i2cslave": { - "name": "i2cslave", - "full_build": "1", - "default_value": "None", - "excluded": [ - "circuitplayground_express_crickit", - "feather_m0_rfm69", - "arduino_mkr1300", - "bast_pro_mini_m0", - "feather_m0_adalogger", - "ugame10", - "circuitplayground_express", - "pewpew10", - "feather_m0_express_crickit", - "trinket_m0", - "catwan_usbstick", - "pirkey_m0", - "feather_m0_rfm9x", - "sparkfun_samd21_mini", - "feather_m0_basic", - "gemma_m0", - "hallowing_m0_express", - "arduino_mkrzero", - "meowmeow", - "escornabot_makech", - "sparkfun_samd21_dev", - "arduino_zero", - "uchip" - ] - }, - "math": { - "name": "math", - "full_build": "0", - "default_value": "1", - "excluded": [ - "pirkey_m0" - ] - }, - "microcontroller": { - "name": "microcontroller", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "neopixel_write": { - "name": "neopixel_write", - "full_build": "0", - "default_value": "1", - "excluded": [ - "ugame10", - "pirkey_m0" - ] - }, - "network": { - "name": "network", - "full_build": "0", - "default_value": "0", - "excluded": [] - }, - "nvm": { - "name": "nvm", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "os": { - "name": "os", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "ps2io": { - "name": "ps2io", - "full_build": "0", - "default_value": "0", - "excluded": [] - }, - "pulseio": { - "name": "pulseio", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "random": { - "name": "random", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "rotaryio": { - "name": "rotaryio", - "full_build": "0", - "default_value": "1", - "excluded": [ - "pewpew10", - "pirkey_m0" - ] - }, - "rtc": { - "name": "rtc", - "full_build": "0", - "default_value": "1", - "excluded": [ - "ugame10", - "pewpew10", - "pirkey_m0" - ] - }, - "storage": { - "name": "storage", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "struct": { - "name": "struct", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "supervisor": { - "name": "supervisor", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "time": { - "name": "time", - "full_build": "0", - "default_value": "1", - "excluded": [] - }, - "touchio": { - "name": "touchio", - "full_build": "0", - "default_value": "1", - "excluded": [ - "kicksat-sprite", - "ugame10", - "datalore_ip_m4", - "pybadge", - "pyportal", - "sam32", - "mini_sam_m4", - "grandcentral_m4_express", - "feather_m4_express", - "pirkey_m0", - "pygamer", - "capablerobot_usbhub", - "metro_m4_airlift_lite", - "trellis_m4_express", - "itsybitsy_m4_express", - "pygamer_advance", - "metro_m4_express", - "cp32-m4", - "pybadge_airlift" - ] - }, - "uheap": { - "name": "uheap", - "full_build": "0", - "default_value": "0", - "excluded": [] - }, - "usb_hid": { - "name": "usb_hid", - "full_build": "0", - "default_value": "1", - "excluded": [ - "ugame10" - ] - }, - "usb_midi": { - "name": "usb_midi", - "full_build": "0", - "default_value": "1", - "excluded": [ - "ugame10", - "pewpew10" - ] - }, - "ustack": { - "name": "ustack", - "full_build": "0", - "default_value": "0", - "excluded": [] - } -} \ No newline at end of file From b90b63bb2bb27597f87173f10451980c4412757f Mon Sep 17 00:00:00 2001 From: sommersoft Date: Tue, 23 Jul 2019 20:49:37 -0500 Subject: [PATCH 21/59] don't use files to pass data; call and return directly in conf.py --- conf.py | 12 ++++------ docs/shared_bindings_matrix.py | 42 ++++++++++++++-------------------- 2 files changed, 22 insertions(+), 32 deletions(-) diff --git a/conf.py b/conf.py index 152c718b59..0c23028ecb 100644 --- a/conf.py +++ b/conf.py @@ -25,17 +25,15 @@ from recommonmark.parser import CommonMarkParser sys.path.insert(0, os.path.abspath('docs')) sys.path.insert(0, os.path.abspath('.')) +import shared_bindings_matrix + master_doc = 'docs/index' # Grab the JSON values to use while building the module support matrix # in 'shared-bindings/index.rst' -shared_bindings_json = 'support_matrix.json' -if 'TRAVIS' in os.environ: - shared_bindings_json = os.path.join(os.environ['HOME'], shared_bindings_json) -else: - shared_bindings_json = os.path.join('shared-bindings', shared_bindings_json) -with open(shared_bindings_json) as json_file: - modules_support_matrix = json.load(json_file) + +modules_support_matrix = shared_bindings_matrix.support_matrix() + html_context = { 'support_matrix': modules_support_matrix } diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index d690e4718b..59b67b7b28 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -45,13 +45,13 @@ def read_mpconfig(): return configs -def build_json(modules, configs): +def build_module_map(modules, configs): """ 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). """ - base_json = dict() + base = dict() full_build = False for module in modules: full_name = module @@ -67,22 +67,22 @@ def build_json(modules, configs): default_val = find_config.group(1) else: default_val = "None" - base_json[search_name] = { + base[search_name] = { "name": full_name, "full_build": str(full_build), "default_value": default_val, "excluded": [] } - return get_excluded_boards(base_json) + return get_excluded_boards(base) -def get_excluded_boards(base_json): +def get_excluded_boards(base): """ Cycles through each board's `mpconfigboard.mk` file to determine if each module is included or not. Boards are selected by existence in a port listed in `SUPPORTED_PORTS` (e.g. `/port/nrf/feather_52840`) """ - modules = list(base_json.keys()) + modules = list(base.keys()) for port in SUPPORTED_PORTS: port_dir = "ports/{}/boards".format(port) for entry in os.scandir(port_dir): @@ -97,8 +97,8 @@ def get_excluded_boards(base_json): # check if board uses `SMALL_BUILD`. if yes, and current # module is marked as `FULL_BUILD`, board is excluded small_build = re.search("CIRCUITPY_SMALL_BUILD = 1", contents) - if small_build and base_json[module]["full_build"] == "1": - base_json[module]["excluded"].append(entry.name) + if small_build and base[module]["full_build"] == "1": + base[module]["excluded"].append(entry.name) continue # check if module is specifically disabled for this board @@ -107,27 +107,19 @@ def get_excluded_boards(base_json): if not find_module: # check if default inclusion is off ('0'). if the board doesn't # have it explicitly enabled, its excluded. - if base_json[module]["default_value"] == "0": - base_json[module]["excluded"].append(entry.name) + if base[module]["default_value"] == "0": + base[module]["excluded"].append(entry.name) continue if (find_module.group(1) == "0" and - find_module.group(1) != base_json[module]["default_value"]): - base_json[module]["excluded"].append(entry.name) + find_module.group(1) != base[module]["default_value"]): + base[module]["excluded"].append(entry.name) - return base_json + return base -if __name__ == "__main__": + +def support_matrix(): modules = get_shared_bindings() configs = read_mpconfig() - base = build_json(sorted(modules), configs) + base = build_module_map(sorted(modules), configs) - final_json = json.dumps(base, indent=2) - - shared_bindings_json = 'support_matrix.json' - if 'TRAVIS' in os.environ: - shared_bindings_json = os.path.join(os.environ['HOME'], shared_bindings_json) - else: - print(final_json) - shared_bindings_json = os.path.join('shared-bindings', shared_bindings_json) - with open(shared_bindings_json, "w") as matrix: - json.dump(base, matrix, indent=2) + return base From 136bbc1690ef3402a2e924afbd56472910564c02 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Tue, 23 Jul 2019 20:52:28 -0500 Subject: [PATCH 22/59] docs: revert calling 'shared_bindings_matrix.py' --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c5f4f721a0..31fca9c5ce 100755 --- a/.travis.yml +++ b/.travis.yml @@ -129,7 +129,7 @@ script: - echo 'travis_fold:end:test_mpy' && tools/print_status.py status - (echo 'Building docs' && echo 'travis_fold:start:build_docs') - - (! var_search "${TRAVIS_TESTS-}" docs || (python3 -m docs.shared_bindings_matrix && sphinx-build -E -W -b html . _build/html)) ; S=$? ; echo $S > status ; (exit $S) + - (! var_search "${TRAVIS_TESTS-}" docs || sphinx-build -E -W -b html . _build/html ; S=$? ; echo $S > status ; (exit $S) - echo 'travis_fold:end:build_docs' && tools/print_status.py status - (echo 'Building translations' && echo 'travis_fold:start:build_translations') From 45a54c3fd75d4ac14b46d150cf9b2a69f8f0bb88 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Tue, 23 Jul 2019 23:14:50 -0500 Subject: [PATCH 23/59] docs: replace overzealous removal of parens --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 31fca9c5ce..de5f34c684 100755 --- a/.travis.yml +++ b/.travis.yml @@ -129,7 +129,7 @@ script: - echo 'travis_fold:end:test_mpy' && tools/print_status.py status - (echo 'Building docs' && echo 'travis_fold:start:build_docs') - - (! var_search "${TRAVIS_TESTS-}" docs || sphinx-build -E -W -b html . _build/html ; S=$? ; echo $S > status ; (exit $S) + - (! var_search "${TRAVIS_TESTS-}" docs || sphinx-build -E -W -b html . _build/html) ; S=$? ; echo $S > status ; (exit $S) - echo 'travis_fold:end:build_docs' && tools/print_status.py status - (echo 'Building translations' && echo 'travis_fold:start:build_translations') From 7e4d7a5373f281c1448b650115ad1a6f79842e23 Mon Sep 17 00:00:00 2001 From: C47D Date: Thu, 25 Jul 2019 16:11:45 -0500 Subject: [PATCH 24/59] [travis check new boards] Fail in case of any missing boards --- tools/travis_new_boards_check.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/travis_new_boards_check.py b/tools/travis_new_boards_check.py index 81ccec6754..5ae05aec45 100644 --- a/tools/travis_new_boards_check.py +++ b/tools/travis_new_boards_check.py @@ -48,3 +48,4 @@ if missing_boards: print('Boards missing in TRAVIS_BOARDS:') for board in missing_boards: print(board) + sys.exit(1) From be1fd5e995fcb581cf7e616bc67ef80822209224 Mon Sep 17 00:00:00 2001 From: C47D Date: Thu, 25 Jul 2019 16:27:26 -0500 Subject: [PATCH 25/59] [travis check new boards] Add missing boards to TRAVIS_BOARDS --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index ce7cba9449..410dcce4c2 100755 --- a/.travis.yml +++ b/.travis.yml @@ -26,6 +26,7 @@ env: - TRAVIS_BOARDS="feather_radiofruit_zigbee gemma_m0 hallowing_m0_express itsybitsy_m0_express itsybitsy_m4_express meowmeow sam32 uchip escornabot_makech pygamer_advance datum_imu" TRAVIS_SDK=arm - TRAVIS_BOARDS="feather_m0_express_crickit feather_m0_rfm69 feather_m0_rfm9x feather_m4_express arduino_zero arduino_mkr1300 arduino_mkrzero pewpew10 kicksat-sprite ugame10 robohatmm1 datum_light" TRAVIS_SDK=arm - TRAVIS_BOARDS="circuitplayground_express_crickit feather_m0_adalogger feather_m0_basic feather_m0_express catwan_usbstick pyportal sparkfun_samd21_mini sparkfun_samd21_dev pybadge pybadge_airlift datum_weather" TRAVIS_SDK=arm + - TRAVIS_BOARDS="trinket_m0_haxpress cp32-m4 feather_m0_supersized datalore_ip_m4" TRAVIS_SDK=arm addons: artifacts: From af8cfbedfb921bfead84a4fab08f5bf9f86274e5 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Wed, 24 Jul 2019 13:25:34 -0700 Subject: [PATCH 26/59] Add knobs for SSD1322 and two fixes. * Fix terminal clear after first successful code.py run. * Fix transmitting too many bytes for column constraint with single byte bounds. --- shared-bindings/displayio/Display.c | 16 +++++++--- shared-bindings/displayio/Display.h | 5 +-- shared-module/displayio/Display.c | 27 ++++++++++------ shared-module/displayio/Palette.h | 2 ++ shared-module/displayio/TileGrid.c | 6 +++- shared-module/displayio/__init__.c | 48 ++++++++++++++--------------- supervisor/shared/display.c | 3 +- 7 files changed, 66 insertions(+), 41 deletions(-) diff --git a/shared-bindings/displayio/Display.c b/shared-bindings/displayio/Display.c index 361a37ece1..9cb4d6e742 100644 --- a/shared-bindings/displayio/Display.c +++ b/shared-bindings/displayio/Display.c @@ -51,7 +51,7 @@ //| Most people should not use this class directly. Use a specific display driver instead that will //| contain the initialization sequence at minimum. //| -//| .. class:: Display(display_bus, init_sequence, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, grayscale=False, pixels_in_byte_share_row=True, set_column_command=0x2a, set_row_command=0x2b, write_ram_command=0x2c, set_vertical_scroll=0, backlight_pin=None, brightness_command=None, brightness=1.0, auto_brightness=False, single_byte_bounds=False, data_as_commands=False) +//| .. class:: Display(display_bus, init_sequence, *, width, height, colstart=0, rowstart=0, rotation=0, color_depth=16, grayscale=False, pixels_in_byte_share_row=True, bytes_per_cell=1, reverse_pixels_in_byte=False, set_column_command=0x2a, set_row_command=0x2b, write_ram_command=0x2c, set_vertical_scroll=0, backlight_pin=None, brightness_command=None, brightness=1.0, auto_brightness=False, single_byte_bounds=False, data_as_commands=False) //| //| Create a Display object on the given display bus (`displayio.FourWire` or `displayio.ParallelBus`). //| @@ -90,6 +90,8 @@ //| support 18 bit but 16 is easier to transmit. The last bit is extrapolated.) //| :param bool grayscale: True if the display only shows a single color. //| :param bool pixels_in_byte_share_row: True when pixels are less than a byte and a byte includes pixels from the same row of the display. When False, pixels share a column. +//| :param int bytes_per_cell: Number of bytes per addressable memory location when color_depth < 8. When greater than one, bytes share a row or column according to pixels_in_byte_share_row. +//| :param bool reverse_pixels_in_byte: Reverses the pixel order within each byte when color_depth < 8. Does not apply across multiple bytes even if there is more than one byte per cell (bytes_per_cell.) //| :param int set_column_command: Command used to set the start and end columns to update //| :param int set_row_command: Command used so set the start and end rows to update //| :param int write_ram_command: Command used to write pixels values into the update region. Ignored if data_as_commands is set. @@ -102,7 +104,7 @@ //| :param bool data_as_commands: Treat all init and boundary data as SPI commands. Certain displays require this. //| STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { - enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_grayscale, ARG_pixels_in_byte_share_row, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin, ARG_brightness_command, ARG_brightness, ARG_auto_brightness, ARG_single_byte_bounds, ARG_data_as_commands }; + enum { ARG_display_bus, ARG_init_sequence, ARG_width, ARG_height, ARG_colstart, ARG_rowstart, ARG_rotation, ARG_color_depth, ARG_grayscale, ARG_pixels_in_byte_share_row, ARG_bytes_per_cell, ARG_reverse_pixels_in_byte, ARG_set_column_command, ARG_set_row_command, ARG_write_ram_command, ARG_set_vertical_scroll, ARG_backlight_pin, ARG_brightness_command, ARG_brightness, ARG_auto_brightness, ARG_single_byte_bounds, ARG_data_as_commands }; static const mp_arg_t allowed_args[] = { { MP_QSTR_display_bus, MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_init_sequence, MP_ARG_REQUIRED | MP_ARG_OBJ }, @@ -114,6 +116,8 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a { MP_QSTR_color_depth, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 16} }, { MP_QSTR_grayscale, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = false} }, { MP_QSTR_pixels_in_byte_share_row, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = true} }, + { MP_QSTR_bytes_per_cell, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 1} }, + { MP_QSTR_reverse_pixels_in_byte, MP_ARG_BOOL | MP_ARG_KW_ONLY, {.u_bool = false} }, { MP_QSTR_set_column_command, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x2a} }, { MP_QSTR_set_row_command, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x2b} }, { MP_QSTR_write_ram_command, MP_ARG_INT | MP_ARG_KW_ONLY, {.u_int = 0x2c} }, @@ -163,7 +167,8 @@ STATIC mp_obj_t displayio_display_make_new(const mp_obj_type_t *type, size_t n_a common_hal_displayio_display_construct( self, display_bus, args[ARG_width].u_int, args[ARG_height].u_int, args[ARG_colstart].u_int, args[ARG_rowstart].u_int, rotation, - args[ARG_color_depth].u_int, args[ARG_grayscale].u_bool, args[ARG_pixels_in_byte_share_row].u_bool, + args[ARG_color_depth].u_int, args[ARG_grayscale].u_bool, + args[ARG_pixels_in_byte_share_row].u_bool, args[ARG_bytes_per_cell].u_bool, args[ARG_reverse_pixels_in_byte].u_bool, args[ARG_set_column_command].u_int, args[ARG_set_row_command].u_int, args[ARG_write_ram_command].u_int, args[ARG_set_vertical_scroll].u_int, @@ -199,7 +204,10 @@ STATIC mp_obj_t displayio_display_obj_show(mp_obj_t self_in, mp_obj_t group_in) group = MP_OBJ_TO_PTR(native_group(group_in)); } - common_hal_displayio_display_show(self, group); + bool ok = common_hal_displayio_display_show(self, group); + if (!ok) { + mp_raise_ValueError(translate("Group already used")); + } return mp_const_none; } MP_DEFINE_CONST_FUN_OBJ_2(displayio_display_show_obj, displayio_display_obj_show); diff --git a/shared-bindings/displayio/Display.h b/shared-bindings/displayio/Display.h index e765e6f256..a8938bbcdf 100644 --- a/shared-bindings/displayio/Display.h +++ b/shared-bindings/displayio/Display.h @@ -40,7 +40,8 @@ extern const mp_obj_type_t displayio_display_type; void common_hal_displayio_display_construct(displayio_display_obj_t* self, mp_obj_t bus, uint16_t width, uint16_t height, - int16_t colstart, int16_t rowstart, uint16_t rotation, uint16_t color_depth, bool grayscale, bool pixels_in_byte_share_row, + int16_t colstart, int16_t rowstart, uint16_t rotation, uint16_t color_depth, bool grayscale, + bool pixels_in_byte_share_row, uint8_t bytes_per_cell, bool reverse_pixels_in_byte, uint8_t set_column_command, uint8_t set_row_command, uint8_t write_ram_command, uint8_t set_vertical_scroll, uint8_t* init_sequence, uint16_t init_sequence_len, const mcu_pin_obj_t* backlight_pin, uint16_t brightness_command, mp_float_t brightness, bool auto_brightness, @@ -48,7 +49,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self, int32_t common_hal_displayio_display_wait_for_frame(displayio_display_obj_t* self); -void common_hal_displayio_display_show(displayio_display_obj_t* self, displayio_group_t* root_group); +bool common_hal_displayio_display_show(displayio_display_obj_t* self, displayio_group_t* root_group); void common_hal_displayio_display_refresh_soon(displayio_display_obj_t* self); diff --git a/shared-module/displayio/Display.c b/shared-module/displayio/Display.c index a8515b9e58..51c6f292ad 100644 --- a/shared-module/displayio/Display.c +++ b/shared-module/displayio/Display.c @@ -44,7 +44,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self, mp_obj_t bus, uint16_t width, uint16_t height, int16_t colstart, int16_t rowstart, uint16_t rotation, - uint16_t color_depth, bool grayscale, bool pixels_in_byte_share_row, + uint16_t color_depth, bool grayscale, bool pixels_in_byte_share_row, uint8_t bytes_per_cell, bool reverse_pixels_in_byte, uint8_t set_column_command, uint8_t set_row_command, uint8_t write_ram_command, uint8_t set_vertical_scroll, uint8_t* init_sequence, uint16_t init_sequence_len, const mcu_pin_obj_t* backlight_pin, uint16_t brightness_command, mp_float_t brightness, bool auto_brightness, @@ -52,6 +52,8 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self, self->colorspace.depth = color_depth; self->colorspace.grayscale = grayscale; self->colorspace.pixels_in_byte_share_row = pixels_in_byte_share_row; + self->colorspace.bytes_per_cell = bytes_per_cell; + self->colorspace.reverse_pixels_in_byte = reverse_pixels_in_byte; self->set_column_command = set_column_command; self->set_row_command = set_row_command; self->write_ram_command = write_ram_command; @@ -195,17 +197,25 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self, common_hal_displayio_display_show(self, &circuitpython_splash); } -void common_hal_displayio_display_show(displayio_display_obj_t* self, displayio_group_t* root_group) { +bool common_hal_displayio_display_show(displayio_display_obj_t* self, displayio_group_t* root_group) { if (root_group == NULL) { root_group = &circuitpython_splash; } if (root_group == self->current_group) { - return; + return true; + } + if (root_group->in_group) { + return false; + } + if (self->current_group != NULL) { + self->current_group->in_group = false; } displayio_group_update_transform(root_group, &self->transform); + root_group->in_group = true; self->current_group = root_group; self->full_refresh = true; common_hal_displayio_display_refresh_soon(self); + return true; } void common_hal_displayio_display_refresh_soon(displayio_display_obj_t* self) { @@ -299,11 +309,11 @@ void displayio_display_set_region_to_update(displayio_display_obj_t* self, displ if (self->colorspace.depth < 8) { uint8_t pixels_per_byte = 8 / self->colorspace.depth; if (self->colorspace.pixels_in_byte_share_row) { - x1 /= pixels_per_byte; - x2 /= pixels_per_byte; + x1 /= pixels_per_byte * self->colorspace.bytes_per_cell; + x2 /= pixels_per_byte * self->colorspace.bytes_per_cell; } else { - y1 /= pixels_per_byte; - y2 /= pixels_per_byte; + y1 /= pixels_per_byte * self->colorspace.bytes_per_cell; + y2 /= pixels_per_byte * self->colorspace.bytes_per_cell; } } @@ -318,7 +328,6 @@ void displayio_display_set_region_to_update(displayio_display_obj_t* self, displ if (self->single_byte_bounds) { data[data_length++] = x1 + self->colstart; data[data_length++] = x2 - 1 + self->colstart; - data_length += 2; } else { x1 += self->colstart; x2 += self->colstart - 1; @@ -413,7 +422,7 @@ bool displayio_display_clip_area(displayio_display_obj_t *self, const displayio_ // Expand the area if we have multiple pixels per byte and we need to byte // align the bounds. if (self->colorspace.depth < 8) { - uint8_t pixels_per_byte = 8 / self->colorspace.depth; + uint8_t pixels_per_byte = 8 / self->colorspace.depth * self->colorspace.bytes_per_cell; if (self->colorspace.pixels_in_byte_share_row) { if (clipped->x1 % pixels_per_byte != 0) { clipped->x1 -= clipped->x1 % pixels_per_byte; diff --git a/shared-module/displayio/Palette.h b/shared-module/displayio/Palette.h index 19c05baf5c..a917e24321 100644 --- a/shared-module/displayio/Palette.h +++ b/shared-module/displayio/Palette.h @@ -36,6 +36,8 @@ typedef struct { uint8_t depth; bool grayscale; bool pixels_in_byte_share_row; + uint8_t bytes_per_cell; + bool reverse_pixels_in_byte; uint8_t hue; } _displayio_colorspace_t; diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index 88873d3a9f..fee2ae9781 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -436,7 +436,11 @@ bool displayio_tilegrid_fill_area(displayio_tilegrid_t *self, const _displayio_c // asm("bkpt"); // } } - ((uint8_t*)buffer)[offset / pixels_per_byte] |= pixel << ((offset % pixels_per_byte) * colorspace->depth); + uint8_t shift = (offset % pixels_per_byte) * colorspace->depth; + if (colorspace->reverse_pixels_in_byte) { + shift = (pixels_per_byte - 1) * colorspace->depth - shift; + } + ((uint8_t*)buffer)[offset / pixels_per_byte] |= pixel << shift; } } } diff --git a/shared-module/displayio/__init__.c b/shared-module/displayio/__init__.c index 97060aaebe..8f6e650a1a 100644 --- a/shared-module/displayio/__init__.c +++ b/shared-module/displayio/__init__.c @@ -209,35 +209,35 @@ void reset_displays(void) { } } } else if (displays[i].i2cdisplay_bus.base.type == &displayio_i2cdisplay_type) { - displayio_i2cdisplay_obj_t* i2c = &displays[i].i2cdisplay_bus; - if (((uint32_t) i2c->bus) < ((uint32_t) &displays) || - ((uint32_t) i2c->bus) > ((uint32_t) &displays + CIRCUITPY_DISPLAY_LIMIT)) { - busio_i2c_obj_t* original_i2c = i2c->bus; - #if BOARD_I2C - // We don't need to move original_i2c if it is the board.SPI object because it is - // statically allocated already. (Doing so would also make it impossible to reference in - // a subsequent VM run.) - if (original_i2c == common_hal_board_get_i2c()) { - continue; - } - #endif - memcpy(&i2c->inline_bus, original_i2c, sizeof(busio_i2c_obj_t)); - i2c->bus = &i2c->inline_bus; - // Check for other displays that use the same i2c bus and swap them too. - for (uint8_t j = i + 1; j < CIRCUITPY_DISPLAY_LIMIT; j++) { - if (displays[i].i2cdisplay_bus.base.type == &displayio_i2cdisplay_type && - displays[i].i2cdisplay_bus.bus == original_i2c) { - displays[i].i2cdisplay_bus.bus = &i2c->inline_bus; - } + displayio_i2cdisplay_obj_t* i2c = &displays[i].i2cdisplay_bus; + if (((uint32_t) i2c->bus) < ((uint32_t) &displays) || + ((uint32_t) i2c->bus) > ((uint32_t) &displays + CIRCUITPY_DISPLAY_LIMIT)) { + busio_i2c_obj_t* original_i2c = i2c->bus; + #if BOARD_I2C + // We don't need to move original_i2c if it is the board.SPI object because it is + // statically allocated already. (Doing so would also make it impossible to reference in + // a subsequent VM run.) + if (original_i2c == common_hal_board_get_i2c()) { + continue; + } + #endif + memcpy(&i2c->inline_bus, original_i2c, sizeof(busio_i2c_obj_t)); + i2c->bus = &i2c->inline_bus; + // Check for other displays that use the same i2c bus and swap them too. + for (uint8_t j = i + 1; j < CIRCUITPY_DISPLAY_LIMIT; j++) { + if (displays[i].i2cdisplay_bus.base.type == &displayio_i2cdisplay_type && + displays[i].i2cdisplay_bus.bus == original_i2c) { + displays[i].i2cdisplay_bus.bus = &i2c->inline_bus; } } } - } - - for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) { - if (displays[i].display.base.type == NULL) { + } else { + // Not an active display. continue; } + + // Reset the displayed group. Only the first will get the terminal but + // that's ok. displayio_display_obj_t* display = &displays[i].display; display->auto_brightness = true; common_hal_displayio_display_show(display, &circuitpython_splash); diff --git a/supervisor/shared/display.c b/supervisor/shared/display.c index 6a39cbe8e0..fd51e2c079 100644 --- a/supervisor/shared/display.c +++ b/supervisor/shared/display.c @@ -229,5 +229,6 @@ displayio_group_t circuitpython_splash = { .size = 2, .max_size = 2, .children = splash_children, - .item_removed = false + .item_removed = false, + .in_group = false }; From 4e7de436b4524435cd412e7ce36b0aca14179033 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 25 Jul 2019 22:48:11 -0700 Subject: [PATCH 27/59] Update constructors of boards with displays --- ports/atmel-samd/boards/hallowing_m0_express/board.c | 2 ++ ports/atmel-samd/boards/pybadge/board.c | 2 ++ ports/atmel-samd/boards/pybadge_airlift/board.c | 2 ++ ports/atmel-samd/boards/pygamer/board.c | 2 ++ ports/atmel-samd/boards/pygamer_advance/board.c | 2 ++ ports/atmel-samd/boards/pyportal/board.c | 2 ++ ports/atmel-samd/boards/ugame10/board.c | 2 ++ 7 files changed, 14 insertions(+) diff --git a/ports/atmel-samd/boards/hallowing_m0_express/board.c b/ports/atmel-samd/boards/hallowing_m0_express/board.c index be1741c87e..c12431f8b2 100644 --- a/ports/atmel-samd/boards/hallowing_m0_express/board.c +++ b/ports/atmel-samd/boards/hallowing_m0_express/board.c @@ -93,6 +93,8 @@ void board_init(void) { 16, // Color depth false, // Grayscale false, // Pixels in a byte share a row. Only used for depth < 8 + 1, // bytes per cell. Only valid for depths < 8 + false, // reverse_pixels_in_byte. Only valid for depths < 8 MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command diff --git a/ports/atmel-samd/boards/pybadge/board.c b/ports/atmel-samd/boards/pybadge/board.c index c9dca0329a..e30b901b04 100644 --- a/ports/atmel-samd/boards/pybadge/board.c +++ b/ports/atmel-samd/boards/pybadge/board.c @@ -95,6 +95,8 @@ void board_init(void) { 16, // Color depth false, // grayscale false, // pixels in byte share row. only used for depth < 8 + 1, // bytes per cell. Only valid for depths < 8 + false, // reverse_pixels_in_byte. Only valid for depths < 8 MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command diff --git a/ports/atmel-samd/boards/pybadge_airlift/board.c b/ports/atmel-samd/boards/pybadge_airlift/board.c index eeab3f2b2c..38fb33886a 100644 --- a/ports/atmel-samd/boards/pybadge_airlift/board.c +++ b/ports/atmel-samd/boards/pybadge_airlift/board.c @@ -73,6 +73,8 @@ void board_init(void) { 16, // Color depth false, // grayscale false, // pixels in byte share row. Only used for depth < 8 + 1, // bytes per cell. Only valid for depths < 8 + false, // reverse_pixels_in_byte. Only valid for depths < 8 MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command diff --git a/ports/atmel-samd/boards/pygamer/board.c b/ports/atmel-samd/boards/pygamer/board.c index d413c8e341..5ccf3fc509 100644 --- a/ports/atmel-samd/boards/pygamer/board.c +++ b/ports/atmel-samd/boards/pygamer/board.c @@ -95,6 +95,8 @@ void board_init(void) { 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 MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command diff --git a/ports/atmel-samd/boards/pygamer_advance/board.c b/ports/atmel-samd/boards/pygamer_advance/board.c index 498a29db2c..72d4dda8dd 100644 --- a/ports/atmel-samd/boards/pygamer_advance/board.c +++ b/ports/atmel-samd/boards/pygamer_advance/board.c @@ -73,6 +73,8 @@ void board_init(void) { 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 MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command diff --git a/ports/atmel-samd/boards/pyportal/board.c b/ports/atmel-samd/boards/pyportal/board.c index 938072158e..a5de1d1454 100644 --- a/ports/atmel-samd/boards/pyportal/board.c +++ b/ports/atmel-samd/boards/pyportal/board.c @@ -85,6 +85,8 @@ void board_init(void) { 16, // Color depth false, // grayscale false, // pixels_in_byte_share_row (unused for depths > 8) + 1, // bytes per cell. Only valid for depths < 8 + false, // reverse_pixels_in_byte. Only valid for depths < 8 MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command diff --git a/ports/atmel-samd/boards/ugame10/board.c b/ports/atmel-samd/boards/ugame10/board.c index 15e22a72ca..72b0ed5777 100644 --- a/ports/atmel-samd/boards/ugame10/board.c +++ b/ports/atmel-samd/boards/ugame10/board.c @@ -93,6 +93,8 @@ void board_init(void) { 16, // Color depth false, // grayscale false, // pixels in byte share row. Only used with depth < 8 + 1, // bytes per cell. Only valid for depths < 8 + false, // reverse_pixels_in_byte. Only valid for depths < 8 MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command From 1dd4bf0280f4c37687b453855a964d1923248c82 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 25 Jul 2019 22:48:36 -0700 Subject: [PATCH 28/59] Update translations --- locale/ID.po | 45 ++++++++++++++++++++++------------------ locale/circuitpython.pot | 45 ++++++++++++++++++++++------------------ locale/de_DE.po | 45 ++++++++++++++++++++++------------------ locale/en_US.po | 45 ++++++++++++++++++++++------------------ locale/en_x_pirate.po | 45 ++++++++++++++++++++++------------------ locale/es.po | 45 ++++++++++++++++++++++------------------ locale/fil.po | 45 ++++++++++++++++++++++------------------ locale/fr.po | 45 ++++++++++++++++++++++------------------ locale/it_IT.po | 45 ++++++++++++++++++++++------------------ locale/pl.po | 45 ++++++++++++++++++++++------------------ locale/pt_BR.po | 45 ++++++++++++++++++++++------------------ locale/zh_Latn_pinyin.po | 45 ++++++++++++++++++++++------------------ 12 files changed, 300 insertions(+), 240 deletions(-) diff --git a/locale/ID.po b/locale/ID.po index b211d53794..bd12a5c943 100644 --- a/locale/ID.po +++ b/locale/ID.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -472,11 +472,11 @@ msgstr "" msgid "Could not initialize UART" msgstr "Tidak dapat menginisialisasi UART" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "" @@ -493,7 +493,7 @@ msgstr "DAC sudah digunakan" msgid "Data 0 pin must be byte aligned" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "" @@ -712,6 +712,10 @@ msgstr "" msgid "Function requires lock" msgstr "" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "" @@ -768,7 +772,7 @@ msgstr "Ukuran buffer tidak valid" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid channel count" msgstr "" @@ -776,11 +780,11 @@ msgstr "" msgid "Invalid direction." msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "" @@ -822,11 +826,11 @@ msgstr "" msgid "Invalid run mode." msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid voice count" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "" @@ -1071,7 +1075,7 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "SDA atau SCL membutuhkan pull up" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Sample rate must be positive" msgstr "" @@ -1143,19 +1147,19 @@ msgid "" "exit safe mode.\n" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "" @@ -1261,7 +1265,7 @@ msgstr "Baudrate tidak didukung" msgid "Unsupported display bus type" msgstr "Baudrate tidak didukung" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "" @@ -1277,7 +1281,7 @@ msgstr "" msgid "Viper functions don't currently support more than 4 arguments" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "" @@ -1404,7 +1408,7 @@ msgstr "" msgid "bits must be 8" msgstr "bits harus memilki nilai 8" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "bits_per_sample must be 8 or 16" msgstr "" @@ -1417,7 +1421,7 @@ msgstr "" msgid "buf is too small. need %d bytes" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "" @@ -1780,7 +1784,8 @@ msgstr "argumen keyword ekstra telah diberikan" msgid "extra positional arguments given" msgstr "argumen posisi ekstra telah diberikan" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "" @@ -2325,7 +2330,7 @@ msgstr "" msgid "rsplit(None,n)" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot index d91e2b3aca..1b135822fd 100644 --- a/locale/circuitpython.pot +++ b/locale/circuitpython.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -462,11 +462,11 @@ msgstr "" msgid "Could not initialize UART" msgstr "" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "" @@ -483,7 +483,7 @@ msgstr "" msgid "Data 0 pin must be byte aligned" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "" @@ -697,6 +697,10 @@ msgstr "" msgid "Function requires lock" msgstr "" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "" @@ -753,7 +757,7 @@ msgstr "" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid channel count" msgstr "" @@ -761,11 +765,11 @@ msgstr "" msgid "Invalid direction." msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "" @@ -807,11 +811,11 @@ msgstr "" msgid "Invalid run mode." msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid voice count" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "" @@ -1051,7 +1055,7 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Sample rate must be positive" msgstr "" @@ -1120,19 +1124,19 @@ msgid "" "exit safe mode.\n" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "" @@ -1237,7 +1241,7 @@ msgstr "" msgid "Unsupported display bus type" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "" @@ -1253,7 +1257,7 @@ msgstr "" msgid "Viper functions don't currently support more than 4 arguments" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "" @@ -1371,7 +1375,7 @@ msgstr "" msgid "bits must be 8" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "bits_per_sample must be 8 or 16" msgstr "" @@ -1384,7 +1388,7 @@ msgstr "" msgid "buf is too small. need %d bytes" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "" @@ -1746,7 +1750,8 @@ msgstr "" msgid "extra positional arguments given" msgstr "" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "" @@ -2289,7 +2294,7 @@ msgstr "" msgid "rsplit(None,n)" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/de_DE.po b/locale/de_DE.po index 7488331476..7ad69e1ddf 100644 --- a/locale/de_DE.po +++ b/locale/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: 2018-07-27 11:55-0700\n" "Last-Translator: Pascal Deneaux\n" "Language-Team: Sebastian Plamauer, Pascal Deneaux\n" @@ -466,11 +466,11 @@ msgstr "Konnte ble_uuid nicht decodieren. Status: 0x%04x" msgid "Could not initialize UART" msgstr "Konnte UART nicht initialisieren" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "Konnte first buffer nicht zuteilen" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "Konnte second buffer nicht zuteilen" @@ -487,7 +487,7 @@ msgstr "DAC wird schon benutzt" msgid "Data 0 pin must be byte aligned" msgstr "Data 0 pin muss am Byte ausgerichtet sein" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "" @@ -701,6 +701,10 @@ msgstr "" msgid "Function requires lock" msgstr "Die Funktion erwartet, dass der 'lock'-Befehl zuvor ausgeführt wurde" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "Gruppe voll" @@ -759,7 +763,7 @@ msgstr "Ungültige Puffergröße" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid channel count" msgstr "Ungültige Anzahl von Kanälen" @@ -767,11 +771,11 @@ msgstr "Ungültige Anzahl von Kanälen" msgid "Invalid direction." msgstr "Ungültige Richtung" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "Ungültige Datei" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "Ungültige format chunk size" @@ -813,11 +817,11 @@ msgstr "Ungültige Polarität" msgid "Invalid run mode." msgstr "Ungültiger Ausführungsmodus" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid voice count" msgstr "Ungültige Anzahl von Stimmen" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "Ungültige wave Datei" @@ -1068,7 +1072,7 @@ msgstr "Sicherheitsmodus aktiv! Gespeicherter Code wird nicht ausgeführt\n" msgid "SDA or SCL needs a pull up" msgstr "SDA oder SCL brauchen pull up" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Sample rate must be positive" msgstr "Abtastrate muss positiv sein" @@ -1149,19 +1153,19 @@ msgstr "" "Die Reset-Taste wurde beim Booten von CircuitPython gedrückt. Drücke sie " "erneut um den abgesicherten Modus zu verlassen. \n" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "" @@ -1268,7 +1272,7 @@ msgstr "Baudrate wird nicht unterstützt" msgid "Unsupported display bus type" msgstr "Nicht unterstützter display bus type" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "Nicht unterstütztes Format" @@ -1284,7 +1288,7 @@ msgstr "Nicht unterstützter Pull-Wert" msgid "Viper functions don't currently support more than 4 arguments" msgstr "Viper-Funktionen unterstützen derzeit nicht mehr als 4 Argumente" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "Voice index zu hoch" @@ -1411,7 +1415,7 @@ msgstr "bits muss 7, 8 oder 9 sein" msgid "bits must be 8" msgstr "bits müssen 8 sein" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "bits_per_sample must be 8 or 16" msgstr "Es müssen 8 oder 16 bits_per_sample sein" @@ -1424,7 +1428,7 @@ msgstr "Zweig ist außerhalb der Reichweite" msgid "buf is too small. need %d bytes" msgstr "buf ist zu klein. brauche %d Bytes" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "Puffer muss ein bytes-artiges Objekt sein" @@ -1786,7 +1790,8 @@ msgstr "Es wurden zusätzliche Keyword-Argumente angegeben" msgid "extra positional arguments given" msgstr "Es wurden zusätzliche Argumente ohne Keyword angegeben" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "Die Datei muss eine im Byte-Modus geöffnete Datei sein" @@ -2338,7 +2343,7 @@ msgstr "" msgid "rsplit(None,n)" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/en_US.po b/locale/en_US.po index 38074de988..49699283c6 100644 --- a/locale/en_US.po +++ b/locale/en_US.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: 2018-07-27 11:55-0700\n" "Last-Translator: \n" "Language-Team: \n" @@ -462,11 +462,11 @@ msgstr "" msgid "Could not initialize UART" msgstr "" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "" @@ -483,7 +483,7 @@ msgstr "" msgid "Data 0 pin must be byte aligned" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "" @@ -697,6 +697,10 @@ msgstr "" msgid "Function requires lock" msgstr "" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "" @@ -753,7 +757,7 @@ msgstr "" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid channel count" msgstr "" @@ -761,11 +765,11 @@ msgstr "" msgid "Invalid direction." msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "" @@ -807,11 +811,11 @@ msgstr "" msgid "Invalid run mode." msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid voice count" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "" @@ -1051,7 +1055,7 @@ msgstr "" msgid "SDA or SCL needs a pull up" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Sample rate must be positive" msgstr "" @@ -1120,19 +1124,19 @@ msgid "" "exit safe mode.\n" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "" @@ -1237,7 +1241,7 @@ msgstr "" msgid "Unsupported display bus type" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "" @@ -1253,7 +1257,7 @@ msgstr "" msgid "Viper functions don't currently support more than 4 arguments" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "" @@ -1371,7 +1375,7 @@ msgstr "" msgid "bits must be 8" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "bits_per_sample must be 8 or 16" msgstr "" @@ -1384,7 +1388,7 @@ msgstr "" msgid "buf is too small. need %d bytes" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "" @@ -1746,7 +1750,8 @@ msgstr "" msgid "extra positional arguments given" msgstr "" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "" @@ -2289,7 +2294,7 @@ msgstr "" msgid "rsplit(None,n)" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/en_x_pirate.po b/locale/en_x_pirate.po index 9bee12d2a2..885abe6818 100644 --- a/locale/en_x_pirate.po +++ b/locale/en_x_pirate.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: 2018-07-27 11:55-0700\n" "Last-Translator: \n" "Language-Team: @sommersoft, @MrCertainly\n" @@ -466,11 +466,11 @@ msgstr "" msgid "Could not initialize UART" msgstr "" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "" @@ -487,7 +487,7 @@ msgstr "" msgid "Data 0 pin must be byte aligned" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "" @@ -701,6 +701,10 @@ msgstr "" msgid "Function requires lock" msgstr "" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "" @@ -757,7 +761,7 @@ msgstr "" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid channel count" msgstr "" @@ -765,11 +769,11 @@ msgstr "" msgid "Invalid direction." msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "" @@ -811,11 +815,11 @@ msgstr "" msgid "Invalid run mode." msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid voice count" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "" @@ -1055,7 +1059,7 @@ msgstr "Runnin' in safe mode! Nay runnin' saved code.\n" msgid "SDA or SCL needs a pull up" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Sample rate must be positive" msgstr "" @@ -1124,19 +1128,19 @@ msgid "" "exit safe mode.\n" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "" @@ -1241,7 +1245,7 @@ msgstr "" msgid "Unsupported display bus type" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "" @@ -1257,7 +1261,7 @@ msgstr "" msgid "Viper functions don't currently support more than 4 arguments" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "" @@ -1375,7 +1379,7 @@ msgstr "" msgid "bits must be 8" msgstr "pieces must be of 8" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "bits_per_sample must be 8 or 16" msgstr "" @@ -1388,7 +1392,7 @@ msgstr "" msgid "buf is too small. need %d bytes" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "" @@ -1750,7 +1754,8 @@ msgstr "" msgid "extra positional arguments given" msgstr "" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "" @@ -2293,7 +2298,7 @@ msgstr "" msgid "rsplit(None,n)" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/es.po b/locale/es.po index 33cdfe348a..772570a31e 100644 --- a/locale/es.po +++ b/locale/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: 2018-08-24 22:56-0500\n" "Last-Translator: \n" "Language-Team: \n" @@ -470,11 +470,11 @@ msgstr "No se puede descodificar ble_uuid, err 0x%04x" msgid "Could not initialize UART" msgstr "No se puede inicializar la UART" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "No se pudo asignar el primer buffer" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "No se pudo asignar el segundo buffer" @@ -491,7 +491,7 @@ msgstr "DAC ya está siendo utilizado" msgid "Data 0 pin must be byte aligned" msgstr "El pin Data 0 debe estar alineado a bytes" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "Trozo de datos debe seguir fmt chunk" @@ -706,6 +706,10 @@ msgstr "Frecuencia capturada por encima de la capacidad. Captura en pausa." msgid "Function requires lock" msgstr "La función requiere lock" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "Group lleno" @@ -764,7 +768,7 @@ msgstr "Tamaño de buffer inválido" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "Inválido periodo de captura. Rango válido: 1 - 500" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid channel count" msgstr "Cuenta de canales inválida" @@ -772,11 +776,11 @@ msgstr "Cuenta de canales inválida" msgid "Invalid direction." msgstr "Dirección inválida." -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "Archivo inválido" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "Formato de fragmento de formato no válido" @@ -818,11 +822,11 @@ msgstr "Polaridad inválida" msgid "Invalid run mode." msgstr "Modo de ejecución inválido." -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid voice count" msgstr "Cuenta de voces inválida" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "Archivo wave inválido" @@ -1079,7 +1083,7 @@ msgstr "Ejecutando en modo seguro! No se esta ejecutando el código guardado.\n" msgid "SDA or SCL needs a pull up" msgstr "SDA o SCL necesitan una pull up" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Sample rate must be positive" msgstr "Sample rate debe ser positivo" @@ -1160,19 +1164,19 @@ msgstr "" "El botón reset fue presionado mientras arrancaba CircuitPython. Presiona " "otra vez para salir del modo seguro.\n" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "Los bits_per_sample del sample no igualan a los del mixer" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "La cuenta de canales del sample no iguala a las del mixer" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "El sample rate del sample no iguala al del mixer" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "El signo del sample no iguala al del mixer" @@ -1278,7 +1282,7 @@ msgstr "Baudrate no soportado" msgid "Unsupported display bus type" msgstr "tipo de bitmap no soportado" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "Formato no soportado" @@ -1294,7 +1298,7 @@ msgstr "valor pull no soportado." msgid "Viper functions don't currently support more than 4 arguments" msgstr "funciones Viper actualmente no soportan más de 4 argumentos." -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "Index de voz demasiado alto" @@ -1420,7 +1424,7 @@ msgstr "bits deben ser 7, 8 ó 9" msgid "bits must be 8" msgstr "bits debe ser 8" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "bits_per_sample must be 8 or 16" msgstr "bits_per_sample debe ser 8 ó 16" @@ -1433,7 +1437,7 @@ msgstr "El argumento de chr() no esta en el rango(256)" msgid "buf is too small. need %d bytes" msgstr "buf es demasiado pequeño. necesita %d bytes" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "buffer debe de ser un objeto bytes-like" @@ -1802,7 +1806,8 @@ msgstr "argumento(s) por palabra clave adicionales fueron dados" msgid "extra positional arguments given" msgstr "argumento posicional adicional dado" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "el archivo deberia ser una archivo abierto en modo byte" @@ -2353,7 +2358,7 @@ msgstr "retorno esperado '%q' pero se obtuvo '%q'" msgid "rsplit(None,n)" msgstr "rsplit(None,n)" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/fil.po b/locale/fil.po index 4f05812f79..8e4dbd9fd0 100644 --- a/locale/fil.po +++ b/locale/fil.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: 2018-12-20 22:15-0800\n" "Last-Translator: Timothy \n" "Language-Team: fil\n" @@ -471,11 +471,11 @@ msgstr "" msgid "Could not initialize UART" msgstr "Hindi ma-initialize ang UART" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "Hindi ma-iallocate ang first buffer" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "Hindi ma-iallocate ang second buffer" @@ -493,7 +493,7 @@ msgstr "Ginagamit na ang DAC" msgid "Data 0 pin must be byte aligned" msgstr "graphic ay dapat 2048 bytes ang haba" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "Dapat sunurin ng Data chunk ang fmt chunk" @@ -715,6 +715,10 @@ msgstr "" msgid "Function requires lock" msgstr "Function nangangailangan ng lock" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "Puno ang group" @@ -773,7 +777,7 @@ msgstr "Mali ang buffer size" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid channel count" msgstr "Maling bilang ng channel" @@ -781,11 +785,11 @@ msgstr "Maling bilang ng channel" msgid "Invalid direction." msgstr "Mali ang direksyon." -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "Mali ang file" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "Mali ang format ng chunk size" @@ -827,11 +831,11 @@ msgstr "Mali ang polarity" msgid "Invalid run mode." msgstr "Mali ang run mode." -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid voice count" msgstr "Maling bilang ng voice" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "May hindi tama sa wave file" @@ -1084,7 +1088,7 @@ msgstr "Tumatakbo sa safe mode! Hindi tumatakbo ang nai-save na code.\n" msgid "SDA or SCL needs a pull up" msgstr "Kailangan ng pull up resistors ang SDA o SCL" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Sample rate must be positive" msgstr "Sample rate ay dapat positibo" @@ -1163,19 +1167,19 @@ msgstr "" "Ang reset button ay pinindot habang nag boot ang CircuitPython. Pindutin " "ulit para lumabas sa safe mode.\n" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "Ang bits_per_sample ng sample ay hindi tugma sa mixer" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "Ang channel count ng sample ay hindi tugma sa mixer" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "Ang sample rate ng sample ay hindi tugma sa mixer" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "Ang signedness ng sample hindi tugma sa mixer" @@ -1282,7 +1286,7 @@ msgstr "Hindi supportadong baudrate" msgid "Unsupported display bus type" msgstr "Hindi supportadong tipo ng bitmap" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "Hindi supportadong format" @@ -1300,7 +1304,7 @@ msgstr "" "Ang mga function ng Viper ay kasalukuyang hindi sumusuporta sa higit sa 4 na " "argumento" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "Index ng Voice ay masyadong mataas" @@ -1424,7 +1428,7 @@ msgstr "bits ay dapat 7, 8 o 9" msgid "bits must be 8" msgstr "bits ay dapat walo (8)" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "bits_per_sample must be 8 or 16" msgstr "bits_per_sample ay dapat 8 o 16" @@ -1437,7 +1441,7 @@ msgstr "branch wala sa range" msgid "buf is too small. need %d bytes" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "buffer ay dapat bytes-like object" @@ -1811,7 +1815,8 @@ msgstr "dagdag na keyword argument na ibinigay" msgid "extra positional arguments given" msgstr "dagdag na positional argument na ibinigay" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "file ay dapat buksan sa byte mode" @@ -2363,7 +2368,7 @@ msgstr "return umasa ng '%q' pero ang nakuha ay ‘%q’" msgid "rsplit(None,n)" msgstr "rsplit(None,n)" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/fr.po b/locale/fr.po index a948630ee1..5bb51b622b 100644 --- a/locale/fr.po +++ b/locale/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: 2019-04-14 20:05+0100\n" "Last-Translator: Pierrick Couturier \n" "Language-Team: fr\n" @@ -477,11 +477,11 @@ msgstr "Impossible de décoder le 'ble_uuid', err 0x%04x" msgid "Could not initialize UART" msgstr "L'UART n'a pu être initialisé" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "Impossible d'allouer le 1er tampon" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "Impossible d'allouer le 2e tampon" @@ -499,7 +499,7 @@ msgstr "DAC déjà utilisé" msgid "Data 0 pin must be byte aligned" msgstr "La broche 'Data 0' doit être aligné sur l'octet" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "Un bloc de données doit suivre un bloc de format" @@ -720,6 +720,10 @@ msgstr "La fréquence capturée est au delà des capacités. Capture en pause." msgid "Function requires lock" msgstr "La fonction nécessite un verrou" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "Groupe plein" @@ -780,7 +784,7 @@ msgstr "Longueur de tampon invalide" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "Période de capture invalide. Gamme valide: 1 à 500" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "Invalid channel count" msgstr "Nombre de canaux invalide" @@ -789,11 +793,11 @@ msgstr "Nombre de canaux invalide" msgid "Invalid direction." msgstr "Direction invalide" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "Fichier invalide" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "Taille de bloc de formatage invalide" @@ -835,12 +839,12 @@ msgstr "Polarité invalide" msgid "Invalid run mode." msgstr "Mode de lancement invalide." -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "Invalid voice count" msgstr "Nombre de voix invalide" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "Fichier WAVE invalide" @@ -1100,7 +1104,7 @@ msgstr "Mode sans-échec! Le code sauvegardé n'est pas éxecuté.\n" msgid "SDA or SCL needs a pull up" msgstr "SDA ou SCL a besoin d'une résistance de tirage ('pull up')" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "Sample rate must be positive" msgstr "Le taux d'échantillonage doit être positif" @@ -1183,20 +1187,20 @@ msgstr "" "Le bouton 'reset' a été appuyé pendant le démarrage de CircuitPython. " "Appuyer de nouveau pour quitter de le mode sans-échec.\n" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "" "Le 'bits_per_sample' de l'échantillon ne correspond pas à celui du mixer" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "Le canal de l'échantillon ne correspond pas à celui du mixer" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "L'échantillonage de l'échantillon ne correspond pas à celui du mixer" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "Le signe de l'échantillon ne correspond pas à celui du mixer" @@ -1307,7 +1311,7 @@ msgstr "Débit non supporté" msgid "Unsupported display bus type" msgstr "Type de bus d'affichage non supporté" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "Format non supporté" @@ -1324,7 +1328,7 @@ msgid "Viper functions don't currently support more than 4 arguments" msgstr "" "les fonctions de Viper ne supportent pas plus de 4 arguments actuellement" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "Index de la voix trop grand" @@ -1449,7 +1453,7 @@ msgstr "bits doivent être 7, 8 ou 9" msgid "bits must be 8" msgstr "les bits doivent être 8" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "bits_per_sample must be 8 or 16" msgstr "'bits_per_sample' doivent être 8 ou 16" @@ -1464,7 +1468,7 @@ msgstr "branche hors-bornes" msgid "buf is too small. need %d bytes" msgstr "'buf' est trop petit. Besoin de %d octets" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "le tampon doit être un objet bytes-like" @@ -1845,7 +1849,8 @@ msgstr "argument(s) nommé(s) supplémentaire(s) donné(s)" msgid "extra positional arguments given" msgstr "argument(s) positionnel(s) supplémentaire(s) donné(s)" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "le fichier doit être un fichier ouvert en mode 'byte'" @@ -2404,7 +2409,7 @@ msgstr "return attendait '%q' mais a reçu '%q'" msgid "rsplit(None,n)" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/it_IT.po b/locale/it_IT.po index 40a685f759..2f8cfdc1e7 100644 --- a/locale/it_IT.po +++ b/locale/it_IT.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: 2018-10-02 16:27+0200\n" "Last-Translator: Enrico Paganin \n" "Language-Team: \n" @@ -472,11 +472,11 @@ msgstr "" msgid "Could not initialize UART" msgstr "Impossibile inizializzare l'UART" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "Impossibile allocare il primo buffer" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "Impossibile allocare il secondo buffer" @@ -494,7 +494,7 @@ msgstr "DAC già in uso" msgid "Data 0 pin must be byte aligned" msgstr "graphic deve essere lunga 2048 byte" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "" @@ -714,6 +714,10 @@ msgstr "" msgid "Function requires lock" msgstr "" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "Gruppo pieno" @@ -773,7 +777,7 @@ msgstr "lunghezza del buffer non valida" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "periodo di cattura invalido. Zona valida: 1 - 500" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "Invalid channel count" msgstr "Argomento non valido" @@ -782,11 +786,11 @@ msgstr "Argomento non valido" msgid "Invalid direction." msgstr "Direzione non valida." -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "File non valido" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "" @@ -828,12 +832,12 @@ msgstr "Polarità non valida" msgid "Invalid run mode." msgstr "Modalità di esecuzione non valida." -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "Invalid voice count" msgstr "Tipo di servizio non valido" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "File wave non valido" @@ -1088,7 +1092,7 @@ msgstr "Modalità sicura in esecuzione! Codice salvato non in esecuzione.\n" msgid "SDA or SCL needs a pull up" msgstr "SDA o SCL necessitano un pull-up" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "Sample rate must be positive" msgstr "STA deve essere attiva" @@ -1162,19 +1166,19 @@ msgid "" "exit safe mode.\n" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "" @@ -1281,7 +1285,7 @@ msgstr "baudrate non supportato" msgid "Unsupported display bus type" msgstr "tipo di bitmap non supportato" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "Formato non supportato" @@ -1297,7 +1301,7 @@ msgstr "Valore di pull non supportato." msgid "Viper functions don't currently support more than 4 arguments" msgstr "Le funzioni Viper non supportano più di 4 argomenti al momento" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "" @@ -1418,7 +1422,7 @@ msgstr "i bit devono essere 7, 8 o 9" msgid "bits must be 8" msgstr "i bit devono essere 8" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "bits_per_sample must be 8 or 16" msgstr "i bit devono essere 7, 8 o 9" @@ -1433,7 +1437,7 @@ msgstr "argomento di chr() non è in range(256)" msgid "buf is too small. need %d bytes" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "" @@ -1803,7 +1807,8 @@ msgstr "argomento nominato aggiuntivo fornito" msgid "extra positional arguments given" msgstr "argomenti posizonali extra dati" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "" @@ -2361,7 +2366,7 @@ msgstr "return aspettava '%q' ma ha ottenuto '%q'" msgid "rsplit(None,n)" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/pl.po b/locale/pl.po index 8967851269..83e408a3dc 100644 --- a/locale/pl.po +++ b/locale/pl.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: 2019-03-19 18:37-0700\n" "Last-Translator: Radomir Dopieralski \n" "Language-Team: pl\n" @@ -465,11 +465,11 @@ msgstr "Nie można zdekodować ble_uuid, błąd 0x%04x" msgid "Could not initialize UART" msgstr "Ustawienie UART nie powiodło się" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "Nie udała się alokacja pierwszego bufora" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "Nie udała się alokacja drugiego bufora" @@ -486,7 +486,7 @@ msgstr "DAC w użyciu" msgid "Data 0 pin must be byte aligned" msgstr "Nóżka data 0 musi być wyrównana do bajtu" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "Fragment danych musi następować po fragmencie fmt" @@ -700,6 +700,10 @@ msgstr "Uzyskana częstotliwość jest niemożliwa. Spauzowano." msgid "Function requires lock" msgstr "Funkcja wymaga blokady" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "Grupa pełna" @@ -758,7 +762,7 @@ msgstr "Zła wielkość bufora" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "Zły okres. Poprawny zakres to: 1 - 500" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid channel count" msgstr "Zła liczba kanałów" @@ -766,11 +770,11 @@ msgstr "Zła liczba kanałów" msgid "Invalid direction." msgstr "Zły tryb" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "Zły plik" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "Zła wielkość fragmentu formatu" @@ -812,11 +816,11 @@ msgstr "Zła polaryzacja" msgid "Invalid run mode." msgstr "Zły tryb uruchomienia" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid voice count" msgstr "Zła liczba głosów" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "Zły plik wave" @@ -1061,7 +1065,7 @@ msgstr "Uruchomiony tryb bezpieczeństwa! Zapisany kod nie jest uruchamiany.\n" msgid "SDA or SCL needs a pull up" msgstr "SDA lub SCL wymagają podciągnięcia" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Sample rate must be positive" msgstr "Częstotliwość próbkowania musi być dodatnia" @@ -1140,19 +1144,19 @@ msgstr "" "Przycisk reset został wciśnięty podczas startu CircuitPythona. Wciśnij go " "ponownie aby wyjść z trybu bezpieczeństwa.\n" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "Wartość bits_per_sample nie pasuje do miksera" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "Liczba kanałów nie pasuje do miksera " -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "Sample rate nie pasuje do miksera" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "Znak nie pasuje do miksera" @@ -1257,7 +1261,7 @@ msgstr "Zła szybkość transmisji" msgid "Unsupported display bus type" msgstr "Zły typ magistrali wyświetlaczy" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "Zły format" @@ -1273,7 +1277,7 @@ msgstr "Zła wartość podciągnięcia." msgid "Viper functions don't currently support more than 4 arguments" msgstr "Funkcje Viper nie obsługują obecnie więcej niż 4 argumentów" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "Zbyt wysoki indeks głosu" @@ -1395,7 +1399,7 @@ msgstr "bits musi być 7, 8 lub 9" msgid "bits must be 8" msgstr "bits musi być 8" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "bits_per_sample must be 8 or 16" msgstr "bits_per_sample musi być 8 lub 16" @@ -1408,7 +1412,7 @@ msgstr "skok poza zakres" msgid "buf is too small. need %d bytes" msgstr "buf zbyt mały. Wymagane %d bajtów" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "bufor mysi być typu bytes" @@ -1771,7 +1775,8 @@ msgstr "nadmiarowe argumenty nazwane" msgid "extra positional arguments given" msgstr "nadmiarowe argumenty pozycyjne" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "file musi być otwarte w trybie bajtowym" @@ -2315,7 +2320,7 @@ msgstr "return oczekiwał '%q', a jest '%q'" msgid "rsplit(None,n)" msgstr "rsplit(None,n)" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/pt_BR.po b/locale/pt_BR.po index 7e052bfb71..d3a8fe50a7 100644 --- a/locale/pt_BR.po +++ b/locale/pt_BR.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: 2018-10-02 21:14-0000\n" "Last-Translator: \n" "Language-Team: \n" @@ -468,11 +468,11 @@ msgstr "" msgid "Could not initialize UART" msgstr "Não foi possível inicializar o UART" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "Não pôde alocar primeiro buffer" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "Não pôde alocar segundo buffer" @@ -489,7 +489,7 @@ msgstr "DAC em uso" msgid "Data 0 pin must be byte aligned" msgstr "" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "Pedaço de dados deve seguir o pedaço de cortes" @@ -709,6 +709,10 @@ msgstr "" msgid "Function requires lock" msgstr "" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "Grupo cheio" @@ -766,7 +770,7 @@ msgstr "Arquivo inválido" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "Invalid channel count" msgstr "certificado inválido" @@ -775,11 +779,11 @@ msgstr "certificado inválido" msgid "Invalid direction." msgstr "Direção inválida" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "Arquivo inválido" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "Tamanho do pedaço de formato inválido" @@ -821,12 +825,12 @@ msgstr "" msgid "Invalid run mode." msgstr "" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "Invalid voice count" msgstr "certificado inválido" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "Aqruivo de ondas inválido" @@ -1071,7 +1075,7 @@ msgstr "Rodando em modo seguro! Não está executando o código salvo.\n" msgid "SDA or SCL needs a pull up" msgstr "SDA ou SCL precisa de um pull up" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Sample rate must be positive" msgstr "" @@ -1140,19 +1144,19 @@ msgid "" "exit safe mode.\n" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "" @@ -1258,7 +1262,7 @@ msgstr "Taxa de transmissão não suportada" msgid "Unsupported display bus type" msgstr "Taxa de transmissão não suportada" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "Formato não suportado" @@ -1274,7 +1278,7 @@ msgstr "" msgid "Viper functions don't currently support more than 4 arguments" msgstr "" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "" @@ -1392,7 +1396,7 @@ msgstr "" msgid "bits must be 8" msgstr "bits devem ser 8" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c #, fuzzy msgid "bits_per_sample must be 8 or 16" msgstr "bits devem ser 8" @@ -1407,7 +1411,7 @@ msgstr "Calibração está fora do intervalo" msgid "buf is too small. need %d bytes" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "" @@ -1771,7 +1775,8 @@ msgstr "argumentos extras de palavras-chave passados" msgid "extra positional arguments given" msgstr "argumentos extra posicionais passados" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "" @@ -2316,7 +2321,7 @@ msgstr "" msgid "rsplit(None,n)" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 258a4d3df8..620f37bf6a 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: circuitpython-cn\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-07-19 16:10-0700\n" +"POT-Creation-Date: 2019-07-25 22:48-0700\n" "PO-Revision-Date: 2019-04-13 10:10-0700\n" "Last-Translator: hexthat\n" "Language-Team: Chinese Hanyu Pinyin\n" @@ -466,11 +466,11 @@ msgstr "Wúfǎ jiěmǎ kě dú_uuid, err 0x%04x" msgid "Could not initialize UART" msgstr "Wúfǎ chūshǐhuà UART" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate first buffer" msgstr "Wúfǎ fēnpèi dì yī gè huǎnchōng qū" -#: shared-module/audioio/Mixer.c shared-module/audioio/WaveFile.c +#: shared-module/audiocore/Mixer.c shared-module/audiocore/WaveFile.c msgid "Couldn't allocate second buffer" msgstr "Wúfǎ fēnpèi dì èr gè huǎnchōng qū" @@ -487,7 +487,7 @@ msgstr "Fā yuán huì yǐjīng shǐyòng" msgid "Data 0 pin must be byte aligned" msgstr "Shùjù 0 de yǐn jiǎo bìxū shì zì jié duìqí" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Data chunk must follow fmt chunk" msgstr "Shùjù kuài bìxū zūnxún fmt qū kuài" @@ -701,6 +701,10 @@ msgstr "Pínlǜ bǔhuò gāo yú nénglì. Bǔhuò zàntíng." msgid "Function requires lock" msgstr "Hánshù xūyào suǒdìng" +#: shared-bindings/displayio/Display.c +msgid "Group already used" +msgstr "" + #: shared-module/displayio/Group.c msgid "Group full" msgstr "Fēnzǔ yǐ mǎn" @@ -759,7 +763,7 @@ msgstr "Wúxiào de huǎnchōng qū dàxiǎo" msgid "Invalid capture period. Valid range: 1 - 500" msgstr "Wúxiào de bǔhuò zhōuqí. Yǒuxiào fànwéi: 1-500" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid channel count" msgstr "Wúxiào de tōngdào jìshù" @@ -767,11 +771,11 @@ msgstr "Wúxiào de tōngdào jìshù" msgid "Invalid direction." msgstr "Wúxiào de fāngxiàng." -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid file" msgstr "Wúxiào de wénjiàn" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid format chunk size" msgstr "Géshì kuài dàxiǎo wúxiào" @@ -813,11 +817,11 @@ msgstr "Wúxiào liǎng jí zhí" msgid "Invalid run mode." msgstr "Wúxiào de yùnxíng móshì." -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Invalid voice count" msgstr "Wúxiào de yǔyīn jìshù" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Invalid wave file" msgstr "Wúxiào de làng làngcháo wénjiàn" @@ -1066,7 +1070,7 @@ msgstr "Zài ānquán móshì xià yùnxíng! Bù yùnxíng yǐ bǎocún de dài msgid "SDA or SCL needs a pull up" msgstr "SDA huò SCL xūyào lādòng" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "Sample rate must be positive" msgstr "Cǎiyàng lǜ bìxū wèi zhèng shù" @@ -1145,19 +1149,19 @@ msgstr "" "Qǐdòng CircuitPython shí, chóng zhì ànniǔ bèi àn xià. Zàicì àn xià yǐ tuìchū " "ānquán móshì\n" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's bits_per_sample does not match the mixer's" msgstr "Yàngběn de bits_per_sample yǔ hǔn yīn qì bù pǐpèi" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's channel count does not match the mixer's" msgstr "Yàngběn de píndào jìshù yǔ hǔn yīn qì bù xiāngfú" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's sample rate does not match the mixer's" msgstr "Yàngběn de yàngběn sùdù yǔ hǔn yīn qì de xiāngchà bù pǐpèi" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "The sample's signedness does not match the mixer's" msgstr "Yàngběn de qiānmíng yǔ hǔn yīn qì de qiānmíng bù pǐpèi" @@ -1262,7 +1266,7 @@ msgstr "Bù zhīchí de baudrate" msgid "Unsupported display bus type" msgstr "Bù zhīchí de gōnggòng qìchē lèixíng" -#: shared-module/audioio/WaveFile.c +#: shared-module/audiocore/WaveFile.c msgid "Unsupported format" msgstr "Bù zhīchí de géshì" @@ -1278,7 +1282,7 @@ msgstr "Bù zhīchí de lādòng zhí." msgid "Viper functions don't currently support more than 4 arguments" msgstr "Viper hánshù mùqián bù zhīchí chāoguò 4 gè cānshù" -#: shared-module/audioio/Mixer.c +#: shared-module/audiocore/Mixer.c msgid "Voice index too high" msgstr "Yǔyīn suǒyǐn tài gāo" @@ -1403,7 +1407,7 @@ msgstr "bǐtè bìxū shì 7,8 huò 9" msgid "bits must be 8" msgstr "bǐtè bìxū shì 8" -#: shared-bindings/audioio/Mixer.c +#: shared-bindings/audiocore/Mixer.c msgid "bits_per_sample must be 8 or 16" msgstr "měi jiàn yàngběn bìxū wèi 8 huò 16" @@ -1416,7 +1420,7 @@ msgstr "fēnzhī bùzài fànwéi nèi" msgid "buf is too small. need %d bytes" msgstr "huǎnchōng tài xiǎo. Xūyào%d zì jié" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "buffer must be a bytes-like object" msgstr "huǎnchōng qū bìxū shì zì jié lèi duìxiàng" @@ -1781,7 +1785,8 @@ msgstr "éwài de guānjiàn cí cānshù" msgid "extra positional arguments given" msgstr "gěi chūle éwài de wèizhì cānshù" -#: shared-bindings/audioio/WaveFile.c shared-bindings/displayio/OnDiskBitmap.c +#: shared-bindings/audiocore/WaveFile.c +#: shared-bindings/displayio/OnDiskBitmap.c msgid "file must be a file opened in byte mode" msgstr "wénjiàn bìxū shì zài zì jié móshì xià dǎkāi de wénjiàn" @@ -2326,7 +2331,7 @@ msgstr "fǎnhuí yùqí de '%q' dàn huòdéle '%q'" msgid "rsplit(None,n)" msgstr "" -#: shared-bindings/audioio/RawSample.c +#: shared-bindings/audiocore/RawSample.c msgid "" "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "'B'" From f8d2776177f56058316f218fab0cb3a7fa672e53 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 25 Jul 2019 22:54:14 -0700 Subject: [PATCH 29/59] Extend existing board lists Adding another means a build would be 6 concurrent jobs and make two not fit side by side in the 10 total we have. --- .travis.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 410dcce4c2..dcf27bff2e 100755 --- a/.travis.yml +++ b/.travis.yml @@ -21,12 +21,11 @@ git: # that SDK is shortest and add it there. In the case of major re-organizations, # just try to make the builds "about equal in run time" env: - - TRAVIS_TESTS="unix docs translations website" TRAVIS_BOARDS="circuitplayground_express mini_sam_m4 grandcentral_m4_express capablerobot_usbhub pygamer pca10056 pca10059 feather_nrf52840_express makerdiary_nrf52840_mdk makerdiary_nrf52840_mdk_usb_dongle particle_boron particle_argon particle_xenon sparkfun_nrf52840_mini electronut_labs_papyr electronut_labs_blip" TRAVIS_SDK=arm:nrf + - TRAVIS_TESTS="unix docs translations website" TRAVIS_BOARDS="trinket_m0_haxpress circuitplayground_express mini_sam_m4 grandcentral_m4_express capablerobot_usbhub pygamer pca10056 pca10059 feather_nrf52840_express makerdiary_nrf52840_mdk makerdiary_nrf52840_mdk_usb_dongle particle_boron particle_argon particle_xenon sparkfun_nrf52840_mini electronut_labs_papyr electronut_labs_blip" TRAVIS_SDK=arm:nrf - TRAVIS_BOARDS="metro_m0_express metro_m4_express metro_m4_airlift_lite pirkey_m0 trellis_m4_express trinket_m0 sparkfun_lumidrive sparkfun_redboard_turbo bast_pro_mini_m0 datum_distance pyruler" TRAVIS_SDK=arm - - TRAVIS_BOARDS="feather_radiofruit_zigbee gemma_m0 hallowing_m0_express itsybitsy_m0_express itsybitsy_m4_express meowmeow sam32 uchip escornabot_makech pygamer_advance datum_imu" TRAVIS_SDK=arm - - TRAVIS_BOARDS="feather_m0_express_crickit feather_m0_rfm69 feather_m0_rfm9x feather_m4_express arduino_zero arduino_mkr1300 arduino_mkrzero pewpew10 kicksat-sprite ugame10 robohatmm1 datum_light" TRAVIS_SDK=arm - - TRAVIS_BOARDS="circuitplayground_express_crickit feather_m0_adalogger feather_m0_basic feather_m0_express catwan_usbstick pyportal sparkfun_samd21_mini sparkfun_samd21_dev pybadge pybadge_airlift datum_weather" TRAVIS_SDK=arm - - TRAVIS_BOARDS="trinket_m0_haxpress cp32-m4 feather_m0_supersized datalore_ip_m4" TRAVIS_SDK=arm + - TRAVIS_BOARDS="cp32-m4 feather_radiofruit_zigbee gemma_m0 hallowing_m0_express itsybitsy_m0_express itsybitsy_m4_express meowmeow sam32 uchip escornabot_makech pygamer_advance datum_imu" TRAVIS_SDK=arm + - TRAVIS_BOARDS="feather_m0_supersized feather_m0_express_crickit feather_m0_rfm69 feather_m0_rfm9x feather_m4_express arduino_zero arduino_mkr1300 arduino_mkrzero pewpew10 kicksat-sprite ugame10 robohatmm1 datum_light" TRAVIS_SDK=arm + - TRAVIS_BOARDS="datalore_ip_m4 circuitplayground_express_crickit feather_m0_adalogger feather_m0_basic feather_m0_express catwan_usbstick pyportal sparkfun_samd21_mini sparkfun_samd21_dev pybadge pybadge_airlift datum_weather" TRAVIS_SDK=arm addons: artifacts: From a87094e01f0f1b92725619a730758936c09dda60 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 25 Jul 2019 22:56:46 -0700 Subject: [PATCH 30/59] Turn off GC opt to save space on Trinket Haxpress --- ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk b/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk index b9d36a7418..76c33a333a 100644 --- a/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk +++ b/ports/atmel-samd/boards/trinket_m0_haxpress/mpconfigboard.mk @@ -11,3 +11,5 @@ SPI_FLASH_FILESYSTEM = 1 EXTERNAL_FLASH_DEVICE_COUNT = 1 EXTERNAL_FLASH_DEVICES = W25Q32BV LONGINT_IMPL = MPZ + +SUPEROPT_GC = 0 From c61c874a6d42d2bf620dba3f93aaca2d61aeb9d1 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Fri, 26 Jul 2019 00:31:41 -0700 Subject: [PATCH 31/59] Reduce feather_m0_supersized build size Make it match feather_m0_express --- ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.mk b/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.mk index 33229044b7..e34d069623 100644 --- a/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.mk +++ b/ports/atmel-samd/boards/feather_m0_supersized/mpconfigboard.mk @@ -11,3 +11,6 @@ SPI_FLASH_FILESYSTEM = 1 EXTERNAL_FLASH_DEVICE_COUNT = 1 EXTERNAL_FLASH_DEVICES = "S25FL064L" LONGINT_IMPL = MPZ + +CFLAGS_INLINE_LIMIT = 60 +SUPEROPT_GC = 0 From eda3423e35e545ca74620ea9e1aae7ad052ab15e Mon Sep 17 00:00:00 2001 From: wallarug Date: Sat, 27 Jul 2019 16:27:41 +1000 Subject: [PATCH 32/59] updated to v1.7 board (samd51) --- ports/atmel-samd/boards/robohatmm151/board.c | 39 ++++++++++ .../boards/robohatmm151/mpconfigboard.h | 44 +++++++++++ .../boards/robohatmm151/mpconfigboard.mk | 32 ++++++++ ports/atmel-samd/boards/robohatmm151/pins.c | 78 +++++++++++++++++++ 4 files changed, 193 insertions(+) create mode 100644 ports/atmel-samd/boards/robohatmm151/board.c create mode 100644 ports/atmel-samd/boards/robohatmm151/mpconfigboard.h create mode 100644 ports/atmel-samd/boards/robohatmm151/mpconfigboard.mk create mode 100644 ports/atmel-samd/boards/robohatmm151/pins.c diff --git a/ports/atmel-samd/boards/robohatmm151/board.c b/ports/atmel-samd/boards/robohatmm151/board.c new file mode 100644 index 0000000000..0f60736a24 --- /dev/null +++ b/ports/atmel-samd/boards/robohatmm151/board.c @@ -0,0 +1,39 @@ +/* + * This file is part of the MicroPython project, http://micropython.org/ + * + * The MIT License (MIT) + * + * Copyright (c) 2017 Scott Shawcroft for Adafruit Industries + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "boards/board.h" +#include "mpconfigboard.h" +#include "hal/include/hal_gpio.h" + +void board_init(void) { +} + +bool board_requests_safe_mode(void) { + return false; +} + +void reset_board(void) { +} diff --git a/ports/atmel-samd/boards/robohatmm151/mpconfigboard.h b/ports/atmel-samd/boards/robohatmm151/mpconfigboard.h new file mode 100644 index 0000000000..4828c06fff --- /dev/null +++ b/ports/atmel-samd/boards/robohatmm151/mpconfigboard.h @@ -0,0 +1,44 @@ +#define MICROPY_HW_BOARD_NAME "Robo HAT MM1" +#define MICROPY_HW_MCU_NAME "samd51g19" + +#define CIRCUITPY_MCU_FAMILY samd51 + +#define MICROPY_HW_LED_STATUS (&pin_PA21) + +// Salae reads 12mhz which is the limit even though we set it to the safer 8mhz. +#define SPI_FLASH_BAUDRATE (8000000) + +// On-board flash +#define SPI_FLASH_MOSI_PIN &pin_PA12 +#define SPI_FLASH_MISO_PIN &pin_PA14 +#define SPI_FLASH_SCK_PIN &pin_PA13 +#define SPI_FLASH_CS_PIN &pin_PA15 + +// These are pins not to reset. +// SPI Data pins +#define MICROPY_PORT_A (0) +#define MICROPY_PORT_B (0) +#define MICROPY_PORT_C (0) +#define MICROPY_PORT_D (0) + +#define AUTORESET_DELAY_MS 500 + +// 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 8192 + +#define BOARD_FLASH_SIZE (FLASH_SIZE - 0x4000 - CIRCUITPY_INTERNAL_NVM_SIZE) + +#define DEFAULT_I2C_BUS_SCL (&pin_PA23) +#define DEFAULT_I2C_BUS_SDA (&pin_PA22) + +#define DEFAULT_SPI_BUS_SCK (&pin_PB11) +#define DEFAULT_SPI_BUS_MOSI (&pin_PB10) +#define DEFAULT_SPI_BUS_MISO (&pin_PB08) + +#define DEFAULT_UART_BUS_RX (&pin_PB03) +#define DEFAULT_UART_BUS_TX (&pin_PB02) + +// USB is always used internally so skip the pin objects for it. +#define IGNORE_PIN_PA24 1 +#define IGNORE_PIN_PA25 1 diff --git a/ports/atmel-samd/boards/robohatmm151/mpconfigboard.mk b/ports/atmel-samd/boards/robohatmm151/mpconfigboard.mk new file mode 100644 index 0000000000..1a5431c91c --- /dev/null +++ b/ports/atmel-samd/boards/robohatmm151/mpconfigboard.mk @@ -0,0 +1,32 @@ +LD_FILE = boards/samd51x19-bootloader-external-flash-crystalless.ld +USB_VID = 0x1209 +USB_PID = 0x4D43 +USB_PRODUCT = "Robo HAT MM1" +USB_MANUFACTURER = "Robotics Masters" + +CHIP_VARIANT = SAMD51G19A +CHIP_FAMILY = samd51 + +#QSPI_FLASH_FILESYSTEM = 0 + +SPI_FLASH_FILESYSTEM = 1 +EXTERNAL_FLASH_DEVICE_COUNT = 1 +EXTERNAL_FLASH_DEVICES = "W25Q64JV_IQ" +LONGINT_IMPL = MPZ + + +CIRCUITPY_PS2IO = 1 +# No I2S on SAMD51G +CIRCUITPY_AUDIOBUSIO = 0 +# No touch on SAMD51 yet +CIRCUITPY_TOUCHIO = 0 +# Make room for more stuff +CIRCUITPY_DISPLAYIO = 0 +CIRCUITPY_FREQUENCYIO = 0 + +# Include these Python libraries in firmware. +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel +#FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_INA219 +#FROZEN_MPY_DIRS += $(TOP)/frozen/RoboticsMasters_CircuitPython_MPU9250 + diff --git a/ports/atmel-samd/boards/robohatmm151/pins.c b/ports/atmel-samd/boards/robohatmm151/pins.c new file mode 100644 index 0000000000..71c8d86475 --- /dev/null +++ b/ports/atmel-samd/boards/robohatmm151/pins.c @@ -0,0 +1,78 @@ +#include "shared-bindings/board/__init__.h" + +// This mapping only includes functional names because pins broken +// out on connectors are labeled with their MCU name available from +// microcontroller.pin. +STATIC const mp_rom_map_elem_t board_global_dict_table[] = { + // SERVO Pins + { MP_ROM_QSTR(MP_QSTR_SERVO1), MP_ROM_PTR(&pin_PA16) }, + { MP_ROM_QSTR(MP_QSTR_SERVO2), MP_ROM_PTR(&pin_PA17) }, + { MP_ROM_QSTR(MP_QSTR_SERVO3), MP_ROM_PTR(&pin_PA18) }, + { MP_ROM_QSTR(MP_QSTR_SERVO4), MP_ROM_PTR(&pin_PA19) }, + { MP_ROM_QSTR(MP_QSTR_SERVO5), MP_ROM_PTR(&pin_PA11) }, + { MP_ROM_QSTR(MP_QSTR_SERVO6), MP_ROM_PTR(&pin_PA10) }, + { MP_ROM_QSTR(MP_QSTR_SERVO7), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_SERVO8), MP_ROM_PTR(&pin_PA08) }, + + // RCC (Radio Control Channel) Pins + { MP_ROM_QSTR(MP_QSTR_RCC1), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_RCC2), MP_ROM_PTR(&pin_PA06) }, + { MP_ROM_QSTR(MP_QSTR_RCC3), MP_ROM_PTR(&pin_PA05) }, + { MP_ROM_QSTR(MP_QSTR_RCC4), MP_ROM_PTR(&pin_PA04) }, + + // Special Function + { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA02) }, + { MP_ROM_QSTR(MP_QSTR_POWER_OFF), MP_ROM_PTR(&pin_PA03) }, + { MP_ROM_QSTR(MP_QSTR_POWER_ON), MP_ROM_PTR(&pin_PA27) }, + + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PA20) }, + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PA21) }, + { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PA22) }, + { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA23) }, + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PB02) }, + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PB03) }, + + // GROVE on SERCOM0 + { MP_ROM_QSTR(MP_QSTR_GROVE_SCL), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_SDA), MP_ROM_PTR(&pin_PA08) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_RX), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_TX), MP_ROM_PTR(&pin_PA08) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_D1), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_D0), MP_ROM_PTR(&pin_PA08) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_A1), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_A0), MP_ROM_PTR(&pin_PA08) }, + + // I2C on SERCOM1 + { MP_ROM_QSTR(MP_QSTR_I2C_SDA), MP_ROM_PTR(&pin_PA00) }, + { MP_ROM_QSTR(MP_QSTR_I2C_SCL), MP_ROM_PTR(&pin_PA01) }, + + // SPI Flash on SERCOM2 + { MP_ROM_QSTR(MP_QSTR_FLASH_SCK), MP_ROM_PTR(&pin_PA13) }, + { MP_ROM_QSTR(MP_QSTR_FLASH_MISO), MP_ROM_PTR(&pin_PA14) }, + { MP_ROM_QSTR(MP_QSTR_FLASH_MOSI), MP_ROM_PTR(&pin_PA12) }, + { MP_ROM_QSTR(MP_QSTR_FLASH_CS), MP_ROM_PTR(&pin_PA15) }, + + // SPI on SERCOM4 + { MP_ROM_QSTR(MP_QSTR_SPI_SCK), MP_ROM_PTR(&pin_PB11) }, + { MP_ROM_QSTR(MP_QSTR_SPI_MISO), MP_ROM_PTR(&pin_PB08) }, + { MP_ROM_QSTR(MP_QSTR_SPI_MOSI), MP_ROM_PTR(&pin_PB10) }, + { MP_ROM_QSTR(MP_QSTR_SPI_SS), MP_ROM_PTR(&pin_PB09) }, + + // GPS on SERCOM5 + { MP_ROM_QSTR(MP_QSTR_GPS_TX), MP_ROM_PTR(&pin_PB02) }, + { MP_ROM_QSTR(MP_QSTR_GPS_RX), MP_ROM_PTR(&pin_PB03) }, + // GPS on SERCOM1 + { MP_ROM_QSTR(MP_QSTR_GPS_SDA), MP_ROM_PTR(&pin_PA00) }, + { MP_ROM_QSTR(MP_QSTR_GPS_SCL), MP_ROM_PTR(&pin_PA01) }, + + // Raspberry Pi + { MP_ROM_QSTR(MP_QSTR_PI_GP25), MP_ROM_PTR(&pin_PA30) }, + { MP_ROM_QSTR(MP_QSTR_PI_GP24), MP_ROM_PTR(&pin_PA31) }, + { MP_ROM_QSTR(MP_QSTR_PI_RX), MP_ROM_PTR(&pin_PB22) }, + { MP_ROM_QSTR(MP_QSTR_PI_TX), MP_ROM_PTR(&pin_PB23) }, + + { 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_global_dict_table); From 36008de2ed90f73bd03c3acfd91d49280ace4b9d Mon Sep 17 00:00:00 2001 From: wallarug Date: Sat, 27 Jul 2019 16:29:30 +1000 Subject: [PATCH 33/59] added custom ld file for samd51 no crystal, ext flash --- ...9-bootloader-external-flash-crystalless.ld | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 ports/atmel-samd/boards/samd51x19-bootloader-external-flash-crystalless.ld diff --git a/ports/atmel-samd/boards/samd51x19-bootloader-external-flash-crystalless.ld b/ports/atmel-samd/boards/samd51x19-bootloader-external-flash-crystalless.ld new file mode 100644 index 0000000000..c89e90dfdc --- /dev/null +++ b/ports/atmel-samd/boards/samd51x19-bootloader-external-flash-crystalless.ld @@ -0,0 +1,84 @@ +/* + GNU linker script for SAMD51x19 (512K flash, 192K RAM) +*/ + +/* Specify the memory areas */ +MEMORY +{ + /* Leave 16KiB for the bootloader. 8K for user data and 256b for user config.*/ + FLASH (rx) : ORIGIN = 0x00000000 + 16K, LENGTH = 512K - 16K - 8K - 256 + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K +} + +/* top end of the stack */ +/* stack must be double-word (8 byte) aligned */ +_estack = ORIGIN(RAM) + LENGTH(RAM) - 8; +_bootloader_dbl_tap = ORIGIN(RAM) + LENGTH(RAM) - 4; + +/* define output sections */ +SECTIONS +{ + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + _sfixed = .; + KEEP(*(.vectors)) /* isr vector table */ + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + + . = ALIGN(4); + } >FLASH + + .ARM.exidx : + { + *(.ARM.exidx*) + *(.gnu.linkonce.armexidx.*) + _etext = .; /* define a global symbol at end of code */ + _sidata = .; /* start of .data section */ + } > FLASH + + /* This is the initialized data section + The program executes knowing that the data is in the RAM + but the loader puts the initial values in the FLASH (inidata). + It is one task of the startup to copy the initial values from FLASH to RAM. */ + .data : AT ( _sidata ) + { + . = ALIGN(4); + _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */ + *(.ramfunc) + *(.ramfunc*) + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */ + } >RAM + + /* Uninitialized data section */ + .bss : + { + . = ALIGN(4); + _sbss = .; + _szero = .; /* define a global symbol at bss start; used by startup code */ + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ezero = .; /* define a global symbol at bss end; used by startup code */ + _ebss = .; + } >RAM + + /* this just checks there is enough RAM for a minimal stack */ + .stack : + { + . = ALIGN(4); + . = . + 10K; /* Reserve a minimum of 10K for the stack. nvm will temporarily store 8k on the stack when writing. */ + . = ALIGN(4); + } >RAM + + .ARM.attributes 0 : { *(.ARM.attributes) } +} From e2b83e2dd94ad2aca093158eeff8bed62ca38efe Mon Sep 17 00:00:00 2001 From: wallarug Date: Sat, 27 Jul 2019 16:36:13 +1000 Subject: [PATCH 34/59] minor changes robohat d21 --- ports/atmel-samd/boards/robohatmm1/mpconfigboard.h | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/ports/atmel-samd/boards/robohatmm1/mpconfigboard.h b/ports/atmel-samd/boards/robohatmm1/mpconfigboard.h index dd31e912a1..b8be72d976 100644 --- a/ports/atmel-samd/boards/robohatmm1/mpconfigboard.h +++ b/ports/atmel-samd/boards/robohatmm1/mpconfigboard.h @@ -1,7 +1,7 @@ #define MICROPY_HW_BOARD_NAME "Robo HAT MM1" #define MICROPY_HW_MCU_NAME "samd21g18" -#define MICROPY_HW_LED_STATUS (&pin_PA21) +#define MICROPY_HW_LED_STATUS (&pin_PB22) // Salae reads 12mhz which is the limit even though we set it to the safer 8mhz. #define SPI_FLASH_BAUDRATE (8000000) @@ -24,7 +24,6 @@ #define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE) -//#define BOARD_HAS_CRYSTAL 0 #define CALIBRATE_CRYSTALLESS 1 #define DEFAULT_I2C_BUS_SCL (&pin_PA23) @@ -41,6 +40,3 @@ #define IGNORE_PIN_PA24 1 #define IGNORE_PIN_PA25 1 -//#define CIRCUITPY_I2CSLAVE -//#define CIRCUITPY_DISPLAYIO (0) - From 24e84adc6d1c1307a613961617fb37ab1b7b2381 Mon Sep 17 00:00:00 2001 From: wallarug Date: Sat, 27 Jul 2019 16:38:47 +1000 Subject: [PATCH 35/59] further robohat cleanups --- .../boards/robohatmm1/mpconfigboard.mk | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/ports/atmel-samd/boards/robohatmm1/mpconfigboard.mk b/ports/atmel-samd/boards/robohatmm1/mpconfigboard.mk index 9523984b77..e4f688f1e2 100644 --- a/ports/atmel-samd/boards/robohatmm1/mpconfigboard.mk +++ b/ports/atmel-samd/boards/robohatmm1/mpconfigboard.mk @@ -7,27 +7,23 @@ USB_MANUFACTURER = "Robotics Masters" CHIP_VARIANT = SAMD21G18A CHIP_FAMILY = samd21 -# Non-Flash Edition -#INTERNAL_FLASH_FILESYSTEM = 1 -#LONGINT_IMPL = NONE -#SUPEROPT_GC = 0 - -# SPI-Flash Edition SPI_FLASH_FILESYSTEM = 1 EXTERNAL_FLASH_DEVICE_COUNT = 1 EXTERNAL_FLASH_DEVICES = "W25Q64JV_IQ" LONGINT_IMPL = MPZ -# Make room for frozen Libraries + +# Non-Flash Edition +#INTERNAL_FLASH_FILESYSTEM = 1 +#LONGINT_IMPL = NONE + CIRCUITPY_DISPLAYIO = 0 CIRCUITPY_FREQUENCYIO = 0 -CFLAGS_INLINE_LIMIT = 55 +CFLAGS_INLINE_LIMIT = 60 +SUPEROPT_GC = 0 # Include these Python libraries in firmware. FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice +FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel #FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_INA219 #FROZEN_MPY_DIRS += $(TOP)/frozen/RoboticsMasters_CircuitPython_MPU9250 -FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_NeoPixel -#FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Crickit -#FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_Motor -#FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_seesaw From 9c57f52d1efcd3b3238c24b2e1a0389cbbd117f7 Mon Sep 17 00:00:00 2001 From: wallarug Date: Sat, 27 Jul 2019 16:56:03 +1000 Subject: [PATCH 36/59] updated pins.c for robohat --- ports/atmel-samd/boards/robohatmm1/pins.c | 68 ++++++++++------------- 1 file changed, 29 insertions(+), 39 deletions(-) diff --git a/ports/atmel-samd/boards/robohatmm1/pins.c b/ports/atmel-samd/boards/robohatmm1/pins.c index fc3db7a304..815c410491 100644 --- a/ports/atmel-samd/boards/robohatmm1/pins.c +++ b/ports/atmel-samd/boards/robohatmm1/pins.c @@ -2,32 +2,35 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { // SERVO Pins - { MP_ROM_QSTR(MP_QSTR_SERVO1), MP_ROM_PTR(&pin_PA16) }, - { MP_ROM_QSTR(MP_QSTR_SERVO2), MP_ROM_PTR(&pin_PA17) }, - { MP_ROM_QSTR(MP_QSTR_SERVO3), MP_ROM_PTR(&pin_PA18) }, - { MP_ROM_QSTR(MP_QSTR_SERVO4), MP_ROM_PTR(&pin_PA19) }, + { MP_ROM_QSTR(MP_QSTR_SERVO1), MP_ROM_PTR(&pin_PA18) }, + { MP_ROM_QSTR(MP_QSTR_SERVO2), MP_ROM_PTR(&pin_PA19) }, + { MP_ROM_QSTR(MP_QSTR_SERVO3), MP_ROM_PTR(&pin_PA20) }, + { MP_ROM_QSTR(MP_QSTR_SERVO4), MP_ROM_PTR(&pin_PA21) }, { MP_ROM_QSTR(MP_QSTR_SERVO5), MP_ROM_PTR(&pin_PA11) }, { MP_ROM_QSTR(MP_QSTR_SERVO6), MP_ROM_PTR(&pin_PA10) }, { MP_ROM_QSTR(MP_QSTR_SERVO7), MP_ROM_PTR(&pin_PA09) }, { MP_ROM_QSTR(MP_QSTR_SERVO8), MP_ROM_PTR(&pin_PA08) }, - // RC_CH Pins - { MP_ROM_QSTR(MP_QSTR_RCH1), MP_ROM_PTR(&pin_PA07) }, - { MP_ROM_QSTR(MP_QSTR_RCH2), MP_ROM_PTR(&pin_PA06) }, - { MP_ROM_QSTR(MP_QSTR_RCH3), MP_ROM_PTR(&pin_PA05) }, - { MP_ROM_QSTR(MP_QSTR_RCH4), MP_ROM_PTR(&pin_PA04) }, + // RCC Pins + { MP_ROM_QSTR(MP_QSTR_RCC1), MP_ROM_PTR(&pin_PA07) }, + { MP_ROM_QSTR(MP_QSTR_RCC2), MP_ROM_PTR(&pin_PA06) }, + { MP_ROM_QSTR(MP_QSTR_RCC3), MP_ROM_PTR(&pin_PA05) }, + { MP_ROM_QSTR(MP_QSTR_RCC4), MP_ROM_PTR(&pin_PA04) }, // Special Function + { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA02) }, { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA02) }, { MP_ROM_QSTR(MP_QSTR_POWER_OFF), MP_ROM_PTR(&pin_PA03) }, - { MP_ROM_QSTR(MP_QSTR_POWER_ENABLE), MP_ROM_PTR(&pin_PA28) }, + { MP_ROM_QSTR(MP_QSTR_POWER_DISABLE), MP_ROM_PTR(&pin_PA03) }, + { MP_ROM_QSTR(MP_QSTR_POWER_ON), MP_ROM_PTR(&pin_PA27) }, + { MP_ROM_QSTR(MP_QSTR_POWER_ENABLE), MP_ROM_PTR(&pin_PA27) }, - { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PA20) }, - { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PA21) }, + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PB23) }, + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PB22) }, { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PA22) }, { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA23) }, - { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PB22) }, - { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PB23) }, + { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PB02) }, + { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PB03) }, // UART on SERCOM0 { MP_ROM_QSTR(MP_QSTR_UART_TX), MP_ROM_PTR(&pin_PA04) }, @@ -42,14 +45,14 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_FLASH_CS), MP_ROM_PTR(&pin_PA15) }, // I2C on SERCOM3 - { MP_ROM_QSTR(MP_QSTR_I2C_SDA), MP_ROM_PTR(&pin_PA00) }, - { MP_ROM_QSTR(MP_QSTR_I2C_SCL), MP_ROM_PTR(&pin_PA01) }, + { MP_ROM_QSTR(MP_QSTR_SDA1), MP_ROM_PTR(&pin_PA00) }, + { MP_ROM_QSTR(MP_QSTR_SCL1), MP_ROM_PTR(&pin_PA01) }, // SPI on SERCOM4 - { MP_ROM_QSTR(MP_QSTR_SPI_SCK), MP_ROM_PTR(&pin_PB11) }, - { MP_ROM_QSTR(MP_QSTR_SPI_MISO), MP_ROM_PTR(&pin_PB08) }, - { MP_ROM_QSTR(MP_QSTR_SPI_MOSI), MP_ROM_PTR(&pin_PB10) }, - { MP_ROM_QSTR(MP_QSTR_SPI_SS), MP_ROM_PTR(&pin_PB09) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PB08) }, + { MP_ROM_QSTR(MP_QSTR_SS), MP_ROM_PTR(&pin_PB09) }, + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PB10) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PB11) }, // GPS on SERCOM5 { MP_ROM_QSTR(MP_QSTR_GPS_TX), MP_ROM_PTR(&pin_PB02) }, @@ -59,27 +62,14 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { // Raspberry Pi { MP_ROM_QSTR(MP_QSTR_PI_GP25), MP_ROM_PTR(&pin_PA30) }, + { MP_ROM_QSTR(MP_QSTR_SWCLK), MP_ROM_PTR(&pin_PA30) }, { MP_ROM_QSTR(MP_QSTR_PI_GP24), MP_ROM_PTR(&pin_PA31) }, - { MP_ROM_QSTR(MP_QSTR_PI_GP5), MP_ROM_PTR(&pin_PA27) }, - { MP_ROM_QSTR(MP_QSTR_PI_RX), MP_ROM_PTR(&pin_PB22) }, - { MP_ROM_QSTR(MP_QSTR_PI_TX), MP_ROM_PTR(&pin_PB23) }, + { MP_ROM_QSTR(MP_QSTR_SWDIO), MP_ROM_PTR(&pin_PA31) }, + { MP_ROM_QSTR(MP_QSTR_TX1), MP_ROM_PTR(&pin_PA16) }, + { MP_ROM_QSTR(MP_QSTR_PI_TX), MP_ROM_PTR(&pin_PA16) }, + { MP_ROM_QSTR(MP_QSTR_RX1), MP_ROM_PTR(&pin_PA17) }, + { MP_ROM_QSTR(MP_QSTR_PI_RX), MP_ROM_PTR(&pin_PA17) }, - // SIGNAL / Digital pins (for reference) - { MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_PB23) }, - { MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_PB22) }, - { MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_PB02) }, - { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_PB03) }, - { MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_PA00) }, - { MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_PA01) }, - { MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA28) }, - { MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_PA03) }, - { MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_PA20) }, - { MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PB11) }, - { MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PB09) }, - { MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PB10) }, - { MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PB08) }, - { MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA21) }, - { MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_PA03) }, { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, From b06fa487357d0b07564376e3395a3774dbf54896 Mon Sep 17 00:00:00 2001 From: wallarug Date: Sat, 27 Jul 2019 16:59:07 +1000 Subject: [PATCH 37/59] updated a few files --- .../boards/robohatmm1/mpconfigboard.h | 10 +-- .../boards/robohatmm151/mpconfigboard.h | 8 +-- .../boards/robohatmm151/mpconfigboard.mk | 1 - ports/atmel-samd/boards/robohatmm151/pins.c | 70 +++++++++---------- 4 files changed, 44 insertions(+), 45 deletions(-) diff --git a/ports/atmel-samd/boards/robohatmm1/mpconfigboard.h b/ports/atmel-samd/boards/robohatmm1/mpconfigboard.h index b8be72d976..dc122b6fa5 100644 --- a/ports/atmel-samd/boards/robohatmm1/mpconfigboard.h +++ b/ports/atmel-samd/boards/robohatmm1/mpconfigboard.h @@ -29,12 +29,12 @@ #define DEFAULT_I2C_BUS_SCL (&pin_PA23) #define DEFAULT_I2C_BUS_SDA (&pin_PA22) -#define DEFAULT_SPI_BUS_SCK (&pin_PB11) -#define DEFAULT_SPI_BUS_MOSI (&pin_PB10) -#define DEFAULT_SPI_BUS_MISO (&pin_PB08) +#define DEFAULT_SPI_BUS_SCK (&pin_PB10) +#define DEFAULT_SPI_BUS_MOSI (&pin_PB08) +#define DEFAULT_SPI_BUS_MISO (&pin_PB11) -#define DEFAULT_UART_BUS_RX (&pin_PB23) -#define DEFAULT_UART_BUS_TX (&pin_PB22) +#define DEFAULT_UART_BUS_RX (&pin_PB03) +#define DEFAULT_UART_BUS_TX (&pin_PB02) // USB is always used internally so skip the pin objects for it. #define IGNORE_PIN_PA24 1 diff --git a/ports/atmel-samd/boards/robohatmm151/mpconfigboard.h b/ports/atmel-samd/boards/robohatmm151/mpconfigboard.h index 4828c06fff..ac3a3a0ddf 100644 --- a/ports/atmel-samd/boards/robohatmm151/mpconfigboard.h +++ b/ports/atmel-samd/boards/robohatmm151/mpconfigboard.h @@ -3,7 +3,7 @@ #define CIRCUITPY_MCU_FAMILY samd51 -#define MICROPY_HW_LED_STATUS (&pin_PA21) +#define MICROPY_HW_LED_STATUS (&pin_PB22) // Salae reads 12mhz which is the limit even though we set it to the safer 8mhz. #define SPI_FLASH_BAUDRATE (8000000) @@ -32,9 +32,9 @@ #define DEFAULT_I2C_BUS_SCL (&pin_PA23) #define DEFAULT_I2C_BUS_SDA (&pin_PA22) -#define DEFAULT_SPI_BUS_SCK (&pin_PB11) -#define DEFAULT_SPI_BUS_MOSI (&pin_PB10) -#define DEFAULT_SPI_BUS_MISO (&pin_PB08) +#define DEFAULT_SPI_BUS_SCK (&pin_PB10) +#define DEFAULT_SPI_BUS_MOSI (&pin_PB08) +#define DEFAULT_SPI_BUS_MISO (&pin_PB11) #define DEFAULT_UART_BUS_RX (&pin_PB03) #define DEFAULT_UART_BUS_TX (&pin_PB02) diff --git a/ports/atmel-samd/boards/robohatmm151/mpconfigboard.mk b/ports/atmel-samd/boards/robohatmm151/mpconfigboard.mk index 1a5431c91c..e56a0089a7 100644 --- a/ports/atmel-samd/boards/robohatmm151/mpconfigboard.mk +++ b/ports/atmel-samd/boards/robohatmm151/mpconfigboard.mk @@ -14,7 +14,6 @@ EXTERNAL_FLASH_DEVICE_COUNT = 1 EXTERNAL_FLASH_DEVICES = "W25Q64JV_IQ" LONGINT_IMPL = MPZ - CIRCUITPY_PS2IO = 1 # No I2S on SAMD51G CIRCUITPY_AUDIOBUSIO = 0 diff --git a/ports/atmel-samd/boards/robohatmm151/pins.c b/ports/atmel-samd/boards/robohatmm151/pins.c index 71c8d86475..815c410491 100644 --- a/ports/atmel-samd/boards/robohatmm151/pins.c +++ b/ports/atmel-samd/boards/robohatmm151/pins.c @@ -1,50 +1,42 @@ #include "shared-bindings/board/__init__.h" -// This mapping only includes functional names because pins broken -// out on connectors are labeled with their MCU name available from -// microcontroller.pin. -STATIC const mp_rom_map_elem_t board_global_dict_table[] = { - // SERVO Pins - { MP_ROM_QSTR(MP_QSTR_SERVO1), MP_ROM_PTR(&pin_PA16) }, - { MP_ROM_QSTR(MP_QSTR_SERVO2), MP_ROM_PTR(&pin_PA17) }, - { MP_ROM_QSTR(MP_QSTR_SERVO3), MP_ROM_PTR(&pin_PA18) }, - { MP_ROM_QSTR(MP_QSTR_SERVO4), MP_ROM_PTR(&pin_PA19) }, +STATIC const mp_rom_map_elem_t board_global_dict_table[] = { + // SERVO Pins + { MP_ROM_QSTR(MP_QSTR_SERVO1), MP_ROM_PTR(&pin_PA18) }, + { MP_ROM_QSTR(MP_QSTR_SERVO2), MP_ROM_PTR(&pin_PA19) }, + { MP_ROM_QSTR(MP_QSTR_SERVO3), MP_ROM_PTR(&pin_PA20) }, + { MP_ROM_QSTR(MP_QSTR_SERVO4), MP_ROM_PTR(&pin_PA21) }, { MP_ROM_QSTR(MP_QSTR_SERVO5), MP_ROM_PTR(&pin_PA11) }, { MP_ROM_QSTR(MP_QSTR_SERVO6), MP_ROM_PTR(&pin_PA10) }, { MP_ROM_QSTR(MP_QSTR_SERVO7), MP_ROM_PTR(&pin_PA09) }, { MP_ROM_QSTR(MP_QSTR_SERVO8), MP_ROM_PTR(&pin_PA08) }, - // RCC (Radio Control Channel) Pins + // RCC Pins { MP_ROM_QSTR(MP_QSTR_RCC1), MP_ROM_PTR(&pin_PA07) }, { MP_ROM_QSTR(MP_QSTR_RCC2), MP_ROM_PTR(&pin_PA06) }, { MP_ROM_QSTR(MP_QSTR_RCC3), MP_ROM_PTR(&pin_PA05) }, { MP_ROM_QSTR(MP_QSTR_RCC4), MP_ROM_PTR(&pin_PA04) }, // Special Function + { MP_ROM_QSTR(MP_QSTR_VOLTAGE_MONITOR), MP_ROM_PTR(&pin_PA02) }, { MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_PA02) }, { MP_ROM_QSTR(MP_QSTR_POWER_OFF), MP_ROM_PTR(&pin_PA03) }, + { MP_ROM_QSTR(MP_QSTR_POWER_DISABLE), MP_ROM_PTR(&pin_PA03) }, { MP_ROM_QSTR(MP_QSTR_POWER_ON), MP_ROM_PTR(&pin_PA27) }, + { MP_ROM_QSTR(MP_QSTR_POWER_ENABLE), MP_ROM_PTR(&pin_PA27) }, - { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PA20) }, - { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PA21) }, + { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PB23) }, + { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PB22) }, { MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PA22) }, { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA23) }, { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PB02) }, { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PB03) }, - // GROVE on SERCOM0 - { MP_ROM_QSTR(MP_QSTR_GROVE_SCL), MP_ROM_PTR(&pin_PA09) }, - { MP_ROM_QSTR(MP_QSTR_GROVE_SDA), MP_ROM_PTR(&pin_PA08) }, - { MP_ROM_QSTR(MP_QSTR_GROVE_RX), MP_ROM_PTR(&pin_PA09) }, - { MP_ROM_QSTR(MP_QSTR_GROVE_TX), MP_ROM_PTR(&pin_PA08) }, - { MP_ROM_QSTR(MP_QSTR_GROVE_D1), MP_ROM_PTR(&pin_PA09) }, - { MP_ROM_QSTR(MP_QSTR_GROVE_D0), MP_ROM_PTR(&pin_PA08) }, - { MP_ROM_QSTR(MP_QSTR_GROVE_A1), MP_ROM_PTR(&pin_PA09) }, - { MP_ROM_QSTR(MP_QSTR_GROVE_A0), MP_ROM_PTR(&pin_PA08) }, - - // I2C on SERCOM1 - { MP_ROM_QSTR(MP_QSTR_I2C_SDA), MP_ROM_PTR(&pin_PA00) }, - { MP_ROM_QSTR(MP_QSTR_I2C_SCL), MP_ROM_PTR(&pin_PA01) }, + // UART on SERCOM0 + { MP_ROM_QSTR(MP_QSTR_UART_TX), MP_ROM_PTR(&pin_PA04) }, + { MP_ROM_QSTR(MP_QSTR_UART_RX), MP_ROM_PTR(&pin_PA05) }, + { MP_ROM_QSTR(MP_QSTR_UART_CTS), MP_ROM_PTR(&pin_PA06) }, + { MP_ROM_QSTR(MP_QSTR_UART_RTS), MP_ROM_PTR(&pin_PA07) }, // SPI Flash on SERCOM2 { MP_ROM_QSTR(MP_QSTR_FLASH_SCK), MP_ROM_PTR(&pin_PA13) }, @@ -52,27 +44,35 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_FLASH_MOSI), MP_ROM_PTR(&pin_PA12) }, { MP_ROM_QSTR(MP_QSTR_FLASH_CS), MP_ROM_PTR(&pin_PA15) }, + // I2C on SERCOM3 + { MP_ROM_QSTR(MP_QSTR_SDA1), MP_ROM_PTR(&pin_PA00) }, + { MP_ROM_QSTR(MP_QSTR_SCL1), MP_ROM_PTR(&pin_PA01) }, + // SPI on SERCOM4 - { MP_ROM_QSTR(MP_QSTR_SPI_SCK), MP_ROM_PTR(&pin_PB11) }, - { MP_ROM_QSTR(MP_QSTR_SPI_MISO), MP_ROM_PTR(&pin_PB08) }, - { MP_ROM_QSTR(MP_QSTR_SPI_MOSI), MP_ROM_PTR(&pin_PB10) }, - { MP_ROM_QSTR(MP_QSTR_SPI_SS), MP_ROM_PTR(&pin_PB09) }, + { MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PB08) }, + { MP_ROM_QSTR(MP_QSTR_SS), MP_ROM_PTR(&pin_PB09) }, + { MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PB10) }, + { MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PB11) }, // GPS on SERCOM5 { MP_ROM_QSTR(MP_QSTR_GPS_TX), MP_ROM_PTR(&pin_PB02) }, { MP_ROM_QSTR(MP_QSTR_GPS_RX), MP_ROM_PTR(&pin_PB03) }, - // GPS on SERCOM1 { MP_ROM_QSTR(MP_QSTR_GPS_SDA), MP_ROM_PTR(&pin_PA00) }, { MP_ROM_QSTR(MP_QSTR_GPS_SCL), MP_ROM_PTR(&pin_PA01) }, // Raspberry Pi { MP_ROM_QSTR(MP_QSTR_PI_GP25), MP_ROM_PTR(&pin_PA30) }, + { MP_ROM_QSTR(MP_QSTR_SWCLK), MP_ROM_PTR(&pin_PA30) }, { MP_ROM_QSTR(MP_QSTR_PI_GP24), MP_ROM_PTR(&pin_PA31) }, - { MP_ROM_QSTR(MP_QSTR_PI_RX), MP_ROM_PTR(&pin_PB22) }, - { MP_ROM_QSTR(MP_QSTR_PI_TX), MP_ROM_PTR(&pin_PB23) }, + { MP_ROM_QSTR(MP_QSTR_SWDIO), MP_ROM_PTR(&pin_PA31) }, + { MP_ROM_QSTR(MP_QSTR_TX1), MP_ROM_PTR(&pin_PA16) }, + { MP_ROM_QSTR(MP_QSTR_PI_TX), MP_ROM_PTR(&pin_PA16) }, + { MP_ROM_QSTR(MP_QSTR_RX1), MP_ROM_PTR(&pin_PA17) }, + { MP_ROM_QSTR(MP_QSTR_PI_RX), MP_ROM_PTR(&pin_PA17) }, - { MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) }, - { MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) }, - { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) }, + + { MP_ROM_QSTR(MP_QSTR_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_global_dict_table); From 0f30070d58286c3cfb84c7a2c189c1c8110598fc Mon Sep 17 00:00:00 2001 From: wallarug Date: Sat, 27 Jul 2019 17:44:42 +1000 Subject: [PATCH 38/59] updated naming schema to match other boards --- ports/atmel-samd/boards/{robohatmm1 => robohatmm1_m0}/board.c | 0 .../boards/{robohatmm1 => robohatmm1_m0}/mpconfigboard.h | 0 .../boards/{robohatmm1 => robohatmm1_m0}/mpconfigboard.mk | 0 ports/atmel-samd/boards/{robohatmm1 => robohatmm1_m0}/pins.c | 0 ports/atmel-samd/boards/{robohatmm151 => robohatmm1_m4}/board.c | 0 .../boards/{robohatmm151 => robohatmm1_m4}/mpconfigboard.h | 0 .../boards/{robohatmm151 => robohatmm1_m4}/mpconfigboard.mk | 0 ports/atmel-samd/boards/{robohatmm151 => robohatmm1_m4}/pins.c | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename ports/atmel-samd/boards/{robohatmm1 => robohatmm1_m0}/board.c (100%) rename ports/atmel-samd/boards/{robohatmm1 => robohatmm1_m0}/mpconfigboard.h (100%) rename ports/atmel-samd/boards/{robohatmm1 => robohatmm1_m0}/mpconfigboard.mk (100%) rename ports/atmel-samd/boards/{robohatmm1 => robohatmm1_m0}/pins.c (100%) rename ports/atmel-samd/boards/{robohatmm151 => robohatmm1_m4}/board.c (100%) rename ports/atmel-samd/boards/{robohatmm151 => robohatmm1_m4}/mpconfigboard.h (100%) rename ports/atmel-samd/boards/{robohatmm151 => robohatmm1_m4}/mpconfigboard.mk (100%) rename ports/atmel-samd/boards/{robohatmm151 => robohatmm1_m4}/pins.c (100%) diff --git a/ports/atmel-samd/boards/robohatmm1/board.c b/ports/atmel-samd/boards/robohatmm1_m0/board.c similarity index 100% rename from ports/atmel-samd/boards/robohatmm1/board.c rename to ports/atmel-samd/boards/robohatmm1_m0/board.c diff --git a/ports/atmel-samd/boards/robohatmm1/mpconfigboard.h b/ports/atmel-samd/boards/robohatmm1_m0/mpconfigboard.h similarity index 100% rename from ports/atmel-samd/boards/robohatmm1/mpconfigboard.h rename to ports/atmel-samd/boards/robohatmm1_m0/mpconfigboard.h diff --git a/ports/atmel-samd/boards/robohatmm1/mpconfigboard.mk b/ports/atmel-samd/boards/robohatmm1_m0/mpconfigboard.mk similarity index 100% rename from ports/atmel-samd/boards/robohatmm1/mpconfigboard.mk rename to ports/atmel-samd/boards/robohatmm1_m0/mpconfigboard.mk diff --git a/ports/atmel-samd/boards/robohatmm1/pins.c b/ports/atmel-samd/boards/robohatmm1_m0/pins.c similarity index 100% rename from ports/atmel-samd/boards/robohatmm1/pins.c rename to ports/atmel-samd/boards/robohatmm1_m0/pins.c diff --git a/ports/atmel-samd/boards/robohatmm151/board.c b/ports/atmel-samd/boards/robohatmm1_m4/board.c similarity index 100% rename from ports/atmel-samd/boards/robohatmm151/board.c rename to ports/atmel-samd/boards/robohatmm1_m4/board.c diff --git a/ports/atmel-samd/boards/robohatmm151/mpconfigboard.h b/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.h similarity index 100% rename from ports/atmel-samd/boards/robohatmm151/mpconfigboard.h rename to ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.h diff --git a/ports/atmel-samd/boards/robohatmm151/mpconfigboard.mk b/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk similarity index 100% rename from ports/atmel-samd/boards/robohatmm151/mpconfigboard.mk rename to ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk diff --git a/ports/atmel-samd/boards/robohatmm151/pins.c b/ports/atmel-samd/boards/robohatmm1_m4/pins.c similarity index 100% rename from ports/atmel-samd/boards/robohatmm151/pins.c rename to ports/atmel-samd/boards/robohatmm1_m4/pins.c From c22c13110bb0f9422bfdbd317a4a853d6ba04fa4 Mon Sep 17 00:00:00 2001 From: wallarug Date: Sat, 27 Jul 2019 17:46:02 +1000 Subject: [PATCH 39/59] updated travis with build names --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d75b4e7d4a..d33e93e9a0 100755 --- a/.travis.yml +++ b/.travis.yml @@ -24,7 +24,7 @@ env: - TRAVIS_TESTS="unix docs translations website" TRAVIS_BOARDS="circuitplayground_express mini_sam_m4 grandcentral_m4_express capablerobot_usbhub pygamer pca10056 pca10059 feather_nrf52840_express makerdiary_nrf52840_mdk makerdiary_nrf52840_mdk_usb_dongle particle_boron particle_argon particle_xenon sparkfun_nrf52840_mini electronut_labs_papyr electronut_labs_blip" TRAVIS_SDK=arm:nrf - TRAVIS_BOARDS="metro_m0_express metro_m4_express metro_m4_airlift_lite pirkey_m0 trellis_m4_express trinket_m0 sparkfun_lumidrive sparkfun_redboard_turbo bast_pro_mini_m0 datum_distance pyruler" TRAVIS_SDK=arm - TRAVIS_BOARDS="feather_radiofruit_zigbee gemma_m0 hallowing_m0_express itsybitsy_m0_express itsybitsy_m4_express meowmeow sam32 uchip escornabot_makech pygamer_advance datum_imu" TRAVIS_SDK=arm - - TRAVIS_BOARDS="feather_m0_express_crickit feather_m0_rfm69 feather_m0_rfm9x feather_m4_express arduino_zero arduino_mkr1300 arduino_mkrzero pewpew10 kicksat-sprite ugame10 robohatmm1 datum_light" TRAVIS_SDK=arm + - TRAVIS_BOARDS="feather_m0_express_crickit feather_m0_rfm69 feather_m0_rfm9x feather_m4_express arduino_zero arduino_mkr1300 arduino_mkrzero pewpew10 kicksat-sprite ugame10 robohatmm1_m0 robohatmm1_m4 datum_light" TRAVIS_SDK=arm - TRAVIS_BOARDS="circuitplayground_express_crickit feather_m0_adalogger feather_m0_basic feather_m0_express catwan_usbstick pyportal sparkfun_samd21_mini sparkfun_samd21_dev pybadge pybadge_airlift datum_weather" TRAVIS_SDK=arm addons: From a184380dc9a01a88ecb3735d5fbf48e955f2546f Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sat, 27 Jul 2019 09:15:37 -0500 Subject: [PATCH 40/59] add port-wide config parsing; add modules-by-board function --- docs/shared_bindings_matrix.py | 146 ++++++++++++++++++++++++++++----- 1 file changed, 127 insertions(+), 19 deletions(-) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index 59b67b7b28..694a60942b 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -29,6 +29,45 @@ import re SUPPORTED_PORTS = ["atmel-samd", "nrf"] +def parse_port_config(contents, chip_keyword=None): + """ Compile a dictionary of port-wide module configs, which may + be categorized by chipset. + """ + chip_fam = "all" + ifeq_found = False + port_config_results = {"all": []} + + chip_pattern = "" + if chip_keyword: + chip_pattern = ( + re.compile("(?<=ifeq\s\(\$\({}\)\,)(\w+)".format(chip_keyword)) + ) + + for line in contents: + if chip_keyword: + if not ifeq_found: + check_ifeq = chip_pattern.search(line) + if check_ifeq: + ifeq_found = True + chip_fam = check_ifeq.group(1) + print("found chip:", chip_fam) + else: + ifeq_found = False + chip_fam = "all" + else: + if "endif" in line: + ifeq_found = False + chip_fam = "all" + + if "CIRCUITPY_" in line: + if chip_fam in port_config_results: + port_config_results[chip_fam].append(line.rstrip("\n")) + else: + port_config_results[chip_fam] = [line.rstrip("\n")] + + #print(port_config_results) + return port_config_results + def get_shared_bindings(): """ Get a list of modules in shared-bindings based on folder names """ @@ -45,13 +84,15 @@ def read_mpconfig(): return configs -def build_module_map(modules, 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). """ base = dict() + modules = get_shared_bindings() + configs = read_mpconfig() full_build = False for module in modules: full_name = module @@ -71,36 +112,67 @@ def build_module_map(modules, configs): "name": full_name, "full_build": str(full_build), "default_value": default_val, - "excluded": [] + "excluded": {} } - return get_excluded_boards(base) + return base def get_excluded_boards(base): """ Cycles through each board's `mpconfigboard.mk` file to determine if each module is included or not. Boards are selected by existence in a port listed in `SUPPORTED_PORTS` (e.g. `/port/nrf/feather_52840`) + + Boards are further categorized by their respective chipset (SAMD21, + SAMD51, nRF52840, etc.) """ modules = list(base.keys()) + + re_board_chip = None + chip_keyword = None for port in SUPPORTED_PORTS: - port_dir = "ports/{}/boards".format(port) - for entry in os.scandir(port_dir): + # each port appears to use its own define for the chipset + if port in ["atmel-samd"]: + re_board_chip = re.compile("CHIP_FAMILY\s=\s(\w+)") + chip_keyword = "CHIP_FAMILY" + elif port in ["nrf"]: + re_board_chip = re.compile("MCU_VARIANT\s=\s(\w+)") + + port_dir = "ports/{}".format(port) + + port_config_contents = "" + with open(os.path.join(port_dir, "mpconfigport.mk")) as port_config: + port_config_contents = port_config.readlines() + port_config = parse_port_config(port_config_contents, chip_keyword) + + for entry in os.scandir(os.path.join(port_dir, "boards")): if not entry.is_dir(): continue + contents = "" board_dir = os.path.join(entry.path, "mpconfigboard.mk") - #print(board_dir) with open(board_dir) as board: contents = board.read() + + board_chip = re_board_chip.search(contents) + #print(entry.name, board_chip.group(1)) + if not board_chip: + board_chip = "Unknown Chip" + else: + board_chip = board_chip.group(1) + + # add port_config results to contents + contents += "\n" + "\n".join(port_config["all"]) + if board_chip in port_config: + contents += "\n" + "\n".join(port_config[board_chip]) + for module in modules: + board_is_excluded = False # check if board uses `SMALL_BUILD`. if yes, and current # module is marked as `FULL_BUILD`, board is excluded small_build = re.search("CIRCUITPY_SMALL_BUILD = 1", contents) if small_build and base[module]["full_build"] == "1": - base[module]["excluded"].append(entry.name) - continue - + board_is_excluded = True # check if module is specifically disabled for this board re_pattern = "CIRCUITPY_{}\s=\s(\w)".format(module.upper()) find_module = re.search(re_pattern, contents) @@ -108,18 +180,54 @@ def get_excluded_boards(base): # check if default inclusion is off ('0'). if the board doesn't # have it explicitly enabled, its excluded. if base[module]["default_value"] == "0": - base[module]["excluded"].append(entry.name) - continue - if (find_module.group(1) == "0" and - find_module.group(1) != base[module]["default_value"]): - base[module]["excluded"].append(entry.name) + board_is_excluded = True + else: + if (find_module.group(1) == "0" and + find_module.group(1) != base[module]["default_value"]): + board_is_excluded = True + if board_is_excluded: + if board_chip in base[module]["excluded"]: + base[module]["excluded"][board_chip].append(entry.name) + else: + base[module]["excluded"][board_chip] = [entry.name] + #print(json.dumps(base, indent=2)) return base -def support_matrix(): - modules = get_shared_bindings() - configs = read_mpconfig() - base = build_module_map(sorted(modules), configs) +def support_matrix_excluded_boards(): + """ Compiles a list of available modules, and which board definitions + do not include them. + """ + base = build_module_map() - return base + return get_excluded_boards(base) + +def support_matrix_by_board(): + """ Compiles a list of the available core modules available for each + board. + """ + base = build_module_map() + base_with_exclusions = get_excluded_boards(base) + + boards = dict() + for port in SUPPORTED_PORTS: + port_dir = "ports/{}/boards".format(port) + for entry in os.scandir(port_dir): + if not entry.is_dir(): + continue + board_modules = [] + for module in base_with_exclusions.keys(): + #print(module) + board_has_module = True + if base_with_exclusions[module]["excluded"]: + for port in base_with_exclusions[module]["excluded"].values(): + #print(port) + if entry.name in port: + board_has_module = False + + if board_has_module: + board_modules.append(base_with_exclusions[module]["name"]) + boards[entry.name] = sorted(board_modules) + + return boards From 19e504f182e6498b06fbe4398a53f027e9b76088 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sat, 27 Jul 2019 09:16:06 -0500 Subject: [PATCH 41/59] change conf.py to use modules-by-board --- conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf.py b/conf.py index 0c23028ecb..1e287e75e1 100644 --- a/conf.py +++ b/conf.py @@ -32,7 +32,8 @@ master_doc = 'docs/index' # Grab the JSON values to use while building the module support matrix # in 'shared-bindings/index.rst' -modules_support_matrix = shared_bindings_matrix.support_matrix() +#modules_support_matrix = shared_bindings_matrix.support_matrix_excluded_boards() +modules_support_matrix = shared_bindings_matrix.support_matrix_by_board() html_context = { 'support_matrix': modules_support_matrix From c6ac0ba68338775275112839978616106792ec3c Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sat, 27 Jul 2019 10:03:18 -0500 Subject: [PATCH 42/59] move the support matrix to its own page; add linking for modules --- docs/rstjinja.py | 2 +- shared-bindings/index.rst | 13 +------------ shared-bindings/support_matrix.rst | 14 ++++++++++++++ 3 files changed, 16 insertions(+), 13 deletions(-) create mode 100644 shared-bindings/support_matrix.rst diff --git a/docs/rstjinja.py b/docs/rstjinja.py index a92f2280c8..3a08b25997 100644 --- a/docs/rstjinja.py +++ b/docs/rstjinja.py @@ -10,7 +10,7 @@ def rstjinja(app, docname, source): return # we only want our one jinja template to run through this func - if "shared-bindings/index" not in docname: + if "shared-bindings/support_matrix" not in docname: return src = source[0] diff --git a/shared-bindings/index.rst b/shared-bindings/index.rst index f32745bc76..9eef42aeb1 100644 --- a/shared-bindings/index.rst +++ b/shared-bindings/index.rst @@ -14,18 +14,7 @@ Modules :glob: :maxdepth: 3 + support_matrix */__init__ help - .. _module-support-matrix: - -Support Matrix ---------------- - -================= ============================== -Module Not Available On -================= ============================== -{%- for key, value in support_matrix|dictsort %} -{{ value.name.ljust(18) }} {{ value.excluded|join(", ") }}{{ '\n'|e }} -{%- endfor %} -================= ============================== diff --git a/shared-bindings/support_matrix.rst b/shared-bindings/support_matrix.rst new file mode 100644 index 0000000000..0b40ec996b --- /dev/null +++ b/shared-bindings/support_matrix.rst @@ -0,0 +1,14 @@ +Support Matrix +=============== + +The following table lists the available built-in modules for each CircuitPython +capable board. + +.. csv-table:: + :header-rows: 1 + :widths: 7, 50 + + "Board", "Modules Available" + {% for key, value in support_matrix|dictsort -%} + "{{ key }}", "{{ '`' ~ value|join("`, `") ~ '`' }}" + {% endfor -%} From 69bbdcab91e9aec0715be23633551d15e9a55c9e Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sat, 27 Jul 2019 10:30:57 -0500 Subject: [PATCH 43/59] use MICROPY_HW_BOARD_NAME vice board's folder name --- docs/shared_bindings_matrix.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/shared_bindings_matrix.py b/docs/shared_bindings_matrix.py index 694a60942b..c3ca0258fd 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -50,7 +50,7 @@ def parse_port_config(contents, chip_keyword=None): if check_ifeq: ifeq_found = True chip_fam = check_ifeq.group(1) - print("found chip:", chip_fam) + #print("found chip:", chip_fam) else: ifeq_found = False chip_fam = "all" @@ -217,17 +217,28 @@ def support_matrix_by_board(): if not entry.is_dir(): continue board_modules = [] + + board_name = entry.name + board_contents = "" + with open(os.path.join(entry.path, "mpconfigboard.h")) as get_name: + board_contents = get_name.read() + board_name_re = re.search("(?<=MICROPY_HW_BOARD_NAME)\s+(.+)", + board_contents) + if board_name_re: + board_name = board_name_re.group(1).strip('"') + for module in base_with_exclusions.keys(): #print(module) board_has_module = True if base_with_exclusions[module]["excluded"]: for port in base_with_exclusions[module]["excluded"].values(): #print(port) - if entry.name in port: + if board_name in port: board_has_module = False if board_has_module: board_modules.append(base_with_exclusions[module]["name"]) - boards[entry.name] = sorted(board_modules) + boards[board_name] = sorted(board_modules) + #print(json.dumps(boards, indent=2)) return boards From c335f170d7d561d07ca7412da60c260e13c5e746 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sat, 27 Jul 2019 10:36:08 -0500 Subject: [PATCH 44/59] update 'Core Modules' description --- shared-bindings/index.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/shared-bindings/index.rst b/shared-bindings/index.rst index 9eef42aeb1..e4fccb4582 100644 --- a/shared-bindings/index.rst +++ b/shared-bindings/index.rst @@ -1,11 +1,11 @@ Core Modules ======================================== -These core modules are intended on being consistent across ports. Currently -they are only implemented in the SAMD21 and ESP8266 ports. A module may not exist -in a port if no underlying hardware support is present or if flash space is -limited. For example, a microcontroller without analog features will not have -`analogio`. +These core modules are intended on being consistent across ports and boards. +A module may not exist on a port/board if no underlying hardware support is +present or if flash space is limited. For example, a microcontroller without +analog features will not have `analogio`. See the `support_matrix` page for +a list of modules supported on each board. Modules --------- From 143275db044ae8a3f1d5aebb5b4c7ddfe49e4d69 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sat, 27 Jul 2019 11:01:10 -0500 Subject: [PATCH 45/59] fix board_exclusion lookup --- 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 c3ca0258fd..ed88efc75e 100644 --- a/docs/shared_bindings_matrix.py +++ b/docs/shared_bindings_matrix.py @@ -233,7 +233,7 @@ def support_matrix_by_board(): if base_with_exclusions[module]["excluded"]: for port in base_with_exclusions[module]["excluded"].values(): #print(port) - if board_name in port: + if entry.name in port: board_has_module = False if board_has_module: From 6afb758bdc6a32431c2434e4d4b01d5a980b9a31 Mon Sep 17 00:00:00 2001 From: hexthat Date: Sat, 27 Jul 2019 10:31:11 -0700 Subject: [PATCH 46/59] added translations --- locale/zh_Latn_pinyin.po | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po index 258a4d3df8..164f50bb47 100644 --- a/locale/zh_Latn_pinyin.po +++ b/locale/zh_Latn_pinyin.po @@ -349,7 +349,7 @@ msgstr "Zì jié bìxū jiè yú 0 dào 255 zhī jiān." #: py/objtype.c msgid "Call super().__init__() before accessing native object." -msgstr "" +msgstr "Zài fǎngwèn běn jī wùjiàn zhīqián diàoyòng super().__init__()" #: shared-bindings/_pixelbuf/PixelBuf.c #, c-format @@ -358,7 +358,7 @@ msgstr "Wúfǎ yǔ dotstar yīqǐ shǐyòng %s" #: ports/nrf/common-hal/bleio/Characteristic.c msgid "Can't set CCCD for local Characteristic" -msgstr "" +msgstr "Wúfǎ wéi běndì tèzhēng shèzhì CCCD" #: shared-bindings/displayio/Bitmap.c shared-bindings/pulseio/PulseIn.c msgid "Cannot delete values" @@ -443,7 +443,7 @@ msgstr "Liè tiáomù bìxū shì digitalio.DigitalInOut" #: shared-bindings/displayio/I2CDisplay.c msgid "Command must be 0-255" -msgstr "" +msgstr "Mìnglìng bìxū wèi 0-255" #: shared-bindings/displayio/FourWire.c shared-bindings/displayio/ParallelBus.c msgid "Command must be an int between 0 and 255" @@ -451,11 +451,11 @@ msgstr "Mìnglìng bìxū shì 0 dào 255 zhī jiān de int" #: py/persistentcode.c msgid "Corrupt .mpy file" -msgstr "" +msgstr "Fǔbài de .mpy wénjiàn" #: py/emitglue.c msgid "Corrupt raw code" -msgstr "" +msgstr "Sǔnhuài de yuánshǐ dàimǎ" #: ports/nrf/common-hal/bleio/UUID.c #, c-format @@ -534,7 +534,7 @@ msgstr "Yùqí UUID" #: shared-bindings/bleio/Central.c msgid "Expected an Address" -msgstr "" +msgstr "Qídài yīgè dìzhǐ" #: shared-module/_pixelbuf/PixelBuf.c #, c-format @@ -543,7 +543,7 @@ msgstr "Qīwàng de chángdù wèi %d de yuán zǔ, dédào %d" #: shared-bindings/ps2io/Ps2.c msgid "Failed sending command." -msgstr "" +msgstr "Fāsòng mìnglìng shībài." #: ports/nrf/sd_mutex.c #, c-format @@ -577,11 +577,11 @@ msgstr "Gēnggǎi ruǎn shèbèi zhuàngtài shībài" #: ports/nrf/common-hal/bleio/Peripheral.c #, c-format msgid "Failed to configure advertising, err 0x%04x" -msgstr "" +msgstr "Wúfǎ pèizhì guǎnggào, cuòwù 0x%04x" #: ports/nrf/common-hal/bleio/Central.c msgid "Failed to connect: timeout" -msgstr "" +msgstr "Liánjiē shībài: Chāoshí" #: ports/nrf/common-hal/bleio/Scanner.c #, c-format @@ -633,7 +633,7 @@ msgstr "Wúfǎ shìfàng mutex, err 0x%04x" #: ports/nrf/common-hal/bleio/Peripheral.c #, c-format msgid "Failed to set device name, err 0x%04x" -msgstr "" +msgstr "Wúfǎ shèzhì shèbèi míngchēng, cuòwù 0x%04x" #: ports/nrf/common-hal/bleio/Peripheral.c #, c-format @@ -643,7 +643,7 @@ msgstr "Qǐdòng guǎnggào shībài, err 0x%04x" #: ports/nrf/common-hal/bleio/Central.c #, c-format msgid "Failed to start connecting, error 0x%04x" -msgstr "" +msgstr "Wúfǎ kāishǐ liánjiē, cuòwù 0x%04x" #: ports/nrf/common-hal/bleio/Scanner.c #, c-format @@ -658,7 +658,7 @@ msgstr "Wúfǎ tíngzhǐ guǎnggào, err 0x%04x" #: ports/nrf/common-hal/bleio/Characteristic.c #, c-format msgid "Failed to write CCCD, err 0x%04x" -msgstr "" +msgstr "Wúfǎ xiě rù CCCD, cuòwù 0x%04x" #: ports/nrf/common-hal/bleio/Characteristic.c #, c-format @@ -1012,7 +1012,7 @@ msgstr "Zài wénjiàn xìtǒng shàng tiānjiā rènhé mókuài\n" #: shared-bindings/ps2io/Ps2.c msgid "Pop from an empty Ps2 buffer" -msgstr "" +msgstr "Cóng kōng de Ps2 huǎnchōng qū dànchū" #: main.c msgid "Press any key to enter the REPL. Use CTRL-D to reload." @@ -1124,7 +1124,8 @@ msgstr "" msgid "" "The `microcontroller` module was used to boot into safe mode. Press reset to " "exit safe mode.\n" -msgstr "" +msgstr "“Wēi kòngzhì qì” mókuài yòng yú qǐdòng ānquán móshì. Àn chóng zhì kě " +"tuìchū ānquán móshì.\n" #: supervisor/shared/safe_mode.c msgid "" @@ -1208,7 +1209,7 @@ msgstr "USB Cuòwù" #: shared-bindings/bleio/UUID.c msgid "UUID integer value must be 0-0xffff" -msgstr "" +msgstr "UUID zhěngshù zhí bìxū wèi 0-0xffff" #: shared-bindings/bleio/UUID.c msgid "UUID string not 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'" @@ -1226,7 +1227,7 @@ msgstr "Wúfǎ fēnpèi huǎnchōng qū yòng yú qiānmíng zhuǎnhuàn" #: shared-module/displayio/I2CDisplay.c #, c-format msgid "Unable to find I2C Display at %x" -msgstr "" +msgstr "Wúfǎ zài%x zhǎodào I2C xiǎnshìqì" #: ports/atmel-samd/common-hal/audiobusio/I2SOut.c #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c @@ -1913,7 +1914,7 @@ msgstr "xūyào zhěngshù" #: shared-bindings/bleio/Peripheral.c shared-bindings/bleio/Scanner.c #, c-format msgid "interval must be in range %s-%s" -msgstr "" +msgstr "Jiàngé bìxū zài %s-%s fànwéi nèi" #: extmod/machine_i2c.c msgid "invalid I2C peripheral" @@ -2606,7 +2607,7 @@ msgstr "bù zhīchí de lèixíng wèi %q: '%s', '%s'" #: py/objint.c #, c-format msgid "value must fit in %d byte(s)" -msgstr "" +msgstr "Zhí bìxū fúhé %d zì jié" #: shared-bindings/displayio/Bitmap.c msgid "value_count must be > 0" @@ -2614,7 +2615,7 @@ msgstr "zhí jìshù bìxū wèi > 0" #: shared-bindings/bleio/Scanner.c msgid "window must be <= interval" -msgstr "" +msgstr "Chuāngkǒu bìxū shì <= jiàngé" #: shared-bindings/_pixelbuf/PixelBuf.c msgid "write_args must be a list, tuple, or None" From a2bab9f1724cd869495835cda20b18d2e24f150b Mon Sep 17 00:00:00 2001 From: Seth Itow <11025699+sethitow@users.noreply.github.com> Date: Sat, 27 Jul 2019 12:58:28 -0700 Subject: [PATCH 47/59] bleio: Fix typo in Peripheral example code. --- shared-bindings/bleio/Peripheral.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared-bindings/bleio/Peripheral.c b/shared-bindings/bleio/Peripheral.c index 1302c96523..570896d27e 100644 --- a/shared-bindings/bleio/Peripheral.c +++ b/shared-bindings/bleio/Peripheral.c @@ -72,7 +72,7 @@ static const char default_name[] = "CIRCUITPY"; //| serv = bleio.Service(bleio.UUID(0x180f), [chara]) //| //| # Create a peripheral and start it up. -//| periph = bleio.Peripheral([service]) +//| periph = bleio.Peripheral([serv]) //| adv = ServerAdvertisement(periph) //| periph.start_advertising(adv.advertising_data_bytes, adv.scan_response_bytes) //| From d489c7a0579d13d29d42f29d6284cf51e57013d5 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sun, 28 Jul 2019 15:59:26 -0500 Subject: [PATCH 48/59] change 'c2rst' from source_parser -> extension; allows use of sphinx 2.x --- conf.py | 6 +++--- docs/c2rst.py | 46 +++++++++++++++++++++++++++++----------------- 2 files changed, 32 insertions(+), 20 deletions(-) diff --git a/conf.py b/conf.py index 7a00454e09..56625e758f 100644 --- a/conf.py +++ b/conf.py @@ -54,7 +54,8 @@ extensions = [ 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', - 'rstjinja' + 'rstjinja', + 'c2rst' ] # Add any paths that contain templates here, relative to this directory. @@ -63,8 +64,7 @@ templates_path = ['templates'] # The suffix of source filenames. source_suffix = ['.rst', '.md', '.c', '.h'] -source_parsers = {'.md': CommonMarkParser, - '.c': "c2rst.CStrip", '.h': "c2rst.CStrip"} +source_parsers = {'.md': CommonMarkParser} # The encoding of source files. #source_encoding = 'utf-8-sig' diff --git a/docs/c2rst.py b/docs/c2rst.py index 904fb74084..76489dca30 100644 --- a/docs/c2rst.py +++ b/docs/c2rst.py @@ -1,19 +1,31 @@ -import sphinx.parsers +def c2rst(app, docname, source): + """ Pre-parse '.c' & '.h' files that contain rST source. + """ + # Make sure we're outputting HTML + if app.builder.format != 'html': + return -class CStrip(sphinx.parsers.Parser): - def __init__(self): - self.rst_parser = sphinx.parsers.RSTParser() + fname = app.env.doc2path(docname) + if (not fname.endswith(".c") and + not fname.endswith(".h")): + #print("skipping:", fname) + return - def parse(self, inputstring, document): - # This setting is missing starting with Sphinx 1.7.1 so we set it ourself. - document.settings.tab_width = 4 - document.settings.character_level_inline_markup = False - stripped = [] - for line in inputstring.split("\n"): - line = line.strip() - if line == "//|": - stripped.append("") - elif line.startswith("//| "): - stripped.append(line[len("//| "):]) - stripped = "\r\n".join(stripped) - self.rst_parser.parse(stripped, document) + src = source[0] + + stripped = [] + for line in src.split("\n"): + line = line.strip() + if line == "//|": + stripped.append("") + elif line.startswith("//| "): + stripped.append(line[len("//| "):]) + stripped = "\r\n".join(stripped) + + rendered = app.builder.templates.render_string( + stripped, app.config.html_context + ) + source[0] = rendered + +def setup(app): + app.connect("source-read", c2rst) From 8c759628502687f3638acca088ad9b9da942f48d Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sun, 28 Jul 2019 16:00:29 -0500 Subject: [PATCH 49/59] add ':noindex:' to micropy's 'network.rst' to avoid sphinx conflict --- docs/library/network.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/library/network.rst b/docs/library/network.rst index d25f9f3884..cdcc5f3232 100644 --- a/docs/library/network.rst +++ b/docs/library/network.rst @@ -5,6 +5,7 @@ .. include:: ../templates/unsupported_in_circuitpython.inc .. module:: network + :noindex: :synopsis: network configuration This module provides network drivers and routing configuration. To use this From 6129a5850871ed12dff0cba138e05e205e07c626 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sun, 28 Jul 2019 16:02:02 -0500 Subject: [PATCH 50/59] have Travis use pip3 for Sphinx 2.x --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d75b4e7d4a..759d0be316 100755 --- a/.travis.yml +++ b/.travis.yml @@ -83,7 +83,7 @@ before_script: - pip3 install --user sh click - ([[ -z "$TRAVIS_TESTS" ]] || sudo pip install --upgrade cpp-coveralls) - (! var_search "${TRAVIS_TESTS-}" docs || sudo apt-get install -y librsvg2-bin) - - (! var_search "${TRAVIS_TESTS-}" docs || pip install --user Sphinx sphinx-rtd-theme recommonmark sphinxcontrib-svg2pdfconverter) + - (! var_search "${TRAVIS_TESTS-}" docs || pip3 install --user Sphinx sphinx-rtd-theme recommonmark sphinxcontrib-svg2pdfconverter) - (! var_search "${TRAVIS_TESTS-}" translations || pip3 install --user polib) # report some good version numbers to the build From 6454eb13846591f3d751aa7aaff2a7e381e90222 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sun, 28 Jul 2019 18:15:03 -0500 Subject: [PATCH 51/59] docs: add setuptools for sphinx 2.x --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 759d0be316..b9512565aa 100755 --- a/.travis.yml +++ b/.travis.yml @@ -83,7 +83,7 @@ before_script: - pip3 install --user sh click - ([[ -z "$TRAVIS_TESTS" ]] || sudo pip install --upgrade cpp-coveralls) - (! var_search "${TRAVIS_TESTS-}" docs || sudo apt-get install -y librsvg2-bin) - - (! var_search "${TRAVIS_TESTS-}" docs || pip3 install --user Sphinx sphinx-rtd-theme recommonmark sphinxcontrib-svg2pdfconverter) + - (! var_search "${TRAVIS_TESTS-}" docs || pip3 install --user setuptools Sphinx sphinx-rtd-theme recommonmark sphinxcontrib-svg2pdfconverter) - (! var_search "${TRAVIS_TESTS-}" translations || pip3 install --user polib) # report some good version numbers to the build From f7b10b1fdeb9d57f6ea29290e6531712473de11f Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sun, 28 Jul 2019 18:19:56 -0500 Subject: [PATCH 52/59] docs: install setuptools earlier --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index b9512565aa..17d7eac9d5 100755 --- a/.travis.yml +++ b/.travis.yml @@ -80,10 +80,10 @@ before_script: # For coverage testing (upgrade is used to get latest urllib3 version) - sudo apt-get install -y python3-pip - - pip3 install --user sh click + - pip3 install --user sh click setuptools - ([[ -z "$TRAVIS_TESTS" ]] || sudo pip install --upgrade cpp-coveralls) - (! var_search "${TRAVIS_TESTS-}" docs || sudo apt-get install -y librsvg2-bin) - - (! var_search "${TRAVIS_TESTS-}" docs || pip3 install --user setuptools Sphinx sphinx-rtd-theme recommonmark sphinxcontrib-svg2pdfconverter) + - (! var_search "${TRAVIS_TESTS-}" docs || pip3 install --user Sphinx sphinx-rtd-theme recommonmark sphinxcontrib-svg2pdfconverter) - (! var_search "${TRAVIS_TESTS-}" translations || pip3 install --user polib) # report some good version numbers to the build From bbc5255f046480fb2370bd6c2dd309c862478af7 Mon Sep 17 00:00:00 2001 From: sommersoft Date: Sun, 28 Jul 2019 21:25:43 -0500 Subject: [PATCH 53/59] update rST ref link for support matrix --- shared-bindings/index.rst | 1 - shared-bindings/support_matrix.rst | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/shared-bindings/index.rst b/shared-bindings/index.rst index e4fccb4582..cbffdb6140 100644 --- a/shared-bindings/index.rst +++ b/shared-bindings/index.rst @@ -17,4 +17,3 @@ Modules support_matrix */__init__ help -.. _module-support-matrix: diff --git a/shared-bindings/support_matrix.rst b/shared-bindings/support_matrix.rst index 0b40ec996b..124f3a8104 100644 --- a/shared-bindings/support_matrix.rst +++ b/shared-bindings/support_matrix.rst @@ -1,3 +1,5 @@ +.. _module-support-matrix: + Support Matrix =============== From 8838e25cb269f4a2be9bbb046db92c0377cbb3dc Mon Sep 17 00:00:00 2001 From: wallarug Date: Mon, 29 Jul 2019 16:28:35 +1000 Subject: [PATCH 54/59] Update pins.c --- ports/atmel-samd/boards/robohatmm1_m4/pins.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ports/atmel-samd/boards/robohatmm1_m4/pins.c b/ports/atmel-samd/boards/robohatmm1_m4/pins.c index 815c410491..4929df8f44 100644 --- a/ports/atmel-samd/boards/robohatmm1_m4/pins.c +++ b/ports/atmel-samd/boards/robohatmm1_m4/pins.c @@ -31,6 +31,16 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA23) }, { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PB02) }, { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PB03) }, + + // GROVE on SERCOM0 + { MP_ROM_QSTR(MP_QSTR_GROVE_SCL), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_SDA), MP_ROM_PTR(&pin_PA08) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_RX), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_TX), MP_ROM_PTR(&pin_PA08) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_D1), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_D0), MP_ROM_PTR(&pin_PA08) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_A1), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_A0), MP_ROM_PTR(&pin_PA08) }, // UART on SERCOM0 { MP_ROM_QSTR(MP_QSTR_UART_TX), MP_ROM_PTR(&pin_PA04) }, From 4d30efdc2a20116aea7d58a0a303e5b47eea8895 Mon Sep 17 00:00:00 2001 From: wallarug Date: Mon, 29 Jul 2019 16:29:48 +1000 Subject: [PATCH 55/59] Updated pins.c for GROVE. --- ports/atmel-samd/boards/robohatmm1_m0/pins.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ports/atmel-samd/boards/robohatmm1_m0/pins.c b/ports/atmel-samd/boards/robohatmm1_m0/pins.c index 815c410491..6d19167796 100644 --- a/ports/atmel-samd/boards/robohatmm1_m0/pins.c +++ b/ports/atmel-samd/boards/robohatmm1_m0/pins.c @@ -31,6 +31,16 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA23) }, { MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PB02) }, { MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PB03) }, + + // GROVE on SERCOM0 + { MP_ROM_QSTR(MP_QSTR_GROVE_SCL), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_SDA), MP_ROM_PTR(&pin_PA08) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_RX), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_TX), MP_ROM_PTR(&pin_PA08) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_D1), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_D0), MP_ROM_PTR(&pin_PA08) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_A1), MP_ROM_PTR(&pin_PA09) }, + { MP_ROM_QSTR(MP_QSTR_GROVE_A0), MP_ROM_PTR(&pin_PA08) }, // UART on SERCOM0 { MP_ROM_QSTR(MP_QSTR_UART_TX), MP_ROM_PTR(&pin_PA04) }, @@ -70,7 +80,6 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_RX1), MP_ROM_PTR(&pin_PA17) }, { MP_ROM_QSTR(MP_QSTR_PI_RX), MP_ROM_PTR(&pin_PA17) }, - { 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) }, From 9e0bea405d49d03663ff4c55a2cd800971e5df9d Mon Sep 17 00:00:00 2001 From: wallarug Date: Mon, 29 Jul 2019 16:37:21 +1000 Subject: [PATCH 56/59] Added BUTTON to pins.c --- ports/atmel-samd/boards/robohatmm1_m0/pins.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/atmel-samd/boards/robohatmm1_m0/pins.c b/ports/atmel-samd/boards/robohatmm1_m0/pins.c index 6d19167796..f50e8d15a5 100644 --- a/ports/atmel-samd/boards/robohatmm1_m0/pins.c +++ b/ports/atmel-samd/boards/robohatmm1_m0/pins.c @@ -24,6 +24,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_POWER_DISABLE), MP_ROM_PTR(&pin_PA03) }, { MP_ROM_QSTR(MP_QSTR_POWER_ON), MP_ROM_PTR(&pin_PA27) }, { MP_ROM_QSTR(MP_QSTR_POWER_ENABLE), MP_ROM_PTR(&pin_PA27) }, + { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_PA27) }, { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PB23) }, { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PB22) }, From 8974c7e8434ee343480b8e2f15a83bd842550318 Mon Sep 17 00:00:00 2001 From: wallarug Date: Mon, 29 Jul 2019 16:37:53 +1000 Subject: [PATCH 57/59] Added BUTTON to pins.c --- ports/atmel-samd/boards/robohatmm1_m4/pins.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/atmel-samd/boards/robohatmm1_m4/pins.c b/ports/atmel-samd/boards/robohatmm1_m4/pins.c index 4929df8f44..e1204e3437 100644 --- a/ports/atmel-samd/boards/robohatmm1_m4/pins.c +++ b/ports/atmel-samd/boards/robohatmm1_m4/pins.c @@ -24,6 +24,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_POWER_DISABLE), MP_ROM_PTR(&pin_PA03) }, { MP_ROM_QSTR(MP_QSTR_POWER_ON), MP_ROM_PTR(&pin_PA27) }, { MP_ROM_QSTR(MP_QSTR_POWER_ENABLE), MP_ROM_PTR(&pin_PA27) }, + { MP_ROM_QSTR(MP_QSTR_BUTTON), MP_ROM_PTR(&pin_PA27) }, { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PB23) }, { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_PB22) }, From ff6ae1aefb5ea393eb80367b058057920b181203 Mon Sep 17 00:00:00 2001 From: wallarug Date: Tue, 30 Jul 2019 19:13:33 +1000 Subject: [PATCH 58/59] Update mpconfigboard.mk to use standard linker file --- ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk b/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk index e56a0089a7..afd15ad0a2 100644 --- a/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk +++ b/ports/atmel-samd/boards/robohatmm1_m4/mpconfigboard.mk @@ -1,4 +1,4 @@ -LD_FILE = boards/samd51x19-bootloader-external-flash-crystalless.ld +LD_FILE = boards/samd51x19-bootloader-external-flash.ld USB_VID = 0x1209 USB_PID = 0x4D43 USB_PRODUCT = "Robo HAT MM1" From ecfffac3a8926d149aa5021ccb978c2e06c70226 Mon Sep 17 00:00:00 2001 From: wallarug Date: Tue, 30 Jul 2019 19:48:35 +1000 Subject: [PATCH 59/59] Delete samd51x19-bootloader-external-flash-crystalless.ld --- ...9-bootloader-external-flash-crystalless.ld | 84 ------------------- 1 file changed, 84 deletions(-) delete mode 100644 ports/atmel-samd/boards/samd51x19-bootloader-external-flash-crystalless.ld diff --git a/ports/atmel-samd/boards/samd51x19-bootloader-external-flash-crystalless.ld b/ports/atmel-samd/boards/samd51x19-bootloader-external-flash-crystalless.ld deleted file mode 100644 index c89e90dfdc..0000000000 --- a/ports/atmel-samd/boards/samd51x19-bootloader-external-flash-crystalless.ld +++ /dev/null @@ -1,84 +0,0 @@ -/* - GNU linker script for SAMD51x19 (512K flash, 192K RAM) -*/ - -/* Specify the memory areas */ -MEMORY -{ - /* Leave 16KiB for the bootloader. 8K for user data and 256b for user config.*/ - FLASH (rx) : ORIGIN = 0x00000000 + 16K, LENGTH = 512K - 16K - 8K - 256 - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K -} - -/* top end of the stack */ -/* stack must be double-word (8 byte) aligned */ -_estack = ORIGIN(RAM) + LENGTH(RAM) - 8; -_bootloader_dbl_tap = ORIGIN(RAM) + LENGTH(RAM) - 4; - -/* define output sections */ -SECTIONS -{ - /* The program code and other data goes into FLASH */ - .text : - { - . = ALIGN(4); - _sfixed = .; - KEEP(*(.vectors)) /* isr vector table */ - *(.text) /* .text sections (code) */ - *(.text*) /* .text* sections (code) */ - *(.rodata) /* .rodata sections (constants, strings, etc.) */ - *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ - - . = ALIGN(4); - } >FLASH - - .ARM.exidx : - { - *(.ARM.exidx*) - *(.gnu.linkonce.armexidx.*) - _etext = .; /* define a global symbol at end of code */ - _sidata = .; /* start of .data section */ - } > FLASH - - /* This is the initialized data section - The program executes knowing that the data is in the RAM - but the loader puts the initial values in the FLASH (inidata). - It is one task of the startup to copy the initial values from FLASH to RAM. */ - .data : AT ( _sidata ) - { - . = ALIGN(4); - _srelocate = .; /* create a global symbol at data start; used by startup code in order to initialise the .data section in RAM */ - *(.ramfunc) - *(.ramfunc*) - *(.data) /* .data sections */ - *(.data*) /* .data* sections */ - - . = ALIGN(4); - _erelocate = .; /* define a global symbol at data end; used by startup code in order to initialise the .data section in RAM */ - } >RAM - - /* Uninitialized data section */ - .bss : - { - . = ALIGN(4); - _sbss = .; - _szero = .; /* define a global symbol at bss start; used by startup code */ - *(.bss) - *(.bss*) - *(COMMON) - - . = ALIGN(4); - _ezero = .; /* define a global symbol at bss end; used by startup code */ - _ebss = .; - } >RAM - - /* this just checks there is enough RAM for a minimal stack */ - .stack : - { - . = ALIGN(4); - . = . + 10K; /* Reserve a minimum of 10K for the stack. nvm will temporarily store 8k on the stack when writing. */ - . = ALIGN(4); - } >RAM - - .ARM.attributes 0 : { *(.ARM.attributes) } -}