From 28a4e90565f5ea986401dbd69d74a5a4cc16abab Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 12:24:05 +0300 Subject: [PATCH 01/14] Download windows flashing utils and driver_installer --- .gitignore | 1 + util/wsl_install.sh | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 util/wsl_install.sh diff --git a/.gitignore b/.gitignore index 6029afce4f..0b48b80e59 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,7 @@ quantum/version.h .idea/ CMakeLists.txt .DS_STORE +/util/wsl_downloaded # Eclipse/PyCharm/Other IDE Settings .cproject diff --git a/util/wsl_install.sh b/util/wsl_install.sh new file mode 100644 index 0000000000..87aad77272 --- /dev/null +++ b/util/wsl_install.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +rm -f -r wsl_downloaded +mkdir wsl_downloaded +pushd wsl_downloaded + +echo "Installing dependencies (7z-full, wget)" +echo "This will ask for the sudo password" +sudo apt-get install 7z-full wget + +echo "Installing dfu-programmer" +wget 'http://downloads.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip' +7z x -odfu-programmer dfu-programmer-win-0.7.2.zip + +echo "Installing dfu-util" +wget 'http://dfu-util.sourceforge.net/releases/dfu-util-0.9-win64.zip' +7z x dfu-util-0.9-win64.zip + +echo "Installing teensy_loader_cli" +wget 'https://www.pjrc.com/teensy/teensy_loader_cli_windows.zip' +7z x teensy_loader_cli_windows.zip + +echo "Installing Atmel Flip" +wget 'http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe' +7z x -oFlip Flip\ Installer\ -\ 3.4.7.112.exe + +echo "Downloading the QMK driver installer" +wget -qO- https://api.github.com/repos/qmk/qmk_driver_installer/releases | grep browser_download_url | head -n 1 | cut -d '"' -f 4 | wget -i - + +rm -f *.zip +rm Flip\ Installer\ -\ 3.4.7.112.exe +popd + From aa26464480c3080ed935d49cce3f4b9b33c9c05f Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 13:30:53 +0300 Subject: [PATCH 02/14] Add checks for cloning to the right dir --- util/wsl_install.sh | 71 ++++++++++++++++++++++++++++++--------------- 1 file changed, 48 insertions(+), 23 deletions(-) diff --git a/util/wsl_install.sh b/util/wsl_install.sh index 87aad77272..c3aeba6d6e 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -1,33 +1,58 @@ #!/bin/bash -rm -f -r wsl_downloaded -mkdir wsl_downloaded -pushd wsl_downloaded +download_dir = wsl_downloaded -echo "Installing dependencies (7z-full, wget)" +function install_utils { + rm -f -r $download_dir + mkdir $download_dir + + pushd $download_dir + + echo "Installing dfu-programmer" + wget 'http://downloads.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip' + 7z x -odfu-programmer dfu-programmer-win-0.7.2.zip + + echo "Installing dfu-util" + wget 'http://dfu-util.sourceforge.net/releases/dfu-util-0.9-win64.zip' + 7z x dfu-util-0.9-win64.zip + + echo "Installing teensy_loader_cli" + wget 'https://www.pjrc.com/teensy/teensy_loader_cli_windows.zip' + 7z x teensy_loader_cli_windows.zip + + echo "Installing Atmel Flip" + wget 'http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe' + 7z x -oFlip Flip\ Installer\ -\ 3.4.7.112.exe + + echo "Downloading the QMK driver installer" + wget -qO- https://api.github.com/repos/qmk/qmk_driver_installer/releases | grep browser_download_url | head -n 1 | cut -d '"' -f 4 | wget -i - + + rm -f *.zip + rm Flip\ Installer\ -\ 3.4.7.112.exe + + popd > /dev/null +} + +function make_environment { +} + +echo "Installing dependencies (p7zip-full, wget)" echo "This will ask for the sudo password" -sudo apt-get install 7z-full wget +sudo apt-get install p7zip-full wget -echo "Installing dfu-programmer" -wget 'http://downloads.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip' -7z x -odfu-programmer dfu-programmer-win-0.7.2.zip +dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P) -echo "Installing dfu-util" -wget 'http://dfu-util.sourceforge.net/releases/dfu-util-0.9-win64.zip' -7z x dfu-util-0.9-win64.zip +if [[ $dir != /mnt/* ]]; +then + echo + echo "You need to clone the qmk_firmware repository outside the linux filesystem." + echo "Otherwise the windows executables can't be run." + exit 1 +fi -echo "Installing teensy_loader_cli" -wget 'https://www.pjrc.com/teensy/teensy_loader_cli_windows.zip' -7z x teensy_loader_cli_windows.zip +pushd "$dir" -echo "Installing Atmel Flip" -wget 'http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe' -7z x -oFlip Flip\ Installer\ -\ 3.4.7.112.exe +#install_utils -echo "Downloading the QMK driver installer" -wget -qO- https://api.github.com/repos/qmk/qmk_driver_installer/releases | grep browser_download_url | head -n 1 | cut -d '"' -f 4 | wget -i - - -rm -f *.zip -rm Flip\ Installer\ -\ 3.4.7.112.exe -popd +popd > /dev/null From c2096bb5159f3b0d188653cf17cd771725ae7e1a Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 14:42:02 +0300 Subject: [PATCH 03/14] Add driver installation --- util/drivers.txt | 46 +++++++++++++++++++++++++++++++++++++++++++++ util/wsl_install.sh | 25 ++++++++++++++++++++++-- 2 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 util/drivers.txt diff --git a/util/drivers.txt b/util/drivers.txt new file mode 100644 index 0000000000..d21a748f0e --- /dev/null +++ b/util/drivers.txt @@ -0,0 +1,46 @@ +# The format is +# driver,desc,vid,pid,guid +# Use a comma as a separator without spaces +# Driver can be one of winusb,libusb,libusbk +# Use Windows Powershell and type [guid]::NewGuid() to generate guids +winusb,Kiibohd DFU Bootloader,1C11,B007,aa5a3f86-b81e-4416-89ad-0c1ea1ed63af +libusb,ATxmega16C4,03EB,2FD8,23266ee7-5423-4cc4-993b-034571c43a90 +libusb,ATxmega32C4,03EB,2FD9,d4b62886-2ac8-4534-aa24-eae0a2c3ce43 +libusb,ATxmega64C3,03EB,2FD6,08467ca7-9b5a-41d2-8d8a-4a26d0b5285b +libusb,ATxmega128C3,03EB,2FD7,1ca69799-6d95-46cf-be69-5b3d0eb915e6 +libusb,ATxmega256C3,03EB,2FDA,216ddc8b-6c67-4cc0-b934-482829a483a0 +libusb,ATxmega384C3,03EB,2FDB,0e4e3347-6025-4d49-ba80-2375ea690c28 +libusb,ATxmega64A1U,03EB,2FE8,2553d8fa-7de1-44a6-bdbf-57be8bb37e28 +libusb,ATxmega128A1U,03EB,2FED,6d9fd0ff-755d-4e29-bd29-df0a9a7544b9 +libusb,ATxmega64A4U,03EB,2FDD,bcf5e7c3-44a1-4fd1-971f-9ef9843f6291 +libusb,ATxmega128A4U,03EB,2FDE,3f976bb6-36ca-44cc-a728-844bc1d0d168 +libusb,ATxmega64B3,03EB,2FDF,de280c81-c12a-4ca7-bf34-566151786418 +libusb,ATxmega128B3,03EB,2FE0,2ad1ffeb-eb83-4e78-b34a-d5633771991f +libusb,ATxmega64B1,03EB,2FE1,002874a6-7fc7-413b-9ac4-2b52c5a230bd +libusb,ATxmega128B1,03EB,2FEA,60ea9d08-2ae6-4434-b743-ce6f73537136 +libusb,ATxmega256A3BU,03EB,2FE2,5949bd0a-8bd4-417b-b1c5-7d249836bf0d +libusb,ATxmega16A4U,03EB,2FE3,cc3172b0-e86a-4758-914e-951bca6ca7f5 +libusb,ATxmega32A4U,03EB,2FE4,f44c515f-7d17-4612-a532-ee620afb22b2 +libusb,ATxmega64A4U,03EB,2FE5,c1af4f1c-045f-40c9-893a-3ad4adb2e67d +libusb,ATxmega128A3U,03EB,2FE6,26f275f0-d6b2-46d8-8334-e4de66996c74 +libusb,ATxmega192A3U,03EB,2FE7,b7b50d98-0429-4235-8f08-5466e4f83ed4 +libusb,UC3,03EB,2FDC,972d9af7-d71b-44c7-a895-9340b362f545 +libusb,ATUC3,03EB,2FE9,d5855d0a-f82e-4df5-9c14-2b0b1dcb65bd +libusb,AT32UC3C,03EB,2FEB,1eeb52aa-fd24-47fd-8a76-056446d1a54f +libusb,ATxmega256A3U,03EB,2FEC,198fa8ea-3157-4863-b9a8-a3f6fe027367 +libusb,ATmega8U2,03EB,2FEE,14018055-46f4-4c62-aa03-e8fafeedaf72 +libusb,ATmega16U2,03EB,2FEF,007274da-b75f-492e-a288-8fc0aff8339f +libusb,ATmega32U2,03EB,2FF0,ddc2c572-cb6e-4f61-a6cc-1a5de941f063 +libusb,AT32UC3A3,03EB,2FF1,8b614283-36c0-46a2-890d-65f61b5b6201 +libusb,ATmega32U6,03EB,2FF2,a207dd90-2814-4418-b5b7-4b708fdf1bfd +libusb,ATmega16U4,03EB,2FF3,3180d426-bf93-4578-a693-2efbc337da8e +libusb,ATmega32U4,03EB,2FF4,5f9726fd-f9de-487a-9fbd-8b3524a7a56a +libusb,AT32UC3B,03EB,2FF6,ef90068a-277a-44db-805a-9b83a6beb29a +libusb,AT90USB82,03EB,2FF7,062fa2ab-f9d8-4a0d-83c1-df0521cfd0f6 +libusb,AT32UC3A,03EB,2FF8,24080a67-3874-4fb8-8808-fb4cc297c466 +libusb,AT90USB64,03EB,2FF9,c6a708ad-e97d-43cd-b04a-3180d737a71b +libusb,AT90USB162,03EB,2FFA,de67bff5-6e39-4e9c-8dfe-de7fce113716 +libusb,AT90USB128,03EB,2FFB,fd217df3-59d0-440a-a8f3-4c0c8c84daa3 +libusb,AT89C5130,03EB,2FFD,31b69a56-9ac0-4fab-a3ae-cd7bb7021ec5 +libusb,AT8XC5122,03EB,2FFE,395a6118-8568-41b2-913a-d16912722342 +libusb,AT89C5132,03EB,2FFF,266ca4bc-5e59-4a7b-82dc-6e8732373d40 \ No newline at end of file diff --git a/util/wsl_install.sh b/util/wsl_install.sh index c3aeba6d6e..9df715b813 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -1,6 +1,6 @@ #!/bin/bash -download_dir = wsl_downloaded +download_dir=wsl_downloaded function install_utils { rm -f -r $download_dir @@ -33,7 +33,11 @@ function install_utils { popd > /dev/null } -function make_environment { +function install_drivers { + pushd $download_dir + cp ../drivers.txt . + cmd.exe /C qmk_driver_installer.exe $1 $2 ../drivers.txt + popd > /dev/null } echo "Installing dependencies (p7zip-full, wget)" @@ -54,5 +58,22 @@ pushd "$dir" #install_utils +while true; do + echo + echo "Which USB drivers do you want to install?" + echo "(A)all - All supported drivers will be installed" + echo "(C)onnected - Only drivers for connected keyboards (in bootloader/flashing mode) will be installed" + echo "(F)force - Like all, but will also override existing drivers for connected keyboards" + echo "(N)one - No drivers will be installed, flashing your keyboard will most likely not work" + read -p "(A/C/F/N)? " res + case $res in + [Aa]* ) install_drivers --all; break;; + [Cc]* ) install_drivers; break;; + [Ff]* ) install_drivers --all --force; break;; + [Nn]* ) break;; + * ) echo "Invalid answer";; + esac +done + popd > /dev/null From 477bd4b948a7399bcb8ba057362c66278e6b3abf Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 14:49:58 +0300 Subject: [PATCH 04/14] Add prompt for re-downloading the utils --- util/wsl_install.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/util/wsl_install.sh b/util/wsl_install.sh index 9df715b813..f9c7f60906 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -56,7 +56,19 @@ fi pushd "$dir" -#install_utils +if [ ! -d "$download_dir" ]; then + install_utils +else + while true; do + echo + read -p "The utils seem to already be downloaded, do you want to re-download them and update to the newest version (Y/N) " res + case $res in + [Yy]* ) install_utils; break;; + [Nn]* ) break;; + * ) echo "Invalid answer";; + esac + done +fi while true; do echo From 9c582fc797c3fbddd753791aab279dd2ad27b9c4 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 18:26:38 +0300 Subject: [PATCH 05/14] Add install dependencies --- util/wsl_install.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/util/wsl_install.sh b/util/wsl_install.sh index f9c7f60906..0964929e7c 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -40,10 +40,6 @@ function install_drivers { popd > /dev/null } -echo "Installing dependencies (p7zip-full, wget)" -echo "This will ask for the sudo password" -sudo apt-get install p7zip-full wget - dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P) if [[ $dir != /mnt/* ]]; @@ -56,6 +52,24 @@ fi pushd "$dir" +while true; do + echo + echo "Do you want to install all toolchain dependencies needed for compiling QMK?" + echo "This will run install_dependencies.sh, which calls apt-get upgrade." + echo "If you don't want that, you can install the dependencies manually." + read -p "(Y/N) " res + case $res in + [Yy]* ) sudo ./install_dependencies.sh; break;; + [Nn]* ) break;; + * ) echo "Invalid answer";; + esac +done + +echo "Installing dependencies needed for the installation (p7zip-full, wget)" +echo "This will ask for the sudo password" +sudo apt-get install p7zip-full wget + + if [ ! -d "$download_dir" ]; then install_utils else From b8899b48b45c0209e44cc35d9185aa670e769d40 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 20:11:56 +0300 Subject: [PATCH 06/14] Make symlink to utils and export programmer variables --- util/activate_wsl.sh | 12 ++++++++++++ util/wsl_install.sh | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 util/activate_wsl.sh diff --git a/util/activate_wsl.sh b/util/activate_wsl.sh new file mode 100644 index 0000000000..a6ed9b712d --- /dev/null +++ b/util/activate_wsl.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +util_dir=~/qmk_utils +download_dir=$util_dir/wsl_downloaded + +export DFU_PROGRAMMER=$download_dir/dfu-programmer/dfu-programmer.exe +export DFU_UTIL=$download_dir/dfu-util-0.9-win64/dfu-util.exe +export TEENSY_LOADER_CLI=$download_dir/teensy_loader_cli.exe +export BATCHISP=$download_dir/Flip/bin/batchisp.exe + + + diff --git a/util/wsl_install.sh b/util/wsl_install.sh index 0964929e7c..314f520b95 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -35,7 +35,6 @@ function install_utils { function install_drivers { pushd $download_dir - cp ../drivers.txt . cmd.exe /C qmk_driver_installer.exe $1 $2 ../drivers.txt popd > /dev/null } @@ -101,5 +100,11 @@ while true; do esac done +echo +echo "Creating a softlink to the utils directory as ~/qmk_utils." +echo "This is needed so that the the make system can find all utils it need." +read -p "Press any key to continue (ctrl-c to abort)" +ln -sf "$dir" ~/qmk_utils + popd > /dev/null From 3d3999d8635d1c9ca5a0276545ce4bdc173aa9a4 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 20:36:27 +0300 Subject: [PATCH 07/14] Actually install flip instead of just extracting --- util/activate_wsl.sh | 2 +- util/wsl_install.sh | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/util/activate_wsl.sh b/util/activate_wsl.sh index a6ed9b712d..afff5addcc 100644 --- a/util/activate_wsl.sh +++ b/util/activate_wsl.sh @@ -6,7 +6,7 @@ download_dir=$util_dir/wsl_downloaded export DFU_PROGRAMMER=$download_dir/dfu-programmer/dfu-programmer.exe export DFU_UTIL=$download_dir/dfu-util-0.9-win64/dfu-util.exe export TEENSY_LOADER_CLI=$download_dir/teensy_loader_cli.exe -export BATCHISP=$download_dir/Flip/bin/batchisp.exe +export BATCHISP=batchisp.exe diff --git a/util/wsl_install.sh b/util/wsl_install.sh index 314f520b95..b1e47d637b 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -22,13 +22,12 @@ function install_utils { echo "Installing Atmel Flip" wget 'http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe' - 7z x -oFlip Flip\ Installer\ -\ 3.4.7.112.exe + mv Flip\ Installer\ \-\ 3.4.7.112.exe FlipInstaller.exe echo "Downloading the QMK driver installer" wget -qO- https://api.github.com/repos/qmk/qmk_driver_installer/releases | grep browser_download_url | head -n 1 | cut -d '"' -f 4 | wget -i - rm -f *.zip - rm Flip\ Installer\ -\ 3.4.7.112.exe popd > /dev/null } @@ -83,6 +82,17 @@ else done fi +while true; do + echo + read -p "Flip need to be installed if you want to use that for programming, do you want to install it now? (Y/N) " res + case $res in + [Yy]* ) cmd.exe /c $download_dir\\FlipInstaller.exe; break;; + [Nn]* ) break;; + * ) echo "Invalid answer";; + esac +done + + while true; do echo echo "Which USB drivers do you want to install?" @@ -106,5 +116,11 @@ echo "This is needed so that the the make system can find all utils it need." read -p "Press any key to continue (ctrl-c to abort)" ln -sf "$dir" ~/qmk_utils +echo +echo "******************************************************************************" +echo "Installation completed!" +echo "You need to open a new batch command prompt for all the utils to work properly" +echo "******************************************************************************" + popd > /dev/null From 3e4f2f5590028851886df54e608d4215883939ba Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 20:43:16 +0300 Subject: [PATCH 08/14] Use unzip instead of 7zip --- util/wsl_install.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/util/wsl_install.sh b/util/wsl_install.sh index b1e47d637b..645ddce71e 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -10,15 +10,15 @@ function install_utils { echo "Installing dfu-programmer" wget 'http://downloads.sourceforge.net/project/dfu-programmer/dfu-programmer/0.7.2/dfu-programmer-win-0.7.2.zip' - 7z x -odfu-programmer dfu-programmer-win-0.7.2.zip + unzip -d dfu-programmer dfu-programmer-win-0.7.2.zip echo "Installing dfu-util" wget 'http://dfu-util.sourceforge.net/releases/dfu-util-0.9-win64.zip' - 7z x dfu-util-0.9-win64.zip + unzip dfu-util-0.9-win64.zip echo "Installing teensy_loader_cli" wget 'https://www.pjrc.com/teensy/teensy_loader_cli_windows.zip' - 7z x teensy_loader_cli_windows.zip + unzip teensy_loader_cli_windows.zip echo "Installing Atmel Flip" wget 'http://www.atmel.com/images/Flip%20Installer%20-%203.4.7.112.exe' @@ -63,9 +63,9 @@ while true; do esac done -echo "Installing dependencies needed for the installation (p7zip-full, wget)" +echo "Installing dependencies needed for the installation (unzip, wget)" echo "This will ask for the sudo password" -sudo apt-get install p7zip-full wget +sudo apt-get install unzip wget if [ ! -d "$download_dir" ]; then From fa4a492677d1435637dceee03302e1bdbd579a2d Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 20:49:42 +0300 Subject: [PATCH 09/14] Fix symlink creation --- util/wsl_install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/wsl_install.sh b/util/wsl_install.sh index 645ddce71e..bb2df1b4da 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -114,7 +114,7 @@ echo echo "Creating a softlink to the utils directory as ~/qmk_utils." echo "This is needed so that the the make system can find all utils it need." read -p "Press any key to continue (ctrl-c to abort)" -ln -sf "$dir" ~/qmk_utils +ln -sfn "$dir" ~/qmk_utils echo echo "******************************************************************************" From ec720ac1ea63b3afa2988be06b221d2ed10a2af9 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 21:28:18 +0300 Subject: [PATCH 10/14] Add activate_wsl to .bashrc --- util/activate_wsl.sh | 17 +++++++++++------ util/wsl_install.sh | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/util/activate_wsl.sh b/util/activate_wsl.sh index afff5addcc..e2312b56d4 100644 --- a/util/activate_wsl.sh +++ b/util/activate_wsl.sh @@ -1,12 +1,17 @@ #!/bin/bash -util_dir=~/qmk_utils -download_dir=$util_dir/wsl_downloaded +function export_variables { + local util_dir=~/qmk_utils + local download_dir=$util_dir/wsl_downloaded + + export DFU_PROGRAMMER=$download_dir/dfu-programmer/dfu-programmer.exe + export DFU_UTIL=$download_dir/dfu-util-0.9-win64/dfu-util.exe + export TEENSY_LOADER_CLI=$download_dir/teensy_loader_cli.exe + export BATCHISP=batchisp.exe +} + +export_variables -export DFU_PROGRAMMER=$download_dir/dfu-programmer/dfu-programmer.exe -export DFU_UTIL=$download_dir/dfu-util-0.9-win64/dfu-util.exe -export TEENSY_LOADER_CLI=$download_dir/teensy_loader_cli.exe -export BATCHISP=batchisp.exe diff --git a/util/wsl_install.sh b/util/wsl_install.sh index bb2df1b4da..f863c182e0 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -116,6 +116,26 @@ echo "This is needed so that the the make system can find all utils it need." read -p "Press any key to continue (ctrl-c to abort)" ln -sfn "$dir" ~/qmk_utils +if grep "^source ~/qmk_utils/activate_wsl.sh$" ~/.bashrc +then + echo + echo "The line source ~/qmk_utils/activate_wsl.sh is already added to your /.bashrc" + echo "Not adding it twice" +else + while true; do + echo + echo "Do you want to add 'source ~/qmk_utils/activate_wsl.sh' to the end of you .bashrc file?" + echo "Without this make won't find the needed utils, so if you don't want to do it automatically," + echo "then you have to do it manually." + read -p "(Y/N)? " res + case $res in + [Yy]* ) echo "source ~/qmk_utils/activate_wsl.sh" >> ~/.bashrc; break;; + [Nn]* ) break;; + * ) echo "Invalid answer";; + esac + done +fi + echo echo "******************************************************************************" echo "Installation completed!" From 999b35c7f8a2fdccf3f8710c2704034bb426b711 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 21:38:14 +0300 Subject: [PATCH 11/14] Create a symlink to qmk if requested --- util/wsl_install.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/util/wsl_install.sh b/util/wsl_install.sh index f863c182e0..8999da8a46 100644 --- a/util/wsl_install.sh +++ b/util/wsl_install.sh @@ -136,6 +136,19 @@ else done fi +while true; do + echo + echo "Do you want to add a symlink to the QMK repository in your home directory for convenience?" + echo "This will create a folder 'qmk_firmware' in your home directory." + echo "In the future you can use this folder instead of the full path on your windows file system" + read -p "(Y/N)? " res + case $res in + [Yy]* ) ln -sfn "$dir/.." ~/qmk_firmware; break;; + [Nn]* ) break;; + * ) echo "Invalid answer";; + esac +done + echo echo "******************************************************************************" echo "Installation completed!" From 78aebe0631c6987ce1721428ff8fbbb0a1e8fbd7 Mon Sep 17 00:00:00 2001 From: Fred Sundvik Date: Sun, 28 May 2017 22:35:45 +0300 Subject: [PATCH 12/14] Update windows 10 instructions --- docs/Build-Environment-Setup.md | 37 ++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/docs/Build-Environment-Setup.md b/docs/Build-Environment-Setup.md index 35e02924b9..d4cec91c7b 100644 --- a/docs/Build-Environment-Setup.md +++ b/docs/Build-Environment-Setup.md @@ -1,25 +1,32 @@ ### Windows 10 -Due to some issues with the "Windows (Vista and later)" instructions below, we now recommend following these instructions if you use Windows, which will allow you to use the Windows Subsystem for Linux to compile the firmware. If you are not using Windows 10 with the Anniversary Update installed (which came out in July 2016), you will need to use one of the other methods, such as Docker, Vagrant, or the instructions for Vista and later. +#### Creators Update +If you have Windows 10 with Creators Update or later, you can build and flash the firmware directly. Before the Creators Update, only building was possible. If you don't have it yet or if are unsure, follow [these instructions](https://support.microsoft.com/en-us/instantanswers/d4efb316-79f0-1aa1-9ef3-dcada78f3fa0/get-the-windows-10-creators-update). -If you use this method, you will need to use a standalone tool to flash the firmware to the keyboard after you compile it. We recommend the official [QMK Firmware Flasher](https://github.com/qmk/qmk_firmware_flasher/releases). This is because the Windows 10 Subsystem for Linux lacks [libUSB support](https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13355724-unable-to-access-usb-devices-from-bash), so it can't access the keyboard's microcontroller. Please add your vote for Microsoft to fix this issue using the link! +#### Windows Subsystem for Linux +In addition to the Creators Update, you need Windows 10 Subystem for Linux, so install it following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). If you already have the Windows 10 Subsystem for Linux from the Anniversary update it's recommended that you [upgrade](https://betanews.com/2017/04/14/upgrade-windows-subsystem-for-linux/) it to 16.04LTS, because some keyboards don't compile with the toolchains included in 14.04LTS. Note that you need to know what your are doing if you chose the `sudo do-release-upgrade` method. -Here are the steps +#### Git +If you already have cloned the repository on your Windows file system you can ignore this section. -1. Install the Windows 10 subsystem for Linux, following [these instructions](http://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/). -2. If you have cloned the repository using git before August 20, 2016, clean up the line endings from wherever you currently access git: - 1. Make sure that you have no changes you haven't committed by running `git status`. ANY UNCOMMITTED CHANGES WILL BE PERMANENTLY LOST. - 2. Run `git rm --cached -r .` - 3. Run `git reset --hard` -3. Open "Bash On Ubuntu On Windows" from the start menu -4. With the bash window open, navigate to your copy of the [qmk_firmware repository](https://github.com/qmk/qmk_firmware) using the `cd` command. The harddisks can be accessed from `/mnt/`. For example, your main hard drive (C:) can be accessed by executing the command `cd /mnt/c`. If your username is John and the qmk_firmware folder is in your Downloads folder, you can move to it with the command `cd /mnt/c/Users/John/Downloads/qmk_firmware`. You can use the Tab key as you go to help you autocomplete the folder names. -5. Run `sudo util/install_dependencies.sh`. **This will run `apt-get upgrade`.** -6. After a while the installation will finish, and you are good to go +You will need to clone the repository to your Windows file system using the normal Git for Windows and **not** the WSL Git. So if you haven't installed Git before, [download](https://git-scm.com/download/win) and install it. Then [set it up](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup), it's important that you setup the e-mail and user name, especially if you are planning to contribute. -**Note** From time to time, the dependencies might change, so just run `install_dependencies.sh` again if things are not working. +Once Git is installed, open the Git bash command and change the directory to where you want to clone QMK, note that you have to use forward slashes, and that your c drive is accessed like this `/c/path/to/where/you/want/to/go`. Then run `git clone --recurse-submodules https://github.com/qmk/qmk_firmware`, this will create a new folder `qmk_firmware` as a subfolder of the current one. -**Warning:** If you edit Makefiles or shell scripts, make sure you are using an editor that saves the files with Unix line endings. Otherwise the compilation might not work. +#### Toolchain setup +The Toolchain setup is done through the Windows Subsystem for Linux, and the process is fully automated. If you want to do everything manually, there are no other instructions than the scripts themselves, but you can always open issues and ask for more information. +1. Open "Bash On Ubuntu On Windows" from the start menu. +2. Go to the directory where you cloned `qmk_firmware`. Note that the paths start with `/mnt/` in the WSL, so you have to write for example `cd /mnt/c/path/to/qmk_firmware`. +3. Run `util/wsl_install.sh` and follow the on-screen instructions. +4. Close the Bash command window, and re-open it. +5. You are ready to compile and flash the firmware! + +#### Some important things to keep in mind +* You can run `util/wsl_install.sh` again to get all the newest updates. +* Your QMK repository need to be on a Windows file system path, since WSL can't run executables outside it. +* The WSL Git is **not** compatible with the Windows Git, so use the Windows Git Bash or a windows Git GUI for all Git operations +* You can edit files either inside WSL or normally using Windows, but note that if you edit makefiles or shell scripts, make sure you are using an editor that saves the files with Unix line endings. Otherwise the compilation might not work. ### Windows (Vista and later) 1. If you have ever installed WinAVR, uninstall it. @@ -109,4 +116,4 @@ If you have any problems building the firmware, you can try using a tool called 1. If you haven't already, obtain this repository ([https://github.com/qmk/qmk_firmware](https://github.com/qmk/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application. 2. Open up a terminal or command prompt and navigate to the `qmk_firmware` folder using the `cd` command. The command prompt will typically open to your home directory. If, for example, you cloned the repository to your Documents folder, then you would type `cd Documents/qmk_firmware`. If you extracted the file from a zip, then it may be named `qmk_firmware-master` instead. 3. To confirm that you're in the correct location, you can display the contents of your current folder using the `dir` command on Windows, or the `ls` command on Linux or Mac. You should see several files, including `readme.md` and a `quantum` folder. From here, you need to navigate to the appropriate folder under `keyboards/`. For example, if you're building for a Planck, run `cd keyboards/planck`. -4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below. \ No newline at end of file +4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below. From 91c6113cbabe01680d3dd473f8db64afaeec0bf6 Mon Sep 17 00:00:00 2001 From: Maarten Dekkers Date: Mon, 29 May 2017 17:53:39 +0200 Subject: [PATCH 13/14] Added SEND_STRING(); to the documentation. --- docs/Macros.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/Macros.md b/docs/Macros.md index 78290bbf69..994d01928f 100644 --- a/docs/Macros.md +++ b/docs/Macros.md @@ -195,3 +195,21 @@ For users of the earlier versions of dynamic macros: It is still possible to fin If the LED-s start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 128; please read the comments for it in the header). For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header. + +# Sending strings +Some people want to have a password or some text on a key. This is possible without having to do every key individually using `SEND_STRING("");`. Note the caps, because `send_string("");` does something else. For example: +```c +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. +{ + switch(id) { + case 0: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + SEND_STRING("QMK is the best thing ever!"); // This would type "QMK is the best thing ever!" (without quotation marks). + return false; // This is false because it has to return something. + } + break; + } + return MACRO_NONE; +}; +``` +If you'd want it to press enter as well, just replace `return false;` with `return MACRO( T(ENT), END );`. From 7eebdd4760d92c87128d8c06d0a013b7d3aa1a60 Mon Sep 17 00:00:00 2001 From: Priyadi Iman Nurcahyo Date: Mon, 29 May 2017 23:10:34 +0700 Subject: [PATCH 14/14] Jokrik's Clueboard layout (#1340) --- keyboards/clueboard/keymaps/jokrik/keymap.c | 86 ++++++++++++++++++++ keyboards/clueboard/keymaps/jokrik/readme.md | 11 +++ 2 files changed, 97 insertions(+) create mode 100644 keyboards/clueboard/keymaps/jokrik/keymap.c create mode 100644 keyboards/clueboard/keymaps/jokrik/readme.md diff --git a/keyboards/clueboard/keymaps/jokrik/keymap.c b/keyboards/clueboard/keymaps/jokrik/keymap.c new file mode 100644 index 0000000000..acde4d9e16 --- /dev/null +++ b/keyboards/clueboard/keymaps/jokrik/keymap.c @@ -0,0 +1,86 @@ +#include "clueboard.h" + +// Helpful defines +#define GRAVE_MODS (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI)|MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT)) +#define _______ KC_TRNS + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +// The underscores don't mean anything - you can have a layer called STUFF or any other name. +// Layer names don't all need to be of the same length, obviously, and you can also skip them +// entirely and just use numbers. +#define _BL 0 +#define _FL 1 +#define _CL 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* Keymap _BL: Base Layer (Default Layer) + */ +[_BL] = KEYMAP( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_PSCR, \ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PAUS, \ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \ + KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC,KC_SPC, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), + + /* Keymap _FL: Function Layer + */ +[_FL] = KEYMAP( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, BL_STEP, \ + _______, _______, _______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK, KC_PAUS, _______, _______, _______, _______, \ + _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \ + _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, KC_PGUP, \ + _______, _______, _______, _______, _______,_______, _______, _______, MO(_FL), _______, KC_HOME, KC_PGDN, KC_END), + + /* Keymap _CL: Control layer + */ +[_CL] = KEYMAP( + _______, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, \ + _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD, \ + _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, \ + MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_SAI, \ + _______, _______, _______,_______, RGB_MOD, RGB_MOD, _______, _______, MO(_FL), _______, RGB_HUD, RGB_SAD, RGB_HUI), +}; + +/* This is a list of user defined functions. F(N) corresponds to item N + of this list. + */ +const uint16_t PROGMEM fn_actions[] = { + [0] = ACTION_FUNCTION(0), // Calls action_function() +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + static uint8_t mods_pressed; + static bool mod_flag; + + switch (id) { + case 0: + /* Handle the combined Grave/Esc key + */ + mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed + + if (record->event.pressed) { + /* The key is being pressed. + */ + if (mods_pressed) { + mod_flag = true; + add_key(KC_GRV); + send_keyboard_report(); + } else { + add_key(KC_ESC); + send_keyboard_report(); + } + } else { + /* The key is being released. + */ + if (mod_flag) { + mod_flag = false; + del_key(KC_GRV); + send_keyboard_report(); + } else { + del_key(KC_ESC); + send_keyboard_report(); + } + } + break; + } +} diff --git a/keyboards/clueboard/keymaps/jokrik/readme.md b/keyboards/clueboard/keymaps/jokrik/readme.md new file mode 100644 index 0000000000..cc5eeba961 --- /dev/null +++ b/keyboards/clueboard/keymaps/jokrik/readme.md @@ -0,0 +1,11 @@ +``` + ___ _____ _ _ _ __ __ _ __ +|__ \ / ____| | | | | | / / / /(_) / / + ||) | | | | |_ _ ___| |__ ___ __ _ _ __ __| | / /_ / /_ / / + |/ / | | | | | | |/ _ \ '_ \ / _ \ / _` | '__/ _` | | '_ \| '_ \ / / + |_| | |____| | |_| | __/ |_) | (_) | (_| | | | (_| | | (_) | (_) / / _ + (_) \_____|_|\__,_|\___|_.__/ \___/ \__,_|_| \__,_| \___/ \___/_/ (_) +``` + +# Jokrik's Clueboard Layout +