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