translations
This commit is contained in:
commit
9f5520135c
5
.github/workflows/build.yml
vendored
5
.github/workflows/build.yml
vendored
@ -180,10 +180,12 @@ jobs:
|
|||||||
- "feather_nrf52840_express"
|
- "feather_nrf52840_express"
|
||||||
- "feather_radiofruit_zigbee"
|
- "feather_radiofruit_zigbee"
|
||||||
- "feather_stm32f405_express"
|
- "feather_stm32f405_express"
|
||||||
|
- "fluff_m0"
|
||||||
- "gemma_m0"
|
- "gemma_m0"
|
||||||
- "grandcentral_m4_express"
|
- "grandcentral_m4_express"
|
||||||
- "hallowing_m0_express"
|
- "hallowing_m0_express"
|
||||||
- "hallowing_m4_express"
|
- "hallowing_m4_express"
|
||||||
|
- "hiibot_bluefi"
|
||||||
- "imxrt1010_evk"
|
- "imxrt1010_evk"
|
||||||
- "imxrt1020_evk"
|
- "imxrt1020_evk"
|
||||||
- "imxrt1060_evk"
|
- "imxrt1060_evk"
|
||||||
@ -389,9 +391,8 @@ jobs:
|
|||||||
id: idf-cache
|
id: idf-cache
|
||||||
with:
|
with:
|
||||||
path: ${{ github.workspace }}/.idf_tools
|
path: ${{ github.workspace }}/.idf_tools
|
||||||
key: ${{ runner.os }}-idf-tools-${{ hashFiles('.git/modules/ports/esp32s2/esp-idf/HEAD') }}
|
key: ${{ runner.os }}-idf-tools-${{ hashFiles('.git/modules/ports/esp32s2/esp-idf/HEAD') }}-20200523
|
||||||
- name: Install IDF tools
|
- name: Install IDF tools
|
||||||
if: steps.idf-cache.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
run: |
|
||||||
$IDF_PATH/tools/idf_tools.py --non-interactive install required
|
$IDF_PATH/tools/idf_tools.py --non-interactive install required
|
||||||
$IDF_PATH/tools/idf_tools.py --non-interactive install cmake
|
$IDF_PATH/tools/idf_tools.py --non-interactive install cmake
|
||||||
|
6
Makefile
6
Makefile
@ -210,6 +210,12 @@ locale/circuitpython.pot: all-source
|
|||||||
translate: locale/circuitpython.pot
|
translate: locale/circuitpython.pot
|
||||||
for po in $(shell ls locale/*.po); do msgmerge -U $$po -s --no-fuzzy-matching --add-location=file locale/circuitpython.pot; done
|
for po in $(shell ls locale/*.po); do msgmerge -U $$po -s --no-fuzzy-matching --add-location=file locale/circuitpython.pot; done
|
||||||
|
|
||||||
|
merge-translate:
|
||||||
|
git merge HEAD 1>&2 2> /dev/null; test $$? -eq 128
|
||||||
|
rm locale/*~ || true
|
||||||
|
git checkout --ours -- locale/*
|
||||||
|
make translate
|
||||||
|
|
||||||
check-translate: locale/circuitpython.pot $(wildcard locale/*.po)
|
check-translate: locale/circuitpython.pot $(wildcard locale/*.po)
|
||||||
$(PYTHON) tools/check_translations.py $^
|
$(PYTHON) tools/check_translations.py $^
|
||||||
|
|
||||||
|
@ -24,49 +24,11 @@
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
SUPPORTED_PORTS = ["atmel-samd", "nrf", "stm", "mimxrt10xx"]
|
SUPPORTED_PORTS = ['atmel-samd', 'esp32s2', 'litex', 'mimxrt10xx', 'nrf', 'stm']
|
||||||
|
|
||||||
|
|
||||||
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():
|
def get_shared_bindings():
|
||||||
""" Get a list of modules in shared-bindings based on folder names
|
""" Get a list of modules in shared-bindings based on folder names
|
||||||
@ -117,149 +79,64 @@ def build_module_map():
|
|||||||
"excluded": {}
|
"excluded": {}
|
||||||
}
|
}
|
||||||
|
|
||||||
#print(base)
|
|
||||||
return base
|
return base
|
||||||
|
|
||||||
|
def get_settings_from_makefile(port_dir, board_name):
|
||||||
|
""" Invoke make in a mode which prints the database, then parse it for
|
||||||
|
settings.
|
||||||
|
|
||||||
def get_excluded_boards(base):
|
This means that the effect of all Makefile directives is taken
|
||||||
""" Cycles through each board's `mpconfigboard.mk` file to determine
|
into account, without having to re-encode the logic that sets them
|
||||||
if each module is included or not. Boards are selected by existence
|
in this script, something that has proved error-prone
|
||||||
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())
|
contents = subprocess.run(
|
||||||
|
["make", "-C", port_dir, f"BOARD={board_name}", "-qp", "print-CC"],
|
||||||
|
encoding="utf-8",
|
||||||
|
errors="replace",
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE
|
||||||
|
)
|
||||||
|
# Make signals errors with exit status 2; 0 and 1 are "non-error" statuses
|
||||||
|
if contents.returncode not in (0, 1):
|
||||||
|
error_msg = (
|
||||||
|
f"Invoking '{' '.join(contents.args)}' exited with "
|
||||||
|
f"{contents.returncode}: {contents.stderr}"
|
||||||
|
)
|
||||||
|
raise RuntimeError(error_msg)
|
||||||
|
|
||||||
re_board_chip = None
|
settings = {}
|
||||||
chip_keyword = None
|
for line in contents.stdout.split('\n'):
|
||||||
for port in SUPPORTED_PORTS:
|
m = re.match(r'^([A-Z][A-Z0-9_]*) = (.*)$', line)
|
||||||
# each port appears to use its own define for the chipset
|
if m:
|
||||||
if port in ["atmel-samd"]:
|
settings[m.group(1)] = m.group(2)
|
||||||
re_board_chip = re.compile("CHIP_FAMILY\s=\s(\w+)")
|
|
||||||
chip_keyword = "CHIP_FAMILY"
|
|
||||||
elif port in ["nrf"]:
|
|
||||||
re_board_chip = re.compile(r"MCU_VARIANT\s=\s(\w+)")
|
|
||||||
elif port in ["stm"]:
|
|
||||||
re_board_chip = re.compile(r"MCU_SERIES\s*=\s*(\w+)")
|
|
||||||
chip_keyword = "MCU_SERIES"
|
|
||||||
|
|
||||||
port_dir = "ports/{}".format(port)
|
return settings
|
||||||
|
|
||||||
port_config_contents = ""
|
def lookup_setting(settings, key, default=''):
|
||||||
with open(os.path.join(port_dir, "mpconfigport.mk")) as port_config:
|
while True:
|
||||||
port_config_contents = port_config.readlines()
|
value = settings.get(key, default)
|
||||||
port_config = parse_port_config(port_config_contents, chip_keyword)
|
if not value.startswith('$'):
|
||||||
|
break
|
||||||
for entry in os.scandir(os.path.join(port_dir, "boards")):
|
key = value[2:-1]
|
||||||
if not entry.is_dir():
|
return value
|
||||||
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)
|
|
||||||
if not board_chip:
|
|
||||||
board_chip = "Unknown Chip"
|
|
||||||
else:
|
|
||||||
#print(entry.name, board_chip.group(1))
|
|
||||||
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])
|
|
||||||
|
|
||||||
check_dependent_modules = dict()
|
|
||||||
for module in modules:
|
|
||||||
board_is_excluded = False
|
|
||||||
# check if board turns off `FULL_BUILD`. if yes, and current
|
|
||||||
# module is marked as `FULL_BUILD`, board is excluded
|
|
||||||
small_build = re.search("CIRCUITPY_FULL_BUILD = 0", 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 = r"CIRCUITPY_{}\s=\s(\w)".format(module.upper())
|
|
||||||
find_module = re.search(re_pattern, contents)
|
|
||||||
if not find_module:
|
|
||||||
if base[module]["default_value"].isdigit():
|
|
||||||
# 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:
|
|
||||||
# this module is dependent on another module. add it
|
|
||||||
# to the list to check after processing all other modules.
|
|
||||||
# only need to check exclusion if it isn't already excluded.
|
|
||||||
if (not board_is_excluded and
|
|
||||||
base[module]["default_value"] not in [
|
|
||||||
"None",
|
|
||||||
"CIRCUITPY_DEFAULT_BUILD"
|
|
||||||
]):
|
|
||||||
check_dependent_modules[module] = base[module]["default_value"]
|
|
||||||
else:
|
|
||||||
board_is_excluded = find_module.group(1) == "0"
|
|
||||||
|
|
||||||
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]
|
|
||||||
|
|
||||||
for module in check_dependent_modules:
|
|
||||||
depend_results = set()
|
|
||||||
|
|
||||||
parents = check_dependent_modules[module].split("CIRCUITPY_")
|
|
||||||
parents = [item.strip(", ").lower() for item in parents if item]
|
|
||||||
|
|
||||||
for parent in parents:
|
|
||||||
if parent in base:
|
|
||||||
if (board_chip in base[parent]["excluded"] and
|
|
||||||
entry.name in base[parent]["excluded"][board_chip]):
|
|
||||||
depend_results.add(False)
|
|
||||||
else:
|
|
||||||
depend_results.add(True)
|
|
||||||
|
|
||||||
# only exclude the module if there were zero parents enabled
|
|
||||||
# as determined by the 'depend_results' set.
|
|
||||||
if not any(depend_results):
|
|
||||||
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():
|
def support_matrix_by_board():
|
||||||
""" Compiles a list of the available core modules available for each
|
""" Compiles a list of the available core modules available for each
|
||||||
board.
|
board.
|
||||||
"""
|
"""
|
||||||
base = build_module_map()
|
base = build_module_map()
|
||||||
base_with_exclusions = get_excluded_boards(base)
|
|
||||||
|
|
||||||
boards = dict()
|
boards = dict()
|
||||||
for port in SUPPORTED_PORTS:
|
for port in SUPPORTED_PORTS:
|
||||||
|
|
||||||
port_dir = "ports/{}/boards".format(port)
|
port_dir = "ports/{}/boards".format(port)
|
||||||
for entry in os.scandir(port_dir):
|
for entry in os.scandir(port_dir):
|
||||||
if not entry.is_dir():
|
if not entry.is_dir():
|
||||||
continue
|
continue
|
||||||
board_modules = []
|
board_modules = []
|
||||||
|
|
||||||
board_name = entry.name
|
settings = get_settings_from_makefile(f'ports/{port}', entry.name)
|
||||||
board_contents = ""
|
|
||||||
with open(os.path.join(entry.path, "mpconfigboard.h")) as get_name:
|
with open(os.path.join(entry.path, "mpconfigboard.h")) as get_name:
|
||||||
board_contents = get_name.read()
|
board_contents = get_name.read()
|
||||||
board_name_re = re.search("(?<=MICROPY_HW_BOARD_NAME)\s+(.+)",
|
board_name_re = re.search("(?<=MICROPY_HW_BOARD_NAME)\s+(.+)",
|
||||||
@ -267,18 +144,15 @@ def support_matrix_by_board():
|
|||||||
if board_name_re:
|
if board_name_re:
|
||||||
board_name = board_name_re.group(1).strip('"')
|
board_name = board_name_re.group(1).strip('"')
|
||||||
|
|
||||||
for module in base_with_exclusions.keys():
|
board_modules = []
|
||||||
#print(module)
|
for module in base:
|
||||||
board_has_module = True
|
key = f'CIRCUITPY_{module.upper()}'
|
||||||
if base_with_exclusions[module]["excluded"]:
|
if int(lookup_setting(settings, key, '0')):
|
||||||
for port in base_with_exclusions[module]["excluded"].values():
|
board_modules.append(base[module]['name'])
|
||||||
#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)
|
boards[board_name] = sorted(board_modules)
|
||||||
|
|
||||||
#print(json.dumps(boards, indent=2))
|
#print(json.dumps(boards, indent=2))
|
||||||
return boards
|
return boards
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
print(json.dumps(support_matrix_by_board(), indent=2))
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit dc5445e2f45cb348a44fe24fc1be4bc8b5ba5bab
|
Subproject commit 76bf96bcb0c12ba241ee4ecc175afb257e550d19
|
10
locale/ID.po
10
locale/ID.po
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-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"
|
||||||
@ -1086,10 +1086,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1253,6 +1249,10 @@ msgstr ""
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "Pin tidak mempunya kemampuan untuk ADC (Analog Digital Converter)"
|
msgstr "Pin tidak mempunya kemampuan untuk ADC (Analog Digital Converter)"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-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"
|
||||||
@ -1075,10 +1075,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1241,6 +1237,10 @@ msgstr ""
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
10
locale/cs.po
10
locale/cs.po
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-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"
|
||||||
@ -1075,10 +1075,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1241,6 +1237,10 @@ msgstr ""
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-0700\n"
|
||||||
"PO-Revision-Date: 2020-05-18 02:48+0000\n"
|
"PO-Revision-Date: 2020-05-18 02:48+0000\n"
|
||||||
"Last-Translator: Jeff Epler <jepler@gmail.com>\n"
|
"Last-Translator: Jeff Epler <jepler@gmail.com>\n"
|
||||||
"Language-Team: German <https://later.unpythonic.net/projects/circuitpython/"
|
"Language-Team: German <https://later.unpythonic.net/projects/circuitpython/"
|
||||||
@ -1091,10 +1091,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr "Kein CCCD für diese Charakteristik"
|
msgstr "Kein CCCD für diese Charakteristik"
|
||||||
@ -1263,6 +1259,10 @@ msgstr "Zugang verweigert"
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "Pin hat keine ADC Funktionalität"
|
msgstr "Pin hat keine ADC Funktionalität"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-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"
|
||||||
@ -1075,10 +1075,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1241,6 +1237,10 @@ msgstr ""
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-0700\n"
|
||||||
"PO-Revision-Date: 2020-03-30 22:11+0000\n"
|
"PO-Revision-Date: 2020-03-30 22:11+0000\n"
|
||||||
"Last-Translator: Tannewt <devnull@unpythonic.net>\n"
|
"Last-Translator: Tannewt <devnull@unpythonic.net>\n"
|
||||||
"Language-Team: English <https://later.unpythonic.net/projects/circuitpython/"
|
"Language-Team: English <https://later.unpythonic.net/projects/circuitpython/"
|
||||||
@ -1084,10 +1084,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1250,6 +1246,10 @@ msgstr ""
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "Belay that! Th' Pin be not ADC capable"
|
msgstr "Belay that! Th' Pin be not ADC capable"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
10
locale/es.po
10
locale/es.po
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-0700\n"
|
||||||
"PO-Revision-Date: 2020-05-17 20:56+0000\n"
|
"PO-Revision-Date: 2020-05-17 20:56+0000\n"
|
||||||
"Last-Translator: Jeff Epler <jepler@gmail.com>\n"
|
"Last-Translator: Jeff Epler <jepler@gmail.com>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
@ -1084,10 +1084,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1256,6 +1252,10 @@ msgstr "Permiso denegado"
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "Pin no tiene capacidad ADC"
|
msgstr "Pin no tiene capacidad ADC"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-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"
|
||||||
@ -1091,10 +1091,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1261,6 +1257,10 @@ msgstr "Walang pahintulot"
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "Ang pin ay walang kakayahan sa ADC"
|
msgstr "Ang pin ay walang kakayahan sa ADC"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
21
locale/fr.po
21
locale/fr.po
@ -8,9 +8,9 @@ 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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-0700\n"
|
||||||
"PO-Revision-Date: 2020-05-17 20:56+0000\n"
|
"PO-Revision-Date: 2020-05-26 19:37+0000\n"
|
||||||
"Last-Translator: Anonymous <noreply@weblate.org>\n"
|
"Last-Translator: Jeff Epler <jepler@gmail.com>\n"
|
||||||
"Language-Team: French <https://later.unpythonic.net/projects/circuitpython/"
|
"Language-Team: French <https://later.unpythonic.net/projects/circuitpython/"
|
||||||
"circuitpython-master/fr/>\n"
|
"circuitpython-master/fr/>\n"
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
@ -1106,10 +1106,6 @@ msgstr "Doit utiliser un multiple de 6 broches RVB, pas %d"
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr "Nom trop long"
|
msgstr "Nom trop long"
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr "Étape négative non prise en charge"
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr "Pas de CCCD pour cette caractéristique"
|
msgstr "Pas de CCCD pour cette caractéristique"
|
||||||
@ -1282,6 +1278,10 @@ msgstr "Permission refusée"
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "La broche ne peut être utilisée pour l'ADC"
|
msgstr "La broche ne peut être utilisée pour l'ADC"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr "La broche doit prendre en charge les interruptions matérielles"
|
msgstr "La broche doit prendre en charge les interruptions matérielles"
|
||||||
@ -1307,7 +1307,7 @@ msgstr "Ainsi que tout autre module présent sur le système de fichiers\n"
|
|||||||
|
|
||||||
#: shared-module/vectorio/Polygon.c
|
#: shared-module/vectorio/Polygon.c
|
||||||
msgid "Polygon needs at least 3 points"
|
msgid "Polygon needs at least 3 points"
|
||||||
msgstr ""
|
msgstr "Polygone a besoin d’au moins 3 points"
|
||||||
|
|
||||||
#: shared-bindings/ps2io/Ps2.c
|
#: shared-bindings/ps2io/Ps2.c
|
||||||
msgid "Pop from an empty Ps2 buffer"
|
msgid "Pop from an empty Ps2 buffer"
|
||||||
@ -1533,7 +1533,7 @@ msgstr "La largeur de la tuile doit diviser exactement la largeur de l'image"
|
|||||||
#: ports/nrf/common-hal/_bleio/Adapter.c
|
#: ports/nrf/common-hal/_bleio/Adapter.c
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Timeout is too long: Maximum timeout length is %d seconds"
|
msgid "Timeout is too long: Maximum timeout length is %d seconds"
|
||||||
msgstr ""
|
msgstr "Le délai est trop long : le délai maximal est de %d secondes"
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
|
||||||
msgid "Too many channels in sample."
|
msgid "Too many channels in sample."
|
||||||
@ -3548,6 +3548,9 @@ msgstr "'step' nul"
|
|||||||
#~ msgid "Must be a Group subclass."
|
#~ msgid "Must be a Group subclass."
|
||||||
#~ msgstr "Doit être une sous-classe de 'Group'"
|
#~ msgstr "Doit être une sous-classe de 'Group'"
|
||||||
|
|
||||||
|
#~ msgid "Negative step not supported"
|
||||||
|
#~ msgstr "Étape négative non prise en charge"
|
||||||
|
|
||||||
#~ msgid "No PulseIn support for %q"
|
#~ msgid "No PulseIn support for %q"
|
||||||
#~ msgstr "Pas de support de PulseIn pour %q"
|
#~ msgstr "Pas de support de PulseIn pour %q"
|
||||||
|
|
||||||
|
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-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"
|
||||||
@ -1095,10 +1095,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1270,6 +1266,10 @@ msgstr "Permesso negato"
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "Il pin non ha capacità di ADC"
|
msgstr "Il pin non ha capacità di ADC"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
10
locale/ko.po
10
locale/ko.po
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-0700\n"
|
||||||
"PO-Revision-Date: 2019-05-06 14:22-0700\n"
|
"PO-Revision-Date: 2019-05-06 14:22-0700\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: \n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -1079,10 +1079,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1245,6 +1241,10 @@ msgstr ""
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
13
locale/nl.po
13
locale/nl.po
@ -7,7 +7,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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-0700\n"
|
||||||
"PO-Revision-Date: 2020-05-19 17:08+0000\n"
|
"PO-Revision-Date: 2020-05-19 17:08+0000\n"
|
||||||
"Last-Translator: Dustin Watts <dustin_watts@yahoo.com>\n"
|
"Last-Translator: Dustin Watts <dustin_watts@yahoo.com>\n"
|
||||||
"Language-Team: none\n"
|
"Language-Team: none\n"
|
||||||
@ -1095,10 +1095,6 @@ msgstr "Een meervoud van 6 rgb pinnen moet worden gebruikt, niet %d"
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr "Naam te lang"
|
msgstr "Naam te lang"
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr "Negatieve stappen niet ondersteund"
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr "Geen CCCD voor deze Characteristic"
|
msgstr "Geen CCCD voor deze Characteristic"
|
||||||
@ -1270,6 +1266,10 @@ msgstr "Toegang geweigerd"
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "Pin heeft geen ADC mogelijkheden"
|
msgstr "Pin heeft geen ADC mogelijkheden"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr "Pin moet hardware interrupts ondersteunen"
|
msgstr "Pin moet hardware interrupts ondersteunen"
|
||||||
@ -3269,3 +3269,6 @@ msgstr ""
|
|||||||
#: py/objrange.c
|
#: py/objrange.c
|
||||||
msgid "zero step"
|
msgid "zero step"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Negative step not supported"
|
||||||
|
#~ msgstr "Negatieve stappen niet ondersteund"
|
||||||
|
10
locale/pl.po
10
locale/pl.po
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-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"
|
||||||
@ -1080,10 +1080,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1246,6 +1242,10 @@ msgstr "Odmowa dostępu"
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "Nóżka nie obsługuje ADC"
|
msgstr "Nóżka nie obsługuje ADC"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-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"
|
||||||
@ -1087,10 +1087,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1256,6 +1252,10 @@ msgstr "Permissão negada"
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "O pino não tem recursos de ADC"
|
msgstr "O pino não tem recursos de ADC"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
13
locale/sv.po
13
locale/sv.po
@ -7,7 +7,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: 2020-05-19 15:01+0800\n"
|
"POT-Creation-Date: 2020-05-26 13:09-0700\n"
|
||||||
"PO-Revision-Date: 2020-05-20 18:32+0000\n"
|
"PO-Revision-Date: 2020-05-20 18:32+0000\n"
|
||||||
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
|
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -1095,10 +1095,6 @@ msgstr "Måste använda ett multipel av 6 rgb-pinnar, inte %d"
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr "Name är för långt"
|
msgstr "Name är för långt"
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr "Negativt step stöds inte"
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr "Ingen CCCD för denna karaktäristik"
|
msgstr "Ingen CCCD för denna karaktäristik"
|
||||||
@ -1268,6 +1264,10 @@ msgstr "Åtkomst nekad"
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "Pinnen har inte ADC-funktionalitet"
|
msgstr "Pinnen har inte ADC-funktionalitet"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr "Pinnen måste stödja hårdvaruavbrott"
|
msgstr "Pinnen måste stödja hårdvaruavbrott"
|
||||||
@ -3278,5 +3278,8 @@ msgstr "y-värde utanför intervall"
|
|||||||
msgid "zero step"
|
msgid "zero step"
|
||||||
msgstr "noll steg"
|
msgstr "noll steg"
|
||||||
|
|
||||||
|
#~ msgid "Negative step not supported"
|
||||||
|
#~ msgstr "Negativt step stöds inte"
|
||||||
|
|
||||||
#~ msgid "empty %q list"
|
#~ msgid "empty %q list"
|
||||||
#~ msgstr "tom %q-lista"
|
#~ msgstr "tom %q-lista"
|
||||||
|
@ -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: 2020-05-21 11:18-0400\n"
|
"POT-Creation-Date: 2020-05-26 13:09-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"
|
||||||
@ -1088,10 +1088,6 @@ msgstr ""
|
|||||||
msgid "Name too long"
|
msgid "Name too long"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: shared-bindings/_pixelbuf/PixelBuf.c
|
|
||||||
msgid "Negative step not supported"
|
|
||||||
msgstr "Bù zhīchí fù bù"
|
|
||||||
|
|
||||||
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
#: ports/nrf/common-hal/_bleio/Characteristic.c
|
||||||
msgid "No CCCD for this Characteristic"
|
msgid "No CCCD for this Characteristic"
|
||||||
msgstr "Zhège tèzhēng méiyǒu CCCD"
|
msgstr "Zhège tèzhēng méiyǒu CCCD"
|
||||||
@ -1260,6 +1256,10 @@ msgstr "Quánxiàn bèi jùjué"
|
|||||||
msgid "Pin does not have ADC capabilities"
|
msgid "Pin does not have ADC capabilities"
|
||||||
msgstr "Pin méiyǒu ADC nénglì"
|
msgstr "Pin méiyǒu ADC nénglì"
|
||||||
|
|
||||||
|
#: shared-bindings/digitalio/DigitalInOut.c
|
||||||
|
msgid "Pin is input only"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ports/atmel-samd/common-hal/countio/Counter.c
|
#: ports/atmel-samd/common-hal/countio/Counter.c
|
||||||
msgid "Pin must support hardware interrupts"
|
msgid "Pin must support hardware interrupts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -3446,6 +3446,9 @@ msgstr "líng bù"
|
|||||||
#~ msgid "Must be a Group subclass."
|
#~ msgid "Must be a Group subclass."
|
||||||
#~ msgstr "Bìxū shì fēnzǔ zi lèi."
|
#~ msgstr "Bìxū shì fēnzǔ zi lèi."
|
||||||
|
|
||||||
|
#~ msgid "Negative step not supported"
|
||||||
|
#~ msgstr "Bù zhīchí fù bù"
|
||||||
|
|
||||||
#~ msgid "No default I2C bus"
|
#~ msgid "No default I2C bus"
|
||||||
#~ msgstr "Méiyǒu mòrèn I2C gōnggòng qìchē"
|
#~ msgstr "Méiyǒu mòrèn I2C gōnggòng qìchē"
|
||||||
|
|
||||||
|
@ -9,5 +9,6 @@ CHIP_FAMILY = samd21
|
|||||||
INTERNAL_FLASH_FILESYSTEM = 1
|
INTERNAL_FLASH_FILESYSTEM = 1
|
||||||
LONGINT_IMPL = NONE
|
LONGINT_IMPL = NONE
|
||||||
CIRCUITPY_FULL_BUILD = 0
|
CIRCUITPY_FULL_BUILD = 0
|
||||||
|
CIRCUITPY_RTC = 0
|
||||||
|
|
||||||
SUPEROPT_GC = 0
|
SUPEROPT_GC = 0
|
||||||
|
38
ports/atmel-samd/boards/fluff_m0/board.c
Normal file
38
ports/atmel-samd/boards/fluff_m0/board.c
Normal 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) {
|
||||||
|
}
|
20
ports/atmel-samd/boards/fluff_m0/mpconfigboard.h
Normal file
20
ports/atmel-samd/boards/fluff_m0/mpconfigboard.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#define MICROPY_HW_BOARD_NAME "Fluff M0"
|
||||||
|
#define MICROPY_HW_MCU_NAME "samd21e18"
|
||||||
|
|
||||||
|
#define MICROPY_PORT_A (0)
|
||||||
|
#define MICROPY_PORT_B (0)
|
||||||
|
#define MICROPY_PORT_C (0)
|
||||||
|
|
||||||
|
#define DEFAULT_I2C_BUS_SCL (&pin_PA23)
|
||||||
|
#define DEFAULT_I2C_BUS_SDA (&pin_PA22)
|
||||||
|
|
||||||
|
#define DEFAULT_SPI_BUS_SCK (&pin_PA30)
|
||||||
|
#define DEFAULT_SPI_BUS_MOSI (&pin_PA00)
|
||||||
|
#define DEFAULT_SPI_BUS_MISO (&pin_PA31)
|
||||||
|
|
||||||
|
#define DEFAULT_UART_BUS_RX (&pin_PA11)
|
||||||
|
#define DEFAULT_UART_BUS_TX (&pin_PA10)
|
||||||
|
|
||||||
|
// USB is always used internally so skip the pin objects for it.
|
||||||
|
#define IGNORE_PIN_PA24 1
|
||||||
|
#define IGNORE_PIN_PA25 1
|
18
ports/atmel-samd/boards/fluff_m0/mpconfigboard.mk
Normal file
18
ports/atmel-samd/boards/fluff_m0/mpconfigboard.mk
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
USB_VID = 0x239A
|
||||||
|
USB_PID = 0x80B0
|
||||||
|
USB_PRODUCT = "Fluff M0"
|
||||||
|
USB_MANUFACTURER = "Radomir Dopieralski"
|
||||||
|
|
||||||
|
CHIP_VARIANT = SAMD21E18A
|
||||||
|
CHIP_FAMILY = samd21
|
||||||
|
|
||||||
|
INTERNAL_FLASH_FILESYSTEM = 1
|
||||||
|
LONGINT_IMPL = NONE
|
||||||
|
CIRCUITPY_FULL_BUILD = 0
|
||||||
|
|
||||||
|
SUPEROPT_GC = 0
|
||||||
|
|
||||||
|
CFLAGS_BOARD = --param max-inline-insns-auto=15
|
||||||
|
ifeq ($(TRANSLATION), zh_Latn_pinyin)
|
||||||
|
CFLAGS_INLINE_LIMIT = 35
|
||||||
|
endif
|
38
ports/atmel-samd/boards/fluff_m0/pins.c
Normal file
38
ports/atmel-samd/boards/fluff_m0/pins.c
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#include "shared-bindings/board/__init__.h"
|
||||||
|
|
||||||
|
STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_AREF), MP_ROM_PTR(&pin_PA03) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA02) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PA06) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_PA08) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_PA04) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_PA05) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_PA09) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_PA07) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_PA31) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_PA00) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_PA30) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_PA11) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_PA11) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_PA10) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_PA10) },
|
||||||
|
|
||||||
|
{ 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_D5), MP_ROM_PTR(&pin_PA15) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_PA01) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_PA14) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_PA18) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_PA16) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_PA19) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_PA17) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_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);
|
@ -9,5 +9,8 @@ CHIP_FAMILY = samd21
|
|||||||
INTERNAL_FLASH_FILESYSTEM = 1
|
INTERNAL_FLASH_FILESYSTEM = 1
|
||||||
LONGINT_IMPL = NONE
|
LONGINT_IMPL = NONE
|
||||||
CIRCUITPY_FULL_BUILD = 0
|
CIRCUITPY_FULL_BUILD = 0
|
||||||
|
CIRCUITPY_ROTARYIO = 0
|
||||||
|
CIRCUITPY_COUNTIO = 0
|
||||||
|
CIRCUITPY_RTC = 0
|
||||||
|
|
||||||
SUPEROPT_GC = 0
|
SUPEROPT_GC = 0
|
||||||
|
@ -10,6 +10,7 @@ INTERNAL_FLASH_FILESYSTEM = 1
|
|||||||
LONGINT_IMPL = NONE
|
LONGINT_IMPL = NONE
|
||||||
CIRCUITPY_FULL_BUILD = 0
|
CIRCUITPY_FULL_BUILD = 0
|
||||||
CIRCUITPY_COUNTIO = 0
|
CIRCUITPY_COUNTIO = 0
|
||||||
|
CIRCUITPY_RTC = 0
|
||||||
SUPEROPT_GC = 0
|
SUPEROPT_GC = 0
|
||||||
|
|
||||||
CFLAGS_BOARD = --param max-inline-insns-auto=15
|
CFLAGS_BOARD = --param max-inline-insns-auto=15
|
||||||
|
@ -13,6 +13,7 @@ LONGINT_IMPL = MPZ
|
|||||||
|
|
||||||
CIRCUITPY_BITBANGIO = 0
|
CIRCUITPY_BITBANGIO = 0
|
||||||
CIRCUITPY_COUNTIO = 0
|
CIRCUITPY_COUNTIO = 0
|
||||||
|
CIRCUITPY_RTC = 0
|
||||||
CIRCUITPY_FREQUENCYIO = 0
|
CIRCUITPY_FREQUENCYIO = 0
|
||||||
CIRCUITPY_I2CSLAVE = 0
|
CIRCUITPY_I2CSLAVE = 0
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ void common_hal_digitalio_digitalinout_switch_to_input(
|
|||||||
common_hal_digitalio_digitalinout_set_pull(self, pull);
|
common_hal_digitalio_digitalinout_set_pull(self, pull);
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_switch_to_output(
|
digitalinout_result_t common_hal_digitalio_digitalinout_switch_to_output(
|
||||||
digitalio_digitalinout_obj_t* self, bool value,
|
digitalio_digitalinout_obj_t* self, bool value,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
const uint8_t pin = self->pin->number;
|
const uint8_t pin = self->pin->number;
|
||||||
@ -86,6 +86,7 @@ void common_hal_digitalio_digitalinout_switch_to_output(
|
|||||||
|
|
||||||
// Direction is set in set_value. We don't need to do it here.
|
// Direction is set in set_value. We don't need to do it here.
|
||||||
common_hal_digitalio_digitalinout_set_value(self, value);
|
common_hal_digitalio_digitalinout_set_value(self, value);
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
||||||
@ -128,7 +129,7 @@ bool common_hal_digitalio_digitalinout_get_value(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_set_drive_mode(
|
digitalinout_result_t common_hal_digitalio_digitalinout_set_drive_mode(
|
||||||
digitalio_digitalinout_obj_t* self,
|
digitalio_digitalinout_obj_t* self,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
bool value = common_hal_digitalio_digitalinout_get_value(self);
|
bool value = common_hal_digitalio_digitalinout_get_value(self);
|
||||||
@ -138,6 +139,7 @@ void common_hal_digitalio_digitalinout_set_drive_mode(
|
|||||||
if (value) {
|
if (value) {
|
||||||
common_hal_digitalio_digitalinout_set_value(self, value);
|
common_hal_digitalio_digitalinout_set_value(self, value);
|
||||||
}
|
}
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
||||||
|
@ -181,7 +181,7 @@ pwmout_result_t common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t* self,
|
|||||||
mux_position = j;
|
mux_position = j;
|
||||||
// Claim channel.
|
// Claim channel.
|
||||||
tcc_channels[timer->index] |= (1 << tcc_channel(timer));
|
tcc_channels[timer->index] |= (1 << tcc_channel(timer));
|
||||||
|
tcc_refcount[timer->index]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,7 @@
|
|||||||
#include "samd/events.h"
|
#include "samd/events.h"
|
||||||
#include "samd/external_interrupts.h"
|
#include "samd/external_interrupts.h"
|
||||||
#include "samd/dma.h"
|
#include "samd/dma.h"
|
||||||
|
#include "shared-bindings/microcontroller/__init__.h"
|
||||||
#include "shared-bindings/rtc/__init__.h"
|
#include "shared-bindings/rtc/__init__.h"
|
||||||
#include "reset.h"
|
#include "reset.h"
|
||||||
|
|
||||||
@ -496,7 +497,12 @@ void port_sleep_until_interrupt(void) {
|
|||||||
(void) __get_FPSCR();
|
(void) __get_FPSCR();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
__WFI();
|
common_hal_mcu_disable_interrupts();
|
||||||
|
if (!tud_task_event_ready()) {
|
||||||
|
__DSB();
|
||||||
|
__WFI();
|
||||||
|
}
|
||||||
|
common_hal_mcu_enable_interrupts();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -70,7 +70,7 @@ void common_hal_digitalio_digitalinout_switch_to_input(digitalio_digitalinout_ob
|
|||||||
board_gpio_config(self->pin->number, 0, true, true, pull);
|
board_gpio_config(self->pin->number, 0, true, true, pull);
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_switch_to_output(digitalio_digitalinout_obj_t *self, bool value, digitalio_drive_mode_t drive_mode) {
|
digitalinout_result_t common_hal_digitalio_digitalinout_switch_to_output(digitalio_digitalinout_obj_t *self, bool value, digitalio_drive_mode_t drive_mode) {
|
||||||
self->input = false;
|
self->input = false;
|
||||||
self->open_drain = drive_mode == DRIVE_MODE_OPEN_DRAIN;
|
self->open_drain = drive_mode == DRIVE_MODE_OPEN_DRAIN;
|
||||||
board_gpio_write(self->pin->number, -1);
|
board_gpio_write(self->pin->number, -1);
|
||||||
@ -80,6 +80,7 @@ void common_hal_digitalio_digitalinout_switch_to_output(digitalio_digitalinout_o
|
|||||||
board_gpio_write(self->pin->number, 0);
|
board_gpio_write(self->pin->number, 0);
|
||||||
}
|
}
|
||||||
common_hal_digitalio_digitalinout_set_value(self, value);
|
common_hal_digitalio_digitalinout_set_value(self, value);
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(digitalio_digitalinout_obj_t *self) {
|
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(digitalio_digitalinout_obj_t *self) {
|
||||||
@ -104,7 +105,7 @@ bool common_hal_digitalio_digitalinout_get_value(digitalio_digitalinout_obj_t *s
|
|||||||
return board_gpio_read(self->pin->number);
|
return board_gpio_read(self->pin->number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_set_drive_mode(digitalio_digitalinout_obj_t *self, digitalio_drive_mode_t drive_mode) {
|
digitalinout_result_t common_hal_digitalio_digitalinout_set_drive_mode(digitalio_digitalinout_obj_t *self, digitalio_drive_mode_t drive_mode) {
|
||||||
if (drive_mode == DRIVE_MODE_PUSH_PULL) {
|
if (drive_mode == DRIVE_MODE_PUSH_PULL) {
|
||||||
board_gpio_write(self->pin->number, -1);
|
board_gpio_write(self->pin->number, -1);
|
||||||
board_gpio_config(self->pin->number, 0, false, true, PIN_FLOAT);
|
board_gpio_config(self->pin->number, 0, false, true, PIN_FLOAT);
|
||||||
@ -115,6 +116,7 @@ void common_hal_digitalio_digitalinout_set_drive_mode(digitalio_digitalinout_obj
|
|||||||
board_gpio_write(self->pin->number, 0);
|
board_gpio_write(self->pin->number, 0);
|
||||||
self->open_drain = true;
|
self->open_drain = true;
|
||||||
}
|
}
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(digitalio_digitalinout_obj_t *self) {
|
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(digitalio_digitalinout_obj_t *self) {
|
||||||
|
@ -31,6 +31,9 @@ else
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# If the flash PORT is not given, use the default /dev/tty.SLAB_USBtoUART.
|
||||||
|
PORT ?= /dev/tty.SLAB_USBtoUART
|
||||||
|
|
||||||
# If the build directory is not given, make it reflect the board name.
|
# If the build directory is not given, make it reflect the board name.
|
||||||
BUILD ?= build-$(BOARD)
|
BUILD ?= build-$(BOARD)
|
||||||
|
|
||||||
@ -149,6 +152,7 @@ SRC_C += \
|
|||||||
mphalport.c \
|
mphalport.c \
|
||||||
boards/$(BOARD)/board.c \
|
boards/$(BOARD)/board.c \
|
||||||
boards/$(BOARD)/pins.c \
|
boards/$(BOARD)/pins.c \
|
||||||
|
modules/$(CIRCUITPY_MODULE).c \
|
||||||
lib/libc/string0.c \
|
lib/libc/string0.c \
|
||||||
lib/mp-readline/readline.c \
|
lib/mp-readline/readline.c \
|
||||||
lib/oofatfs/ff.c \
|
lib/oofatfs/ff.c \
|
||||||
@ -270,7 +274,7 @@ $(BUILD)/firmware.bin: $(BUILD)/esp-idf/partition_table/partition-table.bin $(BU
|
|||||||
$(Q)$(PYTHON) ../../tools/join_bins.py $@ 0x1000 $(BUILD)/esp-idf/bootloader/bootloader.bin 0x8000 $(BUILD)/esp-idf/partition_table/partition-table.bin 0x10000 $(BUILD)/circuitpython-firmware.bin
|
$(Q)$(PYTHON) ../../tools/join_bins.py $@ 0x1000 $(BUILD)/esp-idf/bootloader/bootloader.bin 0x8000 $(BUILD)/esp-idf/partition_table/partition-table.bin 0x10000 $(BUILD)/circuitpython-firmware.bin
|
||||||
|
|
||||||
flash: $(BUILD)/firmware.bin
|
flash: $(BUILD)/firmware.bin
|
||||||
esptool.py --chip esp32s2 -p /dev/tty.SLAB_USBtoUART -b 460800 --before=default_reset --after=hard_reset write_flash $(FLASH_FLAGS) 0x0000 $^
|
esptool.py --chip esp32s2 -p $(PORT) -b 460800 --before=default_reset --after=hard_reset write_flash $(FLASH_FLAGS) 0x0000 $^
|
||||||
|
|
||||||
include $(TOP)/py/mkrules.mk
|
include $(TOP)/py/mkrules.mk
|
||||||
|
|
||||||
|
@ -26,8 +26,16 @@
|
|||||||
|
|
||||||
#include "boards/board.h"
|
#include "boards/board.h"
|
||||||
#include "mpconfigboard.h"
|
#include "mpconfigboard.h"
|
||||||
|
#include "shared-bindings/microcontroller/Pin.h"
|
||||||
|
|
||||||
void board_init(void) {
|
void board_init(void) {
|
||||||
|
// USB
|
||||||
|
never_reset_pin(&pin_GPIO19);
|
||||||
|
never_reset_pin(&pin_GPIO20);
|
||||||
|
|
||||||
|
// Debug UART
|
||||||
|
never_reset_pin(&pin_GPIO43);
|
||||||
|
never_reset_pin(&pin_GPIO44);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool board_requests_safe_mode(void) {
|
bool board_requests_safe_mode(void) {
|
||||||
|
@ -18,3 +18,5 @@ CIRCUITPY_MICROCONTROLLER = 0
|
|||||||
CIRCUITPY_ESP_FLASH_MODE=dio
|
CIRCUITPY_ESP_FLASH_MODE=dio
|
||||||
CIRCUITPY_ESP_FLASH_FREQ=40m
|
CIRCUITPY_ESP_FLASH_FREQ=40m
|
||||||
CIRCUITPY_ESP_FLASH_SIZE=4MB
|
CIRCUITPY_ESP_FLASH_SIZE=4MB
|
||||||
|
|
||||||
|
CIRCUITPY_MODULE=wroom
|
||||||
|
@ -26,8 +26,16 @@
|
|||||||
|
|
||||||
#include "boards/board.h"
|
#include "boards/board.h"
|
||||||
#include "mpconfigboard.h"
|
#include "mpconfigboard.h"
|
||||||
|
#include "shared-bindings/microcontroller/Pin.h"
|
||||||
|
|
||||||
void board_init(void) {
|
void board_init(void) {
|
||||||
|
// USB
|
||||||
|
never_reset_pin(&pin_GPIO19);
|
||||||
|
never_reset_pin(&pin_GPIO20);
|
||||||
|
|
||||||
|
// Debug UART
|
||||||
|
never_reset_pin(&pin_GPIO43);
|
||||||
|
never_reset_pin(&pin_GPIO44);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool board_requests_safe_mode(void) {
|
bool board_requests_safe_mode(void) {
|
||||||
|
@ -18,3 +18,5 @@ CIRCUITPY_MICROCONTROLLER = 0
|
|||||||
CIRCUITPY_ESP_FLASH_MODE=dio
|
CIRCUITPY_ESP_FLASH_MODE=dio
|
||||||
CIRCUITPY_ESP_FLASH_FREQ=40m
|
CIRCUITPY_ESP_FLASH_FREQ=40m
|
||||||
CIRCUITPY_ESP_FLASH_SIZE=4MB
|
CIRCUITPY_ESP_FLASH_SIZE=4MB
|
||||||
|
|
||||||
|
CIRCUITPY_MODULE=wrover
|
||||||
|
@ -30,24 +30,18 @@
|
|||||||
|
|
||||||
#include "driver/gpio.h"
|
#include "driver/gpio.h"
|
||||||
|
|
||||||
|
#include "esp-idf/components/soc/include/hal/gpio_hal.h"
|
||||||
#include "esp_log.h"
|
|
||||||
|
|
||||||
static const char* TAG = "CircuitPython digitalio";
|
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_never_reset(
|
void common_hal_digitalio_digitalinout_never_reset(
|
||||||
digitalio_digitalinout_obj_t *self) {
|
digitalio_digitalinout_obj_t *self) {
|
||||||
(void)self;
|
never_reset_pin_number(self->pin->number);
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalinout_result_t common_hal_digitalio_digitalinout_construct(
|
digitalinout_result_t common_hal_digitalio_digitalinout_construct(
|
||||||
digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) {
|
digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) {
|
||||||
|
claim_pin(pin);
|
||||||
// claim_pin(pin);
|
|
||||||
self->pin = pin;
|
self->pin = pin;
|
||||||
|
|
||||||
ESP_EARLY_LOGW(TAG, "construct %d", pin->number);
|
|
||||||
|
|
||||||
return DIGITALINOUT_OK;
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,78 +54,86 @@ void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t *self
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// reset_pin_number(0, self->pin->number);
|
reset_pin_number(self->pin->number);
|
||||||
self->pin = mp_const_none;
|
self->pin = mp_const_none;
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_switch_to_input(
|
void common_hal_digitalio_digitalinout_switch_to_input(
|
||||||
digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
|
digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
|
||||||
gpio_config_t config = {
|
common_hal_digitalio_digitalinout_set_pull(self, pull);
|
||||||
.pin_bit_mask = 1 << self->pin->number,
|
gpio_set_direction(self->pin->number, GPIO_MODE_DEF_INPUT);
|
||||||
.mode = GPIO_MODE_INPUT
|
|
||||||
};
|
|
||||||
if (pull == PULL_UP) {
|
|
||||||
config.pull_up_en = GPIO_PULLUP_ENABLE;
|
|
||||||
} else if (pull == PULL_DOWN) {
|
|
||||||
config.pull_down_en = GPIO_PULLDOWN_ENABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gpio_config(&config);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_switch_to_output(
|
digitalinout_result_t common_hal_digitalio_digitalinout_switch_to_output(
|
||||||
digitalio_digitalinout_obj_t *self, bool value,
|
digitalio_digitalinout_obj_t *self, bool value,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
gpio_config_t config = {
|
|
||||||
.pin_bit_mask = 1ULL << self->pin->number,
|
|
||||||
.mode = GPIO_MODE_OUTPUT
|
|
||||||
};
|
|
||||||
if (drive_mode == DRIVE_MODE_OPEN_DRAIN) {
|
|
||||||
config.mode = GPIO_MODE_OUTPUT_OD;
|
|
||||||
}
|
|
||||||
gpio_set_level(self->pin->number, value);
|
gpio_set_level(self->pin->number, value);
|
||||||
gpio_config(&config);
|
return common_hal_digitalio_digitalinout_set_drive_mode(self, drive_mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
||||||
digitalio_digitalinout_obj_t *self) {
|
digitalio_digitalinout_obj_t *self) {
|
||||||
|
uint32_t iomux = READ_PERI_REG(GPIO_PIN_MUX_REG[self->pin->number]);
|
||||||
|
if ((iomux & FUN_IE) != 0) {
|
||||||
|
return DIRECTION_INPUT;
|
||||||
|
}
|
||||||
return DIRECTION_OUTPUT;
|
return DIRECTION_OUTPUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_set_value(
|
void common_hal_digitalio_digitalinout_set_value(
|
||||||
digitalio_digitalinout_obj_t *self, bool value) {
|
digitalio_digitalinout_obj_t *self, bool value) {
|
||||||
ESP_EARLY_LOGW(TAG, "set %d %d", self->pin->number, value);
|
|
||||||
gpio_set_level(self->pin->number, value);
|
gpio_set_level(self->pin->number, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool common_hal_digitalio_digitalinout_get_value(
|
bool common_hal_digitalio_digitalinout_get_value(
|
||||||
digitalio_digitalinout_obj_t *self) {
|
digitalio_digitalinout_obj_t *self) {
|
||||||
return true;
|
return gpio_get_level(self->pin->number) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_set_drive_mode(
|
digitalinout_result_t common_hal_digitalio_digitalinout_set_drive_mode(
|
||||||
digitalio_digitalinout_obj_t *self,
|
digitalio_digitalinout_obj_t *self,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
(void)self;
|
gpio_num_t number = self->pin->number;
|
||||||
(void)drive_mode;
|
gpio_mode_t mode;
|
||||||
|
if (drive_mode == DRIVE_MODE_OPEN_DRAIN) {
|
||||||
|
mode = GPIO_MODE_DEF_OD;
|
||||||
|
} else {
|
||||||
|
mode = GPIO_MODE_DEF_OUTPUT;
|
||||||
|
}
|
||||||
|
esp_err_t result = gpio_set_direction(number, mode);
|
||||||
|
if (result != ESP_OK) {
|
||||||
|
return DIGITALINOUT_INPUT_ONLY;
|
||||||
|
}
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
||||||
digitalio_digitalinout_obj_t *self) {
|
digitalio_digitalinout_obj_t *self) {
|
||||||
// if (common_hal_digitalio_digitalinout_get_direction(self) == DIRECTION_OUTPUT)
|
if (GPIO_HAL_GET_HW(GPIO_PORT_0)->pin[self->pin->number].pad_driver == 1) {
|
||||||
// return DRIVE_MODE_PUSH_PULL;
|
return DRIVE_MODE_OPEN_DRAIN;
|
||||||
// else
|
}
|
||||||
return DRIVE_MODE_OPEN_DRAIN;
|
return DRIVE_MODE_PUSH_PULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_set_pull(
|
void common_hal_digitalio_digitalinout_set_pull(
|
||||||
digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
|
digitalio_digitalinout_obj_t *self, digitalio_pull_t pull) {
|
||||||
(void)self;
|
gpio_num_t number = self->pin->number;
|
||||||
(void)pull;
|
gpio_pullup_dis(number);
|
||||||
|
gpio_pulldown_dis(number);
|
||||||
|
if (pull == PULL_UP) {
|
||||||
|
gpio_pullup_en(number);
|
||||||
|
} else if (pull == PULL_DOWN) {
|
||||||
|
gpio_pulldown_en(number);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(
|
digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(
|
||||||
digitalio_digitalinout_obj_t *self) {
|
digitalio_digitalinout_obj_t *self) {
|
||||||
|
gpio_num_t gpio_num = self->pin->number;
|
||||||
|
if (REG_GET_BIT(GPIO_PIN_MUX_REG[gpio_num], FUN_PU) == 1) {
|
||||||
|
return PULL_UP;
|
||||||
|
} else if (REG_GET_BIT(GPIO_PIN_MUX_REG[gpio_num], FUN_PD) == 1) {
|
||||||
|
return PULL_DOWN;
|
||||||
|
}
|
||||||
return PULL_NONE;
|
return PULL_NONE;
|
||||||
}
|
}
|
||||||
|
@ -29,18 +29,51 @@
|
|||||||
|
|
||||||
#include "py/mphal.h"
|
#include "py/mphal.h"
|
||||||
|
|
||||||
// Mark pin as free and return it to a quiescent state.
|
#include "esp-idf/components/driver/include/driver/gpio.h"
|
||||||
void reset_pin_number(uint8_t pin_port, uint8_t pin_number) {
|
#include "esp-idf/components/soc/include/hal/gpio_hal.h"
|
||||||
|
|
||||||
|
STATIC uint32_t never_reset_pins[2];
|
||||||
|
STATIC uint32_t in_use[2];
|
||||||
|
|
||||||
|
void never_reset_pin_number(gpio_num_t pin_number) {
|
||||||
|
never_reset_pins[pin_number / 32] |= 1 << pin_number % 32;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void never_reset_pin(const mcu_pin_obj_t* pin) {
|
||||||
|
never_reset_pin_number(pin->number);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mark pin as free and return it to a quiescent state.
|
||||||
|
void reset_pin_number(gpio_num_t pin_number) {
|
||||||
|
never_reset_pins[pin_number / 32] &= ~(1 << pin_number % 32);
|
||||||
|
in_use[pin_number / 32] &= ~(1 << pin_number % 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
void reset_all_pins(void) {
|
||||||
|
for (uint8_t i = 0; i < GPIO_PIN_COUNT; i++) {
|
||||||
|
uint32_t iomux_address = GPIO_PIN_MUX_REG[i];
|
||||||
|
if (iomux_address == 0 ||
|
||||||
|
(never_reset_pins[i / 32] & (1 << i % 32)) != 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
gpio_set_direction(i, GPIO_MODE_DEF_INPUT);
|
||||||
|
gpio_pullup_dis(i);
|
||||||
|
gpio_pulldown_dis(i);
|
||||||
|
}
|
||||||
|
in_use[0] = 0;
|
||||||
|
in_use[1] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
void claim_pin(const mcu_pin_obj_t* pin) {
|
void claim_pin(const mcu_pin_obj_t* pin) {
|
||||||
|
in_use[pin->number / 32] |= (1 << pin->number % 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool pin_number_is_free(uint8_t pin_port, uint8_t pin_number) {
|
bool pin_number_is_free(gpio_num_t pin_number) {
|
||||||
return true;
|
uint8_t offset = pin_number / 32;
|
||||||
|
uint8_t mask = 1 << pin_number % 32;
|
||||||
|
return (never_reset_pins[offset] & mask) == 0 && (in_use[offset] & mask) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) {
|
bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) {
|
||||||
return pin_number_is_free(0, pin->number);
|
return pin_number_is_free(pin->number);
|
||||||
}
|
}
|
||||||
|
@ -34,11 +34,10 @@
|
|||||||
void reset_all_pins(void);
|
void reset_all_pins(void);
|
||||||
// reset_pin_number takes the pin number instead of the pointer so that objects don't
|
// reset_pin_number takes the pin number instead of the pointer so that objects don't
|
||||||
// need to store a full pointer.
|
// need to store a full pointer.
|
||||||
void reset_pin_number(uint8_t pin_port, uint8_t pin_number);
|
void reset_pin_number(gpio_num_t pin_number);
|
||||||
void claim_pin(const mcu_pin_obj_t* pin);
|
void claim_pin(const mcu_pin_obj_t* pin);
|
||||||
bool pin_number_is_free(uint8_t pin_port, uint8_t pin_number);
|
bool pin_number_is_free(gpio_num_t pin_number);
|
||||||
void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number);
|
void never_reset_pin_number(gpio_num_t pin_number);
|
||||||
// GPIO_TypeDef * pin_port(uint8_t pin_port);
|
void never_reset_pin(const mcu_pin_obj_t* pin);
|
||||||
uint16_t pin_mask(uint8_t pin_number);
|
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_MICROCONTROLLER_PIN_H
|
#endif // MICROPY_INCLUDED_ESP32S2_COMMON_HAL_MICROCONTROLLER_PIN_H
|
||||||
|
@ -39,24 +39,31 @@
|
|||||||
#include "supervisor/filesystem.h"
|
#include "supervisor/filesystem.h"
|
||||||
#include "supervisor/shared/safe_mode.h"
|
#include "supervisor/shared/safe_mode.h"
|
||||||
|
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
|
||||||
void common_hal_mcu_delay_us(uint32_t delay) {
|
void common_hal_mcu_delay_us(uint32_t delay) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
volatile uint32_t nesting_count = 0;
|
volatile uint32_t nesting_count = 0;
|
||||||
|
static portMUX_TYPE cp_mutex = portMUX_INITIALIZER_UNLOCKED;
|
||||||
|
|
||||||
void common_hal_mcu_disable_interrupts(void) {
|
void common_hal_mcu_disable_interrupts(void) {
|
||||||
|
if (nesting_count == 0) {
|
||||||
|
portENTER_CRITICAL(&cp_mutex);
|
||||||
|
}
|
||||||
nesting_count++;
|
nesting_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_mcu_enable_interrupts(void) {
|
void common_hal_mcu_enable_interrupts(void) {
|
||||||
if (nesting_count == 0) {
|
if (nesting_count == 0) {
|
||||||
|
// Maybe log here because it's very bad.
|
||||||
}
|
}
|
||||||
nesting_count--;
|
nesting_count--;
|
||||||
if (nesting_count > 0) {
|
if (nesting_count > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
portEXIT_CRITICAL(&cp_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
|
void common_hal_mcu_on_next_reset(mcu_runmode_t runmode) {
|
||||||
|
35
ports/esp32s2/modules/module.h
Normal file
35
ports/esp32s2/modules/module.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Micro Python project, http://micropython.org/
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef MICROPY_INCLUDED_ESP32S2_MODULES_MODULE_H
|
||||||
|
#define MICROPY_INCLUDED_ESP32S2_MODULES_MODULE_H
|
||||||
|
|
||||||
|
#include "shared-bindings/microcontroller/Pin.h"
|
||||||
|
|
||||||
|
void never_reset_module_internal_pins(void);
|
||||||
|
|
||||||
|
#endif // MICROPY_INCLUDED_ESP32S2_MODULES_MODULE_H
|
28
ports/esp32s2/modules/none.c
Normal file
28
ports/esp32s2/modules/none.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Micro Python project, http://micropython.org/
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void never_reset_module_internal_pins(void) {
|
||||||
|
}
|
37
ports/esp32s2/modules/wroom.c
Normal file
37
ports/esp32s2/modules/wroom.c
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Micro Python project, http://micropython.org/
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "modules/module.h"
|
||||||
|
|
||||||
|
void never_reset_module_internal_pins(void) {
|
||||||
|
// SPI Flash
|
||||||
|
never_reset_pin(&pin_GPIO27);
|
||||||
|
never_reset_pin(&pin_GPIO28);
|
||||||
|
never_reset_pin(&pin_GPIO29);
|
||||||
|
never_reset_pin(&pin_GPIO30);
|
||||||
|
never_reset_pin(&pin_GPIO31);
|
||||||
|
never_reset_pin(&pin_GPIO32);
|
||||||
|
}
|
38
ports/esp32s2/modules/wrover.c
Normal file
38
ports/esp32s2/modules/wrover.c
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Micro Python project, http://micropython.org/
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "modules/module.h"
|
||||||
|
|
||||||
|
void never_reset_module_internal_pins(void) {
|
||||||
|
// SPI Flash and RAM
|
||||||
|
never_reset_pin(&pin_GPIO26);
|
||||||
|
never_reset_pin(&pin_GPIO27);
|
||||||
|
never_reset_pin(&pin_GPIO28);
|
||||||
|
never_reset_pin(&pin_GPIO29);
|
||||||
|
never_reset_pin(&pin_GPIO30);
|
||||||
|
never_reset_pin(&pin_GPIO31);
|
||||||
|
never_reset_pin(&pin_GPIO32);
|
||||||
|
}
|
@ -33,3 +33,5 @@ CIRCUITPY_TOUCHIO = 0
|
|||||||
# Enable USB support
|
# Enable USB support
|
||||||
CIRCUITPY_USB_HID = 1
|
CIRCUITPY_USB_HID = 1
|
||||||
CIRCUITPY_USB_MIDI = 1
|
CIRCUITPY_USB_MIDI = 1
|
||||||
|
|
||||||
|
CIRCUITPY_MODULE ?= none
|
||||||
|
@ -33,10 +33,12 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "esp32s2_peripherals_config.h"
|
#include "esp32s2_peripherals_config.h"
|
||||||
|
#include "esp-idf/config/sdkconfig.h"
|
||||||
|
#include "esp-idf/components/soc/include/hal/gpio_types.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PIN_PREFIX_FIELDS
|
PIN_PREFIX_FIELDS
|
||||||
uint8_t number;
|
gpio_num_t number;
|
||||||
} mcu_pin_obj_t;
|
} mcu_pin_obj_t;
|
||||||
|
|
||||||
extern const mcu_pin_obj_t pin_GPIO0;
|
extern const mcu_pin_obj_t pin_GPIO0;
|
||||||
|
@ -29,10 +29,12 @@
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include "supervisor/port.h"
|
#include "supervisor/port.h"
|
||||||
#include "boards/board.h"
|
#include "boards/board.h"
|
||||||
|
#include "modules/module.h"
|
||||||
|
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
|
|
||||||
|
#include "common-hal/microcontroller/Pin.h"
|
||||||
#include "supervisor/memory.h"
|
#include "supervisor/memory.h"
|
||||||
#include "supervisor/shared/tick.h"
|
#include "supervisor/shared/tick.h"
|
||||||
|
|
||||||
@ -56,12 +58,14 @@ safe_mode_t port_init(void) {
|
|||||||
if (result != ESP_OK) {
|
if (result != ESP_OK) {
|
||||||
ESP_EARLY_LOGE(TAG, "Unable to create tick timer.");
|
ESP_EARLY_LOGE(TAG, "Unable to create tick timer.");
|
||||||
}
|
}
|
||||||
|
never_reset_module_internal_pins();
|
||||||
ESP_EARLY_LOGW(TAG, "port init done");
|
ESP_EARLY_LOGW(TAG, "port init done");
|
||||||
return NO_SAFE_MODE;
|
return NO_SAFE_MODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_port(void) {
|
void reset_port(void) {
|
||||||
|
|
||||||
|
reset_all_pins();
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset_to_bootloader(void) {
|
void reset_to_bootloader(void) {
|
||||||
|
@ -64,12 +64,13 @@ void common_hal_digitalio_digitalinout_switch_to_input(
|
|||||||
touch_oe_write(touch_oe_read() & ~(1 << self->pin->number));
|
touch_oe_write(touch_oe_read() & ~(1 << self->pin->number));
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_switch_to_output(
|
digitalinout_result_t common_hal_digitalio_digitalinout_switch_to_output(
|
||||||
digitalio_digitalinout_obj_t *self, bool value,
|
digitalio_digitalinout_obj_t *self, bool value,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
(void)drive_mode;
|
(void)drive_mode;
|
||||||
common_hal_digitalio_digitalinout_set_value(self, value);
|
common_hal_digitalio_digitalinout_set_value(self, value);
|
||||||
touch_oe_write(touch_oe_read() | (1 << self->pin->number));
|
touch_oe_write(touch_oe_read() | (1 << self->pin->number));
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
||||||
@ -92,11 +93,12 @@ bool common_hal_digitalio_digitalinout_get_value(
|
|||||||
return !!(touch_i_read() & (1 << self->pin->number));
|
return !!(touch_i_read() & (1 << self->pin->number));
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_set_drive_mode(
|
digitalinout_result_t common_hal_digitalio_digitalinout_set_drive_mode(
|
||||||
digitalio_digitalinout_obj_t *self,
|
digitalio_digitalinout_obj_t *self,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
(void)self;
|
(void)self;
|
||||||
(void)drive_mode;
|
(void)drive_mode;
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
||||||
|
@ -81,7 +81,7 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(self->sda_pin == NULL || self->scl_pin == NULL) {
|
if(self->sda_pin == NULL || self->scl_pin == NULL) {
|
||||||
mp_raise_RuntimeError(translate("Invalid I2C pin selection"));
|
mp_raise_ValueError(translate("Invalid I2C pin selection"));
|
||||||
} else {
|
} else {
|
||||||
self->i2c = mcu_i2c_banks[self->sda_pin->bank_idx - 1];
|
self->i2c = mcu_i2c_banks[self->sda_pin->bank_idx - 1];
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@ void common_hal_digitalio_digitalinout_switch_to_input(
|
|||||||
common_hal_digitalio_digitalinout_set_pull(self, pull);
|
common_hal_digitalio_digitalinout_set_pull(self, pull);
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_switch_to_output(
|
digitalinout_result_t common_hal_digitalio_digitalinout_switch_to_output(
|
||||||
digitalio_digitalinout_obj_t* self, bool value,
|
digitalio_digitalinout_obj_t* self, bool value,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
self->output = true;
|
self->output = true;
|
||||||
@ -108,6 +108,7 @@ void common_hal_digitalio_digitalinout_switch_to_output(
|
|||||||
|
|
||||||
const gpio_pin_config_t config = { kGPIO_DigitalOutput, value, kGPIO_NoIntmode };
|
const gpio_pin_config_t config = { kGPIO_DigitalOutput, value, kGPIO_NoIntmode };
|
||||||
GPIO_PinInit(self->pin->gpio, self->pin->number, &config);
|
GPIO_PinInit(self->pin->gpio, self->pin->number, &config);
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
||||||
@ -125,7 +126,7 @@ bool common_hal_digitalio_digitalinout_get_value(
|
|||||||
return GPIO_PinRead(self->pin->gpio, self->pin->number);
|
return GPIO_PinRead(self->pin->gpio, self->pin->number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_set_drive_mode(
|
digitalinout_result_t common_hal_digitalio_digitalinout_set_drive_mode(
|
||||||
digitalio_digitalinout_obj_t* self,
|
digitalio_digitalinout_obj_t* self,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
bool value = common_hal_digitalio_digitalinout_get_value(self);
|
bool value = common_hal_digitalio_digitalinout_get_value(self);
|
||||||
@ -138,6 +139,7 @@ void common_hal_digitalio_digitalinout_set_drive_mode(
|
|||||||
if (value) {
|
if (value) {
|
||||||
common_hal_digitalio_digitalinout_set_value(self, value);
|
common_hal_digitalio_digitalinout_set_value(self, value);
|
||||||
}
|
}
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
||||||
|
103
ports/nrf/boards/hiibot_bluefi/board.c
Normal file
103
ports/nrf/boards/hiibot_bluefi/board.c
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the MicroPython project, http://micropython.org/
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "boards/board.h"
|
||||||
|
#include "mpconfigboard.h"
|
||||||
|
|
||||||
|
#include "shared-bindings/busio/SPI.h"
|
||||||
|
#include "shared-bindings/displayio/FourWire.h"
|
||||||
|
#include "shared-module/displayio/__init__.h"
|
||||||
|
#include "shared-module/displayio/mipi_constants.h"
|
||||||
|
|
||||||
|
displayio_fourwire_obj_t board_display_obj;
|
||||||
|
|
||||||
|
#define DELAY 0x80
|
||||||
|
|
||||||
|
uint8_t display_init_sequence[] = {
|
||||||
|
0x01, 0 | DELAY, 150, // SWRESET
|
||||||
|
0x11, 0 | DELAY, 255, // SLPOUT
|
||||||
|
0x36, 1, 0b10100000, // _MADCTL for rotation 0
|
||||||
|
0x3a, 1, 0x55, // COLMOD - 16bit color
|
||||||
|
0x21, 0 | DELAY, 10, // _INVON
|
||||||
|
0x13, 0 | DELAY, 10, // _NORON
|
||||||
|
0x29, 0 | DELAY, 255, // _DISPON
|
||||||
|
};
|
||||||
|
|
||||||
|
void board_init(void) {
|
||||||
|
busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
|
||||||
|
common_hal_busio_spi_construct(spi, &pin_P0_07, &pin_P1_08, NULL); // SCK, MOSI, MISO
|
||||||
|
common_hal_busio_spi_never_reset(spi);
|
||||||
|
|
||||||
|
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
|
||||||
|
bus->base.type = &displayio_fourwire_type;
|
||||||
|
common_hal_displayio_fourwire_construct(bus,
|
||||||
|
spi,
|
||||||
|
&pin_P0_27, // TFT_DC Command or data
|
||||||
|
&pin_P0_05, // TFT_CS Chip select
|
||||||
|
NULL, // no TFT_RST Reset
|
||||||
|
//&pin_P1_14, // TFT_RST Reset
|
||||||
|
60000000, // Baudrate
|
||||||
|
0, // Polarity
|
||||||
|
0); // Phase
|
||||||
|
|
||||||
|
displayio_display_obj_t* display = &displays[0].display;
|
||||||
|
display->base.type = &displayio_display_type;
|
||||||
|
common_hal_displayio_display_construct(display,
|
||||||
|
bus,
|
||||||
|
240, // Width (after rotation)
|
||||||
|
240, // Height (after rotation)
|
||||||
|
80, // column start
|
||||||
|
0, // row start
|
||||||
|
180, // rotation
|
||||||
|
16, // Color depth
|
||||||
|
false, // Grayscale
|
||||||
|
false, // Pixels in a byte share a row. Only used for depth < 8
|
||||||
|
1, // bytes per cell. Only valid for depths < 8
|
||||||
|
false, // reverse_pixels_in_byte. Only valid for depths < 8
|
||||||
|
true, // reverse_pixels_in_word
|
||||||
|
MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command
|
||||||
|
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
|
||||||
|
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command
|
||||||
|
0x37, // set vertical scroll command
|
||||||
|
display_init_sequence,
|
||||||
|
sizeof(display_init_sequence),
|
||||||
|
&pin_P1_13, // backlight pin
|
||||||
|
NO_BRIGHTNESS_COMMAND,
|
||||||
|
1.0f, // brightness (ignored)
|
||||||
|
true, // auto_brightness
|
||||||
|
false, // single_byte_bounds
|
||||||
|
false, // data_as_commands
|
||||||
|
true, // auto_refresh
|
||||||
|
60, // native_frames_per_second
|
||||||
|
true); // backlight_on_high
|
||||||
|
}
|
||||||
|
|
||||||
|
bool board_requests_safe_mode(void) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void reset_board(void) {
|
||||||
|
}
|
67
ports/nrf/boards/hiibot_bluefi/mpconfigboard.h
Normal file
67
ports/nrf/boards/hiibot_bluefi/mpconfigboard.h
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the MicroPython project, http://micropython.org/
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 Glenn Ruben Bakke
|
||||||
|
* Copyright (c) 2018 Dan Halbert for Adafruit Industries
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nrfx/hal/nrf_gpio.h"
|
||||||
|
|
||||||
|
#define MICROPY_HW_BOARD_NAME "HiiBot BlueFi"
|
||||||
|
#define MICROPY_HW_MCU_NAME "nRF52840"
|
||||||
|
|
||||||
|
#define MICROPY_HW_NEOPIXEL (&pin_P1_10) // P18 / D18
|
||||||
|
|
||||||
|
#define MICROPY_HW_LED_STATUS (&pin_P1_12) // P17 / D17
|
||||||
|
|
||||||
|
#if QSPI_FLASH_FILESYSTEM
|
||||||
|
#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(1, 1)
|
||||||
|
#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(1, 4)
|
||||||
|
#define MICROPY_QSPI_DATA2 NRF_GPIO_PIN_MAP(1, 6)
|
||||||
|
#define MICROPY_QSPI_DATA3 NRF_GPIO_PIN_MAP(1, 5)
|
||||||
|
#define MICROPY_QSPI_SCK NRF_GPIO_PIN_MAP(1, 3)
|
||||||
|
#define MICROPY_QSPI_CS NRF_GPIO_PIN_MAP(1, 2)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if SPI_FLASH_FILESYSTEM
|
||||||
|
#define SPI_FLASH_MOSI_PIN &pin_P1_01
|
||||||
|
#define SPI_FLASH_MISO_PIN &pin_P1_04
|
||||||
|
#define SPI_FLASH_SCK_PIN &pin_P1_03
|
||||||
|
#define SPI_FLASH_CS_PIN &pin_P1_02
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// No 32kHz crystal. THere's a 32MHz crystal in the nRF module.
|
||||||
|
#define BOARD_HAS_32KHZ_XTAL (0)
|
||||||
|
|
||||||
|
#define DEFAULT_I2C_BUS_SCL (&pin_P0_00)
|
||||||
|
#define DEFAULT_I2C_BUS_SDA (&pin_P0_31)
|
||||||
|
|
||||||
|
#define DEFAULT_SPI_BUS_SCK (&pin_P0_06)
|
||||||
|
#define DEFAULT_SPI_BUS_MOSI (&pin_P0_26)
|
||||||
|
#define DEFAULT_SPI_BUS_MISO (&pin_P0_04)
|
||||||
|
|
||||||
|
#define DEFAULT_UART_BUS_RX (&pin_P0_28)
|
||||||
|
#define DEFAULT_UART_BUS_TX (&pin_P0_02)
|
||||||
|
|
||||||
|
|
||||||
|
|
18
ports/nrf/boards/hiibot_bluefi/mpconfigboard.mk
Normal file
18
ports/nrf/boards/hiibot_bluefi/mpconfigboard.mk
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
USB_VID = 0x239A
|
||||||
|
USB_PID = 0x0016
|
||||||
|
USB_PRODUCT = "HiiBot BlueFi"
|
||||||
|
USB_MANUFACTURER = "HiiBot"
|
||||||
|
|
||||||
|
MCU_CHIP = nrf52840
|
||||||
|
|
||||||
|
QSPI_FLASH_FILESYSTEM = 1
|
||||||
|
EXTERNAL_FLASH_DEVICE_COUNT = 1
|
||||||
|
EXTERNAL_FLASH_DEVICES = "W25Q16JV_IQ"
|
||||||
|
|
||||||
|
# Allocate two, not just one I2C peripheral for Bluefi, so that we have both
|
||||||
|
# on-board and off-board I2C available.
|
||||||
|
# When SPIM3 becomes available we'll be able to have two I2C and two SPI peripherals.
|
||||||
|
# We use a CFLAGS define here because there are include order issues
|
||||||
|
# if we try to include "mpconfigport.h" into nrfx_config.h .
|
||||||
|
CFLAGS += -DCIRCUITPY_NRF_NUM_I2C=2
|
||||||
|
|
180
ports/nrf/boards/hiibot_bluefi/pins.c
Normal file
180
ports/nrf/boards/hiibot_bluefi/pins.c
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
#include "shared-bindings/board/__init__.h"
|
||||||
|
|
||||||
|
#include "boards/board.h"
|
||||||
|
#include "shared-module/displayio/__init__.h"
|
||||||
|
|
||||||
|
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P0), MP_ROM_PTR(&pin_P0_28) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D0), MP_ROM_PTR(&pin_P0_28) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_P0_28) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_P0_28) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P1), MP_ROM_PTR(&pin_P0_02) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D1), MP_ROM_PTR(&pin_P0_02) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_P0_02) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_P0_02) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P2), MP_ROM_PTR(&pin_P0_29) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D2), MP_ROM_PTR(&pin_P0_29) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A2), MP_ROM_PTR(&pin_P0_29) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P3), MP_ROM_PTR(&pin_P0_30) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P0_30) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A3), MP_ROM_PTR(&pin_P0_30) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P4), MP_ROM_PTR(&pin_P0_03) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D4), MP_ROM_PTR(&pin_P0_03) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A4), MP_ROM_PTR(&pin_P0_03) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P5), MP_ROM_PTR(&pin_P1_07) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D5), MP_ROM_PTR(&pin_P1_07) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_BUTTON_A), MP_ROM_PTR(&pin_P1_07) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P6), MP_ROM_PTR(&pin_P0_08) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D6), MP_ROM_PTR(&pin_P0_08) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P7), MP_ROM_PTR(&pin_P0_25) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D7), MP_ROM_PTR(&pin_P0_25) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P8), MP_ROM_PTR(&pin_P0_23) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D8), MP_ROM_PTR(&pin_P0_23) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P9), MP_ROM_PTR(&pin_P0_21) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D9), MP_ROM_PTR(&pin_P0_21) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P10), MP_ROM_PTR(&pin_P0_19) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D10), MP_ROM_PTR(&pin_P0_19) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P11), MP_ROM_PTR(&pin_P1_09) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D11), MP_ROM_PTR(&pin_P1_09) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_BUTTON_B), MP_ROM_PTR(&pin_P1_09) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P12), MP_ROM_PTR(&pin_P0_16) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D12), MP_ROM_PTR(&pin_P0_16) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P13), MP_ROM_PTR(&pin_P0_06) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_P0_06) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SCK), MP_ROM_PTR(&pin_P0_06) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P14), MP_ROM_PTR(&pin_P0_04) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D14), MP_ROM_PTR(&pin_P0_04) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A5), MP_ROM_PTR(&pin_P0_04) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_MISO), MP_ROM_PTR(&pin_P0_04) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P15), MP_ROM_PTR(&pin_P0_26) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D15), MP_ROM_PTR(&pin_P0_26) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_MOSI), MP_ROM_PTR(&pin_P0_26) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P16), MP_ROM_PTR(&pin_P0_01) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D16), MP_ROM_PTR(&pin_P0_01) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P17), MP_ROM_PTR(&pin_P1_12) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D17), MP_ROM_PTR(&pin_P1_12) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_REDLED), MP_ROM_PTR(&pin_P1_12) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P18), MP_ROM_PTR(&pin_P1_10) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D18), MP_ROM_PTR(&pin_P1_10) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_P1_10) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P19), MP_ROM_PTR(&pin_P0_00) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D19), MP_ROM_PTR(&pin_P0_00) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_P0_00) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P20), MP_ROM_PTR(&pin_P0_31) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D20), MP_ROM_PTR(&pin_P0_31) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_A6), MP_ROM_PTR(&pin_P0_31) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_P0_31) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P21), MP_ROM_PTR(&pin_P0_09) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D21), MP_ROM_PTR(&pin_P0_09) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_MICROPHONE_CLOCK), MP_ROM_PTR(&pin_P0_09) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P22), MP_ROM_PTR(&pin_P0_10) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D22), MP_ROM_PTR(&pin_P0_10) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_MICROPHONE_DATA), MP_ROM_PTR(&pin_P0_10) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P23), MP_ROM_PTR(&pin_P0_07) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D23), MP_ROM_PTR(&pin_P0_07) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TFT_SCK), MP_ROM_PTR(&pin_P0_07) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P24), MP_ROM_PTR(&pin_P1_08) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D24), MP_ROM_PTR(&pin_P1_08) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TFT_MOSI), MP_ROM_PTR(&pin_P1_08) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P25), MP_ROM_PTR(&pin_P0_05) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D25), MP_ROM_PTR(&pin_P0_05) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TFT_CS), MP_ROM_PTR(&pin_P0_05) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P26), MP_ROM_PTR(&pin_P0_27) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D26), MP_ROM_PTR(&pin_P0_27) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TFT_DC), MP_ROM_PTR(&pin_P0_27) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P27), MP_ROM_PTR(&pin_P1_14) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D27), MP_ROM_PTR(&pin_P1_14) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TFT_RESET), MP_ROM_PTR(&pin_P1_14) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_TFT_BACKLIGHT), MP_ROM_PTR(&pin_P1_14) },
|
||||||
|
|
||||||
|
// P28~P33/D28~D33 connecte into QSPI FlashROM (W25Q16JV_IQ)
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P34), MP_ROM_PTR(&pin_P0_22) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D34), MP_ROM_PTR(&pin_P0_22) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_WIFI_SCK), MP_ROM_PTR(&pin_P0_22) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P35), MP_ROM_PTR(&pin_P0_17) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D35), MP_ROM_PTR(&pin_P0_17) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_WIFI_MISO), MP_ROM_PTR(&pin_P0_17) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P36), MP_ROM_PTR(&pin_P0_20) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D36), MP_ROM_PTR(&pin_P0_20) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_WIFI_MOSI), MP_ROM_PTR(&pin_P0_20) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P37), MP_ROM_PTR(&pin_P0_15) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D37), MP_ROM_PTR(&pin_P0_15) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_WIFI_BUSY), MP_ROM_PTR(&pin_P0_15) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P38), MP_ROM_PTR(&pin_P0_24) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D38), MP_ROM_PTR(&pin_P0_24) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_WIFI_CS), MP_ROM_PTR(&pin_P0_24) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P39), MP_ROM_PTR(&pin_P1_00) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D39), MP_ROM_PTR(&pin_P1_00) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_WIFI_RESET), MP_ROM_PTR(&pin_P1_00) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P40), MP_ROM_PTR(&pin_P0_13) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D40), MP_ROM_PTR(&pin_P0_13) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_WIFI_PWR), MP_ROM_PTR(&pin_P0_13) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P41), MP_ROM_PTR(&pin_P0_11) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D41), MP_ROM_PTR(&pin_P0_11) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SENSORS_SCL), MP_ROM_PTR(&pin_P0_11) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P42), MP_ROM_PTR(&pin_P0_12) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D42), MP_ROM_PTR(&pin_P0_12) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SENSORS_SDA), MP_ROM_PTR(&pin_P0_12) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P43), MP_ROM_PTR(&pin_P0_14) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D43), MP_ROM_PTR(&pin_P0_14) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_IMU_IRQ), MP_ROM_PTR(&pin_P0_14) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_ACCELEROMETER_INTERRUPT), MP_ROM_PTR(&pin_P0_14) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P44), MP_ROM_PTR(&pin_P1_14) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D44), MP_ROM_PTR(&pin_P1_14) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_WHITELED), MP_ROM_PTR(&pin_P1_14) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P45), MP_ROM_PTR(&pin_P1_11) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D45), MP_ROM_PTR(&pin_P1_11) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SPEAKER_ENABLE), MP_ROM_PTR(&pin_P1_11) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_P46), MP_ROM_PTR(&pin_P1_15) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_D46), MP_ROM_PTR(&pin_P1_15) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SPEAKER), MP_ROM_PTR(&pin_P1_15) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_AUDIO), MP_ROM_PTR(&pin_P1_15) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
|
||||||
|
|
||||||
|
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)}
|
||||||
|
};
|
||||||
|
|
||||||
|
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
|
@ -65,12 +65,13 @@ void common_hal_digitalio_digitalinout_switch_to_input(
|
|||||||
common_hal_digitalio_digitalinout_set_pull(self, pull);
|
common_hal_digitalio_digitalinout_set_pull(self, pull);
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_switch_to_output(
|
digitalinout_result_t common_hal_digitalio_digitalinout_switch_to_output(
|
||||||
digitalio_digitalinout_obj_t *self, bool value,
|
digitalio_digitalinout_obj_t *self, bool value,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
|
|
||||||
common_hal_digitalio_digitalinout_set_drive_mode(self, drive_mode);
|
common_hal_digitalio_digitalinout_set_drive_mode(self, drive_mode);
|
||||||
common_hal_digitalio_digitalinout_set_value(self, value);
|
common_hal_digitalio_digitalinout_set_value(self, value);
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
||||||
@ -92,7 +93,7 @@ bool common_hal_digitalio_digitalinout_get_value(
|
|||||||
: nrf_gpio_pin_out_read(self->pin->number);
|
: nrf_gpio_pin_out_read(self->pin->number);
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_set_drive_mode(
|
digitalinout_result_t common_hal_digitalio_digitalinout_set_drive_mode(
|
||||||
digitalio_digitalinout_obj_t *self,
|
digitalio_digitalinout_obj_t *self,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
nrf_gpio_cfg(self->pin->number,
|
nrf_gpio_cfg(self->pin->number,
|
||||||
@ -101,6 +102,7 @@ void common_hal_digitalio_digitalinout_set_drive_mode(
|
|||||||
NRF_GPIO_PIN_NOPULL,
|
NRF_GPIO_PIN_NOPULL,
|
||||||
drive_mode == DRIVE_MODE_OPEN_DRAIN ? NRF_GPIO_PIN_H0D1 : NRF_GPIO_PIN_H0H1,
|
drive_mode == DRIVE_MODE_OPEN_DRAIN ? NRF_GPIO_PIN_H0D1 : NRF_GPIO_PIN_H0H1,
|
||||||
NRF_GPIO_PIN_NOSENSE);
|
NRF_GPIO_PIN_NOSENSE);
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
#include "py/runtime.h"
|
#include "py/runtime.h"
|
||||||
#include "supervisor/shared/translate.h"
|
#include "supervisor/shared/translate.h"
|
||||||
|
|
||||||
// The HAL is sparse on obtaining register information, so we use the LLs here.
|
// The HAL is sparse on obtaining register information, so we use the LLs here.
|
||||||
#if (CPY_STM32H7)
|
#if (CPY_STM32H7)
|
||||||
#include "stm32h7xx_ll_gpio.h"
|
#include "stm32h7xx_ll_gpio.h"
|
||||||
#elif (CPY_STM32F7)
|
#elif (CPY_STM32F7)
|
||||||
@ -85,12 +85,13 @@ void common_hal_digitalio_digitalinout_switch_to_input(
|
|||||||
common_hal_digitalio_digitalinout_set_pull(self, pull);
|
common_hal_digitalio_digitalinout_set_pull(self, pull);
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_switch_to_output(
|
digitalinout_result_t common_hal_digitalio_digitalinout_switch_to_output(
|
||||||
digitalio_digitalinout_obj_t *self, bool value,
|
digitalio_digitalinout_obj_t *self, bool value,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
|
|
||||||
common_hal_digitalio_digitalinout_set_drive_mode(self, drive_mode);
|
common_hal_digitalio_digitalinout_set_drive_mode(self, drive_mode);
|
||||||
common_hal_digitalio_digitalinout_set_value(self, value);
|
common_hal_digitalio_digitalinout_set_value(self, value);
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(
|
||||||
@ -112,7 +113,7 @@ bool common_hal_digitalio_digitalinout_get_value(
|
|||||||
: LL_GPIO_IsOutputPinSet(pin_port(self->pin->port), pin_mask(self->pin->number));
|
: LL_GPIO_IsOutputPinSet(pin_port(self->pin->port), pin_mask(self->pin->number));
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal_digitalio_digitalinout_set_drive_mode(
|
digitalinout_result_t common_hal_digitalio_digitalinout_set_drive_mode(
|
||||||
digitalio_digitalinout_obj_t *self,
|
digitalio_digitalinout_obj_t *self,
|
||||||
digitalio_drive_mode_t drive_mode) {
|
digitalio_drive_mode_t drive_mode) {
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
@ -122,6 +123,7 @@ void common_hal_digitalio_digitalinout_set_drive_mode(
|
|||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||||
HAL_GPIO_Init(pin_port(self->pin->port), &GPIO_InitStruct);
|
HAL_GPIO_Init(pin_port(self->pin->port), &GPIO_InitStruct);
|
||||||
|
return DIGITALINOUT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(
|
||||||
|
@ -53,18 +53,13 @@ static void parse_byteorder(mp_obj_t byteorder_obj, pixelbuf_byteorder_details_t
|
|||||||
//| When brightness is less than 1.0, a second buffer will be used to store the color values
|
//| When brightness is less than 1.0, a second buffer will be used to store the color values
|
||||||
//| before they are adjusted for brightness.
|
//| before they are adjusted for brightness.
|
||||||
//|
|
//|
|
||||||
//| When ``P`` (pwm duration) is present as the 4th character of the byteorder
|
//| When ``P`` (PWM duration) is present as the 4th character of the byteorder
|
||||||
//| string, the 4th value in the tuple/list for a pixel is the individual pixel
|
//| string, the 4th value in the tuple/list for a pixel is the individual pixel
|
||||||
//| brightness (0.0-1.0) and will enable a Dotstar compatible 1st byte in the
|
//| brightness (0.0-1.0) and will enable a Dotstar compatible 1st byte for each
|
||||||
//| output buffer (``buf``).
|
//| pixel.
|
||||||
//|
|
|
||||||
//| When ``P`` (pwm duration) is present as the first character of the byteorder
|
|
||||||
//| string, the 4th value in the tuple/list for a pixel is the individual pixel
|
|
||||||
//| brightness (0.0-1.0) and will enable a Dotstar compatible 1st byte in the
|
|
||||||
//| output buffer (``buf``).
|
|
||||||
//|
|
//|
|
||||||
//| :param ~int size: Number of pixels
|
//| :param ~int size: Number of pixels
|
||||||
//| :param ~str byteorder: Byte order string (such as "BGR" or "PBGR")
|
//| :param ~str byteorder: Byte order string (such as "RGB", "RGBW" or "PBGR")
|
||||||
//| :param ~float brightness: Brightness (0 to 1.0, default 1.0)
|
//| :param ~float brightness: Brightness (0 to 1.0, default 1.0)
|
||||||
//| :param ~bool auto_write: Whether to automatically write pixels (Default False)
|
//| :param ~bool auto_write: Whether to automatically write pixels (Default False)
|
||||||
//| :param bytes header: Sequence of bytes to always send before pixel values.
|
//| :param bytes header: Sequence of bytes to always send before pixel values.
|
||||||
@ -276,13 +271,16 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(pixelbuf_pixelbuf_fill_obj, pixelbuf_pixelbuf_f
|
|||||||
|
|
||||||
//| def __getitem__(self, index: Any) -> Any:
|
//| def __getitem__(self, index: Any) -> Any:
|
||||||
//| """Returns the pixel value at the given index as a tuple of (Red, Green, Blue[, White]) values
|
//| """Returns the pixel value at the given index as a tuple of (Red, Green, Blue[, White]) values
|
||||||
//| between 0 and 255."""
|
//| between 0 and 255. When in PWM (DotStar) mode, the 4th tuple value is a float of the pixel
|
||||||
|
//| intensity from 0-1.0."""
|
||||||
//| ...
|
//| ...
|
||||||
//|
|
//|
|
||||||
//| def __setitem__(self, index: Any, value: Any) -> Any:
|
//| def __setitem__(self, index: Any, value: Any) -> Any:
|
||||||
//| """Sets the pixel value at the given index. Value can either be a tuple of (Red, Green, Blue
|
//| """Sets the pixel value at the given index. Value can either be a tuple or integer. Tuples are
|
||||||
//| [, White]) values between 0 and 255 or an integer where the red, green and blue values are
|
//| The individual (Red, Green, Blue[, White]) values between 0 and 255. If given an integer, the
|
||||||
//| packed into the lower three bytes (0xRRGGBB)."""
|
//| red, green and blue values are packed into the lower three bytes (0xRRGGBB).
|
||||||
|
//| For RGBW byteorders, if given only RGB values either as an int or as a tuple, the white value
|
||||||
|
//| is used instead when the red, green, and blue values are the same."""
|
||||||
//| ...
|
//| ...
|
||||||
//|
|
//|
|
||||||
STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value) {
|
STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp_obj_t value) {
|
||||||
@ -300,17 +298,20 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp
|
|||||||
size_t length = common_hal__pixelbuf_pixelbuf_get_len(self_in);
|
size_t length = common_hal__pixelbuf_pixelbuf_get_len(self_in);
|
||||||
mp_seq_get_fast_slice_indexes(length, index_in, &slice);
|
mp_seq_get_fast_slice_indexes(length, index_in, &slice);
|
||||||
|
|
||||||
if (slice.step < 0) {
|
size_t slice_len;
|
||||||
mp_raise_IndexError(translate("Negative step not supported"));
|
if (slice.step > 0) {
|
||||||
|
slice_len = slice.stop - slice.start;
|
||||||
|
} else {
|
||||||
|
slice_len = 1 + slice.start - slice.stop;
|
||||||
|
}
|
||||||
|
if (slice.step > 1 || slice.step < -1) {
|
||||||
|
size_t step = slice.step > 0 ? slice.step : slice.step * -1;
|
||||||
|
slice_len = (slice_len / step) + (slice_len % step ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value == MP_OBJ_SENTINEL) { // Get
|
if (value == MP_OBJ_SENTINEL) { // Get
|
||||||
size_t len = slice.stop - slice.start;
|
mp_obj_tuple_t* t = MP_OBJ_TO_PTR(mp_obj_new_tuple(slice_len, NULL));
|
||||||
if (slice.step > 1) {
|
for (uint i = 0; i < slice_len; i++) {
|
||||||
len = (len / slice.step) + (len % slice.step ? 1 : 0);
|
|
||||||
}
|
|
||||||
mp_obj_tuple_t* t = MP_OBJ_TO_PTR(mp_obj_new_tuple(len, NULL));
|
|
||||||
for (uint i = 0; i < len; i++) {
|
|
||||||
t->items[i] = common_hal__pixelbuf_pixelbuf_get_pixel(self_in, i * slice.step + slice.start);
|
t->items[i] = common_hal__pixelbuf_pixelbuf_get_pixel(self_in, i * slice.step + slice.start);
|
||||||
}
|
}
|
||||||
return MP_OBJ_FROM_PTR(t);
|
return MP_OBJ_FROM_PTR(t);
|
||||||
@ -321,10 +322,6 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp
|
|||||||
mp_raise_ValueError(translate("tuple/list required on RHS"));
|
mp_raise_ValueError(translate("tuple/list required on RHS"));
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t dst_len = (slice.stop - slice.start);
|
|
||||||
if (slice.step > 1) {
|
|
||||||
dst_len = (dst_len / slice.step) + (dst_len % slice.step ? 1 : 0);
|
|
||||||
}
|
|
||||||
mp_obj_t *src_objs;
|
mp_obj_t *src_objs;
|
||||||
size_t num_items;
|
size_t num_items;
|
||||||
if (MP_OBJ_IS_TYPE(value, &mp_type_list)) {
|
if (MP_OBJ_IS_TYPE(value, &mp_type_list)) {
|
||||||
@ -336,12 +333,12 @@ STATIC mp_obj_t pixelbuf_pixelbuf_subscr(mp_obj_t self_in, mp_obj_t index_in, mp
|
|||||||
num_items = l->len;
|
num_items = l->len;
|
||||||
src_objs = l->items;
|
src_objs = l->items;
|
||||||
}
|
}
|
||||||
if (num_items != dst_len) {
|
if (num_items != slice_len) {
|
||||||
mp_raise_ValueError_varg(translate("Unmatched number of items on RHS (expected %d, got %d)."),
|
mp_raise_ValueError_varg(translate("Unmatched number of items on RHS (expected %d, got %d)."),
|
||||||
dst_len, num_items);
|
slice_len, num_items);
|
||||||
}
|
}
|
||||||
|
|
||||||
common_hal__pixelbuf_pixelbuf_set_pixels(self_in, slice.start, slice.stop, slice.step, src_objs);
|
common_hal__pixelbuf_pixelbuf_set_pixels(self_in, slice.start, slice.step, slice_len, src_objs);
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
#else
|
#else
|
||||||
return MP_OBJ_NULL; // op not supported
|
return MP_OBJ_NULL; // op not supported
|
||||||
|
@ -47,6 +47,6 @@ void common_hal__pixelbuf_pixelbuf_fill(mp_obj_t self, mp_obj_t item);
|
|||||||
void common_hal__pixelbuf_pixelbuf_show(mp_obj_t self);
|
void common_hal__pixelbuf_pixelbuf_show(mp_obj_t self);
|
||||||
mp_obj_t common_hal__pixelbuf_pixelbuf_get_pixel(mp_obj_t self, size_t index);
|
mp_obj_t common_hal__pixelbuf_pixelbuf_get_pixel(mp_obj_t self, size_t index);
|
||||||
void common_hal__pixelbuf_pixelbuf_set_pixel(mp_obj_t self, size_t index, mp_obj_t item);
|
void common_hal__pixelbuf_pixelbuf_set_pixel(mp_obj_t self, size_t index, mp_obj_t item);
|
||||||
void common_hal__pixelbuf_pixelbuf_set_pixels(mp_obj_t self_in, size_t start, size_t stop, size_t step, mp_obj_t* values);
|
void common_hal__pixelbuf_pixelbuf_set_pixels(mp_obj_t self_in, size_t start, mp_int_t step, size_t slice_len, mp_obj_t* values);
|
||||||
|
|
||||||
#endif // CP_SHARED_BINDINGS_PIXELBUF_PIXELBUF_H
|
#endif // CP_SHARED_BINDINGS_PIXELBUF_PIXELBUF_H
|
||||||
|
@ -131,7 +131,10 @@ STATIC mp_obj_t digitalio_digitalinout_switch_to_output(size_t n_args, const mp_
|
|||||||
drive_mode = DRIVE_MODE_OPEN_DRAIN;
|
drive_mode = DRIVE_MODE_OPEN_DRAIN;
|
||||||
}
|
}
|
||||||
// do the transfer
|
// do the transfer
|
||||||
common_hal_digitalio_digitalinout_switch_to_output(self, args[ARG_value].u_bool, drive_mode);
|
digitalinout_result_t result = common_hal_digitalio_digitalinout_switch_to_output(self, args[ARG_value].u_bool, drive_mode);
|
||||||
|
if (result == DIGITALINOUT_INPUT_ONLY) {
|
||||||
|
mp_raise_NotImplementedError(translate("Pin is input only"));
|
||||||
|
}
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_KW(digitalio_digitalinout_switch_to_output_obj, 1, digitalio_digitalinout_switch_to_output);
|
MP_DEFINE_CONST_FUN_OBJ_KW(digitalio_digitalinout_switch_to_output_obj, 1, digitalio_digitalinout_switch_to_output);
|
||||||
@ -207,7 +210,10 @@ STATIC mp_obj_t digitalio_digitalinout_obj_set_direction(mp_obj_t self_in, mp_ob
|
|||||||
if (value == &digitalio_direction_input_obj) {
|
if (value == &digitalio_direction_input_obj) {
|
||||||
common_hal_digitalio_digitalinout_switch_to_input(self, PULL_NONE);
|
common_hal_digitalio_digitalinout_switch_to_input(self, PULL_NONE);
|
||||||
} else if (value == &digitalio_direction_output_obj) {
|
} else if (value == &digitalio_direction_output_obj) {
|
||||||
common_hal_digitalio_digitalinout_switch_to_output(self, false, DRIVE_MODE_PUSH_PULL);
|
digitalinout_result_t result = common_hal_digitalio_digitalinout_switch_to_output(self, false, DRIVE_MODE_PUSH_PULL);
|
||||||
|
if (result == DIGITALINOUT_INPUT_ONLY) {
|
||||||
|
mp_raise_NotImplementedError(translate("Pin is input only"));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
mp_raise_ValueError(translate("Invalid direction."));
|
mp_raise_ValueError(translate("Invalid direction."));
|
||||||
}
|
}
|
||||||
|
@ -37,18 +37,19 @@ extern const mp_obj_type_t digitalio_digitalinout_type;
|
|||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DIGITALINOUT_OK,
|
DIGITALINOUT_OK,
|
||||||
DIGITALINOUT_PIN_BUSY
|
DIGITALINOUT_PIN_BUSY,
|
||||||
|
DIGITALINOUT_INPUT_ONLY
|
||||||
} digitalinout_result_t;
|
} digitalinout_result_t;
|
||||||
|
|
||||||
digitalinout_result_t common_hal_digitalio_digitalinout_construct(digitalio_digitalinout_obj_t* self, const mcu_pin_obj_t* pin);
|
digitalinout_result_t common_hal_digitalio_digitalinout_construct(digitalio_digitalinout_obj_t* self, const mcu_pin_obj_t* pin);
|
||||||
void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t* self);
|
void common_hal_digitalio_digitalinout_deinit(digitalio_digitalinout_obj_t* self);
|
||||||
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t* self);
|
bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t* self);
|
||||||
void common_hal_digitalio_digitalinout_switch_to_input(digitalio_digitalinout_obj_t* self, digitalio_pull_t pull);
|
void common_hal_digitalio_digitalinout_switch_to_input(digitalio_digitalinout_obj_t* self, digitalio_pull_t pull);
|
||||||
void common_hal_digitalio_digitalinout_switch_to_output(digitalio_digitalinout_obj_t* self, bool value, digitalio_drive_mode_t drive_mode);
|
digitalinout_result_t common_hal_digitalio_digitalinout_switch_to_output(digitalio_digitalinout_obj_t* self, bool value, digitalio_drive_mode_t drive_mode);
|
||||||
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(digitalio_digitalinout_obj_t* self);
|
digitalio_direction_t common_hal_digitalio_digitalinout_get_direction(digitalio_digitalinout_obj_t* self);
|
||||||
void common_hal_digitalio_digitalinout_set_value(digitalio_digitalinout_obj_t* self, bool value);
|
void common_hal_digitalio_digitalinout_set_value(digitalio_digitalinout_obj_t* self, bool value);
|
||||||
bool common_hal_digitalio_digitalinout_get_value(digitalio_digitalinout_obj_t* self);
|
bool common_hal_digitalio_digitalinout_get_value(digitalio_digitalinout_obj_t* self);
|
||||||
void common_hal_digitalio_digitalinout_set_drive_mode(digitalio_digitalinout_obj_t* self, digitalio_drive_mode_t drive_mode);
|
digitalinout_result_t common_hal_digitalio_digitalinout_set_drive_mode(digitalio_digitalinout_obj_t* self, digitalio_drive_mode_t drive_mode);
|
||||||
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(digitalio_digitalinout_obj_t* self);
|
digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(digitalio_digitalinout_obj_t* self);
|
||||||
void common_hal_digitalio_digitalinout_set_pull(digitalio_digitalinout_obj_t* self, digitalio_pull_t pull);
|
void common_hal_digitalio_digitalinout_set_pull(digitalio_digitalinout_obj_t* self, digitalio_pull_t pull);
|
||||||
digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(digitalio_digitalinout_obj_t* self);
|
digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(digitalio_digitalinout_obj_t* self);
|
||||||
|
@ -147,18 +147,11 @@ void _pixelbuf_parse_color(pixelbuf_pixelbuf_obj_t* self, mp_obj_t color, uint8_
|
|||||||
*r = value >> 16 & 0xff;
|
*r = value >> 16 & 0xff;
|
||||||
*g = (value >> 8) & 0xff;
|
*g = (value >> 8) & 0xff;
|
||||||
*b = value & 0xff;
|
*b = value & 0xff;
|
||||||
// Int colors can't set white directly so convert to white when all components are equal.
|
|
||||||
if (!byteorder->is_dotstar && byteorder->bpp == 4 && byteorder->has_white && *r == *g && *r == *b) {
|
|
||||||
*w = *r;
|
|
||||||
*r = 0;
|
|
||||||
*g = 0;
|
|
||||||
*b = 0;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
mp_obj_t *items;
|
mp_obj_t *items;
|
||||||
size_t len;
|
size_t len;
|
||||||
mp_obj_get_array(color, &len, &items);
|
mp_obj_get_array(color, &len, &items);
|
||||||
if (len != byteorder->bpp && !byteorder->is_dotstar) {
|
if (len < 3 || len > 4) {
|
||||||
mp_raise_ValueError_varg(translate("Expected tuple of length %d, got %d"), byteorder->bpp, len);
|
mp_raise_ValueError_varg(translate("Expected tuple of length %d, got %d"), byteorder->bpp, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,8 +164,17 @@ void _pixelbuf_parse_color(pixelbuf_pixelbuf_obj_t* self, mp_obj_t color, uint8_
|
|||||||
} else {
|
} else {
|
||||||
*w = mp_obj_get_int_truncated(items[PIXEL_W]);
|
*w = mp_obj_get_int_truncated(items[PIXEL_W]);
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Int colors can't set white directly so convert to white when all components are equal.
|
||||||
|
// Also handles RGBW values assigned an RGB tuple.
|
||||||
|
if (!byteorder->is_dotstar && byteorder->bpp == 4 && byteorder->has_white && *r == *g && *r == *b) {
|
||||||
|
*w = *r;
|
||||||
|
*r = 0;
|
||||||
|
*g = 0;
|
||||||
|
*b = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _pixelbuf_set_pixel_color(pixelbuf_pixelbuf_obj_t* self, size_t index, uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
|
void _pixelbuf_set_pixel_color(pixelbuf_pixelbuf_obj_t* self, size_t index, uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
|
||||||
@ -216,12 +218,11 @@ void _pixelbuf_set_pixel(pixelbuf_pixelbuf_obj_t* self, size_t index, mp_obj_t v
|
|||||||
_pixelbuf_set_pixel_color(self, index, r, g, b, w);
|
_pixelbuf_set_pixel_color(self, index, r, g, b, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
void common_hal__pixelbuf_pixelbuf_set_pixels(mp_obj_t self_in, size_t start, size_t stop, size_t step, mp_obj_t* values) {
|
void common_hal__pixelbuf_pixelbuf_set_pixels(mp_obj_t self_in, size_t start, mp_int_t step, size_t slice_len, mp_obj_t* values) {
|
||||||
pixelbuf_pixelbuf_obj_t* self = native_pixelbuf(self_in);
|
pixelbuf_pixelbuf_obj_t* self = native_pixelbuf(self_in);
|
||||||
size_t source_i = 0;
|
for (size_t i = 0; i < slice_len; i++) {
|
||||||
for (size_t target_i = start; target_i < stop; target_i += step) {
|
_pixelbuf_set_pixel(self, start, values[i]);
|
||||||
_pixelbuf_set_pixel(self, target_i, values[source_i]);
|
start+=step;
|
||||||
source_i++;
|
|
||||||
}
|
}
|
||||||
if (self->auto_write) {
|
if (self->auto_write) {
|
||||||
common_hal__pixelbuf_pixelbuf_show(self_in);
|
common_hal__pixelbuf_pixelbuf_show(self_in);
|
||||||
|
Loading…
Reference in New Issue
Block a user