bpp man page on OpenIndiana

Man page or keyword search:  
man Server   20441 pages
apropos Keyword Search (all sections)
Output format
OpenIndiana logo
[printable version]

bpp(7D)				    Devices			       bpp(7D)

NAME
       bpp - bi-directional parallel port driver

SYNOPSIS
       SUNW,bpp@slot,offset:bppn

DESCRIPTION
       The  bpp	 driver provides a general-purpose bi-directional interface to
       parallel devices. It supports a variety of output (printer)  and	 input
       (scanner)  devices, using programmable timing relationships between the
       various handshake signals.

APPLICATION PROGRAMMING INTERFACE
       The bpp driver is an  exclusive-use device. If the device  has  already
       been opened, subsequent opens fail with	EBUSY.

   Default Operation
       Each  time  the	 bpp  device  is  opened, the default configuration is
       BPP_ACK_BUSY_HS for read handshake, BPP_ACK_HS for write	 handshake,  1
       microsecond  for	 all setup times and strobe widths, and 60 seconds for
       both timeouts. This configuration (in the write mode) drives many  com‐
       mon  personal  computer	parallel  printers with Centronics-type inter‐
       faces. The application should use the  BPPIOC_SETPARMS ioctl request to
       configure  the bpp for the particular device which is attached, if nec‐
       essary.

   Write Operation
       If a failure or error condition occurs during a write(2), the number of
       bytes  successfully  written is returned (short write). Note that errno
       will not be set. The contents of certain status bits will  be  captured
       at  the time of the error, and can be retrieved by the application pro‐
       gram, using the BPPIOC_GETERR ioctl request. Subsequent write(2)	 calls
       may  fail  with	the  system error  ENXIO if the error condition is not
       rectified. The captured status information  will	 be  overwritten  each
       time an attempted transfer or a BPPIOC_TESTIO ioctl request occurs.

   Read Operations
       If  a failure or error condition occurs during a read(2), the number of
       bytes successfully read is returned (short read). Note that errno  will
       not be set. The contents of certain status bits will be captured at the
       time of the error, and can be retrieved by the application,  using  the
       BPPIOC_GETERR  ioctl  request.  Subsequent  read(2) calls may fail with
       ENXIO if the error condition is not rectified.  The  captured  register
       information  will  be  overwritten each time an attempted transfer or a
       BPPIOC_TESTIO ioctl request.

       If the  read_handshake element  of  the	 bpp_transfer_parms  structure
       (see  below)  is	 set  to BPP_CLEAR_MEM or BPP_SET_MEM, zeroes or ones,
       respectively, are written into the user buffer.

   Read/Write Operation
       When the driver is opened for reading and writing, it is	 assumed  that
       scanning will take place, as scanners are the only devices supported by
       this mode. Most scanners require that the  SLCT_IN or AFX pin be set to
       tell  the  scanner  the direction of the transfer. The  AFX line is set
       when the	 read_handshake element of the bpp_transfer_parms structure is
       set  to BPP_HSCAN_HS, otherwise the SLCT_IN pin is set. Normally, scan‐
       ning starts by writing a command to the scanner, at which time the  pin
       is set.	When the scan data is read back, the pin is reset.

IOCTLS
       The following  ioctl requests are supported:

       BPPIOC_SETPARMS	    Set transfer parameters.

			    The argument is a pointer to a  bpp_transfer_parms
			    structure. See below for a description of the ele‐
			    ments  of this structure. If a parameter is out of
			    range, EINVAL is returned.

       BPPIOC_GETPARMS	    Get current transfer parameters.

			    The argument is a pointer to a  bpp_transfer_parms
			    structure. See below for a description of the ele‐
			    ments of this structure.  If  no  parameters  have
			    been  configured  since the device was opened, the
			    contents of the structure will be the default con‐
			    ditions  of	 the parameters (see Default Operation
			    above).

       BPPIOC_SETOUTPINS    Set output pin values.

			    The argument is a pointer to  a   bpp_pins	struc‐
			    ture.  See below for a description of the elements
			    of this structure. If a parameter is out of range,
			    EINVAL is returned.

       BPPIOC_GETOUTPINS    Read  output pin values. The argument is a pointer
			    to a  bpp_pins structure. See below for a descrip‐
			    tion of the elements of this structure.

       BPPIOC_GETERR	    Get last error status.

			    The	 argument  is  a pointer to a bpp_error_status
			    structure. See below for a description of the ele‐
			    ments  of this structure. This structure indicates
			    the status of all the appropriate  status bits  at
			    the time of the most recent error condition during
			    a read(2) or write(2) call, or the status  of  the
			    bits  at  the  most	 recent	  BPPIOC_TESTIO	 ioctl
			    request. Note:  The bits in the   pin_status  ele‐
			    ment   indicate  whether  the  associated  pin  is
			    active, not the actual polarity.  The  application
			    can	 check	transfer  readiness without attempting
			    another transfer using the	 BPPIOC_TESTIO	ioctl.
			    Note:   The	 timeout_occurred and bus_error fields
			    will never be set  by  the	 BPPIOC_TESTIO	ioctl,
			    only by an actual failed transfer.

       BPPIOC_TESTIO	    Test transfer readiness.

			    This  command  checks  to  see  if a read or write
			    transfer would succeed based on pin status, opened
			    mode, and handshake selected. If a handshake would
			    succeed,  0 is returned. If a transfer would fail,
			    -1	is  returned, and errno is set to EIO, and the
			    error status information is captured. The captured
			    status  can	 be  retrieved using the BPPIOC_GETERR
			    ioctl call.	 Note that  the	 timeout_occurred  and
			    bus_error fields will never be set by this ioctl.

   Transfer Parameters Structure
       This structure is defined in  <sys/bpp_io.h>.

	 struct bpp_transfer_parms {
	     enum  handshake_t
		  read_handshake;      /* parallel port read handshake mode */
	     int  read_setup_time;    /* DSS register - in nanoseconds */
	     int  read_strobe_width;  /* DSW register - in nanoseconds */
	     int  read_timeout;	      /*
				       * wait this many seconds
				       * before aborting a transfer
				      */
	     enum  handshake_t
		  write_handshake;	/* parallel port write handshake mode */
	     int  write_setup_time;    /* DSS register - in nanoseconds */
	     int  write_strobe_width;  /* DSW register - in nanoseconds */
	     int  write_timeout;       /*
					* wait this many seconds
					* before aborting a transfer
				       */
	 };
	 /* Values for read_handshake and write_handshake fields */
	     enum  handshake_t {
		 BPP_NO_HS,	       /* no handshake pins */
		 BPP_ACK_HS,	       /* handshake controlled by ACK line */
		 BPP_BUSY_HS,	       /* handshake controlled by BSY line */
		 BPP_ACK_BUSY_HS,      /*
					* handshake controlled by ACK and BSY lines
					* read_handshake only!
				       */
		 BPP_XSCAN_HS,	       /* xerox scanner mode,
					* read_handshake only!
					   */
		 BPP_HSCAN_HS,	       /*
					* HP scanjet scanner mode
					* read_handshake only!
				       */
		 BPP_CLEAR_MEM,	       /* write 0's to memory,
					* read_handshake only!
				       */
		 BPP_SET_MEM,	       /* write 1's to memory,
					* read_handshake only!
				       */
	      /* The following handshakes are RESERVED. Do not use. */
		 BPP_VPRINT_HS,	       /* valid only in read/write mode */
		 BPP_VPLOT_HS	       /* valid only in read/write mode */
	 };

       The  read_setup_time field controls the time between dstrb falling edge
       to bsy rising edge if the  read_handshake field is set to BPP_NO_HS  or
       BPP_ACK_HS. It controls the time between dstrb falling edge to ack ris‐
       ing  edge  if  the  read_handshake  field  is  set  to	BPP_ACK_HS  or
       BPP_ACK_BUSY_HS. It controls the time between ack falling edge to dstrb
       rising edge if the read_handshake field is set to BPP_XSCAN_HS.

       The  read_strobe_width field controls the time between ack rising  edge
       and ack falling edge if the read_handshake field is set to BPP_NO_HS or
       BPP_ACK_BUSY_HS. It controls the time  between  dstrb  rising  edge  to
       dstrb falling edge if the read_handshake field is set to	 BPP_XSCAN_HS.

       The  values allowed for the write_handshake field are duplicates of the
       definitions for the read_handshake field. Note that some of these hand‐
       shake definitions are only valid in one mode or the other.

       The   write_setup_time  field  controls	the time between data valid to
       dstrb rising edge for all values of the	write_handshake field.

       The  write_strobe_width field controls the time	between	 dstrb	rising
       edge  and dstrb falling edge if the write_handshake field is not set to
       BPP_VPRINT_HS or BPP_VPLOT_HS. It controls  the	minimum	 time  between
       dstrb rising edge to dstrb falling edge if the write_handshake field is
       set to  BPP_VPRINT_HS or BPP_VPLOT_HS.

   Transfer Pins Structure
       This structure is defined in <sys/bpp_io.h>.

	 struct	 bpp_pins {
	     uchar_t  output_reg_pins;	/* pins in P_OR register */
	     uchar_t  input_reg_pins;	/* pins in P_IR register */
	 };

	 /* Values for output_reg_pins field */
	 #define BPP_SLCTIN_PIN	 0x01  /* Select in pin */
	 #define BPP_AFX_PIN	 0x02  /* Auto feed pin */
	 #define BPP_INIT_PIN	 0x04  /* Initialize pin */
	 #define BPP_V1_PIN	 0x08  /* reserved pin 1 */
	 #define BPP_V2_PI	 0x10  /* reserved pin 2 */
	 #define BPP_V3_PIN	 0x20  /* reserved pin 3 */
	 #define BPP_ERR_PIN	 0x01  /* Error pin */
	 #define BPP_SLCT_PIN	 0x02  /* Select pin */
	 #define BPP_PE_PIN	 0x04  /* Paper empty pin */

   Error Pins Structure
       This structure is defined in the include file <sys/bpp_io.h>.

	 struct bpp_error_status {
	      char timeout_occurred;   /* 1 if a timeout occurred */
	      char bus_error;	  /* 1 if an SBus bus error */
	      uchar_t pin_status; /*
			 * status of pins which could
			 * cause an error
			 */
	 };
	 /* Values for pin_status field */
	 #define BPP_ERR_ERR	0x01   /* Error pin active */
	 #define BPP_SLCT_ERR	0x02   /* Select pin active */
	 #define BPP_PE_ERR	0x04   /* Paper empty pin active */
	 #define BPP_SLCTIN_ERR 0x10   /* Select in pin active	*/
	 #define BPP_BUSY_ERR	0x40   /* Busy pin active */

ERRORS
       EBADF	 The device is opened for write-only  access  and  a  read  is
		 attempted, or the device is opened for read-only access and a
		 write is attempted.

       EBUSY	 The device has been opened and another open is attempted.  An
		 attempt  has  been made to unload the driver while one of the
		 units is open.

       EINVAL	 A BPPIOC_SETPARMS ioctl is attempted with  an	out  of	 range
		 value	in the bpp_transfer_parms structure. A	BPPIOC_SETOUT‐
		 PINS ioctl is attempted with an invalid  value	 in  the  pins
		 structure.  An	  ioctl	 is attempted with an invalid value in
		 the command argument. An invalid command argument is received
		 during modload(1M) or modunload(1M).

       EIO	 The  driver  encountered an SBus bus error when attempting an
		 access.

		 A read or write does not complete properly, due to a  periph‐
		 eral error or a transfer timeout.

		 A  BPPIOC_TESTIO  ioctl  call	is attempted while a condition
		 exists which would prevent a transfer (such as	 a  peripheral
		 error).

       ENXIO	 The driver has received an open request for a	unit for which
		 the attach failed. The driver has received a  read  or	 write
		 request  for  a  unit number greater than the number of units
		 available. The driver has received a write request for a unit
		 which has an active peripheral error.

FILES
       /dev/bppn    bi-directional parallel port devices

SEE ALSO
       ioctl(2), read(2), write(2), sbus(4)

SunOS 5.11			  22 Aug 1994			       bpp(7D)
[top]

List of man pages available for OpenIndiana

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net