| 
					
				 | 
			
			
				@@ -475,12 +475,6 @@ bool more_zeros(uint8_t* pixels, int16_t &min_z){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-enum { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	RESTART_INIT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	DO_RESTART, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	WAS_RESTARTED 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void xyzcal_scan_pixels_32x32_Zhop(int16_t cx, int16_t cy, int16_t min_z, int16_t max_z, uint16_t delay_us, uint8_t* pixels){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (!pixels) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -491,13 +485,10 @@ void xyzcal_scan_pixels_32x32_Zhop(int16_t cx, int16_t cy, int16_t min_z, int16_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	xyzcal_lineXYZ_to(cx - 1024, cy - 1024, min_z, delay_us, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	int16_t start_z; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	uint16_t steps_to_go; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	/// restart if needed but just once 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	/// 0 = init, 1 = do restart, 2 = restart was done, don't restart any more 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	uint8_t restart = RESTART_INIT;  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/// available restarts (if needed) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	uint8_t restarts = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	do { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if (restart == DO_RESTART) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			restart = WAS_RESTARTED; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		for (uint8_t r = 0; r < 32; r++){ ///< Y axis 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			xyzcal_lineXYZ_to(_X, cy - 1024 + r * 64, z, delay_us, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			for (int8_t d = 0; d < 2; ++d){ ///< direction			 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -598,16 +589,16 @@ void xyzcal_scan_pixels_32x32_Zhop(int16_t cx, int16_t cy, int16_t min_z, int16_ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					count_position[2] = z; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			/// do this in the first row only 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (r == 0 && restart == RESTART_INIT){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (!more_zeros(pixels, min_z)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					restart = DO_RESTART; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			/// do the min_z addjusting in the first row only 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (r == 0 && restarts){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (more_zeros(pixels, min_z)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					restarts = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (restart == DO_RESTART) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (restarts) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// DBG(_n("\n\n")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} while (restart == DO_RESTART); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} while (restarts--); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /// Returns rate of match 
			 |