LINUX.ORG.RU

завершение печати


0

0

Как узнать когда принтер закончит печатать?
Определяю состояние принтера и вывожу в него текст примерно вот так:
#include <stdio.h>
#include <sys/io.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>

#define LP0_DATA 0x378
/*
бит 3 соответсвует сигналу ERROR
бит 4 - сигналу РЕ
бит 7 - сигналу BUSY
*/
#define BIT_LPT_ERR 0x08
#define BIT_LPT_PE 0x20
#define BIT_LPT_BUSY 0x80

int printer_status(int st)
{
printf("статус принтера = 0x%X\n",st);
if((st&BIT_LPT_ERR)==0)/*ошибка*/
{
if((st&BIT_LPT_PE)!=0)
printf("\tнет бумаги\n");
else printf("\tошибка\n");
}
/*если нет ошибки и есть бит PE*/
else if((st&BIT_LPT_PE)!=0)
printf("\tвыключен\n");
else if((st&BIT_LPT_BUSY)==0)/*занят*/
printf("\tзанят\n");
else
{
printf("\tготов к работе\n");
return 0;
}
return -1;
}

int main(void)
{
const char *text;
int st,iDevId;

text="print test text\n";
iDevId=open("/dev/lp0",O_WRONLY);
if(iDevId==-1)exit(-1);
if(ioperm(LP0_DATA,2,1)==-1)exit(-1);
usleep(100000);
st=inb(LP0_DATA+1);
ioperm(LP0_DATA,2,0);
if(printer_status(st)==0)
write(iDevId,text,strlen(text));
return 0;
}
нужно еще отслеживать (хотя бы примерно) когда весь записанный в буффер принтера текст будет распечатан.
PS по ТЗ будет использоваться только принтер Epson LX 300+.


чтото подобное я делаю для ком порта

#define BASEPORT_COM1 0x3F8

ioperm(BASEPORT_COM1,6,1);
ret=inb(BASEPORT_COM1+5);/*0x3FD или 0x2FD*/
ioperm(BASEPORT_COM1,6,0);
if(ret!=0)printf("вывод завершен\n");
Но с принтером врядли это прокатит.

CL
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.