- It was supposed to have been fully removed six months agopull/1085/head
parent
dbdc743dc3
commit
79d2d46a19
@ -1,3 +0,0 @@
|
||||
# -*- mode: sh -*-
|
||||
|
||||
DEFAULT_SKETCH=Kaleidoscope
|
@ -1,24 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
#
|
||||
# Scan all USB devices to find the Model 01's modem device number.
|
||||
#
|
||||
my @output = qx(/usr/sbin/usbconfig show_ifdrv);
|
||||
my $serial_port_number;
|
||||
|
||||
foreach my $line (@output) {
|
||||
chomp $line;
|
||||
|
||||
next unless $line =~ m/umodem(\d+):.*Keyboardio Model 01/;
|
||||
$serial_port_number = $1;
|
||||
}
|
||||
|
||||
die "Can't find Model 01" unless defined($serial_port_number);
|
||||
|
||||
my $serial_port_name = "/dev/cuaU$serial_port_number";
|
||||
die "Missing serial port at $serial_port_name" unless -e $serial_port_name;
|
||||
print "$serial_port_name\n";
|
||||
exit 0;
|
@ -1,92 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
# find-device-port-linux-udev - 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/>.
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use FindBin qw{$Bin};
|
||||
|
||||
die "Usage: $0 VID PID [-v]\n" unless @ARGV >= 2;
|
||||
|
||||
my $vid = shift @ARGV;
|
||||
my $pid = shift @ARGV;
|
||||
my $verbose = shift @ARGV if (@ARGV);
|
||||
my $prefix = '/dev/serial/by-id/';
|
||||
my @paths = `ls $prefix`;
|
||||
my %devices;
|
||||
my @log;
|
||||
|
||||
sub debug {
|
||||
if ($verbose) {
|
||||
print STDERR @_;
|
||||
} else {
|
||||
push @log, @_;
|
||||
}
|
||||
}
|
||||
|
||||
sub print_warning {
|
||||
print STDERR @_;
|
||||
}
|
||||
|
||||
|
||||
debug "Looking for USB device with vid=$vid and pid=$pid\n";
|
||||
|
||||
for my $path (@paths) {
|
||||
chomp($path);
|
||||
debug "Examining $path\n";
|
||||
debug " not symlink\n" unless -l $prefix . $path;
|
||||
next unless -l $prefix . $path;
|
||||
my @data = `udevadm info -q property --name=${prefix}${path}`;
|
||||
for my $line (@data) {
|
||||
chomp($line);
|
||||
my ( $key, $val ) = split( /=/, $line, 2 );
|
||||
$devices{$path}{$key} = $val;
|
||||
}
|
||||
if ( hex $devices{$path}{'ID_VENDOR_ID'} != hex $vid ) {
|
||||
debug " ID_VENDOR_ID $devices{$path}{'ID_VENDOR_ID'} != $vid\n";
|
||||
next;
|
||||
}
|
||||
if ( hex $devices{$path}{'ID_MODEL_ID'} != hex $pid ) {
|
||||
debug " ID_MODEL_ID $devices{$path}{'ID_MODEL_ID'} != $pid\n";
|
||||
next;
|
||||
}
|
||||
|
||||
debug " Found keyboard!\n";
|
||||
|
||||
if ( $devices{$path}{'ID_MM_DEVICE_IGNORE'} ) {
|
||||
debug " ID_MM_DEVICE_IGNORE is set - good!\n";
|
||||
}
|
||||
|
||||
if ( $devices{$path}{'ID_MM_CANDIDATE'}) {
|
||||
my $rules = "$Bin/../etc/60-kaleidoscope.rules";
|
||||
print_warning <<EOWARN
|
||||
|
||||
WARNING: your udev rules are currently configured to suggest
|
||||
that your keyboard is suitable for use by ModemManager. This
|
||||
means that there is a risk of ModemManager interfering. To avoid
|
||||
this, copy
|
||||
|
||||
$rules
|
||||
|
||||
to /etc/udev/rules.d
|
||||
EOWARN
|
||||
}
|
||||
|
||||
print $devices{$path}{DEVNAME};
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#debug("ERROR: I couldn't find a USB device matching the keyboard's USB Vendor and Device IDs\n");
|
||||
#print_warning(join("\n",@log));
|
@ -1,113 +0,0 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
# Based on listArduinos.pl from https://github.com/todbot/usbSearch (License: MIT)
|
||||
# Original (C) 2012, Tod E. Kurt, http://todbot.com/blog/
|
||||
# This version by Michael Richters <gedankenexperimenter@gmail.com> and Jesse Vincent <jesse@keyboard.io>
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
my $vid = shift @ARGV;
|
||||
my $pid = shift @ARGV;
|
||||
|
||||
if (!defined $vid || !defined $pid) {
|
||||
die "$0 has two required parameters, VID and PID";
|
||||
}
|
||||
|
||||
# ioreg might be more machine-readable than system_profiler, but I haven't been able to
|
||||
# get it to produce useful output
|
||||
my @output = qx(/usr/sbin/system_profiler SPUSBDataType 2> /dev/null);
|
||||
|
||||
my $serial = "";
|
||||
my $location = "";
|
||||
|
||||
my $output = join('', @output);
|
||||
|
||||
my @stanzas = split(/\n\n/, $output);
|
||||
foreach my $stanza (@stanzas) {
|
||||
if ($stanza =~ /Product ID: ${pid}/ && $stanza =~ /Vendor ID: ${vid}/) {
|
||||
if ($stanza =~ /Serial Number: (.*?)$/m) {
|
||||
$serial = $1;
|
||||
}
|
||||
if ($stanza =~ /Location ID: (.*?)$/m) {
|
||||
$location = $1;
|
||||
}
|
||||
|
||||
if ($serial) {
|
||||
try_for_raw_serialnum($serial);
|
||||
}
|
||||
if ($location) {
|
||||
try_for_location_id($location);
|
||||
}
|
||||
if ($serial) {
|
||||
try_for_sn_prefix($serial);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
sub try_for_raw_serialnum {
|
||||
my $sn = shift;
|
||||
|
||||
my $serial_port_name = "/dev/cu.usbmodem" . $sn;
|
||||
exit_with_port_if_exists($serial_port_name);
|
||||
|
||||
# High Sierra sometimes has a mismatch between the serial number and the device
|
||||
# filename. I'm not sure why, but system_profiler has a serial number ending in "E",
|
||||
# whereas the device filename ends in "1". In fact, when I change HID.getShortName()
|
||||
# to return "kbio02", the final character is replaced with a "1".
|
||||
|
||||
if ($serial_port_name =~ /\d$/) {
|
||||
chop $serial_port_name;
|
||||
exit_with_port_if_exists($serial_port_name . "1");
|
||||
} else {
|
||||
# If the serial port name doesn't end with a digit, try -appending- rather than replacing
|
||||
# the last character of the port name
|
||||
exit_with_port_if_exists($serial_port_name . "1");
|
||||
|
||||
# and if that didn't work, try replacing the last character with a "1" anyway.
|
||||
# Jason Koh reports that he saw this behavior as required on Catalina in May 2020.
|
||||
|
||||
chop $serial_port_name;
|
||||
exit_with_port_if_exists($serial_port_name . "1");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
sub try_for_location_id {
|
||||
my $location_id = shift;
|
||||
|
||||
# macOS truncates the string of "0"s from the right of the location id.
|
||||
# Here, also, the final character is an appended "1", so if macOS ever stops doing that,
|
||||
# this will need an update, as well.
|
||||
if ($location_id =~ /0x(\d+?)0*\b/) {
|
||||
my $loc = $1;
|
||||
exit_with_port_if_exists("/dev/cu.usbmodem" . $loc . "1");
|
||||
}
|
||||
}
|
||||
|
||||
sub try_for_sn_prefix {
|
||||
my $sn = shift;
|
||||
# If macOS has appended 'E', take it off to maximise our chances of a match.
|
||||
$sn =~ s/E$//;
|
||||
|
||||
# If none of the above tests succeeds, just list the directory and see if there are any
|
||||
# files that have the device shortname that we expect:
|
||||
foreach my $line (qx(ls /dev/cu.usbmodem*)) {
|
||||
if ($line =~ /${sn}/) {
|
||||
chomp $line;
|
||||
print $line;
|
||||
exit 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub exit_with_port_if_exists {
|
||||
my $serial_port_name = shift;
|
||||
|
||||
if (-e $serial_port_name) {
|
||||
print $serial_port_name;
|
||||
exit 0;
|
||||
}
|
||||
}
|
@ -1,41 +0,0 @@
|
||||
# Usage:
|
||||
#
|
||||
# > find-device-port-cygwin.ps1 '1209' '2300' -Format COM
|
||||
# COM7
|
||||
# > find-device-port-cygwin.ps1 '1209' '2300' -Format WSL
|
||||
# /dev/ttyS7
|
||||
# > find-device-port-cygwin.ps1 '1209' '2300' -Format Cygwin
|
||||
# /dev/ttyS6
|
||||
Param(
|
||||
[string]$VendorID,
|
||||
[string]$ProductID, # Careful; $PID is a different builtin
|
||||
[ValidateSet('COM','Cygwin','WSL')][string]$Format
|
||||
)
|
||||
|
||||
$DeviceParametersRegKey = @(Get-ChildItem -ErrorAction SilentlyContinue -Recurse 'HKLM:\SYSTEM\CurrentControlSet\Enum' |
|
||||
Where-Object Name -match "VID_$VendorID&PID_$ProductID" |
|
||||
Where-Object Property -eq PortName)
|
||||
|
||||
if ($DeviceParametersRegKey.Count -eq 0) {
|
||||
throw "Could not find any devices matching VID $VendorID and PID $ProductID which were mapped to a COM port"
|
||||
}
|
||||
|
||||
if ($DeviceParametersRegKey.Count -ge 2) {
|
||||
throw "More than one devices matching VID $VendorID and PID $ProductID were found mapped to a COM port"
|
||||
}
|
||||
|
||||
# This will be of form 'COM6'
|
||||
$COMPortName = ($DeviceParametersRegKey | Get-ItemProperty).PortName
|
||||
$COMPortNumber = [int]$COMPortName.Substring(3)
|
||||
|
||||
if ($Format -eq 'COM') {
|
||||
$Output = $COMPortName
|
||||
} elseif ($Format -eq 'WSL') {
|
||||
$Output = "/dev/ttyS$COMPortNumber"
|
||||
} elseif ($Format -eq 'Cygwin') {
|
||||
$CygwinPortNumber = $COMPortNumber - 1
|
||||
$Output = "/dev/ttyS$CygwinPortNumber"
|
||||
}
|
||||
|
||||
# "-NoNewline" below is important to prevent bash from seeing an extra trailing '\r'
|
||||
Write-Host -NoNewline $Output
|
@ -1,738 +0,0 @@
|
||||
#!/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
|
||||
######
|
||||
|
||||
absolute_filename() {
|
||||
echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")"
|
||||
}
|
||||
|
||||
|
||||
|
||||
build_version () {
|
||||
: "${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}"
|
||||
}
|
||||
|
||||
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}}"
|
||||
|
||||
: "${CCACHE_WRAPPER_PATH:=${KALEIDOSCOPE_TEMP_PATH}/ccache/bin}"
|
||||
: "${CORE_CACHE_PATH:=${KALEIDOSCOPE_TEMP_PATH}/arduino-cores}"
|
||||
|
||||
mkdir -p "$CORE_CACHE_PATH"
|
||||
mkdir -p "$BUILD_PATH"
|
||||
}
|
||||
|
||||
build_filenames () {
|
||||
: "${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}"
|
||||
}
|
||||
|
||||
|
||||
enable_ccache () {
|
||||
if [ -z "${CCACHE_NOT_SUPPORTED}" ] && [ "$(command -v ccache)" ]; then
|
||||
if ! [ -d "$CCACHE_WRAPPER_PATH" ]; then
|
||||
mkdir -p "$CCACHE_WRAPPER_PATH"
|
||||
|
||||
if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}${C_COMPILER_BASENAME}" ]; then
|
||||
ln -s "$(command -v ccache)" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}${C_COMPILER_BASENAME}"
|
||||
fi
|
||||
|
||||
if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}${CXX_COMPILER_BASENAME}" ]; then
|
||||
ln -s "$(command -v ccache)" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}${CXX_COMPILER_BASENAME}"
|
||||
fi
|
||||
|
||||
if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}nm" ]; then
|
||||
ln -s "${AVR_NM}" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}nm"
|
||||
fi
|
||||
|
||||
if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}objcopy" ]; then
|
||||
ln -s "${AVR_OBJCOPY}" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}objcopy"
|
||||
fi
|
||||
|
||||
if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}ar" ]; then
|
||||
ln -s "${AVR_AR}" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}ar"
|
||||
fi
|
||||
|
||||
if ! [ -h "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}size" ]; then
|
||||
ln -s "${AVR_SIZE}" "${CCACHE_WRAPPER_PATH}/${COMPILER_PREFIX}size"
|
||||
fi
|
||||
fi
|
||||
|
||||
export CCACHE_PATH=${COMPILER_PATH}/
|
||||
CCACHE_ENABLE="-prefs compiler.path=${CCACHE_WRAPPER_PATH}/"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
firmware_size () {
|
||||
if [ "${ARCH}" = "virtual" ]; then
|
||||
echo "[Size not computed for virtual build]"
|
||||
return
|
||||
fi
|
||||
|
||||
: "${MAX_PROG_SIZE:=$(get_arduino_pref 'upload.maximum_size')}"
|
||||
|
||||
## This is a terrible hack, please don't hurt me. - algernon
|
||||
|
||||
set +e
|
||||
raw_output=$("$@" 2> /dev/null)
|
||||
rc=$?
|
||||
set -e
|
||||
|
||||
if [ $rc -eq 0 ]; then
|
||||
output="$(echo "${raw_output}"| grep "\\(Program\\|Data\\):" | sed -e 's,^, - ,' && echo)"
|
||||
|
||||
PROGSIZE="$(echo "${output}" | grep "Program:" | cut -d: -f2 | awk '{print $1}')"
|
||||
|
||||
PERCENT="$(echo "${PROGSIZE}" "${MAX_PROG_SIZE}" | awk "{ printf \"%02.01f\", \$1 / \$2 * 100 }")"
|
||||
|
||||
# we want the sed there, doing with shell builtins would be worse.
|
||||
# shellcheck disable=SC2001 disable=SC1117
|
||||
echo "${output}" | sed -e "s/\(Program:.*\)(\([0-9\.]*%\) Full)/\1(${PERCENT}% Full)/"
|
||||
else
|
||||
echo "Unable to determine image size."
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
find_sketch () {
|
||||
if [ -z "${SKETCH}" ]; then
|
||||
echo "SKETCH needs to be set before including this file!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SKETCH_DIR="${SKETCH}"
|
||||
SKETCH_BASE_NAME=$(basename "$SKETCH")
|
||||
SKETCH_FILE_NAME="${SKETCH_BASE_NAME}.ino"
|
||||
|
||||
for path in "${SKETCH_DIR}" \
|
||||
"src" \
|
||||
"."; do
|
||||
if [ -f "${path}/${SKETCH_FILE_NAME}" ]; then
|
||||
SKETCH_DIR="${path}"
|
||||
SKETCH_FILE_PATH=$(absolute_filename "${SKETCH_DIR}/${SKETCH_FILE_NAME}")
|
||||
return
|
||||
fi
|
||||
done
|
||||
echo "I couldn't find your sketch (.ino file)" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
|
||||
prompt_before_flashing () {
|
||||
flashing_instructions=$(get_arduino_pref '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 () {
|
||||
compile "$@"
|
||||
|
||||
# Check to see if we can see a keyboard bootloader port.
|
||||
# If we -can-, then we should skip over the "reset to bootloader" thing
|
||||
find_bootloader_ports
|
||||
if [ -z "${DEVICE_PORT_BOOTLOADER}" ]; then
|
||||
prompt_before_flashing
|
||||
|
||||
# This is defined in the (optional) user config.
|
||||
# shellcheck disable=SC2154
|
||||
${preFlash_HOOKS}
|
||||
|
||||
# If we're -not- doing a manual reset, then try to do it automatically
|
||||
if [ -z "${MANUAL_RESET}" ]; then
|
||||
reset_device
|
||||
sleep 2
|
||||
find_bootloader_ports
|
||||
# Otherwise, poll for a bootloader port.
|
||||
else
|
||||
wait_for_bootloader_port
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
check_bootloader_port_and_flash
|
||||
|
||||
# This is defined in the (optional) user config.
|
||||
# shellcheck disable=SC2154
|
||||
${postFlash_HOOKS}
|
||||
}
|
||||
|
||||
wait_for_bootloader_port() {
|
||||
declare -i tries
|
||||
tries=15
|
||||
|
||||
while [ "$tries" -gt 0 ] && [ -z "${DEVICE_PORT_BOOTLOADER}" ]; do
|
||||
sleep 1
|
||||
printf "."
|
||||
find_bootloader_ports
|
||||
# the variable annotations do appear to be necessary
|
||||
# shellcheck disable=SC2004
|
||||
tries=$(($tries-1))
|
||||
done
|
||||
|
||||
if [ "$tries" -gt 0 ]; then
|
||||
echo "Found."
|
||||
else
|
||||
echo "Timed out."
|
||||
fi
|
||||
}
|
||||
|
||||
check_bootloader_port () {
|
||||
if [ -z "${DEVICE_PORT_BOOTLOADER}" ]; then
|
||||
echo "Unable to detect a keyboard in bootloader mode."
|
||||
echo "You may need to hold a key or hit a reset button."
|
||||
echo "Please check your keyboard's documentation"
|
||||
return 1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
check_bootloader_port_and_flash () {
|
||||
|
||||
if ! check_bootloader_port; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Flashing your keyboard:"
|
||||
|
||||
# If the flash fails, try a second time
|
||||
if ! flash_over_usb; then
|
||||
sleep 2
|
||||
if ! flash_over_usb; then
|
||||
if [ "${ARDUINO_VERBOSE}" != "-verbose" ]; then
|
||||
echo "Something went wrong."
|
||||
echo "You might want to try flashing again with the VERBOSE environment variable set"
|
||||
fi
|
||||
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
echo "Keyboard flashed successfully!"
|
||||
return 0
|
||||
}
|
||||
|
||||
flash_over_usb () {
|
||||
|
||||
FLASH_CMD=$(${AVRDUDE} \
|
||||
-C "${AVRDUDE_CONF}" \
|
||||
-p"${MCU}" \
|
||||
-cavr109 \
|
||||
-D \
|
||||
-P "${DEVICE_PORT_BOOTLOADER}" \
|
||||
-b57600 \
|
||||
"-Uflash:w:${HEX_FILE_PATH}:i")
|
||||
|
||||
if [ "${ARDUINO_VERBOSE}" != "-verbose" ]; then
|
||||
${FLASH_CMD} 2>&1 |grep -v ^avrdude | grep -v '^$' |grep -v '^ ' | grep -vi programmer
|
||||
return "${PIPESTATUS[0]}"
|
||||
else
|
||||
${FLASH_CMD}
|
||||
return $?
|
||||
fi
|
||||
}
|
||||
|
||||
flash_from_bootloader() {
|
||||
compile "$@"
|
||||
prompt_before_flashing
|
||||
find_bootloader_ports
|
||||
check_bootloader_port_and_flash
|
||||
}
|
||||
|
||||
program() {
|
||||
compile "$@"
|
||||
prompt_before_flashing
|
||||
flash_with_programmer
|
||||
}
|
||||
|
||||
flash_with_programmer() {
|
||||
${AVRDUDE} -v \
|
||||
-C "${AVRDUDE_CONF}" \
|
||||
-p"${MCU}" \
|
||||
-cusbtiny \
|
||||
-D \
|
||||
-B 1 \
|
||||
"-Uflash:w:${HEX_FILE_PATH}:i"
|
||||
}
|
||||
|
||||
find_bootloader_path() {
|
||||
BOOTLOADER_FILE=$( get_arduino_pref 'bootloader.file' )
|
||||
: "${BOOTLOADER_FILE:=caterina/Caterina.hex}"
|
||||
: "${BOOTLOADER_PATH:=${BOARD_HARDWARE_PATH}/keyboardio/avr/bootloaders/${BOOTLOADER_FILE}}"
|
||||
}
|
||||
|
||||
|
||||
hex_with_bootloader () {
|
||||
compile
|
||||
|
||||
find_bootloader_path
|
||||
|
||||
awk '/^:00000001FF/ == 0' "${HEX_FILE_PATH}" > "${HEX_FILE_WITH_BOOTLOADER_PATH}"
|
||||
echo "Using ${BOOTLOADER_PATH}"
|
||||
${MD5} "${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
|
||||
}
|
||||
|
||||
build () {
|
||||
compile "$@"
|
||||
size "$@"
|
||||
}
|
||||
|
||||
|
||||
prepare_ccache () {
|
||||
build_paths
|
||||
enable_ccache
|
||||
}
|
||||
compile () {
|
||||
find_sketch
|
||||
build_version
|
||||
build_paths
|
||||
build_filenames
|
||||
# If the hex file is older than the sketch file, or the hex file does not exist
|
||||
# then rebuild. This is not as correct as letting make check our dependencies
|
||||
# But it's less broken for most user use cases
|
||||
# TODO(anyone): Make this suck less
|
||||
if [ "${HEX_FILE_PATH}" -ot "${SKETCH_FILE_PATH}" ]; then
|
||||
do_compile "$@"
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
do_compile () {
|
||||
prepare_ccache
|
||||
|
||||
install -d "${OUTPUT_PATH}"
|
||||
|
||||
echo "Building ${SKETCH_FILE_PATH}"
|
||||
|
||||
# This is defined in the (optional) user config.
|
||||
# shellcheck disable=SC2154
|
||||
${compile_HOOKS}
|
||||
|
||||
if [ -d "${ARDUINO_LOCAL_LIB_PATH}/libraries" ]; then
|
||||
# shellcheck disable=SC2089
|
||||
# We want literal backslashes here, not arrays.
|
||||
local_LIBS="-libraries \"${ARDUINO_LOCAL_LIB_PATH}/libraries\""
|
||||
fi
|
||||
|
||||
ARDUINO_PACKAGES=""
|
||||
if [ -d "${ARDUINO_PACKAGE_PATH}" ]; then
|
||||
# shellcheck disable=SC2089
|
||||
# We want literal backslashes here, not arrays.
|
||||
ARDUINO_PACKAGES="-hardware \"${ARDUINO_PACKAGE_PATH}\""
|
||||
fi
|
||||
|
||||
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
|
||||
if [ -z "${ARCH}" ]; then
|
||||
FQBN="keyboardio:avr:${BOARD}"
|
||||
else
|
||||
FQBN="keyboardio:${ARCH}:${BOARD}"
|
||||
fi
|
||||
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}}"
|
||||
|
||||
# SC2091: We do not care if quotes or backslashes are not respected.
|
||||
# SC2086: We want word splitting.
|
||||
# shellcheck disable=SC2086,SC2090
|
||||
"${ARDUINO_BUILDER}" \
|
||||
-compile \
|
||||
${ARDUINO_PACKAGES} \
|
||||
-hardware "${ARDUINO_PATH}/hardware" \
|
||||
-hardware "${BOARD_HARDWARE_PATH}" \
|
||||
${ARDUINO_TOOLS_FLAG:+"${ARDUINO_TOOLS_FLAG}"} ${ARDUINO_TOOLS_PARAM:+"${ARDUINO_TOOLS_PARAM}"} \
|
||||
-tools "${ARDUINO_BUILDER_TOOLS_PATH}" \
|
||||
-fqbn "${FQBN}" \
|
||||
-libraries "." \
|
||||
-libraries "${KALEIDOSCOPE_DIR}" \
|
||||
-libraries "${BOARD_HARDWARE_PATH}/.." \
|
||||
${local_LIBS} \
|
||||
${EXTRA_BUILDER_ARGS} \
|
||||
-build-cache "${CORE_CACHE_PATH}" \
|
||||
-build-path "${BUILD_PATH}" \
|
||||
-ide-version "${ARDUINO_IDE_VERSION}" \
|
||||
-built-in-libraries "${ARDUINO_PATH}/libraries" \
|
||||
-prefs "compiler.cpp.extra_flags=${ARDUINO_CFLAGS} ${LOCAL_CFLAGS}" \
|
||||
-prefs "compiler.path=${COMPILER_PATH}" \
|
||||
-prefs "compiler.c.cmd=${_CMD_CC}" \
|
||||
-prefs "compiler.cpp.cmd=${_CMD_CXX}" \
|
||||
-prefs "compiler.ar.cmd=${_CMD_AR}" \
|
||||
-prefs "compiler.c.elf.cmd=${_CMD_CXX}" \
|
||||
$CCACHE_ENABLE \
|
||||
-warnings all \
|
||||
${ARDUINO_VERBOSE} \
|
||||
${ARDUINO_AVR_GCC_PREFIX_PARAM} \
|
||||
"${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}"
|
||||
}
|
||||
|
||||
find_all_sketches () {
|
||||
for plugin in ./*.ino \
|
||||
$([ -d examples ] && find examples -name '*.ino') \
|
||||
src/*.ino; do
|
||||
if [ -d "$(dirname "${plugin}")" ] || [ -f "${plugin}" ]; then
|
||||
p="$(basename "${plugin}" .ino)"
|
||||
if [ "${p}" != '*' ]; then
|
||||
case "${plugin}" in
|
||||
examples/*/${p}/${p}.ino)
|
||||
echo "${plugin}" | sed -e "s,examples/,," | sed -e "s,/${p}\\.ino,,"
|
||||
;;
|
||||
*)
|
||||
echo "${p}"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
done | sort
|
||||
}
|
||||
|
||||
build_all () {
|
||||
plugins="$(find_all_sketches)"
|
||||
|
||||
for plugin in ${plugins}; do
|
||||
export SKETCH="${plugin}"
|
||||
$0 "${plugin}" build
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
compile_all () {
|
||||
plugins="$(find_all_sketches)"
|
||||
|
||||
for plugin in ${plugins}; do
|
||||
export SKETCH="${plugin}"
|
||||
$0 "${plugin}" compile
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
size () {
|
||||
compile
|
||||
|
||||
echo "- Size: ${ELF_FILE_PATH}"
|
||||
# shellcheck disable=SC2086
|
||||
firmware_size "${AVR_SIZE}" ${AVR_SIZE_FLAGS} "${ELF_FILE_PATH}"
|
||||
echo
|
||||
}
|
||||
|
||||
size_map () {
|
||||
compile
|
||||
|
||||
"${AVR_NM}" --size-sort -C -r -l -t decimal "${ELF_FILE_PATH}"
|
||||
}
|
||||
|
||||
disassemble () {
|
||||
compile
|
||||
|
||||
"${AVR_OBJDUMP}" -C -d "${ELF_FILE_PATH}"
|
||||
}
|
||||
|
||||
decompile () {
|
||||
disassemble
|
||||
}
|
||||
|
||||
clean () {
|
||||
find_sketch
|
||||
build_paths
|
||||
rm -rf -- "${OUTPUT_PATH}"
|
||||
rm -rf -- "${BUILD_PATH}"
|
||||
kaleidoscope_dir="$(dirname "$0")/.."
|
||||
if [ -d "${kaleidoscope_dir}/testing/googletest/build" ]; then
|
||||
( cd "${kaleidoscope_dir}/testing/googletest/build" &&
|
||||
cmake .. &&
|
||||
make clean)
|
||||
fi
|
||||
}
|
||||
|
||||
reset_device() {
|
||||
find_device_port
|
||||
check_device_port
|
||||
reset_device_cmd
|
||||
}
|
||||
|
||||
check_device_port () {
|
||||
if [ -z "$DEVICE_PORT" ]; then
|
||||
cat <<EOF >&2
|
||||
|
||||
I couldn't autodetect the keyboard's serial port.
|
||||
|
||||
If you see this message and your keyboard is connected to your computer,
|
||||
it may mean that our serial port detection logic is buggy or incomplete.
|
||||
In that case, please report this issue at:
|
||||
https://github.com/keyboardio/Kaleidoscope
|
||||
EOF
|
||||
exit 1
|
||||
elif echo "$DEVICE_PORT" | grep -q '[[:space:]]'; then
|
||||
cat <<EOF >&2
|
||||
Unexpected whitespace found in detected serial port:
|
||||
|
||||
$DEVICE_PORT
|
||||
|
||||
If you see this message, it means that our serial port
|
||||
detection logic is buggy or incomplete.
|
||||
|
||||
Please report this issue at:
|
||||
https://github.com/keyboardio/Kaleidoscope
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -w "$DEVICE_PORT" ]; then
|
||||
cat <<EOF >&2
|
||||
|
||||
In order to update your keyboard's firmware you need to have permission
|
||||
to write to its serial port $DEVICE_PORT.
|
||||
|
||||
It appears that you do not have this permission:
|
||||
|
||||
$(ls -l "$DEVICE_PORT")
|
||||
|
||||
This may be because you're not in the correct unix group:
|
||||
|
||||
$(stat -c %G "$DEVICE_PORT").
|
||||
|
||||
You are currently in the following groups:
|
||||
|
||||
$(id -Gn)
|
||||
|
||||
Please ensure you have followed the instructions on setting up your
|
||||
account to be in the right group:
|
||||
|
||||
https://github.com/keyboardio/Kaleidoscope/wiki/Install-Arduino-support-on-Linux
|
||||
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
deprecation_message() {
|
||||
echo "kaleidoscope-builder is deprecated and will be removed"
|
||||
echo "by February 15, 2021"
|
||||
echo ""
|
||||
echo "To switch to the new build system, replace your sketch's"
|
||||
echo "Makefile with a copy of:"
|
||||
echo ""
|
||||
echo "${KALEIDOSCOPE_DIR}/etc/Makefile.sketch"
|
||||
echo ""
|
||||
}
|
||||
|
||||
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.
|
||||
|
||||
size
|
||||
Reports the size of the compiled sketch.
|
||||
|
||||
build
|
||||
Runs compile and report-size.
|
||||
|
||||
clean
|
||||
Cleans up the output directory.
|
||||
|
||||
size-map
|
||||
Displays the size map for the sketch.
|
||||
|
||||
disassemble
|
||||
Decompile the sketch.
|
||||
|
||||
reset-device
|
||||
Reset the device.
|
||||
|
||||
flash
|
||||
Flashes the firmware using avrdude.
|
||||
|
||||
build-all
|
||||
Build all Sketches we can find.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
KALEIDOSCOPE_DIR="$(cd "$(dirname "$0")"/..; pwd)"
|
||||
# shellcheck disable=SC2034
|
||||
KALEIDOSCOPE_BIN_DIR="${KALEIDOSCOPE_DIR}/bin/"
|
||||
|
||||
|
||||
help () {
|
||||
usage
|
||||
}
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
## Parse the command-line
|
||||
## - anything that has a =, is an env var
|
||||
## - from the remaining stuff, the first one is the Library/Sketch
|
||||
## - everything else are commands
|
||||
##
|
||||
## - if there is only one argument, that's a command
|
||||
|
||||
|
||||
deprecation_message
|
||||
|
||||
|
||||
# shellcheck disable=SC2155
|
||||
export SOURCEDIR="$(pwd)"
|
||||
|
||||
|
||||
for conf_file in \
|
||||
"${HOME}/.kaleidoscope-builder.conf" \
|
||||
"${SOURCEDIR}/.kaleidoscope-builder.conf" \
|
||||
"${SOURCEDIR}/kaleidoscope-builder.conf" \
|
||||
"${KALEIDOSCOPE_DIR}/etc/kaleidoscope-builder.conf"; do
|
||||
if [ -e "${conf_file}" ]; then
|
||||
# shellcheck disable=SC1090
|
||||
. "${conf_file}"
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
|
||||
|
||||
if [ -n "${VERBOSE}" ] && [[ "${VERBOSE}" -gt 0 ]]; then
|
||||
ARDUINO_VERBOSE="-verbose"
|
||||
else
|
||||
ARDUINO_VERBOSE="-quiet"
|
||||
fi
|
||||
|
||||
cmds=""
|
||||
|
||||
## Export vars
|
||||
for i in $(seq 1 $#); do
|
||||
v="$1"
|
||||
shift
|
||||
|
||||
case "${v}" in
|
||||
*=*)
|
||||
# Exporting an expansion is *precisely* what we want here.
|
||||
# shellcheck disable=SC2086,SC2163
|
||||
export ${v}
|
||||
;;
|
||||
*)
|
||||
cmds="${cmds} ${v}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Word splitting is desired here.
|
||||
# shellcheck disable=SC2086
|
||||
set -- ${cmds}
|
||||
|
||||
if [ $# -eq 1 ]; then
|
||||
cmd="$(echo "$1" | tr '-' '_')"
|
||||
${cmd}
|
||||
exit $?
|
||||
fi
|
||||
|
||||
SKETCH="$1"
|
||||
shift
|
||||
|
||||
if [ "${SKETCH}" = "default" ]; then
|
||||
SKETCH="${DEFAULT_SKETCH}"
|
||||
fi
|
||||
|
||||
cmds=""
|
||||
|
||||
# shellcheck disable=2034
|
||||
for i in $(seq 1 $#); do
|
||||
cmds="${cmds} $(echo "$1" | tr '-' '_')"
|
||||
shift
|
||||
done
|
||||
|
||||
for cmd in ${cmds}; do
|
||||
${cmd}
|
||||
done
|
@ -1,274 +0,0 @@
|
||||
# -*- shell-script -*-
|
||||
|
||||
## NEEDS: SKETCH
|
||||
## Should be included when the current directory is the dir of the Sketch.
|
||||
|
||||
SKETCH="${SKETCH:-${DEFAULT_SKETCH}}"
|
||||
|
||||
########
|
||||
######## Keyboard hardware definitions
|
||||
########
|
||||
|
||||
: "${BOARD:=model01}"
|
||||
: "${MCU:=atmega32u4}"
|
||||
|
||||
if [ -z "${ARCH}" ]; then
|
||||
ARCH=$(echo "${FQBN}" | sed -n -e 's/^[^:]\+:\([^:]\+\).*/\1/p')
|
||||
fi
|
||||
|
||||
if [ "${ARCH}" = "virtual" ]; then
|
||||
: "${FQBN:=keyboardio:virtual:${BOARD}}"
|
||||
|
||||
# Set the compiler path for virtual builds
|
||||
#
|
||||
if [ -z "${COMPILER_PATH}" ]; then
|
||||
COMPILER_PATH="/usr/bin/"
|
||||
fi
|
||||
|
||||
COMPILER_PREFIX=""
|
||||
else
|
||||
ARCH="avr"
|
||||
fi
|
||||
|
||||
if [ -z "${FQBN}" ]; then
|
||||
: "${FQBN:=keyboardio:avr:${BOARD}}"
|
||||
fi
|
||||
|
||||
########
|
||||
######## Host OS specific commands
|
||||
########
|
||||
|
||||
## 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)
|
||||
|
||||
|
||||
find_device_vid_pid() {
|
||||
: ${VID:=$(get_arduino_pref 'build.vid')}
|
||||
: ${SKETCH_PID:=$(get_arduino_pref 'build.pid')}
|
||||
: ${BOOTLOADER_PID:=$(get_arduino_pref 'bootloader.pid')}
|
||||
: ${BOOTLOADER_VID:=$(get_arduino_pref 'bootloader.vid')}
|
||||
}
|
||||
|
||||
|
||||
get_arduino_pref() {
|
||||
pref=$1
|
||||
# Strip the preference name. And then strip leading and trailing quotations
|
||||
MESSAGE=$(dump_arduino_prefs | grep --max-count=1 ${pref}= | sed -e s/^.*${pref}=// -e 's/^"//' -e 's/"$//')
|
||||
echo $MESSAGE
|
||||
}
|
||||
|
||||
|
||||
dump_arduino_prefs() {
|
||||
# SKETCH and -build-path in this command are here because of a bug introduced in Arduino 1.8.10
|
||||
# https://github.com/arduino/arduino-builder/issues/341
|
||||
|
||||
if [ "x${_ARDUINO_PREFS}x" == "xx" ]; then
|
||||
|
||||
_ARDUINO_PREFS=$("${ARDUINO_BUILDER}" \
|
||||
-hardware "${ARDUINO_PATH}/hardware" \
|
||||
-hardware "${BOARD_HARDWARE_PATH}" \
|
||||
${ARDUINO_TOOLS_FLAG:+"${ARDUINO_TOOLS_FLAG}"} ${ARDUINO_TOOLS_PARAM:+"${ARDUINO_TOOLS_PARAM}"} \
|
||||
-tools "${ARDUINO_BUILDER_TOOLS_PATH}" \
|
||||
-fqbn "${FQBN}" \
|
||||
-build-path "${ARDUINO_PATH}" \
|
||||
-dump-prefs "${SKETCH_DIR}/${SKETCH}.ino" )
|
||||
fi
|
||||
echo "$_ARDUINO_PREFS"
|
||||
|
||||
}
|
||||
|
||||
find_device_port() {
|
||||
find_device_vid_pid
|
||||
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-linux-udev"
|
||||
if [[ "${DEVICE_PORT}" = "" ]]; then
|
||||
DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID})"
|
||||
else
|
||||
echo "DEVICE_PORT=\"${DEVICE_PORT}\" predefined."
|
||||
fi
|
||||
}
|
||||
|
||||
reset_device_cmd() {
|
||||
if [ -z ${NO_RESET} ]; then
|
||||
stty -F ${DEVICE_PORT} 1200 hupcl
|
||||
fi
|
||||
}
|
||||
|
||||
find_bootloader_ports() {
|
||||
find_device_vid_pid
|
||||
: "${BOOTLOADER_VID:=${VID}}"
|
||||
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-linux-udev"
|
||||
if [[ "${DEVICE_PORT_BOOTLOADER}" = "" ]]; then
|
||||
DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER} ${BOOTLOADER_VID} ${BOOTLOADER_PID})"
|
||||
else
|
||||
echo "DEVICE_PORT_BOOTLOADER=\"${DEVICE_PORT_BOOTLOADER}\" predefined."
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
MD5="md5sum"
|
||||
|
||||
if [ "${uname_S}" = "Darwin" ]; then
|
||||
|
||||
find_device_port() {
|
||||
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-macos"
|
||||
DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID})"
|
||||
}
|
||||
|
||||
reset_device_cmd() {
|
||||
/bin/stty -f ${DEVICE_PORT} 1200
|
||||
}
|
||||
|
||||
: "${ARDUINO_PATH:=/Applications/Arduino.app/Contents/Java/}"
|
||||
: "${ARDUINO_PACKAGE_PATH:=${HOME}/Library/Arduino15/packages}"
|
||||
: "${ARDUINO_LOCAL_LIB_PATH:=${HOME}/Documents/Arduino}"
|
||||
|
||||
MD5="md5"
|
||||
|
||||
find_bootloader_ports() {
|
||||
find_device_vid_pid
|
||||
: "${BOOTLOADER_VID:=${VID}}"
|
||||
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-macos"
|
||||
if [[ "${DEVICE_PORT_BOOTLOADER}" = "" ]]; then
|
||||
DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER} ${BOOTLOADER_VID} ${BOOTLOADER_PID})"
|
||||
else
|
||||
echo "DEVICE_PORT_BOOTLOADER=\"${DEVICE_PORT_BOOTLOADER}\" predefined."
|
||||
fi
|
||||
}
|
||||
|
||||
elif [ "${uname_S}" = "FreeBSD" ]; then
|
||||
|
||||
find_device_port() {
|
||||
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-freebsd"
|
||||
DEVICE_PORT="$(perl ${DEVICE_PORT_PROBER})"
|
||||
}
|
||||
|
||||
reset_device_cmd() {
|
||||
/bin/stty -f ${DEVICE_PORT} 1200
|
||||
}
|
||||
|
||||
MD5="md5"
|
||||
: "${AVR_SIZE:=/usr/local/bin/avr-size}"
|
||||
: "${AVR_NM:=/usr/local/bin/avr-nm}"
|
||||
: "${AVR_OBJDUMP:=/usr/local/bin/avr-objdump}"
|
||||
: "${AVRDUDE:=/usr/local/bin/avrdude}"
|
||||
: "${AVRDUDE_CONF:=/usr/local/etc/avrdude.conf}"
|
||||
: "${ARDUINO_BUILDER:=/usr/local/bin/arduino-builder}"
|
||||
|
||||
find_bootloader_ports() {
|
||||
DEVICE_PORT_PROBER="${KALEIDOSCPE_BIN_DIR}/find-device-port-freebsd"
|
||||
DEVICE_PORT_BOOTLOADER="$(perl ${DEVICE_PORT_PROBER})"
|
||||
}
|
||||
|
||||
if [ "${ARCH}" = "virtual" ]; then
|
||||
: "${COMPILER_PATH:=/usr/local/bin/}"
|
||||
fi
|
||||
|
||||
elif [ "${uname_O}" = "Cygwin" ]; then
|
||||
# The Windows arduino-builder.exe doesn't understand being told to exec against Cygwin symlinks
|
||||
CCACHE_NOT_SUPPORTED=1
|
||||
|
||||
# Note: the default ARDUINO_PATH here is the default Arduino installation path on Windows, but it won't actually
|
||||
# work in practice right now since we haven't fixed all bugs related to interpretation of spaces in these paths.
|
||||
#
|
||||
# It's important that all of these be underneath /cygdrive/c so they can be converted to Windows paths that the
|
||||
# Windows Arduino binaries can understand.
|
||||
: "${ARDUINO_PATH:=/cygdrive/c/Program\ Files\ (x86)/Arduino}"
|
||||
: "${ARDUINO_PACKAGE_PATH:=/cygdrive/c/Users/${USER}/AppData/Local/Arduino15/packages}"
|
||||
: "${ARDUINO_LOCAL_LIB_PATH:=/cygdrive/c/Users/${USER}/Arduino}"
|
||||
TMPDIR="${ARDUINO_LOCAL_LIB_PATH:-/cygdrive/c/Users/${USER}/AppData/Local/Temp}"
|
||||
|
||||
# We need to prevent Windows executables from being passed parameters that are absolute paths, since they won't
|
||||
# be interpretable when of the form /cygdrive/c/foo. To work around this, we set the common path root variables
|
||||
# to use relative paths instead of absolute paths, since those have mostly platform-agnostic behavior.
|
||||
#
|
||||
# Note that this trick requires that all of these paths exist on the same drive letter as the current directory,
|
||||
# since otherwise even the relative paths would include Cygwin-specific components. So...
|
||||
if [[ $(realpath --relative-base=/cygdrive/c .) == /* ]]; then
|
||||
echo "kaleidoscope-builder's Cygwin support is currently limited to running from within /cygdrive/c"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ARDUINO_PATH="$(realpath --relative-to=./ ${ARDUINO_PATH})"
|
||||
ARDUINO_PACKAGE_PATH="$(realpath --relative-to=./ ${ARDUINO_PACKAGE_PATH})"
|
||||
ARDUINO_LOCAL_LIB_PATH="$(realpath --relative-to=./ ${ARDUINO_LOCAL_LIB_PATH})"
|
||||
TMPDIR="$(realpath --relative-to=./ ${ARDUINO_PATH})"
|
||||
|
||||
find_device_port() {
|
||||
find_device_vid_pid
|
||||
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-windows.ps1"
|
||||
DEVICE_PORT="$(powershell -noprofile -executionpolicy bypass ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID} -Format Cygwin)"
|
||||
DEVICE_COM_PORT="$(powershell -noprofile -executionpolicy bypass ${DEVICE_PORT_PROBER} ${VID} ${SKETCH_PID} -Format COM)"
|
||||
}
|
||||
|
||||
reset_device_cmd() {
|
||||
cmd /c mode ${DEVICE_COM_PORT} baud=1200
|
||||
}
|
||||
|
||||
find_bootloader_ports() {
|
||||
find_device_vid_pid
|
||||
: "${BOOTLOADER_VID:=${VID}}"
|
||||
DEVICE_PORT_PROBER="${KALEIDOSCOPE_BIN_DIR}/find-device-port-windows.ps1"
|
||||
DEVICE_PORT_BOOTLOADER="$(powershell -noprofile -executionpolicy bypass ${DEVICE_PORT_PROBER} ${BOOTLOADER_VID} ${BOOTLOADER_PID} -Format COM)"
|
||||
}
|
||||
|
||||
fi
|
||||
|
||||
######
|
||||
###### Arduino tools configuration
|
||||
######
|
||||
|
||||
: "${ARDUINO_PATH:=/usr/local/arduino}"
|
||||
: "${ARDUINO_LOCAL_LIB_PATH:=${HOME}/Arduino}"
|
||||
: "${ARDUINO_TOOLS_PATH:=${ARDUINO_PATH}/hardware/tools}"
|
||||
: "${ARDUINO_PACKAGE_PATH:=${HOME}/.arduino15/packages}"
|
||||
: "${ARDUINO_BUILDER:=${ARDUINO_PATH}/arduino-builder}"
|
||||
: "${ARDUINO_BUILDER_TOOLS_PATH:=${ARDUINO_PATH}/tools-builder}"
|
||||
|
||||
ARDUINO_IDE_VERSION="10607"
|
||||
|
||||
######
|
||||
###### Executable paths
|
||||
######
|
||||
|
||||
# Allow the compiler path to be empty for virtual builds
|
||||
: "${COMPILER_PATH=${ARDUINO_TOOLS_PATH}/avr/bin/}"
|
||||
|
||||
COMPILER_SUFFIX=""
|
||||
|
||||
C_COMPILER_BASENAME=$(basename ${CC:-gcc})
|
||||
CXX_COMPILER_BASENAME=$(basename ${CXX:-g++})
|
||||
AR_BASENAME=$(basename ${AR:-ar})
|
||||
OBJCOPY_BASENAME=$(basename ${OBJCOPY:-objcopy})
|
||||
|
||||
# Allow the compiler prefix to be empty for virtual builds
|
||||
COMPILER_PREFIX="${COMPILER_PREFIX-avr-}"
|
||||
: "${AVR_SIZE:=${COMPILER_PATH}/${COMPILER_PREFIX}size}"
|
||||
: "${AVR_SIZE_FLAGS:=-C --mcu=${MCU}}"
|
||||
: "${AVR_OBJDUMP:=${COMPILER_PATH}/${COMPILER_PREFIX}objdump}"
|
||||
: "${AVR_OBJCOPY:=${COMPILER_PATH}/${COMPILER_PREFIX}objcopy}"
|
||||
: "${AVR_NM:=${COMPILER_PATH}/${COMPILER_PREFIX}nm}"
|
||||
: "${AVR_AR:=${COMPILER_PATH}/${COMPILER_PREFIX}ar}"
|
||||
: "${AVR_GCC:=${COMPILER_PATH}/${COMPILER_PREFIX}${C_COMPILER_BASENAME}}"
|
||||
AVR_GPLUSPLUS="${AVR_GCC:-${COMPILER_PATH}/${COMPILER_PREFIX}${CXX_COMPILER_BASENAME}}"
|
||||
|
||||
|
||||
|
||||
: "${AVRDUDE:=${ARDUINO_TOOLS_PATH}/avr/bin/avrdude}"
|
||||
: "${AVRDUDE_CONF:=${ARDUINO_TOOLS_PATH}/avr/etc/avrdude.conf}"
|
||||
|
||||
######
|
||||
###### Source files and dependencies
|
||||
######
|
||||
|
||||
: "${BOARD_HARDWARE_PATH:=${ARDUINO_LOCAL_LIB_PATH}/hardware}"
|
||||
|
||||
if [ ! -z "${ARDUINO_TOOLS_PATH}" ]; then
|
||||
ARDUINO_TOOLS_PARAM="${ARDUINO_TOOLS_PATH}"
|
||||
ARDUINO_TOOLS_FLAG="-tools"
|
||||
fi
|
||||
|
||||
if [ ! -z "${AVR_GCC_PREFIX}" ]; then
|
||||
ARDUINO_AVR_GCC_PREFIX_PARAM="-prefs \"runtime.tools.avr-gcc.path=${AVR_GCC_PREFIX}\""
|
||||
fi
|
@ -1,2 +0,0 @@
|
||||
DEFAULT_SKETCH="Atreus"
|
||||
BOARD="keyboardio_atreus"
|
Loading…
Reference in new issue