Implement stuff to print like, a thing
This commit is contained in:
parent
75dd5b3c9b
commit
6dd486d5f3
2 changed files with 138 additions and 0 deletions
|
@ -3,6 +3,12 @@
|
|||
|
||||
#define TABBY_PRINTER_MAX_PACKET_SIZE 640
|
||||
|
||||
#define TABBY_PRINTER_BAND_SIZE 640
|
||||
#define TABBY_PRINTER_SHEET_BANDS 9
|
||||
|
||||
#define TABBY_PRINTER_SHEET_SIZE \
|
||||
(TABBY_PRINTER_SHEET_BANDS * TABBY_PRINTER_BAND_SIZE)
|
||||
|
||||
typedef enum {
|
||||
TABBY_PRINTER_LOWBAT = (1 << 7),
|
||||
TABBY_PRINTER_ER2 = (1 << 6),
|
||||
|
@ -14,6 +20,19 @@ typedef enum {
|
|||
TABBY_PRINTER_SUM = (1 << 0)
|
||||
} tabby_printer_status;
|
||||
|
||||
typedef enum {
|
||||
TABBY_PRINTER_PACKET_INIT = 0x01,
|
||||
TABBY_PRINTER_PACKET_JOB = 0x02,
|
||||
TABBY_PRINTER_PACKET_DATA = 0x04,
|
||||
TABBY_PRINTER_PACKET_CANCEL = 0x08,
|
||||
TABBY_PRINTER_PACKET_INQUIRY = 0x0f
|
||||
} tabby_printer_packet_type;
|
||||
|
||||
typedef enum {
|
||||
TABBY_PRINTER_COMPRESSION_NONE = 0x00,
|
||||
TABBY_PRINTER_COMPRESSION_RLE = 0x01
|
||||
} tabby_printer_compression;
|
||||
|
||||
/*
|
||||
* Data definitions for packets sent from Game Boy to printer
|
||||
*/
|
||||
|
@ -31,6 +50,15 @@ typedef struct _tabby_printer_packet {
|
|||
};
|
||||
} tabby_printer_packet;
|
||||
|
||||
typedef struct _tabby_printer_job_packet {
|
||||
tabby_printer_packet header;
|
||||
|
||||
uint8_t sheets,
|
||||
linefeeds,
|
||||
palette,
|
||||
density;
|
||||
} tabby_printer_job_packet;
|
||||
|
||||
typedef struct _tabby_printer_response {
|
||||
uint8_t device;
|
||||
uint8_t status;
|
||||
|
@ -53,4 +81,25 @@ int tabby_printer_packet_send(int fd,
|
|||
void *body,
|
||||
tabby_printer_response *response);
|
||||
|
||||
int tabby_printer_init(int fd,
|
||||
tabby_printer_response *response);
|
||||
|
||||
int tabby_printer_send_inquiry(int fd,
|
||||
tabby_printer_response *response);
|
||||
|
||||
int tabby_printer_job_start(int fd, uint8_t sheets,
|
||||
uint8_t linefeeds,
|
||||
uint8_t palette,
|
||||
uint8_t density,
|
||||
tabby_printer_response *response);
|
||||
|
||||
int tabby_printer_job_finish(int fd,
|
||||
tabby_printer_response *response);
|
||||
|
||||
int tabby_printer_job_cancel(int fd,
|
||||
tabby_printer_response *response);
|
||||
|
||||
int tabby_printer_send_sheet(int fd, void *data,
|
||||
tabby_printer_response *response);
|
||||
|
||||
#endif /* _TABBY_PRINTER_H */
|
||||
|
|
|
@ -136,3 +136,92 @@ int tabby_printer_packet_send(int fd,
|
|||
error_io:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static void init_header(tabby_printer_packet *header,
|
||||
tabby_printer_packet_type type, size_t size) {
|
||||
header->preamble[0] = 0x88;
|
||||
header->preamble[1] = 0x33;
|
||||
header->type = type;
|
||||
header->compression = TABBY_PRINTER_COMPRESSION_NONE;
|
||||
header->size = (uint16_t)size;
|
||||
}
|
||||
|
||||
int tabby_printer_init(int fd,
|
||||
tabby_printer_response *response) {
|
||||
tabby_printer_packet header;
|
||||
|
||||
init_header(&header, TABBY_PRINTER_PACKET_INIT, 0);
|
||||
|
||||
return tabby_printer_packet_send(fd, &header, NULL, response);
|
||||
}
|
||||
|
||||
int tabby_printer_send_inquiry(int fd,
|
||||
tabby_printer_response *response) {
|
||||
tabby_printer_packet header;
|
||||
|
||||
init_header(&header, TABBY_PRINTER_PACKET_INQUIRY, 0);
|
||||
|
||||
return tabby_printer_packet_send(fd, &header, NULL, response);
|
||||
}
|
||||
|
||||
int tabby_printer_job_start(int fd, uint8_t sheets,
|
||||
uint8_t linefeeds,
|
||||
uint8_t palette,
|
||||
uint8_t density,
|
||||
tabby_printer_response *response) {
|
||||
tabby_printer_packet header;
|
||||
|
||||
uint8_t body[4] = {
|
||||
sheets, linefeeds, palette, density
|
||||
};
|
||||
|
||||
init_header(&header, TABBY_PRINTER_PACKET_INQUIRY, sizeof(body));
|
||||
|
||||
return tabby_printer_packet_send(fd, &header, &body, response);
|
||||
}
|
||||
|
||||
int tabby_printer_job_finish(int fd,
|
||||
tabby_printer_response *response) {
|
||||
tabby_printer_packet header;
|
||||
|
||||
init_header(&header, TABBY_PRINTER_PACKET_DATA, 0);
|
||||
|
||||
return tabby_printer_packet_send(fd, &header, NULL, response);
|
||||
}
|
||||
|
||||
int tabby_printer_job_cancel(int fd,
|
||||
tabby_printer_response *response) {
|
||||
tabby_printer_packet header;
|
||||
|
||||
init_header(&header, TABBY_PRINTER_PACKET_CANCEL, 0);
|
||||
|
||||
return tabby_printer_packet_send(fd, &header, NULL, response);
|
||||
}
|
||||
|
||||
int tabby_printer_send_sheet(int fd, void *data,
|
||||
tabby_printer_response *response) {
|
||||
int i;
|
||||
size_t offset = 0;
|
||||
|
||||
for (i=0; i<TABBY_PRINTER_SHEET_BANDS; i++) {
|
||||
tabby_printer_packet header;
|
||||
tabby_printer_response current;
|
||||
|
||||
init_header(&header,
|
||||
TABBY_PRINTER_PACKET_DATA,
|
||||
TABBY_PRINTER_BAND_SIZE);
|
||||
|
||||
if (tabby_printer_packet_send(fd, &header,
|
||||
((uint8_t *)data) + offset,
|
||||
¤t) < 0) {
|
||||
goto error_packet_send;
|
||||
}
|
||||
|
||||
offset += TABBY_PRINTER_BAND_SIZE;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error_packet_send:
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue