Как узнать когда принтер закончит печатать?
Определяю состояние принтера и вывожу в него текст примерно вот так:
#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+.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Перенос программы на ioperm под cygwin. (2004)
- Форум Про удержание клавиши 2. Траблы :( (2006)
- Форум non-blocking write (2011)
- Форум FIFO,write,read (2017)
- Форум Segmentation fault core dumped (2022)
- Форум pthread (2008)
- Форум Семафоры (2005)
- Форум Именованный канал на с++ (2012)
- Форум Подскажите, как завершить передачу для последовательного порта. (2012)
- Форум ideapad. Нашёл способ управления зарядом батареи. (2014)