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; }
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; }