Basically, a new Canon printer can be added to `print-canon.c' in a similar way as described above for the epson inkjet printers. The main differences are noted here:
In general, Canon printers have more "built-in intelligence" than Epson printers which results in the fact that the driver only has to tell the printing conditions like resolutions, dot sizes, etc. to the printer and afterwards transfer the raster data line by line for each color used.
canon_cap_t
is a C struct defined as follows:
typedef struct canon_caps { int model; /* model number as used in printers.xml */ int max_width; /* maximum printable paper size */ int max_height; int base_res; /* base resolution - shall be 150 or 180 */ int max_xdpi; /* maximum horizontal resolution */ int max_ydpi; /* maximum vertical resolution */ int max_quality; int border_left; /* left margin, points */ int border_right; /* right margin, points */ int border_top; /* absolute top margin, points */ int border_bottom; /* absolute bottom margin, points */ int inks; /* installable cartridges (CANON_INK_*) */ int slots; /* available paperslots */ int features; /* special bjl settings */ canon_dot_size_t dot_sizes; /* Vector of dot sizes for resolutions */ canon_densities_t densities; /* List of densities for each printer */ canon_variable_inklist_t *inxs; /* Choices of inks for this printer */ } canon_cap_t;
Since there are Canon printers which print in resolutions of
@math{2^n*150} dpi (e.g. 300, 600, 1200) and others which support
resolutions of @math{2^n*180} dpi (e.g. 360, 720, 1440), there's a base
resolution (150 or 180, respectively) given in the
canon_cap_t
. The structs canon_dot_size_t
,
canon_densities_t
and canon_variable_inklist_t
refer to
resolutions being multiples of the base resolution.
For the Canon driver, the struct canon_dot_size_t
holds values
for a model's capabilities at a given resolution: `-1' if the
resolution is not supported. `0' if it can be used and `1' if
the resolution can be used for variable dot size printing.
In canon_densities_t
the base densities for each resolution can
be specified like for an epson printer, the same holds true for
canon_variable_inklist_t
. See the descriptions above to learn
about how to adjust your model's output to yield nice results.
There's a slight difference though in the way the Canon driver and the escp2 driver define their variable inklists: In the Canon driver, you need to define an inklist like this:
static const canon_variable_inklist_t canon_ink_myinks[] = { { 1,4, /* 1bit/pixel, 4 colors */ &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1, &ci_CMYK_1, }, { 3,4, /* 3bit/pixel, 4 colors */ &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3, &ci_CMYK_3, }, };
where the `&ci_CMYK_1' and `&ci_CMYK_3' entries are references
to a previously defined const of type canon_variable_inkset_t
.
Go to the first, previous, next, last section, table of contents.