Merge branch 'master' into f411re-feature-buildout

This commit is contained in:
Hierophect 2019-08-04 16:37:49 -04:00
commit 0c43bae01d
83 changed files with 1600 additions and 701 deletions

View File

@ -21,11 +21,11 @@ git:
# that SDK is shortest and add it there. In the case of major re-organizations, # 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" # just try to make the builds "about equal in run time"
env: 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="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="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 snekboard" 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_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_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 - 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: addons:
artifacts: artifacts:
@ -71,7 +71,6 @@ before_script:
- function var_search () { case "$1" in *$2*) true;; *) false;; esac; } - function var_search () { case "$1" in *$2*) true;; *) false;; esac; }
- sudo dpkg --add-architecture i386 - sudo dpkg --add-architecture i386
- (! 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)) - (! 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 # For huzzah builds
@ -80,12 +79,16 @@ before_script:
# For coverage testing (upgrade is used to get latest urllib3 version) # For coverage testing (upgrade is used to get latest urllib3 version)
- sudo apt-get install -y python3-pip - 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) - ([[ -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 || 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) - (! 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 # report some good version numbers to the build
- gcc --version - gcc --version
- (! var_search "${TRAVIS_SDK-}" arm || arm-none-eabi-gcc --version) - (! var_search "${TRAVIS_SDK-}" arm || arm-none-eabi-gcc --version)

20
conf.py
View File

@ -13,6 +13,7 @@
# All configuration values have a default; values that are commented out # All configuration values have a default; values that are commented out
# serve to show the default. # serve to show the default.
import json
import sys import sys
import os import os
@ -24,8 +25,20 @@ from recommonmark.parser import CommonMarkParser
sys.path.insert(0, os.path.abspath('docs')) sys.path.insert(0, os.path.abspath('docs'))
sys.path.insert(0, os.path.abspath('.')) sys.path.insert(0, os.path.abspath('.'))
import shared_bindings_matrix
master_doc = 'docs/index' 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_excluded_boards()
modules_support_matrix = shared_bindings_matrix.support_matrix_by_board()
html_context = {
'support_matrix': modules_support_matrix
}
# -- General configuration ------------------------------------------------ # -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here. # If your documentation needs a minimal Sphinx version, state it here.
@ -40,7 +53,9 @@ extensions = [
'sphinxcontrib.rsvgconverter', 'sphinxcontrib.rsvgconverter',
'sphinx.ext.intersphinx', 'sphinx.ext.intersphinx',
'sphinx.ext.todo', 'sphinx.ext.todo',
'sphinx.ext.coverage' 'sphinx.ext.coverage',
'rstjinja',
'c2rst'
] ]
# Add any paths that contain templates here, relative to this directory. # Add any paths that contain templates here, relative to this directory.
@ -49,8 +64,7 @@ templates_path = ['templates']
# The suffix of source filenames. # The suffix of source filenames.
source_suffix = ['.rst', '.md', '.c', '.h'] source_suffix = ['.rst', '.md', '.c', '.h']
source_parsers = {'.md': CommonMarkParser, source_parsers = {'.md': CommonMarkParser}
'.c': "c2rst.CStrip", '.h': "c2rst.CStrip"}
# The encoding of source files. # The encoding of source files.
#source_encoding = 'utf-8-sig' #source_encoding = 'utf-8-sig'

View File

@ -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): fname = app.env.doc2path(docname)
def __init__(self): if (not fname.endswith(".c") and
self.rst_parser = sphinx.parsers.RSTParser() not fname.endswith(".h")):
#print("skipping:", fname)
return
def parse(self, inputstring, document): src = source[0]
# This setting is missing starting with Sphinx 1.7.1 so we set it ourself.
document.settings.tab_width = 4 stripped = []
document.settings.character_level_inline_markup = False for line in src.split("\n"):
stripped = [] line = line.strip()
for line in inputstring.split("\n"): if line == "//|":
line = line.strip() stripped.append("")
if line == "//|": elif line.startswith("//| "):
stripped.append("") stripped.append(line[len("//| "):])
elif line.startswith("//| "): stripped = "\r\n".join(stripped)
stripped.append(line[len("//| "):])
stripped = "\r\n".join(stripped) rendered = app.builder.templates.render_string(
self.rst_parser.parse(stripped, document) stripped, app.config.html_context
)
source[0] = rendered
def setup(app):
app.connect("source-read", c2rst)

View File

@ -5,6 +5,7 @@
.. include:: ../templates/unsupported_in_circuitpython.inc .. include:: ../templates/unsupported_in_circuitpython.inc
.. module:: network .. module:: network
:noindex:
:synopsis: network configuration :synopsis: network configuration
This module provides network drivers and routing configuration. To use this This module provides network drivers and routing configuration. To use this

24
docs/rstjinja.py Normal file
View File

@ -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/support_matrix" 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)

View File

@ -0,0 +1,244 @@
# 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 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
"""
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_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
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.group(0))
#print(find_config[1])
if not full_build:
default_val = find_config.group(1)
else:
default_val = "None"
base[search_name] = {
"name": full_name,
"full_build": str(full_build),
"default_value": default_val,
"excluded": {}
}
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:
# 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")
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":
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)
if not find_module:
# check if default inclusion is off ('0'). if the board doesn't
# have it explicitly enabled, its excluded.
if base[module]["default_value"] == "0":
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_excluded_boards():
""" Compiles a list of available modules, and which board definitions
do not include them.
"""
base = build_module_map()
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 = []
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:
board_has_module = False
if board_has_module:
board_modules.append(base_with_exclusions[module]["name"])
boards[board_name] = sorted(board_modules)
#print(json.dumps(boards, indent=2))
return boards

@ -1 +1 @@
Subproject commit 6d1ae72916cf240ea86185c45f844d59f56d8ec3 Subproject commit 0d2d660e886de8a1b96778c865c7fa48df5f4ea6

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -472,11 +472,11 @@ msgstr ""
msgid "Could not initialize UART" msgid "Could not initialize UART"
msgstr "Tidak dapat menginisialisasi 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" msgid "Couldn't allocate first buffer"
msgstr "" 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" msgid "Couldn't allocate second buffer"
msgstr "" msgstr ""
@ -493,7 +493,7 @@ msgstr "DAC sudah digunakan"
msgid "Data 0 pin must be byte aligned" msgid "Data 0 pin must be byte aligned"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Data chunk must follow fmt chunk" msgid "Data chunk must follow fmt chunk"
msgstr "" msgstr ""
@ -712,6 +712,10 @@ msgstr ""
msgid "Function requires lock" msgid "Function requires lock"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "" msgstr ""
@ -768,7 +772,7 @@ msgstr "Ukuran buffer tidak valid"
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid channel count" msgid "Invalid channel count"
msgstr "" msgstr ""
@ -776,11 +780,11 @@ msgstr ""
msgid "Invalid direction." msgid "Invalid direction."
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "" msgstr ""
@ -822,11 +826,11 @@ msgstr ""
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "" msgstr ""
@ -1071,7 +1075,7 @@ msgstr ""
msgid "SDA or SCL needs a pull up" msgid "SDA or SCL needs a pull up"
msgstr "SDA atau SCL membutuhkan 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" msgid "Sample rate must be positive"
msgstr "" msgstr ""
@ -1143,19 +1147,19 @@ msgid ""
"exit safe mode.\n" "exit safe mode.\n"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's bits_per_sample does not match the mixer's" msgid "The sample's bits_per_sample does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's channel count does not match the mixer's" msgid "The sample's channel count does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's sample rate does not match the mixer's" msgid "The sample's sample rate does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's signedness does not match the mixer's" msgid "The sample's signedness does not match the mixer's"
msgstr "" msgstr ""
@ -1261,7 +1265,7 @@ msgstr "Baudrate tidak didukung"
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "Baudrate tidak didukung" msgstr "Baudrate tidak didukung"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
@ -1277,7 +1281,7 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments" msgid "Viper functions don't currently support more than 4 arguments"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "Voice index too high" msgid "Voice index too high"
msgstr "" msgstr ""
@ -1404,7 +1408,7 @@ msgstr ""
msgid "bits must be 8" msgid "bits must be 8"
msgstr "bits harus memilki nilai 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" msgid "bits_per_sample must be 8 or 16"
msgstr "" msgstr ""
@ -1417,7 +1421,7 @@ msgstr ""
msgid "buf is too small. need %d bytes" msgid "buf is too small. need %d bytes"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
@ -1780,7 +1784,8 @@ msgstr "argumen keyword ekstra telah diberikan"
msgid "extra positional arguments given" msgid "extra positional arguments given"
msgstr "argumen posisi ekstra telah diberikan" 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" msgid "file must be a file opened in byte mode"
msgstr "" msgstr ""
@ -2325,7 +2330,7 @@ msgstr ""
msgid "rsplit(None,n)" msgid "rsplit(None,n)"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -462,11 +462,11 @@ msgstr ""
msgid "Could not initialize UART" msgid "Could not initialize UART"
msgstr "" 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" msgid "Couldn't allocate first buffer"
msgstr "" 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" msgid "Couldn't allocate second buffer"
msgstr "" msgstr ""
@ -483,7 +483,7 @@ msgstr ""
msgid "Data 0 pin must be byte aligned" msgid "Data 0 pin must be byte aligned"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Data chunk must follow fmt chunk" msgid "Data chunk must follow fmt chunk"
msgstr "" msgstr ""
@ -697,6 +697,10 @@ msgstr ""
msgid "Function requires lock" msgid "Function requires lock"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "" msgstr ""
@ -753,7 +757,7 @@ msgstr ""
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid channel count" msgid "Invalid channel count"
msgstr "" msgstr ""
@ -761,11 +765,11 @@ msgstr ""
msgid "Invalid direction." msgid "Invalid direction."
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "" msgstr ""
@ -807,11 +811,11 @@ msgstr ""
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "" msgstr ""
@ -1051,7 +1055,7 @@ msgstr ""
msgid "SDA or SCL needs a pull up" msgid "SDA or SCL needs a pull up"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Sample rate must be positive" msgid "Sample rate must be positive"
msgstr "" msgstr ""
@ -1120,19 +1124,19 @@ msgid ""
"exit safe mode.\n" "exit safe mode.\n"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's bits_per_sample does not match the mixer's" msgid "The sample's bits_per_sample does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's channel count does not match the mixer's" msgid "The sample's channel count does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's sample rate does not match the mixer's" msgid "The sample's sample rate does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's signedness does not match the mixer's" msgid "The sample's signedness does not match the mixer's"
msgstr "" msgstr ""
@ -1237,7 +1241,7 @@ msgstr ""
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
@ -1253,7 +1257,7 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments" msgid "Viper functions don't currently support more than 4 arguments"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "Voice index too high" msgid "Voice index too high"
msgstr "" msgstr ""
@ -1371,7 +1375,7 @@ msgstr ""
msgid "bits must be 8" msgid "bits must be 8"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "bits_per_sample must be 8 or 16" msgid "bits_per_sample must be 8 or 16"
msgstr "" msgstr ""
@ -1384,7 +1388,7 @@ msgstr ""
msgid "buf is too small. need %d bytes" msgid "buf is too small. need %d bytes"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
@ -1746,7 +1750,8 @@ msgstr ""
msgid "extra positional arguments given" msgid "extra positional arguments given"
msgstr "" 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" msgid "file must be a file opened in byte mode"
msgstr "" msgstr ""
@ -2289,7 +2294,7 @@ msgstr ""
msgid "rsplit(None,n)" msgid "rsplit(None,n)"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: Pascal Deneaux\n" "Last-Translator: Pascal Deneaux\n"
"Language-Team: Sebastian Plamauer, 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" msgid "Could not initialize UART"
msgstr "Konnte UART nicht initialisieren" 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" msgid "Couldn't allocate first buffer"
msgstr "Konnte first buffer nicht zuteilen" 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" msgid "Couldn't allocate second buffer"
msgstr "Konnte second buffer nicht zuteilen" msgstr "Konnte second buffer nicht zuteilen"
@ -487,7 +487,7 @@ msgstr "DAC wird schon benutzt"
msgid "Data 0 pin must be byte aligned" msgid "Data 0 pin must be byte aligned"
msgstr "Data 0 pin muss am Byte ausgerichtet sein" 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" msgid "Data chunk must follow fmt chunk"
msgstr "" msgstr ""
@ -701,6 +701,10 @@ msgstr ""
msgid "Function requires lock" msgid "Function requires lock"
msgstr "Die Funktion erwartet, dass der 'lock'-Befehl zuvor ausgeführt wurde" 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 #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "Gruppe voll" msgstr "Gruppe voll"
@ -759,7 +763,7 @@ msgstr "Ungültige Puffergröße"
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid channel count" msgid "Invalid channel count"
msgstr "Ungültige Anzahl von Kanälen" msgstr "Ungültige Anzahl von Kanälen"
@ -767,11 +771,11 @@ msgstr "Ungültige Anzahl von Kanälen"
msgid "Invalid direction." msgid "Invalid direction."
msgstr "Ungültige Richtung" msgstr "Ungültige Richtung"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "Ungültige Datei" msgstr "Ungültige Datei"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "Ungültige format chunk size" msgstr "Ungültige format chunk size"
@ -813,11 +817,11 @@ msgstr "Ungültige Polarität"
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "Ungültiger Ausführungsmodus" msgstr "Ungültiger Ausführungsmodus"
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "Ungültige Anzahl von Stimmen" msgstr "Ungültige Anzahl von Stimmen"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "Ungültige wave Datei" 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" msgid "SDA or SCL needs a pull up"
msgstr "SDA oder SCL brauchen 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" msgid "Sample rate must be positive"
msgstr "Abtastrate muss positiv sein" msgstr "Abtastrate muss positiv sein"
@ -1149,19 +1153,19 @@ msgstr ""
"Die Reset-Taste wurde beim Booten von CircuitPython gedrückt. Drücke sie " "Die Reset-Taste wurde beim Booten von CircuitPython gedrückt. Drücke sie "
"erneut um den abgesicherten Modus zu verlassen. \n" "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" msgid "The sample's bits_per_sample does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's channel count does not match the mixer's" msgid "The sample's channel count does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's sample rate does not match the mixer's" msgid "The sample's sample rate does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's signedness does not match the mixer's" msgid "The sample's signedness does not match the mixer's"
msgstr "" msgstr ""
@ -1268,7 +1272,7 @@ msgstr "Baudrate wird nicht unterstützt"
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "Nicht unterstützter display bus type" msgstr "Nicht unterstützter display bus type"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Nicht unterstütztes 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" msgid "Viper functions don't currently support more than 4 arguments"
msgstr "Viper-Funktionen unterstützen derzeit nicht mehr als 4 Argumente" 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" msgid "Voice index too high"
msgstr "Voice index zu hoch" msgstr "Voice index zu hoch"
@ -1411,7 +1415,7 @@ msgstr "bits muss 7, 8 oder 9 sein"
msgid "bits must be 8" msgid "bits must be 8"
msgstr "bits müssen 8 sein" 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" msgid "bits_per_sample must be 8 or 16"
msgstr "Es müssen 8 oder 16 bits_per_sample sein" 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" msgid "buf is too small. need %d bytes"
msgstr "buf ist zu klein. brauche %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" msgid "buffer must be a bytes-like object"
msgstr "Puffer muss ein bytes-artiges Objekt sein" 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" msgid "extra positional arguments given"
msgstr "Es wurden zusätzliche Argumente ohne Keyword angegeben" 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" msgid "file must be a file opened in byte mode"
msgstr "Die Datei muss eine im Byte-Modus geöffnete Datei sein" msgstr "Die Datei muss eine im Byte-Modus geöffnete Datei sein"
@ -2338,7 +2343,7 @@ msgstr ""
msgid "rsplit(None,n)" msgid "rsplit(None,n)"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -462,11 +462,11 @@ msgstr ""
msgid "Could not initialize UART" msgid "Could not initialize UART"
msgstr "" 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" msgid "Couldn't allocate first buffer"
msgstr "" 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" msgid "Couldn't allocate second buffer"
msgstr "" msgstr ""
@ -483,7 +483,7 @@ msgstr ""
msgid "Data 0 pin must be byte aligned" msgid "Data 0 pin must be byte aligned"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Data chunk must follow fmt chunk" msgid "Data chunk must follow fmt chunk"
msgstr "" msgstr ""
@ -697,6 +697,10 @@ msgstr ""
msgid "Function requires lock" msgid "Function requires lock"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "" msgstr ""
@ -753,7 +757,7 @@ msgstr ""
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid channel count" msgid "Invalid channel count"
msgstr "" msgstr ""
@ -761,11 +765,11 @@ msgstr ""
msgid "Invalid direction." msgid "Invalid direction."
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "" msgstr ""
@ -807,11 +811,11 @@ msgstr ""
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "" msgstr ""
@ -1051,7 +1055,7 @@ msgstr ""
msgid "SDA or SCL needs a pull up" msgid "SDA or SCL needs a pull up"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Sample rate must be positive" msgid "Sample rate must be positive"
msgstr "" msgstr ""
@ -1120,19 +1124,19 @@ msgid ""
"exit safe mode.\n" "exit safe mode.\n"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's bits_per_sample does not match the mixer's" msgid "The sample's bits_per_sample does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's channel count does not match the mixer's" msgid "The sample's channel count does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's sample rate does not match the mixer's" msgid "The sample's sample rate does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's signedness does not match the mixer's" msgid "The sample's signedness does not match the mixer's"
msgstr "" msgstr ""
@ -1237,7 +1241,7 @@ msgstr ""
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
@ -1253,7 +1257,7 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments" msgid "Viper functions don't currently support more than 4 arguments"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "Voice index too high" msgid "Voice index too high"
msgstr "" msgstr ""
@ -1371,7 +1375,7 @@ msgstr ""
msgid "bits must be 8" msgid "bits must be 8"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "bits_per_sample must be 8 or 16" msgid "bits_per_sample must be 8 or 16"
msgstr "" msgstr ""
@ -1384,7 +1388,7 @@ msgstr ""
msgid "buf is too small. need %d bytes" msgid "buf is too small. need %d bytes"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
@ -1746,7 +1750,8 @@ msgstr ""
msgid "extra positional arguments given" msgid "extra positional arguments given"
msgstr "" 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" msgid "file must be a file opened in byte mode"
msgstr "" msgstr ""
@ -2289,7 +2294,7 @@ msgstr ""
msgid "rsplit(None,n)" msgid "rsplit(None,n)"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2018-07-27 11:55-0700\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: @sommersoft, @MrCertainly\n" "Language-Team: @sommersoft, @MrCertainly\n"
@ -466,11 +466,11 @@ msgstr ""
msgid "Could not initialize UART" msgid "Could not initialize UART"
msgstr "" 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" msgid "Couldn't allocate first buffer"
msgstr "" 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" msgid "Couldn't allocate second buffer"
msgstr "" msgstr ""
@ -487,7 +487,7 @@ msgstr ""
msgid "Data 0 pin must be byte aligned" msgid "Data 0 pin must be byte aligned"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Data chunk must follow fmt chunk" msgid "Data chunk must follow fmt chunk"
msgstr "" msgstr ""
@ -701,6 +701,10 @@ msgstr ""
msgid "Function requires lock" msgid "Function requires lock"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "" msgstr ""
@ -757,7 +761,7 @@ msgstr ""
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid channel count" msgid "Invalid channel count"
msgstr "" msgstr ""
@ -765,11 +769,11 @@ msgstr ""
msgid "Invalid direction." msgid "Invalid direction."
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "" msgstr ""
@ -811,11 +815,11 @@ msgstr ""
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "" msgstr ""
@ -1055,7 +1059,7 @@ msgstr "Runnin' in safe mode! Nay runnin' saved code.\n"
msgid "SDA or SCL needs a pull up" msgid "SDA or SCL needs a pull up"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Sample rate must be positive" msgid "Sample rate must be positive"
msgstr "" msgstr ""
@ -1124,19 +1128,19 @@ msgid ""
"exit safe mode.\n" "exit safe mode.\n"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's bits_per_sample does not match the mixer's" msgid "The sample's bits_per_sample does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's channel count does not match the mixer's" msgid "The sample's channel count does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's sample rate does not match the mixer's" msgid "The sample's sample rate does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's signedness does not match the mixer's" msgid "The sample's signedness does not match the mixer's"
msgstr "" msgstr ""
@ -1241,7 +1245,7 @@ msgstr ""
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "" msgstr ""
@ -1257,7 +1261,7 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments" msgid "Viper functions don't currently support more than 4 arguments"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "Voice index too high" msgid "Voice index too high"
msgstr "" msgstr ""
@ -1375,7 +1379,7 @@ msgstr ""
msgid "bits must be 8" msgid "bits must be 8"
msgstr "pieces must be of 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" msgid "bits_per_sample must be 8 or 16"
msgstr "" msgstr ""
@ -1388,7 +1392,7 @@ msgstr ""
msgid "buf is too small. need %d bytes" msgid "buf is too small. need %d bytes"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
@ -1750,7 +1754,8 @@ msgstr ""
msgid "extra positional arguments given" msgid "extra positional arguments given"
msgstr "" 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" msgid "file must be a file opened in byte mode"
msgstr "" msgstr ""
@ -2293,7 +2298,7 @@ msgstr ""
msgid "rsplit(None,n)" msgid "rsplit(None,n)"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2018-08-24 22:56-0500\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -470,11 +470,11 @@ msgstr "No se puede descodificar ble_uuid, err 0x%04x"
msgid "Could not initialize UART" msgid "Could not initialize UART"
msgstr "No se puede inicializar la 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" msgid "Couldn't allocate first buffer"
msgstr "No se pudo asignar el primer 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" msgid "Couldn't allocate second buffer"
msgstr "No se pudo asignar el segundo 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" msgid "Data 0 pin must be byte aligned"
msgstr "El pin Data 0 debe estar alineado a bytes" 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" msgid "Data chunk must follow fmt chunk"
msgstr "Trozo de datos debe seguir 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" msgid "Function requires lock"
msgstr "La función requiere lock" msgstr "La función requiere lock"
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "Group lleno" msgstr "Group lleno"
@ -764,7 +768,7 @@ msgstr "Tamaño de buffer inválido"
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "Inválido periodo de captura. Rango válido: 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" msgid "Invalid channel count"
msgstr "Cuenta de canales inválida" msgstr "Cuenta de canales inválida"
@ -772,11 +776,11 @@ msgstr "Cuenta de canales inválida"
msgid "Invalid direction." msgid "Invalid direction."
msgstr "Dirección inválida." msgstr "Dirección inválida."
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "Archivo inválido" msgstr "Archivo inválido"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "Formato de fragmento de formato no válido" msgstr "Formato de fragmento de formato no válido"
@ -818,11 +822,11 @@ msgstr "Polaridad inválida"
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "Modo de ejecución inválido." msgstr "Modo de ejecución inválido."
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "Cuenta de voces inválida" msgstr "Cuenta de voces inválida"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "Archivo wave inválido" 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" msgid "SDA or SCL needs a pull up"
msgstr "SDA o SCL necesitan una 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" msgid "Sample rate must be positive"
msgstr "Sample rate debe ser positivo" msgstr "Sample rate debe ser positivo"
@ -1160,19 +1164,19 @@ msgstr ""
"El botón reset fue presionado mientras arrancaba CircuitPython. Presiona " "El botón reset fue presionado mientras arrancaba CircuitPython. Presiona "
"otra vez para salir del modo seguro.\n" "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" 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" 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" 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" 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" msgid "The sample's sample rate does not match the mixer's"
msgstr "El sample rate del sample no iguala al del mixer" 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" msgid "The sample's signedness does not match the mixer's"
msgstr "El signo del sample no iguala al del mixer" msgstr "El signo del sample no iguala al del mixer"
@ -1278,7 +1282,7 @@ msgstr "Baudrate no soportado"
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "tipo de bitmap no soportado" msgstr "tipo de bitmap no soportado"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Formato no soportado" msgstr "Formato no soportado"
@ -1294,7 +1298,7 @@ msgstr "valor pull no soportado."
msgid "Viper functions don't currently support more than 4 arguments" msgid "Viper functions don't currently support more than 4 arguments"
msgstr "funciones Viper actualmente no soportan más de 4 argumentos." msgstr "funciones Viper actualmente no soportan más de 4 argumentos."
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "Voice index too high" msgid "Voice index too high"
msgstr "Index de voz demasiado alto" msgstr "Index de voz demasiado alto"
@ -1420,7 +1424,7 @@ msgstr "bits deben ser 7, 8 ó 9"
msgid "bits must be 8" msgid "bits must be 8"
msgstr "bits debe ser 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" msgid "bits_per_sample must be 8 or 16"
msgstr "bits_per_sample debe ser 8 ó 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" msgid "buf is too small. need %d bytes"
msgstr "buf es demasiado pequeño. necesita %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" msgid "buffer must be a bytes-like object"
msgstr "buffer debe de ser un objeto bytes-like" 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" msgid "extra positional arguments given"
msgstr "argumento posicional adicional dado" 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" msgid "file must be a file opened in byte mode"
msgstr "el archivo deberia ser una archivo abierto en modo byte" 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)" msgid "rsplit(None,n)"
msgstr "rsplit(None,n)" msgstr "rsplit(None,n)"
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2018-12-20 22:15-0800\n"
"Last-Translator: Timothy <me@timothygarcia.ca>\n" "Last-Translator: Timothy <me@timothygarcia.ca>\n"
"Language-Team: fil\n" "Language-Team: fil\n"
@ -471,11 +471,11 @@ msgstr ""
msgid "Could not initialize UART" msgid "Could not initialize UART"
msgstr "Hindi ma-initialize ang 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" msgid "Couldn't allocate first buffer"
msgstr "Hindi ma-iallocate ang 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" msgid "Couldn't allocate second buffer"
msgstr "Hindi ma-iallocate ang 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" msgid "Data 0 pin must be byte aligned"
msgstr "graphic ay dapat 2048 bytes ang haba" 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" msgid "Data chunk must follow fmt chunk"
msgstr "Dapat sunurin ng Data chunk ang fmt chunk" msgstr "Dapat sunurin ng Data chunk ang fmt chunk"
@ -715,6 +715,10 @@ msgstr ""
msgid "Function requires lock" msgid "Function requires lock"
msgstr "Function nangangailangan ng lock" msgstr "Function nangangailangan ng lock"
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "Puno ang group" msgstr "Puno ang group"
@ -773,7 +777,7 @@ msgstr "Mali ang buffer size"
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid channel count" msgid "Invalid channel count"
msgstr "Maling bilang ng channel" msgstr "Maling bilang ng channel"
@ -781,11 +785,11 @@ msgstr "Maling bilang ng channel"
msgid "Invalid direction." msgid "Invalid direction."
msgstr "Mali ang direksyon." msgstr "Mali ang direksyon."
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "Mali ang file" msgstr "Mali ang file"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "Mali ang format ng chunk size" msgstr "Mali ang format ng chunk size"
@ -827,11 +831,11 @@ msgstr "Mali ang polarity"
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "Mali ang run mode." msgstr "Mali ang run mode."
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "Maling bilang ng voice" msgstr "Maling bilang ng voice"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "May hindi tama sa 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" msgid "SDA or SCL needs a pull up"
msgstr "Kailangan ng pull up resistors ang SDA o SCL" 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" msgid "Sample rate must be positive"
msgstr "Sample rate ay dapat positibo" msgstr "Sample rate ay dapat positibo"
@ -1163,19 +1167,19 @@ msgstr ""
"Ang reset button ay pinindot habang nag boot ang CircuitPython. Pindutin " "Ang reset button ay pinindot habang nag boot ang CircuitPython. Pindutin "
"ulit para lumabas sa safe mode.\n" "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" 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" 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" msgid "The sample's channel count does not match the mixer's"
msgstr "Ang channel count ng sample ay hindi tugma sa mixer" 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" msgid "The sample's sample rate does not match the mixer's"
msgstr "Ang sample rate ng sample ay hindi tugma sa mixer" 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" msgid "The sample's signedness does not match the mixer's"
msgstr "Ang signedness ng sample hindi tugma sa mixer" msgstr "Ang signedness ng sample hindi tugma sa mixer"
@ -1282,7 +1286,7 @@ msgstr "Hindi supportadong baudrate"
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "Hindi supportadong tipo ng bitmap" msgstr "Hindi supportadong tipo ng bitmap"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Hindi supportadong format" msgstr "Hindi supportadong format"
@ -1300,7 +1304,7 @@ msgstr ""
"Ang mga function ng Viper ay kasalukuyang hindi sumusuporta sa higit sa 4 na " "Ang mga function ng Viper ay kasalukuyang hindi sumusuporta sa higit sa 4 na "
"argumento" "argumento"
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "Voice index too high" msgid "Voice index too high"
msgstr "Index ng Voice ay masyadong mataas" msgstr "Index ng Voice ay masyadong mataas"
@ -1424,7 +1428,7 @@ msgstr "bits ay dapat 7, 8 o 9"
msgid "bits must be 8" msgid "bits must be 8"
msgstr "bits ay dapat walo (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" msgid "bits_per_sample must be 8 or 16"
msgstr "bits_per_sample ay dapat 8 o 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" msgid "buf is too small. need %d bytes"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "buffer ay dapat 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" msgid "extra positional arguments given"
msgstr "dagdag na positional argument na ibinigay" 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" msgid "file must be a file opened in byte mode"
msgstr "file ay dapat buksan sa 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)" msgid "rsplit(None,n)"
msgstr "rsplit(None,n)" msgstr "rsplit(None,n)"
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 0.1\n" "Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2019-04-14 20:05+0100\n"
"Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n" "Last-Translator: Pierrick Couturier <arofarn@arofarn.info>\n"
"Language-Team: fr\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" msgid "Could not initialize UART"
msgstr "L'UART n'a pu être initialisé" 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" msgid "Couldn't allocate first buffer"
msgstr "Impossible d'allouer le 1er tampon" 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" msgid "Couldn't allocate second buffer"
msgstr "Impossible d'allouer le 2e tampon" msgstr "Impossible d'allouer le 2e tampon"
@ -499,7 +499,7 @@ msgstr "DAC déjà utilisé"
msgid "Data 0 pin must be byte aligned" msgid "Data 0 pin must be byte aligned"
msgstr "La broche 'Data 0' doit être aligné sur l'octet" 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" msgid "Data chunk must follow fmt chunk"
msgstr "Un bloc de données doit suivre un bloc de format" 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" msgid "Function requires lock"
msgstr "La fonction nécessite un verrou" msgstr "La fonction nécessite un verrou"
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "Groupe plein" msgstr "Groupe plein"
@ -780,7 +784,7 @@ msgstr "Longueur de tampon invalide"
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "Période de capture invalide. Gamme valide: 1 à 500" msgstr "Période de capture invalide. Gamme valide: 1 à 500"
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
#, fuzzy #, fuzzy
msgid "Invalid channel count" msgid "Invalid channel count"
msgstr "Nombre de canaux invalide" msgstr "Nombre de canaux invalide"
@ -789,11 +793,11 @@ msgstr "Nombre de canaux invalide"
msgid "Invalid direction." msgid "Invalid direction."
msgstr "Direction invalide" msgstr "Direction invalide"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "Fichier invalide" msgstr "Fichier invalide"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "Taille de bloc de formatage invalide" msgstr "Taille de bloc de formatage invalide"
@ -835,12 +839,12 @@ msgstr "Polarité invalide"
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "Mode de lancement invalide." msgstr "Mode de lancement invalide."
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
#, fuzzy #, fuzzy
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "Nombre de voix invalide" msgstr "Nombre de voix invalide"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "Fichier WAVE invalide" 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" msgid "SDA or SCL needs a pull up"
msgstr "SDA ou SCL a besoin d'une résistance de tirage ('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 #, fuzzy
msgid "Sample rate must be positive" msgid "Sample rate must be positive"
msgstr "Le taux d'échantillonage doit être positif" 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. " "Le bouton 'reset' a été appuyé pendant le démarrage de CircuitPython. "
"Appuyer de nouveau pour quitter de le mode sans-échec.\n" "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" msgid "The sample's bits_per_sample does not match the mixer's"
msgstr "" msgstr ""
"Le 'bits_per_sample' de l'échantillon ne correspond pas à celui du mixer" "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" msgid "The sample's channel count does not match the mixer's"
msgstr "Le canal de l'échantillon ne correspond pas à celui du mixer" 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" msgid "The sample's sample rate does not match the mixer's"
msgstr "L'échantillonage de l'échantillon ne correspond pas à celui du mixer" 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" msgid "The sample's signedness does not match the mixer's"
msgstr "Le signe de l'échantillon ne correspond pas à celui du mixer" 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" msgid "Unsupported display bus type"
msgstr "Type de bus d'affichage non supporté" msgstr "Type de bus d'affichage non supporté"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Format non supporté" msgstr "Format non supporté"
@ -1324,7 +1328,7 @@ msgid "Viper functions don't currently support more than 4 arguments"
msgstr "" msgstr ""
"les fonctions de Viper ne supportent pas plus de 4 arguments actuellement" "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" msgid "Voice index too high"
msgstr "Index de la voix trop grand" msgstr "Index de la voix trop grand"
@ -1449,7 +1453,7 @@ msgstr "bits doivent être 7, 8 ou 9"
msgid "bits must be 8" msgid "bits must be 8"
msgstr "les bits doivent être 8" msgstr "les bits doivent être 8"
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
#, fuzzy #, fuzzy
msgid "bits_per_sample must be 8 or 16" msgid "bits_per_sample must be 8 or 16"
msgstr "'bits_per_sample' doivent être 8 ou 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" msgid "buf is too small. need %d bytes"
msgstr "'buf' est trop petit. Besoin de %d octets" 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" msgid "buffer must be a bytes-like object"
msgstr "le tampon doit être un objet bytes-like" 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" msgid "extra positional arguments given"
msgstr "argument(s) positionnel(s) supplémentaire(s) donné(s)" 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" msgid "file must be a file opened in byte mode"
msgstr "le fichier doit être un fichier ouvert en mode 'byte'" 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)" msgid "rsplit(None,n)"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2018-10-02 16:27+0200\n"
"Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n" "Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n"
"Language-Team: \n" "Language-Team: \n"
@ -472,11 +472,11 @@ msgstr ""
msgid "Could not initialize UART" msgid "Could not initialize UART"
msgstr "Impossibile inizializzare l'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" msgid "Couldn't allocate first buffer"
msgstr "Impossibile allocare il primo 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" msgid "Couldn't allocate second buffer"
msgstr "Impossibile allocare il secondo buffer" msgstr "Impossibile allocare il secondo buffer"
@ -494,7 +494,7 @@ msgstr "DAC già in uso"
msgid "Data 0 pin must be byte aligned" msgid "Data 0 pin must be byte aligned"
msgstr "graphic deve essere lunga 2048 byte" msgstr "graphic deve essere lunga 2048 byte"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Data chunk must follow fmt chunk" msgid "Data chunk must follow fmt chunk"
msgstr "" msgstr ""
@ -714,6 +714,10 @@ msgstr ""
msgid "Function requires lock" msgid "Function requires lock"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "Gruppo pieno" msgstr "Gruppo pieno"
@ -773,7 +777,7 @@ msgstr "lunghezza del buffer non valida"
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "periodo di cattura invalido. Zona valida: 1 - 500" msgstr "periodo di cattura invalido. Zona valida: 1 - 500"
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
#, fuzzy #, fuzzy
msgid "Invalid channel count" msgid "Invalid channel count"
msgstr "Argomento non valido" msgstr "Argomento non valido"
@ -782,11 +786,11 @@ msgstr "Argomento non valido"
msgid "Invalid direction." msgid "Invalid direction."
msgstr "Direzione non valida." msgstr "Direzione non valida."
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "File non valido" msgstr "File non valido"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "" msgstr ""
@ -828,12 +832,12 @@ msgstr "Polarità non valida"
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "Modalità di esecuzione non valida." msgstr "Modalità di esecuzione non valida."
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
#, fuzzy #, fuzzy
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "Tipo di servizio non valido" msgstr "Tipo di servizio non valido"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "File wave non valido" 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" msgid "SDA or SCL needs a pull up"
msgstr "SDA o SCL necessitano un pull-up" msgstr "SDA o SCL necessitano un pull-up"
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
#, fuzzy #, fuzzy
msgid "Sample rate must be positive" msgid "Sample rate must be positive"
msgstr "STA deve essere attiva" msgstr "STA deve essere attiva"
@ -1162,19 +1166,19 @@ msgid ""
"exit safe mode.\n" "exit safe mode.\n"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's bits_per_sample does not match the mixer's" msgid "The sample's bits_per_sample does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's channel count does not match the mixer's" msgid "The sample's channel count does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's sample rate does not match the mixer's" msgid "The sample's sample rate does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's signedness does not match the mixer's" msgid "The sample's signedness does not match the mixer's"
msgstr "" msgstr ""
@ -1281,7 +1285,7 @@ msgstr "baudrate non supportato"
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "tipo di bitmap non supportato" msgstr "tipo di bitmap non supportato"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Formato non supportato" 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" msgid "Viper functions don't currently support more than 4 arguments"
msgstr "Le funzioni Viper non supportano più di 4 argomenti al momento" 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" msgid "Voice index too high"
msgstr "" msgstr ""
@ -1418,7 +1422,7 @@ msgstr "i bit devono essere 7, 8 o 9"
msgid "bits must be 8" msgid "bits must be 8"
msgstr "i bit devono essere 8" msgstr "i bit devono essere 8"
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
#, fuzzy #, fuzzy
msgid "bits_per_sample must be 8 or 16" msgid "bits_per_sample must be 8 or 16"
msgstr "i bit devono essere 7, 8 o 9" 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" msgid "buf is too small. need %d bytes"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
@ -1803,7 +1807,8 @@ msgstr "argomento nominato aggiuntivo fornito"
msgid "extra positional arguments given" msgid "extra positional arguments given"
msgstr "argomenti posizonali extra dati" 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" msgid "file must be a file opened in byte mode"
msgstr "" msgstr ""
@ -2361,7 +2366,7 @@ msgstr "return aspettava '%q' ma ha ottenuto '%q'"
msgid "rsplit(None,n)" msgid "rsplit(None,n)"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2019-03-19 18:37-0700\n"
"Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n" "Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n"
"Language-Team: pl\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" msgid "Could not initialize UART"
msgstr "Ustawienie UART nie powiodło się" 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" msgid "Couldn't allocate first buffer"
msgstr "Nie udała się alokacja pierwszego bufora" 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" msgid "Couldn't allocate second buffer"
msgstr "Nie udała się alokacja drugiego bufora" 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" msgid "Data 0 pin must be byte aligned"
msgstr "Nóżka data 0 musi być wyrównana do bajtu" 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" msgid "Data chunk must follow fmt chunk"
msgstr "Fragment danych musi następować po fragmencie fmt" 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" msgid "Function requires lock"
msgstr "Funkcja wymaga blokady" msgstr "Funkcja wymaga blokady"
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "Grupa pełna" msgstr "Grupa pełna"
@ -758,7 +762,7 @@ msgstr "Zła wielkość bufora"
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "Zły okres. Poprawny zakres to: 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" msgid "Invalid channel count"
msgstr "Zła liczba kanałów" msgstr "Zła liczba kanałów"
@ -766,11 +770,11 @@ msgstr "Zła liczba kanałów"
msgid "Invalid direction." msgid "Invalid direction."
msgstr "Zły tryb" msgstr "Zły tryb"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "Zły plik" msgstr "Zły plik"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "Zła wielkość fragmentu formatu" msgstr "Zła wielkość fragmentu formatu"
@ -812,11 +816,11 @@ msgstr "Zła polaryzacja"
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "Zły tryb uruchomienia" msgstr "Zły tryb uruchomienia"
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "Zła liczba głosów" msgstr "Zła liczba głosów"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "Zły plik wave" 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" msgid "SDA or SCL needs a pull up"
msgstr "SDA lub SCL wymagają podciągnięcia" msgstr "SDA lub SCL wymagają podciągnięcia"
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Sample rate must be positive" msgid "Sample rate must be positive"
msgstr "Częstotliwość próbkowania musi być dodatnia" 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 " "Przycisk reset został wciśnięty podczas startu CircuitPythona. Wciśnij go "
"ponownie aby wyjść z trybu bezpieczeństwa.\n" "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" msgid "The sample's bits_per_sample does not match the mixer's"
msgstr "Wartość bits_per_sample nie pasuje do miksera" 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" msgid "The sample's channel count does not match the mixer's"
msgstr "Liczba kanałów nie pasuje do miksera " 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" msgid "The sample's sample rate does not match the mixer's"
msgstr "Sample rate nie pasuje do miksera" 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" msgid "The sample's signedness does not match the mixer's"
msgstr "Znak nie pasuje do miksera" msgstr "Znak nie pasuje do miksera"
@ -1257,7 +1261,7 @@ msgstr "Zła szybkość transmisji"
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "Zły typ magistrali wyświetlaczy" msgstr "Zły typ magistrali wyświetlaczy"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Zły 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" msgid "Viper functions don't currently support more than 4 arguments"
msgstr "Funkcje Viper nie obsługują obecnie więcej niż 4 argumentów" 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" msgid "Voice index too high"
msgstr "Zbyt wysoki indeks głosu" msgstr "Zbyt wysoki indeks głosu"
@ -1395,7 +1399,7 @@ msgstr "bits musi być 7, 8 lub 9"
msgid "bits must be 8" msgid "bits must be 8"
msgstr "bits musi być 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" msgid "bits_per_sample must be 8 or 16"
msgstr "bits_per_sample musi być 8 lub 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" msgid "buf is too small. need %d bytes"
msgstr "buf zbyt mały. Wymagane %d bajtów" 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" msgid "buffer must be a bytes-like object"
msgstr "bufor mysi być typu bytes" msgstr "bufor mysi być typu bytes"
@ -1771,7 +1775,8 @@ msgstr "nadmiarowe argumenty nazwane"
msgid "extra positional arguments given" msgid "extra positional arguments given"
msgstr "nadmiarowe argumenty pozycyjne" 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" msgid "file must be a file opened in byte mode"
msgstr "file musi być otwarte w trybie bajtowym" msgstr "file musi być otwarte w trybie bajtowym"
@ -2315,7 +2320,7 @@ msgstr "return oczekiwał '%q', a jest '%q'"
msgid "rsplit(None,n)" msgid "rsplit(None,n)"
msgstr "rsplit(None,n)" msgstr "rsplit(None,n)"
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 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" "PO-Revision-Date: 2018-10-02 21:14-0000\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@ -468,11 +468,11 @@ msgstr ""
msgid "Could not initialize UART" msgid "Could not initialize UART"
msgstr "Não foi possível inicializar o 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" msgid "Couldn't allocate first buffer"
msgstr "Não pôde alocar primeiro 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" msgid "Couldn't allocate second buffer"
msgstr "Não pôde alocar segundo 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" msgid "Data 0 pin must be byte aligned"
msgstr "" msgstr ""
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Data chunk must follow fmt chunk" msgid "Data chunk must follow fmt chunk"
msgstr "Pedaço de dados deve seguir o pedaço de cortes" msgstr "Pedaço de dados deve seguir o pedaço de cortes"
@ -709,6 +709,10 @@ msgstr ""
msgid "Function requires lock" msgid "Function requires lock"
msgstr "" msgstr ""
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "Grupo cheio" msgstr "Grupo cheio"
@ -766,7 +770,7 @@ msgstr "Arquivo inválido"
msgid "Invalid capture period. Valid range: 1 - 500" msgid "Invalid capture period. Valid range: 1 - 500"
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
#, fuzzy #, fuzzy
msgid "Invalid channel count" msgid "Invalid channel count"
msgstr "certificado inválido" msgstr "certificado inválido"
@ -775,11 +779,11 @@ msgstr "certificado inválido"
msgid "Invalid direction." msgid "Invalid direction."
msgstr "Direção inválida" msgstr "Direção inválida"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "Arquivo inválido" msgstr "Arquivo inválido"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "Tamanho do pedaço de formato inválido" msgstr "Tamanho do pedaço de formato inválido"
@ -821,12 +825,12 @@ msgstr ""
msgid "Invalid run mode." msgid "Invalid run mode."
msgstr "" msgstr ""
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
#, fuzzy #, fuzzy
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "certificado inválido" msgstr "certificado inválido"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "Aqruivo de ondas inválido" 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" msgid "SDA or SCL needs a pull up"
msgstr "SDA ou SCL precisa de um 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" msgid "Sample rate must be positive"
msgstr "" msgstr ""
@ -1140,19 +1144,19 @@ msgid ""
"exit safe mode.\n" "exit safe mode.\n"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's bits_per_sample does not match the mixer's" msgid "The sample's bits_per_sample does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's channel count does not match the mixer's" msgid "The sample's channel count does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's sample rate does not match the mixer's" msgid "The sample's sample rate does not match the mixer's"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "The sample's signedness does not match the mixer's" msgid "The sample's signedness does not match the mixer's"
msgstr "" msgstr ""
@ -1258,7 +1262,7 @@ msgstr "Taxa de transmissão não suportada"
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "Taxa de transmissão não suportada" msgstr "Taxa de transmissão não suportada"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Unsupported format" msgid "Unsupported format"
msgstr "Formato não suportado" msgstr "Formato não suportado"
@ -1274,7 +1278,7 @@ msgstr ""
msgid "Viper functions don't currently support more than 4 arguments" msgid "Viper functions don't currently support more than 4 arguments"
msgstr "" msgstr ""
#: shared-module/audioio/Mixer.c #: shared-module/audiocore/Mixer.c
msgid "Voice index too high" msgid "Voice index too high"
msgstr "" msgstr ""
@ -1392,7 +1396,7 @@ msgstr ""
msgid "bits must be 8" msgid "bits must be 8"
msgstr "bits devem ser 8" msgstr "bits devem ser 8"
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
#, fuzzy #, fuzzy
msgid "bits_per_sample must be 8 or 16" msgid "bits_per_sample must be 8 or 16"
msgstr "bits devem ser 8" msgstr "bits devem ser 8"
@ -1407,7 +1411,7 @@ msgstr "Calibração está fora do intervalo"
msgid "buf is too small. need %d bytes" msgid "buf is too small. need %d bytes"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "buffer must be a bytes-like object" msgid "buffer must be a bytes-like object"
msgstr "" msgstr ""
@ -1771,7 +1775,8 @@ msgstr "argumentos extras de palavras-chave passados"
msgid "extra positional arguments given" msgid "extra positional arguments given"
msgstr "argumentos extra posicionais passados" 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" msgid "file must be a file opened in byte mode"
msgstr "" msgstr ""
@ -2316,7 +2321,7 @@ msgstr ""
msgid "rsplit(None,n)" msgid "rsplit(None,n)"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: circuitpython-cn\n" "Project-Id-Version: circuitpython-cn\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: 2019-04-13 10:10-0700\n"
"Last-Translator: hexthat\n" "Last-Translator: hexthat\n"
"Language-Team: Chinese Hanyu Pinyin\n" "Language-Team: Chinese Hanyu Pinyin\n"
@ -349,7 +349,7 @@ msgstr "Zì jié bìxū jiè yú 0 dào 255 zhī jiān."
#: py/objtype.c #: py/objtype.c
msgid "Call super().__init__() before accessing native object." 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 #: shared-bindings/_pixelbuf/PixelBuf.c
#, c-format #, c-format
@ -358,7 +358,7 @@ msgstr "Wúfǎ yǔ dotstar yīqǐ shǐyòng %s"
#: ports/nrf/common-hal/bleio/Characteristic.c #: ports/nrf/common-hal/bleio/Characteristic.c
msgid "Can't set CCCD for local Characteristic" 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 #: shared-bindings/displayio/Bitmap.c shared-bindings/pulseio/PulseIn.c
msgid "Cannot delete values" msgid "Cannot delete values"
@ -443,7 +443,7 @@ msgstr "Liè tiáomù bìxū shì digitalio.DigitalInOut"
#: shared-bindings/displayio/I2CDisplay.c #: shared-bindings/displayio/I2CDisplay.c
msgid "Command must be 0-255" 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 #: shared-bindings/displayio/FourWire.c shared-bindings/displayio/ParallelBus.c
msgid "Command must be an int between 0 and 255" 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 #: py/persistentcode.c
msgid "Corrupt .mpy file" msgid "Corrupt .mpy file"
msgstr "" msgstr "Fǔbài de .mpy wénjiàn"
#: py/emitglue.c #: py/emitglue.c
msgid "Corrupt raw code" msgid "Corrupt raw code"
msgstr "" msgstr "Sǔnhuài de yuánshǐ dàimǎ"
#: ports/nrf/common-hal/bleio/UUID.c #: ports/nrf/common-hal/bleio/UUID.c
#, c-format #, c-format
@ -466,11 +466,11 @@ msgstr "Wúfǎ jiěmǎ kě dú_uuid, err 0x%04x"
msgid "Could not initialize UART" msgid "Could not initialize UART"
msgstr "Wúfǎ chūshǐhuà 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" msgid "Couldn't allocate first buffer"
msgstr "Wúfǎ fēnpèi dì yī gè huǎnchōng qū" 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" msgid "Couldn't allocate second buffer"
msgstr "Wúfǎ fēnpèi dì èr gè huǎnchōng qū" 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" msgid "Data 0 pin must be byte aligned"
msgstr "Shùjù 0 de yǐn jiǎo bìxū shì zì jié duìqí" 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" msgid "Data chunk must follow fmt chunk"
msgstr "Shùjù kuài bìxū zūnxún fmt qū kuài" msgstr "Shùjù kuài bìxū zūnxún fmt qū kuài"
@ -534,7 +534,7 @@ msgstr "Yùqí UUID"
#: shared-bindings/bleio/Central.c #: shared-bindings/bleio/Central.c
msgid "Expected an Address" msgid "Expected an Address"
msgstr "" msgstr "Qídài yīgè dìzhǐ"
#: shared-module/_pixelbuf/PixelBuf.c #: shared-module/_pixelbuf/PixelBuf.c
#, c-format #, 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 #: shared-bindings/ps2io/Ps2.c
msgid "Failed sending command." msgid "Failed sending command."
msgstr "" msgstr "Fāsòng mìnglìng shībài."
#: ports/nrf/sd_mutex.c #: ports/nrf/sd_mutex.c
#, c-format #, 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 #: ports/nrf/common-hal/bleio/Peripheral.c
#, c-format #, c-format
msgid "Failed to configure advertising, err 0x%04x" 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 #: ports/nrf/common-hal/bleio/Central.c
msgid "Failed to connect: timeout" msgid "Failed to connect: timeout"
msgstr "" msgstr "Liánjiē shībài: Chāoshí"
#: ports/nrf/common-hal/bleio/Scanner.c #: ports/nrf/common-hal/bleio/Scanner.c
#, c-format #, c-format
@ -633,7 +633,7 @@ msgstr "Wúfǎ shìfàng mutex, err 0x%04x"
#: ports/nrf/common-hal/bleio/Peripheral.c #: ports/nrf/common-hal/bleio/Peripheral.c
#, c-format #, c-format
msgid "Failed to set device name, err 0x%04x" 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 #: ports/nrf/common-hal/bleio/Peripheral.c
#, c-format #, 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 #: ports/nrf/common-hal/bleio/Central.c
#, c-format #, c-format
msgid "Failed to start connecting, error 0x%04x" 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 #: ports/nrf/common-hal/bleio/Scanner.c
#, c-format #, c-format
@ -658,7 +658,7 @@ msgstr "Wúfǎ tíngzhǐ guǎnggào, err 0x%04x"
#: ports/nrf/common-hal/bleio/Characteristic.c #: ports/nrf/common-hal/bleio/Characteristic.c
#, c-format #, c-format
msgid "Failed to write CCCD, err 0x%04x" 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 #: ports/nrf/common-hal/bleio/Characteristic.c
#, c-format #, c-format
@ -701,6 +701,10 @@ msgstr "Pínlǜ bǔhuò gāo yú nénglì. Bǔhuò zàntíng."
msgid "Function requires lock" msgid "Function requires lock"
msgstr "Hánshù xūyào suǒdìng" msgstr "Hánshù xūyào suǒdìng"
#: shared-bindings/displayio/Display.c
msgid "Group already used"
msgstr ""
#: shared-module/displayio/Group.c #: shared-module/displayio/Group.c
msgid "Group full" msgid "Group full"
msgstr "Fēnzǔ yǐ mǎn" 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" 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" 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" msgid "Invalid channel count"
msgstr "Wúxiào de tōngdào jìshù" 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." msgid "Invalid direction."
msgstr "Wúxiào de fāngxiàng." msgstr "Wúxiào de fāngxiàng."
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid file" msgid "Invalid file"
msgstr "Wúxiào de wénjiàn" msgstr "Wúxiào de wénjiàn"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid format chunk size" msgid "Invalid format chunk size"
msgstr "Géshì kuài dàxiǎo wúxiào" 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." msgid "Invalid run mode."
msgstr "Wúxiào de yùnxíng móshì." msgstr "Wúxiào de yùnxíng móshì."
#: shared-bindings/audioio/Mixer.c #: shared-bindings/audiocore/Mixer.c
msgid "Invalid voice count" msgid "Invalid voice count"
msgstr "Wúxiào de yǔyīn jìshù" msgstr "Wúxiào de yǔyīn jìshù"
#: shared-module/audioio/WaveFile.c #: shared-module/audiocore/WaveFile.c
msgid "Invalid wave file" msgid "Invalid wave file"
msgstr "Wúxiào de làng làngcháo wénjiàn" msgstr "Wúxiào de làng làngcháo wénjiàn"
@ -1012,7 +1016,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 #: shared-bindings/ps2io/Ps2.c
msgid "Pop from an empty Ps2 buffer" msgid "Pop from an empty Ps2 buffer"
msgstr "" msgstr "Cóng kōng de Ps2 huǎnchōng qū dànchū"
#: main.c #: main.c
msgid "Press any key to enter the REPL. Use CTRL-D to reload." msgid "Press any key to enter the REPL. Use CTRL-D to reload."
@ -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" msgid "SDA or SCL needs a pull up"
msgstr "SDA huò SCL xūyào lādòng" 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" msgid "Sample rate must be positive"
msgstr "Cǎiyàng lǜ bìxū wèi zhèng shù" msgstr "Cǎiyàng lǜ bìxū wèi zhèng shù"
@ -1124,7 +1128,8 @@ msgstr ""
msgid "" msgid ""
"The `microcontroller` module was used to boot into safe mode. Press reset to " "The `microcontroller` module was used to boot into safe mode. Press reset to "
"exit safe mode.\n" "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 #: supervisor/shared/safe_mode.c
msgid "" msgid ""
@ -1145,19 +1150,19 @@ msgstr ""
"Qǐdòng CircuitPython shí, chóng zhì ànniǔ bèi àn xià. Zàicì àn xià yǐ tuìchū " "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" "ā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" 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" 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" 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ú" 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" 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" 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" 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" msgstr "Yàngběn de qiānmíng yǔ hǔn yīn qì de qiānmíng bù pǐpèi"
@ -1208,7 +1213,7 @@ msgstr "USB Cuòwù"
#: shared-bindings/bleio/UUID.c #: shared-bindings/bleio/UUID.c
msgid "UUID integer value must be 0-0xffff" 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 #: shared-bindings/bleio/UUID.c
msgid "UUID string not 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'" msgid "UUID string not 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'"
@ -1226,7 +1231,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 #: shared-module/displayio/I2CDisplay.c
#, c-format #, c-format
msgid "Unable to find I2C Display at %x" 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/I2SOut.c
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c #: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
@ -1262,7 +1267,7 @@ msgstr "Bù zhīchí de baudrate"
msgid "Unsupported display bus type" msgid "Unsupported display bus type"
msgstr "Bù zhīchí de gōnggòng qìchē lèixíng" 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" msgid "Unsupported format"
msgstr "Bù zhīchí de géshì" msgstr "Bù zhīchí de géshì"
@ -1278,7 +1283,7 @@ msgstr "Bù zhīchí de lādòng zhí."
msgid "Viper functions don't currently support more than 4 arguments" 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ù" 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" msgid "Voice index too high"
msgstr "Yǔyīn suǒyǐn tài gāo" msgstr "Yǔyīn suǒyǐn tài gāo"
@ -1403,7 +1408,7 @@ msgstr "bǐtè bìxū shì 7,8 huò 9"
msgid "bits must be 8" msgid "bits must be 8"
msgstr "bǐtè bìxū shì 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" msgid "bits_per_sample must be 8 or 16"
msgstr "měi jiàn yàngběn bìxū wèi 8 huò 16" msgstr "měi jiàn yàngběn bìxū wèi 8 huò 16"
@ -1416,7 +1421,7 @@ msgstr "fēnzhī bùzài fànwéi nèi"
msgid "buf is too small. need %d bytes" msgid "buf is too small. need %d bytes"
msgstr "huǎnchōng tài xiǎo. Xūyào%d zì jié" 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" msgid "buffer must be a bytes-like object"
msgstr "huǎnchōng qū bìxū shì zì jié lèi duìxiàng" msgstr "huǎnchōng qū bìxū shì zì jié lèi duìxiàng"
@ -1781,7 +1786,8 @@ msgstr "éwài de guānjiàn cí cānshù"
msgid "extra positional arguments given" msgid "extra positional arguments given"
msgstr "gěi chūle éwài de wèizhì cānshù" 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" 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" msgstr "wénjiàn bìxū shì zài zì jié móshì xià dǎkāi de wénjiàn"
@ -1913,7 +1919,7 @@ msgstr "xūyào zhěngshù"
#: shared-bindings/bleio/Peripheral.c shared-bindings/bleio/Scanner.c #: shared-bindings/bleio/Peripheral.c shared-bindings/bleio/Scanner.c
#, c-format #, c-format
msgid "interval must be in range %s-%s" 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 #: extmod/machine_i2c.c
msgid "invalid I2C peripheral" msgid "invalid I2C peripheral"
@ -2326,7 +2332,7 @@ msgstr "fǎnhuí yùqí de '%q' dàn huòdéle '%q'"
msgid "rsplit(None,n)" msgid "rsplit(None,n)"
msgstr "" msgstr ""
#: shared-bindings/audioio/RawSample.c #: shared-bindings/audiocore/RawSample.c
msgid "" msgid ""
"sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or " "sample_source buffer must be a bytearray or array of type 'h', 'H', 'b' or "
"'B'" "'B'"
@ -2606,7 +2612,7 @@ msgstr "bù zhīchí de lèixíng wèi %q: '%s', '%s'"
#: py/objint.c #: py/objint.c
#, c-format #, c-format
msgid "value must fit in %d byte(s)" msgid "value must fit in %d byte(s)"
msgstr "" msgstr "Zhí bìxū fúhé %d zì jié"
#: shared-bindings/displayio/Bitmap.c #: shared-bindings/displayio/Bitmap.c
msgid "value_count must be > 0" msgid "value_count must be > 0"
@ -2614,7 +2620,7 @@ msgstr "zhí jìshù bìxū wèi > 0"
#: shared-bindings/bleio/Scanner.c #: shared-bindings/bleio/Scanner.c
msgid "window must be <= interval" msgid "window must be <= interval"
msgstr "" msgstr "Chuāngkǒu bìxū shì <= jiàngé"
#: shared-bindings/_pixelbuf/PixelBuf.c #: shared-bindings/_pixelbuf/PixelBuf.c
msgid "write_args must be a list, tuple, or None" msgid "write_args must be a list, tuple, or None"

View File

@ -29,8 +29,8 @@
#include "samd/events.h" #include "samd/events.h"
#include "samd/dma.h" #include "samd/dma.h"
#include "shared-bindings/audioio/RawSample.h" #include "shared-bindings/audiocore/RawSample.h"
#include "shared-bindings/audioio/WaveFile.h" #include "shared-bindings/audiocore/WaveFile.h"
#include "py/mpstate.h" #include "py/mpstate.h"
#include "py/runtime.h" #include "py/runtime.h"

View File

@ -29,8 +29,8 @@
#include "extmod/vfs_fat.h" #include "extmod/vfs_fat.h"
#include "py/obj.h" #include "py/obj.h"
#include "shared-module/audioio/RawSample.h" #include "shared-module/audiocore/RawSample.h"
#include "shared-module/audioio/WaveFile.h" #include "shared-module/audiocore/WaveFile.h"
typedef struct { typedef struct {
mp_obj_t sample; mp_obj_t sample;

View File

@ -11,3 +11,6 @@ SPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1 EXTERNAL_FLASH_DEVICE_COUNT = 1
EXTERNAL_FLASH_DEVICES = "S25FL064L" EXTERNAL_FLASH_DEVICES = "S25FL064L"
LONGINT_IMPL = MPZ LONGINT_IMPL = MPZ
CFLAGS_INLINE_LIMIT = 60
SUPEROPT_GC = 0

View File

@ -93,6 +93,8 @@ void board_init(void) {
16, // Color depth 16, // Color depth
false, // Grayscale false, // Grayscale
false, // Pixels in a byte share a row. Only used for depth < 8 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_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command

View File

@ -95,6 +95,8 @@ void board_init(void) {
16, // Color depth 16, // Color depth
false, // grayscale false, // grayscale
false, // pixels in byte share row. only used for depth < 8 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_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command

View File

@ -73,6 +73,8 @@ void board_init(void) {
16, // Color depth 16, // Color depth
false, // grayscale false, // grayscale
false, // pixels in byte share row. Only used for depth < 8 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_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command

View File

@ -95,6 +95,8 @@ void board_init(void) {
16, // Color depth 16, // Color depth
false, // Grayscale false, // Grayscale
false, // pixels in a byte share a row. Only valid for depths < 8 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_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command

View File

@ -73,6 +73,8 @@ void board_init(void) {
16, // Color depth 16, // Color depth
false, // Grayscale false, // Grayscale
false, // pixels in a byte share a row. Only valid for depths < 8 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_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command

View File

@ -85,6 +85,8 @@ void board_init(void) {
16, // Color depth 16, // Color depth
false, // grayscale false, // grayscale
false, // pixels_in_byte_share_row (unused for depths > 8) 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_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command

View File

@ -1,88 +0,0 @@
#include "shared-bindings/board/__init__.h"
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) },
// 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) },
// 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_ENABLE), MP_ROM_PTR(&pin_PA28) },
{ 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_PB22) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PB23) },
// 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) },
{ 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) },
// 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) },
// 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) },
{ 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_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) },
// 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) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -1,7 +1,7 @@
#define MICROPY_HW_BOARD_NAME "Robo HAT MM1" #define MICROPY_HW_BOARD_NAME "Robo HAT MM1"
#define MICROPY_HW_MCU_NAME "samd21g18" #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. // Salae reads 12mhz which is the limit even though we set it to the safer 8mhz.
#define SPI_FLASH_BAUDRATE (8000000) #define SPI_FLASH_BAUDRATE (8000000)
@ -24,23 +24,19 @@
#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE) #define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
//#define BOARD_HAS_CRYSTAL 0
#define CALIBRATE_CRYSTALLESS 1 #define CALIBRATE_CRYSTALLESS 1
#define DEFAULT_I2C_BUS_SCL (&pin_PA23) #define DEFAULT_I2C_BUS_SCL (&pin_PA23)
#define DEFAULT_I2C_BUS_SDA (&pin_PA22) #define DEFAULT_I2C_BUS_SDA (&pin_PA22)
#define DEFAULT_SPI_BUS_SCK (&pin_PB11) #define DEFAULT_SPI_BUS_SCK (&pin_PB10)
#define DEFAULT_SPI_BUS_MOSI (&pin_PB10) #define DEFAULT_SPI_BUS_MOSI (&pin_PB08)
#define DEFAULT_SPI_BUS_MISO (&pin_PB08) #define DEFAULT_SPI_BUS_MISO (&pin_PB11)
#define DEFAULT_UART_BUS_RX (&pin_PB23) #define DEFAULT_UART_BUS_RX (&pin_PB03)
#define DEFAULT_UART_BUS_TX (&pin_PB22) #define DEFAULT_UART_BUS_TX (&pin_PB02)
// USB is always used internally so skip the pin objects for it. // USB is always used internally so skip the pin objects for it.
#define IGNORE_PIN_PA24 1 #define IGNORE_PIN_PA24 1
#define IGNORE_PIN_PA25 1 #define IGNORE_PIN_PA25 1
//#define CIRCUITPY_I2CSLAVE
//#define CIRCUITPY_DISPLAYIO (0)

View File

@ -7,27 +7,23 @@ USB_MANUFACTURER = "Robotics Masters"
CHIP_VARIANT = SAMD21G18A CHIP_VARIANT = SAMD21G18A
CHIP_FAMILY = samd21 CHIP_FAMILY = samd21
# Non-Flash Edition
#INTERNAL_FLASH_FILESYSTEM = 1
#LONGINT_IMPL = NONE
#SUPEROPT_GC = 0
# SPI-Flash Edition
SPI_FLASH_FILESYSTEM = 1 SPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1 EXTERNAL_FLASH_DEVICE_COUNT = 1
EXTERNAL_FLASH_DEVICES = "W25Q64JV_IQ" EXTERNAL_FLASH_DEVICES = "W25Q64JV_IQ"
LONGINT_IMPL = MPZ LONGINT_IMPL = MPZ
# Make room for frozen Libraries
# Non-Flash Edition
#INTERNAL_FLASH_FILESYSTEM = 1
#LONGINT_IMPL = NONE
CIRCUITPY_DISPLAYIO = 0 CIRCUITPY_DISPLAYIO = 0
CIRCUITPY_FREQUENCYIO = 0 CIRCUITPY_FREQUENCYIO = 0
CFLAGS_INLINE_LIMIT = 55 CFLAGS_INLINE_LIMIT = 60
SUPEROPT_GC = 0
# Include these Python libraries in firmware. # Include these Python libraries in firmware.
FROZEN_MPY_DIRS += $(TOP)/frozen/Adafruit_CircuitPython_BusDevice 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/Adafruit_CircuitPython_INA219
#FROZEN_MPY_DIRS += $(TOP)/frozen/RoboticsMasters_CircuitPython_MPU9250 #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

View File

@ -0,0 +1,88 @@
#include "shared-bindings/board/__init__.h"
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 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_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) },
{ 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) },
// 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) },
{ 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) },
// 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_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) },
{ 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_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_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -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) {
}

View File

@ -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_PB22)
// 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_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)
// USB is always used internally so skip the pin objects for it.
#define IGNORE_PIN_PA24 1
#define IGNORE_PIN_PA25 1

View File

@ -0,0 +1,31 @@
LD_FILE = boards/samd51x19-bootloader-external-flash.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

View File

@ -0,0 +1,89 @@
#include "shared-bindings/board/__init__.h"
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 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_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) },
{ 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) },
// 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) },
{ 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) },
// 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_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) },
{ 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_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_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -0,0 +1,38 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "boards/board.h"
void board_init(void)
{
}
bool board_requests_safe_mode(void) {
return false;
}
void reset_board(void) {
}

View File

@ -0,0 +1,35 @@
#define MICROPY_HW_BOARD_NAME "keithp.com snekboard"
#define MICROPY_HW_MCU_NAME "samd21g18"
#define MICROPY_HW_LED_STATUS (&pin_PA02)
#define MICROPY_HW_NEOPIXEL (&pin_PB11)
#define SPI_FLASH_MOSI_PIN &pin_PB22
#define SPI_FLASH_MISO_PIN &pin_PB03
#define SPI_FLASH_SCK_PIN &pin_PB23
#define SPI_FLASH_CS_PIN &pin_PA27
// These are pins not to reset.
#define MICROPY_PORT_A (PORT_PB11)
#define MICROPY_PORT_B ( 0 )
#define MICROPY_PORT_C ( 0 )
// 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 256
#define BOARD_FLASH_SIZE (0x00040000 - 0x2000 - CIRCUITPY_INTERNAL_NVM_SIZE)
#define BOARD_HAS_CRYSTAL 0
#define DEFAULT_I2C_BUS_SCL (&pin_PA08) /* ANALOG 5 */
#define DEFAULT_I2C_BUS_SDA (&pin_PA09) /* ANALOG 6 */
#define DEFAULT_UART_BUS_RX (&pin_PB08) /* ANALOG 1 */
#define DEFAULT_UART_BUS_TX (&pin_PB09) /* ANALOG 2 */
// USB is always used internally so skip the pin objects for it.
#define IGNORE_PIN_PA24 1
#define IGNORE_PIN_PA25 1

View File

@ -0,0 +1,16 @@
LD_FILE = boards/samd21x18-bootloader-external-flash.ld
USB_VID = 0x239A
USB_PID = 0x804E
USB_PRODUCT = "snekboard"
USB_MANUFACTURER = "keithp.com"
CHIP_VARIANT = SAMD21G18A
CHIP_FAMILY = samd21
SPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1
EXTERNAL_FLASH_DEVICES = "W25Q16JV_IQ"
LONGINT_IMPL = MPZ
CFLAGS_INLINE_LIMIT = 60
SUPEROPT_GC = 0

View File

@ -0,0 +1,28 @@
#include "shared-bindings/board/__init__.h"
STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PB08) },
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PB08) },
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PB09) },
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PB09) },
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PA06) },
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PA07) },
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PA08) },
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_PA08) },
{ MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_PA09) },
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_PA09) },
{ MP_ROM_QSTR(MP_QSTR_A7), MP_ROM_PTR(&pin_PA10) },
{ MP_ROM_QSTR(MP_QSTR_A8), MP_ROM_PTR(&pin_PA11) },
{ MP_ROM_QSTR(MP_QSTR_POWER1), MP_ROM_PTR(&pin_PA12) },
{ MP_ROM_QSTR(MP_QSTR_DIR1), MP_ROM_PTR(&pin_PA16) },
{ MP_ROM_QSTR(MP_QSTR_POWER2), MP_ROM_PTR(&pin_PA13) },
{ MP_ROM_QSTR(MP_QSTR_DIR2), MP_ROM_PTR(&pin_PA17) },
{ MP_ROM_QSTR(MP_QSTR_POWER3), MP_ROM_PTR(&pin_PA18) },
{ MP_ROM_QSTR(MP_QSTR_DIR3), MP_ROM_PTR(&pin_PA20) },
{ MP_ROM_QSTR(MP_QSTR_POWER4), MP_ROM_PTR(&pin_PA19) },
{ MP_ROM_QSTR(MP_QSTR_DIR4), MP_ROM_PTR(&pin_PA21) },
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_PB11) },
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);

View File

@ -11,3 +11,5 @@ SPI_FLASH_FILESYSTEM = 1
EXTERNAL_FLASH_DEVICE_COUNT = 1 EXTERNAL_FLASH_DEVICE_COUNT = 1
EXTERNAL_FLASH_DEVICES = W25Q32BV EXTERNAL_FLASH_DEVICES = W25Q32BV
LONGINT_IMPL = MPZ LONGINT_IMPL = MPZ
SUPEROPT_GC = 0

View File

@ -93,6 +93,8 @@ void board_init(void) {
16, // Color depth 16, // Color depth
false, // grayscale false, // grayscale
false, // pixels in byte share row. Only used with depth < 8 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_COLUMN_ADDRESS, // Set column command
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command

View File

@ -33,7 +33,7 @@
#include "py/runtime.h" #include "py/runtime.h"
#include "common-hal/audiobusio/I2SOut.h" #include "common-hal/audiobusio/I2SOut.h"
#include "shared-bindings/audiobusio/I2SOut.h" #include "shared-bindings/audiobusio/I2SOut.h"
#include "shared-bindings/audioio/RawSample.h" #include "shared-bindings/audiocore/RawSample.h"
#include "shared-bindings/microcontroller/Pin.h" #include "shared-bindings/microcontroller/Pin.h"
#include "supervisor/shared/translate.h" #include "supervisor/shared/translate.h"

View File

@ -37,6 +37,7 @@
#include "shared-bindings/microcontroller/Processor.h" #include "shared-bindings/microcontroller/Processor.h"
#include "supervisor/filesystem.h" #include "supervisor/filesystem.h"
#include "supervisor/shared/safe_mode.h"
#include "nrfx_glue.h" #include "nrfx_glue.h"
// This routine should work even when interrupts are disabled. Used by OneWire // This routine should work even when interrupts are disabled. Used by OneWire
@ -52,7 +53,13 @@ void common_hal_mcu_enable_interrupts() {
} }
void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) { void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
// TODO: see atmel-samd for functionality enum { DFU_MAGIC_UF2_RESET = 0x57 };
if(runmode == RUNMODE_BOOTLOADER)
NRF_POWER->GPREGRET = DFU_MAGIC_UF2_RESET;
else
NRF_POWER->GPREGRET = 0;
if(runmode == RUNMODE_SAFE_MODE)
safe_mode_on_next_reset(PROGRAMMATIC_SAFE_MODE);
} }
void common_hal_mcu_reset(void) { void common_hal_mcu_reset(void) {

View File

@ -108,6 +108,9 @@ endif
ifeq ($(CIRCUITPY_AUDIOIO),1) ifeq ($(CIRCUITPY_AUDIOIO),1)
SRC_PATTERNS += audioio/% SRC_PATTERNS += audioio/%
endif endif
ifeq ($(CIRCUITPY_AUDIOCORE),1)
SRC_PATTERNS += audiocore/%
endif
ifeq ($(CIRCUITPY_BITBANGIO),1) ifeq ($(CIRCUITPY_BITBANGIO),1)
SRC_PATTERNS += bitbangio/% SRC_PATTERNS += bitbangio/%
endif endif
@ -301,9 +304,10 @@ $(filter $(SRC_PATTERNS), \
_stage/Text.c \ _stage/Text.c \
_stage/__init__.c \ _stage/__init__.c \
audioio/__init__.c \ audioio/__init__.c \
audioio/Mixer.c \ audiocore/__init__.c \
audioio/RawSample.c \ audiocore/Mixer.c \
audioio/WaveFile.c \ audiocore/RawSample.c \
audiocore/WaveFile.c \
bitbangio/I2C.c \ bitbangio/I2C.c \
bitbangio/OneWire.c \ bitbangio/OneWire.c \
bitbangio/SPI.c \ bitbangio/SPI.c \

View File

@ -230,6 +230,13 @@ extern const struct _mp_obj_module_t audiobusio_module;
#define AUDIOBUSIO_MODULE #define AUDIOBUSIO_MODULE
#endif #endif
#if CIRCUITPY_AUDIOCORE
#define AUDIOCORE_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_audiocore), (mp_obj_t)&audiocore_module },
extern const struct _mp_obj_module_t audiocore_module;
#else
#define AUDIOCORE_MODULE
#endif
#if CIRCUITPY_AUDIOIO #if CIRCUITPY_AUDIOIO
#define AUDIOIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_audioio), (mp_obj_t)&audioio_module }, #define AUDIOIO_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_audioio), (mp_obj_t)&audioio_module },
extern const struct _mp_obj_module_t audioio_module; extern const struct _mp_obj_module_t audioio_module;
@ -564,6 +571,7 @@ extern const struct _mp_obj_module_t ustack_module;
#define MICROPY_PORT_BUILTIN_MODULES_STRONG_LINKS \ #define MICROPY_PORT_BUILTIN_MODULES_STRONG_LINKS \
ANALOGIO_MODULE \ ANALOGIO_MODULE \
AUDIOBUSIO_MODULE \ AUDIOBUSIO_MODULE \
AUDIOCORE_MODULE \
AUDIOIO_MODULE \ AUDIOIO_MODULE \
BITBANGIO_MODULE \ BITBANGIO_MODULE \
BLEIO_MODULE \ BLEIO_MODULE \

View File

@ -74,6 +74,11 @@ CIRCUITPY_AUDIOIO = $(CIRCUITPY_FULL_BUILD)
endif endif
CFLAGS += -DCIRCUITPY_AUDIOIO=$(CIRCUITPY_AUDIOIO) CFLAGS += -DCIRCUITPY_AUDIOIO=$(CIRCUITPY_AUDIOIO)
ifndef CIRCUITPY_AUDIOCORE
CIRCUITPY_AUDIOCORE = $(CIRCUITPY_AUDIOIO)
endif
CFLAGS += -DCIRCUITPY_AUDIOCORE=$(CIRCUITPY_AUDIOCORE)
ifndef CIRCUITPY_BITBANGIO ifndef CIRCUITPY_BITBANGIO
CIRCUITPY_BITBANGIO = $(CIRCUITPY_FULL_BUILD) CIRCUITPY_BITBANGIO = $(CIRCUITPY_FULL_BUILD)
endif endif

View File

@ -50,7 +50,7 @@
//| Layer //| Layer
//| Text //| Text
//| //|
//| .. function:: render(x0, y0, x1, y1, layers, buffer, display) //| .. function:: render(x0, y0, x1, y1, layers, buffer, display[, scale])
//| //|
//| Render and send to the display a fragment of the screen. //| Render and send to the display a fragment of the screen.
//| //|
@ -61,6 +61,7 @@
//| :param list layers: A list of the :py:class:`~_stage.Layer` objects. //| :param list layers: A list of the :py:class:`~_stage.Layer` objects.
//| :param bytearray buffer: A buffer to use for rendering. //| :param bytearray buffer: A buffer to use for rendering.
//| :param ~displayio.Display display: The display to use. //| :param ~displayio.Display display: The display to use.
//| :param int scale: How many times should the image be scaled up.
//| //|
//| There are also no sanity checks, outside of the basic overflow //| There are also no sanity checks, outside of the basic overflow
//| checking. The caller is responsible for making the passed parameters //| checking. The caller is responsible for making the passed parameters
@ -89,6 +90,10 @@ STATIC mp_obj_t stage_render(size_t n_args, const mp_obj_t *args) {
mp_raise_TypeError(translate("argument num/types mismatch")); mp_raise_TypeError(translate("argument num/types mismatch"));
} }
displayio_display_obj_t *display = MP_OBJ_TO_PTR(native_display); displayio_display_obj_t *display = MP_OBJ_TO_PTR(native_display);
uint8_t scale = 1;
if (n_args >= 8) {
scale = mp_obj_get_int(args[7]);
}
while (!displayio_display_begin_transaction(display)) { while (!displayio_display_begin_transaction(display)) {
#ifdef MICROPY_VM_HOOK_LOOP #ifdef MICROPY_VM_HOOK_LOOP
@ -101,12 +106,15 @@ STATIC mp_obj_t stage_render(size_t n_args, const mp_obj_t *args) {
area.x2 = x1; area.x2 = x1;
area.y2 = y1; area.y2 = y1;
displayio_display_set_region_to_update(display, &area); displayio_display_set_region_to_update(display, &area);
render_stage(x0, y0, x1, y1, layers, layers_size, buffer, buffer_size, display);
display->send(display->bus, true, &display->write_ram_command, 1);
render_stage(x0, y0, x1, y1, layers, layers_size, buffer, buffer_size,
display, scale);
displayio_display_end_transaction(display); displayio_display_end_transaction(display);
return mp_const_none; return mp_const_none;
} }
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(stage_render_obj, 7, 7, stage_render); MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(stage_render_obj, 7, 8, stage_render);
STATIC const mp_rom_map_elem_t stage_module_globals_table[] = { STATIC const mp_rom_map_elem_t stage_module_globals_table[] = {

View File

@ -23,7 +23,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE. * THE SOFTWARE.
*/ */
#include "shared-bindings/audioio/Mixer.h" #include "shared-bindings/audiocore/Mixer.h"
#include <stdint.h> #include <stdint.h>
@ -32,7 +32,7 @@
#include "py/objproperty.h" #include "py/objproperty.h"
#include "py/runtime.h" #include "py/runtime.h"
#include "shared-bindings/microcontroller/Pin.h" #include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/audioio/RawSample.h" #include "shared-bindings/audiocore/RawSample.h"
#include "shared-bindings/util.h" #include "shared-bindings/util.h"
#include "supervisor/shared/translate.h" #include "supervisor/shared/translate.h"

View File

@ -28,8 +28,8 @@
#define MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_MIXER_H #define MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_MIXER_H
#include "common-hal/microcontroller/Pin.h" #include "common-hal/microcontroller/Pin.h"
#include "shared-module/audioio/Mixer.h" #include "shared-module/audiocore/Mixer.h"
#include "shared-bindings/audioio/RawSample.h" #include "shared-bindings/audiocore/RawSample.h"
extern const mp_obj_type_t audioio_mixer_type; extern const mp_obj_type_t audioio_mixer_type;

View File

@ -31,8 +31,8 @@
#include "py/objproperty.h" #include "py/objproperty.h"
#include "py/runtime.h" #include "py/runtime.h"
#include "shared-bindings/microcontroller/Pin.h" #include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/audioio/AudioOut.h"
#include "shared-bindings/util.h" #include "shared-bindings/util.h"
#include "shared-bindings/audiocore/RawSample.h"
#include "supervisor/shared/translate.h" #include "supervisor/shared/translate.h"
//| .. currentmodule:: audioio //| .. currentmodule:: audioio

View File

@ -27,9 +27,8 @@
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_RAWSAMPLE_H #ifndef MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_RAWSAMPLE_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_RAWSAMPLE_H #define MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_RAWSAMPLE_H
#include "common-hal/audioio/AudioOut.h"
#include "common-hal/microcontroller/Pin.h" #include "common-hal/microcontroller/Pin.h"
#include "shared-module/audioio/RawSample.h" #include "shared-module/audiocore/RawSample.h"
extern const mp_obj_type_t audioio_rawsample_type; extern const mp_obj_type_t audioio_rawsample_type;

View File

@ -29,7 +29,7 @@
#include "lib/utils/context_manager_helpers.h" #include "lib/utils/context_manager_helpers.h"
#include "py/objproperty.h" #include "py/objproperty.h"
#include "py/runtime.h" #include "py/runtime.h"
#include "shared-bindings/audioio/WaveFile.h" #include "shared-bindings/audiocore/WaveFile.h"
#include "shared-bindings/util.h" #include "shared-bindings/util.h"
#include "supervisor/shared/translate.h" #include "supervisor/shared/translate.h"

View File

@ -27,10 +27,11 @@
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_WAVEFILE_H #ifndef MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_WAVEFILE_H
#define MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_WAVEFILE_H #define MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOIO_WAVEFILE_H
#include "common-hal/audioio/AudioOut.h" #include "py/obj.h"
#include "common-hal/microcontroller/Pin.h"
#include "extmod/vfs_fat.h" #include "extmod/vfs_fat.h"
#include "shared-module/audiocore/WaveFile.h"
extern const mp_obj_type_t audioio_wavefile_type; extern const mp_obj_type_t audioio_wavefile_type;
void common_hal_audioio_wavefile_construct(audioio_wavefile_obj_t* self, void common_hal_audioio_wavefile_construct(audioio_wavefile_obj_t* self,

View File

@ -0,0 +1,69 @@
/*
* 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 <stdint.h>
#include "py/obj.h"
#include "py/runtime.h"
#include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/audiocore/__init__.h"
#include "shared-bindings/audiocore/Mixer.h"
#include "shared-bindings/audiocore/RawSample.h"
#include "shared-bindings/audiocore/WaveFile.h"
//| :mod:`audiocore` --- Support for audio samples and mixer
//| ========================================================
//|
//| .. module:: audiocore
//| :synopsis: Support for audio samples and mixer
//| :platform: SAMD21
//|
//| The `audiocore` module contains core classes for audio IO
//|
//| Libraries
//|
//| .. toctree::
//| :maxdepth: 3
//|
//| Mixer
//| RawSample
//| WaveFile
//|
STATIC const mp_rom_map_elem_t audiocore_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_audiocore) },
{ MP_ROM_QSTR(MP_QSTR_Mixer), MP_ROM_PTR(&audioio_mixer_type) },
{ MP_ROM_QSTR(MP_QSTR_RawSample), MP_ROM_PTR(&audioio_rawsample_type) },
{ MP_ROM_QSTR(MP_QSTR_WaveFile), MP_ROM_PTR(&audioio_wavefile_type) },
};
STATIC MP_DEFINE_CONST_DICT(audiocore_module_globals, audiocore_module_globals_table);
const mp_obj_module_t audiocore_module = {
.base = { &mp_type_module },
.globals = (mp_obj_dict_t*)&audiocore_module_globals,
};

View File

@ -0,0 +1,34 @@
/*
* 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.
*/
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOCORE___INIT___H
#define MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOCORE___INIT___H
#include "py/obj.h"
// Nothing now.
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOCORE___INIT___H

View File

@ -32,7 +32,7 @@
#include "py/runtime.h" #include "py/runtime.h"
#include "shared-bindings/microcontroller/Pin.h" #include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/audioio/AudioOut.h" #include "shared-bindings/audioio/AudioOut.h"
#include "shared-bindings/audioio/RawSample.h" #include "shared-bindings/audiocore/RawSample.h"
#include "shared-bindings/util.h" #include "shared-bindings/util.h"
#include "supervisor/shared/translate.h" #include "supervisor/shared/translate.h"

View File

@ -29,7 +29,7 @@
#include "common-hal/audioio/AudioOut.h" #include "common-hal/audioio/AudioOut.h"
#include "common-hal/microcontroller/Pin.h" #include "common-hal/microcontroller/Pin.h"
#include "shared-bindings/audioio/RawSample.h" #include "shared-bindings/audiocore/RawSample.h"
extern const mp_obj_type_t audioio_audioout_type; extern const mp_obj_type_t audioio_audioout_type;

View File

@ -32,9 +32,6 @@
#include "shared-bindings/microcontroller/Pin.h" #include "shared-bindings/microcontroller/Pin.h"
#include "shared-bindings/audioio/__init__.h" #include "shared-bindings/audioio/__init__.h"
#include "shared-bindings/audioio/AudioOut.h" #include "shared-bindings/audioio/AudioOut.h"
#include "shared-bindings/audioio/Mixer.h"
#include "shared-bindings/audioio/RawSample.h"
#include "shared-bindings/audioio/WaveFile.h"
//| :mod:`audioio` --- Support for audio input and output //| :mod:`audioio` --- Support for audio input and output
//| ====================================================== //| ======================================================
@ -51,22 +48,19 @@
//| :maxdepth: 3 //| :maxdepth: 3
//| //|
//| AudioOut //| AudioOut
//| Mixer
//| RawSample
//| WaveFile
//| //|
//| All classes change hardware state and should be deinitialized when they //| All classes change hardware state and should be deinitialized when they
//| are no longer needed if the program continues after use. To do so, either //| are no longer needed if the program continues after use. To do so, either
//| call :py:meth:`!deinit` or use a context manager. See //| call :py:meth:`!deinit` or use a context manager. See
//| :ref:`lifetime-and-contextmanagers` for more info. //| :ref:`lifetime-and-contextmanagers` for more info.
//| //|
//| Since CircuitPython 5, `Mixer`, `RawSample` and `WaveFile` are moved
//| to :mod:`audiocore`.
//|
STATIC const mp_rom_map_elem_t audioio_module_globals_table[] = { STATIC const mp_rom_map_elem_t audioio_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_audioio) }, { MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_audioio) },
{ MP_ROM_QSTR(MP_QSTR_AudioOut), MP_ROM_PTR(&audioio_audioout_type) }, { MP_ROM_QSTR(MP_QSTR_AudioOut), MP_ROM_PTR(&audioio_audioout_type) },
{ MP_ROM_QSTR(MP_QSTR_Mixer), MP_ROM_PTR(&audioio_mixer_type) },
{ MP_ROM_QSTR(MP_QSTR_RawSample), MP_ROM_PTR(&audioio_rawsample_type) },
{ MP_ROM_QSTR(MP_QSTR_WaveFile), MP_ROM_PTR(&audioio_wavefile_type) },
}; };
STATIC MP_DEFINE_CONST_DICT(audioio_module_globals, audioio_module_globals_table); STATIC MP_DEFINE_CONST_DICT(audioio_module_globals, audioio_module_globals_table);

View File

@ -72,7 +72,7 @@ static const char default_name[] = "CIRCUITPY";
//| serv = bleio.Service(bleio.UUID(0x180f), [chara]) //| serv = bleio.Service(bleio.UUID(0x180f), [chara])
//| //|
//| # Create a peripheral and start it up. //| # Create a peripheral and start it up.
//| periph = bleio.Peripheral([service]) //| periph = bleio.Peripheral([serv])
//| adv = ServerAdvertisement(periph) //| adv = ServerAdvertisement(periph)
//| periph.start_advertising(adv.advertising_data_bytes, adv.scan_response_bytes) //| periph.start_advertising(adv.advertising_data_bytes, adv.scan_response_bytes)
//| //|

View File

@ -51,7 +51,7 @@
//| Most people should not use this class directly. Use a specific display driver instead that will //| Most people should not use this class directly. Use a specific display driver instead that will
//| contain the initialization sequence at minimum. //| 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`). //| 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.) //| 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 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 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_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 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. //| :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. //| :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) { 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[] = { static const mp_arg_t allowed_args[] = {
{ MP_QSTR_display_bus, MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_display_bus, MP_ARG_REQUIRED | MP_ARG_OBJ },
{ MP_QSTR_init_sequence, 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_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_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_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_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_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} }, { 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( common_hal_displayio_display_construct(
self, self,
display_bus, args[ARG_width].u_int, args[ARG_height].u_int, args[ARG_colstart].u_int, args[ARG_rowstart].u_int, rotation, 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_set_column_command].u_int, args[ARG_set_row_command].u_int,
args[ARG_write_ram_command].u_int, args[ARG_write_ram_command].u_int,
args[ARG_set_vertical_scroll].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)); 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; return mp_const_none;
} }
MP_DEFINE_CONST_FUN_OBJ_2(displayio_display_show_obj, displayio_display_obj_show); MP_DEFINE_CONST_FUN_OBJ_2(displayio_display_show_obj, displayio_display_obj_show);

View File

@ -40,7 +40,8 @@ extern const mp_obj_type_t displayio_display_type;
void common_hal_displayio_display_construct(displayio_display_obj_t* self, void common_hal_displayio_display_construct(displayio_display_obj_t* self,
mp_obj_t bus, uint16_t width, uint16_t height, 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 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, 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, 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); 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); void common_hal_displayio_display_refresh_soon(displayio_display_obj_t* self);

View File

@ -1,11 +1,11 @@
Core Modules Core Modules
======================================== ========================================
These core modules are intended on being consistent across ports. Currently These core modules are intended on being consistent across ports and boards.
they are only implemented in the SAMD21 and ESP8266 ports. A module may not exist A module may not exist on a port/board if no underlying hardware support is
in a port if no underlying hardware support is present or if flash space is present or if flash space is limited. For example, a microcontroller without
limited. For example, a microcontroller without analog features will not have analog features will not have `analogio`. See the `support_matrix` page for
`analogio`. a list of modules supported on each board.
Modules Modules
--------- ---------
@ -14,55 +14,6 @@ Modules
:glob: :glob:
:maxdepth: 3 :maxdepth: 3
support_matrix
*/__init__ */__init__
help help
.. _module-support-matrix:
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 <https://www.adafruit.com/product/3364>`_ is specialized and may not
have modules as listed below.
================= ==============================
Module Supported Ports
================= ==============================
`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**
================= ==============================

View File

@ -0,0 +1,16 @@
.. _module-support-matrix:
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 -%}

View File

@ -34,30 +34,35 @@
void render_stage(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, void render_stage(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,
mp_obj_t *layers, size_t layers_size, mp_obj_t *layers, size_t layers_size,
uint16_t *buffer, size_t buffer_size, uint16_t *buffer, size_t buffer_size,
displayio_display_obj_t *display) { displayio_display_obj_t *display, uint8_t scale) {
size_t index = 0; size_t index = 0;
for (uint16_t y = y0; y < y1; ++y) { for (uint16_t y = y0; y < y1; ++y) {
for (uint16_t x = x0; x < x1; ++x) { for (uint8_t yscale = 0; yscale < scale; ++yscale) {
for (size_t layer = 0; layer < layers_size; ++layer) { for (uint16_t x = x0; x < x1; ++x) {
uint16_t c = TRANSPARENT; uint16_t c = TRANSPARENT;
layer_obj_t *obj = MP_OBJ_TO_PTR(layers[layer]); for (size_t layer = 0; layer < layers_size; ++layer) {
if (obj->base.type == &mp_type_layer) { layer_obj_t *obj = MP_OBJ_TO_PTR(layers[layer]);
c = get_layer_pixel(obj, x, y); if (obj->base.type == &mp_type_layer) {
} else if (obj->base.type == &mp_type_text) { c = get_layer_pixel(obj, x, y);
c = get_text_pixel((text_obj_t *)obj, x, y); } else if (obj->base.type == &mp_type_text) {
c = get_text_pixel((text_obj_t *)obj, x, y);
}
if (c != TRANSPARENT) {
break;
}
} }
if (c != TRANSPARENT) { for (uint8_t xscale = 0; xscale < scale; ++xscale) {
buffer[index] = c; buffer[index] = c;
break; index += 1;
// The buffer is full, send it.
if (index >= buffer_size) {
display->send(display->bus, false, ((uint8_t*)buffer),
buffer_size * 2);
index = 0;
}
} }
} }
index += 1;
// The buffer is full, send it.
if (index >= buffer_size) {
display->send(display->bus, false, ((uint8_t*)buffer), buffer_size * 2);
index = 0;
}
} }
} }
// Send the remaining data. // Send the remaining data.

View File

@ -37,6 +37,6 @@
void render_stage(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, void render_stage(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,
mp_obj_t *layers, size_t layers_size, mp_obj_t *layers, size_t layers_size,
uint16_t *buffer, size_t buffer_size, uint16_t *buffer, size_t buffer_size,
displayio_display_obj_t *display); displayio_display_obj_t *display, uint8_t scale);
#endif // MICROPY_INCLUDED_SHARED_MODULE__STAGE #endif // MICROPY_INCLUDED_SHARED_MODULE__STAGE

View File

@ -24,13 +24,13 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
#include "shared-bindings/audioio/Mixer.h" #include "shared-bindings/audiocore/Mixer.h"
#include <stdint.h> #include <stdint.h>
#include "py/runtime.h" #include "py/runtime.h"
#include "shared-module/audioio/__init__.h" #include "shared-module/audiocore/__init__.h"
#include "shared-module/audioio/RawSample.h" #include "shared-module/audiocore/RawSample.h"
void common_hal_audioio_mixer_construct(audioio_mixer_obj_t* self, void common_hal_audioio_mixer_construct(audioio_mixer_obj_t* self,
uint8_t voice_count, uint8_t voice_count,

View File

@ -29,7 +29,7 @@
#include "py/obj.h" #include "py/obj.h"
#include "shared-module/audioio/__init__.h" #include "shared-module/audiocore/__init__.h"
typedef struct { typedef struct {
mp_obj_t sample; mp_obj_t sample;

View File

@ -24,11 +24,11 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
#include "shared-bindings/audioio/RawSample.h" #include "shared-bindings/audiocore/RawSample.h"
#include <stdint.h> #include <stdint.h>
#include "shared-module/audioio/RawSample.h" #include "shared-module/audiocore/RawSample.h"
void common_hal_audioio_rawsample_construct(audioio_rawsample_obj_t* self, void common_hal_audioio_rawsample_construct(audioio_rawsample_obj_t* self,
uint8_t* buffer, uint8_t* buffer,

View File

@ -29,7 +29,7 @@
#include "py/obj.h" #include "py/obj.h"
#include "shared-module/audioio/__init__.h" #include "shared-module/audiocore/__init__.h"
typedef struct { typedef struct {
mp_obj_base_t base; mp_obj_base_t base;

View File

@ -24,7 +24,7 @@
* THE SOFTWARE. * THE SOFTWARE.
*/ */
#include "shared-bindings/audioio/WaveFile.h" #include "shared-bindings/audiocore/WaveFile.h"
#include <stdint.h> #include <stdint.h>
#include <string.h> #include <string.h>
@ -32,7 +32,7 @@
#include "py/mperrno.h" #include "py/mperrno.h"
#include "py/runtime.h" #include "py/runtime.h"
#include "shared-module/audioio/WaveFile.h" #include "shared-module/audiocore/WaveFile.h"
#include "supervisor/shared/translate.h" #include "supervisor/shared/translate.h"
struct wave_format_chunk { struct wave_format_chunk {

View File

@ -29,7 +29,7 @@
#include "py/obj.h" #include "py/obj.h"
#include "shared-module/audioio/__init__.h" #include "shared-module/audiocore/__init__.h"
typedef struct { typedef struct {
mp_obj_base_t base; mp_obj_base_t base;

View File

@ -0,0 +1,125 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-module/audioio/__init__.h"
#include "py/obj.h"
#include "shared-bindings/audiocore/Mixer.h"
#include "shared-bindings/audiocore/RawSample.h"
#include "shared-bindings/audiocore/WaveFile.h"
#include "shared-module/audiocore/Mixer.h"
#include "shared-module/audiocore/RawSample.h"
#include "shared-module/audiocore/WaveFile.h"
uint32_t audiosample_sample_rate(mp_obj_t sample_obj) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
return sample->sample_rate;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
return file->sample_rate;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* mixer = MP_OBJ_TO_PTR(sample_obj);
return mixer->sample_rate;
}
return 16000;
}
uint8_t audiosample_bits_per_sample(mp_obj_t sample_obj) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
return sample->bits_per_sample;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
return file->bits_per_sample;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* mixer = MP_OBJ_TO_PTR(sample_obj);
return mixer->bits_per_sample;
}
return 8;
}
uint8_t audiosample_channel_count(mp_obj_t sample_obj) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
return sample->channel_count;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
return file->channel_count;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* mixer = MP_OBJ_TO_PTR(sample_obj);
return mixer->channel_count;
}
return 1;
}
void audiosample_reset_buffer(mp_obj_t sample_obj, bool single_channel, uint8_t audio_channel) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
audioio_rawsample_reset_buffer(sample, single_channel, audio_channel);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
audioio_wavefile_reset_buffer(file, single_channel, audio_channel);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
audioio_mixer_reset_buffer(file, single_channel, audio_channel);
}
}
audioio_get_buffer_result_t audiosample_get_buffer(mp_obj_t sample_obj,
bool single_channel,
uint8_t channel,
uint8_t** buffer, uint32_t* buffer_length) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
return audioio_rawsample_get_buffer(sample, single_channel, channel, buffer, buffer_length);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
return audioio_wavefile_get_buffer(file, single_channel, channel, buffer, buffer_length);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
return audioio_mixer_get_buffer(file, single_channel, channel, buffer, buffer_length);
}
return GET_BUFFER_DONE;
}
void audiosample_get_buffer_structure(mp_obj_t sample_obj, bool single_channel,
bool* single_buffer, bool* samples_signed,
uint32_t* max_buffer_length, uint8_t* spacing) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
audioio_rawsample_get_buffer_structure(sample, single_channel, single_buffer,
samples_signed, max_buffer_length, spacing);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
audioio_wavefile_get_buffer_structure(file, single_channel, single_buffer, samples_signed,
max_buffer_length, spacing);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
audioio_mixer_get_buffer_structure(file, single_channel, single_buffer, samples_signed,
max_buffer_length, spacing);
}
}

View File

@ -0,0 +1,53 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Dan Halbert for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#ifndef MICROPY_INCLUDED_SHARED_MODULE_AUDIOCORE__INIT__H
#define MICROPY_INCLUDED_SHARED_MODULE_AUDIOCORE__INIT__H
#include <stdbool.h>
#include <stdint.h>
#include "py/obj.h"
typedef enum {
GET_BUFFER_DONE, // No more data to read
GET_BUFFER_MORE_DATA, // More data to read.
GET_BUFFER_ERROR, // Error while reading data.
} audioio_get_buffer_result_t;
uint32_t audiosample_sample_rate(mp_obj_t sample_obj);
uint8_t audiosample_bits_per_sample(mp_obj_t sample_obj);
uint8_t audiosample_channel_count(mp_obj_t sample_obj);
void audiosample_reset_buffer(mp_obj_t sample_obj, bool single_channel, uint8_t audio_channel);
audioio_get_buffer_result_t audiosample_get_buffer(mp_obj_t sample_obj,
bool single_channel,
uint8_t channel,
uint8_t** buffer, uint32_t* buffer_length);
void audiosample_get_buffer_structure(mp_obj_t sample_obj, bool single_channel,
bool* single_buffer, bool* samples_signed,
uint32_t* max_buffer_length, uint8_t* spacing);
#endif // MICROPY_INCLUDED_SHARED_MODULE_AUDIOCORE__INIT__H

View File

@ -1,125 +0,0 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2018 Scott Shawcroft for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "shared-module/audioio/__init__.h"
#include "py/obj.h"
#include "shared-bindings/audioio/Mixer.h"
#include "shared-bindings/audioio/RawSample.h"
#include "shared-bindings/audioio/WaveFile.h"
#include "shared-module/audioio/Mixer.h"
#include "shared-module/audioio/RawSample.h"
#include "shared-module/audioio/WaveFile.h"
uint32_t audiosample_sample_rate(mp_obj_t sample_obj) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
return sample->sample_rate;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
return file->sample_rate;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* mixer = MP_OBJ_TO_PTR(sample_obj);
return mixer->sample_rate;
}
return 16000;
}
uint8_t audiosample_bits_per_sample(mp_obj_t sample_obj) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
return sample->bits_per_sample;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
return file->bits_per_sample;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* mixer = MP_OBJ_TO_PTR(sample_obj);
return mixer->bits_per_sample;
}
return 8;
}
uint8_t audiosample_channel_count(mp_obj_t sample_obj) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
return sample->channel_count;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
return file->channel_count;
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* mixer = MP_OBJ_TO_PTR(sample_obj);
return mixer->channel_count;
}
return 1;
}
void audiosample_reset_buffer(mp_obj_t sample_obj, bool single_channel, uint8_t audio_channel) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
audioio_rawsample_reset_buffer(sample, single_channel, audio_channel);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
audioio_wavefile_reset_buffer(file, single_channel, audio_channel);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
audioio_mixer_reset_buffer(file, single_channel, audio_channel);
}
}
audioio_get_buffer_result_t audiosample_get_buffer(mp_obj_t sample_obj,
bool single_channel,
uint8_t channel,
uint8_t** buffer, uint32_t* buffer_length) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
return audioio_rawsample_get_buffer(sample, single_channel, channel, buffer, buffer_length);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
return audioio_wavefile_get_buffer(file, single_channel, channel, buffer, buffer_length);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
return audioio_mixer_get_buffer(file, single_channel, channel, buffer, buffer_length);
}
return GET_BUFFER_DONE;
}
void audiosample_get_buffer_structure(mp_obj_t sample_obj, bool single_channel,
bool* single_buffer, bool* samples_signed,
uint32_t* max_buffer_length, uint8_t* spacing) {
if (MP_OBJ_IS_TYPE(sample_obj, &audioio_rawsample_type)) {
audioio_rawsample_obj_t* sample = MP_OBJ_TO_PTR(sample_obj);
audioio_rawsample_get_buffer_structure(sample, single_channel, single_buffer,
samples_signed, max_buffer_length, spacing);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_wavefile_type)) {
audioio_wavefile_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
audioio_wavefile_get_buffer_structure(file, single_channel, single_buffer, samples_signed,
max_buffer_length, spacing);
} else if (MP_OBJ_IS_TYPE(sample_obj, &audioio_mixer_type)) {
audioio_mixer_obj_t* file = MP_OBJ_TO_PTR(sample_obj);
audioio_mixer_get_buffer_structure(file, single_channel, single_buffer, samples_signed,
max_buffer_length, spacing);
}
}

View File

@ -27,27 +27,6 @@
#ifndef MICROPY_INCLUDED_SHARED_MODULE_AUDIOIO__INIT__H #ifndef MICROPY_INCLUDED_SHARED_MODULE_AUDIOIO__INIT__H
#define MICROPY_INCLUDED_SHARED_MODULE_AUDIOIO__INIT__H #define MICROPY_INCLUDED_SHARED_MODULE_AUDIOIO__INIT__H
#include <stdbool.h> #include "shared-module/audiocore/__init__.h"
#include <stdint.h>
#include "py/obj.h"
typedef enum {
GET_BUFFER_DONE, // No more data to read
GET_BUFFER_MORE_DATA, // More data to read.
GET_BUFFER_ERROR, // Error while reading data.
} audioio_get_buffer_result_t;
uint32_t audiosample_sample_rate(mp_obj_t sample_obj);
uint8_t audiosample_bits_per_sample(mp_obj_t sample_obj);
uint8_t audiosample_channel_count(mp_obj_t sample_obj);
void audiosample_reset_buffer(mp_obj_t sample_obj, bool single_channel, uint8_t audio_channel);
audioio_get_buffer_result_t audiosample_get_buffer(mp_obj_t sample_obj,
bool single_channel,
uint8_t channel,
uint8_t** buffer, uint32_t* buffer_length);
void audiosample_get_buffer_structure(mp_obj_t sample_obj, bool single_channel,
bool* single_buffer, bool* samples_signed,
uint32_t* max_buffer_length, uint8_t* spacing);
#endif // MICROPY_INCLUDED_SHARED_MODULE_AUDIOIO__INIT__H #endif // MICROPY_INCLUDED_SHARED_MODULE_AUDIOIO__INIT__H

View File

@ -44,7 +44,7 @@
void common_hal_displayio_display_construct(displayio_display_obj_t* self, 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, 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 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, 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, 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.depth = color_depth;
self->colorspace.grayscale = grayscale; self->colorspace.grayscale = grayscale;
self->colorspace.pixels_in_byte_share_row = pixels_in_byte_share_row; 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_column_command = set_column_command;
self->set_row_command = set_row_command; self->set_row_command = set_row_command;
self->write_ram_command = write_ram_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); 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) { if (root_group == NULL) {
root_group = &circuitpython_splash; root_group = &circuitpython_splash;
} }
if (root_group == self->current_group) { 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); displayio_group_update_transform(root_group, &self->transform);
root_group->in_group = true;
self->current_group = root_group; self->current_group = root_group;
self->full_refresh = true; self->full_refresh = true;
common_hal_displayio_display_refresh_soon(self); common_hal_displayio_display_refresh_soon(self);
return true;
} }
void common_hal_displayio_display_refresh_soon(displayio_display_obj_t* self) { 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) { if (self->colorspace.depth < 8) {
uint8_t pixels_per_byte = 8 / self->colorspace.depth; uint8_t pixels_per_byte = 8 / self->colorspace.depth;
if (self->colorspace.pixels_in_byte_share_row) { if (self->colorspace.pixels_in_byte_share_row) {
x1 /= pixels_per_byte; x1 /= pixels_per_byte * self->colorspace.bytes_per_cell;
x2 /= pixels_per_byte; x2 /= pixels_per_byte * self->colorspace.bytes_per_cell;
} else { } else {
y1 /= pixels_per_byte; y1 /= pixels_per_byte * self->colorspace.bytes_per_cell;
y2 /= pixels_per_byte; 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) { if (self->single_byte_bounds) {
data[data_length++] = x1 + self->colstart; data[data_length++] = x1 + self->colstart;
data[data_length++] = x2 - 1 + self->colstart; data[data_length++] = x2 - 1 + self->colstart;
data_length += 2;
} else { } else {
x1 += self->colstart; x1 += self->colstart;
x2 += self->colstart - 1; 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 // Expand the area if we have multiple pixels per byte and we need to byte
// align the bounds. // align the bounds.
if (self->colorspace.depth < 8) { 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 (self->colorspace.pixels_in_byte_share_row) {
if (clipped->x1 % pixels_per_byte != 0) { if (clipped->x1 % pixels_per_byte != 0) {
clipped->x1 -= clipped->x1 % pixels_per_byte; clipped->x1 -= clipped->x1 % pixels_per_byte;

View File

@ -36,6 +36,8 @@ typedef struct {
uint8_t depth; uint8_t depth;
bool grayscale; bool grayscale;
bool pixels_in_byte_share_row; bool pixels_in_byte_share_row;
uint8_t bytes_per_cell;
bool reverse_pixels_in_byte;
uint8_t hue; uint8_t hue;
} _displayio_colorspace_t; } _displayio_colorspace_t;

View File

@ -436,7 +436,11 @@ bool displayio_tilegrid_fill_area(displayio_tilegrid_t *self, const _displayio_c
// asm("bkpt"); // 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;
} }
} }
} }

View File

@ -209,35 +209,35 @@ void reset_displays(void) {
} }
} }
} else if (displays[i].i2cdisplay_bus.base.type == &displayio_i2cdisplay_type) { } else if (displays[i].i2cdisplay_bus.base.type == &displayio_i2cdisplay_type) {
displayio_i2cdisplay_obj_t* i2c = &displays[i].i2cdisplay_bus; displayio_i2cdisplay_obj_t* i2c = &displays[i].i2cdisplay_bus;
if (((uint32_t) i2c->bus) < ((uint32_t) &displays) || if (((uint32_t) i2c->bus) < ((uint32_t) &displays) ||
((uint32_t) i2c->bus) > ((uint32_t) &displays + CIRCUITPY_DISPLAY_LIMIT)) { ((uint32_t) i2c->bus) > ((uint32_t) &displays + CIRCUITPY_DISPLAY_LIMIT)) {
busio_i2c_obj_t* original_i2c = i2c->bus; busio_i2c_obj_t* original_i2c = i2c->bus;
#if BOARD_I2C #if BOARD_I2C
// We don't need to move original_i2c if it is the board.SPI object because it is // 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 // statically allocated already. (Doing so would also make it impossible to reference in
// a subsequent VM run.) // a subsequent VM run.)
if (original_i2c == common_hal_board_get_i2c()) { if (original_i2c == common_hal_board_get_i2c()) {
continue; continue;
} }
#endif #endif
memcpy(&i2c->inline_bus, original_i2c, sizeof(busio_i2c_obj_t)); memcpy(&i2c->inline_bus, original_i2c, sizeof(busio_i2c_obj_t));
i2c->bus = &i2c->inline_bus; i2c->bus = &i2c->inline_bus;
// Check for other displays that use the same i2c bus and swap them too. // 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++) { for (uint8_t j = i + 1; j < CIRCUITPY_DISPLAY_LIMIT; j++) {
if (displays[i].i2cdisplay_bus.base.type == &displayio_i2cdisplay_type && if (displays[i].i2cdisplay_bus.base.type == &displayio_i2cdisplay_type &&
displays[i].i2cdisplay_bus.bus == original_i2c) { displays[i].i2cdisplay_bus.bus == original_i2c) {
displays[i].i2cdisplay_bus.bus = &i2c->inline_bus; displays[i].i2cdisplay_bus.bus = &i2c->inline_bus;
}
} }
} }
} }
} } else {
// Not an active display.
for (uint8_t i = 0; i < CIRCUITPY_DISPLAY_LIMIT; i++) {
if (displays[i].display.base.type == NULL) {
continue; continue;
} }
// Reset the displayed group. Only the first will get the terminal but
// that's ok.
displayio_display_obj_t* display = &displays[i].display; displayio_display_obj_t* display = &displays[i].display;
display->auto_brightness = true; display->auto_brightness = true;
common_hal_displayio_display_show(display, &circuitpython_splash); common_hal_displayio_display_show(display, &circuitpython_splash);

View File

@ -229,5 +229,6 @@ displayio_group_t circuitpython_splash = {
.size = 2, .size = 2,
.max_size = 2, .max_size = 2,
.children = splash_children, .children = splash_children,
.item_removed = false .item_removed = false,
.in_group = false
}; };

View File

@ -0,0 +1,51 @@
#! /usr/bin/env python3
import sys
import os
import json
import build_board_info
# Get boards in json format
boards_info_json = build_board_info.get_board_mapping()
# Get all the boards out of the json format
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__)
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:
# 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:
break
else:
pass
# All the travis_boards elements must be on info_boards
info_boards.sort()
travis_boards.sort()
missing_boards = set(info_boards) - set(travis_boards)
if missing_boards:
print('Boards missing in TRAVIS_BOARDS:')
for board in missing_boards:
print(board)
sys.exit(1)