*** probe_screen.py.orig	2016-03-14 01:20:04.766736686 -0600
--- probe_screen.py	2016-04-04 14:02:02.582674517 -0600
***************
*** 128,133 ****
--- 128,135 ----
          error = self.e.poll()
          if "axis" in self.display:
              error_pin= Popen('halcmd getp probe.user.error ', shell=True, stdout=PIPE).stdout.read()
+         elif "gscreen" in self.display:
+                error_pin= Popen('halcmd getp probe.ps_error ', shell=True, stdout=PIPE).stdout.read()
          else:
              error_pin= Popen('halcmd getp gmoccapy.error ', shell=True, stdout=PIPE).stdout.read()
          if error:
***************
*** 325,333 ****
      def ocode(self,s, data = None):	
          self.command.mdi(s)
          self.stat.poll()
!         while self.stat.exec_state == 7 or self.stat.exec_state == 3 :
              if self.error_poll() == -1:
                  return -1
              self.command.wait_complete()
              self.stat.poll()
          self.command.wait_complete()
--- 327,336 ----
      def ocode(self,s, data = None):	
          self.command.mdi(s)
          self.stat.poll()
!         while self.stat.interp_state <> linuxcnc.INTERP_IDLE :
              if self.error_poll() == -1:
                  return -1
+             time.sleep(0.1)
              self.command.wait_complete()
              self.stat.poll()
          self.command.wait_complete()
***************
*** 431,438 ****
      def on_down_released(self, gtkbutton, data = None):
          self.command.mode( linuxcnc.MODE_MDI )
          self.command.wait_complete()
!         # Start down.ngc
!         if self.ocode ("O<down> call") == -1:
              return
          a=self.probed_position_with_offsets()
          self.lb_probe_z.set_text( "%.4f" % float(a[2]) )
--- 434,441 ----
      def on_down_released(self, gtkbutton, data = None):
          self.command.mode( linuxcnc.MODE_MDI )
          self.command.wait_complete()
!         # Start zdown.ngc
!         if self.ocode ("O<zdown> call") == -1:
              return
          a=self.probed_position_with_offsets()
          self.lb_probe_z.set_text( "%.4f" % float(a[2]) )
***************
*** 1335,1341 ****
--- 1338,1396 ----
              return
          self.rotate_coord_system(alfa)
  
+     tool_set_height = 0
  
+     # Toolsetter Height
+     def on_tsh_released(self, gtkbutton, data = None):
+         global tool_set_height
+         self.command.mode( linuxcnc.MODE_MDI )
+         self.command.wait_complete()
+         # move to absolute Z zero, almost
+         s="""G0 G90 G53 Z+0.
+         G0 G53 X+0.01 Y+0.01
+         G54"""
+         if self.gcode(s) == -1:
+             return
+         # Probe Z-
+         if self.ocode ("O<zdown> call") == -1:
+             return
+         a=self.probed_position_with_offsets()
+         # Get the toolsetter offset, invert it and save it in #5169 (G28 W)
+         tool_set_height = a[2]
+         s="#5169 = %f" % a[2]
+         if self.gcode(s) == -1:
+             return
+         self.lb_tsh_z.set_text( "%.4f" % float(a[2]) )
+         self.add_history("Toolsetter Offset ","Z",0,0,0,0,0,0,0,0,a[2],0,0)
+ 
+     # Tool Offset
+     def on_toff_released(self, gtkbutton, data = None):
+         global tool_set_height
+         self.command.mode( linuxcnc.MODE_MDI )
+         self.command.wait_complete()
+         # move to absolute Z zero
+         s="""G0 G90 G53 Z+0.
+         G54"""
+         if self.gcode(s) == -1:
+             return
+         # move to absolute X and Y zero
+         s="""G0 G53 X+0.01 Y+0.01
+         G54"""
+         if self.gcode(s) == -1:
+             return
+         # Probe Z-
+         if self.ocode ("O<zdown> call") == -1:
+             return
+         a=self.probed_position_with_offsets()
+         self.lb_toff_z.set_text( "%.4f" % float(a[2]) )
+         self.add_history("Tool Offset ","Z",0,0,0,0,0,0,0,0,a[2],0,0)
+         tool_offset = a[2] - tool_set_height
+         tool_num = self.spbtn1_tool_number.get_value_as_int()
+         text = "Tool #%d Length " % tool_num
+         self.add_history(text,"Z",0,0,0,0,0,0,0,0,tool_offset,0,0)
+         s="G10 L1 P%d Z%f" % (tool_num,tool_offset)
+         if self.gcode(s) == -1:
+             return
  
      def __init__(self, halcomp,builder,useropts):
          inipath = os.environ["INI_FILE_NAME"]
***************
*** 1379,1384 ****
--- 1434,1440 ----
          self.spbtn1_probe_diam = self.builder.get_object("spbtn1_probe_diam")
          self.spbtn1_xy_clearance = self.builder.get_object("spbtn1_xy_clearance")
          self.spbtn1_edge_lenght = self.builder.get_object("spbtn1_edge_lenght")
+         self.spbtn1_tool_number = self.builder.get_object("spbtn1_tool_number")
  
          self.hal_led_set_zero = self.builder.get_object("hal_led_set_zero")
          self.hal_led_auto_rott = self.builder.get_object("hal_led_auto_rott")
***************
*** 1399,1405 ****
          self.lb_probe_xc = self.builder.get_object("lb_probe_xc")
          self.lb_probe_yc = self.builder.get_object("lb_probe_yc")
          self.lb_probe_a = self.builder.get_object("lb_probe_a")
! 
  
          self.halcomp = hal.component("probe")
          self.halcomp.newpin( "ps_searchvel", hal.HAL_FLOAT, hal.HAL_OUT )
--- 1455,1462 ----
          self.lb_probe_xc = self.builder.get_object("lb_probe_xc")
          self.lb_probe_yc = self.builder.get_object("lb_probe_yc")
          self.lb_probe_a = self.builder.get_object("lb_probe_a")
!         self.lb_tsh_z = self.builder.get_object("lb_tsh_z")
!         self.lb_toff_z = self.builder.get_object("lb_toff_z")
  
          self.halcomp = hal.component("probe")
          self.halcomp.newpin( "ps_searchvel", hal.HAL_FLOAT, hal.HAL_OUT )
***************
*** 1423,1442 ****
              self.halcomp["auto_rott"] = True
              self.hal_led_auto_rott.hal_pin.set(1)
          self.halcomp.newpin( "ps_error", hal.HAL_FLOAT, hal.HAL_OUT )
!         self.spbtn1_search_vel.set_value( self.prefs.getpref( "ps_searchvel", 300.0, float ) )
!         self.spbtn1_probe_vel.set_value( self.prefs.getpref( "ps_probevel", 10.0, float ) )
!         self.spbtn1_z_clearance.set_value( self.prefs.getpref( "ps_z_clearance", 3.0, float ) )
!         self.spbtn1_probe_max.set_value( self.prefs.getpref( "ps_probe_max", 1.0, float ) )
!         self.spbtn1_probe_latch.set_value( self.prefs.getpref( "ps_probe_latch", 0.5, float ) )
!         self.spbtn1_probe_diam.set_value( self.prefs.getpref( "ps_probe_diam", 2.0, float ) )
!         self.spbtn1_xy_clearance.set_value( self.prefs.getpref( "ps_xy_clearance", 5.0, float ) )
!         self.spbtn1_edge_lenght.set_value( self.prefs.getpref( "ps_edge_lenght", 5.0, float ) )
  
          self.spbtn_offs_x.set_value( self.prefs.getpref( "ps_offs_x", 0.0, float ) )
          self.spbtn_offs_y.set_value( self.prefs.getpref( "ps_offs_y", 0.0, float ) )
          self.spbtn_offs_z.set_value( self.prefs.getpref( "ps_offs_z", 0.0, float ) )
          self.spbtn_offs_angle.set_value( self.prefs.getpref( "ps_offs_angle", 0.0, float ) )
  
          self.halcomp["ps_searchvel"] = self.spbtn1_search_vel.get_value()
          self.halcomp["ps_probevel"] = self.spbtn1_probe_vel.get_value()
          self.halcomp["ps_z_clearance"] = self.spbtn1_z_clearance.get_value()
--- 1480,1525 ----
              self.halcomp["auto_rott"] = True
              self.hal_led_auto_rott.hal_pin.set(1)
          self.halcomp.newpin( "ps_error", hal.HAL_FLOAT, hal.HAL_OUT )
! # Parameter Defaults
! # Imperial
!         self.spbtn1_search_vel.set_value( self.prefs.getpref( "ps_searchvel", 10.0, float ) )
!         self.spbtn1_probe_vel.set_value( self.prefs.getpref( "ps_probevel", 0.3, float ) )
!         self.spbtn1_z_clearance.set_value( self.prefs.getpref( "ps_z_clearance", 0.1, float ) )
!         self.spbtn1_probe_max.set_value( self.prefs.getpref( "ps_probe_max", 0.04, float ) )
!         self.spbtn1_probe_latch.set_value( self.prefs.getpref( "ps_probe_latch", 0.02, float ) )
!         self.spbtn1_probe_diam.set_value( self.prefs.getpref( "ps_probe_diam", 0.0607, float ) )
!         self.spbtn1_xy_clearance.set_value( self.prefs.getpref( "ps_xy_clearance", 0.15, float ) )
!         self.spbtn1_edge_lenght.set_value( self.prefs.getpref( "ps_edge_lenght", 0.15, float ) )
! 
! # Metric
! #        self.spbtn1_search_vel.set_value( self.prefs.getpref( "ps_searchvel", 300.0, float ) )
! #        self.spbtn1_probe_vel.set_value( self.prefs.getpref( "ps_probevel", 10.0, float ) )
! #        self.spbtn1_z_clearance.set_value( self.prefs.getpref( "ps_z_clearance", 3.0, float ) )
! #        self.spbtn1_probe_max.set_value( self.prefs.getpref( "ps_probe_max", 1.0, float ) )
! #        self.spbtn1_probe_latch.set_value( self.prefs.getpref( "ps_probe_latch", 0.5, float ) )
! #        self.spbtn1_probe_diam.set_value( self.prefs.getpref( "ps_probe_diam", 2.0, float ) )
! #        self.spbtn1_xy_clearance.set_value( self.prefs.getpref( "ps_xy_clearance", 5.0, float ) )
! #        self.spbtn1_edge_lenght.set_value( self.prefs.getpref( "ps_edge_lenght", 5.0, float ) )
  
          self.spbtn_offs_x.set_value( self.prefs.getpref( "ps_offs_x", 0.0, float ) )
          self.spbtn_offs_y.set_value( self.prefs.getpref( "ps_offs_y", 0.0, float ) )
          self.spbtn_offs_z.set_value( self.prefs.getpref( "ps_offs_z", 0.0, float ) )
          self.spbtn_offs_angle.set_value( self.prefs.getpref( "ps_offs_angle", 0.0, float ) )
  
+ # Set spinbox settings for imperal units
+         self.spbtn1_search_vel.set_increments(0.5, 0.5)
+         self.spbtn1_probe_vel.set_increments(0.1, 0.2)
+         self.spbtn1_z_clearance.set_increments(0.01, 0.01)
+         self.spbtn1_probe_max.set_increments(0.1, 0.1)
+         self.spbtn1_probe_latch.set_increments(0.01, 0.01)
+         self.spbtn1_probe_diam.set_increments(0.0001, 0.0001)
+         self.spbtn1_xy_clearance.set_increments(0.01, 0.01)
+         self.spbtn1_edge_lenght.set_increments(0.01, 0.01)
+         self.spbtn1_probe_diam.set_digits(4)
+         self.spbtn_offs_x.set_digits(4)
+         self.spbtn_offs_y.set_digits(4)
+         self.spbtn_offs_z.set_digits(4)
+ 
          self.halcomp["ps_searchvel"] = self.spbtn1_search_vel.get_value()
          self.halcomp["ps_probevel"] = self.spbtn1_probe_vel.get_value()
          self.halcomp["ps_z_clearance"] = self.spbtn1_z_clearance.get_value()
