#include <ieee1284.h>
daisy should be -1 to indicate that the device is not participating in a IEEE 1284.3 daisy chain, meaning it is the last (or only) device on the port, or should be a number from 0 to 3 inclusive to indicate that it has the specified daisy chain address (0 is next to the port).
The flags parameter should be a bitwise union of any flags that the program wants to use. Available flags are:
F1284_FRESH
The provided buffer must be at least len bytes long, and will contain the Device ID including the initial two-byte length field and a terminating zero byte on successful return, or as much of the above as will fit into the buffer.
A return value less than zero indicates an error as below. Otherwise, the return value is the number of bytes of buffer that have been filled. A return value equal to the length of the buffer indicates that the Device ID may be longer than the buffer will allow.
E1284_NOID
E1284_NOTIMPL
E1284_NOTAVAIL
E1284_NOMEM
E1284_INIT
E1284_INVALIDPORT
Unless the F1284_FRESH flag is given, the library will try to find the device's ID as unobtrusively as possible. First it will ask the operating system if it knows it, and then it will try actually asking the device for it. Because of this, the Device ID may be partially computed (the length field, for example) or even partially missing if the operating system has only remembered some parts of the ID. To guarantee that you are getting the bytes that the device sent, use F1284_FRESH. Be aware that the operating system may allow any user to inspect the Device IDs that it provides, whereas device access is normally more restricted.
The initial two-byte length field is a big-endian 16 bit unsigned integer provided by the device and may not be accurate. In particular, it is meant to indicate the length of the entire string including the length field itself; however, some manufacturers exclude the length field or just set the length field to some arbitrary number greater than the ID length.
Tim Waugh <twaugh@redhat.com>