mitsu70x: Fix lifetime print counter
* Figuring out a bunch of test stuff * Documentation
This commit is contained in:
parent
4a1c7804bd
commit
7ce9bcfecc
|
@ -216,16 +216,18 @@ struct mitsu70x_status_deck {
|
|||
uint8_t mecha_status[2];
|
||||
uint8_t temperature; /* D70/D80 family only, K60 no? */
|
||||
uint8_t error_status[3];
|
||||
uint8_t rsvd_a[10]; /* K60 [1] == temperature? All: [3:6] == some counter in BCD. K60 [9] == ?? */
|
||||
uint8_t rsvd_a[3]; /* K60 [1] == temperature? */
|
||||
uint8_t lifetime_prints[4];
|
||||
uint8_t rsvd_b[3]; /* K60 [3] == ?? */
|
||||
uint8_t media_brand;
|
||||
uint8_t media_type;
|
||||
uint8_t rsvd_b[2];
|
||||
uint8_t rsvd_c[2];
|
||||
int16_t capacity; /* media capacity */
|
||||
int16_t remain; /* media remaining */
|
||||
uint8_t rsvd_c[2];
|
||||
uint8_t lifetime_prints[4]; /* lifetime prints on deck + 10, in BCD! */
|
||||
uint8_t rsvd_d[2]; // Unknown
|
||||
uint16_t rsvd_e[16]; /* all 80 00 */
|
||||
uint8_t rsvd_d[2];
|
||||
uint8_t unknown_ctr[4]; /* lifetime + 10 (EK305), lifetime+41 (D80), in BCD! */
|
||||
uint8_t rsvd_e[2]; // Unknown
|
||||
uint16_t rsvd_f[16]; /* all 80 00 */
|
||||
} __attribute__((packed));
|
||||
|
||||
struct mitsu70x_status_ver {
|
||||
|
@ -259,21 +261,41 @@ struct mitsu70x_memorystatus_resp {
|
|||
uint8_t rsvd;
|
||||
} __attribute__((packed));
|
||||
|
||||
// XXX also seen commands 0x67, 0x72, 0x54, 0x6e
|
||||
struct mitsu70x_calinfo_resp { /* Interpretations valid for ASK300 */
|
||||
uint8_t hdr[6]; /* e4 6a 36 34 31 00 */
|
||||
/* Note! All values below are ASCII hex! ie 0x23 -> 0x32 0x33 */
|
||||
|
||||
uint8_t adj_horiz[2]; /* 00 -> ff */
|
||||
uint8_t unk_a[6];
|
||||
// 46 45 45 43 31 44
|
||||
|
||||
uint8_t adj_fine[4]; /* 00DC */
|
||||
uint8_t adj_m3[2]; /* -100 -> 100 (converted to hex) */
|
||||
uint8_t unk_c[28];
|
||||
// 30 30 30 30 46 46 36 34 35 35 30 30
|
||||
// 46 46 36 34 35 35 30 30 44 43 30 30 30 30 30 30
|
||||
|
||||
uint8_t adj_density[4]; /* 6800 -> 9000, def 8000 */
|
||||
uint8_t adj_24v[4]; /* 0000 -> 00FF */
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
NOTES: Other stuff seen:
|
||||
|
||||
1b 72 45 [31 32]
|
||||
1b 5a 43 00
|
||||
1b 54 53 90 00 0a 00 00 00 00 00 00 00 00 00 00
|
||||
1b 54 00 [00 31 32] <-- No resp [00 any, 31 lower, 32 upper???]
|
||||
1b 45 4a [30 31 32] <-- No resp [30 any deck, 31 is lower, 32 is upper?]
|
||||
1b 56 34 [31 32]
|
||||
1b 45 48 [30 31 32] <-- No resp [30 any deck, 31 is lower, 32 is upper?]
|
||||
1b 72 67 00 00 00
|
||||
1b 67 18 ... (??)
|
||||
1b 52 XX 00 <-- XX = something + 0x51
|
||||
1b 45 4a [30 31 32] <-- No resp [30 any deck, 31 is lower, 32 is upper?]
|
||||
1b 45 53 00 10 [ ...? ] XX XX . "set printer number"..
|
||||
1b 52 XX 00 <-- XX = something + 0x51
|
||||
1b 54 00 [00 31 32] <-- No resp [00 any, 31 lower, 32 upper???]
|
||||
1b 54 31 00 "feed and cut"
|
||||
1b 54 53 90 00 0a 00 00 00 00 00 00 00 00 00 00
|
||||
1b 56 34 [31 32]
|
||||
1b 5a 43 00
|
||||
1b 67 18 ... (??)
|
||||
1b 6a ... Various test commands
|
||||
1b 6e ... (??)
|
||||
1b 72 45 [31 32]
|
||||
1b 72 67 00 00 00
|
||||
|
||||
*/
|
||||
|
||||
|
@ -306,6 +328,7 @@ struct mitsu70x_hdr {
|
|||
} __attribute__((packed));
|
||||
|
||||
STATIC_ASSERT(sizeof(struct mitsu70x_hdr) == 512);
|
||||
STATIC_ASSERT(sizeof(struct mitsu70x_calinfo_resp) == 56);
|
||||
|
||||
static int mitsu70x_get_printerstatus(struct mitsu70x_ctx *ctx, struct mitsu70x_printerstatus_resp *resp);
|
||||
static int mitsu70x_main_loop(void *vctx, const void *vjob);
|
||||
|
@ -1315,7 +1338,7 @@ static int mitsu70x_get_printerstatus(struct mitsu70x_ctx *ctx, struct mitsu70x_
|
|||
cmdbuf[0] = 0x1b;
|
||||
cmdbuf[1] = 0x56;
|
||||
cmdbuf[2] = 0x32;
|
||||
cmdbuf[3] = 0x30; /* or x31 or x32, for SINGLE DECK query!
|
||||
cmdbuf[3] = 0x30; /* or x31 or x32, for SINGLE DECK lower/upper query!
|
||||
Results will only have one deck. */
|
||||
if ((ret = send_data(ctx->conn,
|
||||
cmdbuf, 4)))
|
||||
|
@ -1356,7 +1379,7 @@ static int mitsu70x_test_print(struct mitsu70x_ctx *ctx, int type)
|
|||
{
|
||||
uint8_t cmdbuf[14];
|
||||
int ret, num = 0;
|
||||
uint8_t resp[26];
|
||||
uint8_t resp[256];
|
||||
|
||||
/* Send Test ON */
|
||||
memset(cmdbuf, 0, 8);
|
||||
|
@ -1435,10 +1458,36 @@ static int mitsu70x_test_print(struct mitsu70x_ctx *ctx, int type)
|
|||
resp, sizeof(resp), &num); /* Get 5 back */
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* Get vertical & horizontal alignment */
|
||||
// XXX this HANGS the printer.
|
||||
static int mitsu70x_test_dump(struct mitsu70x_ctx *ctx)
|
||||
{
|
||||
uint8_t cmdbuf[14];
|
||||
int ret, num = 0;
|
||||
uint8_t resp[256];
|
||||
|
||||
/* Send Test ON */
|
||||
memset(cmdbuf, 0, 8);
|
||||
cmdbuf[0] = 0x1b;
|
||||
cmdbuf[1] = 0x76;
|
||||
cmdbuf[2] = 0x54;
|
||||
cmdbuf[3] = 0x45;
|
||||
cmdbuf[4] = 0x53;
|
||||
cmdbuf[5] = 0x54;
|
||||
cmdbuf[6] = 0x4f;
|
||||
cmdbuf[7] = 0x4e;
|
||||
if ((ret = send_data(ctx->conn,
|
||||
cmdbuf, 8)))
|
||||
return ret;
|
||||
|
||||
memset(resp, 0, sizeof(resp));
|
||||
|
||||
ret = read_data(ctx->conn,
|
||||
resp, sizeof(resp), &num); // always e4 44 4f 4e 45
|
||||
|
||||
if (ret) return ret;
|
||||
|
||||
/* Get calibration parameters */
|
||||
memset(cmdbuf, 0, 6);
|
||||
cmdbuf[0] = 0x1b;
|
||||
cmdbuf[1] = 0x6a;
|
||||
|
@ -1450,16 +1499,25 @@ static int mitsu70x_test_print(struct mitsu70x_ctx *ctx, int type)
|
|||
cmdbuf, 6)))
|
||||
return ret;
|
||||
ret = read_data(ctx->conn,
|
||||
resp, sizeof(resp), &num); // 6 back?
|
||||
resp, sizeof(resp), &num); // 56 back!
|
||||
|
||||
/* To set: 1b 6a 30 70 XX 41 ?? ?? */
|
||||
/* response is struct mitsu70x_calinfo_resp */
|
||||
return ret;
|
||||
|
||||
/* Horiz = 0x31, range 0x00->0xff */
|
||||
/* VertA = 0x32, range -1 -> 9 (def 4) */
|
||||
/* VertB = 0x33, range -4 -> 6 (def 1) */
|
||||
/* VertC = 0x34, range -1 -> 9 (def 4) */
|
||||
/* To set calibration: 1b 6a 30 70 XX 41 ?? ??
|
||||
|
||||
#endif
|
||||
where ?? ?? is ASCII representation of hex value
|
||||
|
||||
Horiz = 0x31, range 0x00->0xff
|
||||
VertA = 0x32, range -1 -> 9 (def 4)
|
||||
VertB = 0x33, range -4 -> 6 (def 1)
|
||||
VertC = 0x34, range -1 -> 9 (def 4)
|
||||
|
||||
Read EEPROM:
|
||||
-> 1b 6a 36 36 31 00 31 30 30 30 30 30 30 30
|
||||
<- e4 6a 36 36 31 00 30 30 30 30 30 30 30 30
|
||||
[ 4096 bytes of eeprom ]
|
||||
*/
|
||||
}
|
||||
|
||||
static int mitsu70x_set_sleeptime(struct mitsu70x_ctx *ctx, uint8_t time)
|
||||
|
@ -2275,7 +2333,7 @@ static int mitsu70x_cmdline_arg(void *vctx, int argc, char **argv)
|
|||
if (!ctx)
|
||||
return -1;
|
||||
|
||||
while ((i = getopt(argc, argv, GETOPT_LIST_GLOBAL "jk:T:swWX:x:")) >= 0) {
|
||||
while ((i = getopt(argc, argv, GETOPT_LIST_GLOBAL "jk:tT:swWX:x:")) >= 0) {
|
||||
switch(i) {
|
||||
GETOPT_PROCESS_GLOBAL
|
||||
case 'j':
|
||||
|
@ -2287,6 +2345,9 @@ static int mitsu70x_cmdline_arg(void *vctx, int argc, char **argv)
|
|||
case 's':
|
||||
j = mitsu70x_query_status(ctx);
|
||||
break;
|
||||
case 't':
|
||||
j = mitsu70x_test_dump(ctx);
|
||||
break;
|
||||
case 'T':
|
||||
j = mitsu70x_test_print(ctx, atoi(optarg));
|
||||
break;
|
||||
|
@ -2427,7 +2488,7 @@ static int mitsu70x_query_stats(void *vctx, struct printerstats *stats)
|
|||
stats->mediatype[0] = ctx->marker[0].name;
|
||||
stats->levelmax[0] = ctx->marker[0].levelmax;
|
||||
stats->levelnow[0] = ctx->marker[0].levelnow;
|
||||
stats->cnt_life[0] = packed_bcd_to_uint32((char*)resp.lower.lifetime_prints, 4) - 10;
|
||||
stats->cnt_life[0] = packed_bcd_to_uint32((char*)resp.lower.lifetime_prints, 4);
|
||||
|
||||
if (stats->decks == 2) {
|
||||
stats->name[1] = "Upper";
|
||||
|
@ -2435,7 +2496,7 @@ static int mitsu70x_query_stats(void *vctx, struct printerstats *stats)
|
|||
stats->mediatype[1] = ctx->marker[1].name;
|
||||
stats->levelmax[1] = ctx->marker[1].levelmax;
|
||||
stats->levelnow[1] = ctx->marker[1].levelnow;
|
||||
stats->cnt_life[1] = packed_bcd_to_uint32((char*)resp.upper.lifetime_prints, 4) - 10;
|
||||
stats->cnt_life[1] = packed_bcd_to_uint32((char*)resp.upper.lifetime_prints, 4);
|
||||
}
|
||||
return CUPS_BACKEND_OK;
|
||||
}
|
||||
|
@ -2450,7 +2511,7 @@ static const char *mitsu70x_prefixes[] = {
|
|||
/* Exported */
|
||||
const struct dyesub_backend mitsu70x_backend = {
|
||||
.name = "Mitsubishi CP-D70 family",
|
||||
.version = "0.102" " (lib " LIBMITSU_VER ")",
|
||||
.version = "0.103" " (lib " LIBMITSU_VER ")",
|
||||
.flags = BACKEND_FLAG_DUMMYPRINT,
|
||||
.uri_prefixes = mitsu70x_prefixes,
|
||||
.cmdline_usage = mitsu70x_cmdline,
|
||||
|
|
Loading…
Reference in New Issue