IEEE1284_CONTROL(3) | Functions | IEEE1284_CONTROL(3) |
ieee1284_read_control, ieee1284_write_control, ieee1284_frob_control, ieee1284_do_nack_handshake - manipulate control lines
#include <ieee1284.h>
int ieee1284_read_control(struct parport *port);
void ieee1284_write_control(struct parport *port, unsigned char ct);
void ieee1284_frob_control(struct parport *port, unsigned char mask, unsigned char val);
int ieee1284_do_nack_handshake(struct parport *port, unsigned char ct_before, unsigned char ct_after, struct timeval *timeout);
There are four control lines, three of which are usually inverted on PC-style ports. Where they differ, libieee1284 operates on the IEEE 1284 values, not the PC-style inverted values. The control lines are represented by the following enumeration:
enum ieee1284_control_bits {
C1284_NSTROBE = 0x01,
C1284_NAUTOFD = 0x02,
C1284_NINIT = 0x04,
C1284_NSELECTIN = 0x08,
/* To convert those values into PC-style register values, use this: */
C1284_INVERTED = (C1284_NSTROBE|
C1284_NAUTOFD|
C1284_NSELECTIN), };
These functions all act on the parallel port associated with port, which must be claimed.
The current values on the control lines are available by calling ieee1284_read_control, and may be set by calling ieee1284_write_control.
To adjust the values on a set of control lines, use ieee1284_frob_control. The effect of this can be expressed by: ctr = ((ctr & ~mask) ^ val); that is, the bits in mask are unset, and then those in val are inverted.
The special function ieee1284_do_nack_handshake is for responding very quickly in a protocol where the peripheral sets nAck and the host must respond by setting a control line. Its operation, which relies on the host machine knowing which interrupt nAck generates, is as follows:
On Linux using the ppdev driver, this is performed by the device driver in the kernel, and so is faster than normally possible in a user-space library.
The return value of ieee1284_read_control, if non-negative, is a number representing the value on the control lines.
Possible error codes for ieee1284_read_control:
E1284_NOTAVAIL
E1284_INVALIDPORT
Possible error codes for ieee1284_do_nack_handshake:
E1284_OK
E1284_NOTAVAIL
E1284_INVALIDPORT
Tim Waugh <twaugh@redhat.com>
Copyright © 2001-2003 Tim Waugh
09/18/2007 |