Provided by: linuxcnc-uspace_2.9.4-2ubuntu1_amd64 bug

NAME

       hal_parport - Realtime HAL component to communicate with one or more pc parallel ports.

SYNOPSIS

       loadrt hal_parport cfg="port_addr [type] [[port_addr [type] ...]"

DESCRIPTION

       The  hal_parport  component is a realtime component that provides connections from HAL via halpins to the
       physical pins of one or more parallel ports.  It provides a read and write function to send  and  receive
       data to the attached parallel port(s).

       The hal_parport component supports up to 8 physical parallel ports.

OPTIONS

       cfg="port_addr [type] [[port_addr [type] ...]"

              The  cfg  string tells hal_parport the address(es) of the parallel port(s) and whether the port(s)
              is/are used as an input or output port(s).  Up to  eight  parallel  ports  are  supported  by  the
              component.

              The  port_addr  parameter of the configuration string may be either the physical base address of a
              parallel port or specified as the detected parallel port via Linux parport_pc  driver.   In  which
              case,  a  port_addr  of 0 is the first parallel port detected on the system, 1 is the next, and so
              on.

              The type parameter of the configuration string determines how the I/O bits of the port  are  used.
              There are four possible options and if none is specified will default to out.

              in  - Sets the 8 bits of the data port to input.  In this mode the parallel port has a total of 13
              input pins and 4 output pins.

              out - Sets the 8 bits of the data port to output.  In this mode the parallel port has a total of 5
              input pins and 12 output pins.

              epp - This option is the same as setting to  out,  but  can  cause  the  computer  to  change  the
              electrical characteristics of the port, see USAGE below.

              x  -  The  option allows ports with open collectorts on the control group pins to be configured as
              inputs resulting in 8 output pins and 9 input pins, see USAGE below.

PINS

       The pins created by the hal_parport component depends on how it is configured in the cfg="" string passed
       to it, see OPTIONS.

              parport.<p>.pin-<n>-out (bit) Drives a physical output pin.

              parport.<p>.pin-<n>-in (bit) Tracks a physical input pin.

              parport.<p>.pin-<n>-in-not (bit) Tracks a physical input pin, but inverted.

              For each pin created, <p> is the port number, and <n> is the physical pin number  in  the  25  pin
              D-shell connector.

              For   each   physical   output   pin,   the   driver  creates  a  single  HAL  pin,  for  example:
              parport.0.pin-14-out.

              For each physical input pin, the driver creates two HAL pins, for example: parport.0.pin-12-in and
              parport.0.pin-12-in-not.

              The -in HAL pin is TRUE if the physical pin is high, and FALSE if the physical  pin  is  low.  The
              -in-not HAL pin is inverted and is FALSE if the physical pin is high.

              The following lists the input and output pins by the type setting used in the cfg="" string.

              in: Pins 2,3,4,5,6,7,8,9,10,11,12,13,15 are input pins and pins 1,14,16 and 17 are output pins.

              out/epp: Pins 10,11,12,13 and 15 are input pins and pins 1,2,3,4,5,6,7,8,9,14,16 and 17 are output
              pins.

              x:  Pins  1,10,11,12,13,14,15,16  and  17 are input pins and pins 2,3,4,5,6,7,8,9 are output pins.
              (See USAGE section.)

PARAMETERS

       parport.<p>.pin-<n>-out-invert (bit)
              Inverts an output pin.

       parport.<p>.pin-<n>-out-reset (bit)
              (only for out pins) TRUE if this pin should be reset when the .reset function is executed.

       parport.<p>.reset-time' (U32)
              The time (in nanoseconds) between a pin is set by write and reset by the reset function if  it  is
              enabled.

FUNCTIONS

       parport.<p>.read(funct)
              Reads physical input pins of port <portnum> and updates HAL -in and -in-not pins.

       parport.read-all (funct)
              Reads physical input pins of all ports and updates HAL -in and -in-not pins.

       parport.<p>.write (funct)
              Reads HAL -out pins of port <p> and updates that port's physical output pins.

       parport.write-all (funct)
              Reads HAL -out pins of all ports and updates all physical output pins.

       parport.<p>.reset (funct)
              Waits  until  reset-time  has  elapsed  since  the  associated  write,  then resets pins to values
              indicated by -out-reset and -out-invert settings.  Reset must be  later  in  the  same  thread  as
              write.  'If  '-out-reset  is  TRUE,  then  the  reset  function  will  set the pin to the value of
              -out-invert.  This can be used in conjunction with stepgen's doublefreq to produce  one  step  per
              period.  The stepgen stepspace for that pin must be set to 0 to enable doublefreq.

USAGE

       The  hal_parport  component is a driver for the traditional PC parallel port.  The port has a total of 25
       physical pins of which 17 are used for signals.  The original parallel port divided those pins into three
       groups: data, control, and status.  The data group consists of 8 output pins, the control group  consists
       of 4 output pins, and the status group consists of 5 input pins.

       In  the  early  1990's, the bidirectional parallel port was introduced, which allows the data group to be
       used for output or input.  The HAL driver supports the bidirectional port, and allows the user to set the
       data group as either input or output.  If configured as out, a port provides a total of 12 outputs and  5
       inputs.  If configured as in, it provides 4 outputs and 13 inputs.

       In  some  parallel  ports, the control group pins are open collectors, which may also be driven low by an
       external gate.  On a board with open collector control pins, if configured as x, it provides  8  outputs,
       and 9 inputs.

       In some parallel ports, the control group has push-pull drivers and cannot be used as an input.

       Note: HAL and Open Collectors
              HAL  cannot  automatically determine if the x mode bidirectional pins are actually open collectors
              (OC).  If they are not, they cannot be used as inputs, and attempting to drive them  LOW  from  an
              external source can damage the hardware.

              To  determine  whether  your  port  has  open collector pins, load hal_parport in x mode.  With no
              device attached, HAL should read the pin as TRUE.  Next, insert a 470 ohm resistor from one of the
              control pins to GND.  If the resulting voltage on the control pin is close  to  0V,  and  HAL  now
              reads the pin as FALSE, then you have an OC port.  If the resulting voltage is far from 0V, or HAL
              does not read the pin as FALSE, then your port cannot be used in x mode.

              The  external  hardware  that  drives the control pins should also use open collector gates (e.g.,
              74LS05).

              On some computers, BIOS settings may affect whether x mode can be used. SPP mode is most likely to
              work.

       No other combinations are supported, and a port cannot be changed from input to output once the driver is
       installed.

       The parport driver can control up to 8 ports (defined by MAX_PORTS  in  hal_parport.c).   The  ports  are
       numbered starting at zero.

       Loading the hal_parport component

              The  hal_parport  driver  is  a real time component so it must be loaded into the real time thread
              with loadrt.  The configuration string describes the parallel ports to be used,  and  (optionally)
              their types.  If the configuration string does not describe at least one port, it is an error.

              loadrt hal_parport cfg="port [type] [port [type] ...]"

       Specifying the Port

              Numbers  below  16  refer  to  parallel ports detected by the system.  This is the simplest way to
              configure the hal_parport driver, and cooperates with the Linux parport_pc driver if it is loaded.
              A port of 0 is the first parallel port detected on the system, 1 is the next, and so on.

       Basic configuration

              This will use the first parallel port Linux detects:

                    loadrt hal_parport cfg="0"

       Using the Port Address

              Instead, the port address may be specified using the hex notation 0x then the address.

                    loadrt hal_parport cfg="0x378"

       Specifying a port Type

              For each parallel port handled by the hal_parport driver, a type can optionally be specified.  The
              type is one of in, out, epp, or x.

              If the type is not specified, the default is out.

              A  type  of  epp is the same as out, but the hal_parport driver requests that the port switch into
              EPP mode.  The hal_parport driver does not use the EPP bus protocol, but on some systems EPP  mode
              changes  the  electrical characteristics of the port in a way that may make some marginal hardware
              work better.  The Gecko G540's charge pump is known to require this on some parallel ports.

              See the Note above about mode x.

       Example with two parallel ports

              This will enable two system-detected parallel ports, the first in output mode and  the  second  in
              input mode:

                    loadrt hal_parport cfg="0 out 1 in"

       Functions single port

              You must also direct LinuxCNC to run the read and write functions.

                    addf parport.read-all base-thread
                    addf parport.write-all base-thread

       Functions multiple ports

              You can direct LinuxCNC to run the read and write functions for all the attached ports.

                    addf parport.0.read base-thread
                    addf parport.0.write base-thread

              The  individual functions are provided for situations where one port needs to be updated in a very
              fast thread, but other ports can be updated in a slower thread to save CPU time.  It  is  probably
              not a good idea to use both an -all function and an individual function at the same time.

SEE ALSO

       Parallel      Port      Driver      (Hardware      Drivers      Section      of      LinuxCNC      Docs),
       PCIParallelPortExample(HardwareExamplesSectionofLinuxCNCDocs)

AUTHOR

       This man page written by Joe Hildreth as part of the LinuxCNC project.   Most  of  this  information  was
       taken  from  the parallel-port docs located in the Hardware Drivers section of the documentation.  To the
       best of my knowledge that documentation was written by Sebastian Kuzminsky and Chris Radek.

LinuxCNC Documentation                             12 APR 2017                                    hal_parport(9)