| 
					
				 | 
			
			
				@@ -10,7 +10,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # 3. Install latest updates with 'sudo apt-get upgrade' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Version: 1.0.0-Build_11 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Version: 1.0.0-Build_13 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Change log: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # 11 Feb 2021, 3d-gussner, Inital 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # 11 Feb 2021, 3d-gussner, Optional flags to check for updates 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -23,6 +23,27 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # 18 Jun 2021, 3d-gussner, Check for updates is default. Fix update if internet connection is lost. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # 21 Jun 2021, 3d-gussner, Change board_flash argument to 'y' and firmware_version to 'f' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Failures 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+failures() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+case "$1" in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    0) echo "$(tput setaf 2)MK404-build.sh finished with success$(tput sgr0)" ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    2) echo "$(tput setaf 1)Unsupported OS: Linux $(uname -m)" ; echo "Please refer to the notes of MK404-build.sh$(tput sgr0)" ; exit 2 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    3) echo "$(tput setaf 1)This script doesn't support your Operating system!"; echo "Please use Linux 64-bit"; echo "Read the notes of MK404-build.sh$(tput sgr0)" ; exit 2 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    4) echo "$(tput setaf 1)Some packages are missing please install these!$(tput sgr0)" ; exit 4 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    5) echo "$(tput setaf 1)Wrong printer chosen.$(tput sgr0) Following Printers are supported: MK25, MK25S, MK3 and MK3S" ; exit 5 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    6) echo "$(tput setaf 1)Unsupported board flash size chosen.$(tput sgr0) Only '256', '384', '512', '1024' and '32M' are allowed." ; exit 6 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    7) echo "$(tput setaf 1)Unsupported board mem size chosen.$(tput sgr0) Only '8', '16', '32' and '64' are allowed." ; exit 7 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    8) echo "$(tput setaf 1)No firmware version file selected!$(tput sgr0)" ; echo "Add argument -f with path and hex filename to start MK404" ; exit 8 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    9) echo "$(tput setaf 1)Tried to determine MK404 printer from hex file, but failed!$(tput sgr0)" ; "Add argument -p with 'MK25', 'MK25S', 'MK3' or 'MK3S' to start MK404" ; exit 9 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    10) echo "$(tput setaf 1)Missing printer$(tput sgr0)" ; exit 10 ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+esac 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Failures 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Check options 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+##check_options() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+##{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 while getopts c:f:g:m:n:p:u:x:y:?h flag 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         case "${flag}" in 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -53,7 +74,7 @@ while getopts c:f:g:m:n:p:u:x:y:?h flag 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # '?' 'h' argument usage and help 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if [ "$help_flag" == "1" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "***************************************" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-echo "* MK404-build.sh Version: 1.0.0-Build_11 *" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+echo "* MK404-build.sh Version: 1.0.0-Build_13 *" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "***************************************" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "Arguments:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "$(tput setaf 2)-c$(tput sgr0) Check for update" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -78,19 +99,190 @@ echo "  -m : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' y 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "  -n : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "  -p : '$(tput setaf 2)MK25$(tput sgr0)', '$(tput setaf 2)MK25S$(tput sgr0)', '$(tput setaf 2)MK3$(tput sgr0)' or '$(tput setaf 2)MK3S$(tput sgr0)'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "  -u : '$(tput setaf 2)0$(tput sgr0)' no, '$(tput setaf 2)1$(tput sgr0)' yes '" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-echo "  -x : '$(tput setaf 2)8$(tput sgr0)' or '$(tput setaf 2)64$(tput sgr0)' Kb." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+echo "  -x : '$(tput setaf 2)8$(tput sgr0)',$(tput setaf 2)16$(tput sgr0)',$(tput setaf 2)32$(tput sgr0)' or '$(tput setaf 2)64$(tput sgr0)' Kb." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "  -y : '$(tput setaf 2)256$(tput sgr0)','$(tput setaf 2)384$(tput sgr0)','$(tput setaf 2)512$(tput sgr0)','$(tput setaf 2)1024$(tput sgr0)''$(tput setaf 2)32M$(tput sgr0)'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "Example:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "  $(tput setaf 2)./MK404-build.sh -f 1$(tput sgr0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "  Will force an update and rebuild the MK404 SIM" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-echo "  $(tput setaf 2)./MK404-build.sh -m 1 -g 1 -v ../../../../Prusa-Firmware/PF-build-hex/FW3100-Build4481/BOAD_EINSY_1_0a/FW3100-Build4481-1_75mm_MK3S-EINSy10a-E3Dv6full.hex$(tput sgr0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+echo "  $(tput setaf 2)./MK404-build.sh -m 1 -g 1 -f ../../../../Prusa-Firmware/PF-build-hex/FW3100-Build4481/BOARD_EINSY_1_0a/FW3100-Build4481-1_75mm_MK3S-EINSy10a-E3Dv6full.hex$(tput sgr0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "  Will start MK404 with Prusa_MK3S and Prusa-Firmware 3.10.0-Build4481" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 exit 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#### Start check if OSTYPE is supported 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#Check MK404 agruments 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#Set Check for updates as default 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+check_flag=1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#Start: Check mk404_printer_flag 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [ ! -z $mk404_printer_flag ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [[ "$mk404_printer_flag" == "MK3" || "$mk404_printer_flag" == "MK3S" || "$mk404_printer_flag" == "MK25" || "$mk404_printer_flag" == "MK25S" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MK404_PRINTER_TEMP=$mk404_printer_flag 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        failures 5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#End: Check mk404_printer_flag 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#Start: Check if Build is selected with argument '-f' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [ ! -z "$board_flash_flag" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ "$board_flash_flag" == "256" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BOARD_FLASH="0x3FFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "Board flash size :   $board_flash_flag Kb, $BOARD_FLASH (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    elif [ "$board_flash_flag" == "384" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BOARD_FLASH="0x5FFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "Board flash size :   $board_flash_flag Kb, $BOARD_FLASH (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    elif [ "$board_flash_flag" == "512" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BOARD_FLASH="0x7FFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "Board flash size :   $board_flash_flag Kb, $BOARD_FLASH (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    elif [ "$board_flash_flag" == "1024" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BOARD_FLASH="0xFFFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "Board flash size :   $board_flash_flag Kb, $BOARD_FLASH (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    elif [[ "$board_flash_flag" == "32M" || "$board_flash_flag" == "32768" ]] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BOARD_FLASH="0x1FFFFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "Board flash size :    32 Mb, $BOARD_FLASH (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        failures 6 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#End: Check if Build is selected with argument '-f' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#Start: Check if Build is selected with argument '-x' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [ ! -z "$board_mem_flag" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ "$board_mem_flag" == "8" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BOARD_MEM="0x21FF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "Board mem size   :     $board_mem_flag Kb, $BOARD_MEM (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    elif [ "$board_mem_flag" == "16" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BOARD_MEM="0x3DFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "Board mem size   :    $board_mem_flag Kb, $BOARD_MEM (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    elif [ "$board_mem_flag" == "32" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BOARD_MEM="0x7DFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "Board mem size   :    $board_mem_flag Kb, $BOARD_MEM (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    elif [ "$board_mem_flag" == "64" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        BOARD_MEM="0xFFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "Board mem size   :    $board_mem_flag Kb, $BOARD_MEM (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        failures 7 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#End: Check if Build is selected with argument '-x' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#Start: Check if new build is selected 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [ "$new_build_flag" == "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    check_flag=1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    update_flag=1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [ "$update_flag" == "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    check_flag=1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#End: Check if new build is selected 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Prepare run MK404 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#Check MK404_Printer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [ ! -z $firmware_version_flag ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK3') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ ! -z $MK404_PRINTER_TEMP ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MK404_PRINTER=MK3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK3S') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ ! -z $MK404_PRINTER_TEMP ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MK404_PRINTER=MK3S 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK25') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ ! -z $MK404_PRINTER_TEMP ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MK404_PRINTER=MK25 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK25S') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ ! -z $MK404_PRINTER_TEMP ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MK404_PRINTER=MK25S 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    failures 8 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [ -z "$MK404_PRINTER" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    failures 9 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [ ! -z $mk404_printer_flag ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ "$mk404_printer_flag" != "$MK404_PRINTER" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "$(tput setaf 3)You defined a different printer type than the firmware!" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "This can cause unexpected issues.$(tput sgr 0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        PS3="Select $(tput setaf 2)printer$(tput sgr 0) you want to use." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        select which in "$(tput setaf 2)$MK404_PRINTER$(tput sgr 0)" "$mk404_printer_flag"; do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case $which in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $MK404_PRINTER) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    echo "Set $MK404_PRINTER as printer" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                $mk404_printer_flag) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    echo "Set $(tput setaf 3)$mk404_printer_flag$(tput sgr 0) as printer" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    echo "$(tput setaf 3)This firmware file isn't correct for this printer!!!$(tput sgr 0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    echo  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    MK404_PRINTER=$mk404_printer_flag 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    read -p "Press Enter to continue." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                *) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            esac 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        done 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [ -z $MK404_PRINTER ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    failures 10 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [[ "$MK404_PRINTER" == "MK25" || "$MK404_PRINTER" == "MK25S" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MK404_PRINTER="${MK404_PRINTER}_mR13" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ "$mk404_flag" == "2" ]; then # Check if MMU2 is selected only for MK3/S 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MK404_PRINTER="${MK404_PRINTER}MMU2" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Run MK404 with 'debugcore' and/or 'bootloader-file' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [[ ! -z $MK404_DEBUG && "$MK404_DEBUG" == "atmega404" || ! -z $BOARD_MEM && "$BOARD_MEM" == "0xFFFF" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MK404_options="--debugcore" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [[ ! -z $MK404_DEBUG && "$MK404_DEBUG" == "atmega404_no_bootloader"  || ! -z $BOARD_FLASH && "$BOARD_FLASH" != "0x3FFFF" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        MK404_options='--debugcore --bootloader-file ""' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Run MK404 with graphics 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ ! -z "$mk404_graphics_flag" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if [ ! -z "$MK404_options" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MK404_options="${MK404_options} -g " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MK404_options=" -g " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if [[ "$mk404_graphics_flag" == "1" || "$mk404_graphics_flag" == "lite" || "$mk404_graphics_flag" == "3" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MK404_options="${MK404_options}lite" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        elif [[ "$mk404_graphics_flag" == "2" || "$mk404_graphics_flag" == "fancy" || "$mk404_graphics_flag" == "4" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MK404_options="${MK404_options}fancy" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            echo "$(tput setaf 1)Unsupported MK404 graphics option $mk404_graphics_flag$(tput sgr 0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if [[ "$mk404_graphics_flag" == "3" || "$mk404_graphics_flag" == "4" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MK404_options="${MK404_options} --colour-extrusion --extrusion Quad_HR" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            MK404_options="${MK404_options} --extrusion Line" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if [ ! -z $firmware_version_flag ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MK404_firmware_file=" -f $firmware_version_flag" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#End: Check MK404 agruments 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+##} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Check for options/flags 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Check if OSTYPE is supported 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+check_OS() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 OS_FOUND=$( command -v uname) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 case $( "${OS_FOUND}" | tr '[:upper:]' '[:lower:]') in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   linux*) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -102,27 +294,25 @@ case $( "${OS_FOUND}" | tr '[:upper:]' '[:lower:]') in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 esac 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Linux 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if [ $TARGET_OS == "linux" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if [ $(uname -m) == "x86_64" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		echo "$(tput setaf 2)Linux 64-bit found$(tput sgr0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Processor="64" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	#elif [[ $(uname -m) == "i386" || $(uname -m) == "i686" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	#	echo "$(tput setaf 2)Linux 32-bit found$(tput sgr0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	#	Processor="32" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		echo "$(tput setaf 1)Unsupported OS: Linux $(uname -m)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		echo "Please refer to the notes of build.sh$(tput sgr0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		exit 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ $(uname -m) == "x86_64" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo "$(tput setaf 2)Linux 64-bit found$(tput sgr0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Processor="64" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    #elif [[ $(uname -m) == "i386" || $(uname -m) == "i686" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    #    echo "$(tput setaf 2)Linux 32-bit found$(tput sgr0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    #    Processor="32" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        failures 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	echo "$(tput setaf 1)This script doesn't support your Operating system!" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	echo "Please use Linux 64-bit" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	echo "Read the notes of build.sh$(tput sgr0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	exit 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    failures 3  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 sleep 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#### End check if OSTYPE is supported 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Check if OSTYPE is supported 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#### Check MK404 dependencies 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Check MK404 dependencies 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+check_packages() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 packages=( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 "libelf-dev" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 "gcc-7" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -151,99 +341,49 @@ for check_package in ${packages[@]}; do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 done 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if [ "$not_installed" = "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    exit 3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    failures 4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#### End Check MK404 dependencies 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Check MK404 dependencies 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#### Set build environment  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Set build environment  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+set_build_env_variables() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 MK404_SCRIPT_PATH="$( cd "$(dirname "$0")" ; pwd -P )" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 MK404_URL="https://github.com/vintagepc/MK404.git" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 MK404_owner="vintagepc" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 MK404_project="MK404" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 MK404_PATH="$MK404_SCRIPT_PATH/../MK404/master" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 MK404_BUILD_PATH="$MK404_PATH/build" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Set build environment 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# List few useful data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: List few useful data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+output_useful_data() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "Script path :" $MK404_SCRIPT_PATH 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "OS          :" $TARGET_OS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 echo "MK404 path  :" $MK404_PATH 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: List few useful data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Clone MK404 if needed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Clone MK404 if needed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+get_MK404() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if [ ! -d $MK404_PATH ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     #release_url=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/$MK404_owner/$MK404_project/releases/latest) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     #release_tag=$(basename $release_url) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     #git clone -b $release_tag -- https://github.com/$MK404_owner/$MK404_project.git $MK404_PATH 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     git clone $MK404_URL $MK404_PATH 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Clone MK404 if needed 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-cd $MK404_PATH 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#Check MK404 agruments 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#Set Check for updates as default 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-check_flag=1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#Check mk404_printer_flag 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [ ! -z $mk404_printer_flag ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [[ "$mk404_printer_flag" == "MK3" || "$mk404_printer_flag" == "MK3S" || "$mk404_printer_flag" == "MK25" || "$mk404_printer_flag" == "MK25S" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MK404_PRINTER_TEMP=$mk404_printer_flag 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "Following Printers are supported: MK25, MK25S, MK3 and MK3S" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        exit 4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#Check if Build is selected with argument '-f' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [ ! -z "$board_flash_flag" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [ "$board_flash_flag" == "256" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BOARD_FLASH="0x3FFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "Board flash size :   $board_flash_flag Kb, $BOARD_FLASH (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    elif [ "$board_flash_flag" == "384" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BOARD_FLASH="0x5FFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "Board flash size :   $board_flash_flag Kb, $BOARD_FLASH (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    elif [ "$board_flash_flag" == "512" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BOARD_FLASH="0x7FFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "Board flash size :   $board_flash_flag Kb, $BOARD_FLASH (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    elif [ "$board_flash_flag" == "1024" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BOARD_FLASH="0xFFFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "Board flash size :   $board_flash_flag Kb, $BOARD_FLASH (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    elif [[ "$board_flash_flag" == "32M" || "$board_flash_flag" == "32768" ]] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BOARD_FLASH="0x1FFFFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "Board flash size :    32 Mb, $BOARD_FLASH (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "Unsupported board flash size chosen. Only '256', '384', '512', '1024' and '32M' are allowed." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        exit 5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#Check if Build is selected with argument '-x' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [ ! -z "$board_mem_flag" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [ "$board_mem_flag" == "8" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BOARD_MEM="0x21FF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "Board mem size   :     $board_mem_flag Kb, $BOARD_MEM (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    elif [ "$board_mem_flag" == "64" ] ; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        BOARD_MEM="0xFFFF" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "Board mem size   :    $board_mem_flag Kb, $BOARD_MEM (hex)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "Unsupported board mem size chosen. Only '8', '64' are allowed." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        exit 6 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [ "$new_build_flag" == "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    check_flag=1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    update_flag=1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [ "$update_flag" == "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    check_flag=1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#End Check MK404 agruments 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#Check for updates 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Check for updates 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+check_for_updates() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if [ "$check_flag" == "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if [ -d $MK404_BUILD_PATH ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         cd $MK404_BUILD_PATH 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -256,10 +396,14 @@ if [ "$check_flag" == "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     MK404_local_GIT_COMMIT_HASH=$(git log --pretty=format:"%H" -1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Get local Commit_Number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     MK404_local_GIT_COMMIT_NUMBER=$(git rev-list HEAD --count) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Get latest release 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MK404_release_url=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/$MK404_owner/$MK404_project/releases/latest) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MK404_release_tag=$(basename $MK404_release_url) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Get remote Commit_Hash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MK404_remote_GIT_COMMIT_HASH=$(git ls-remote --heads $(git config --get remote.origin.url) | grep "refs/heads/master" | cut -f 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    #MK404_remote_GIT_COMMIT_HASH=$(git ls-remote --heads $(git config --get remote.origin.url) | grep "refs/heads/master" | cut -f 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MK404_remote_GIT_COMMIT_HASH=$(git ls-remote | grep "refs/tags/$MK404_release_tag"  | cut -f 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Get remote Commit_Number 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MK404_remote_GIT_COMMIT_NUMBER=$(git rev-list origin/master --count) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    MK404_remote_GIT_COMMIT_NUMBER=$(git rev-list $MK404_release_tag --count) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Output 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     echo "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     echo "Current version         : $MK404_current_version" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -271,8 +415,9 @@ if [ "$check_flag" == "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         echo "$(tput setaf 2)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo "Current remote hash     : $MK404_remote_GIT_COMMIT_HASH" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo "Current remote commit nr: $MK404_remote_GIT_COMMIT_NUMBER" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    echo "Latest release tag      : $MK404_release_tag" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    echo "Latest release hash     : $MK404_remote_GIT_COMMIT_HASH" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    echo "Latest remote commit nr : $MK404_remote_GIT_COMMIT_NUMBER" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     echo "$(tput sgr 0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Check for updates 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -287,8 +432,12 @@ if [ "$check_flag" == "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Check for updates 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Fetch updates and force new build 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Fetch updates and force new build 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fetch_updates() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if [ "$update_flag" == "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if [ ! -z $MK404_remote_GIT_COMMIT_HASH ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if [ "$MK404_local_GIT_COMMIT_HASH" != "$MK404_remote_GIT_COMMIT_HASH" ]; then 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -296,19 +445,28 @@ if [ "$update_flag" == "1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             git fetch --all 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             read -t 10 -p "$(tput setaf 2)Updating MK404 !$(tput sgr 0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             echo "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            git reset --hard origin/master 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            git reset --hard $MK404_release_tag 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             read -t 10 -p "$(tput setaf 2)Compiling MK404 !$(tput sgr 0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             echo "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             new_build_flag=1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Fetch updates and force new build 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Prepare MK404 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Prepare MK404 build 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+prepare_MK404() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if [ ! -d $MK404_BUILD_PATH ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     mkdir -p $MK404_BUILD_PATH 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Prepare MK404 build 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Build MK404 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+build_MK404() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if [[ ! -f "$MK404_BUILD_PATH/Makefile" || "$new_build_flag" == "1" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Init and update submodules 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if [ -d $MK404_BUILD_PATH ]; then 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -335,112 +493,13 @@ if [[ ! -f "$MK404_BUILD_PATH/Prusa_MK3S_SDcard.bin" || "$new_build_flag" == "1" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cmake --build $MK404_BUILD_PATH --config Release --target Prusa_MK3SMMU2_SDcard.bin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     cmake --build $MK404_BUILD_PATH --config Release --target Prusa_MK3MMU2_SDcard.bin 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Build MK404 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Prepare run MK404 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#Check MK404_Printer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [ ! -z $firmware_version_flag ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK3') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [ ! -z $MK404_PRINTER_TEMP ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MK404_PRINTER=MK3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK3S') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [ ! -z $MK404_PRINTER_TEMP ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MK404_PRINTER=MK3S 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK25') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [ ! -z $MK404_PRINTER_TEMP ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MK404_PRINTER=MK25 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MK404_PRINTER_TEMP=$(echo $firmware_version_flag | sed 's/\(.*\)\///' | grep 'MK25S') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [ ! -z $MK404_PRINTER_TEMP ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MK404_PRINTER=MK25S 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo "No firmware version file selected!" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo "Add argument -f with path and hex filename to start MK404" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    exit 7 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [ -z "$MK404_PRINTER" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo "Tried to determine MK404 printer from hex file, but failed!" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo "Add argument -p with 'MK25', 'MK25S', 'MK3' or 'MK3S' to start MK404" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    exit 8 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [ ! -z $mk404_printer_flag ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [ "$mk404_printer_flag" != "$MK404_PRINTER" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "$(tput setaf 3)You defined a different printer type than the firmware!" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo "This can cause unexpected issues.$(tput sgr 0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        echo  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        PS3="Select $(tput setaf 2)printer$(tput sgr 0) you want to use." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        select which in "$(tput setaf 2)$MK404_PRINTER$(tput sgr 0)" "$mk404_printer_flag"; do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            case $which in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                $MK404_PRINTER) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    echo "Set $MK404_PRINTER as printer" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                $mk404_printer_flag) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    echo "Set $(tput setaf 3)$mk404_printer_flag$(tput sgr 0) as printer" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    echo "$(tput setaf 3)This firmware file isn't correct for this printer!!!$(tput sgr 0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    echo  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    MK404_PRINTER=$mk404_printer_flag 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    read -p "Press Enter to continue." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                *) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            esac 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        done 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [ -z $MK404_PRINTER ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    exit 9 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [[ "$MK404_PRINTER" == "MK25" || "$MK404_PRINTER" == "MK25S" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MK404_PRINTER="${MK404_PRINTER}_mR13" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [ "$mk404_flag" == "2" ]; then # Check if MMU2 is selected only for MK3/S 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MK404_PRINTER="${MK404_PRINTER}MMU2" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Run MK404 with 'debugcore' and/or 'bootloader-file' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [[ ! -z $MK404_DEBUG && "$MK404_DEBUG" == "atmega404" || ! -z $BOARD_MEM && "$BOARD_MEM" == "0xFFFF" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MK404_options="--debugcore" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [[ ! -z $MK404_DEBUG && "$MK404_DEBUG" == "atmega404_no_bootloader"  || ! -z $BOARD_FLASH && "$BOARD_FLASH" != "0x3FFFF" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        MK404_options='--debugcore --bootloader-file ""' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Run MK404 with graphics 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if [ ! -z "$mk404_graphics_flag" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if [ ! -z "$MK404_options" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            MK404_options="${MK404_options} -g " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            MK404_options=" -g " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if [[ "$mk404_graphics_flag" == "1" || "$mk404_graphics_flag" == "lite" || "$mk404_graphics_flag" == "3" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            MK404_options="${MK404_options}lite" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        elif [[ "$mk404_graphics_flag" == "2" || "$mk404_graphics_flag" == "fancy" || "$mk404_graphics_flag" == "4" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            MK404_options="${MK404_options}fancy" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            echo "$(tput setaf 1)Unsupported MK404 graphics option $mk404_graphics_flag$(tput sgr 0)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if [[ "$mk404_graphics_flag" == "3" || "$mk404_graphics_flag" == "4" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            MK404_options="${MK404_options} --colour-extrusion --extrusion Quad_HR" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            MK404_options="${MK404_options} --extrusion Line" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-if [ ! -z $firmware_version_flag ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    MK404_firmware_file=" -f $firmware_version_flag" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#Run MK404 SIM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Start: Run MK404 SIM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+run_MK404_SIM() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 if [ ! -z $mk404_flag ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     # Output some useful data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     echo "Printer     : $MK404_PRINTER" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -459,4 +518,29 @@ if [ ! -z $mk404_flag ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     sleep 5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ./MK404 Prusa_$MK404_PRINTER -s --terminal $MK404_options $MK404_firmware_file || exit 10 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#### End of MK404 Simulator 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End: Run MK404 SIM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Check OS and needed packages 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+echo "Check OS" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+check_OS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+check_packages 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Check for options/flags 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+echo "Check for options" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### Prepare build environment 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+echo "Prepare build env" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+set_build_env_variables 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+output_useful_data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+get_MK404 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+cd $MK404_PATH 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+check_for_updates 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fetch_updates 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+prepare_MK404 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+build_MK404 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+run_MK404_SIM 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#### End of MK404 Simulator 
			 |