These sim configurations demonstrate use of an XHC-HB04 wireless MPG pendant in LinuxCNC using a HAL module created by Frederic Rible (frible@teaser.fr) (Copyright (C) 2013). Ref: http://wiki.linuxcnc.org/cgi-bin/wiki.pl?Using_A_XHC-HB04_Wireless_MPG_Pendant The HAL module is designed for the XHC-HB04 V3.0 identified as USB device 10CE:EB70. Most of the pendant features are handled: - buttons converted to hal pins - jog wheel with variable scale (use stepsize-up or stepsize-down pin to change in sequence) - sequences provided include: (0.001,0.010,0.100,1.000) typ for mm-base machine (0.001,0.005,0.010,0.020) typ for inch-base machine - LCD screen displays machine and relative positions Sim configurations are provided for two known button configurations: layout1 -- 16 buttons layout2 -- 18 buttons (more common) The button names are defined in the files LIB:xhc-hb04-layout*.cfg in a stanza labeled XHC-HB04 with definitions as BUTTON=XX:name where XX is a hexadecimal code used by the device. Example: [XHC-HB04] BUTTON=01:button-stop BUTTON=03:button-rewind ... A hal pin (Type=bit, Dir=OUT) is created for each button, for example: xhc-hb04.button-stop xhc-hb04.button-rewind ... If the configuration file includes buttons named: button-zero button-goto-zero button-half then the driver creates additional buttons for these that are active only if the axis is selected by the rotary switch. These synthesized buttons are: button-zero-x button-zero-y button-zero-z button-zero-a button-goto-zero-x button-goto-zero-y button-goto-zero-z button-goto-zero-a button-half-x button-half-y button-half-z button-half-a As with real buttons, the synthesized buttons have hal pins named: xhc-hb04.button-zero-x xhc-hb04.button-zero-y etc. Additional hal pins are created by the xhc-hb04 driver and connected as required by the halfile included for the demo configurations. A working and connected xhc-hb04 device is required for the demonstration configurations. If not connected, the sim configs will start without pendant functionality. ---------------------------------- A udev rules file is needed to give correct permissions for USB access. With a deb install, the rules file is installed as /lib/udev/rules.d/99-xhc.rules If using a Run-In-Place (RIP) build, create a file in the location for user-installed rules: /etc/udev/rules.d/99-xhc.rules and include a rule to specify the applicable product and vendor codes and allows both read and write access to the user. Example udev rule: ATTR{idProduct}=="eb70", ATTR{idVendor}=="10ce", MODE="0666", OWNER="root", GROUP="plugdev" This rule uses mode 0666 to provide read and write access to owner,group,world -- e.g., everyone. ---------------------------------- The sim configurations use a single halfile: LIB:xhc-hb04.tcl. This halfile uses a custom comp file (xhc_hb04_util.comp) and can be added to existing configurations by adding an ini file entry for: [HAL]HALFILE = LIB:xhc-hb04.tcl This HALFILE entry should follow other HALFILE entries. Optional configuration ini file items and the defaults values are: [XHC_HB04_CONFIG] threadname = servo-thread (optional, default: servo-thread) layout = 2 (optional, 1: 16 buttons | 2: 18 buttons, default: 2) coords = x y z a (optional, 4 max, default: x y z a) coefs = 1 1 1 1 (optional, filter coefs 0 < coef < 1, default: 1 1 1 1) mpg_accels = 1 2 2 200 (optional: reduced accelerations for all manual mode jogging) (in machine_units/sec/sec like [AXIS_n]MAX_ACCELERATION) (this option requires: [APPLICATIONS]APP = xhc-hb04-accels) scales = 1 1 1 1 (optional, plus/minus factors, default: 1 1 1 1) require_pendant = yes (optional, yes | no, default: yes) inch_or_mm = in (optional, in | mm for display icon, default: mm) jogmode = normal (optional, normal | vnormal | plus-minus, default: normal) sequence = 1 (optional, 1 | 2 | 3 | 4 | 5, default: 1) 1: 0.001,0.010,0.100,1.000 (typ for mm machine) 2: 0.001,0.005,0.010,0.020 (typ for inch machine) 3: 0.001,0.010,0.100 4: 0.001,0.005,0.010,0.020,0.050,0.100 5: 0.001,0.010,0.050,0.100,1.000 The filter coefs can be used to slow the response to wheel steps but are usually not needed since the xhc-hb04 component implements smoothing. The movement per wheel increment is normally controlled by connecting the STEP button to the hal pin xhc-hb04.stepsize-up (or xhc-hb04.stepsize-down). Each press of the STEP button will cause the wheel increment to increase according to the sequence specified. The sequence starts over after the maximum value is reached. The scale factor for each axis can be set with the scales item. When require_pendant = no, the xhc-hb04 hal pins will be created even if the pendant is not connected at startup. A new connection, a disconnect, and a reconnect are supported. ---------------------------------- jogmodes: normal: postion mode, the axis will move exactly regardless of how long it takes. Beware: the machine may keep moving after you stop rotating the jog wheel. vnormal: velocity mode, the axis will stop when the wheel stops. Beware: the amount moved per wheel detent may be less than specified if the machine velocity and acceleration cannot accomplish the move in time. plus-minus: halui plus-minus jogging (may be useful for world-mode jogging in non-trivkins machines). ---------------------------------- sequence: Typically use 1 for mm-based machine, 2 for inch-based machine ---------------------------------- Pendant buttons are connected to hal pins with ini file items. Examples: [XHC_HB04_BUTTONS] stop = halui.program.stop goto-zero = halui.mdi-command-00 step = xhc-hb04.stepsize-up rewind = halui.program.step macro-1 = halui.mdi-command-01 mode = "" (placeholder) With the above items, connections are made as: Signal_name Source pin Destination pin ----------------- ---------------------------- ------------------------ pendant:stop <== xhc-hb04.button-stop ==> halui.program.stop pendant:goto-zero <== xhc-hb04.button-goto-zero ==> halui.mdi-command-00 pendant:step <== xhc-hb04.button-step ==> xhc-hb04.stepsize-up etc ... Note: halui MDI commands are defined in a [HALUI] stanza: [HALUI] MDI_COMMAND = G0 X0 Y0 Z0 MDI_COMMAND = M101 The commands are assigned to pins (Type=bit, Dir=IN) named halui.mdi-command-nn whre nn corresponds to their ordered appearance beginning with nn=00. (man halui for more information) ---------------------------------- A application named monitor-xhc-hb04 is included to monitor disconnects and reconnects of the pendant. This script runs in the background and will pop up a message when the pendant is disconnected or reconnected. Usage is optional; if used it is specified with ini file entry: [APPLICATIONS]APP = monitor-xhc-hb04 (Note: when using require_pendant=1, disconnects are detected but reconnects are not supported) ---------------------------------- See the manpage for xhc-hb04 for details on the xhc-hb04 component ---------------------------------- The demo ini files are examples using the axis gui in a simulator configuration. These files use #INCLUDE directives to include files for the basic machine and for the pendant layout. For example, the organization for the xhc-hb04-layout2.ini file is: #INCLUDE inch_base.inc | Conventional items for an inch based sim #INCLUDE layout2.inc | All button items ([XHC_HB04_BUTTONS],[HALUI]) [EMC] | Machine identifier MACHINE = | [HAL] | HAL items HALFILE = | ... | HALFILE = | HALFILE = LIB:xhc-hb04.tcl | xhc-hb04 configuration script HALUI = halui | Halui specifier [XHC_HB04_CONFIG] | All config items used by LIB:xhc-hb04.tcl layout = | coords = | coefs = | scales = | jogmode = | sequence = | require_pendant = | inch_or_mm = | mpg_accels = | [APPLICATIONS] | Optional auxiliary scripts APP = xhc-hb04-accels | For [XHC_HB04_CONFIG]mpg_accels APP = monitor-xhc-hb04 | Connection monitor script ---------------------------------- Adding an xhc-hb04 to an existing configuration. Recommended procedure is to create a new configuration based on an existing configuration. Copy all files from an existing (working) configuration directory to a new directory and edit the configuration ini file to: a) add [HAL]HALFILE = LIB:xhc-hb04.tcl (this entry should follow other HALFILE entries) b) (optional) add [APPLICATIONS]APP = xhc-hb04-accels in order to use [XHC_HB04_CONFIG]mpg_accels c) (optional) add [APPLICATIONS]APP = monitor-xhc-hb04 to monitor disconnects/connects of pendant d) add stanza [XHC_HB04_CONFIG] to configure pendant e) include stanzas [XHC_HB04_BUTTONS] and [HALUI] to define button actions (these may be in a separate #INCLUDE file -- see the demo examples) The entries in the new or updated stanzas should be customized for your machine.