mitsud90: Report the MAIN fw version in the status dump.

This commit is contained in:
Solomon Peachy 2021-03-22 21:41:23 -04:00
parent e450d6f496
commit 6e5cdca81f
1 changed files with 51 additions and 13 deletions

View File

@ -128,6 +128,11 @@ struct mitsud90_info_resp {
uint8_t x84;
} __attribute__((packed));
struct mitsud90_fwver_resp {
uint8_t hdr[4]; /* e4 47 44 30 */
struct mitsud90_fw_resp_single fw_ver;
} __attribute((packed));
struct mitsum1_info_resp {
uint8_t hdr[4]; /* e4 47 44 30 */
uint8_t model[10];
@ -467,7 +472,8 @@ struct mitsud90_printjob {
struct mitsud90_ctx {
struct dyesub_connection *conn;
char serno[7];
char serno[7]; /* 6+null */
char fwver[7]; /* 6+null */
/* Used in parsing.. */
struct mitsud90_job_footer holdover;
@ -547,6 +553,36 @@ static int mitsud90_query_status(struct mitsud90_ctx *ctx, struct mitsud90_statu
return CUPS_BACKEND_OK;
}
static int mitsud90_query_fwver(struct mitsud90_ctx *ctx)
{
uint8_t cmdbuf[8];
int ret, num;
struct mitsud90_fwver_resp resp;
cmdbuf[0] = 0x1b;
cmdbuf[1] = 0x47;
cmdbuf[2] = 0x44;
cmdbuf[3] = 0x30;
cmdbuf[4] = 0;
cmdbuf[5] = 0;
cmdbuf[6] = 1; /* Number of commands */
cmdbuf[7] = COM_STATUS_TYPE_FW_MA;
if ((ret = send_data(ctx->conn,
cmdbuf, sizeof(cmdbuf))))
return ret;
memset(&resp, 0, sizeof(resp));
ret = read_data(ctx->conn,
(uint8_t*) &resp, sizeof(resp), &num);
memcpy(ctx->fwver, resp.fw_ver.version, 6);
ctx->fwver[6] = 0;
return CUPS_BACKEND_OK;
}
static int mitsud90_get_serno(struct mitsud90_ctx *ctx)
{
uint8_t cmdbuf[32];
@ -609,29 +645,31 @@ static void *mitsud90_init(void)
static int mitsud90_attach(void *vctx, struct dyesub_connection *conn, uint8_t jobid)
{
struct mitsud90_ctx *ctx = vctx;
struct mitsud90_media_resp resp;
struct mitsud90_media_resp mresp;
UNUSED(jobid);
ctx->conn = conn;
if (test_mode < TEST_MODE_NOATTACH) {
if (mitsud90_query_media(ctx, &resp))
if (mitsud90_query_media(ctx, &mresp))
return CUPS_BACKEND_FAILED;
if (mitsud90_get_serno(ctx))
return CUPS_BACKEND_FAILED;
if (mitsud90_query_fwver(ctx))
return CUPS_BACKEND_FAILED;
} else {
resp.media.brand = 0xff;
resp.media.type = 0x0f;
resp.media.capacity = cpu_to_be16(230);
resp.media.remain = cpu_to_be16(200);
mresp.media.brand = 0xff;
mresp.media.type = 0x0f;
mresp.media.capacity = cpu_to_be16(230);
mresp.media.remain = cpu_to_be16(200);
}
ctx->marker.color = "#00FFFF#FF00FF#FFFF00";
ctx->marker.numtype = resp.media.type;
ctx->marker.name = mitsu_media_types(ctx->conn->type, resp.media.brand, resp.media.type);
ctx->marker.levelmax = be16_to_cpu(resp.media.capacity);
ctx->marker.levelnow = be16_to_cpu(resp.media.remain);
ctx->marker.numtype = mresp.media.type;
ctx->marker.name = mitsu_media_types(ctx->conn->type, mresp.media.brand, mresp.media.type);
ctx->marker.levelmax = be16_to_cpu(mresp.media.capacity);
ctx->marker.levelnow = be16_to_cpu(mresp.media.remain);
if (ctx->conn->type == P_MITSU_M1 ||
ctx->conn->type == P_FUJI_ASK500) {
@ -1730,8 +1768,8 @@ static int mitsud90_query_stats(void *vctx, struct printerstats *stats)
}
stats->serial = ctx->serno;
stats->fwver = ctx->fwver;
// stats->fwver = ctx->fwver; // XXX use resp.fw_vers for 0xc/FW_MA
stats->decks = 1;
stats->name[0] = "Roll";
@ -1762,7 +1800,7 @@ static const char *mitsud90_prefixes[] = {
/* Exported */
const struct dyesub_backend mitsud90_backend = {
.name = "Mitsubishi CP-D90/CP-M1",
.version = "0.31" " (lib " LIBMITSU_VER ")",
.version = "0.32" " (lib " LIBMITSU_VER ")",
.uri_prefixes = mitsud90_prefixes,
.cmdline_arg = mitsud90_cmdline_arg,
.cmdline_usage = mitsud90_cmdline,