From efc8e52655659a9b670e80aec936f061faacbb61 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Wed, 13 Jan 2021 15:36:23 +0800 Subject: [PATCH] hacky modifications to support KL-P350W printer --- klg2.c | 51 ++++++++------------------------------------------- 1 file changed, 8 insertions(+), 43 deletions(-) diff --git a/klg2.c b/klg2.c index 635b8d2..1f81d9d 100644 --- a/klg2.c +++ b/klg2.c @@ -27,7 +27,7 @@ /* USB constants */ const uint16_t KLG2_VID = 0x07CF; -const uint16_t KLG2_PID = 0x4112; +const uint16_t KLG2_PID = 0x4204; const uint8_t KLG2_IFACE = 0; const uint8_t KLG2_EPOUT = 0x01; const uint8_t KLG2_EPIN = 0x82; @@ -95,7 +95,7 @@ enum OPERMODE_T { libusb_device_handle *devhnd; /* Image buffer */ -#define IMAGE_ROWS 128 +#define IMAGE_ROWS 32 unsigned image_w; uint8_t *image_stripes[IMAGE_ROWS]; @@ -191,7 +191,7 @@ int printer_check_status(void) return 1; } if (rsp[0] != PRINTER_STX || rsp[1] != 0x80 || rsp[2] != 0x02 || - rsp[3] != 0x00 || rsp[4] != 0x00 || rsp[5] != 0xa6) { + rsp[3] != 0x00 || rsp[4] != 0x00 || rsp[5] != 0xc8) { fputs("Status response mismatch\n", stderr); return 1; } @@ -274,45 +274,13 @@ int printer_cancel_job(void) return 0; } -/*====================================================================== - Pre-print config (no idea of what it does) -*/ -int printer_prejob(void) -{ - static const uint8_t cfg1[] = { - PRINTER_STX, 0x02, 0x04, 0x00, 0x00, 0x09, 0x09, 0x01 - }; - send_to_printer(cfg1, 8, EPSIZE_16); - - if (printer_recv_ack("Prejob failed\n")) { - return 1; - } - - static const uint8_t cfg2[] = { - PRINTER_STX, 0x82 - }; - send_to_printer(cfg2, 2, EPSIZE_16); - uint8_t rsp[KLG2_EPSIZE]; - int rc = recv_from_printer(rsp); - if (rc != 5) { - fprintf(stderr, "Unexpected response length (%d)\n", rc); - return 1; - } - if (rsp[0] != PRINTER_STX || rsp[1] != 0x80 || rsp[2] != 0x01 || - rsp[3] != 0x00 || rsp[4] != 0x01) { - fputs("Response mismatch\n", stderr); - return 1; - } - return 0; -} - /*====================================================================== Printer Speed Adjust */ int printer_set_speed(void) { static const uint8_t psa[] = { - PRINTER_STX, 0x1C, 0x01, 0x00, 0x00 + PRINTER_STX, 0x1C, 0x01, 0x00, 0x01 }; send_to_printer(psa, 5, EPSIZE_16); return printer_recv_ack("Speed adjust failed\n"); @@ -340,7 +308,7 @@ int printer_check_tape(enum TAPECODE_T tapeid) int printer_set_margin(enum MARGINCODE_T marginid) { static uint8_t afs[] = { - PRINTER_STX, 0x0d, 0x01, 0x00, 0x00 + PRINTER_STX, 0x0d, 0x01, 0x00, 0x40 }; afs[4] = marginid; send_to_printer(afs, 5, EPSIZE_16); @@ -353,11 +321,10 @@ int printer_set_margin(enum MARGINCODE_T marginid) int printer_set_density(enum DENSITYCODE_T densityid) { static uint8_t dms[] = { - PRINTER_STX, 0x09, 0x06, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 + PRINTER_STX, 0x09, 0x07, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 }; - dms[8] = densityid; - send_to_printer(dms, 10, EPSIZE_16); + dms[8] = densityid; // ? + send_to_printer(dms, 11, EPSIZE_16); return printer_recv_ack("Print density select failed\n"); } @@ -718,8 +685,6 @@ int main(int argc, char **argv) if (rc) return 1; - if (!need_cancel) - need_cancel = printer_prejob(); if (!need_cancel) need_cancel = printer_check_tape(opt_tape); if (!need_cancel)