Example #1
0
int do_printer_reset(int dev_path)
{
	int error;
#ifdef SOFT_RESET
	char *buf;
	char reset_com[] = {0x1b,0x5b,0x4b,0x04,0x00,0x00,0x0f,0x00,0x00};
	char ret_emu[] = {0x1b,0x40};
#else
	if(device_type == DEVICE_TYPE_USB || device_type == DEVICE_TYPE_1394)
		return 0;
#endif

	get_printer_sem(sem_id);

#ifdef SOFT_RESET
	if(device_type == DEVICE_TYPE_USB || device_type == DEVICE_TYPE_1394){
		buf = malloc(RESET_NULL_SIZE);
		if(buf == NULL){
			/* no RAM error */
			release_printer_sem(sem_id);
			return -1;
		}
		memset((void *)buf, 0, RESET_NULL_SIZE);
		error = write_printer_command(dev_path, buf, RESET_NULL_SIZE);
		if(!error)
			error = write_printer_command(dev_path, reset_com, 9);
		if(!error)
			error = write_printer_command(dev_path, ret_emu, 2);

		free(buf);
	}
	else
#endif
		error = p_dvacs->ptdev_ioctl(dev_path, LPRESET, 0);

	release_printer_sem(sem_id);

	return error;
}
Example #2
0
static int do_prn_com(int sm_sock_fd, lmsm_socket sm_data, int first_start)
{
	int error;
	Prcom_st ptr;
	int count;
	struct bjst_rback rback;

	ptr = &(sm_data.prn_data.com);
#ifdef DEBUG
	write_log("SM message LM_PRN_COM\n");
	write_log(ptr->com_buffer+9);
	write_log("\n");
#endif

	rback.dev_handle   = PRNT_PATH;
	rback.rback_handle = sm_sock_fd;
	rback.st_buf       = NULL; /* no request status body */

	while(1){
		error = write_printer_command(PRNT_PATH, ptr->com_buffer, ptr->com_size);
		count = status_to_viewer(&rback);
		if(error){
			if(check_signal_arrive() == 1)
				return 1; /* SIGINT/SIGTERM detect(abort) */
#ifdef DEBUG
			write_log("PRN_COM error(retry)\n");
#endif
			sleep(2); /* retry */
			continue;
		}

		/* write command until printer respond */
		if(count)
			break;
		else
			sleep(1);
	}

	if(first_start)
		kill(data_pid, SIGUSR2); /* message to output process(restart) */

	return 0;
}