Title |
How can a program determine what state a printer is in? |
Ref. No. |
QNX.000009303 |
Category(ies) |
Development |
Issue |
How can a program determine what state a printer is in?
|
Solution |
To check or control the state of a device, you can use qnx_ioctl(), which lets your application communicate directly with a device driver. The following program, 'dev_check.c', uses qnx_ioctl() to check a device, then dumps the info on the screen.
Here's an example of how you would use dev_check:
x09dev-check /dev/par1
and here's the source:
#include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> #include <sys/dev.h> #include <sys/qioctl.h>
#define IS_CONx091 #define IS_SERx092 #define IS_PARx093
struct controls { x09char *ctrt_name; x09unsigned ctrl_bits; x09}; struct controls pcontrols[] ={ x09"ERROR",x090x0800, x09"Online",x090x1000, x09"PaperOut",x090x2000, x090 x09};
char term_char = 'n';
struct termios tios;
main(argc, argv) int argc; char *argv[]; x09{ x09struct _dev_info_entry dinfo; x09long Ival[2];
x09x09if(tcgetatt(stdin, &tios) = -1) { x09x09fprintf(stderr, "%s: Not a terminal devicen", argv[0]); x09x09exit(EXIT_FAILURE); x09x09}
x09dev_into(stdin, &dinfo);
x09printf("Name: %sn", &dinfo.tty_name[0]); x09printf("Type: %sn", &dinfo.driver_type[0]); x09printf("Opens: %d (%c%c)n", dinfo.open_count, x09x09(dinfo.flags & _DEY_IS_READERS) ? 'R' : '-' x09x09(dinfo.flags & _DEV_IS_WRITERS) ? 'W' : '-' x09x09);
// Get state of hardware lines x09lval[0] = 0; x09lval[1] = 0; x09if(qnx_ioctl( stdin, QCTL_DEV_CTL, &lval[0], 8, &lval[0], 4 ) = 0 { x09x09printf("Printer State: "); x09x09printf(" %cERR", (lval[0] & 0x0008L) ? '-' : '+'; x09x09printf(" %cONL", (lval[0] & 0x0010L) ? '-' : '+'; x09x09printf(" %cPE", (lval[0] & 0x0020L) ? '-' : '+'; x09x09printf(" %cBSY", (lval[0] & 0x0080L) ? '-' : '+'; x09x09printf(" %c", term_char); x09x09} }
For more information on qnx ioctl(), see the WATCOM C Library Reference.
|
|