diff --git a/README.TXT b/README.TXT index 2445294..9bb2a27 100644 --- a/README.TXT +++ b/README.TXT @@ -50,7 +50,7 @@ cp selphy_print_libusb /usr/lib/cups/backend/selphy chown root:root /usr/lib/cups/backend/selphy - chmod 500 /usr/lib/cups/backend/selphy + chmod 700 /usr/lib/cups/backend/selphy You may need to restart CUPS, and you will also need a prerelease version of gutenprint installed. diff --git a/es_print_common.h b/es_print_common.h index c36b5da..0f34b05 100644 --- a/es_print_common.h +++ b/es_print_common.h @@ -25,7 +25,7 @@ * */ -#define VERSION "0.30" +#define VERSION "0.32" #define DEBUG( ... ) fprintf(stderr, "DEBUG: " __VA_ARGS__ ) #define ERROR( ... ) fprintf(stderr, "ERROR: " __VA_ARGS__ ) @@ -56,6 +56,7 @@ struct printer_data { int16_t ready_m_readback[READBACK_LEN]; int16_t ready_c_readback[READBACK_LEN]; int16_t done_c_readback[READBACK_LEN]; + int16_t error_readback[READBACK_LEN]; int16_t paper_codes[256]; int16_t pgcode_offset; /* Offset into printjob for paper type */ int16_t paper_code_offset; /* Offset in readback for paper type */ @@ -82,6 +83,7 @@ struct printer_data printers[P_END] = { .ready_m_readback = { 0x04, 0x00, 0x03, 0x00, 0x02, 0x01, -1, 0x01, 0x00, 0x00, 0x00, 0x00 }, .ready_c_readback = { 0x04, 0x00, 0x07, 0x00, 0x02, 0x01, -1, 0x01, 0x00, 0x00, 0x00, 0x00 }, .done_c_readback = { 0x04, 0x00, 0x00, 0x00, 0x02, 0x01, -1, 0x01, 0x00, 0x00, 0x00, 0x00 }, + // .error_readback // .paper_codes .pgcode_offset = 3, .paper_code_offset = 6, @@ -95,6 +97,7 @@ struct printer_data printers[P_END] = { .ready_m_readback = { 0x06, 0x00, 0x03, 0x00, -1, 0x00, -1, -1, 0x00, 0x00, 0x00, 0x00 }, .ready_c_readback = { 0x09, 0x00, 0x07, 0x00, -1, 0x00, -1, -1, 0x00, 0x00, 0x00, 0x00 }, .done_c_readback = { 0x09, 0x00, 0x00, 0x00, -1, 0x00, -1, -1, 0x00, 0x00, 0x00, 0x00 }, + .error_readback = { 0x14, 0x00, -1, 0x00, -1, 0x00, -1, 0x00, -1, 0x00, 0x00, 0x00 }, // .paper_codes .pgcode_offset = 2, .paper_code_offset = 4, @@ -108,6 +111,7 @@ struct printer_data printers[P_END] = { .ready_m_readback = { 0x03, 0xff, 0x02, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }, .ready_c_readback = { 0x05, 0xff, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }, .done_c_readback = { 0x00, 0xff, 0x10, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }, + // .error_readback // .paper_codes .pgcode_offset = -1, .paper_code_offset = -1, @@ -121,6 +125,7 @@ struct printer_data printers[P_END] = { // .ready_m_readback = // .ready_c_readback = // .done_c_readback = + // .error_readback // .paper_codes .pgcode_offset = 2, // .paper_code_offset = -1, @@ -134,6 +139,7 @@ struct printer_data printers[P_END] = { .ready_m_readback = { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -1, 0x00, 0x00, 0x00, 0x00, -1 }, .ready_c_readback = { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, -1, 0x00, 0x00, 0x00, 0x00, -1 }, .done_c_readback = { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, -1, 0x00, 0x00, 0x00, 0x00, -1 }, + .error_readback = { 0x02, 0x00, 0x08, 0x00, 0x70, 0x00, -1, 0x00, 0x00, 0x00, 0x00, -1 }, // .paper_codes .pgcode_offset = 3, .paper_code_offset = 6, @@ -147,6 +153,8 @@ struct printer_data printers[P_END] = { .ready_m_readback = { 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, -1, 0x00, 0x00, 0x00, 0x00, -1 }, .ready_c_readback = { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, -1, 0x00, 0x00, 0x00, 0x00, -1 }, .done_c_readback = { 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, -1, 0x00, 0x00, 0x00, 0x00, -1 }, + .error_readback = { 0x02, 0x00, 0x08, 0x00, 0x70, 0x00, -1, 0x00, 0x00, 0x00, 0x00, -1 }, + // .error_readback // .paper_codes .pgcode_offset = 3, .paper_code_offset = 6, diff --git a/es_print_libusb.c b/es_print_libusb.c index 531a678..7a39db1 100644 --- a/es_print_libusb.c +++ b/es_print_libusb.c @@ -428,6 +428,12 @@ top: } fflush(stderr); + if (!memcmp(rdbuf, printers[printer_type].error_readback, READBACK_LEN)) { + DEBUG("error condition; aborting. (Out of ribbon/paper?)\n"); + ret = 4; + goto done_claimed; + } + switch(state) { case S_IDLE: if (!fancy_memcmp(rdbuf, printers[printer_type].init_readback, READBACK_LEN, paper_code_offset, paper_code)) { diff --git a/es_print_linux.c b/es_print_linux.c index 8677875..1e33094 100644 --- a/es_print_linux.c +++ b/es_print_linux.c @@ -172,6 +172,11 @@ top: } fflush(stderr); + if (!memcmp(rdbuf, printers[printer_type].error_readback, READBACK_LEN)) { + DEBUG("error condition; aborting. (Out of ribbon/paper?)\n"); + return 4; + } + switch(state) { case S_IDLE: if (!fancy_memcmp(rdbuf, printers[printer_type].init_readback, READBACK_LEN, paper_code_offset, paper_code)) {