00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef GIMP_PRINT_INTERNAL_ESCP2_H
00025 #define GIMP_PRINT_INTERNAL_ESCP2_H
00026
00027
00028
00029
00030
00031 #define PHYSICAL_CHANNEL_LIMIT 8
00032 #define MAX_DROP_SIZES 3
00033
00034 #define XCOLOR_R (STP_NCOLORS + 0)
00035 #define XCOLOR_B (STP_NCOLORS + 1)
00036 #define XCOLOR_GLOSS (STP_NCOLORS + 2)
00037
00038
00039
00040
00041
00042
00043
00044 typedef unsigned long model_cap_t;
00045 typedef unsigned long model_featureset_t;
00046
00047
00048 #define RES_LOW 0
00049 #define RES_360 1
00050 #define RES_720_360 2
00051 #define RES_720 3
00052 #define RES_1440_720 4
00053 #define RES_2880_720 5
00054 #define RES_2880_1440 6
00055 #define RES_2880_2880 7
00056 #define RES_N 8
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 typedef struct
00067 {
00068 const char *listname;
00069 short numdropsizes;
00070 const double dropsizes[MAX_DROP_SIZES];
00071 } escp2_dropsize_t;
00072
00073 typedef const escp2_dropsize_t *const escp2_drop_list_t[RES_N];
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083 typedef struct
00084 {
00085 const char *name;
00086 float base_density;
00087 float subchannel_cutoff;
00088 float k_transition;
00089 float k_lower;
00090 float k_upper;
00091 float cyan;
00092 float magenta;
00093 float yellow;
00094 float black;
00095 float saturation;
00096 float gamma;
00097 const char *hue_adjustment;
00098 const char *lum_adjustment;
00099 const char *sat_adjustment;
00100 } paper_adjustment_t;
00101
00102 typedef struct
00103 {
00104 const char *listname;
00105 short paper_count;
00106 const paper_adjustment_t *papers;
00107 } paper_adjustment_list_t;
00108
00109 typedef enum
00110 {
00111 PAPER_PLAIN = 0x01,
00112 PAPER_GOOD = 0x02,
00113 PAPER_PHOTO = 0x04,
00114 PAPER_PREMIUM_PHOTO = 0x08,
00115 PAPER_TRANSPARENCY = 0x10
00116 } paper_class_t;
00117
00118 typedef struct
00119 {
00120 const char *name;
00121 const char *text;
00122 paper_class_t paper_class;
00123 short paper_feed_sequence;
00124 short platen_gap;
00125 short feed_adjustment;
00126 short vacuum_intensity;
00127 short paper_thickness;
00128 const char *preferred_ink_type;
00129 const char *preferred_ink_set;
00130 } paper_t;
00131
00132 typedef struct
00133 {
00134 const char *listname;
00135 short paper_count;
00136 const paper_t *papers;
00137 } paperlist_t;
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 typedef struct
00149 {
00150 const char *name;
00151 const char *text;
00152 short hres;
00153 short vres;
00154 short printed_hres;
00155 short printed_vres;
00156 short softweave;
00157 short printer_weave;
00158 short vertical_passes;
00159 } res_t;
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170 typedef struct
00171 {
00172 short color;
00173 short subchannel;
00174 short head_offset;
00175 const char *channel_density;
00176 const char *subchannel_scale;
00177 } physical_subchannel_t;
00178
00179 typedef struct
00180 {
00181 const char *listname;
00182 const physical_subchannel_t *subchannels;
00183 short n_subchannels;
00184 } ink_channel_t;
00185
00186 typedef enum
00187 {
00188 INKSET_CMYK = 0,
00189 INKSET_CcMmYK = 1,
00190 INKSET_CcMmYyK = 2,
00191 INKSET_CcMmYKk = 3,
00192 INKSET_QUADTONE = 4,
00193 INKSET_CMYKRB = 5,
00194 INKSET_EXTENDED = 6
00195 } inkset_id_t;
00196
00197 typedef struct
00198 {
00199 const char *name;
00200 const ink_channel_t *const *channels;
00201 short channel_count;
00202 } channel_set_t;
00203
00204 typedef struct
00205 {
00206 const char *name;
00207 const char *text;
00208 inkset_id_t inkset;
00209 const channel_set_t *channel_set;
00210 } escp2_inkname_t;
00211
00212 typedef struct
00213 {
00214 int n_shades;
00215 const double shades[PHYSICAL_CHANNEL_LIMIT];
00216 } shade_t;
00217
00218 typedef shade_t shade_set_t[PHYSICAL_CHANNEL_LIMIT];
00219
00220 typedef struct
00221 {
00222 const char *name;
00223 const char *text;
00224 const escp2_inkname_t *const *inknames;
00225 const paperlist_t *papers;
00226 const paper_adjustment_list_t *paper_adjustments;
00227 const shade_set_t *shades;
00228 short n_inks;
00229 } inklist_t;
00230
00231 typedef struct
00232 {
00233 const char *listname;
00234 const inklist_t *const *inklists;
00235 short n_inklists;
00236 } inkgroup_t;
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264 typedef short escp2_dot_size_t[RES_N];
00265
00266
00267
00268
00269
00270 typedef short escp2_bits_t[RES_N];
00271
00272
00273
00274
00275
00276 typedef short escp2_base_resolutions_t[RES_N];
00277
00278
00279
00280
00281
00282
00283 typedef float escp2_densities_t[RES_N];
00284
00285 #define ROLL_FEED_CUT_ALL (1)
00286 #define ROLL_FEED_CUT_LAST (2)
00287 #define ROLL_FEED_DONT_EJECT (4)
00288
00289 typedef struct
00290 {
00291 const char *name;
00292 const char *text;
00293 short is_cd;
00294 short is_roll_feed;
00295 unsigned roll_feed_cut_flags;
00296 const stp_raw_t init_sequence;
00297 const stp_raw_t deinit_sequence;
00298 } input_slot_t;
00299
00300 typedef struct
00301 {
00302 const input_slot_t *slots;
00303 size_t n_input_slots;
00304 } input_slot_list_t;
00305
00306 typedef struct
00307 {
00308 const char *name;
00309 const char *text;
00310 short min_hres;
00311 short min_vres;
00312 short max_hres;
00313 short max_vres;
00314 short desired_hres;
00315 short desired_vres;
00316 } quality_t;
00317
00318 typedef struct
00319 {
00320 const quality_t *qualities;
00321 size_t n_quals;
00322 } quality_list_t;
00323
00324 typedef enum
00325 {
00326 AUTO_MODE_QUALITY,
00327 AUTO_MODE_MANUAL
00328 } auto_mode_t;
00329
00330 typedef struct
00331 {
00332 const char *name;
00333 const char *text;
00334 short value;
00335 } printer_weave_t;
00336
00337 typedef struct
00338 {
00339 const char *name;
00340 size_t n_printer_weaves;
00341 const printer_weave_t *printer_weaves;
00342 } printer_weave_list_t;
00343
00344 #define MODEL_COMMAND_MASK 0xful
00345 #define MODEL_COMMAND_1998 0x0ul
00346 #define MODEL_COMMAND_1999 0x1ul
00347 #define MODEL_COMMAND_2000 0x2ul
00348 #define MODEL_COMMAND_PRO 0x3ul
00349
00350 #define MODEL_XZEROMARGIN_MASK 0x10ul
00351 #define MODEL_XZEROMARGIN_NO 0x00ul
00352 #define MODEL_XZEROMARGIN_YES 0x10ul
00353
00354 #define MODEL_ROLLFEED_MASK 0x20ul
00355 #define MODEL_ROLLFEED_NO 0x00ul
00356 #define MODEL_ROLLFEED_YES 0x20ul
00357
00358 #define MODEL_VARIABLE_DOT_MASK 0x40ul
00359 #define MODEL_VARIABLE_NO 0x00ul
00360 #define MODEL_VARIABLE_YES 0x40ul
00361
00362 #define MODEL_GRAYMODE_MASK 0x80ul
00363 #define MODEL_GRAYMODE_NO 0x00ul
00364 #define MODEL_GRAYMODE_YES 0x80ul
00365
00366 #define MODEL_VACUUM_MASK 0x100ul
00367 #define MODEL_VACUUM_NO 0x000ul
00368 #define MODEL_VACUUM_YES 0x100ul
00369
00370 #define MODEL_FAST_360_MASK 0x200ul
00371 #define MODEL_FAST_360_NO 0x000ul
00372 #define MODEL_FAST_360_YES 0x200ul
00373
00374 #define MODEL_SEND_ZERO_ADVANCE_MASK 0x400ul
00375 #define MODEL_SEND_ZERO_ADVANCE_NO 0x000ul
00376 #define MODEL_SEND_ZERO_ADVANCE_YES 0x400ul
00377
00378 #define MODEL_SUPPORTS_INK_CHANGE_MASK 0x800ul
00379 #define MODEL_SUPPORTS_INK_CHANGE_NO 0x000ul
00380 #define MODEL_SUPPORTS_INK_CHANGE_YES 0x800ul
00381
00382 #define MODEL_PACKET_MODE_MASK 0x1000ul
00383 #define MODEL_PACKET_MODE_NO 0x0000ul
00384 #define MODEL_PACKET_MODE_YES 0x1000ul
00385
00386 #define MODEL_PRINT_TO_CD_MASK 0x2000ul
00387 #define MODEL_PRINT_TO_CD_NO 0x0000ul
00388 #define MODEL_PRINT_TO_CD_YES 0x2000ul
00389
00390 typedef enum
00391 {
00392 MODEL_COMMAND,
00393 MODEL_XZEROMARGIN,
00394 MODEL_ROLLFEED,
00395 MODEL_VARIABLE_DOT,
00396 MODEL_GRAYMODE,
00397 MODEL_VACUUM,
00398 MODEL_FAST_360,
00399 MODEL_SEND_ZERO_ADVANCE,
00400 MODEL_SUPPORTS_INK_CHANGE,
00401 MODEL_PACKET_MODE,
00402 MODEL_PRINT_TO_CD,
00403 MODEL_LIMIT
00404 } escp2_model_option_t;
00405
00406 typedef struct escp2_printer
00407 {
00408 model_cap_t flags;
00409
00410
00411 short nozzles;
00412 short min_nozzles;
00413 short nozzle_separation;
00414 short black_nozzles;
00415 short min_black_nozzles;
00416 short black_nozzle_separation;
00417 short fast_nozzles;
00418 short min_fast_nozzles;
00419 short fast_nozzle_separation;
00420 short physical_channels;
00421
00422
00423 short base_separation;
00424 short resolution_scale;
00425 short max_black_resolution;
00426
00427
00428
00429 short max_hres;
00430 short max_vres;
00431 short min_hres;
00432 short min_vres;
00433
00434 short extra_feed;
00435
00436
00437
00438 short separation_rows;
00439
00440 short pseudo_separation_rows;
00441
00442
00443 short zero_margin_offset;
00444
00445 short initial_vertical_offset;
00446 short black_initial_vertical_offset;
00447 short extra_720dpi_separation;
00448
00449
00450 int max_paper_width;
00451 int max_paper_height;
00452 int min_paper_width;
00453 int min_paper_height;
00454
00455
00456
00457
00458 short left_margin;
00459 short right_margin;
00460 short top_margin;
00461 short bottom_margin;
00462
00463 short m_left_margin;
00464 short m_right_margin;
00465 short m_top_margin;
00466 short m_bottom_margin;
00467
00468
00469 short roll_left_margin;
00470 short roll_right_margin;
00471 short roll_top_margin;
00472 short roll_bottom_margin;
00473
00474 short m_roll_left_margin;
00475 short m_roll_right_margin;
00476 short m_roll_top_margin;
00477 short m_roll_bottom_margin;
00478
00479 short cd_x_offset;
00480 short cd_y_offset;
00481 short cd_page_width;
00482 short cd_page_height;
00483
00484
00485 short alignment_passes;
00486 short alignment_choices;
00487 short alternate_alignment_passes;
00488 short alternate_alignment_choices;
00489
00490 const short *dot_sizes;
00491 const float *densities;
00492 const escp2_drop_list_t *drops;
00493
00494 const res_t *const *reslist;
00495 const inkgroup_t *inkgroup;
00496
00497 const short *bits;
00498 const short *base_resolutions;
00499 const input_slot_list_t *input_slots;
00500
00501 const quality_list_t *quality_list;
00502 const stp_raw_t *preinit_sequence;
00503 const stp_raw_t *postinit_remote_sequence;
00504
00505 const printer_weave_list_t *const printer_weaves;
00506 } stpi_escp2_printer_t;
00507
00508 extern const stpi_escp2_printer_t stpi_escp2_model_capabilities[];
00509 extern const int stpi_escp2_model_limit;
00510
00511 extern const escp2_drop_list_t stpi_escp2_simple_drops;
00512 extern const escp2_drop_list_t stpi_escp2_spro10000_drops;
00513 extern const escp2_drop_list_t stpi_escp2_variable_1_5pl_drops;
00514 extern const escp2_drop_list_t stpi_escp2_variable_2pl_drops;
00515 extern const escp2_drop_list_t stpi_escp2_variable_3pl_drops;
00516 extern const escp2_drop_list_t stpi_escp2_variable_3pl_pigment_drops;
00517 extern const escp2_drop_list_t stpi_escp2_variable_3pl_pmg_drops;
00518 extern const escp2_drop_list_t stpi_escp2_variable_1440_4pl_drops;
00519 extern const escp2_drop_list_t stpi_escp2_variable_ultrachrome_drops;
00520 extern const escp2_drop_list_t stpi_escp2_variable_2880_4pl_drops;
00521 extern const escp2_drop_list_t stpi_escp2_variable_6pl_drops;
00522 extern const escp2_drop_list_t stpi_escp2_variable_2000p_drops;
00523 extern const escp2_drop_list_t stpi_escp2_variable_x80_6pl_drops;
00524
00525 extern const paperlist_t stpi_escp2_standard_paper_list;
00526 extern const paperlist_t stpi_escp2_durabrite_paper_list;
00527 extern const paperlist_t stpi_escp2_ultrachrome_paper_list;
00528
00529 extern const paper_adjustment_list_t stpi_escp2_standard_paper_adjustment_list;
00530 extern const paper_adjustment_list_t stpi_escp2_durabrite_paper_adjustment_list;
00531 extern const paper_adjustment_list_t stpi_escp2_photo_paper_adjustment_list;
00532 extern const paper_adjustment_list_t stpi_escp2_photo2_paper_adjustment_list;
00533 extern const paper_adjustment_list_t stpi_escp2_photo3_paper_adjustment_list;
00534 extern const paper_adjustment_list_t stpi_escp2_sp960_paper_adjustment_list;
00535 extern const paper_adjustment_list_t stpi_escp2_ultrachrome_photo_paper_adjustment_list;
00536 extern const paper_adjustment_list_t stpi_escp2_ultrachrome_matte_paper_adjustment_list;
00537
00538 extern const res_t *const stpi_escp2_superfine_reslist[];
00539 extern const res_t *const stpi_escp2_no_printer_weave_reslist[];
00540 extern const res_t *const stpi_escp2_pro_reslist[];
00541 extern const res_t *const stpi_escp2_sp5000_reslist[];
00542 extern const res_t *const stpi_escp2_720dpi_reslist[];
00543 extern const res_t *const stpi_escp2_720dpi_soft_reslist[];
00544 extern const res_t *const stpi_escp2_g3_720dpi_reslist[];
00545 extern const res_t *const stpi_escp2_1440dpi_reslist[];
00546 extern const res_t *const stpi_escp2_2880dpi_reslist[];
00547 extern const res_t *const stpi_escp2_2880_1440dpi_reslist[];
00548 extern const res_t *const stpi_escp2_g3_reslist[];
00549 extern const res_t *const stpi_escp2_sc500_reslist[];
00550 extern const res_t *const stpi_escp2_sc640_reslist[];
00551
00552 extern const inkgroup_t stpi_escp2_cmy_inkgroup;
00553 extern const inkgroup_t stpi_escp2_standard_inkgroup;
00554 extern const inkgroup_t stpi_escp2_c80_inkgroup;
00555 extern const inkgroup_t stpi_escp2_c64_inkgroup;
00556 extern const inkgroup_t stpi_escp2_x80_inkgroup;
00557 extern const inkgroup_t stpi_escp2_photo_gen1_inkgroup;
00558 extern const inkgroup_t stpi_escp2_photo_gen2_inkgroup;
00559 extern const inkgroup_t stpi_escp2_photo_gen3_inkgroup;
00560 extern const inkgroup_t stpi_escp2_photo_pigment_inkgroup;
00561 extern const inkgroup_t stpi_escp2_photo7_japan_inkgroup;
00562 extern const inkgroup_t stpi_escp2_ultrachrome_inkgroup;
00563 extern const inkgroup_t stpi_escp2_f360_photo_inkgroup;
00564 extern const inkgroup_t stpi_escp2_f360_photo7_japan_inkgroup;
00565 extern const inkgroup_t stpi_escp2_f360_ultrachrome_inkgroup;
00566 extern const inkgroup_t stpi_escp2_cmykrb_inkgroup;
00567
00568 extern const escp2_inkname_t stpi_escp2_default_black_inkset;
00569
00570 extern const printer_weave_list_t stpi_escp2_standard_printer_weave_list;
00571 extern const printer_weave_list_t stpi_escp2_sp2200_printer_weave_list;
00572 extern const printer_weave_list_t stpi_escp2_pro7000_printer_weave_list;
00573 extern const printer_weave_list_t stpi_escp2_pro7500_printer_weave_list;
00574 extern const printer_weave_list_t stpi_escp2_pro7600_printer_weave_list;
00575
00576 typedef struct
00577 {
00578
00579 int nozzles;
00580 int min_nozzles;
00581 int nozzle_separation;
00582 int *head_offset;
00583 int max_head_offset;
00584 int page_management_units;
00585 int vertical_units;
00586 int horizontal_units;
00587 int micro_units;
00588 int unit_scale;
00589 int send_zero_pass_advance;
00590
00591
00592 int bitwidth;
00593 int drop_size;
00594 int ink_resid;
00595 const escp2_inkname_t *inkname;
00596
00597
00598 int logical_channels;
00599 int physical_channels;
00600 int channels_in_use;
00601
00602 unsigned char **cols;
00603 const physical_subchannel_t **channels;
00604
00605
00606 int use_black_parameters;
00607 int use_fast_360;
00608 int advanced_command_set;
00609 int use_extended_commands;
00610 const input_slot_t *input_slot;
00611 const paper_t *paper_type;
00612 const paper_adjustment_t *paper_adjustment;
00613 const inkgroup_t *ink_group;
00614 const stp_raw_t *init_sequence;
00615 const stp_raw_t *deinit_sequence;
00616 model_featureset_t command_set;
00617 int variable_dots;
00618 int has_vacuum;
00619 int has_graymode;
00620 int base_separation;
00621 int resolution_scale;
00622 int printing_resolution;
00623 int separation_rows;
00624 int pseudo_separation_rows;
00625 int extra_720dpi_separation;
00626
00627
00628 int horizontal_passes;
00629
00630 int physical_xdpi;
00631 const res_t *res;
00632 const printer_weave_t *printer_weave;
00633 int use_printer_weave;
00634
00635
00636 int page_left;
00637 int page_right;
00638 int page_top;
00639 int page_bottom;
00640 int page_width;
00641 int page_height;
00642 int page_true_height;
00643 int cd_x_offset;
00644 int cd_y_offset;
00645 int cd_outer_radius;
00646 int cd_inner_radius;
00647
00648
00649 int image_height;
00650 int image_width;
00651 int image_top;
00652 int image_left;
00653 int image_scaled_width;
00654 int image_printed_width;
00655 int image_scaled_height;
00656 int image_printed_height;
00657 int image_left_position;
00658
00659
00660 int printed_something;
00661 int initial_vertical_offset;
00662 int printing_initial_vertical_offset;
00663 int last_color;
00664 int last_pass_offset;
00665 int last_pass;
00666
00667 } escp2_privdata_t;
00668
00669 extern void stpi_escp2_init_printer(stp_vars_t *v);
00670 extern void stpi_escp2_deinit_printer(stp_vars_t *v);
00671 extern void stpi_escp2_flush_pass(stp_vars_t *v, int passno,
00672 int vertical_subpass);
00673 extern void stpi_escp2_terminate_page(stp_vars_t *v);
00674
00675 #ifdef TEST_UNCOMPRESSED
00676 #define COMPRESSION (0)
00677 #define FILLFUNC stp_fill_uncompressed
00678 #define COMPUTEFUNC stp_compute_uncompressed_linewidth
00679 #define PACKFUNC stp_pack_uncompressed
00680 #else
00681 #define COMPRESSION (1)
00682 #define FILLFUNC stp_fill_tiff
00683 #define COMPUTEFUNC stp_compute_tiff_linewidth
00684 #define PACKFUNC stp_pack_tiff
00685 #endif
00686
00687 #endif
00688
00689
00690