@ -441,6 +441,10 @@ float soft_endstop_min[XYZ] = { X_MIN_POS, Y_MIN_POS, Z_MIN_POS },
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					# if FAN_COUNT > 0 # if FAN_COUNT > 0  
			
		
	
		
		
			
				
					
					  int16_t  fanSpeeds [ FAN_COUNT ]  =  {  0  } ; 
  int16_t  fanSpeeds [ FAN_COUNT ]  =  {  0  } ; 
 
			
		
	
		
		
			
				
					
					  # if ENABLED(PROBING_FANS_OFF) 
 
			
		
	
		
		
			
				
					
					    bool  fans_paused  =  false ; 
 
			
		
	
		
		
			
				
					
					    int16_t  paused_fanSpeeds [ FAN_COUNT ]  =  {  0  } ; 
 
			
		
	
		
		
			
				
					
					  # endif 
 
			
		
	
		
		
			
				
					
					# endif # endif  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					// The active extruder (tool). Set with T<extruder> command.
 // The active extruder (tool). Set with T<extruder> command.
  
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -2041,6 +2045,35 @@ static void clean_up_after_endstop_or_probe_move() {
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					# endif # endif  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					# if ENABLED(PROBING_FANS_OFF)  
			
		
	
		
		
			
				
					
					  void  fans_pause ( bool  p )  { 
 
			
		
	
		
		
			
				
					
					    if  ( p  & &  fans_paused )  {  // If called out of order something is wrong
 
 
			
		
	
		
		
			
				
					
					      SERIAL_ERROR_START ; 
 
			
		
	
		
		
			
				
					
					      SERIAL_ERRORLNPGM ( " Fans already paused! " ) ; 
 
			
		
	
		
		
			
				
					
					      return ; 
 
			
		
	
		
		
			
				
					
					    } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    if  ( ! p  & &  ! fans_paused )  { 
 
			
		
	
		
		
			
				
					
					      SERIAL_ERROR_START ; 
 
			
		
	
		
		
			
				
					
					      SERIAL_ERRORLNPGM ( " Fans already unpaused! " ) ; 
 
			
		
	
		
		
			
				
					
					      return ; 
 
			
		
	
		
		
			
				
					
					    } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    if  ( p )  { 
 
			
		
	
		
		
			
				
					
					      for  ( uint8_t  x  =  0 ; x  <  FAN_COUNT ; x + + )  { 
 
			
		
	
		
		
			
				
					
					        paused_fanSpeeds [ x ]  =  fanSpeeds [ x ] ; 
 
			
		
	
		
		
			
				
					
					        fanSpeeds [ x ]  =  0 ; 
 
			
		
	
		
		
			
				
					
					      } 
 
			
		
	
		
		
			
				
					
					    } 
 
			
		
	
		
		
			
				
					
					    else  { 
 
			
		
	
		
		
			
				
					
					      for  ( uint8_t  x  =  0 ; x  <  FAN_COUNT ; x + + ) 
 
			
		
	
		
		
			
				
					
					        fanSpeeds [ x ]  =  paused_fanSpeeds [ x ] ; 
 
			
		
	
		
		
			
				
					
					    } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    fans_paused  =  p ; 
 
			
		
	
		
		
			
				
					
					  } 
 
			
		
	
		
		
			
				
					
					# endif  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					# if HAS_BED_PROBE # if HAS_BED_PROBE  
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  // TRIGGERED_WHEN_STOWED_TEST can easily be extended to servo probes, ... if needed.
 
  // TRIGGERED_WHEN_STOWED_TEST can easily be extended to servo probes, ... if needed.
 
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -2052,57 +2085,26 @@ static void clean_up_after_endstop_or_probe_move() {
 
			
		
	
		
		
			
				
					
					    # endif 
    # endif 
 
			
		
	
		
		
			
				
					
					  # endif 
  # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  # if ENABLED(BLTOUCH) 
  # if QUIET_PROBING 
 
			
				
				
			
		
	
		
		
			
				
					
					
    void  probing_pause ( bool  pause )  { 
 
			
				
				
			
		
	
		
		
			
				
					
					    void  bltouch_command ( int  angle )  { 
      # if ENABLED(PROBING_HEATERS_OFF) 
 
			
				
				
			
		
	
		
		
			
				
					
					      servo [ Z_ENDSTOP_SERVO_NR ] . move ( angle ) ;   // Give the BL-Touch the command and wait
 
        thermalManager . pause ( pause ) ; 
 
			
				
				
			
		
	
		
		
			
				
					
					      safe_delay ( BLTOUCH_DELAY ) ; 
 
			
		
	
		
		
			
				
					
					    } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    /**
 
 
			
		
	
		
		
			
				
					
					     *  BLTouch  probes  have  a  Hall  effect  sensor .  The  high  currents  switching 
 
			
		
	
		
		
			
				
					
					     *  on  and  off  cause  a  magnetic  field  that  can  affect  the  repeatability  of  the 
 
			
		
	
		
		
			
				
					
					     *  sensor .  So  for  BLTouch  probes ,  heaters  are  turned  off  during  the  probe , 
 
			
		
	
		
		
			
				
					
					     *  then  quickly  turned  back  on  after  the  point  is  sampled . 
 
			
		
	
		
		
			
				
					
					     */ 
 
			
		
	
		
		
			
				
					
					    # if ENABLED(BLTOUCH_HEATERS_OFF) 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      void  set_heaters_for_bltouch ( const  bool  deploy )  { 
 
			
		
	
		
		
			
				
					
					        static  bool  heaters_were_disabled  =  false ; 
 
			
		
	
		
		
			
				
					
					        static  millis_t  next_emi_protection  =  0 ; 
 
			
		
	
		
		
			
				
					
					        static  int16_t  temps_at_entry [ HOTENDS ] ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        # if HAS_TEMP_BED 
 
			
		
	
		
		
			
				
					
					          static  int16_t  bed_temp_at_entry ; 
 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					      # endif 
      # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        // If called out of order or far apart something is seriously wrong
 
      # if ENABLED(PROBING_FANS_OFF) 
 
			
				
				
			
		
	
		
		
			
				
					
					        if  ( deploy  = =  heaters_were_disabled 
        fans_pause ( pause ) ; 
 
			
				
				
			
		
	
		
		
			
				
					
					            | |  ( next_emi_protection  & &  ELAPSED ( millis ( ) ,  next_emi_protection ) ) ) 
 
			
		
	
		
		
			
				
					
					          kill ( PSTR ( MSG_KILLED ) ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					        if  ( deploy )  { 
 
			
		
	
		
		
			
				
					
					          next_emi_protection  =  millis ( )  +  20  *  1000UL ; 
 
			
		
	
		
		
			
				
					
					          HOTEND_LOOP ( )  { 
 
			
		
	
		
		
			
				
					
					            temps_at_entry [ e ]  =  thermalManager . degTargetHotend ( e ) ; 
 
			
		
	
		
		
			
				
					
					            thermalManager . setTargetHotend ( 0 ,  e ) ; 
 
			
		
	
		
		
			
				
					
					          } 
 
			
		
	
		
		
			
				
					
					          # if HAS_TEMP_BED 
 
			
		
	
		
		
			
				
					
					            bed_temp_at_entry  =  thermalManager . degTargetBed ( ) ; 
 
			
		
	
		
		
			
				
					
					            thermalManager . setTargetBed ( 0 ) ; 
 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					      # endif 
      # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      if ( pause )  safe_delay ( 25 ) ; 
 
			
		
	
		
		
			
				
					
					    } 
    } 
 
			
		
	
		
		
			
				
					
					        else  { 
 
			
		
	
		
		
			
				
					
					          next_emi_protection  =  0 ; 
 
			
		
	
		
		
			
				
					
					          HOTEND_LOOP ( )  thermalManager . setTargetHotend ( temps_at_entry [ e ] ,  e ) ; 
 
			
		
	
		
		
			
				
					
					          # if HAS_TEMP_BED 
 
			
		
	
		
		
			
				
					
					            thermalManager . setTargetBed ( bed_temp_at_entry ) ; 
 
			
		
	
		
		
			
				
					
					  # endif 
  # endif 
 
			
		
	
		
		
			
				
					
					        } 
 
			
		
	
		
		
			
				
					
					        heaters_were_disabled  =  deploy ; 
 
			
		
	
		
		
			
				
					
					      } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # endif  // BLTOUCH_HEATERS_OFF
 
  # if ENABLED(BLTOUCH) 
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    void  bltouch_command ( int  angle )  { 
 
			
		
	
		
		
			
				
					
					      servo [ Z_ENDSTOP_SERVO_NR ] . move ( angle ) ;   // Give the BL-Touch the command and wait
 
 
			
		
	
		
		
			
				
					
					      safe_delay ( BLTOUCH_DELAY ) ; 
 
			
		
	
		
		
			
				
					
					    } 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    void  set_bltouch_deployed ( const  bool  deploy )  { 
    void  set_bltouch_deployed ( const  bool  deploy )  { 
 
			
		
	
		
		
			
				
					
					      if  ( deploy  & &  TEST_BLTOUCH ( ) )  {       // If BL-Touch says it's triggered
 
      if  ( deploy  & &  TEST_BLTOUCH ( ) )  {       // If BL-Touch says it's triggered
 
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -2118,9 +2120,6 @@ static void clean_up_after_endstop_or_probe_move() {
 
			
		
	
		
		
			
				
					
					          stop ( ) ;                           // punt!
 
          stop ( ) ;                           // punt!
 
 
			
		
	
		
		
			
				
					
					        } 
        } 
 
			
		
	
		
		
			
				
					
					      } 
      } 
 
			
		
	
		
		
			
				
					
					      # if ENABLED(BLTOUCH_HEATERS_OFF) 
 
			
		
	
		
		
			
				
					
					        set_heaters_for_bltouch ( deploy ) ; 
 
			
		
	
		
		
			
				
					
					      # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      bltouch_command ( deploy  ?  BLTOUCH_DEPLOY  :  BLTOUCH_STOW ) ; 
      bltouch_command ( deploy  ?  BLTOUCH_DEPLOY  :  BLTOUCH_STOW ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -2249,9 +2248,17 @@ static void clean_up_after_endstop_or_probe_move() {
 
			
		
	
		
		
			
				
					
					      set_bltouch_deployed ( true ) ; 
      set_bltouch_deployed ( true ) ; 
 
			
		
	
		
		
			
				
					
					    # endif 
    # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # if QUIET_PROBING 
 
			
		
	
		
		
			
				
					
					      probing_pause ( true ) ; 
 
			
		
	
		
		
			
				
					
					    # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    // Move down until probe triggered
 
    // Move down until probe triggered
 
 
			
		
	
		
		
			
				
					
					    do_blocking_move_to_z ( LOGICAL_Z_POSITION ( z ) ,  MMM_TO_MMS ( fr_mm_m ) ) ; 
    do_blocking_move_to_z ( LOGICAL_Z_POSITION ( z ) ,  MMM_TO_MMS ( fr_mm_m ) ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # if QUIET_PROBING 
 
			
		
	
		
		
			
				
					
					      probing_pause ( false ) ; 
 
			
		
	
		
		
			
				
					
					    # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    // Retract BLTouch immediately after a probe
 
    // Retract BLTouch immediately after a probe
 
 
			
		
	
		
		
			
				
					
					    # if ENABLED(BLTOUCH) 
    # if ENABLED(BLTOUCH) 
 
			
		
	
		
		
			
				
					
					      set_bltouch_deployed ( false ) ; 
      set_bltouch_deployed ( false ) ; 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -2809,6 +2816,10 @@ static void do_homing_move(const AxisEnum axis, float distance, float fr_mm_s=0.
 
			
		
	
		
		
			
				
					
					    if  ( deploy_bltouch )  set_bltouch_deployed ( true ) ; 
    if  ( deploy_bltouch )  set_bltouch_deployed ( true ) ; 
 
			
		
	
		
		
			
				
					
					  # endif 
  # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  # if QUIET_PROBING 
 
			
		
	
		
		
			
				
					
					    if  ( axis  = =  Z_AXIS )  probing_pause ( true ) ; 
 
			
		
	
		
		
			
				
					
					  # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  // Tell the planner we're at Z=0
 
  // Tell the planner we're at Z=0
 
 
			
		
	
		
		
			
				
					
					  current_position [ axis ]  =  0 ; 
  current_position [ axis ]  =  0 ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
						
					 
					@ -2825,6 +2836,10 @@ static void do_homing_move(const AxisEnum axis, float distance, float fr_mm_s=0.
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  stepper . synchronize ( ) ; 
  stepper . synchronize ( ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  # if QUIET_PROBING 
 
			
		
	
		
		
			
				
					
					    if  ( axis  = =  Z_AXIS )  probing_pause ( false ) ; 
 
			
		
	
		
		
			
				
					
					  # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  # if HOMING_Z_WITH_PROBE && ENABLED(BLTOUCH) 
  # if HOMING_Z_WITH_PROBE && ENABLED(BLTOUCH) 
 
			
		
	
		
		
			
				
					
					    if  ( deploy_bltouch )  set_bltouch_deployed ( false ) ; 
    if  ( deploy_bltouch )  set_bltouch_deployed ( false ) ; 
 
			
		
	
		
		
			
				
					
					  # endif 
  # endif 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -6468,6 +6483,7 @@ inline void gcode_M104() {
 
			
		
	
		
		
			
				
					
					  if  ( code_seen ( ' S ' ) )  { 
  if  ( code_seen ( ' S ' ) )  { 
 
			
		
	
		
		
			
				
					
					    const  int16_t  temp  =  code_value_temp_abs ( ) ; 
    const  int16_t  temp  =  code_value_temp_abs ( ) ; 
 
			
		
	
		
		
			
				
					
					    thermalManager . setTargetHotend ( temp ,  target_extruder ) ; 
    thermalManager . setTargetHotend ( temp ,  target_extruder ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # if ENABLED(DUAL_X_CARRIAGE) 
    # if ENABLED(DUAL_X_CARRIAGE) 
 
			
		
	
		
		
			
				
					
					      if  ( dual_x_carriage_mode  = =  DXC_DUPLICATION_MODE  & &  target_extruder  = =  0 ) 
      if  ( dual_x_carriage_mode  = =  DXC_DUPLICATION_MODE  & &  target_extruder  = =  0 ) 
 
			
		
	
		
		
			
				
					
					        thermalManager . setTargetHotend ( temp  ?  temp  +  duplicate_extruder_temp_offset  :  0 ,  1 ) ; 
        thermalManager . setTargetHotend ( temp  ?  temp  +  duplicate_extruder_temp_offset  :  0 ,  1 ) ; 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -6663,6 +6679,7 @@ inline void gcode_M109() {
 
			
		
	
		
		
			
				
					
					  if  ( no_wait_for_cooling  | |  code_seen ( ' R ' ) )  { 
  if  ( no_wait_for_cooling  | |  code_seen ( ' R ' ) )  { 
 
			
		
	
		
		
			
				
					
					    const  int16_t  temp  =  code_value_temp_abs ( ) ; 
    const  int16_t  temp  =  code_value_temp_abs ( ) ; 
 
			
		
	
		
		
			
				
					
					    thermalManager . setTargetHotend ( temp ,  target_extruder ) ; 
    thermalManager . setTargetHotend ( temp ,  target_extruder ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					    # if ENABLED(DUAL_X_CARRIAGE) 
    # if ENABLED(DUAL_X_CARRIAGE) 
 
			
		
	
		
		
			
				
					
					      if  ( dual_x_carriage_mode  = =  DXC_DUPLICATION_MODE  & &  target_extruder  = =  0 ) 
      if  ( dual_x_carriage_mode  = =  DXC_DUPLICATION_MODE  & &  target_extruder  = =  0 ) 
 
			
		
	
		
		
			
				
					
					        thermalManager . setTargetHotend ( temp  ?  temp  +  duplicate_extruder_temp_offset  :  0 ,  1 ) ; 
        thermalManager . setTargetHotend ( temp  ?  temp  +  duplicate_extruder_temp_offset  :  0 ,  1 ) ; 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -6814,6 +6831,7 @@ inline void gcode_M109() {
 
			
		
	
		
		
			
				
					
					    const  bool  no_wait_for_cooling  =  code_seen ( ' S ' ) ; 
    const  bool  no_wait_for_cooling  =  code_seen ( ' S ' ) ; 
 
			
		
	
		
		
			
				
					
					    if  ( no_wait_for_cooling  | |  code_seen ( ' R ' ) )  { 
    if  ( no_wait_for_cooling  | |  code_seen ( ' R ' ) )  { 
 
			
		
	
		
		
			
				
					
					      thermalManager . setTargetBed ( code_value_temp_abs ( ) ) ; 
      thermalManager . setTargetBed ( code_value_temp_abs ( ) ) ; 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					      # if ENABLED(PRINTJOB_TIMER_AUTOSTART) 
      # if ENABLED(PRINTJOB_TIMER_AUTOSTART) 
 
			
		
	
		
		
			
				
					
					        if  ( code_value_temp_abs ( )  >  BED_MINTEMP ) 
        if  ( code_value_temp_abs ( )  >  BED_MINTEMP ) 
 
			
		
	
		
		
			
				
					
					          print_job_timer . start ( ) ; 
          print_job_timer . start ( ) ; 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -7107,10 +7125,11 @@ inline void gcode_M81() {
 
			
		
	
		
		
			
				
					
					  thermalManager . disable_all_heaters ( ) ; 
  thermalManager . disable_all_heaters ( ) ; 
 
			
		
	
		
		
			
				
					
					  stepper . finish_and_disable ( ) ; 
  stepper . finish_and_disable ( ) ; 
 
			
		
	
		
		
			
				
					
					  # if FAN_COUNT > 0 
  # if FAN_COUNT > 0 
 
			
		
	
		
		
			
				
					
					    # if FAN_COUNT > 1 
 
			
		
	
		
		
			
				
					
					    for  ( uint8_t  i  =  0 ;  i  <  FAN_COUNT ;  i + + )  fanSpeeds [ i ]  =  0 ; 
    for  ( uint8_t  i  =  0 ;  i  <  FAN_COUNT ;  i + + )  fanSpeeds [ i ]  =  0 ; 
 
			
		
	
		
		
			
				
					
					    # else 
 
			
				
				
			
		
	
		
		
			
				
					
					      fanSpeeds [ 0 ]  =  0 ; 
    # if ENABLED(PROBING_FANS_OFF) 
 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					      fans_paused  =  false ; 
 
			
		
	
		
		
			
				
					
					      ZERO ( paused_fanSpeeds ) ; 
 
			
		
	
		
		
			
				
					
					    # endif 
    # endif 
 
			
		
	
		
		
			
				
					
					  # endif 
  # endif 
 
			
		
	
		
		
			
				
					
					  safe_delay ( 1000 ) ;  // Wait 1 second before switching off
 
  safe_delay ( 1000 ) ;  // Wait 1 second before switching off
 
 
			
		
	
	
		
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
					@ -12087,7 +12106,12 @@ void kill(const char* lcd_msg) {
 
			
		
	
		
		
			
				
					
					 *  After  a  stop  the  machine  may  be  resumed  with  M999 
 *  After  a  stop  the  machine  may  be  resumed  with  M999 
 
			
		
	
		
		
			
				
					
					 */ 
 */ 
 
			
		
	
		
		
			
				
					
					void  stop ( )  { void  stop ( )  {  
			
		
	
		
		
			
				
					
					  thermalManager . disable_all_heaters ( ) ; 
  thermalManager . disable_all_heaters ( ) ;  // 'unpause' taken care of in here
 
 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  # if ENABLED(PROBING_FANS_OFF) 
 
			
		
	
		
		
			
				
					
					    if  ( fans_paused )  fans_pause ( false ) ;  // put things back the way they were
 
 
			
		
	
		
		
			
				
					
					  # endif 
 
			
		
	
		
		
			
				
					
					
 
			
		
	
		
		
			
				
					
					  if  ( IsRunning ( ) )  { 
  if  ( IsRunning ( ) )  { 
 
			
		
	
		
		
			
				
					
					    Stopped_gcode_LastN  =  gcode_LastN ;  // Save last g_code for restart
 
    Stopped_gcode_LastN  =  gcode_LastN ;  // Save last g_code for restart
 
 
			
		
	
		
		
			
				
					
					    SERIAL_ERROR_START ; 
    SERIAL_ERROR_START ;