[kodak1400] Fleshing out the state machine.
This commit is contained in:
parent
bf8f95b60a
commit
9ce6e859bf
|
@ -1,2 +1,3 @@
|
|||
*~
|
||||
selphy_print
|
||||
kodak1400_print
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <arpa/inet.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
|
@ -37,7 +39,7 @@
|
|||
|
||||
#include <libusb-1.0/libusb.h>
|
||||
|
||||
#define VERSION "0.02"
|
||||
#define VERSION "0.03"
|
||||
#define STR_LEN_MAX 64
|
||||
#define CMDBUF_LEN 96
|
||||
#define READBACK_LEN 8
|
||||
|
@ -77,11 +79,13 @@ enum {
|
|||
S_PRINTER_READY,
|
||||
S_PRINTER_INIT_SENT,
|
||||
S_PRINTER_READY_Y,
|
||||
S_PRINTER_Y_SENT,
|
||||
S_PRINTER_SENT_Y,
|
||||
S_PRINTER_READY_M,
|
||||
S_PRINTER_M_SENT,
|
||||
S_PRINTER_SENT_M,
|
||||
S_PRINTER_READY_C,
|
||||
S_PRINTER_C_SENT,
|
||||
S_PRINTER_SENT_C,
|
||||
S_PRINTER_READY_L,
|
||||
S_PRINTER_SENT_L,
|
||||
S_PRINTER_DONE,
|
||||
S_FINISHED,
|
||||
};
|
||||
|
@ -101,6 +105,10 @@ struct kodak1400_hdr {
|
|||
uint8_t null4[12];
|
||||
};
|
||||
|
||||
static uint8_t idle_data[READBACK_LEN] = { 0xe4, 0x72, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00 };
|
||||
|
||||
|
||||
static int find_and_enumerate(struct libusb_context *ctx,
|
||||
struct libusb_device ***list,
|
||||
char *match_serno,
|
||||
|
@ -194,6 +202,8 @@ int main (int argc, char **argv)
|
|||
uint8_t endp_up = 0;
|
||||
uint8_t endp_down = 0;
|
||||
|
||||
uint16_t temp16;
|
||||
|
||||
int data_fd = fileno(stdin);
|
||||
|
||||
int i, num;
|
||||
|
@ -391,16 +401,139 @@ top:
|
|||
}
|
||||
fflush(stderr);
|
||||
|
||||
#if 0
|
||||
switch (state) {
|
||||
|
||||
case S_IDLE:
|
||||
/* Send reset/attention */
|
||||
memset(cmdbuf, 0, CMDBUF_LEN);
|
||||
cmdbuf[0] = 0x1b;
|
||||
|
||||
ret = libusb_bulk_transfer(dev, endp_down,
|
||||
cmdbuf, CMDBUF_LEN,
|
||||
&num, 2000);
|
||||
|
||||
if (ret < 0) {
|
||||
ERROR("libusb error %d: (%d/%d from 0x%02x)\n", ret, num, READBACK_LEN, endp_up);
|
||||
ret = 4;
|
||||
goto done_claimed;
|
||||
}
|
||||
|
||||
/* Send page setup */
|
||||
memset(cmdbuf, 0, CMDBUF_LEN);
|
||||
cmdbuf[0] = 0x1b;
|
||||
cmdbuf[1] = 0x5a;
|
||||
cmdbuf[2] = 0x53;
|
||||
temp16 = ntohs(hdr.columns);
|
||||
memcpy(cmdbuf+3, &temp16, 2);
|
||||
temp16 = ntohs(hdr.rows);
|
||||
memcpy(cmdbuf+5, &temp16, 2);
|
||||
|
||||
ret = libusb_bulk_transfer(dev, endp_down,
|
||||
cmdbuf, CMDBUF_LEN,
|
||||
&num, 2000);
|
||||
|
||||
if (ret < 0) {
|
||||
ERROR("libusb error %d: (%d/%d from 0x%02x)\n", ret, num, READBACK_LEN, endp_up);
|
||||
ret = 4;
|
||||
goto done_claimed;
|
||||
}
|
||||
|
||||
// send lamination
|
||||
// send matte
|
||||
|
||||
/* Send lamination strength */
|
||||
memset(cmdbuf, 0, CMDBUF_LEN);
|
||||
cmdbuf[0] = 0x1b;
|
||||
cmdbuf[1] = 0x62;
|
||||
cmdbuf[2] = hdr.lam_strength;
|
||||
|
||||
ret = libusb_bulk_transfer(dev, endp_down,
|
||||
cmdbuf, CMDBUF_LEN,
|
||||
&num, 2000);
|
||||
|
||||
if (ret < 0) {
|
||||
ERROR("libusb error %d: (%d/%d from 0x%02x)\n", ret, num, READBACK_LEN, endp_up);
|
||||
ret = 4;
|
||||
goto done_claimed;
|
||||
}
|
||||
|
||||
// send unkn1
|
||||
state = S_PRINTER_READY_Y;
|
||||
break;
|
||||
case S_PRINTER_READY_Y:
|
||||
// send plane init
|
||||
for (i = 0 ; i < hdr.rows ; i++) {
|
||||
ret = libusb_bulk_transfer(dev, endp_down,
|
||||
plane_b + i * hdr.columns, hdr.columns,
|
||||
&num, 2000);
|
||||
|
||||
if (ret < 0) {
|
||||
ERROR("libusb error %d: (%d/%d from 0x%02x)\n", ret, num, READBACK_LEN, endp_up);
|
||||
ret = 4;
|
||||
goto done_claimed;
|
||||
}
|
||||
}
|
||||
state = S_PRINTER_SENT_Y;
|
||||
break;
|
||||
case S_PRINTER_SENT_Y:
|
||||
if (!memcmp(rdbuf, idle_data, READBACK_LEN))
|
||||
state = S_PRINTER_READY_M;
|
||||
break;
|
||||
case S_PRINTER_READY_M:
|
||||
// send plane init
|
||||
for (i = 0 ; i < hdr.rows ; i++) {
|
||||
ret = libusb_bulk_transfer(dev, endp_down,
|
||||
plane_g + i * hdr.columns, hdr.columns,
|
||||
&num, 2000);
|
||||
|
||||
if (ret < 0) {
|
||||
ERROR("libusb error %d: (%d/%d from 0x%02x)\n", ret, num, READBACK_LEN, endp_up);
|
||||
ret = 4;
|
||||
goto done_claimed;
|
||||
}
|
||||
}
|
||||
state = S_PRINTER_SENT_M;
|
||||
break;
|
||||
case S_PRINTER_SENT_M:
|
||||
if (!memcmp(rdbuf, idle_data, READBACK_LEN))
|
||||
state = S_PRINTER_READY_C;
|
||||
break;
|
||||
case S_PRINTER_READY_C:
|
||||
// send plane init
|
||||
for (i = 0 ; i < hdr.rows ; i++) {
|
||||
ret = libusb_bulk_transfer(dev, endp_down,
|
||||
plane_r + i * hdr.columns, hdr.columns,
|
||||
&num, 2000);
|
||||
|
||||
if (ret < 0) {
|
||||
ERROR("libusb error %d: (%d/%d from 0x%02x)\n", ret, num, READBACK_LEN, endp_up);
|
||||
ret = 4;
|
||||
goto done_claimed;
|
||||
}
|
||||
}
|
||||
state = S_PRINTER_SENT_C;
|
||||
break;
|
||||
case S_PRINTER_SENT_C:
|
||||
if (!memcmp(rdbuf, idle_data, READBACK_LEN))
|
||||
state = S_PRINTER_READY_L;
|
||||
break;
|
||||
case S_PRINTER_READY_L:
|
||||
// send laminate init
|
||||
state = S_PRINTER_SENT_L;
|
||||
break;
|
||||
case S_PRINTER_SENT_L:
|
||||
if (!memcmp(rdbuf, idle_data, READBACK_LEN))
|
||||
state = S_PRINTER_DONE;
|
||||
break;
|
||||
case S_PRINTER_DONE:
|
||||
// send cleanup.
|
||||
state = S_FINISHED;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
|
||||
if (state != S_FINISHED)
|
||||
goto top;
|
||||
#endif
|
||||
|
||||
/* All done, clean up */
|
||||
done_claimed:
|
||||
|
|
Loading…
Reference in New Issue