Skip to content

Commit

Permalink
Toner save and paper type controls from CUPS
Browse files Browse the repository at this point in the history
  • Loading branch information
mounaiban committed Mar 29, 2020
1 parent 5c021f6 commit 7384729
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 10 deletions.
21 changes: 20 additions & 1 deletion Canon-LBP2900.ppd
Original file line number Diff line number Diff line change
Expand Up @@ -293,11 +293,30 @@
*DefaultColorModel: Gray
*ColorModel Gray/Grayscale: "<</cupsColorSpace 3/cupsColorOrder 0/cupsCompression 2>>setpagedevice"
*CloseUI: *ColorModel
*OpenUI *captMediaWeight/Media Type B (Experimental): PickOne
*OrderDependency: 11 AnySetup *captMediaWeight
*DefaultcaptMediaWeight: pt2-1
*captMediaWeight pt2-0/0: "<</MediaWeight 0>>setpagedevice"
*captMediaWeight pt2-1/Default: "<</MediaWeight 1>>setpagedevice"
*captMediaWeight pt2-2/2: "<</MediaWeight 2>>setpagedevice"
*CloseUI: *captMediaWeight
*OpenUI *captTonerSave/Toner Save: Boolean
*OrderDependency: 10 AnySetup *captTonerSave
*DefaultcaptTonerSave: False
*captTonerSave False/Disabled: "<</cupsCompression 0>>setpagedevice"
*captTonerSave True/Enabled: "<</cupsCompression 1>>setpagedevice"
*CloseUI: *captTonerSave
*OpenUI *Resolution/Resolution: PickOne
*OrderDependency: 10 AnySetup *Resolution
*DefaultResolution: 600dpi
*Resolution 600dpi/600 DPI: "<</HWResolution[600 600]/cupsBitsPerColor 1/cupsRowCount 70/cupsRowFeed 592/cupsRowStep 0/cupsColorSpace 3>>setpagedevice"
*CloseUI: *Resolution
*OpenUI *MediaType/Media Type: PickOne
*OrderDependency: 10 AnySetup *MediaType
*DefaultMediaType: Plain
*MediaType Plain/Plain Paper: "<</MediaType(Plain)/cupsMediaType 0>>setpagedevice"
*MediaType Thick/Thick Paper: "<</MediaType(Thick)/cupsMediaType 1>>setpagedevice"
*CloseUI: *MediaType
*DefaultFont: Courier
*Font AvantGarde-Book: Standard "(1.05)" Standard ROM
*Font AvantGarde-BookOblique: Standard "(1.05)" Standard ROM
Expand Down Expand Up @@ -334,4 +353,4 @@
*Font Times-Roman: Standard "(1.05)" Standard ROM
*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM
*Font ZapfDingbats: Special "(001.005)" Special ROM
*% End of CNLB2K9.ppd, 20521 bytes.
*% End of CNLB2K9.ppd, 21444 bytes.
18 changes: 16 additions & 2 deletions Canon-LBP3000.ppd
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,19 @@
*DefaultColorModel: Gray
*ColorModel Gray/Grayscale: "<</cupsColorSpace 3/cupsColorOrder 0/cupsCompression 2>>setpagedevice"
*CloseUI: *ColorModel
*OpenUI *captMediaWeight/Media Type B (Experimental): PickOne
*OrderDependency: 11 AnySetup *captMediaWeight
*DefaultcaptMediaWeight: pt2-1
*captMediaWeight pt2-0/0: "<</MediaWeight 0>>setpagedevice"
*captMediaWeight pt2-1/Default: "<</MediaWeight 1>>setpagedevice"
*captMediaWeight pt2-2/2: "<</MediaWeight 2>>setpagedevice"
*CloseUI: *captMediaWeight
*OpenUI *captTonerSave/Toner Save: Boolean
*OrderDependency: 10 AnySetup *captTonerSave
*DefaultcaptTonerSave: False
*captTonerSave False/Disabled: "<</cupsCompression 0>>setpagedevice"
*captTonerSave True/Enabled: "<</cupsCompression 1>>setpagedevice"
*CloseUI: *captTonerSave
*OpenUI *Resolution/Resolution: PickOne
*OrderDependency: 10 AnySetup *Resolution
*DefaultResolution: 600dpi
Expand All @@ -301,7 +314,8 @@
*OpenUI *MediaType/Media Type: PickOne
*OrderDependency: 10 AnySetup *MediaType
*DefaultMediaType: Plain
*MediaType Plain/Plain Paper: "<</MediaType(Plain)/cupsMediaType 1>>setpagedevice"
*MediaType Plain/Plain Paper: "<</MediaType(Plain)/cupsMediaType 0>>setpagedevice"
*MediaType Thick/Thick Paper: "<</MediaType(Thick)/cupsMediaType 1>>setpagedevice"
*CloseUI: *MediaType
*DefaultFont: Courier
*Font AvantGarde-Book: Standard "(1.05)" Standard ROM
Expand Down Expand Up @@ -339,4 +353,4 @@
*Font Times-Roman: Standard "(1.05)" Standard ROM
*Font ZapfChancery-MediumItalic: Standard "(1.05)" Standard ROM
*Font ZapfDingbats: Special "(001.005)" Special ROM
*% End of CNLB3K.ppd, 20690 bytes.
*% End of CNLB3K.ppd, 21404 bytes.
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
AC_PREREQ([2.69])
AC_INIT([captdriver], [0.1.2])
AC_INIT([captdriver], [0.1.3])

AC_CONFIG_SRCDIR([src/std.h])

Expand Down
27 changes: 25 additions & 2 deletions src/canon-lbp.drv
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Copyright "(C)2020 Moses Chong"
ColorModel "Gray/Grayscale" k chunky 2
Filter application/vnd.cups-raster 1 rastertocapt
*Manufacturer "Canon Inc"
Version 0.1.2
Version 0.1.3
{
Font *

Expand Down Expand Up @@ -102,8 +102,32 @@ Version 0.1.2
MediaSize Statement
// End Less Common Sizes

// Paper Type B Options
/*
This option is wired directly to the pt2 register in the
page prologue (see prn_lbp2900.c). Its exact purpose is not
known, but it appears to be an adjustment to cater the printer
for different paper weights.
The proprietary drivers offers a 'Plain Paper L' and 'Heavy Paper H'
option. The LBP 3000 manual describes Heavy Paper H as an option
to 'get improved fixing properties' for thick paper and
Plain Paper L as an option reduce curling on plain paper.
And then there's the Transparency option for clear plastic film...
*/
Option "captMediaWeight/Media Type B (Experimental)" PickOne AnySetup 11
Choice "pt2-0/0" "<</MediaWeight 0>>setpagedevice"
*Choice "pt2-1/Default" "<</MediaWeight 1>>setpagedevice"
Choice "pt2-2/2" "<</MediaWeight 2>>setpagedevice"

// Toner Save Option
Option "captTonerSave/Toner Save" Boolean AnySetup 10
*Choice False/Disabled "<</cupsCompression 0>>setpagedevice"
Choice True/Enabled "<</cupsCompression 1>>setpagedevice"

*Resolution k 1 70 592 0 "600dpi/600 DPI"
MaxSize 215.9mm 355.6mm // US Legal
MediaType 0 "Plain/Plain Paper"
MediaType 1 "Thick/Thick Paper"
VariablePaperSize yes
{
// nearly matched to Alexey Galakhov's original 2011 specs
Expand All @@ -119,7 +143,6 @@ Version 0.1.2
FileName "Canon-LBP3000.ppd"
HWmargins 5mm 5mm 5mm 5mm
MinSize 75mm 105mm
MediaType 1 "Plain/Plain Paper"
PCFileName "CNLB3K.ppd"
}
}
Expand Down
5 changes: 4 additions & 1 deletion src/paper.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,16 @@
*/

#include "paper.h"

#include <cups/raster.h>

void page_set_dims(struct page_dims_s *dims, const struct cups_page_header2_s *header)
{
dims->media_type_a = header->cupsMediaType;
dims->media_type_b = header->MediaWeight;
dims->paper_width = header->PageSize[0] * header->HWResolution[0] / 72;
dims->paper_height = header->PageSize[1] * header->HWResolution[1] / 72;
//using cupsCompression to reduce ink darkness, like Zebra printers
dims->toner_save = header->cupsCompression;
dims->margin_height = header->Margins[0];
dims->margin_width = header->Margins[1];
}
3 changes: 3 additions & 0 deletions src/paper.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@ struct cups_page_header2_s;

struct page_dims_s {
/* set by CUPS */
unsigned media_type_a;
unsigned media_type_b;
unsigned paper_width;
unsigned paper_height;
unsigned toner_save;
unsigned margin_height;
unsigned margin_width;
/* set by printer ops */
Expand Down
8 changes: 5 additions & 3 deletions src/prn_lbp2900.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,11 @@ static bool lbp2900_page_prologue(struct printer_state_s *state, const struct pa
size_t s;
uint8_t buf[16];

uint8_t pt1 = 0x01;
uint8_t save = 0x00;
uint8_t pt2 = 0x01;
uint8_t pt1 = dims->media_type_a;
uint8_t save = dims->toner_save;
uint8_t pt2 = dims->media_type_b; // Please see .drv file

fprintf(stderr, "DEBUG: CAPT: Media type: pt1=%u, pt2=%u\n", pt1, pt2);

uint8_t pageparms[] = {
/* Bytes 0-21 (0x00 to 0x15) */
Expand Down

0 comments on commit 7384729

Please sign in to comment.