From d0e3e9d2e274a002e94acf5759bd664e0eb585d5 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Fri, 15 Feb 2019 16:26:47 +0100 Subject: [PATCH 01/10] Build firmware under Windows 10 64-bit ... using Linux subsystem Ubuntu or git-bash --- README.md | 49 +++++ build.sh | 496 +++++++++++++++++++++++++++++++++++++++++-- prepare_winbuild.ps1 | 6 + 3 files changed, 533 insertions(+), 18 deletions(-) create mode 100644 prepare_winbuild.ps1 diff --git a/README.md b/README.md index b7fc1155e..0f428980d 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,55 @@ If you wish to flash from Arduino, follow step [2.c](#2c) from Windows build fir The script downloads Arduino with our modifications and Rambo board support installed, unpacks it into folder PF-build-env-\ on the same level, as your Prusa-Firmware folder is located, builds firmware for MK3 using that Arduino in Prusa-Firmware-build folder on the same level as Prusa-Firmware, runs secondary language support scripts. Firmware with secondary language support is generated in lang subfolder. Use firmware.hex for MK3 variant. Use firmware_\.hex for other printers. Don't forget to follow step [2.b](#2b) first for non-MK3 printers. ## Windows +### If you want to use the automated `build.sh` you gonna need to install on you Windows a Linux subsystem or Git-bash + +###Steps for Linux subsystem und Windows 10 64-bit: +- follow the Microsoft guide https://docs.microsoft.com/en-us/windows/wsl/install-win10 + You can also use the 'prepare_winbuild.ps1' powershell script with Administrator rights +- Tested versions are at this moment + - Ubuntu other may different + - After the installation and reboot please open your Ubuntu bash and do following steps + - run command `apt-get update` + - to install zip run `apt-get install zip` + - add few lines at the top of `~/.bashrc` by running `sudo nano ~/.bashrc` + + export OS="Linux" + export JAVA_TOOL_OPTIONS="-Djava.net.preferIPv4Stack=true" + export GPG_TTY=$(tty) + + use `CRTL-X` to close nano and confirm to write the new entries + - restart Ubuntu bash +Now your Ubuntu subsystem is ready to use the automatic `build.sh` script and compile your firmware correctly + +####Some Tips for Ubuntu +- Linux is case sensetive so please don't forget to use capital letters where needed, like changing to a directory +- To change the path to your Prusa-Firmware location you downloaded and unzipped + - Example: You files are under `C:\Users\\Downloads\Prusa-Firmware-MK3` + - use under Ubuntu the following command `cd /mnt/c/Users//Downloads/Prusa-Firmware-MK3` + to change to the right folder + +####Compile Prusa-firmware with Ubuntu Linux subsystem installed +- open Ubuntu bash +- change to your source code folder (case sensitive) +- run `./build.sh` +- follow the instructions + +###Steps for Git-bash under Windows 10 64-bit: +- Download and install the 64bit Git version https://git-scm.com/download/win +- Also follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 +- Download and install 7z-zip from its official website https://www.7-zip.org/ + By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 +- Run `Git-Bash` under Administrator privilege +- navigate to the directory /c/Program Files/Git/mingw64/bin +- run `ln -s /c/Program Files/7-Zip/7z.exe zip.exe` + +####Compile Prusa-firmware with Git-bash installed +- open Git-bash +- change to your source code folder +- run `bash build.sh` +- follow the instructions + + ### 1. Development environment preparation a. install `"Arduino Software IDE"` for your preferred operating system diff --git a/build.sh b/build.sh index 051f1352c..97d9d1e26 100755 --- a/build.sh +++ b/build.sh @@ -1,40 +1,500 @@ #!/bin/bash +# This bash script is used to compile automatically the Prusa firmware with a dedecated build enviroment and settings +# +# Supported OS: Windows 10, Linux64 bit +# +# Linux: +# +# Windows: +# To excecute this sciprt you gonna need few things on your Windows machine +# +# Linux Subsystem Ubuntu +# 1. Follow these instructions +# 2. Open Ubuntu bash and get latest updates with 'apt-get upgate' +# 3. Install zip with 'apt-get install zip' +# 4. Add at top of ~/.bashrc following lines by using 'sudo nano ~/.bashrc' +# +# export OS="Linux" +# export JAVA_TOOL_OPTIONS="-Djava.net.preferIPv4Stack=true" +# export GPG_TTY=$(tty) +# +# and confirm them. Restart Ubuntu bash +# +# Or GIT-BASH +# 1. Download and install the correct (64bit or 32bit) Git version https://git-scm.com/download/win +# 2. Also follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 +# 3. Download and install 7z-zip from its official website. +# By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 as my case. +# 4. Run git Bash under Administrator privilege and navigate to the directory /c/Program Files/Git/mingw64/bin, +# you can run the command ln -s /c/Program Files/7-Zip/7z.exe zip.exe +# +# Usefull things to edit and compare your custom Firmware +# 1. Download and install current and correct (64bit or 32bit) Notepad++ version https://notepad-plus-plus.org/download +# 2. Another great tool to compare your custom mod and stock firmware is WinMerge http://winmerge.org/downloads/?lang=en +# +# Example for MK3: open git bash and chage to your Firmware directory +# @ MINGW64 //path +# bash build.sh 1_75mm_MK3-EINSy10a-E3Dv6full +# +# Example for MK25: open git bash and chage to your directory +# gussner@WIN01 MINGW64 /d/Data/Prusa-Firmware/MK3 +# bash build.sh 1_75mm_MK25-RAMBo13a-E3Dv6full +# +# The compiled hex files can be found in the folder above like from the example +# gussner@WIN01 MINGW64 /d/Data/Prusa-Firmware +# FW351-Build1778-1_75mm_MK25-RAMBo13a-E3Dv6full.hex +# +# Version: 1.0.1-Build_8 +# Change log: +# 12 Jan 2019, 3d-gussner, Fixed "compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" in 'platform.txt' +# 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is uknown +# 17 Jan 2019, 3d-gussner, Build_3, Check for OS Windows or Linux and use the right build enviroment +# 10 Feb 2019, ropaha, Pull Request, Select variant from list while using build.sh +# 10 Feb 2019, ropaha, change FW_DEV_VERSION automatically depending on FW_VERSION RC/BETA/ALPHA +# 10 Feb 2019, 3d-gussner, 1st tests with english only +# 10 Feb 2019, ropaha, added compiling of all variants and english only +# 10 Feb 2019, 3d-gussner, Set OUTPUT_FOLDER for hex files +# 11 Feb 2019, 3d-gussner/ropaha, Minor changes and fixes +# 11 Feb 2019, 3d-gussner, Ready for RC +# 12 Feb 2019, 3d-gussner, Check if wget and zip are installed. Thanks to Bernd to point it out +# 12 Feb 2019, 3d-gussner, Changed OS check to OSTYPE as it is not supported on Ubuntu +# Also added different BUILD_ENV folders depending on OS used so Windows +# Users can use git-bash AND Windows Linux Subsystems at the same time +# Cleanup compiler flags is only depends on OS version. +# 12 Feb 2019, 3d-gussner, Added additional OSTYPE check +# 15 feb 2019, 3d-gussner, Added zip files for miniRAMbo multi language hex files +# 15 Feb 2019, 3d-gussner, Added more checks if +# Compiled Hex-files +# Configuration_prusa.h +# language build files +# multi language firmware files exist and clean them up +# 15 Feb 2019, 3d-gussner, Fixed selction GOLD/UNKNOWN DEV_STATUS for ALL variants builds, so you have to choose only once +# 15 Feb 2019, 3d-gussner, Added some colored output +# 15 Feb 2019, 3d-gussner, troubleshooting and minor fixes + + + +###Check if OSTYPE is supported +if [ $OSTYPE == "msys" ]; then + if [ $(uname -m) == "x86_64" ]; then + echo "$(tput setaf 2)Windows 64-bit found$(tput sgr0)" + fi +elif [ $OSTYPE == "linux-gnu" ]; then + if [ $(uname -m) == "x86_64" ]; then + echo "$(tput setaf 2)Linux 64-bit found$(tput sgr0)" + fi +else + echo "$(tput setaf 1)This script doesn't support your Operating system!" + echo "Please use Linux 64-bit or Windows 10 64-bit with Linux subsystem / git-bash" + echo "Read the notes of build.sh$(tput sgr0)" + exit +fi +sleep 2 +###Prepare bash enviroment and check if wget and zip are availible +if ! type wget > /dev/null; then + echo "$(tput setaf 1)Missing 'wget' which is important to run this script" + echo "Please follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 to install wget$(tput sgr0)" + exit +fi +if ! type zip > /dev/null; then + if [ $OSTYPE == "msys" ]; then + echo "$(tput setaf 1)Missing 'zip' which is important to run this script" + echo "Download and install 7z-zip from its official website https://www.7-zip.org/" + echo "By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 as my case." + echo "Run git Bash under Administrator privilege and" + echo "navigate to the directory /c/Program Files/Git/mingw64/bin," + echo "you can run the command $(tput setaf 2)ln -s /c/Program Files/7-Zip/7z.exe zip.exe$(tput sgr0)" + exit + elif [ $OSTYPE == "linux-gnu" ]; then + echo "$(tput setaf 1)Missing 'zip' which is important to run this script" + echo "install it with the command $(tput setaf 2)'sudo apt-get install zip'$(tput sgr0)" + exit + fi +fi +###End prepare bash enviroment + BUILD_ENV="1.0.1" SCRIPT_PATH="$( cd "$(dirname "$0")" ; pwd -P )" -if [ ! -d "build-env" ]; then - mkdir build-env || exit 1 -fi -cd build-env || exit 2 +# List few useful data +echo +echo "Script path:" $SCRIPT_PATH +echo "OS :" $OS +echo "OS type :" $OSTYPE +echo "" -if [ ! -f "PF-build-env-Linux64-$BUILD_ENV.zip" ]; then - wget https://github.com/mkbel/PF-build-env/releases/download/$BUILD_ENV/PF-build-env-Linux64-$BUILD_ENV.zip || exit 3 +#### Start prepare building + +#Check if build exists and creates it if not +if [ ! -d "../build-env" ]; then + mkdir ../build-env || exit 2 fi -if [ ! -d "../../PF-build-env-$BUILD_ENV" ]; then - unzip -q PF-build-env-Linux64-$BUILD_ENV.zip -d ../../PF-build-env-$BUILD_ENV || exit 4 +cd ../build-env || exit 3 + +# Check if PF-build-env- exists and downloads + creates it if not +# The build enviroment is based on the Arduino IDE 1.8.5 portal vesion with some changes +if [ ! -d "../PF-build-env-$BUILD_ENV" ]; then + echo "$(tput setaf 6)PF-build-env-$BUILD_ENV is missing ... creating it now for you$(tput sgr 0)" + mkdir ../PF-build-env-$BUILD_ENV + sleep 5 fi -cd ../../PF-build-env-$BUILD_ENV || exit 5 +if [ $OSTYPE == "msys" ]; then + if [ ! -f "PF-build-env-Win-$BUILD_ENV.zip" ]; then + echo "$(tput setaf 6)Downloding Windows build enviroment...$(tput setaf 2)" + sleep 2 + wget https://github.com/3d-gussner/PF-build-env/releases/download/Win-$BUILD_ENV/PF-build-env-Win-$BUILD_ENV.zip || exit 4 + #cp -f ../../PF-build-env/PF-build-env-Win-$BUILD_ENV.zip PF-build-env-Win-$BUILD_ENV.zip || exit4 + echo "$(tput sgr 0)" + fi + if [ ! -d "../PF-build-env-$BUILD_ENV/$OSTYPE" ]; then + echo "$(tput setaf 6)Unzipping Windows build enviroment...$(tput setaf 2)" + sleep 2 + unzip PF-build-env-Win-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$OSTYPE || exit 4 + echo "$(tput sgr0)" + fi + +fi + +if [ $OSTYPE == "linux-gnu" ]; then + if [ ! -f "PF-build-env-Linux64-$BUILD_ENV.zip" ]; then + echo "$(tput setaf 6)Downloading Linux 64 build enviroment...$(tput setaf 2)" + sleep 2 + wget https://github.com/mkbel/PF-build-env/releases/download/$BUILD_ENV/PF-build-env-Linux64-$BUILD_ENV.zip || exit 3 + echo "$(tput sgr0)" + fi + + if [ ! -d "../PF-build-env-$BUILD_ENV/$OSTYPE" ]; then + echo "$(tput setaf 6)Unzipping Linux build enviroment...$(tput setaf 2)" + sleep 2 + unzip PF-build-env-Linux64-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$OSTYPE || exit 4 + echo "$(tput sgr0)" + fi +fi +cd $SCRIPT_PATH + +# First argument defines which varaint of the Prusa Firmware will be compiled +if [ -z "$1" ] ; then + # Select which varaint of the Prusa Firmware will be compiled, like + PS3="Select a variant: " + while IFS= read -r -d $'\0' f; do + options[i++]="$f" + done < <(find Firmware/variants/ -maxdepth 1 -type f -name "*.h" -print0 ) + select opt in "${options[@]}" "All" "Quit"; do + case $opt in + *.h) + VARIANT=$(basename "$opt" ".h") + VARIANTS[i++]="$opt" + break + ;; + "All") + VARIANT="All" + VARIANTS=${options[*]} + break + ;; + "Quit") + echo "You chose to stop" + exit 1 + ;; + *) + echo "$(tput setaf 1)This is not a valid variant$(tput sgr0)" + ;; + esac + done +else + VARIANT=$1 +fi + +#Second argument defines if it is an english only version. Known values EN_ONLY / ALL +#Check default language mode +MULTI_LANGUAGE_CHECK=$(grep --max-count=1 "^#define LANG_MODE *" $SCRIPT_PATH/Firmware/config.h|sed -e's/ */ /g'|cut -d ' ' -f3) + +if [ -z "$2" ] ; then + PS3="Select a language: " + echo + echo "Which lang-build do you want?" + select yn in "Multi languages" "English only"; do + case $yn in + "Multi languages") + LANGUAGES="ALL" + sed -i -- "s/^#define LANG_MODE *0/#define LANG_MODE 1/g" $SCRIPT_PATH/Firmware/config.h + break + ;; + "English only") + LANGUAGES="EN_ONLY" + sed -i -- "s/^#define LANG_MODE *1/#define LANG_MODE 0/g" $SCRIPT_PATH/Firmware/config.h + break + ;; + *) + echo "$(tput setaf 1)This is not a valid language$(tput sgr0)" + ;; + esac + done +else + LANGUAGES=$2 +fi + +#Set BUILD_ENV_PATH +cd ../PF-build-env-$BUILD_ENV/$OSTYPE || exit 5 BUILD_ENV_PATH="$( pwd -P )" -cd .. +cd ../.. +#Checkif BUILD_PATH exisits and if not creates it if [ ! -d "Prusa-Firmware-build" ]; then mkdir Prusa-Firmware-build || exit 6 fi +#Set the BUILD_PATH for Arduino IDE cd Prusa-Firmware-build || exit 7 BUILD_PATH="$( pwd -P )" -if [ ! -f "$SCRIPT_PATH/Firmware/Configuration_prusa.h" ]; then - cp $SCRIPT_PATH/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 8 -fi +for v in ${VARIANTS[*]} +do + VARIANT=$(basename "$v" ".h") + # Find firmware version in Configuration.h file and use it to generate the hex filename + FW=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g') + # Find build version in Configuration.h file and use it to generate the hex filename + BUILD=$(grep --max-count=1 "\bFW_COMMIT_NR\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d ' ' -f3) + # Check if the motherboard is an EINSY and if so the only one hex file will generated + MOTHERBOARD=$(grep --max-count=1 "\bMOTHERBOARD\b" $SCRIPT_PATH/Firmware/variants/$VARIANT.h | sed -e's/ */ /g' |cut -d ' ' -f3) + # Check development status + DEV_CHECK=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g'|cut -d '-' -f2) + if [ -z "$DEV_STATUS_SELECTED" ] ; then + if [[ "$DEV_CHECK" == "RC1" || "$DEV_CHECK" == "RC2" ]] ; then + DEV_STATUS="RC" + elif [[ "$DEV_CHECK" == "ALPHA" ]]; then + DEV_STATUS="ALPHA" + elif [[ "$DEV_CHECK" == "BETA" ]]; then + DEV_STATUS="BETA" + elif [[ "$DEV_CHECK" == "DEVEL" ]]; then + DEV_STATUS="DEVEL" + elif [[ "$DEV_CHECK" == "DEBUG" ]]; then + DEV_STATUS="DEBUG" + else + DEV_STATUS="UNKNOWN" + echo + echo "$(tput setaf 5)DEV_STATUS is UNKNOWN. Do you wish to set DEV_STATUS to GOLD?$(tput sgr0)" + PS3="Select YES only if source code is tested and trusted: " + select yn in "Yes" "No"; do + case $yn in + Yes) + DEV_STATUS="GOLD" + DEV_STATUS_SELECTED="GOLD" + break + ;; + No) + DEV_STATUS="UNKNOWN" + DEV_STATUS_SELECTED="UNKNOWN" + break + ;; + *) + echo "$(tput setaf 1)This is not a valid DEV_STATUS$(tput sgr0)" + ;; + esac + done + fi + else + DEV_STATUS=$DEV_STATUS_SELECTED + fi + #Prepare hex files folders + if [ ! -d "$SCRIPT_PATH/../Hex-files/FW$FW-Build$BUILD/$MOTHERBOARD" ]; then + mkdir -p $SCRIPT_PATH/../Hex-files/FW$FW-Build$BUILD/$MOTHERBOARD || exit 10 + fi + OUTPUT_FOLDER="Hex-files/FW$FW-Build$BUILD/$MOTHERBOARD" + + #Check if exacly the same hexfile already exsits + if [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex" && "$LANGUAGES" == "ALL" ]]; then + echo "" + ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex + echo "$(tput setaf 6)This hex file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + elif [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex" && "$LANGUAGES" == "EN_ONLY" ]]; then + echo "" + ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex + echo "$(tput setaf 6)This hex file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + fi + if [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip" && "$LANGUAGES" == "ALL" ]]; then + echo "" + ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip + echo "$(tput setaf 6)This zip file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + fi + + #List some useful data + echo "$(tput setaf 2)$(tput setab 7) " + echo "Variant :" $VARIANT + echo "Firmware :" $FW + echo "Build # :" $BUILD + echo "Dev Check :" $DEV_CHECK + echo "DEV Status :" $DEV_STATUS + echo "Motherboard:" $MOTHERBOARD + echo "Languages :" $LANGUAGES + echo "Hex-file Folder:" $OUTPUT_FOLDER + echo "$(tput sgr0)" -$BUILD_ENV_PATH/arduino $SCRIPT_PATH/Firmware/Firmware.ino --verify --board rambo:avr:rambo --pref build.path=$BUILD_PATH || exit 9 + #Prepare Firmware to be compiled by copying variant as Configuration_prusa.h + if [ ! -f "$SCRIPT_PATH/Firmware/Configuration_prusa.h" ]; then + cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 11 + else + echo "$(tput setaf 6)Configuration_prusa.h already exist it will be overwritten in 10 seconds by the chosen variant.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 11 + fi -export ARDUINO=$BUILD_ENV_PATH + #Prepare Configuration.h to use the correct FW_DEV_VERSION to prevent LCD messages when connecting with OctoPrint + sed -i -- "s/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/#define FW_DEV_VERSION FW_VERSION_$DEV_STATUS/g" $SCRIPT_PATH/Firmware/Configuration.h -cd $SCRIPT_PATH/lang -./lang-build.sh || exit 10 -./fw-build.sh || exit 11 + # set FW_REPOSITORY + sed -i -- 's/#define FW_REPOSITORY "Unknown"/#define FW_REPOSITORY "Prusa3d"/g' $SCRIPT_PATH/Firmware/Configuration.h + + #Prepare english only or multilanguage version to be build + if [ $LANGUAGES == "ALL" ]; then + echo " " + echo "Multi-language firmware will be build" + echo " " + else + echo " " + echo "English only language firmware will be build" + echo " " + fi + + #Check if compiler flags are set to Prusa specific needs for the rambo board. + if [ $OSTYPE == "msys" ]; then + RAMBO_PLATFORM_FILE="rambo/hardware/avr/1.0.1/platform.txt" + COMP_FLAGS="compiler.c.elf.flags={compiler.warning_flags} -Os -g -flto -fuse-linker-plugin -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" + CHECK_FLAGS=$(grep --max-count=1 "$COMP_FLAGS" $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE) + if [ -z "$CHECK_FLAGS" ]; then + echo "Compiler flags not found, adding flags" + if [ ! -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck ]; then + echo "making a backup" + ls $BUILD_ENV_PATH/portable/packages/rambo/hardware/avr/1.0.1/ + cp -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck + fi + echo $COMP_FLAGS >> $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE + else + echo "Compiler flags are set in rambo platform.txt" $CHECK_FLAGS + fi + fi + + #### End of Prepare building + + #### Start building + + export ARDUINO=$BUILD_ENV_PATH + #echo $BUILD_ENV_PATH + export BUILDER=$ARDUINO/arduino-builder + + echo + #read -t 5 -p "Press any key..." + echo + + if [ $OSTYPE == "msys" ]; then + echo "Start to build Prusa Firmware under Windows..." + echo "Using variant $VARIANT$(tput setaf 3)" + sleep 2 + #$BUILDER -dump-prefs -logger=machine -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=rambo:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=none -quiet $SCRIPT_PATH/Firmware/Firmware.ino || exit 12 + #$BUILDER -compile -logger=machine -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=rambo:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=none -quiet $SCRIPT_PATH/Firmware/Firmware.ino || exit 13 + $BUILDER -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=rambo:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=default $SCRIPT_PATH/Firmware/Firmware.ino || exit 14 + echo "$(tput sgr 0)" + fi + if [ $OSTYPE == "linux-gnu" ] ; then + echo "Start to build Prusa Firmware under Linux 64..." + echo "Using variant $VARIANT$(tput setaf 3)" + sleep 2 + $BUILD_ENV_PATH/arduino $SCRIPT_PATH/Firmware/Firmware.ino --verify --board rambo:avr:rambo --pref build.path=$BUILD_PATH || exit 14 + echo "$(tput sgr 0)" + fi + + if [ $LANGUAGES == "ALL" ]; then + echo "$(tput setaf 2)" + echo "Building mutli language firmware" $MULTI_LANGUAGE_CHECK + echo "$(tput sgr 0)" + sleep 2 + cd $SCRIPT_PATH/lang + echo "$(tput setaf 3)" + ./config.sh || exit 15 + echo "$(tput sgr 0)" + # Check if privious languages and firmware build exist and if so clean them up + if [ -f "lang_en.tmp" ]; then + echo "" + echo "$(tput setaf 6)Previous lang build files already exist these will be cleaned up in 10 seconds.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + echo "$(tput setaf 3)" + ./lang-clean.sh + echo "$(tput sgr 0)" + fi + if [ -f "progmem.out" ]; then + echo "" + echo "$(tput setaf 6)Previous firmware build files already exist these will be cleaned up in 10 seconds.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + echo "$(tput setaf 3)" + ./fw-clean.sh + echo "$(tput sgr 0)" + fi + # build languages + echo "$(tput setaf 3)" + ./lang-build.sh || exit 16 + # Combine compiled firmware with languages + ./fw-build.sh || exit 17 + echo "$(tput sgr 0)" + # Check if the motherboard is an EINSY and if so the only one hex file will generated + MOTHERBOARD=$(grep --max-count=1 "\bMOTHERBOARD\b" $SCRIPT_PATH/Firmware/variants/$VARIANT.h | sed -e's/ */ /g' |cut -d ' ' -f3) + # If the motherboard is an EINSY just copy one hexfile + if [ "$MOTHERBOARD" = "BOARD_EINSY_1_0a" ]; then + echo "$(tput setaf 2)Copying multi language firmware for MK3/Einsy board to Hex-files folder$(tput sgr 0)" + cp -f firmware.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex + else + echo "$(tput setaf 2)Zip multi language firmware for MK2.5/miniRAMbo board to Hex-files folder$(tput sgr 0)" + cp -f firmware_cz.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-cz.hex + cp -f firmware_de.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-de.hex + cp -f firmware_es.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-es.hex + cp -f firmware_fr.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-fr.hex + cp -f firmware_it.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-it.hex + cp -f firmware_pl.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-pl.hex + if [ $OSTYPE == "msys" ]; then + zip a $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex + rm $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex + elif [ $OSTYPE == "linux-gnu" ]; then + zip -m -j ../../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip ../../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex + fi + fi + # Cleanup after build + echo "$(tput setaf 3)" + ./fw-clean.sh || exit 18 + ./lang-clean.sh || exit 19 + echo "$(tput sgr 0)" + else + echo "$(tput setaf 2)Copying English only firmware to Hex-files folder$(tput sgr 0)" + cp -f $BUILD_PATH/Firmware.ino.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex || exit 20 + fi + + # Cleanup Firmware + rm $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 17 + sed -i -- "s/^#define FW_DEV_VERSION FW_VERSION_$DEV_STATUS/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/g" $SCRIPT_PATH/Firmware/Configuration.h + sed -i -- 's/^#define FW_REPOSITORY "Prusa3d"/#define FW_REPOSITORY "Unknown"/g' $SCRIPT_PATH/Firmware/Configuration.h + echo $MULTI_LANGUAGE_CHECK + #sed -i -- "s/^#define LANG_MODE * /#define LANG_MODE $MULTI_LANGUAGE_CHECK/g" $SCRIPT_PATH/Firmware/config.h + sed -i -- "s/^#define LANG_MODE *1/#define LANG_MODE ${MULTI_LANGUAGE_CHECK}/g" $SCRIPT_PATH/Firmware/config.h + sed -i -- "s/^#define LANG_MODE *0/#define LANG_MODE ${MULTI_LANGUAGE_CHECK}/g" $SCRIPT_PATH/Firmware/config.h + sleep 5 +done + +# Cleanup compiler flags are set to Prusa specific needs for the rambo board. +#if [ $OSTYPE == "msys" ]; then +# echo " " +# echo "Restore Windows platform.txt" +# echo " " +# cp -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE +#fi + +# Switch to hex path and list build files +cd $SCRIPT_PATH +cd .. +echo "$(tput setaf 2) " +echo " " +echo "Build done, please use Slic3rPE > 1.41.0 to upload the firmware" +echo "more information how to flash firmware https://www.prusa3d.com/drivers/ $(tput sgr 0)" +#### End building diff --git a/prepare_winbuild.ps1 b/prepare_winbuild.ps1 new file mode 100644 index 000000000..b3dc09c4c --- /dev/null +++ b/prepare_winbuild.ps1 @@ -0,0 +1,6 @@ +#This powershell script prepares your Windows 10 64-bit computer to be able to compile your +#Prusa Firmware by installing a Linux Subsystem +#Please run it as administrator + +Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux +Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu -OutFile Ubuntu.appx -UseBasicParsing \ No newline at end of file From 038e4d3fdf63a6a2182d380f77b32cb9a596aa77 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Sat, 16 Feb 2019 04:32:20 +0100 Subject: [PATCH 02/10] fixed some typos --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0f428980d..af5f8264b 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The script downloads Arduino with our modifications and Rambo board support inst ## Windows ### If you want to use the automated `build.sh` you gonna need to install on you Windows a Linux subsystem or Git-bash -###Steps for Linux subsystem und Windows 10 64-bit: +### Steps for Linux subsystem und Windows 10 64-bit: - follow the Microsoft guide https://docs.microsoft.com/en-us/windows/wsl/install-win10 You can also use the 'prepare_winbuild.ps1' powershell script with Administrator rights - Tested versions are at this moment @@ -36,20 +36,20 @@ The script downloads Arduino with our modifications and Rambo board support inst - restart Ubuntu bash Now your Ubuntu subsystem is ready to use the automatic `build.sh` script and compile your firmware correctly -####Some Tips for Ubuntu +#### Some Tips for Ubuntu - Linux is case sensetive so please don't forget to use capital letters where needed, like changing to a directory - To change the path to your Prusa-Firmware location you downloaded and unzipped - Example: You files are under `C:\Users\\Downloads\Prusa-Firmware-MK3` - use under Ubuntu the following command `cd /mnt/c/Users//Downloads/Prusa-Firmware-MK3` to change to the right folder -####Compile Prusa-firmware with Ubuntu Linux subsystem installed +#### Compile Prusa-firmware with Ubuntu Linux subsystem installed - open Ubuntu bash - change to your source code folder (case sensitive) - run `./build.sh` - follow the instructions -###Steps for Git-bash under Windows 10 64-bit: +### Steps for Git-bash under Windows 10 64-bit: - Download and install the 64bit Git version https://git-scm.com/download/win - Also follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 - Download and install 7z-zip from its official website https://www.7-zip.org/ @@ -58,7 +58,7 @@ Now your Ubuntu subsystem is ready to use the automatic `build.sh` script and co - navigate to the directory /c/Program Files/Git/mingw64/bin - run `ln -s /c/Program Files/7-Zip/7z.exe zip.exe` -####Compile Prusa-firmware with Git-bash installed +#### Compile Prusa-firmware with Git-bash installed - open Git-bash - change to your source code folder - run `bash build.sh` From a608b0d26e573c383dc8d0e3ce39ed13160a0672 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Sat, 16 Feb 2019 06:05:43 +0100 Subject: [PATCH 03/10] Fix travis fail --- PF-build.sh | 500 ++++++++++++++++++++++++++++++++++++++++++++++++++++ build.sh | 496 ++------------------------------------------------- 2 files changed, 518 insertions(+), 478 deletions(-) create mode 100644 PF-build.sh diff --git a/PF-build.sh b/PF-build.sh new file mode 100644 index 000000000..97d9d1e26 --- /dev/null +++ b/PF-build.sh @@ -0,0 +1,500 @@ +#!/bin/bash +# This bash script is used to compile automatically the Prusa firmware with a dedecated build enviroment and settings +# +# Supported OS: Windows 10, Linux64 bit +# +# Linux: +# +# Windows: +# To excecute this sciprt you gonna need few things on your Windows machine +# +# Linux Subsystem Ubuntu +# 1. Follow these instructions +# 2. Open Ubuntu bash and get latest updates with 'apt-get upgate' +# 3. Install zip with 'apt-get install zip' +# 4. Add at top of ~/.bashrc following lines by using 'sudo nano ~/.bashrc' +# +# export OS="Linux" +# export JAVA_TOOL_OPTIONS="-Djava.net.preferIPv4Stack=true" +# export GPG_TTY=$(tty) +# +# and confirm them. Restart Ubuntu bash +# +# Or GIT-BASH +# 1. Download and install the correct (64bit or 32bit) Git version https://git-scm.com/download/win +# 2. Also follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 +# 3. Download and install 7z-zip from its official website. +# By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 as my case. +# 4. Run git Bash under Administrator privilege and navigate to the directory /c/Program Files/Git/mingw64/bin, +# you can run the command ln -s /c/Program Files/7-Zip/7z.exe zip.exe +# +# Usefull things to edit and compare your custom Firmware +# 1. Download and install current and correct (64bit or 32bit) Notepad++ version https://notepad-plus-plus.org/download +# 2. Another great tool to compare your custom mod and stock firmware is WinMerge http://winmerge.org/downloads/?lang=en +# +# Example for MK3: open git bash and chage to your Firmware directory +# @ MINGW64 //path +# bash build.sh 1_75mm_MK3-EINSy10a-E3Dv6full +# +# Example for MK25: open git bash and chage to your directory +# gussner@WIN01 MINGW64 /d/Data/Prusa-Firmware/MK3 +# bash build.sh 1_75mm_MK25-RAMBo13a-E3Dv6full +# +# The compiled hex files can be found in the folder above like from the example +# gussner@WIN01 MINGW64 /d/Data/Prusa-Firmware +# FW351-Build1778-1_75mm_MK25-RAMBo13a-E3Dv6full.hex +# +# Version: 1.0.1-Build_8 +# Change log: +# 12 Jan 2019, 3d-gussner, Fixed "compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" in 'platform.txt' +# 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is uknown +# 17 Jan 2019, 3d-gussner, Build_3, Check for OS Windows or Linux and use the right build enviroment +# 10 Feb 2019, ropaha, Pull Request, Select variant from list while using build.sh +# 10 Feb 2019, ropaha, change FW_DEV_VERSION automatically depending on FW_VERSION RC/BETA/ALPHA +# 10 Feb 2019, 3d-gussner, 1st tests with english only +# 10 Feb 2019, ropaha, added compiling of all variants and english only +# 10 Feb 2019, 3d-gussner, Set OUTPUT_FOLDER for hex files +# 11 Feb 2019, 3d-gussner/ropaha, Minor changes and fixes +# 11 Feb 2019, 3d-gussner, Ready for RC +# 12 Feb 2019, 3d-gussner, Check if wget and zip are installed. Thanks to Bernd to point it out +# 12 Feb 2019, 3d-gussner, Changed OS check to OSTYPE as it is not supported on Ubuntu +# Also added different BUILD_ENV folders depending on OS used so Windows +# Users can use git-bash AND Windows Linux Subsystems at the same time +# Cleanup compiler flags is only depends on OS version. +# 12 Feb 2019, 3d-gussner, Added additional OSTYPE check +# 15 feb 2019, 3d-gussner, Added zip files for miniRAMbo multi language hex files +# 15 Feb 2019, 3d-gussner, Added more checks if +# Compiled Hex-files +# Configuration_prusa.h +# language build files +# multi language firmware files exist and clean them up +# 15 Feb 2019, 3d-gussner, Fixed selction GOLD/UNKNOWN DEV_STATUS for ALL variants builds, so you have to choose only once +# 15 Feb 2019, 3d-gussner, Added some colored output +# 15 Feb 2019, 3d-gussner, troubleshooting and minor fixes + + + +###Check if OSTYPE is supported +if [ $OSTYPE == "msys" ]; then + if [ $(uname -m) == "x86_64" ]; then + echo "$(tput setaf 2)Windows 64-bit found$(tput sgr0)" + fi +elif [ $OSTYPE == "linux-gnu" ]; then + if [ $(uname -m) == "x86_64" ]; then + echo "$(tput setaf 2)Linux 64-bit found$(tput sgr0)" + fi +else + echo "$(tput setaf 1)This script doesn't support your Operating system!" + echo "Please use Linux 64-bit or Windows 10 64-bit with Linux subsystem / git-bash" + echo "Read the notes of build.sh$(tput sgr0)" + exit +fi +sleep 2 +###Prepare bash enviroment and check if wget and zip are availible +if ! type wget > /dev/null; then + echo "$(tput setaf 1)Missing 'wget' which is important to run this script" + echo "Please follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 to install wget$(tput sgr0)" + exit +fi +if ! type zip > /dev/null; then + if [ $OSTYPE == "msys" ]; then + echo "$(tput setaf 1)Missing 'zip' which is important to run this script" + echo "Download and install 7z-zip from its official website https://www.7-zip.org/" + echo "By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 as my case." + echo "Run git Bash under Administrator privilege and" + echo "navigate to the directory /c/Program Files/Git/mingw64/bin," + echo "you can run the command $(tput setaf 2)ln -s /c/Program Files/7-Zip/7z.exe zip.exe$(tput sgr0)" + exit + elif [ $OSTYPE == "linux-gnu" ]; then + echo "$(tput setaf 1)Missing 'zip' which is important to run this script" + echo "install it with the command $(tput setaf 2)'sudo apt-get install zip'$(tput sgr0)" + exit + fi +fi +###End prepare bash enviroment + +BUILD_ENV="1.0.1" +SCRIPT_PATH="$( cd "$(dirname "$0")" ; pwd -P )" + +# List few useful data +echo +echo "Script path:" $SCRIPT_PATH +echo "OS :" $OS +echo "OS type :" $OSTYPE +echo "" + +#### Start prepare building + +#Check if build exists and creates it if not +if [ ! -d "../build-env" ]; then + mkdir ../build-env || exit 2 +fi + +cd ../build-env || exit 3 + +# Check if PF-build-env- exists and downloads + creates it if not +# The build enviroment is based on the Arduino IDE 1.8.5 portal vesion with some changes +if [ ! -d "../PF-build-env-$BUILD_ENV" ]; then + echo "$(tput setaf 6)PF-build-env-$BUILD_ENV is missing ... creating it now for you$(tput sgr 0)" + mkdir ../PF-build-env-$BUILD_ENV + sleep 5 +fi + +if [ $OSTYPE == "msys" ]; then + if [ ! -f "PF-build-env-Win-$BUILD_ENV.zip" ]; then + echo "$(tput setaf 6)Downloding Windows build enviroment...$(tput setaf 2)" + sleep 2 + wget https://github.com/3d-gussner/PF-build-env/releases/download/Win-$BUILD_ENV/PF-build-env-Win-$BUILD_ENV.zip || exit 4 + #cp -f ../../PF-build-env/PF-build-env-Win-$BUILD_ENV.zip PF-build-env-Win-$BUILD_ENV.zip || exit4 + echo "$(tput sgr 0)" + fi + if [ ! -d "../PF-build-env-$BUILD_ENV/$OSTYPE" ]; then + echo "$(tput setaf 6)Unzipping Windows build enviroment...$(tput setaf 2)" + sleep 2 + unzip PF-build-env-Win-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$OSTYPE || exit 4 + echo "$(tput sgr0)" + fi + +fi + +if [ $OSTYPE == "linux-gnu" ]; then + if [ ! -f "PF-build-env-Linux64-$BUILD_ENV.zip" ]; then + echo "$(tput setaf 6)Downloading Linux 64 build enviroment...$(tput setaf 2)" + sleep 2 + wget https://github.com/mkbel/PF-build-env/releases/download/$BUILD_ENV/PF-build-env-Linux64-$BUILD_ENV.zip || exit 3 + echo "$(tput sgr0)" + fi + + if [ ! -d "../PF-build-env-$BUILD_ENV/$OSTYPE" ]; then + echo "$(tput setaf 6)Unzipping Linux build enviroment...$(tput setaf 2)" + sleep 2 + unzip PF-build-env-Linux64-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$OSTYPE || exit 4 + echo "$(tput sgr0)" + fi +fi +cd $SCRIPT_PATH + +# First argument defines which varaint of the Prusa Firmware will be compiled +if [ -z "$1" ] ; then + # Select which varaint of the Prusa Firmware will be compiled, like + PS3="Select a variant: " + while IFS= read -r -d $'\0' f; do + options[i++]="$f" + done < <(find Firmware/variants/ -maxdepth 1 -type f -name "*.h" -print0 ) + select opt in "${options[@]}" "All" "Quit"; do + case $opt in + *.h) + VARIANT=$(basename "$opt" ".h") + VARIANTS[i++]="$opt" + break + ;; + "All") + VARIANT="All" + VARIANTS=${options[*]} + break + ;; + "Quit") + echo "You chose to stop" + exit 1 + ;; + *) + echo "$(tput setaf 1)This is not a valid variant$(tput sgr0)" + ;; + esac + done +else + VARIANT=$1 +fi + +#Second argument defines if it is an english only version. Known values EN_ONLY / ALL +#Check default language mode +MULTI_LANGUAGE_CHECK=$(grep --max-count=1 "^#define LANG_MODE *" $SCRIPT_PATH/Firmware/config.h|sed -e's/ */ /g'|cut -d ' ' -f3) + +if [ -z "$2" ] ; then + PS3="Select a language: " + echo + echo "Which lang-build do you want?" + select yn in "Multi languages" "English only"; do + case $yn in + "Multi languages") + LANGUAGES="ALL" + sed -i -- "s/^#define LANG_MODE *0/#define LANG_MODE 1/g" $SCRIPT_PATH/Firmware/config.h + break + ;; + "English only") + LANGUAGES="EN_ONLY" + sed -i -- "s/^#define LANG_MODE *1/#define LANG_MODE 0/g" $SCRIPT_PATH/Firmware/config.h + break + ;; + *) + echo "$(tput setaf 1)This is not a valid language$(tput sgr0)" + ;; + esac + done +else + LANGUAGES=$2 +fi + +#Set BUILD_ENV_PATH +cd ../PF-build-env-$BUILD_ENV/$OSTYPE || exit 5 +BUILD_ENV_PATH="$( pwd -P )" + +cd ../.. + +#Checkif BUILD_PATH exisits and if not creates it +if [ ! -d "Prusa-Firmware-build" ]; then + mkdir Prusa-Firmware-build || exit 6 +fi + +#Set the BUILD_PATH for Arduino IDE +cd Prusa-Firmware-build || exit 7 +BUILD_PATH="$( pwd -P )" + +for v in ${VARIANTS[*]} +do + VARIANT=$(basename "$v" ".h") + # Find firmware version in Configuration.h file and use it to generate the hex filename + FW=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g') + # Find build version in Configuration.h file and use it to generate the hex filename + BUILD=$(grep --max-count=1 "\bFW_COMMIT_NR\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d ' ' -f3) + # Check if the motherboard is an EINSY and if so the only one hex file will generated + MOTHERBOARD=$(grep --max-count=1 "\bMOTHERBOARD\b" $SCRIPT_PATH/Firmware/variants/$VARIANT.h | sed -e's/ */ /g' |cut -d ' ' -f3) + # Check development status + DEV_CHECK=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g'|cut -d '-' -f2) + if [ -z "$DEV_STATUS_SELECTED" ] ; then + if [[ "$DEV_CHECK" == "RC1" || "$DEV_CHECK" == "RC2" ]] ; then + DEV_STATUS="RC" + elif [[ "$DEV_CHECK" == "ALPHA" ]]; then + DEV_STATUS="ALPHA" + elif [[ "$DEV_CHECK" == "BETA" ]]; then + DEV_STATUS="BETA" + elif [[ "$DEV_CHECK" == "DEVEL" ]]; then + DEV_STATUS="DEVEL" + elif [[ "$DEV_CHECK" == "DEBUG" ]]; then + DEV_STATUS="DEBUG" + else + DEV_STATUS="UNKNOWN" + echo + echo "$(tput setaf 5)DEV_STATUS is UNKNOWN. Do you wish to set DEV_STATUS to GOLD?$(tput sgr0)" + PS3="Select YES only if source code is tested and trusted: " + select yn in "Yes" "No"; do + case $yn in + Yes) + DEV_STATUS="GOLD" + DEV_STATUS_SELECTED="GOLD" + break + ;; + No) + DEV_STATUS="UNKNOWN" + DEV_STATUS_SELECTED="UNKNOWN" + break + ;; + *) + echo "$(tput setaf 1)This is not a valid DEV_STATUS$(tput sgr0)" + ;; + esac + done + fi + else + DEV_STATUS=$DEV_STATUS_SELECTED + fi + #Prepare hex files folders + if [ ! -d "$SCRIPT_PATH/../Hex-files/FW$FW-Build$BUILD/$MOTHERBOARD" ]; then + mkdir -p $SCRIPT_PATH/../Hex-files/FW$FW-Build$BUILD/$MOTHERBOARD || exit 10 + fi + OUTPUT_FOLDER="Hex-files/FW$FW-Build$BUILD/$MOTHERBOARD" + + #Check if exacly the same hexfile already exsits + if [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex" && "$LANGUAGES" == "ALL" ]]; then + echo "" + ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex + echo "$(tput setaf 6)This hex file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + elif [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex" && "$LANGUAGES" == "EN_ONLY" ]]; then + echo "" + ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex + echo "$(tput setaf 6)This hex file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + fi + if [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip" && "$LANGUAGES" == "ALL" ]]; then + echo "" + ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip + echo "$(tput setaf 6)This zip file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + fi + + #List some useful data + echo "$(tput setaf 2)$(tput setab 7) " + echo "Variant :" $VARIANT + echo "Firmware :" $FW + echo "Build # :" $BUILD + echo "Dev Check :" $DEV_CHECK + echo "DEV Status :" $DEV_STATUS + echo "Motherboard:" $MOTHERBOARD + echo "Languages :" $LANGUAGES + echo "Hex-file Folder:" $OUTPUT_FOLDER + echo "$(tput sgr0)" + + #Prepare Firmware to be compiled by copying variant as Configuration_prusa.h + if [ ! -f "$SCRIPT_PATH/Firmware/Configuration_prusa.h" ]; then + cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 11 + else + echo "$(tput setaf 6)Configuration_prusa.h already exist it will be overwritten in 10 seconds by the chosen variant.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 11 + fi + + #Prepare Configuration.h to use the correct FW_DEV_VERSION to prevent LCD messages when connecting with OctoPrint + sed -i -- "s/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/#define FW_DEV_VERSION FW_VERSION_$DEV_STATUS/g" $SCRIPT_PATH/Firmware/Configuration.h + + # set FW_REPOSITORY + sed -i -- 's/#define FW_REPOSITORY "Unknown"/#define FW_REPOSITORY "Prusa3d"/g' $SCRIPT_PATH/Firmware/Configuration.h + + #Prepare english only or multilanguage version to be build + if [ $LANGUAGES == "ALL" ]; then + echo " " + echo "Multi-language firmware will be build" + echo " " + else + echo " " + echo "English only language firmware will be build" + echo " " + fi + + #Check if compiler flags are set to Prusa specific needs for the rambo board. + if [ $OSTYPE == "msys" ]; then + RAMBO_PLATFORM_FILE="rambo/hardware/avr/1.0.1/platform.txt" + COMP_FLAGS="compiler.c.elf.flags={compiler.warning_flags} -Os -g -flto -fuse-linker-plugin -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" + CHECK_FLAGS=$(grep --max-count=1 "$COMP_FLAGS" $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE) + if [ -z "$CHECK_FLAGS" ]; then + echo "Compiler flags not found, adding flags" + if [ ! -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck ]; then + echo "making a backup" + ls $BUILD_ENV_PATH/portable/packages/rambo/hardware/avr/1.0.1/ + cp -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck + fi + echo $COMP_FLAGS >> $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE + else + echo "Compiler flags are set in rambo platform.txt" $CHECK_FLAGS + fi + fi + + #### End of Prepare building + + #### Start building + + export ARDUINO=$BUILD_ENV_PATH + #echo $BUILD_ENV_PATH + export BUILDER=$ARDUINO/arduino-builder + + echo + #read -t 5 -p "Press any key..." + echo + + if [ $OSTYPE == "msys" ]; then + echo "Start to build Prusa Firmware under Windows..." + echo "Using variant $VARIANT$(tput setaf 3)" + sleep 2 + #$BUILDER -dump-prefs -logger=machine -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=rambo:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=none -quiet $SCRIPT_PATH/Firmware/Firmware.ino || exit 12 + #$BUILDER -compile -logger=machine -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=rambo:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=none -quiet $SCRIPT_PATH/Firmware/Firmware.ino || exit 13 + $BUILDER -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=rambo:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=default $SCRIPT_PATH/Firmware/Firmware.ino || exit 14 + echo "$(tput sgr 0)" + fi + if [ $OSTYPE == "linux-gnu" ] ; then + echo "Start to build Prusa Firmware under Linux 64..." + echo "Using variant $VARIANT$(tput setaf 3)" + sleep 2 + $BUILD_ENV_PATH/arduino $SCRIPT_PATH/Firmware/Firmware.ino --verify --board rambo:avr:rambo --pref build.path=$BUILD_PATH || exit 14 + echo "$(tput sgr 0)" + fi + + if [ $LANGUAGES == "ALL" ]; then + echo "$(tput setaf 2)" + echo "Building mutli language firmware" $MULTI_LANGUAGE_CHECK + echo "$(tput sgr 0)" + sleep 2 + cd $SCRIPT_PATH/lang + echo "$(tput setaf 3)" + ./config.sh || exit 15 + echo "$(tput sgr 0)" + # Check if privious languages and firmware build exist and if so clean them up + if [ -f "lang_en.tmp" ]; then + echo "" + echo "$(tput setaf 6)Previous lang build files already exist these will be cleaned up in 10 seconds.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + echo "$(tput setaf 3)" + ./lang-clean.sh + echo "$(tput sgr 0)" + fi + if [ -f "progmem.out" ]; then + echo "" + echo "$(tput setaf 6)Previous firmware build files already exist these will be cleaned up in 10 seconds.$(tput sgr 0)" + read -t 10 -p "Press any key to continue..." + echo "$(tput setaf 3)" + ./fw-clean.sh + echo "$(tput sgr 0)" + fi + # build languages + echo "$(tput setaf 3)" + ./lang-build.sh || exit 16 + # Combine compiled firmware with languages + ./fw-build.sh || exit 17 + echo "$(tput sgr 0)" + # Check if the motherboard is an EINSY and if so the only one hex file will generated + MOTHERBOARD=$(grep --max-count=1 "\bMOTHERBOARD\b" $SCRIPT_PATH/Firmware/variants/$VARIANT.h | sed -e's/ */ /g' |cut -d ' ' -f3) + # If the motherboard is an EINSY just copy one hexfile + if [ "$MOTHERBOARD" = "BOARD_EINSY_1_0a" ]; then + echo "$(tput setaf 2)Copying multi language firmware for MK3/Einsy board to Hex-files folder$(tput sgr 0)" + cp -f firmware.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex + else + echo "$(tput setaf 2)Zip multi language firmware for MK2.5/miniRAMbo board to Hex-files folder$(tput sgr 0)" + cp -f firmware_cz.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-cz.hex + cp -f firmware_de.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-de.hex + cp -f firmware_es.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-es.hex + cp -f firmware_fr.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-fr.hex + cp -f firmware_it.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-it.hex + cp -f firmware_pl.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-pl.hex + if [ $OSTYPE == "msys" ]; then + zip a $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex + rm $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex + elif [ $OSTYPE == "linux-gnu" ]; then + zip -m -j ../../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip ../../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex + fi + fi + # Cleanup after build + echo "$(tput setaf 3)" + ./fw-clean.sh || exit 18 + ./lang-clean.sh || exit 19 + echo "$(tput sgr 0)" + else + echo "$(tput setaf 2)Copying English only firmware to Hex-files folder$(tput sgr 0)" + cp -f $BUILD_PATH/Firmware.ino.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex || exit 20 + fi + + # Cleanup Firmware + rm $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 17 + sed -i -- "s/^#define FW_DEV_VERSION FW_VERSION_$DEV_STATUS/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/g" $SCRIPT_PATH/Firmware/Configuration.h + sed -i -- 's/^#define FW_REPOSITORY "Prusa3d"/#define FW_REPOSITORY "Unknown"/g' $SCRIPT_PATH/Firmware/Configuration.h + echo $MULTI_LANGUAGE_CHECK + #sed -i -- "s/^#define LANG_MODE * /#define LANG_MODE $MULTI_LANGUAGE_CHECK/g" $SCRIPT_PATH/Firmware/config.h + sed -i -- "s/^#define LANG_MODE *1/#define LANG_MODE ${MULTI_LANGUAGE_CHECK}/g" $SCRIPT_PATH/Firmware/config.h + sed -i -- "s/^#define LANG_MODE *0/#define LANG_MODE ${MULTI_LANGUAGE_CHECK}/g" $SCRIPT_PATH/Firmware/config.h + sleep 5 +done + +# Cleanup compiler flags are set to Prusa specific needs for the rambo board. +#if [ $OSTYPE == "msys" ]; then +# echo " " +# echo "Restore Windows platform.txt" +# echo " " +# cp -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE +#fi + +# Switch to hex path and list build files +cd $SCRIPT_PATH +cd .. +echo "$(tput setaf 2) " +echo " " +echo "Build done, please use Slic3rPE > 1.41.0 to upload the firmware" +echo "more information how to flash firmware https://www.prusa3d.com/drivers/ $(tput sgr 0)" +#### End building diff --git a/build.sh b/build.sh index 97d9d1e26..051f1352c 100755 --- a/build.sh +++ b/build.sh @@ -1,500 +1,40 @@ #!/bin/bash -# This bash script is used to compile automatically the Prusa firmware with a dedecated build enviroment and settings -# -# Supported OS: Windows 10, Linux64 bit -# -# Linux: -# -# Windows: -# To excecute this sciprt you gonna need few things on your Windows machine -# -# Linux Subsystem Ubuntu -# 1. Follow these instructions -# 2. Open Ubuntu bash and get latest updates with 'apt-get upgate' -# 3. Install zip with 'apt-get install zip' -# 4. Add at top of ~/.bashrc following lines by using 'sudo nano ~/.bashrc' -# -# export OS="Linux" -# export JAVA_TOOL_OPTIONS="-Djava.net.preferIPv4Stack=true" -# export GPG_TTY=$(tty) -# -# and confirm them. Restart Ubuntu bash -# -# Or GIT-BASH -# 1. Download and install the correct (64bit or 32bit) Git version https://git-scm.com/download/win -# 2. Also follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 -# 3. Download and install 7z-zip from its official website. -# By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 as my case. -# 4. Run git Bash under Administrator privilege and navigate to the directory /c/Program Files/Git/mingw64/bin, -# you can run the command ln -s /c/Program Files/7-Zip/7z.exe zip.exe -# -# Usefull things to edit and compare your custom Firmware -# 1. Download and install current and correct (64bit or 32bit) Notepad++ version https://notepad-plus-plus.org/download -# 2. Another great tool to compare your custom mod and stock firmware is WinMerge http://winmerge.org/downloads/?lang=en -# -# Example for MK3: open git bash and chage to your Firmware directory -# @ MINGW64 //path -# bash build.sh 1_75mm_MK3-EINSy10a-E3Dv6full -# -# Example for MK25: open git bash and chage to your directory -# gussner@WIN01 MINGW64 /d/Data/Prusa-Firmware/MK3 -# bash build.sh 1_75mm_MK25-RAMBo13a-E3Dv6full -# -# The compiled hex files can be found in the folder above like from the example -# gussner@WIN01 MINGW64 /d/Data/Prusa-Firmware -# FW351-Build1778-1_75mm_MK25-RAMBo13a-E3Dv6full.hex -# -# Version: 1.0.1-Build_8 -# Change log: -# 12 Jan 2019, 3d-gussner, Fixed "compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" in 'platform.txt' -# 16 Jan 2019, 3d-gussner, Build_2, Added development check to modify 'Configuration.h' to prevent unwanted LCD messages that Firmware is uknown -# 17 Jan 2019, 3d-gussner, Build_3, Check for OS Windows or Linux and use the right build enviroment -# 10 Feb 2019, ropaha, Pull Request, Select variant from list while using build.sh -# 10 Feb 2019, ropaha, change FW_DEV_VERSION automatically depending on FW_VERSION RC/BETA/ALPHA -# 10 Feb 2019, 3d-gussner, 1st tests with english only -# 10 Feb 2019, ropaha, added compiling of all variants and english only -# 10 Feb 2019, 3d-gussner, Set OUTPUT_FOLDER for hex files -# 11 Feb 2019, 3d-gussner/ropaha, Minor changes and fixes -# 11 Feb 2019, 3d-gussner, Ready for RC -# 12 Feb 2019, 3d-gussner, Check if wget and zip are installed. Thanks to Bernd to point it out -# 12 Feb 2019, 3d-gussner, Changed OS check to OSTYPE as it is not supported on Ubuntu -# Also added different BUILD_ENV folders depending on OS used so Windows -# Users can use git-bash AND Windows Linux Subsystems at the same time -# Cleanup compiler flags is only depends on OS version. -# 12 Feb 2019, 3d-gussner, Added additional OSTYPE check -# 15 feb 2019, 3d-gussner, Added zip files for miniRAMbo multi language hex files -# 15 Feb 2019, 3d-gussner, Added more checks if -# Compiled Hex-files -# Configuration_prusa.h -# language build files -# multi language firmware files exist and clean them up -# 15 Feb 2019, 3d-gussner, Fixed selction GOLD/UNKNOWN DEV_STATUS for ALL variants builds, so you have to choose only once -# 15 Feb 2019, 3d-gussner, Added some colored output -# 15 Feb 2019, 3d-gussner, troubleshooting and minor fixes - - - -###Check if OSTYPE is supported -if [ $OSTYPE == "msys" ]; then - if [ $(uname -m) == "x86_64" ]; then - echo "$(tput setaf 2)Windows 64-bit found$(tput sgr0)" - fi -elif [ $OSTYPE == "linux-gnu" ]; then - if [ $(uname -m) == "x86_64" ]; then - echo "$(tput setaf 2)Linux 64-bit found$(tput sgr0)" - fi -else - echo "$(tput setaf 1)This script doesn't support your Operating system!" - echo "Please use Linux 64-bit or Windows 10 64-bit with Linux subsystem / git-bash" - echo "Read the notes of build.sh$(tput sgr0)" - exit -fi -sleep 2 -###Prepare bash enviroment and check if wget and zip are availible -if ! type wget > /dev/null; then - echo "$(tput setaf 1)Missing 'wget' which is important to run this script" - echo "Please follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 to install wget$(tput sgr0)" - exit -fi -if ! type zip > /dev/null; then - if [ $OSTYPE == "msys" ]; then - echo "$(tput setaf 1)Missing 'zip' which is important to run this script" - echo "Download and install 7z-zip from its official website https://www.7-zip.org/" - echo "By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 as my case." - echo "Run git Bash under Administrator privilege and" - echo "navigate to the directory /c/Program Files/Git/mingw64/bin," - echo "you can run the command $(tput setaf 2)ln -s /c/Program Files/7-Zip/7z.exe zip.exe$(tput sgr0)" - exit - elif [ $OSTYPE == "linux-gnu" ]; then - echo "$(tput setaf 1)Missing 'zip' which is important to run this script" - echo "install it with the command $(tput setaf 2)'sudo apt-get install zip'$(tput sgr0)" - exit - fi -fi -###End prepare bash enviroment - BUILD_ENV="1.0.1" SCRIPT_PATH="$( cd "$(dirname "$0")" ; pwd -P )" -# List few useful data -echo -echo "Script path:" $SCRIPT_PATH -echo "OS :" $OS -echo "OS type :" $OSTYPE -echo "" +if [ ! -d "build-env" ]; then + mkdir build-env || exit 1 +fi +cd build-env || exit 2 -#### Start prepare building - -#Check if build exists and creates it if not -if [ ! -d "../build-env" ]; then - mkdir ../build-env || exit 2 +if [ ! -f "PF-build-env-Linux64-$BUILD_ENV.zip" ]; then + wget https://github.com/mkbel/PF-build-env/releases/download/$BUILD_ENV/PF-build-env-Linux64-$BUILD_ENV.zip || exit 3 fi -cd ../build-env || exit 3 - -# Check if PF-build-env- exists and downloads + creates it if not -# The build enviroment is based on the Arduino IDE 1.8.5 portal vesion with some changes -if [ ! -d "../PF-build-env-$BUILD_ENV" ]; then - echo "$(tput setaf 6)PF-build-env-$BUILD_ENV is missing ... creating it now for you$(tput sgr 0)" - mkdir ../PF-build-env-$BUILD_ENV - sleep 5 +if [ ! -d "../../PF-build-env-$BUILD_ENV" ]; then + unzip -q PF-build-env-Linux64-$BUILD_ENV.zip -d ../../PF-build-env-$BUILD_ENV || exit 4 fi -if [ $OSTYPE == "msys" ]; then - if [ ! -f "PF-build-env-Win-$BUILD_ENV.zip" ]; then - echo "$(tput setaf 6)Downloding Windows build enviroment...$(tput setaf 2)" - sleep 2 - wget https://github.com/3d-gussner/PF-build-env/releases/download/Win-$BUILD_ENV/PF-build-env-Win-$BUILD_ENV.zip || exit 4 - #cp -f ../../PF-build-env/PF-build-env-Win-$BUILD_ENV.zip PF-build-env-Win-$BUILD_ENV.zip || exit4 - echo "$(tput sgr 0)" - fi - if [ ! -d "../PF-build-env-$BUILD_ENV/$OSTYPE" ]; then - echo "$(tput setaf 6)Unzipping Windows build enviroment...$(tput setaf 2)" - sleep 2 - unzip PF-build-env-Win-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$OSTYPE || exit 4 - echo "$(tput sgr0)" - fi - -fi - -if [ $OSTYPE == "linux-gnu" ]; then - if [ ! -f "PF-build-env-Linux64-$BUILD_ENV.zip" ]; then - echo "$(tput setaf 6)Downloading Linux 64 build enviroment...$(tput setaf 2)" - sleep 2 - wget https://github.com/mkbel/PF-build-env/releases/download/$BUILD_ENV/PF-build-env-Linux64-$BUILD_ENV.zip || exit 3 - echo "$(tput sgr0)" - fi - - if [ ! -d "../PF-build-env-$BUILD_ENV/$OSTYPE" ]; then - echo "$(tput setaf 6)Unzipping Linux build enviroment...$(tput setaf 2)" - sleep 2 - unzip PF-build-env-Linux64-$BUILD_ENV.zip -d ../PF-build-env-$BUILD_ENV/$OSTYPE || exit 4 - echo "$(tput sgr0)" - fi -fi -cd $SCRIPT_PATH - -# First argument defines which varaint of the Prusa Firmware will be compiled -if [ -z "$1" ] ; then - # Select which varaint of the Prusa Firmware will be compiled, like - PS3="Select a variant: " - while IFS= read -r -d $'\0' f; do - options[i++]="$f" - done < <(find Firmware/variants/ -maxdepth 1 -type f -name "*.h" -print0 ) - select opt in "${options[@]}" "All" "Quit"; do - case $opt in - *.h) - VARIANT=$(basename "$opt" ".h") - VARIANTS[i++]="$opt" - break - ;; - "All") - VARIANT="All" - VARIANTS=${options[*]} - break - ;; - "Quit") - echo "You chose to stop" - exit 1 - ;; - *) - echo "$(tput setaf 1)This is not a valid variant$(tput sgr0)" - ;; - esac - done -else - VARIANT=$1 -fi - -#Second argument defines if it is an english only version. Known values EN_ONLY / ALL -#Check default language mode -MULTI_LANGUAGE_CHECK=$(grep --max-count=1 "^#define LANG_MODE *" $SCRIPT_PATH/Firmware/config.h|sed -e's/ */ /g'|cut -d ' ' -f3) - -if [ -z "$2" ] ; then - PS3="Select a language: " - echo - echo "Which lang-build do you want?" - select yn in "Multi languages" "English only"; do - case $yn in - "Multi languages") - LANGUAGES="ALL" - sed -i -- "s/^#define LANG_MODE *0/#define LANG_MODE 1/g" $SCRIPT_PATH/Firmware/config.h - break - ;; - "English only") - LANGUAGES="EN_ONLY" - sed -i -- "s/^#define LANG_MODE *1/#define LANG_MODE 0/g" $SCRIPT_PATH/Firmware/config.h - break - ;; - *) - echo "$(tput setaf 1)This is not a valid language$(tput sgr0)" - ;; - esac - done -else - LANGUAGES=$2 -fi - -#Set BUILD_ENV_PATH -cd ../PF-build-env-$BUILD_ENV/$OSTYPE || exit 5 +cd ../../PF-build-env-$BUILD_ENV || exit 5 BUILD_ENV_PATH="$( pwd -P )" -cd ../.. +cd .. -#Checkif BUILD_PATH exisits and if not creates it if [ ! -d "Prusa-Firmware-build" ]; then mkdir Prusa-Firmware-build || exit 6 fi -#Set the BUILD_PATH for Arduino IDE cd Prusa-Firmware-build || exit 7 BUILD_PATH="$( pwd -P )" -for v in ${VARIANTS[*]} -do - VARIANT=$(basename "$v" ".h") - # Find firmware version in Configuration.h file and use it to generate the hex filename - FW=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g') - # Find build version in Configuration.h file and use it to generate the hex filename - BUILD=$(grep --max-count=1 "\bFW_COMMIT_NR\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d ' ' -f3) - # Check if the motherboard is an EINSY and if so the only one hex file will generated - MOTHERBOARD=$(grep --max-count=1 "\bMOTHERBOARD\b" $SCRIPT_PATH/Firmware/variants/$VARIANT.h | sed -e's/ */ /g' |cut -d ' ' -f3) - # Check development status - DEV_CHECK=$(grep --max-count=1 "\bFW_VERSION\b" $SCRIPT_PATH/Firmware/Configuration.h | sed -e's/ */ /g'|cut -d '"' -f2|sed 's/\.//g'|cut -d '-' -f2) - if [ -z "$DEV_STATUS_SELECTED" ] ; then - if [[ "$DEV_CHECK" == "RC1" || "$DEV_CHECK" == "RC2" ]] ; then - DEV_STATUS="RC" - elif [[ "$DEV_CHECK" == "ALPHA" ]]; then - DEV_STATUS="ALPHA" - elif [[ "$DEV_CHECK" == "BETA" ]]; then - DEV_STATUS="BETA" - elif [[ "$DEV_CHECK" == "DEVEL" ]]; then - DEV_STATUS="DEVEL" - elif [[ "$DEV_CHECK" == "DEBUG" ]]; then - DEV_STATUS="DEBUG" - else - DEV_STATUS="UNKNOWN" - echo - echo "$(tput setaf 5)DEV_STATUS is UNKNOWN. Do you wish to set DEV_STATUS to GOLD?$(tput sgr0)" - PS3="Select YES only if source code is tested and trusted: " - select yn in "Yes" "No"; do - case $yn in - Yes) - DEV_STATUS="GOLD" - DEV_STATUS_SELECTED="GOLD" - break - ;; - No) - DEV_STATUS="UNKNOWN" - DEV_STATUS_SELECTED="UNKNOWN" - break - ;; - *) - echo "$(tput setaf 1)This is not a valid DEV_STATUS$(tput sgr0)" - ;; - esac - done - fi - else - DEV_STATUS=$DEV_STATUS_SELECTED - fi - #Prepare hex files folders - if [ ! -d "$SCRIPT_PATH/../Hex-files/FW$FW-Build$BUILD/$MOTHERBOARD" ]; then - mkdir -p $SCRIPT_PATH/../Hex-files/FW$FW-Build$BUILD/$MOTHERBOARD || exit 10 - fi - OUTPUT_FOLDER="Hex-files/FW$FW-Build$BUILD/$MOTHERBOARD" - - #Check if exacly the same hexfile already exsits - if [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex" && "$LANGUAGES" == "ALL" ]]; then - echo "" - ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex - echo "$(tput setaf 6)This hex file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." - elif [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex" && "$LANGUAGES" == "EN_ONLY" ]]; then - echo "" - ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex - echo "$(tput setaf 6)This hex file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." - fi - if [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip" && "$LANGUAGES" == "ALL" ]]; then - echo "" - ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip - echo "$(tput setaf 6)This zip file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." - fi - - #List some useful data - echo "$(tput setaf 2)$(tput setab 7) " - echo "Variant :" $VARIANT - echo "Firmware :" $FW - echo "Build # :" $BUILD - echo "Dev Check :" $DEV_CHECK - echo "DEV Status :" $DEV_STATUS - echo "Motherboard:" $MOTHERBOARD - echo "Languages :" $LANGUAGES - echo "Hex-file Folder:" $OUTPUT_FOLDER - echo "$(tput sgr0)" +if [ ! -f "$SCRIPT_PATH/Firmware/Configuration_prusa.h" ]; then + cp $SCRIPT_PATH/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 8 +fi - #Prepare Firmware to be compiled by copying variant as Configuration_prusa.h - if [ ! -f "$SCRIPT_PATH/Firmware/Configuration_prusa.h" ]; then - cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 11 - else - echo "$(tput setaf 6)Configuration_prusa.h already exist it will be overwritten in 10 seconds by the chosen variant.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." - cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 11 - fi +$BUILD_ENV_PATH/arduino $SCRIPT_PATH/Firmware/Firmware.ino --verify --board rambo:avr:rambo --pref build.path=$BUILD_PATH || exit 9 - #Prepare Configuration.h to use the correct FW_DEV_VERSION to prevent LCD messages when connecting with OctoPrint - sed -i -- "s/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/#define FW_DEV_VERSION FW_VERSION_$DEV_STATUS/g" $SCRIPT_PATH/Firmware/Configuration.h +export ARDUINO=$BUILD_ENV_PATH - # set FW_REPOSITORY - sed -i -- 's/#define FW_REPOSITORY "Unknown"/#define FW_REPOSITORY "Prusa3d"/g' $SCRIPT_PATH/Firmware/Configuration.h - - #Prepare english only or multilanguage version to be build - if [ $LANGUAGES == "ALL" ]; then - echo " " - echo "Multi-language firmware will be build" - echo " " - else - echo " " - echo "English only language firmware will be build" - echo " " - fi - - #Check if compiler flags are set to Prusa specific needs for the rambo board. - if [ $OSTYPE == "msys" ]; then - RAMBO_PLATFORM_FILE="rambo/hardware/avr/1.0.1/platform.txt" - COMP_FLAGS="compiler.c.elf.flags={compiler.warning_flags} -Os -g -flto -fuse-linker-plugin -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections" - CHECK_FLAGS=$(grep --max-count=1 "$COMP_FLAGS" $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE) - if [ -z "$CHECK_FLAGS" ]; then - echo "Compiler flags not found, adding flags" - if [ ! -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck ]; then - echo "making a backup" - ls $BUILD_ENV_PATH/portable/packages/rambo/hardware/avr/1.0.1/ - cp -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck - fi - echo $COMP_FLAGS >> $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE - else - echo "Compiler flags are set in rambo platform.txt" $CHECK_FLAGS - fi - fi - - #### End of Prepare building - - #### Start building - - export ARDUINO=$BUILD_ENV_PATH - #echo $BUILD_ENV_PATH - export BUILDER=$ARDUINO/arduino-builder - - echo - #read -t 5 -p "Press any key..." - echo - - if [ $OSTYPE == "msys" ]; then - echo "Start to build Prusa Firmware under Windows..." - echo "Using variant $VARIANT$(tput setaf 3)" - sleep 2 - #$BUILDER -dump-prefs -logger=machine -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=rambo:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=none -quiet $SCRIPT_PATH/Firmware/Firmware.ino || exit 12 - #$BUILDER -compile -logger=machine -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=rambo:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=none -quiet $SCRIPT_PATH/Firmware/Firmware.ino || exit 13 - $BUILDER -compile -hardware $ARDUINO/hardware -hardware $ARDUINO/portable/packages -tools $ARDUINO/tools-builder -tools $ARDUINO/hardware/tools/avr -tools $ARDUINO/portable/packages -built-in-libraries $ARDUINO/libraries -libraries $ARDUINO/portable/sketchbook/libraries -fqbn=rambo:avr:rambo -ide-version=10805 -build-path=$BUILD_PATH -warnings=default $SCRIPT_PATH/Firmware/Firmware.ino || exit 14 - echo "$(tput sgr 0)" - fi - if [ $OSTYPE == "linux-gnu" ] ; then - echo "Start to build Prusa Firmware under Linux 64..." - echo "Using variant $VARIANT$(tput setaf 3)" - sleep 2 - $BUILD_ENV_PATH/arduino $SCRIPT_PATH/Firmware/Firmware.ino --verify --board rambo:avr:rambo --pref build.path=$BUILD_PATH || exit 14 - echo "$(tput sgr 0)" - fi - - if [ $LANGUAGES == "ALL" ]; then - echo "$(tput setaf 2)" - echo "Building mutli language firmware" $MULTI_LANGUAGE_CHECK - echo "$(tput sgr 0)" - sleep 2 - cd $SCRIPT_PATH/lang - echo "$(tput setaf 3)" - ./config.sh || exit 15 - echo "$(tput sgr 0)" - # Check if privious languages and firmware build exist and if so clean them up - if [ -f "lang_en.tmp" ]; then - echo "" - echo "$(tput setaf 6)Previous lang build files already exist these will be cleaned up in 10 seconds.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." - echo "$(tput setaf 3)" - ./lang-clean.sh - echo "$(tput sgr 0)" - fi - if [ -f "progmem.out" ]; then - echo "" - echo "$(tput setaf 6)Previous firmware build files already exist these will be cleaned up in 10 seconds.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." - echo "$(tput setaf 3)" - ./fw-clean.sh - echo "$(tput sgr 0)" - fi - # build languages - echo "$(tput setaf 3)" - ./lang-build.sh || exit 16 - # Combine compiled firmware with languages - ./fw-build.sh || exit 17 - echo "$(tput sgr 0)" - # Check if the motherboard is an EINSY and if so the only one hex file will generated - MOTHERBOARD=$(grep --max-count=1 "\bMOTHERBOARD\b" $SCRIPT_PATH/Firmware/variants/$VARIANT.h | sed -e's/ */ /g' |cut -d ' ' -f3) - # If the motherboard is an EINSY just copy one hexfile - if [ "$MOTHERBOARD" = "BOARD_EINSY_1_0a" ]; then - echo "$(tput setaf 2)Copying multi language firmware for MK3/Einsy board to Hex-files folder$(tput sgr 0)" - cp -f firmware.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex - else - echo "$(tput setaf 2)Zip multi language firmware for MK2.5/miniRAMbo board to Hex-files folder$(tput sgr 0)" - cp -f firmware_cz.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-cz.hex - cp -f firmware_de.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-de.hex - cp -f firmware_es.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-es.hex - cp -f firmware_fr.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-fr.hex - cp -f firmware_it.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-it.hex - cp -f firmware_pl.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-pl.hex - if [ $OSTYPE == "msys" ]; then - zip a $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex - rm $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex - elif [ $OSTYPE == "linux-gnu" ]; then - zip -m -j ../../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip ../../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-??.hex - fi - fi - # Cleanup after build - echo "$(tput setaf 3)" - ./fw-clean.sh || exit 18 - ./lang-clean.sh || exit 19 - echo "$(tput sgr 0)" - else - echo "$(tput setaf 2)Copying English only firmware to Hex-files folder$(tput sgr 0)" - cp -f $BUILD_PATH/Firmware.ino.hex $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex || exit 20 - fi - - # Cleanup Firmware - rm $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 17 - sed -i -- "s/^#define FW_DEV_VERSION FW_VERSION_$DEV_STATUS/#define FW_DEV_VERSION FW_VERSION_UNKNOWN/g" $SCRIPT_PATH/Firmware/Configuration.h - sed -i -- 's/^#define FW_REPOSITORY "Prusa3d"/#define FW_REPOSITORY "Unknown"/g' $SCRIPT_PATH/Firmware/Configuration.h - echo $MULTI_LANGUAGE_CHECK - #sed -i -- "s/^#define LANG_MODE * /#define LANG_MODE $MULTI_LANGUAGE_CHECK/g" $SCRIPT_PATH/Firmware/config.h - sed -i -- "s/^#define LANG_MODE *1/#define LANG_MODE ${MULTI_LANGUAGE_CHECK}/g" $SCRIPT_PATH/Firmware/config.h - sed -i -- "s/^#define LANG_MODE *0/#define LANG_MODE ${MULTI_LANGUAGE_CHECK}/g" $SCRIPT_PATH/Firmware/config.h - sleep 5 -done - -# Cleanup compiler flags are set to Prusa specific needs for the rambo board. -#if [ $OSTYPE == "msys" ]; then -# echo " " -# echo "Restore Windows platform.txt" -# echo " " -# cp -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE -#fi - -# Switch to hex path and list build files -cd $SCRIPT_PATH -cd .. -echo "$(tput setaf 2) " -echo " " -echo "Build done, please use Slic3rPE > 1.41.0 to upload the firmware" -echo "more information how to flash firmware https://www.prusa3d.com/drivers/ $(tput sgr 0)" -#### End building +cd $SCRIPT_PATH/lang +./lang-build.sh || exit 10 +./fw-build.sh || exit 11 From 4ab4e4da4c55317988e674130420f8eccadde0d4 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Sat, 16 Feb 2019 06:07:31 +0100 Subject: [PATCH 04/10] Updated README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index af5f8264b..0734ff86e 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Now your Ubuntu subsystem is ready to use the automatic `build.sh` script and co #### Compile Prusa-firmware with Ubuntu Linux subsystem installed - open Ubuntu bash - change to your source code folder (case sensitive) -- run `./build.sh` +- run `./PF-build.sh` - follow the instructions ### Steps for Git-bash under Windows 10 64-bit: @@ -61,7 +61,7 @@ Now your Ubuntu subsystem is ready to use the automatic `build.sh` script and co #### Compile Prusa-firmware with Git-bash installed - open Git-bash - change to your source code folder -- run `bash build.sh` +- run `bash PF-build.sh` - follow the instructions From 3726936b41b667867cfd629c4240f9f71fc7fabd Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Sat, 16 Feb 2019 08:04:45 +0100 Subject: [PATCH 05/10] Added arguments to run PF-build.sh without user input maybe an otion to use travis --- PF-build.sh | 55 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/PF-build.sh b/PF-build.sh index 97d9d1e26..1875c689a 100644 --- a/PF-build.sh +++ b/PF-build.sh @@ -71,7 +71,11 @@ # 15 Feb 2019, 3d-gussner, Fixed selction GOLD/UNKNOWN DEV_STATUS for ALL variants builds, so you have to choose only once # 15 Feb 2019, 3d-gussner, Added some colored output # 15 Feb 2019, 3d-gussner, troubleshooting and minor fixes - +# 16 Feb 2019, 3d-gussner, Script can be run using arguments +# $1 = variant, example "1_75mm_MK3-EINSy10a-E3Dv6full.h" at this moment it is not possible to use ALL +# $2 = multi language OR english only [ALL/EN_ONLY] +# $3 = development status [GOLD/RC/BETA/ALPHA/DEVEL/DEBUG] +# If one argument is wrong a list of valid one will be shown ###Check if OSTYPE is supported @@ -203,7 +207,14 @@ if [ -z "$1" ] ; then esac done else - VARIANT=$1 + if [ -f "$SCRIPT_PATH/Firmware/variants/$1" ] ; then + VARIANTS=$1 + else + echo "$(tput setaf 1)$1 could not be found in Firmware/variants please choose a valid one$(tput setaf 2)" + ls -1 $SCRIPT_PATH/Firmware/variants/*.h | xargs -n1 basename + echo "$(tput sgr0)" + exit + fi fi #Second argument defines if it is an english only version. Known values EN_ONLY / ALL @@ -232,7 +243,23 @@ if [ -z "$2" ] ; then esac done else - LANGUAGES=$2 + if [[ "$2" == "ALL" || "$2" == "EN_ONLY" ]] ; then + LANGUAGES=$2 + else + echo "$(tput setaf 1)Language agrument is wrong!$(tput sgr0)" + echo "Only $(tput setaf 2)'ALL'$(tput sgr0) or $(tput setaf 2)'EN_ONLY'$(tput sgr0) are allowed as 2nd argument!" + exit + fi +fi +#Check if DEV_STATUS is selected via argument 3 +if [ ! -z "$3" ] ; then + if [[ "$3" == "GOLD" || "$3" == "RC" || "$3" == "BETA" || "$3" == "ALPHA" || "$3" == "DEVEL" || "$3" == "DEBUG" ]] ; then + DEV_STATUS_SELECTED=$3 + else + echo "$(tput setaf 1)Development argument is wrong!$(tput sgr0)" + echo "Only $(tput setaf 2)'GOLD', 'RC', 'BETA', 'ALPHA', 'DEVEL' or 'DEBUG'$(tput sgr0) are allowed as 3rd argument!$(tput sgr0)" + exit + fi fi #Set BUILD_ENV_PATH @@ -307,20 +334,20 @@ do #Check if exacly the same hexfile already exsits if [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex" && "$LANGUAGES" == "ALL" ]]; then echo "" - ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex + ls -1 $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.hex | xargs -n1 basename echo "$(tput setaf 6)This hex file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." + read -t 10 -p "Press Enter to continue..." elif [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex" && "$LANGUAGES" == "EN_ONLY" ]]; then echo "" - ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex + ls -1 $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT-EN_ONLY.hex | xargs -n1 basename echo "$(tput setaf 6)This hex file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." + read -t 10 -p "Press Enter to continue..." fi if [[ -f "$SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip" && "$LANGUAGES" == "ALL" ]]; then echo "" - ls $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip + ls -1 $SCRIPT_PATH/../$OUTPUT_FOLDER/FW$FW-Build$BUILD-$VARIANT.zip | xargs -n1 basename echo "$(tput setaf 6)This zip file to be comiled already exsits! To cancle this process press CRTL+C and rename existing hex file.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." + read -t 10 -p "Press Enter to continue..." fi #List some useful data @@ -340,7 +367,7 @@ do cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 11 else echo "$(tput setaf 6)Configuration_prusa.h already exist it will be overwritten in 10 seconds by the chosen variant.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." + read -t 10 -p "Press Enter to continue..." cp -f $SCRIPT_PATH/Firmware/variants/$VARIANT.h $SCRIPT_PATH/Firmware/Configuration_prusa.h || exit 11 fi @@ -370,7 +397,7 @@ do echo "Compiler flags not found, adding flags" if [ ! -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck ]; then echo "making a backup" - ls $BUILD_ENV_PATH/portable/packages/rambo/hardware/avr/1.0.1/ + ls -1 $BUILD_ENV_PATH/portable/packages/rambo/hardware/avr/1.0.1/ cp -f $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE.bck fi echo $COMP_FLAGS >> $BUILD_ENV_PATH/portable/packages/$RAMBO_PLATFORM_FILE @@ -388,7 +415,7 @@ do export BUILDER=$ARDUINO/arduino-builder echo - #read -t 5 -p "Press any key..." + #read -t 5 -p "Press Enter..." echo if [ $OSTYPE == "msys" ]; then @@ -421,7 +448,7 @@ do if [ -f "lang_en.tmp" ]; then echo "" echo "$(tput setaf 6)Previous lang build files already exist these will be cleaned up in 10 seconds.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." + read -t 10 -p "Press Enter to continue..." echo "$(tput setaf 3)" ./lang-clean.sh echo "$(tput sgr 0)" @@ -429,7 +456,7 @@ do if [ -f "progmem.out" ]; then echo "" echo "$(tput setaf 6)Previous firmware build files already exist these will be cleaned up in 10 seconds.$(tput sgr 0)" - read -t 10 -p "Press any key to continue..." + read -t 10 -p "Press Enter to continue..." echo "$(tput setaf 3)" ./fw-clean.sh echo "$(tput sgr 0)" From ce12e022e2888d998b78ea2547efebee9218e555 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Sat, 16 Feb 2019 23:02:23 +0100 Subject: [PATCH 06/10] Changes to PF-build.sh --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0734ff86e..5f560fc0a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ If you wish to flash from Arduino, follow step [2.c](#2c) from Windows build fir The script downloads Arduino with our modifications and Rambo board support installed, unpacks it into folder PF-build-env-\ on the same level, as your Prusa-Firmware folder is located, builds firmware for MK3 using that Arduino in Prusa-Firmware-build folder on the same level as Prusa-Firmware, runs secondary language support scripts. Firmware with secondary language support is generated in lang subfolder. Use firmware.hex for MK3 variant. Use firmware_\.hex for other printers. Don't forget to follow step [2.b](#2b) first for non-MK3 printers. ## Windows -### If you want to use the automated `build.sh` you gonna need to install on you Windows a Linux subsystem or Git-bash +### If you want to use the automated `PF-build.sh` you gonna need to install on you Windows a Linux subsystem or Git-bash ### Steps for Linux subsystem und Windows 10 64-bit: - follow the Microsoft guide https://docs.microsoft.com/en-us/windows/wsl/install-win10 @@ -34,7 +34,7 @@ The script downloads Arduino with our modifications and Rambo board support inst use `CRTL-X` to close nano and confirm to write the new entries - restart Ubuntu bash -Now your Ubuntu subsystem is ready to use the automatic `build.sh` script and compile your firmware correctly +Now your Ubuntu subsystem is ready to use the automatic `PF-build.sh` script and compile your firmware correctly #### Some Tips for Ubuntu - Linux is case sensetive so please don't forget to use capital letters where needed, like changing to a directory From a4cf31b104de1dea83b25a844cdc9bcc03f1a777 Mon Sep 17 00:00:00 2001 From: mkbel <35807926+mkbel@users.noreply.github.com> Date: Tue, 19 Feb 2019 23:57:24 +0100 Subject: [PATCH 07/10] Update README.md Reorder sections, update table of content, add notes and issue tracker link for Windows Linux subsystem and Git-bash builds. --- README.md | 109 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 57 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 5f560fc0a..798df4fa6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,10 @@ * [Linux build](#linux) - * [Windows build](#windows) + * Windows build + * [Using Arduino](#using-arduino) + * [Using Linux subsystem](#using-linux-subsystem-under-windows-10-64-bit) + * [Using Git-bash](#using-git-bash-under-windows-10-64-bit) * [Automated tests](#3-automated-tests) * [Documentation](#4-documentation) @@ -16,56 +19,9 @@ If you wish to flash from Arduino, follow step [2.c](#2c) from Windows build fir The script downloads Arduino with our modifications and Rambo board support installed, unpacks it into folder PF-build-env-\ on the same level, as your Prusa-Firmware folder is located, builds firmware for MK3 using that Arduino in Prusa-Firmware-build folder on the same level as Prusa-Firmware, runs secondary language support scripts. Firmware with secondary language support is generated in lang subfolder. Use firmware.hex for MK3 variant. Use firmware_\.hex for other printers. Don't forget to follow step [2.b](#2b) first for non-MK3 printers. ## Windows -### If you want to use the automated `PF-build.sh` you gonna need to install on you Windows a Linux subsystem or Git-bash - -### Steps for Linux subsystem und Windows 10 64-bit: -- follow the Microsoft guide https://docs.microsoft.com/en-us/windows/wsl/install-win10 - You can also use the 'prepare_winbuild.ps1' powershell script with Administrator rights -- Tested versions are at this moment - - Ubuntu other may different - - After the installation and reboot please open your Ubuntu bash and do following steps - - run command `apt-get update` - - to install zip run `apt-get install zip` - - add few lines at the top of `~/.bashrc` by running `sudo nano ~/.bashrc` - - export OS="Linux" - export JAVA_TOOL_OPTIONS="-Djava.net.preferIPv4Stack=true" - export GPG_TTY=$(tty) - - use `CRTL-X` to close nano and confirm to write the new entries - - restart Ubuntu bash -Now your Ubuntu subsystem is ready to use the automatic `PF-build.sh` script and compile your firmware correctly - -#### Some Tips for Ubuntu -- Linux is case sensetive so please don't forget to use capital letters where needed, like changing to a directory -- To change the path to your Prusa-Firmware location you downloaded and unzipped - - Example: You files are under `C:\Users\\Downloads\Prusa-Firmware-MK3` - - use under Ubuntu the following command `cd /mnt/c/Users//Downloads/Prusa-Firmware-MK3` - to change to the right folder - -#### Compile Prusa-firmware with Ubuntu Linux subsystem installed -- open Ubuntu bash -- change to your source code folder (case sensitive) -- run `./PF-build.sh` -- follow the instructions - -### Steps for Git-bash under Windows 10 64-bit: -- Download and install the 64bit Git version https://git-scm.com/download/win -- Also follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 -- Download and install 7z-zip from its official website https://www.7-zip.org/ - By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 -- Run `Git-Bash` under Administrator privilege -- navigate to the directory /c/Program Files/Git/mingw64/bin -- run `ln -s /c/Program Files/7-Zip/7z.exe zip.exe` - -#### Compile Prusa-firmware with Git-bash installed -- open Git-bash -- change to your source code folder -- run `bash PF-build.sh` -- follow the instructions - - -### 1. Development environment preparation +### Using Arduino +note: Multi language build is not supported. +#### 1. Development environment preparation a. install `"Arduino Software IDE"` for your preferred operating system `https://www.arduino.cc -> Software->Downloads` @@ -97,7 +53,7 @@ add "-Wl,-u,vfprintf -lprintf_flt -lm" to "compiler.c.elf.flags=" before existin example: `"compiler.c.elf.flags=-w -Os -Wl,-u,vfprintf -lprintf_flt -lm -Wl,--gc-sections"` -### 2. Source code compilation +#### 2. Source code compilation a. place the source codes corresponding to your printer model obtained from the repository into the selected directory on your disk `https://github.com/prusa3d/Prusa-Firmware/` @@ -125,6 +81,55 @@ or you can also save the output code to the file (in so called `HEX`-format) `"F and then upload it to the printer using the program `"FirmwareUpdater"` _note: this file is created in the directory `"Firmware/"`_ +### Using Linux subsystem under Windows 10 64-bit +_notes: Script and instructions contributed by 3d-gussner. Use at your own risk. Script downloads Arduino executables outside of Prusa control. Report problems [there.](https://github.com/3d-gussner/Prusa-Firmware/issues) Multi language build is supported._ +- follow the Microsoft guide https://docs.microsoft.com/en-us/windows/wsl/install-win10 + You can also use the 'prepare_winbuild.ps1' powershell script with Administrator rights +- Tested versions are at this moment + - Ubuntu other may different + - After the installation and reboot please open your Ubuntu bash and do following steps + - run command `apt-get update` + - to install zip run `apt-get install zip` + - add few lines at the top of `~/.bashrc` by running `sudo nano ~/.bashrc` + + export OS="Linux" + export JAVA_TOOL_OPTIONS="-Djava.net.preferIPv4Stack=true" + export GPG_TTY=$(tty) + + use `CRTL-X` to close nano and confirm to write the new entries + - restart Ubuntu bash +Now your Ubuntu subsystem is ready to use the automatic `PF-build.sh` script and compile your firmware correctly + +#### Some Tips for Ubuntu +- Linux is case sensetive so please don't forget to use capital letters where needed, like changing to a directory +- To change the path to your Prusa-Firmware location you downloaded and unzipped + - Example: You files are under `C:\Users\\Downloads\Prusa-Firmware-MK3` + - use under Ubuntu the following command `cd /mnt/c/Users//Downloads/Prusa-Firmware-MK3` + to change to the right folder + +#### Compile Prusa-firmware with Ubuntu Linux subsystem installed +- open Ubuntu bash +- change to your source code folder (case sensitive) +- run `./PF-build.sh` +- follow the instructions + +### Using Git-bash under Windows 10 64-bit +_notes: Script and instructions contributed by 3d-gussner. Use at your own risk. Script downloads Arduino executables outside of Prusa control. Report problems [there.](https://github.com/3d-gussner/Prusa-Firmware/issues) Multi language build is supported._ +- Download and install the 64bit Git version https://git-scm.com/download/win +- Also follow these instructions https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058 +- Download and install 7z-zip from its official website https://www.7-zip.org/ + By default, it is installed under the directory /c/Program Files/7-Zip in Windows 10 +- Run `Git-Bash` under Administrator privilege +- navigate to the directory /c/Program Files/Git/mingw64/bin +- run `ln -s /c/Program Files/7-Zip/7z.exe zip.exe` + +#### Compile Prusa-firmware with Git-bash installed +- open Git-bash +- change to your source code folder +- run `bash PF-build.sh` +- follow the instructions + + # 3. Automated tests ## Prerequisites c++11 compiler e.g. g++ 6.3.1 From 1e729048dc9ebb921c1f1b6970ac622a17af6fbd Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 21 Feb 2019 00:14:49 +0100 Subject: [PATCH 08/10] cmdqueue_reset fix --- Firmware/cmdqueue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/cmdqueue.cpp b/Firmware/cmdqueue.cpp index f1cd48f88..2f892c9cf 100644 --- a/Firmware/cmdqueue.cpp +++ b/Firmware/cmdqueue.cpp @@ -94,7 +94,7 @@ void cmdqueue_reset() bufindr = 0; bufindw = 0; buflen = 0; - cmdbuffer_front_already_processed = false; + cmdbuffer_front_already_processed = true; } // How long a string could be pushed to the front of the command queue? From 323071f50a787722907494ac6e6b22ed51c46301 Mon Sep 17 00:00:00 2001 From: MRprusa3d Date: Thu, 21 Feb 2019 04:45:44 +0100 Subject: [PATCH 09/10] preHeat @ filament management another funcionality II --- Firmware/menu.cpp | 19 +--------- Firmware/mmu.cpp | 60 +++++++++++++++++++++++++------- Firmware/mmu.h | 2 ++ Firmware/ultralcd.cpp | 81 ++++++++++++++++++++++++++++++++----------- 4 files changed, 111 insertions(+), 51 deletions(-) diff --git a/Firmware/menu.cpp b/Firmware/menu.cpp index f6bc6055b..a3fb4d184 100644 --- a/Firmware/menu.cpp +++ b/Firmware/menu.cpp @@ -16,7 +16,7 @@ extern int32_t lcd_encoder; -#define MENU_DEPTH_MAX 4 +#define MENU_DEPTH_MAX 6 static menu_record_t menu_stack[MENU_DEPTH_MAX]; @@ -85,7 +85,6 @@ void menu_end(void) } } -//-// void menu_back(uint8_t nLevel) { menu_depth = ((menu_depth > nLevel) ? (menu_depth - nLevel) : 0); @@ -97,17 +96,6 @@ void menu_back(void) menu_back(1); } -/* -void menu_back(void) -{ - if (menu_depth > 0) - { - menu_depth--; - menu_goto(menu_stack[menu_depth].menu, menu_stack[menu_depth].position, true, true); - } -} -*/ - static void menu_back_no_reset(void) { if (menu_depth > 0) @@ -394,8 +382,3 @@ template uint8_t menu_item_edit_P(const char* str, int16_t *pval, int1 template uint8_t menu_item_edit_P(const char* str, uint8_t *pval, int16_t min_val, int16_t max_val); #undef _menu_data - - - - - diff --git a/Firmware/mmu.cpp b/Firmware/mmu.cpp index 5e1e5471a..e18b0932d 100644 --- a/Firmware/mmu.cpp +++ b/Firmware/mmu.cpp @@ -1022,6 +1022,28 @@ void mmu_filament_ramming() } } +//-// +void extr_unload_() +{ +//if(bFilamentAction) +if(0) + { + bFilamentAction=false; + extr_unload(); + } +else { + eFilamentAction=e_FILAMENT_ACTION_mmuUnLoad; + bFilamentFirstRun=false; + if(target_temperature[0]>=EXTRUDE_MINTEMP) + { + bFilamentPreheatState=true; + mFilamentItem(target_temperature[0],target_temperature_bed); + } +// else menu_submenu(mFilamentMenu); + else mFilamentMenu(); + } +} + void extr_unload() { //unload just current filament for multimaterial printers #ifdef SNMM @@ -1030,11 +1052,8 @@ void extr_unload() uint8_t SilentMode = eeprom_read_byte((uint8_t*)EEPROM_SILENT); #endif -//-// if (degHotend0() > EXTRUDE_MINTEMP) -//if(current_temperature[0]>(target_temperature[0]*0.95)) -if(bFilamentAction) + if (degHotend0() > EXTRUDE_MINTEMP) { -bFilamentAction=false; #ifndef SNMM st_synchronize(); @@ -1108,13 +1127,7 @@ bFilamentAction=false; } else { - eFilamentAction=e_FILAMENT_ACTION_mmuUnLoad; - bFilamentFirstRun=false; - if(target_temperature[0]>=EXTRUDE_MINTEMP) { - bFilamentPreheatState=true; - mFilamentItem(target_temperature[0],target_temperature_bed); - } - else menu_submenu(mFilamentMenu); + show_preheat_nozzle_warning(); } //lcd_return_to_status(); } @@ -1172,51 +1185,71 @@ void extr_adj_4() void mmu_load_to_nozzle_0() { +//-// + menu_back(); lcd_mmu_load_to_nozzle(0); } void mmu_load_to_nozzle_1() { +//-// + menu_back(); lcd_mmu_load_to_nozzle(1); } void mmu_load_to_nozzle_2() { +//-// + menu_back(); lcd_mmu_load_to_nozzle(2); } void mmu_load_to_nozzle_3() { +//-// + menu_back(); lcd_mmu_load_to_nozzle(3); } void mmu_load_to_nozzle_4() { +//-// + menu_back(); lcd_mmu_load_to_nozzle(4); } void mmu_eject_fil_0() { +//-// + menu_back(); mmu_eject_filament(0, true); } void mmu_eject_fil_1() { +//-// + menu_back(); mmu_eject_filament(1, true); } void mmu_eject_fil_2() { +//-// + menu_back(); mmu_eject_filament(2, true); } void mmu_eject_fil_3() { +//-// + menu_back(); mmu_eject_filament(3, true); } void mmu_eject_fil_4() { +//-// + menu_back(); mmu_eject_filament(4, true); } @@ -1344,7 +1377,7 @@ void mmu_show_warning() void lcd_mmu_load_to_nozzle(uint8_t filament_nr) { //-// -bFilamentAction=false; +bFilamentAction=false; // NOT in "mmu_load_to_nozzle_menu()" if (degHotend0() > EXTRUDE_MINTEMP) { tmp_extruder = filament_nr; @@ -1377,7 +1410,8 @@ bFilamentAction=false; void mmu_eject_filament(uint8_t filament, bool recover) { //-// -bFilamentAction=false; +bFilamentAction=false; // NOT in "mmu_fil_eject_menu()" +return; if (filament < 5) { diff --git a/Firmware/mmu.h b/Firmware/mmu.h index 71930ae7c..446c9aec0 100644 --- a/Firmware/mmu.h +++ b/Firmware/mmu.h @@ -101,6 +101,8 @@ extern int get_ext_nr(); extern void display_loading(); extern void extr_adj(int extruder); extern void extr_unload(); +//-// +extern void extr_unload_(); extern void extr_adj_0(); extern void extr_adj_1(); extern void extr_adj_2(); diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 93651434e..f6502cef9 100644 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2310,6 +2310,8 @@ bool bFilamentAction=false; static void mFilamentPrompt() { +uint8_t nLevel; + lcd_set_cursor(0,0); lcdui_print_temp(LCD_STR_THERMOMETER[0],(int)degHotend(0),(int)degTargetHotend(0)); lcd_set_cursor(0,2); @@ -2332,14 +2334,13 @@ switch(eFilamentAction) } if(lcd_clicked()) { -//./ menu_back(); -//./ menu_back(); -menu_back(2); + nLevel=2; if(!bFilamentPreheatState) { - menu_back(); -//-// setTargetHotend0(0.0); + nLevel++; +// setTargetHotend0(0.0); // uncoment if return to base state is required } + menu_back(nLevel); switch(eFilamentAction) { case e_FILAMENT_ACTION_Load: @@ -2350,20 +2351,27 @@ menu_back(2); case e_FILAMENT_ACTION_unLoad: enquecommand_P(PSTR("M702")); // unload filament break; +/* case e_FILAMENT_ACTION_mmuLoad: - MYSERIAL.println("mFilamentPrompt - mmuLoad"); -bFilamentAction=true; +//./ MYSERIAL.println("mFilamentPrompt - mmuLoad"); + bFilamentAction=true; menu_submenu(mmu_load_to_nozzle_menu); break; +*/ +/* case e_FILAMENT_ACTION_mmuUnLoad: -bFilamentAction=true; +//./ MYSERIAL.println("mFilamentPrompt - mmuUnLoad"); + bFilamentAction=true; extr_unload(); break; +*/ +/* case e_FILAMENT_ACTION_mmuEject: MYSERIAL.println("mFilamentPrompt - mmuEject"); -bFilamentAction=true; - menu_submenu(mmu_fil_eject_menu); + bFilamentAction=true; +// menu_submenu(mmu_fil_eject_menu); break; +*/ } if(eFilamentAction==e_FILAMENT_ACTION_autoLoad) eFilamentAction=e_FILAMENT_ACTION_none; // i.e. non-autoLoad @@ -2373,6 +2381,8 @@ bFilamentAction=true; void mFilamentItem(uint16_t nTemp,uint16_t nTempBed) { static int nTargetOld,nTargetBedOld; +uint8_t nLevel; +static bool bBeep=false; //if(bPreheatState) // not necessary nTargetOld=target_temperature[0]; @@ -2416,12 +2426,47 @@ if(lcd_clicked()) if(eFilamentAction==e_FILAMENT_ACTION_autoLoad) eFilamentAction=e_FILAMENT_ACTION_none; // i.e. non-autoLoad } -//./else if(!isHeatingHotend0()) -else if(current_temperature[0]>(target_temperature[0]*0.95)) +else { + if(current_temperature[0]>(target_temperature[0]*0.95)) { - menu_submenu(mFilamentPrompt); - Sound_MakeSound(e_SOUND_TYPE_StandardPrompt); + switch(eFilamentAction) + { + case e_FILAMENT_ACTION_Load: + case e_FILAMENT_ACTION_autoLoad: + case e_FILAMENT_ACTION_unLoad: + menu_submenu(mFilamentPrompt); + break; + case e_FILAMENT_ACTION_mmuLoad: + nLevel=1; + if(!bFilamentPreheatState) + nLevel++; + bFilamentAction=true; + menu_back(nLevel); + menu_submenu(mmu_load_to_nozzle_menu); + break; + case e_FILAMENT_ACTION_mmuUnLoad: + nLevel=1; + if(!bFilamentPreheatState) + nLevel++; + bFilamentAction=true; + menu_back(nLevel); + extr_unload(); + break; + case e_FILAMENT_ACTION_mmuEject: + nLevel=1; + if(!bFilamentPreheatState) + nLevel++; + bFilamentAction=true; + menu_back(nLevel); + menu_submenu(mmu_fil_eject_menu); + break; + } + if(bBeep) + Sound_MakeSound(e_SOUND_TYPE_StandardPrompt); + bBeep=false; } + else bBeep=true; + } } static void mFilamentItem_PLA() @@ -5643,10 +5688,8 @@ static void fil_load_menu() static void mmu_load_to_nozzle_menu() { //-//if (degHotend0() > EXTRUDE_MINTEMP) -//if(current_temperature[0]>(target_temperature[0]*0.95)) if(bFilamentAction) { -//../bFilamentAction=false; MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_FUNCTION_P(_i("Load filament 1"), mmu_load_to_nozzle_0); @@ -5671,10 +5714,8 @@ else { static void mmu_fil_eject_menu() { //-//if (degHotend0() > EXTRUDE_MINTEMP) -//if(current_temperature[0]>(target_temperature[0]*0.95)) if(bFilamentAction) { -//../bFilamentAction=false; MENU_BEGIN(); MENU_ITEM_BACK_P(_T(MSG_MAIN)); MENU_ITEM_FUNCTION_P(_i("Eject filament 1"), mmu_eject_fil_0); @@ -5685,7 +5726,6 @@ if(bFilamentAction) MENU_END(); } else { - MYSERIAL.println(" eject - else"); eFilamentAction=e_FILAMENT_ACTION_mmuEject; bFilamentFirstRun=false; if(target_temperature[0]>=EXTRUDE_MINTEMP) @@ -6166,7 +6206,8 @@ static void lcd_main_menu() MENU_ITEM_SUBMENU_P(_T(MSG_LOAD_FILAMENT), fil_load_menu); MENU_ITEM_SUBMENU_P(_i("Load to nozzle"), mmu_load_to_nozzle_menu); //-// MENU_ITEM_FUNCTION_P(_T(MSG_UNLOAD_FILAMENT), extr_unload); - MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), extr_unload); +//bFilamentFirstRun=true; + MENU_ITEM_SUBMENU_P(_T(MSG_UNLOAD_FILAMENT), extr_unload_); MENU_ITEM_SUBMENU_P(_i("Eject filament"), mmu_fil_eject_menu); } else From 6ad5c07e6d4dd438d4b43a9d51bb976a97caeb4a Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Thu, 21 Feb 2019 14:28:05 +0100 Subject: [PATCH 10/10] comments --- Firmware/cmdqueue.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Firmware/cmdqueue.cpp b/Firmware/cmdqueue.cpp index 2f892c9cf..c7035ba13 100644 --- a/Firmware/cmdqueue.cpp +++ b/Firmware/cmdqueue.cpp @@ -94,7 +94,11 @@ void cmdqueue_reset() bufindr = 0; bufindw = 0; buflen = 0; - cmdbuffer_front_already_processed = true; + + //commands are removed from command queue after process_command() function is finished + //reseting command queue and enqueing new commands during some (usually long running) command processing would cause that new commands are immediately removed from queue (or damaged) + //this will ensure that all new commands which are enqueued after cmdqueue reset, will be always executed + cmdbuffer_front_already_processed = true; } // How long a string could be pushed to the front of the command queue?