Skip to content

Commit

Permalink
Save work on DYMO driver (almost have tape driver working)
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelrsweet committed Nov 2, 2022
1 parent c3a0cb8 commit 6f49c6e
Showing 1 changed file with 50 additions and 21 deletions.
71 changes: 50 additions & 21 deletions lprint-dymo.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,13 @@ typedef enum lprint_dlang_e
typedef struct lprint_dymo_s // DYMO driver data
{
lprint_dlang_t dlang; // Printer language
unsigned ystart, // First line
unsigned xstart, // Starting column (bytes)
xend, // Ending column (bytes)
ystart, // First line
yend; // Last line
int feed, // Accumulated feed
min_leader; // Leader distance for cut
min_leader, // Leader distance for cut
normal_leader; // Leader distance for top of label
} lprint_dymo_t;


Expand Down Expand Up @@ -142,7 +145,7 @@ lprintDYMO(
data->status_cb = lprint_dymo_status;
data->format = "application/vnd.dymo-lw";

if (strncmp(driver_name, "dymo_lm-", 8) || strstr(driver_name, "-tape"))
if (!strncmp(driver_name, "dymo_lm-", 8) || strstr(driver_name, "-tape"))
{
// Set pages-per-minute based on 3" of tape; not exact but
// we need to report something...
Expand Down Expand Up @@ -182,7 +185,7 @@ lprintDYMO(

data->x_default = data->y_default = 300;

data->left_right = 1;
data->left_right = 367;
data->bottom_top = 1;

data->num_media = (int)(sizeof(lprint_dymo_label) / sizeof(lprint_dymo_label[0]));
Expand All @@ -194,7 +197,7 @@ lprintDYMO(
data->source[0] = "main-roll";
data->source[1] = "alternate-roll";

papplCopyString(data->media_ready[0].size_name, "oe_multipurpose-label_1.125x3.5in", sizeof(data->media_ready[0].size_name));
papplCopyString(data->media_ready[0].size_name, "oe_address-label_1.125x3.5in", sizeof(data->media_ready[0].size_name));
papplCopyString(data->media_ready[1].size_name, "oe_address-label_1.125x3.5in", sizeof(data->media_ready[1].size_name));
}
else
Expand Down Expand Up @@ -256,11 +259,20 @@ lprint_dymo_init(
dymo->dlang = LPRINT_DLANG_TAPE;

if (!strcmp(driver_name, "dymo_lw-duo-tape") || !strcmp(driver_name, "dymo_lw-duo-tape-128") || !strcmp(driver_name, "dymo_lw-450-duo-tape"))
dymo->min_leader = 61;
{
dymo->min_leader = 61;
dymo->normal_leader = 14;
}
else if (!strcmp(driver_name, "dymo_lm-pnp"))
dymo->min_leader = 58;
{
dymo->min_leader = 58;
dymo->normal_leader = 17;
}
else
dymo->min_leader = 55;
{
dymo->min_leader = 55;
dymo->normal_leader = 20;
}
}
else
{
Expand Down Expand Up @@ -364,15 +376,20 @@ lprint_dymo_rendpage(
switch (dymo->dlang)
{
case LPRINT_DLANG_LABEL :
papplDevicePuts(device, "\033E");
break;

case LPRINT_DLANG_TAPE :
// Skip and cut...
papplDevicePrintf(device, "\033D%c", 0);
memset(buffer, 0x16, dymo->min_leader);
papplDeviceWrite(device, buffer, dymo->min_leader);
break;
}

// Eject/cut
papplDevicePuts(device, "\033E");
papplDeviceFlush(device);

return (true);
}

Expand All @@ -389,7 +406,7 @@ lprint_dymo_rstartjob(
{
lprint_dymo_t *dymo = (lprint_dymo_t *)calloc(1, sizeof(lprint_dymo_t));
// DYMO driver data
char buffer[131]; // Buffer for reset command
char buffer[23]; // Buffer for reset command


(void)options;
Expand Down Expand Up @@ -417,11 +434,12 @@ lprint_dymo_rstartjob(
break;

case LPRINT_DLANG_TAPE :
memset(buffer, 0, 128);
buffer[128] = 0x1b;
buffer[129] = 'C';
buffer[130] = 0;
papplDeviceWrite(device, buffer, 131);
// Send nul bytes to clear input buffer...
memset(buffer, 0, sizeof(buffer));
papplDeviceWrite(device, buffer, sizeof(buffer));

// Set tape color to black on white...
papplDevicePrintf(device, "\033C%c", 0);
break;
}

Expand Down Expand Up @@ -493,12 +511,21 @@ lprint_dymo_rstartpage(
break;

case LPRINT_DLANG_TAPE :
memset(buffer, 0x16, dymo->min_leader);
papplDeviceWrite(device, buffer, dymo->min_leader);
// Set line width...
papplDevicePrintf(device, "\033D%c", 0);

// Feed for the leader...
memset(buffer, 0x16, dymo->normal_leader);
papplDeviceWrite(device, buffer, dymo->normal_leader);

// Set indentation...
papplDevicePrintf(device, "\033B%c", 0);
break;
}

dymo->feed = 0;
dymo->xstart = options->media.left_margin * options->printer_resolution[0] / 2540 / 8;
dymo->xend = options->header.cupsBytesPerLine - dymo->xstart;
dymo->ystart = options->media.top_margin * options->printer_resolution[1] / 2540;
dymo->yend = options->header.cupsHeight - dymo->ystart;

Expand Down Expand Up @@ -554,6 +581,7 @@ lprint_dymo_rwriteline(
case LPRINT_DLANG_TAPE :
if (dymo->feed)
{
papplDevicePrintf(device, "\033D%c", 0);
memset(buffer, 0x16, sizeof(buffer));
while (dymo->feed > 255)
{
Expand All @@ -562,12 +590,13 @@ lprint_dymo_rwriteline(
}

if (dymo->feed > 0)
{
papplDeviceWrite(device, buffer, dymo->feed);

dymo->feed = 0;
dymo->feed = 0;
}
}
papplDevicePrintf(device, "\033D%c\026", options->header.cupsBytesPerLine);
papplDeviceWrite(device, line, options->header.cupsBytesPerLine);
papplDevicePrintf(device, "\033D%c\026", dymo->xend - dymo->xstart);
papplDeviceWrite(device, line + dymo->xstart, dymo->xend - dymo->xstart);
break;
}
}
Expand Down

0 comments on commit 6f49c6e

Please sign in to comment.