diff --git a/bin/find-device-port-freebsd b/bin/find-device-port-freebsd
deleted file mode 100755
index afe08934..00000000
--- a/bin/find-device-port-freebsd
+++ /dev/null
@@ -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;
diff --git a/bin/find-device-port-linux-udev b/bin/find-device-port-linux-udev
deleted file mode 100644
index 5d00c7a6..00000000
--- a/bin/find-device-port-linux-udev
+++ /dev/null
@@ -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 .
-
-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 < and Jesse Vincent
-
-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;
- }
-}
diff --git a/bin/find-device-port-windows.ps1 b/bin/find-device-port-windows.ps1
deleted file mode 100644
index 0764efd3..00000000
--- a/bin/find-device-port-windows.ps1
+++ /dev/null
@@ -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
diff --git a/bin/kaleidoscope-builder b/bin/kaleidoscope-builder
index 9f2e915d..610fcda3 100755
--- a/bin/kaleidoscope-builder
+++ b/bin/kaleidoscope-builder
@@ -89,6 +89,7 @@ _run_arduino_cli() {
"${ARDUINO_CLI}" "$@"
}
+
_arduino_prop() {
pref=$1
# Strip the preference name. And then strip leading and trailing quotations
@@ -233,26 +234,14 @@ _prompt_before_flashing() {
cmd_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
+ port=$(_run_arduino_cli board list --format=text | grep "$FQBN" |cut -d' ' -f 1)
+ _prompt_before_flashing
_run_arduino_cli upload \
--fqbn "${FQBN}" \
--port "${port}" \
"${ARDUINO_VERBOSE}"
# This is defined in the (optional) user config.
# shellcheck disable=SC2154
- ${postFlash_HOOKS}
}
@@ -361,33 +350,6 @@ _set_up_environment() {
_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
-}
-
cmd_help() {
cat <<-EOF