#!/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 . set -e ###### ###### Build and output configuration ###### _run_arduino_cli() { "${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" } _find_sketch() { if [ -z "${SKETCH_FILE_PATH}" ] || [ ! -f "${SKETCH_FILE_PATH}" ]; then # Didn't find a sketch echo "I couldn't find your sketch (.ino file)" >&2 exit 1 fi } cmd_flash() { #TODO (arduino team) I'd love to do this with their json output #but it's short some of the data we kind of need port=$(_run_arduino_cli board list --format=text | grep "$FQBN" |cut -d' ' -f 1) flashing_instructions=$(_arduino_prop 'build.flashing_instructions') : "${flashing_instructions:="If your keyboard needs you to do something to put it in flashing mode, do that now."}" printf '%b\n\n' "${flashing_instructions}" 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 _run_arduino_cli upload --fqbn "${FQBN}" --port "${port}" "${ARDUINO_VERBOSE}" } cmd_help() { 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 } if [ $# -lt 1 ]; then cmd_help exit 1 fi # shellcheck disable=SC1090 if [ $# -eq 1 ]; then cmd="$(echo "$1" | tr '-' '_')" "cmd_${cmd}" exit $? else "You passed more than two arguments to $0" help exit 1 / fi