Provided by: linuxcnc-uspace_2.9.0~pre1+git20230208.f1270d6ed7-1_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.