|
|
|
#!/usr/bin/env bash
|
|
|
|
# kaleidoscope-builder - Kaleidoscope helper tool
|
|
|
|
# Copyright (C) 2017-2018 Keyboard.io, Inc.
|
|
|
|
#
|
|
|
|
# This program is free software: you can redistribute it and/or modify it under
|
|
|
|
# the terms of the GNU General Public License as published by the Free Software
|
|
|
|
# Foundation, version 3.
|
|
|
|
#
|
|
|
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
|
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License along with
|
|
|
|
# this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
######
|
|
|
|
###### Build and output configuration
|
|
|
|
######
|
|
|
|
|
|
|
|
_identify_os() {
|
|
|
|
## Platform-specific overrides
|
|
|
|
# Shamelessly stolen from git's Makefile
|
|
|
|
uname_S=$(uname -s 2>/dev/null || echo not)
|
|
|
|
uname_O=$(uname -o 2>/dev/null || echo not)
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_read_conf_files() {
|
|
|
|
for conf_file in \
|
|
|
|
"${HOME}/.kaleidoscope-builder.conf" \
|
|
|
|
"$(pwd)/.kaleidoscope-builder.conf" \
|
|
|
|
"$(pwd)/kaleidoscope-builder.conf"; do
|
|
|
|
if [ -e "${conf_file}" ]; then
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
. "${conf_file}"
|
|
|
|
fi
|
|
|
|
|
|
|
|
done
|
|
|
|
}
|
|
|
|
_configure_arduino_cli_env() {
|
|
|
|
system_arduino_cli="$(command -v arduino-cli || true)"
|
|
|
|
|
|
|
|
if [ -z "${system_arduino_cli}" ]; then
|
|
|
|
: "${ARDUINO_CLI:=${KALEIDOSCOPE_BIN_DIR}/arduino-cli}"
|
|
|
|
else
|
|
|
|
: "${ARDUINO_CLI:=${system_arduino_cli}}"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
: "${ARDUINO_CONTENT:=${KALEIDOSCOPE_DIR}/.arduino}"
|
|
|
|
: "${ARDUINO_DIRECTORIES_DATA:=${ARDUINO_CONTENT}/data}"
|
|
|
|
: "${ARDUINO_DIRECTORIES_DOWNLOADS:=${ARDUINO_CONTENT}/downloads}"
|
|
|
|
: "${ARDUINO_DIRECTORIES_USER:=${ARDUINO_CONTENT}/user}"
|
|
|
|
: "${ARDUINO_CLI_CONFIG:=${ARDUINO_DIRECTORIES_DATA}/arduino-cli.yaml}"
|
|
|
|
: "${ARDUINO_BOARDS_MANAGER_KALEIDOSCOPE:=https://raw.githubusercontent.com/keyboardio/boardsmanager/master/package_keyboardio_index.json}"
|
|
|
|
}
|
|
|
|
|
|
|
|
install_arduino_cli() {
|
|
|
|
# todo cd to kaleidoscope dir
|
|
|
|
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
|
|
|
|
}
|
|
|
|
|
|
|
|
configure_arduino_cli() {
|
|
|
|
if [ -z "${ARDUINO_CLI}" ]; then
|
|
|
|
install_arduino_cli
|
|
|
|
fi
|
|
|
|
if [ -z "${ARDUINO_CLI_CONFIG}" ]; then
|
|
|
|
install_arduino_cli_config
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
install_arduino_cli_config() {
|
|
|
|
_run_arduino_cli config init
|
|
|
|
}
|
|
|
|
|
|
|
|
install_arduino_core_kaleidoscope() {
|
|
|
|
install_arduino_core_avr
|
|
|
|
|
|
|
|
install_arduino_core "keyboardio:avr"
|
|
|
|
}
|
|
|
|
|
|
|
|
install_arduino_core_avr() {
|
|
|
|
install_arduino_core "arduino:avr"
|
|
|
|
}
|
|
|
|
|
|
|
|
install_arduino_core() {
|
|
|
|
_run_arduino_cli core install "$1"
|
|
|
|
}
|
|
|
|
|
|
|
|
_run_arduino_cli() {
|
|
|
|
ARDUINO_DIRECTORIES_USER=${ARDUINO_DIRECTORIES_USER} \
|
|
|
|
ARDUINO_DIRECTORIES_DATA=${ARDUINO_DIRECTORIES_DATA} \
|
|
|
|
ARDUINO_DIRECTORIES_DOWNLOADS=${ARDUINO_DIRECTORIES_DOWNLOADS} \
|
|
|
|
ARDUINO_BOARD_MANAGER_ADDITIONAL_URLS=${ARDUINO_BOARDS_MANAGER_KALEIDOSCOPE} \
|
|
|
|
"${ARDUINO_CLI}" "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
_arduino_prop() {
|
|
|
|
pref=$1
|
|
|
|
# Strip the preference name. And then strip leading and trailing quotations
|
|
|
|
_arduino_props | grep --max-count=1 "${pref}=" | sed -e s/^.*"${pref}"=// -e 's/^"//' -e 's/"$//'
|
|
|
|
}
|
|
|
|
|
|
|
|
_arduino_props() {
|
|
|
|
if [ "x${_ARDUINO_PREFS}x" == "xx" ]; then
|
|
|
|
_ARDUINO_PREFS=$(_run_arduino_cli --fqbn "${FQBN}" compile --show-properties "${SKETCH_FILE_PATH}")
|
|
|
|
fi
|
|
|
|
echo "$_ARDUINO_PREFS"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_set_executable_paths() {
|
|
|
|
######
|
|
|
|
###### Executable paths
|
|
|
|
######
|
|
|
|
|
|
|
|
if [ "${ARCH}" = "virtual" ]; then
|
|
|
|
if [ "${uname_S}" = "FreeBSD" ]; then
|
|
|
|
: "${COMPILER_PATH:=/usr/local/bin/}"
|
|
|
|
else
|
|
|
|
: "${COMPILER_PATH:=/usr/bin/}"
|
|
|
|
fi
|
|
|
|
COMPILER_PREFIX=""
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# Allow the compiler path to be empty for virtual builds
|
|
|
|
# should use compiler.path instead of appending bin, but we don't have substitution het
|
|
|
|
: "${COMPILER_PATH=$(_arduino_prop 'runtime.tools.avr-gcc.path')/bin}"
|
|
|
|
|
|
|
|
COMPILER_SUFFIX=""
|
|
|
|
|
|
|
|
C_COMPILER_BASENAME=$(basename "${CC:-gcc}")
|
|
|
|
CXX_COMPILER_BASENAME=$(basename "${CXX:-g++}")
|
|
|
|
AR_BASENAME=$(basename "${AR:-ar}")
|
|
|
|
|
|
|
|
# Allow the compiler prefix to be empty for virtual builds
|
|
|
|
COMPILER_PREFIX="${COMPILER_PREFIX-avr-}"
|
|
|
|
: "${AVR_OBJDUMP:=${COMPILER_PATH}/${COMPILER_PREFIX}objdump}"
|
|
|
|
: "${AVR_OBJCOPY:=${COMPILER_PATH}/${COMPILER_PREFIX}objcopy}"
|
|
|
|
: "${AVR_NM:=${COMPILER_PATH}/${COMPILER_PREFIX}nm}"
|
|
|
|
: "${AVR_SIZE:=${COMPILER_PATH}/${COMPILER_PREFIX}size}"
|
|
|
|
}
|
|
|
|
|
|
|
|
_set_build_paths() {
|
|
|
|
# We need that echo because we\re piping to cksum
|
|
|
|
# shellcheck disable=SC2005
|
|
|
|
SKETCH_IDENTIFIER="$(echo "${SKETCH_FILE_PATH}" | cksum | cut -d ' ' -f 1)-${SKETCH_FILE_NAME}"
|
|
|
|
: "${KALEIDOSCOPE_TEMP_PATH:=${TMPDIR:-/tmp}/kaleidoscope-${USER}}"
|
|
|
|
|
|
|
|
: "${KALEIDOSCOPE_BUILD_PATH:=${KALEIDOSCOPE_TEMP_PATH}/sketch}"
|
|
|
|
: "${KALEIDOSCOPE_OUTPUT_PATH:=${KALEIDOSCOPE_TEMP_PATH}/sketch}"
|
|
|
|
|
|
|
|
: "${SKETCH_OUTPUT_DIR:=${SKETCH_IDENTIFIER}/output}"
|
|
|
|
: "${SKETCH_BUILD_DIR:=${SKETCH_IDENTIFIER}/build}"
|
|
|
|
|
|
|
|
: "${BUILD_PATH:=${KALEIDOSCOPE_BUILD_PATH}/${SKETCH_BUILD_DIR}}"
|
|
|
|
: "${OUTPUT_PATH:=${KALEIDOSCOPE_OUTPUT_PATH}/${SKETCH_OUTPUT_DIR}}"
|
|
|
|
: "${CORE_CACHE_PATH:=${KALEIDOSCOPE_TEMP_PATH}/arduino-cores}"
|
|
|
|
|
|
|
|
|
|
|
|
: "${LIB_PROPERTIES_PATH:="../.."}"
|
|
|
|
GIT_VERSION="$(
|
|
|
|
cd "${SKETCH_DIR}"
|
|
|
|
if [ -d .git ]; then echo -n '-g' && git describe --abbrev=4 --dirty --always; fi
|
|
|
|
)"
|
|
|
|
LIB_VERSION="$(
|
|
|
|
cd "${SKETCH_DIR}"
|
|
|
|
(grep version= "${LIB_PROPERTIES_PATH}/library.properties" 2>/dev/null || echo version=0.0.0) | cut -d= -f2
|
|
|
|
)${GIT_VERSION}"
|
|
|
|
|
|
|
|
|
|
|
|
: "${OUTPUT_FILE_PREFIX:=${SKETCH_BASE_NAME}-${LIB_VERSION}}"
|
|
|
|
: "${HEX_FILE_PATH:=${OUTPUT_PATH}/${OUTPUT_FILE_PREFIX}.hex}"
|
|
|
|
: "${HEX_FILE_WITH_BOOTLOADER_PATH:=${OUTPUT_PATH}/${OUTPUT_FILE_PREFIX}-with-bootloader.hex}"
|
|
|
|
: "${ELF_FILE_PATH:=${OUTPUT_PATH}/${OUTPUT_FILE_PREFIX}.elf}"
|
|
|
|
: "${LIB_FILE_PATH:=${OUTPUT_PATH}/${OUTPUT_FILE_PREFIX}.a}"
|
|
|
|
|
|
|
|
mkdir -p "$BUILD_PATH"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_absolute_filename() {
|
|
|
|
echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")"
|
|
|
|
}
|
|
|
|
_find_sketch() {
|
|
|
|
SKETCH_DIR="${SKETCH:-$(_absolute_filename "$(pwd)")}"
|
|
|
|
SKETCH_BASE_NAME=$(basename "${SKETCH_DIR}")
|
|
|
|
SKETCH_FILE_NAME="${SKETCH_BASE_NAME}.ino"
|
|
|
|
|
|
|
|
# Arduino sketches are usually a file inside directory Foo named Foo.ino, so try that as a fallback
|
|
|
|
for dir in \
|
|
|
|
"${SKETCH_DIR}" \
|
|
|
|
"src/" \
|
|
|
|
"."; do
|
|
|
|
if [ -f "${dir}/${SKETCH_FILE_NAME}" ]; then
|
|
|
|
SKETCH_DIR="${dir}"
|
|
|
|
SKETCH_FILE_PATH=$(_absolute_filename "${dir}/${SKETCH_FILE_NAME}")
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
SKETCH_NOT_FOUND=1
|
|
|
|
}
|
|
|
|
|
|
|
|
_ensure_sketch_found() {
|
|
|
|
if [ -n "${SKETCH_NOT_FOUND}" ]; then
|
|
|
|
echo "I couldn't find your sketch (.ino file)" >&2
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
_prompt_before_flashing() {
|
|
|
|
flashing_instructions=$(_arduino_prop 'build.flashing_instructions')
|
|
|
|
|
|
|
|
if [ "x${flashing_instructions}x" = "xx" ]; then
|
|
|
|
flashing_instructions="If your keyboard needs you to do something to put it in flashing mode, do that now."
|
|
|
|
fi
|
|
|
|
|
|
|
|
printf '%b\n\n' "${flashing_instructions}"
|
|
|
|
echo ""
|
|
|
|
echo "When you're ready to proceed, press 'Enter'."
|
|
|
|
|
|
|
|
# We do not want to permit line continuations here. We just want a newline.
|
|
|
|
# shellcheck disable=SC2162
|
|
|
|
read
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
flash() {
|
|
|
|
_set_up_environment
|
|
|
|
|
|
|
|
|
|
|
|
# Check to see if we can see a keyboard bootloader port.
|
|
|
|
# If we -can-, then we should skip over the "reset to bootloader" thing
|
|
|
|
port="${DEVICE_PORT_BOOTLOADER:=$(_find_bootloader_port)}"
|
|
|
|
if [ -z "${port}" ]; then
|
|
|
|
_prompt_before_flashing
|
|
|
|
|
|
|
|
# This is defined in the (optional) user config.
|
|
|
|
# shellcheck disable=SC2154
|
|
|
|
${preFlash_HOOKS}
|
|
|
|
|
|
|
|
port="${DEVICE_PORT:=$(_find_device_port)}"
|
|
|
|
fi
|
|
|
|
_run_arduino_cli upload \
|
|
|
|
--fqbn "${FQBN}" \
|
|
|
|
--port "${port}" \
|
|
|
|
"${ARDUINO_VERBOSE}"
|
|
|
|
# This is defined in the (optional) user config.
|
|
|
|
# shellcheck disable=SC2154
|
|
|
|
${postFlash_HOOKS}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
hex_with_bootloader() {
|
|
|
|
_set_up_environment
|
|
|
|
|
|
|
|
: "${BOOTLOADER_PATH:=$(_arduino_prop 'runtime.platform.path')/bootloaders/$(_arduino_prop 'bootloader.file')}"
|
|
|
|
|
|
|
|
awk '/^:00000001FF/ == 0' "${HEX_FILE_PATH}" >"${HEX_FILE_WITH_BOOTLOADER_PATH}"
|
|
|
|
echo "Using ${BOOTLOADER_PATH}"
|
|
|
|
cat "${BOOTLOADER_PATH}" >>"${HEX_FILE_WITH_BOOTLOADER_PATH}"
|
|
|
|
ln -sf -- "${OUTPUT_FILE_PREFIX}-with-bootloader.hex" "${OUTPUT_PATH}/${SKETCH_BASE_NAME}-latest-with-bootloader.hex"
|
|
|
|
cat <<-EOF
|
|
|
|
|
|
|
|
Combined firmware and bootloader are now at ${HEX_FILE_WITH_BOOTLOADER_PATH}
|
|
|
|
Make sure you have the bootloader version you expect.
|
|
|
|
|
|
|
|
And TEST THIS ON REAL HARDWARE BEFORE YOU GIVE IT TO ANYONE
|
|
|
|
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
compile() {
|
|
|
|
_set_up_environment
|
|
|
|
|
|
|
|
install -d "${OUTPUT_PATH}"
|
|
|
|
|
|
|
|
echo "Building ${SKETCH_FILE_PATH}"
|
|
|
|
|
|
|
|
# This is defined in the (optional) user config.
|
|
|
|
# shellcheck disable=SC2154
|
|
|
|
${compile_HOOKS}
|
|
|
|
|
|
|
|
SAVED_BOARD="${BOARD}"
|
|
|
|
SAVED_FQBN="${FQBN}"
|
|
|
|
if [ -e "${SKETCH_DIR}/.kaleidoscope-builder.conf" ]; then
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
BOARD="$(. "${SKETCH_DIR}"/.kaleidoscope-builder.conf && echo "${BOARD}")"
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
FQBN="$(. "${SKETCH_DIR}"/.kaleidoscope-builder.conf && echo "${FQBN}")"
|
|
|
|
if [ -n "${BOARD}" ]; then
|
|
|
|
: "${ARCH:=avr}"
|
|
|
|
FQBN="keyboardio:${ARCH}:${BOARD}"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
_CMD_CXX="${CXX:-${COMPILER_PREFIX}${CXX_COMPILER_BASENAME}${COMPILER_SUFFIX}}"
|
|
|
|
_CMD_CC="${CC:-${COMPILER_PREFIX}${C_COMPILER_BASENAME}${COMPILER_SUFFIX}}"
|
|
|
|
_CMD_AR="${AR:-${COMPILER_PREFIX}${AR_BASENAME}${COMPILER_SUFFIX}}"
|
|
|
|
_run_arduino_cli compile \
|
|
|
|
--fqbn "${FQBN}" \
|
|
|
|
--libraries "${KALEIDOSCOPE_DIR}/.." \
|
|
|
|
--build-path "${BUILD_PATH}" \
|
|
|
|
--output-dir "${OUTPUT_PATH}" \
|
|
|
|
--build-cache-path "${CORE_CACHE_PATH}" \
|
|
|
|
--build-properties "compiler.path=${COMPILER_PATH}/" \
|
|
|
|
--build-properties "compiler.c.cmd=${_CMD_CC}" \
|
|
|
|
--build-properties "compiler.cpp.cmd=${_CMD_CXX}" \
|
|
|
|
--build-properties "compiler.ar.cmd=${_CMD_AR}" \
|
|
|
|
--build-properties "compiler.c.elf.cmd=${_CMD_CXX}" \
|
|
|
|
--build-properties "compiler.cpp.extra_flags=${LOCAL_CFLAGS}" \
|
|
|
|
"${ARDUINO_VERBOSE}" \
|
|
|
|
--warnings all \
|
|
|
|
"${SKETCH_FILE_PATH}"
|
|
|
|
|
|
|
|
if [ -z "${LIBONLY}" ]; then
|
|
|
|
cp "${BUILD_PATH}/${SKETCH_FILE_NAME}.hex" "${HEX_FILE_PATH}"
|
|
|
|
cp "${BUILD_PATH}/${SKETCH_FILE_NAME}.elf" "${ELF_FILE_PATH}"
|
|
|
|
ln -sf "${OUTPUT_FILE_PREFIX}.hex" "${OUTPUT_PATH}/${SKETCH_BASE_NAME}-latest.hex"
|
|
|
|
ln -sf "${OUTPUT_FILE_PREFIX}.elf" "${OUTPUT_PATH}/${SKETCH_BASE_NAME}-latest.elf"
|
|
|
|
else
|
|
|
|
cp "${BUILD_PATH}/${SKETCH_FILE_NAME}.a" "${LIB_FILE_PATH}"
|
|
|
|
ln -sf "${OUTPUT_FILE_PREFIX}.a" "${OUTPUT_PATH}/${SKETCH_BASE_NAME}-latest.a"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "${ARDUINO_VERBOSE}" == "--verbose" ]; then
|
|
|
|
echo "Build artifacts can be found in ${BUILD_PATH}"
|
|
|
|
fi
|
|
|
|
|
|
|
|
BOARD="${SAVED_BOARD}"
|
|
|
|
FQBN="${SAVED_FQBN}"
|
|
|
|
}
|
|
|
|
|
|
|
|
size_map() {
|
|
|
|
_set_up_environment
|
|
|
|
"${AVR_NM}" --size-sort -C -r -l -t decimal "${ELF_FILE_PATH}"
|
|
|
|
}
|
|
|
|
|
|
|
|
disassemble() {
|
|
|
|
_set_up_environment
|
|
|
|
"${AVR_OBJDUMP}" -C -d "${ELF_FILE_PATH}"
|
|
|
|
}
|
|
|
|
|
|
|
|
clean() {
|
|
|
|
_set_up_environment
|
|
|
|
if [ -d "$OUTPUT_PATH" ]; then
|
|
|
|
rm -rf -- "${OUTPUT_PATH}"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
_set_up_environment() {
|
|
|
|
_find_sketch
|
|
|
|
_ensure_sketch_found
|
|
|
|
_set_build_paths
|
|
|
|
_set_executable_paths
|
|
|
|
}
|
|
|
|
|
|
|
|
_find_bootloader_port() {
|
|
|
|
_probe_port "$(_arduino_prop 'build.vid')" "$( _arduino_prop 'bootloader.pid' || _arduino_prop 'build.pid')"
|
|
|
|
}
|
|
|
|
|
|
|
|
_find_device_port() {
|
|
|
|
_probe_port "$(_arduino_prop 'build.vid')" "$( _arduino_prop 'build.pid')"
|
|
|
|
}
|
|
|
|
|
|
|
|
_probe_port() {
|
|
|
|
vendor_id=$1
|
|
|
|
product_id=$2
|
|
|
|
if [ "${uname_S}" = "Darwin" ]; then
|
|
|
|
port_prober="${KALEIDOSCOPE_BIN_DIR}/find-device-port-macos"
|
|
|
|
perl "${port_prober}" "${vendor_id}" "${product_id}"
|
|
|
|
elif [ "${uname_O}" = "Cygwin" ]; then
|
|
|
|
port_prober="${KALEIDOSCOPE_BIN_DIR}/find-device-port-windows.ps1"
|
|
|
|
powershell -noprofile -executionpolicy bypass "${port_prober}" "${vendor_id}" "${product_id}" -Format Cygwin
|
|
|
|
#DEVICE_COM_PORT="$(powershell -noprofile -executionpolicy bypass "${port_prober}" "${vendor_id}" "${product_id}" -Format COM)"
|
|
|
|
elif [ "${uname_S}" = "FreeBSD" ]; then
|
|
|
|
port_prober="${KALEIDOSCOPE_BIN_DIR}/find-device-port-freebsd"
|
|
|
|
perl "${port_prober}"
|
|
|
|
else
|
|
|
|
port_prober="${KALEIDOSCOPE_BIN_DIR}/find-device-port-linux-udev"
|
|
|
|
perl "${port_prober}" "${vendor_id}" "${product_id}"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
usage() {
|
|
|
|
cat <<-EOF
|
|
|
|
Usage: $0 SKETCH commands...
|
|
|
|
|
|
|
|
Runs all of the commands in the context of the Sketch.
|
|
|
|
|
|
|
|
Available commands:
|
|
|
|
|
|
|
|
help
|
|
|
|
This help screen.
|
|
|
|
|
|
|
|
compile
|
|
|
|
Compiles the sketch.
|
|
|
|
|
|
|
|
clean
|
|
|
|
Cleans up the output directory.
|
|
|
|
|
|
|
|
size-map
|
|
|
|
Displays the size map for the sketch.
|
|
|
|
|
|
|
|
disassemble
|
|
|
|
Decompile the sketch.
|
|
|
|
|
|
|
|
flash
|
|
|
|
Flashes the firmware using avrdude.
|
|
|
|
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
help() {
|
|
|
|
usage
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
usage
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Temporary migration for old makefiles
|
|
|
|
# I'm not thrilled about how we default to system Arduino dirs.
|
|
|
|
if [ -n "${BOARD_HARDWARE_PATH}" ]; then
|
|
|
|
ARDUINO_DIRECTORIES_USER="${BOARD_HARDWARE_PATH}/../"
|
|
|
|
fi
|
|
|
|
|
|
|
|
: "${KALEIDOSCOPE_DIR:=$( cd "$(dirname "$0")"/.. ; pwd)}"
|
|
|
|
# shellcheck disable=SC2034
|
|
|
|
: "${KALEIDOSCOPE_BIN_DIR:=${KALEIDOSCOPE_DIR}/bin/}"
|
|
|
|
|
|
|
|
_identify_os
|
|
|
|
_read_conf_files
|
|
|
|
_configure_arduino_cli_env
|
|
|
|
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
|
|
|
|
if [ -n "${VERBOSE}" ] && [[ "${VERBOSE}" -gt 0 ]]; then
|
|
|
|
ARDUINO_VERBOSE="--verbose"
|
|
|
|
else
|
|
|
|
ARDUINO_VERBOSE="--quiet"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -z "${ARCH}" && -n "${FQBN}" ]]; then
|
|
|
|
ARCH=$(echo "${FQBN}" | sed -n -e 's/^[^:]\+:\([^:]\+\).*/\1/p')
|
|
|
|
fi
|
|
|
|
|
|
|
|
: "${BOARD:=model01}"
|
|
|
|
: "${ARCH:=avr}"
|
|
|
|
: "${FQBN:=keyboardio:${ARCH}:${BOARD}}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [ $# -eq 2 ]; then
|
|
|
|
SKETCH="$1"
|
|
|
|
shift
|
|
|
|
fi
|
|
|
|
if [ $# -eq 1 ]; then
|
|
|
|
cmd="$(echo "$1" | tr '-' '_')"
|
|
|
|
${cmd}
|
|
|
|
exit $?
|
|
|
|
else
|
|
|
|
"You passed more than two arguments to $0"
|
|
|
|
help
|
|
|
|
exit -1
|
|
|
|
/
|
|
|
|
fi
|