s2145: Decode many of the values in the various status messages.
Also, if we get an error after printing, log it properly instead of assuming we're peachy.master
parent
924164e683
commit
20f903e166
|
@ -35,7 +35,7 @@
|
|||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
|
||||
#define VERSION "0.04"
|
||||
#define VERSION "0.05"
|
||||
#define URI_PREFIX "shinko_s2145://"
|
||||
|
||||
#include "backend_common.c"
|
||||
|
@ -124,6 +124,55 @@ struct s2145_print_cmd {
|
|||
uint8_t method;
|
||||
} __attribute__((packed));
|
||||
|
||||
#define PRINT_MEDIA_4x6 0x00
|
||||
#define PRINT_MEDIA_5x3_5 0x01
|
||||
#define PRINT_MEDIA_5x7 0x03
|
||||
#define PRINT_MEDIA_6x9 0x05
|
||||
#define PRINT_MEDIA_6x8 0x06
|
||||
#define PRINT_MEDIA_2x6 0x07
|
||||
|
||||
static char *print_medias[] = {
|
||||
"4x6",
|
||||
"5x3.5",
|
||||
"Unused",
|
||||
"5x7",
|
||||
"Unused",
|
||||
"6x9",
|
||||
"6x8",
|
||||
"2x6"
|
||||
};
|
||||
|
||||
#define PRINT_MODE_DEFAULT 0x01
|
||||
#define PRINT_MODE_STD_GLOSSY 0x02
|
||||
#define PRINT_MODE_FINE_GLOSSY 0x03
|
||||
#define PRINT_MODE_STD_MATTE 0x04
|
||||
#define PRINT_MODE_FINE_MATTE 0x05
|
||||
#define PRINT_MODE_STD_EGLOSSY 0x06
|
||||
#define PRINT_MODE_FINE_EGLOSSY 0x07
|
||||
|
||||
static char *print_modes[] = {
|
||||
"Unused",
|
||||
"Default",
|
||||
"Std Glossy",
|
||||
"Fine Glossy",
|
||||
"Std Matte",
|
||||
"Fine Matte",
|
||||
"Std ExGlossy",
|
||||
"Fine ExGlossy"
|
||||
};
|
||||
|
||||
#define PRINT_METHOD_STD 0x00
|
||||
#define PRINT_METHOD_4x6_2UP 0x02
|
||||
#define PRINT_METHOD_2x6_2UP 0x04
|
||||
|
||||
static char *print_methods[] = {
|
||||
"Standard",
|
||||
"Unused",
|
||||
"4x6 2up",
|
||||
"Unused",
|
||||
"2x6 2up",
|
||||
};
|
||||
|
||||
struct s2145_cancel_cmd {
|
||||
struct s2145_cmd_hdr hdr;
|
||||
uint8_t id;
|
||||
|
@ -163,6 +212,17 @@ struct s2145_fwinfo_cmd {
|
|||
#define FWINFO_TARGET_USB_APP 0x06
|
||||
#define FWINFO_TARGET_TABLES 0x07
|
||||
|
||||
static char *fwinfo_targets[] = {
|
||||
"Unused",
|
||||
"Main Boot",
|
||||
"Main App",
|
||||
"DSP Boot",
|
||||
"DSP App",
|
||||
"USB Boot",
|
||||
"USB App",
|
||||
"Tables"
|
||||
};
|
||||
|
||||
struct s2145_update_cmd {
|
||||
struct s2145_cmd_hdr hdr;
|
||||
uint8_t target;
|
||||
|
@ -198,6 +258,22 @@ struct s2145_status_hdr {
|
|||
#define ERROR_PRINTER 0x11
|
||||
#define ERROR_BUFFER_FULL 0x21
|
||||
|
||||
/* XXX observed major/minor error codes:
|
||||
|
||||
0x01/0x16 @ 77845 [maybe paper out?]
|
||||
0x06/0x0b @ 77822, 70053
|
||||
0x05/0x64 @ 76034
|
||||
0x05/0x61 @ 76034, 75420
|
||||
0x05/0x62 @ 76034
|
||||
0x05/0x4e @ 69824, 69820, 69781
|
||||
|
||||
Unfortunately I have no idea what these refer to.
|
||||
|
||||
major (0x01/5/6) may refer to above error codes or media/print modes.
|
||||
minor (0x61/62/64) may refer to equivalent status codes (see below)
|
||||
|
||||
*/
|
||||
|
||||
#define STATUS_READY 0x00
|
||||
#define STATUS_INIT_CPU 0x31
|
||||
#define STATUS_INIT_RIBBON 0x32
|
||||
|
@ -246,6 +322,22 @@ struct s2145_status_resp {
|
|||
#define BANK_STATUS_XFER 0x01
|
||||
#define BANK_STATUS_FULL 0x02
|
||||
|
||||
static char *bank_statuses[] = {
|
||||
"Free",
|
||||
"Xfer",
|
||||
"Full",
|
||||
};
|
||||
|
||||
#define TONECURVE_STATUS_INIT 0x00
|
||||
#define TONECURVE_STATUS_USER 0x01
|
||||
#define TONECURVE_STATUS_CURRENT 0x02
|
||||
|
||||
static char *tonecurve_statuses[] = {
|
||||
"Initial",
|
||||
"UserSet",
|
||||
"Current",
|
||||
};
|
||||
|
||||
struct s2145_readtone_resp {
|
||||
struct s2145_status_hdr hdr;
|
||||
uint8_t blocks_remain;
|
||||
|
@ -262,6 +354,14 @@ struct s2145_mediainfo_item {
|
|||
uint8_t reserved[3];
|
||||
} __attribute__((packed));
|
||||
|
||||
#define MEDIA_TYPE_UNKNOWN 0x00
|
||||
#define MEDIA_TYPE_PAPER 0x01
|
||||
|
||||
static char *media_types[] = {
|
||||
"Unknown",
|
||||
"Paper"
|
||||
};
|
||||
|
||||
struct s2145_mediainfo_resp {
|
||||
struct s2145_status_hdr hdr;
|
||||
uint8_t count;
|
||||
|
@ -383,19 +483,21 @@ static int get_status(libusb_device_handle *dev,
|
|||
INFO("\tCutter:\t\t\t%08d\n", le32_to_cpu(resp.count_cutter));
|
||||
INFO("\tPrint Head:\t\t%08d\n", le32_to_cpu(resp.count_head));
|
||||
INFO("\tRibbon Remaining:\t%08d\n", le32_to_cpu(resp.count_ribbon_left));
|
||||
INFO("Bank 1: Job %03d @ %03d/%03d (%03d remaining)\n",
|
||||
INFO("Bank 1: 0x%02x (%s) Job %03d @ %03d/%03d (%03d remaining)\n",
|
||||
resp.bank1_status, bank_statuses[resp.bank1_status],
|
||||
resp.bank1_printid,
|
||||
le16_to_cpu(resp.bank1_remaining),
|
||||
le16_to_cpu(resp.bank1_finished),
|
||||
le16_to_cpu(resp.bank1_specified));
|
||||
|
||||
INFO("Bank 2: Job %03d @ %03d/%03d (%03d remaining)\n",
|
||||
INFO("Bank 2: 0x%02x (%s) Job %03d @ %03d/%03d (%03d remaining)\n",
|
||||
resp.bank2_status, bank_statuses[resp.bank1_status],
|
||||
resp.bank2_printid,
|
||||
le16_to_cpu(resp.bank2_remaining),
|
||||
le16_to_cpu(resp.bank2_finished),
|
||||
le16_to_cpu(resp.bank2_specified));
|
||||
|
||||
INFO("Tonecurve Status: 0x%02x\n", resp.tonecurve_status);
|
||||
INFO("Tonecurve Status: 0x%02x (%s)\n", resp.tonecurve_status, tonecurve_statuses[resp.tonecurve_status]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -442,32 +544,7 @@ static int get_fwinfo(libusb_device_handle *dev,
|
|||
if (le16_to_cpu(resp.hdr.payload_len) != (sizeof(struct s2145_fwinfo_resp) - sizeof(struct s2145_status_hdr)))
|
||||
continue;
|
||||
|
||||
char *s;
|
||||
switch (i) {
|
||||
case 1:
|
||||
s = "Main Boot";
|
||||
break;
|
||||
case 2:
|
||||
s = "Main App";
|
||||
break;
|
||||
case 3:
|
||||
s = "DSP Boot";
|
||||
break;
|
||||
case 4:
|
||||
s = "DSP App";
|
||||
break;
|
||||
case 5:
|
||||
s = "USB Boot";
|
||||
break;
|
||||
case 6:
|
||||
s = "USB App";
|
||||
break;
|
||||
case 7:
|
||||
s = "Parameter Table";
|
||||
break;
|
||||
}
|
||||
|
||||
INFO(" '%s' version %02x.%02x\n", s,
|
||||
INFO(" '%s'\t ver %02x.%02x\n", fwinfo_targets[i],
|
||||
resp.major, resp.minor);
|
||||
#if 0
|
||||
INFO(" name: '%s'\n", resp.name);
|
||||
|
@ -567,11 +644,12 @@ static int get_mediainfo(libusb_device_handle *dev,
|
|||
|
||||
INFO("Supported Media Information: %d entries:\n", resp.count);
|
||||
for (i = 0 ; i < resp.count ; i++) {
|
||||
INFO(" %02d: C 0x%02x, %04dx%04d, M 0x%02x, P 0x%02x\n", i,
|
||||
resp.items[i].code, le16_to_cpu(resp.items[i].columns),
|
||||
INFO(" %02d: C 0x%02x (%s), %04dx%04d, M 0x%02x (%s), P 0x%02x (%s)\n", i,
|
||||
resp.items[i].code, print_medias[resp.items[i].code],
|
||||
le16_to_cpu(resp.items[i].columns),
|
||||
le16_to_cpu(resp.items[i].rows),
|
||||
resp.items[i].media_type,
|
||||
resp.items[i].print_type);
|
||||
resp.items[i].media_type, media_types[resp.items[i].media_type],
|
||||
resp.items[i].print_type, print_methods[resp.items[i].print_type]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -1156,12 +1234,6 @@ top:
|
|||
print->mode = le32_to_cpu(hdr.mode);
|
||||
print->method = le32_to_cpu(hdr.method);
|
||||
|
||||
DEBUG("printcmd: ");
|
||||
for (i = 0 ; i < sizeof(*print) ; i++) {
|
||||
DEBUG2("%02x ", cmdbuf[i]);
|
||||
}
|
||||
DEBUG2("\n");
|
||||
|
||||
if ((ret = send_data(dev, endp_down,
|
||||
(uint8_t *) print, sizeof(*print))))
|
||||
goto done_claimed;
|
||||
|
@ -1186,7 +1258,11 @@ top:
|
|||
break;
|
||||
case S_PRINTER_SENT_DATA:
|
||||
INFO("Waiting for printer to acknowledge completion\n");
|
||||
state = S_FINISHED;
|
||||
if (sts->hdr.result != RESULT_SUCCESS)
|
||||
goto printer_error;
|
||||
if (sts->hdr.status == STATUS_READY ||
|
||||
sts->hdr.status == STATUS_FINISHED)
|
||||
state = S_FINISHED;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue