1 /*__________________________________ epson-escpage.c ________________________________*/
\r
3 /* 1 2 3 4 5 6 7 8 */
\r
4 /*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
\r
5 /*******************************************|********************************************/
\r
7 * Copyright (c) 2010 Seiko Epson Corporation All rights reserved.
\r
9 * Copyright protection claimed includes all forms and matters of
\r
10 * copyrightable material and information now allowed by statutory or judicial
\r
11 * law or hereinafter granted, including without limitation, material generated
\r
12 * from the software programs which are displayed on the screen such as icons,
\r
13 * screen display looks, etc.
\r
17 /*------------------------------------ Includes -------------------------------------*/
\r
18 /*******************************************|********************************************/
\r
19 #include "epson-escpr-err.h"
\r
20 #include "epson-escpr-mem.h"
\r
21 #include "epson-escpage-color.h"
\r
22 #include "epson-escpage-mono.h"
\r
23 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
24 #include "epson-escpage-s.h"
\r
26 #include "epson-escpage.h"
\r
28 /*----------------------------- Local Macro Definitions -------------------------------*/
\r
29 /*******************************************|********************************************/
\r
30 #ifdef EPS_LOG_MODULE_PAGE
\r
31 #define EPS_LOG_MODULE EPS_LOG_MODULE_PAGE
\r
33 #define EPS_LOG_MODULE 0
\r
36 /*----------------------------------- EJL Commands ------------------------------------*/
\r
37 /*******************************************|********************************************/
\r
38 const static EPS_UINT8 sbEJL_ESC_SOH[] = "\x1B\x01"; /* Escape and start of heading <ESC><SOH> */
\r
39 const static EPS_UINT8 sbEJL[] = "@EJL"; /* EJL command */
\r
40 const static EPS_UINT8 sbEJL_SP[] = "\x20"; /* Space <SP> */
\r
41 const static EPS_UINT8 sbEJL_LF[] = "\x0A"; /* Line Feed <LF> */
\r
42 const static EPS_UINT8 sbEJL_EN[] = "@EJL""\x20""EN""\x20""LA=ESC/PAGE"; /* EJL ENTER command */
\r
43 const static EPS_UINT8 sbEJL_EN_C[] = "@EJL""\x20""EN""\x20""LA=ESC/PAGE-COLOR";/* EJL ENTER command */
\r
44 const static EPS_UINT8 sbEJL_SE[] = "@EJL""\x20""SE""\x20""LA=ESC/PAGE"; /* EJL SELECT command */
\r
45 const static EPS_UINT8 sbEJL_SET[] = "SET"; /* SET command */
\r
47 /*--------------------------------- ESC/Page Commands ---------------------------------*/
\r
48 /*******************************************|********************************************/
\r
49 const static EPS_INT8 sbLOS[] = "\x1D%d;%dloE"; /* Logical Origin setting for 300 dpi(0.2 inch) */
\r
50 const static EPS_UINT8 sbCHPAS[] = {0x1D, '0', 'X'}; /* Reset the current absolute X position */
\r
51 const static EPS_UINT8 sbCVPAS[] = {0x1D, '0', 'Y'}; /* Reset the current absolute Y position */
\r
52 const static EPS_INT8 sbCA[] = "\x1D""0;0;%d;%dcaE"; /* Set Clip Area */
\r
55 /*--------------------------- Data Structure Declarations ---------------------------*/
\r
56 /*******************************************|********************************************/
\r
57 typedef struct _tagEPS_PAGE_MEDIA_NAME_ {
\r
59 const EPS_INT8 *name;
\r
60 } EPS_PAGE_MEDIA_NAME;
\r
62 /*--------------------------- ESC/Page Media Declarations ---------------------------*/
\r
63 /*******************************************|********************************************/
\r
65 const EPS_PAGE_MEDIA_NAME pageMediaType[] = {
\r
66 { EPS_MTID_PLAIN, "NM" },
\r
67 { EPS_MTID_SEMITHICK, "ST"},
\r
68 { EPS_MTID_PREPRINTED, "PP"},
\r
69 { EPS_MTID_LETTERHEAD, "LH"},
\r
70 { EPS_MTID_RECYCLED, "RC"},
\r
71 { EPS_MTID_COLOR, "CL"},
\r
72 { EPS_MTID_LABEL, "LB"},
\r
73 { EPS_MTID_THICK, "TK"},
\r
74 { EPS_MTID_COATED, "CT"},
\r
75 { EPS_MTID_SPECIAL, "SP"},
\r
76 { EPS_MTID_TRANSPARENT, "TP"},
\r
77 { EPS_MTID_UNSPECIFIED, "UN"}
\r
81 const EPS_PAGE_MEDIA_NAME pagePaperSource[] = {
\r
82 { EPS_MPID_AUTO, "AU" },
\r
83 /*{ EPS_MPID_MPTRAY, "1" },
\r
84 { EPS_MPID_FRONT1, "2" },
\r
85 { EPS_MPID_FRONT2, "3" },
\r
86 { EPS_MPID_FRONT3, "4" },
\r
87 { EPS_MPID_FRONT4, "5" },*/
\r
88 { IPS_MPTID_TRAY1, "1" },
\r
89 { IPS_MPTID_TRAY2, "2" },
\r
90 { IPS_MPTID_TRAY3, "3" },
\r
91 { IPS_MPTID_TRAY4, "4" },
\r
92 { IPS_MPTID_TRAY5, "5" },
\r
93 { IPS_MPTID_TRAY6, "6" },
\r
94 { IPS_MPTID_TRAY7, "7" },
\r
95 { IPS_MPTID_TRAY8, "8" },
\r
96 { IPS_MPTID_TRAY9, "9" },
\r
97 { IPS_MPTID_TRAY10, "10" },
\r
98 { IPS_MPTID_TRAY11, "11" },
\r
99 { IPS_MPTID_TRAY12, "12" },
\r
100 { IPS_MPTID_TRAY13, "13" },
\r
101 { IPS_MPTID_TRAY14, "14" },
\r
102 { IPS_MPTID_TRAY15, "15" },
\r
106 /*---------------------------- ESC/P-R Lib Global Variables --------------------------*/
\r
107 /*******************************************|********************************************/
\r
108 extern EPS_CMN_FUNC epsCmnFnc;
\r
109 extern EPS_PRINT_JOB printJob;
\r
112 #include "epsmp-make-img.h"
\r
113 static FILE *fp = NULL;
\r
116 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
117 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
118 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
119 /*-------------------- Public Functions ---------------------*/
\r
120 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
121 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
122 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
124 /*******************************************|********************************************/
\r
126 /* Function name: pageInitJob() */
\r
130 /* Name: Type: Description: */
\r
131 /* jobAttr const EPS_JOB_ATTRIB* I: Print Job Attribute */
\r
133 /* Return value: */
\r
135 /* EPS_ERR_NONE - Success */
\r
137 /* EPS_ERR_INVALID_VERSION - Invalid structure version */
\r
138 /* EPS_ERR_INV_COLOR_PLANE - Invalid Color Plane */
\r
139 /* EPS_ERR_INV_PALETTE_SIZE - Invalid Palette Size */
\r
140 /* EPS_ERR_INV_PALETTE_DATA - Invalid Palette Data */
\r
141 /* EPS_ERR_INV_MEDIA_SIZE - Invalid Media Size */
\r
142 /* EPS_ERR_INV_MEDIA_TYPE - Invalid Media Type */
\r
143 /* EPS_ERR_INV_BORDER_MODE - Invalid Border Mode */
\r
144 /* EPS_ERR_INV_PAPER_SOURCE - Invalid Paper source */
\r
145 /* EPS_ERR_INV_COLOR_MODE - Invalid Color Mode */
\r
146 /* EPS_ERR_INV_INPUT_RESOLUTION - Invalid Input Resolution */
\r
147 /* EPS_ERR_INV_DUPLEX - Invalid duplex */
\r
148 /* EPS_ERR_INV_FEED_DIRECTION - Invalid feed direction */
\r
151 /* Called form epsStartJob. Confirm ESC/Page Job Attribute. */
\r
153 /*******************************************|********************************************/
\r
154 EPS_ERR_CODE pageInitJob(
\r
156 const EPS_JOB_ATTRIB *jobAttr
\r
160 const EPS_PAGE_MEDIASIZE *mediaSizeEnt = NULL;
\r
164 /*** Validate input parameters */
\r
165 /*** Structure version */
\r
166 if(EPS_JOB_ATTRIB_VER_3 > jobAttr->version){
\r
167 EPS_RETURN( EPS_ERR_INVALID_VERSION )
\r
170 /*** Color Plane */
\r
171 if (! ( (jobAttr->colorPlane == EPS_CP_FULLCOLOR ) ||
\r
172 (jobAttr->colorPlane == EPS_CP_256COLOR ) ) ){
\r
173 EPS_RETURN( EPS_ERR_INV_COLOR_PLANE )
\r
177 for( i=0; i < dim(pageMediaType); i++ ) {
\r
178 if( jobAttr->mediaTypeIdx == pageMediaType[i].id ) {
\r
182 if(i >= dim(pageMediaType)){
\r
183 EPS_RETURN( EPS_ERR_INV_MEDIA_TYPE )
\r
187 /*** Print Quality */
\r
188 if (! ( (jobAttr->printQuality == EPS_MQID_NORMAL ) ||
\r
189 (jobAttr->printQuality == EPS_MQID_HIGH ) ) ){
\r
190 EPS_RETURN( EPS_ERR_INV_PRINT_QUALITY )
\r
193 /*** Input Image Resolution */
\r
194 if (! ( (jobAttr->inputResolution == EPS_IR_150X150 ) ||
\r
195 (jobAttr->inputResolution == EPS_IR_300X300 ) ||
\r
196 (jobAttr->inputResolution == EPS_IR_1200X1200 )
\r
197 #if !EPS_PAGE_LOWRES_MODE
\r
198 || (jobAttr->inputResolution == EPS_IR_600X600 )
\r
201 EPS_RETURN( EPS_ERR_INV_INPUT_RESOLUTION )
\r
204 /*** Paper Source */
\r
205 debug_msg("__ Number = %d __\n", dim(pagePaperSource) );
\r
206 for( i=0; i < dim(pagePaperSource); i++ ) {
\r
207 if( jobAttr->paperSource == pagePaperSource[i].id ) {
\r
211 if(i >= dim(pagePaperSource)){
\r
212 debug_msg(" Invalid paper source: i = %d\n", i);
\r
213 EPS_RETURN( EPS_ERR_INV_PAPER_SOURCE )
\r
216 /*** Border Mode */
\r
217 if( jobAttr->printLayout != EPS_MLID_BORDERS ){
\r
218 EPS_RETURN( EPS_ERR_INV_BORDER_MODE )
\r
222 if( !( (jobAttr->colorMode == EPS_CM_COLOR ) ||
\r
223 (jobAttr->colorMode == EPS_CM_MONOCHROME ) ) ){
\r
224 EPS_RETURN( EPS_ERR_INV_COLOR_MODE )
\r
226 if( jobAttr->colorMode == EPS_CM_COLOR &&
\r
227 printJob.printer->language == EPS_LANG_ESCPAGE){
\r
228 EPS_RETURN( EPS_ERR_INV_COLOR_MODE )
\r
231 /*** Pallette Data */
\r
232 if (jobAttr->colorPlane == EPS_CP_256COLOR) {
\r
233 if (! ((jobAttr->paletteSize >= 3 ) &&
\r
234 (jobAttr->paletteSize <= 768/*765*/ ) ) ){
\r
235 EPS_RETURN( EPS_ERR_INV_PALETTE_SIZE )
\r
238 if ( jobAttr->paletteData == NULL ){
\r
239 EPS_RETURN( EPS_ERR_INV_PALETTE_DATA )
\r
244 if( !( (jobAttr->duplex == EPS_DUPLEX_NONE ) ||
\r
245 (jobAttr->duplex == EPS_DUPLEX_LONG ) ||
\r
246 (jobAttr->duplex == EPS_DUPLEX_SHORT ) ) ){
\r
247 EPS_RETURN( EPS_ERR_INV_DUPLEX )
\r
251 if( !( (jobAttr->feedDirection == EPS_FEEDDIR_PORTRAIT ) ||
\r
252 (jobAttr->feedDirection == EPS_FEEDDIR_LANDSCAPE ) ) ){
\r
253 EPS_RETURN( EPS_ERR_INV_FEED_DIRECTION )
\r
257 memcpy(&printJob.attr, jobAttr, sizeof(printJob.attr));
\r
258 if(jobAttr->copies < 0){
\r
259 printJob.attr.copies = 1;
\r
262 /*** Find the Media by ID */
\r
263 for(i = 0; i < dim(pageMediaSize); i++){
\r
264 if( jobAttr->mediaSizeIdx == pageMediaSize[i].id ){
\r
265 mediaSizeEnt = &pageMediaSize[i];
\r
269 if( NULL != mediaSizeEnt){
\r
270 printJob.printableAreaWidth = mediaSizeEnt->print_area_x_border;
\r
271 printJob.printableAreaHeight = mediaSizeEnt->print_area_y_border;
\r
272 printJob.topMargin = 120;
\r
273 printJob.leftMargin = 120;
\r
275 EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE )
\r
278 if(EPS_IR_300X300 == jobAttr->inputResolution){
\r
279 printJob.printableAreaWidth /= 2;
\r
280 printJob.printableAreaHeight /= 2;
\r
281 printJob.topMargin /= 2;
\r
282 printJob.leftMargin /= 2;
\r
283 } else if(EPS_IR_150X150 == jobAttr->inputResolution){
\r
284 printJob.printableAreaWidth /= 4;
\r
285 printJob.printableAreaHeight /= 4;
\r
286 printJob.topMargin /= 4;
\r
287 printJob.leftMargin /= 4;
\r
290 printJob.bpp = (printJob.attr.colorPlane == EPS_CP_256COLOR)?1:3;
\r
291 debug_msg("printJob.bpp = %d\n", printJob.bpp);
\r
293 printJob.whiteColorValue = memSearchWhiteColorVal(printJob.attr.colorPlane,
\r
294 printJob.attr.paletteData,
\r
295 printJob.attr.paletteSize);
\r
297 EPS_RETURN( EPS_ERR_NONE )
\r
301 /*******************************************|********************************************/
\r
303 /* Function name: pageAllocBuffer() */
\r
307 /* Name: Type: Description: */
\r
310 /* Return value: */
\r
311 /* EPS_ERR_NONE - Success */
\r
312 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
315 /* Allocate buffer for ESC/Page Job. */
\r
317 /*******************************************|********************************************/
\r
318 EPS_ERR_CODE pageAllocBuffer(void)
\r
320 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
324 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
325 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
326 ret = pageS_AllocBuffer();
\r
329 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
330 /** ESC/Page-Color **/
\r
331 ret = pageAllocBuffer_C();
\r
334 ret = pageAllocBuffer_M();
\r
341 /*******************************************|********************************************/
\r
343 /* Function name: pageRelaseBuffer() */
\r
347 /* Name: Type: Description: */
\r
350 /* Return value: */
\r
354 /* Free buffer for ESC/Page Job. */
\r
356 /*******************************************|********************************************/
\r
357 void pageRelaseBuffer(void)
\r
361 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
362 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
363 pageS_RelaseBuffer();
\r
366 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
367 /** ESC/Page-Color **/
\r
368 pageRelaseBuffer_C();
\r
371 pageRelaseBuffer_M();
\r
378 /*******************************************|********************************************/
\r
380 /* Function name: pageStartJob() */
\r
384 /* Name: Type: Description: */
\r
387 /* Return value: */
\r
388 /* EPS_ERR_NONE - Success */
\r
389 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
390 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
391 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
392 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
395 /* Send ESC/Page start job commands. */
\r
397 /*******************************************|********************************************/
\r
398 EPS_ERR_CODE pageStartJob(void)
\r
400 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
404 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
405 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
406 ret = pageS_StartJob();
\r
409 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
410 /** ESC/Page-Color **/
\r
411 debug_msg("call Start Job Color mode\n");
\r
412 ret = pageStartJob_C();
\r
413 debug_msg("call Start Job Color mode 1.0 \n");
\r
416 debug_msg("startjob Mono\n");
\r
417 ret = pageStartJob_M();
\r
424 /*******************************************|********************************************/
\r
426 /* Function name: pageEndJob() */
\r
430 /* Name: Type: Description: */
\r
433 /* Return value: */
\r
434 /* EPS_ERR_NONE - Success */
\r
435 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
436 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
437 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
438 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
441 /* Send ESC/Page end job commands. */
\r
443 /*******************************************|********************************************/
\r
444 EPS_ERR_CODE pageEndJob()
\r
446 EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
\r
450 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
451 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
452 ret = pageS_EndJob();
\r
455 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
456 /** ESC/Page-Color **/
\r
457 ret = pageEndJob_C();
\r
460 ret = pageEndJob_M();
\r
467 /*******************************************|********************************************/
\r
469 /* Function name: pageStartPage() */
\r
473 /* Name: Type: Description: */
\r
476 /* Return value: */
\r
477 /* EPS_ERR_NONE - Success */
\r
478 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
479 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
480 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
481 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
484 /* Send ESC/Page start page commands. */
\r
486 /*******************************************|********************************************/
\r
487 EPS_ERR_CODE pageStartPage()
\r
489 debug_msg("check StartPage call function \n");
\r
490 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
494 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
495 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
496 ret = pageS_StartPage();
\r
499 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
500 /** ESC/Page-Color **/
\r
501 ret = pageStartPage_C();
\r
504 ret = pageStartPage_M();
\r
511 /*******************************************|********************************************/
\r
513 /* Function name: pageEndPage() */
\r
517 /* Name: Type: Description: */
\r
520 /* Return value: */
\r
521 /* EPS_ERR_NONE - Success */
\r
522 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
523 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
524 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
525 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
528 /* Send ESC/Page end page commands. */
\r
530 /*******************************************|********************************************/
\r
531 EPS_ERR_CODE pageEndPage()
\r
533 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
537 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
538 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
539 ret = pageS_EndPage();
\r
542 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
543 /** ESC/Page-Color **/
\r
544 ret = pageEndPage_C();
\r
551 /*******************************************|********************************************/
\r
553 /* Function name: pageColorRow() */
\r
557 /* Name: Type: Description: */
\r
560 /* Return value: */
\r
561 /* EPS_ERR_NONE - Success */
\r
562 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
563 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
564 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
565 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
568 /* Send ESC/Page raster commands. */
\r
570 /*******************************************|********************************************/
\r
571 EPS_ERR_CODE pageColorRow(
\r
573 const EPS_BANDBMP* pInBmp,
\r
577 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
581 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
582 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
583 ret = pageS_ColorRow(pInBmp, pBandRec);
\r
586 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
587 /** ESC/Page-Color **/
\r
588 ret = pageColorRow_C(pInBmp, pBandRec);
\r
591 ret = pageColorRow_M(pInBmp, pBandRec);
\r
598 /*******************************************|********************************************/
\r
600 /* Function name: pageSendLeftovers() */
\r
604 /* Name: Type: Description: */
\r
607 /* Return value: */
\r
608 /* EPS_ERR_NONE - Success */
\r
609 /* EPS_ERR_INVALID_CALL - This call was unnecessary */
\r
610 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
611 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
612 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
615 /* send leftovers data. */
\r
617 /*******************************************|********************************************/
\r
618 EPS_ERR_CODE pageSendLeftovers(
\r
623 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
627 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
628 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
629 ret = pageS_SendLeftovers();
\r
632 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
633 /** ESC/Page-Color **/
\r
634 ret = pageSendLeftovers_C();
\r
637 ret = pageSendLeftovers_M();
\r
644 EPS_ERR_CODE pageCreateMediaInfo (
\r
646 EPS_PRINTER_INN* printer,
\r
647 EPS_UINT8* pmString,
\r
651 EPS_INT32 num_mSize = dim(pageMediaSize);
\r
652 EPS_INT32 num_mType = dim(pageMediaType);
\r
654 EPS_MEDIA_SIZE* sizeList = NULL;
\r
655 EPS_MEDIA_TYPE* typeList = NULL;
\r
656 EPS_UINT32 paperSource = EPS_MPID_ALL_ESCPAGE;
\r
660 memset(&printer->supportedMedia, 0, sizeof(EPS_SUPPORTED_MEDIA));
\r
662 /* Allocate memory for the media size list. */
\r
663 sizeList = (EPS_MEDIA_SIZE*)EPS_ALLOC( sizeof(EPS_MEDIA_SIZE) * num_mSize );
\r
664 if( sizeList == NULL ){
\r
665 EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
\r
668 /* Allocate memory for the media type array. */
\r
669 typeList = (EPS_MEDIA_TYPE*)EPS_ALLOC( sizeof(EPS_MEDIA_TYPE) * num_mSize * num_mType );
\r
670 if (typeList == NULL) {
\r
671 EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
\r
674 if( sizeof(EPS_UINT32) == pmSize ){
\r
675 memcpy(&paperSource, pmString, sizeof(EPS_UINT32));
\r
678 /* set media size property. */
\r
679 for(i = 0; i < num_mSize; i++){
\r
680 /* set media type property. */
\r
681 for(j = 0; j < num_mType; j++){
\r
682 n = i * num_mType + j;
\r
683 typeList[n].mediaTypeID = pageMediaType[j].id;
\r
684 typeList[n].paperSource = paperSource;
\r
685 typeList[n].layout = EPS_MLID_BORDERS;
\r
686 #if EPS_PAGE_LOWRES_MODE
\r
687 typeList[n].quality = EPS_MQID_DRAFT | EPS_MQID_NORMAL;
\r
689 typeList[n].quality = EPS_MQID_DRAFT | EPS_MQID_NORMAL | EPS_MQID_HIGH;
\r
692 if(EPS_MSID_POSTCARD == pageMediaSize[i].id){
\r
693 typeList[n].duplex = EPS_DUPLEX_DISABLE;
\r
695 typeList[n].duplex = EPS_DUPLEX_ENABLE;
\r
699 sizeList[i].mediaSizeID = pageMediaSize[i].id;
\r
700 sizeList[i].numTypes = num_mType;
\r
701 sizeList[i].typeList = &typeList[i];
\r
704 printer->supportedMedia.sizeList = sizeList;
\r
705 printer->supportedMedia.numSizes = num_mSize;
\r
707 #if EPS_PAGE_LOWRES_MODE
\r
708 printer->supportedMedia.resolution = EPS_IR_150X150 | EPS_IR_300X300;
\r
710 printer->supportedMedia.resolution = EPS_IR_150X150 | EPS_IR_300X300 | EPS_IR_600X600 | EPS_IR_1200X1200;
\r
713 #if GCOMSW_CMD_ESCPAGE_S
\r
714 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
715 pageS_UpdateSupportedMedia( &printer->supportedMedia );
\r
719 EPS_RETURN( EPS_ERR_NONE )
\r
723 void pageClearSupportedMedia (
\r
725 EPS_PRINTER_INN* printer
\r
730 if( NULL != printer->supportedMedia.sizeList ){
\r
731 EPS_SAFE_RELEASE(printer->supportedMedia.sizeList[0].typeList);
\r
732 EPS_SAFE_RELEASE(printer->supportedMedia.sizeList);
\r
739 EPS_ERR_CODE pageGetPrintableArea (
\r
741 EPS_JOB_ATTRIB* jobAttr,
\r
742 EPS_UINT32* printableWidth,
\r
743 EPS_UINT32* printableHeight
\r
746 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
747 EPS_INT32 num_mSize = dim(pageMediaSize);
\r
748 EPS_INT32 sizeIdx = 0;
\r
752 /*** Validate/Confirm Page Attribute Data */
\r
754 for(sizeIdx = 0; sizeIdx < num_mSize; sizeIdx++){
\r
755 if(pageMediaSize[sizeIdx].id == jobAttr->mediaSizeIdx){
\r
759 if(sizeIdx >= num_mSize){
\r
760 EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE )
\r
763 /*** Border Mode */
\r
764 if( jobAttr->printLayout != EPS_MLID_BORDERS ){
\r
765 EPS_RETURN( EPS_ERR_INV_BORDER_MODE )
\r
768 /*** Input Image Resolution */
\r
769 if (! ( (jobAttr->inputResolution == EPS_IR_150X150 ) ||
\r
770 (jobAttr->inputResolution == EPS_IR_300X300 ) ||
\r
771 (jobAttr->inputResolution == EPS_IR_600X600 ) ||
\r
772 (jobAttr->inputResolution == EPS_IR_1200X1200 )) ){
\r
773 EPS_RETURN( EPS_ERR_INV_INPUT_RESOLUTION )
\r
776 *printableWidth = pageMediaSize[sizeIdx].print_area_x_border;
\r
777 *printableHeight = pageMediaSize[sizeIdx].print_area_y_border;
\r
778 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
779 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
780 pageS_FeedExchange(jobAttr, printableWidth, printableHeight);
\r
784 if(EPS_IR_300X300 == jobAttr->inputResolution){
\r
785 *printableWidth /= 2;
\r
786 *printableHeight /= 2;
\r
787 } else if(EPS_IR_150X150 == jobAttr->inputResolution){
\r
788 *printableWidth /= 4;
\r
789 *printableHeight /= 4;
\r
790 *printableHeight -= 2;
\r
797 EPS_ERR_CODE ejlStart (
\r
799 EPS_COMMAND_BUFFER *pCmdBuff,
\r
800 PAGE_CmdBuffGrow pfncGrow
\r
803 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
809 #define EJLStart_ADDSTR(b, p, v) \
\r
811 sprintf(b, " %s=%s", p, v); \
\r
814 #define EJLStart_ADDINT(b, p, v) \
\r
816 sprintf(b, " %s=%d", p, v); \
\r
820 #ifdef GCOMSW_DEBUG
\r
821 if(pCmdBuff->len+EPS_EJL_LINEMAX > pCmdBuff->size){EPS_DBGPRINT(("Command buffer not enough!\r\n"))}
\r
824 p = pCmdBuff->p + pCmdBuff->len;
\r
826 /*** EJL commands ***/
\r
827 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
828 /** ESC/Page-Color **/
\r
829 sprintf(p, "%s%s \x0A%s\x0A%s %s",
\r
830 sbEJL_ESC_SOH, /* <ESC><SOH> */
\r
832 sbEJL_SE, /* EJL SELECT command */
\r
834 sbEJL_SET); /* SET command */
\r
837 sprintf(p, "%s%s \x0A%s\x0A%s%s \x0A%s\x0A%s %s",
\r
838 sbEJL_ESC_SOH, /* <ESC><SOH> */
\r
840 sbEJL_EN, /* EJL ENTER command */
\r
841 sbEJL_ESC_SOH, /* <ESC><SOH> */
\r
843 sbEJL_SE, /* EJL SELECT command */
\r
845 sbEJL_SET); /* SET command */
\r
850 if(printJob.attr.inputResolution == EPS_IR_1200X1200){
\r
851 EJLStart_ADDSTR(p, "RS", "1200");
\r
852 } else if(EPS_IR_600X600 == printJob.attr.inputResolution){
\r
853 EJLStart_ADDSTR(p, "RS", "FN");
\r
855 EJLStart_ADDSTR(p, "RS", "QK");
\r
858 for( i=0; i < dim(pageMediaSize); i++ ) {
\r
860 if( printJob.attr.mediaSizeIdx == pageMediaSize[i].id ) {
\r
866 EJLStart_ADDSTR(p, "PS", pageMediaSize[i].name);
\r
868 for( i=0; i < dim(pageMediaType); i++ ) {
\r
869 if( printJob.attr.mediaTypeIdx == pageMediaType[i].id ) {
\r
873 debug_msg("print Job paperType = %d\n", printJob.attr.mediaTypeIdx);
\r
874 EJLStart_ADDSTR(p, "PK", pageMediaType[i].name);
\r
877 for( i=0; i < dim(pagePaperSource); i++ ) {
\r
878 if( printJob.attr.paperSource == pagePaperSource[i].id ) {
\r
879 debug_msg("print Job paperSource = %d\n", i);
\r
883 debug_msg("Check manual feed\n");
\r
884 if(printJob.attr.manualFeed == 1)
\r
886 debug_msg("MANUAL FEED\n");
\r
887 EJLStart_ADDSTR(p, "PU", "AU");
\r
890 debug_msg("pagePaperSource.name = %s\n", pagePaperSource[i].name);
\r
891 EJLStart_ADDSTR(p, "PU", pagePaperSource[i].name);
\r
895 if(printJob.attr.FacingPage == 0){
\r
896 EJLStart_ADDSTR(p, "OU", "FD");
\r
898 EJLStart_ADDSTR(p, "OU", "FU");
\r
902 EJLStart_ADDSTR(p, "DX", ( printJob.attr.duplex != EPS_DUPLEX_NONE )?"ON":"OFF");
\r
904 if( printJob.attr.duplex != EPS_DUPLEX_NONE ) {
\r
906 EJLStart_ADDSTR(p, "BD", ( printJob.attr.duplex == EPS_DUPLEX_LONG )?"LE":"SE");
\r
909 EJLStart_ADDSTR(p, "TB", "0");
\r
910 EJLStart_ADDSTR(p, "LB", "0");
\r
914 EJLStart_ADDSTR(p, "ZO", "OFF");
\r
917 EJLStart_ADDSTR(p, "EC", "ON" );
\r
920 if(printJob.attr.RiTech == TRUE){
\r
921 EJLStart_ADDSTR(p, "RI", "ON");
\r
923 EJLStart_ADDSTR(p, "RI", "OFF");
\r
927 if(printJob.attr.tonerSave == 1){
\r
928 EJLStart_ADDSTR(p, "SN", "ON");
\r
930 EJLStart_ADDSTR(p, "SN", "OFF");
\r
935 if( printJob.attr.collate ) {
\r
937 EJLStart_ADDINT(p, "CO", 1);
\r
939 EJLStart_ADDINT(p, "QT", printJob.attr.copies);
\r
943 /*EJLStart_ADDINT(p, "CO", printJob.attr.copies);
\r
945 EJLStart_ADDINT(p, "QT", 1);*/
\r
947 if(printJob.attr.colLate)
\r
949 EJLStart_ADDINT(p, "CO", 1);
\r
951 EJLStart_ADDINT(p, "QT", printJob.attr.copies);
\r
953 EJLStart_ADDINT(p, "CO", printJob.attr.copies);
\r
955 EJLStart_ADDINT(p, "QT", 1);
\r
959 /* Feed direction */
\r
960 if( EPS_FEEDDIR_LANDSCAPE == printJob.attr.feedDirection ){
\r
961 EJLStart_ADDSTR(p, "FE", "SE");
\r
964 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
965 /** ESC/Page-Color **/
\r
967 EJLStart_ADDSTR(p, "SZ", "OFF");
\r
970 EJLStart_ADDSTR(p, "GAMMAMODE", "NORMAL");
\r
973 EJLStart_ADDSTR(p, "SL", "YES");
\r
976 EJLStart_ADDSTR(p, "TO", "0");
\r
979 EJLStart_ADDSTR(p, "LO", "0");
\r
982 EJLStart_ADDSTR(p, "OR", "PO");
\r
984 /* EJL ENTER command */
\r
985 sprintf(p, " %s%s%s", sbEJL_LF, sbEJL_EN_C, sbEJL_LF);
\r
988 EJLStart_ADDSTR(p, "FO", "OFF");
\r
990 /* EJL ENTER command */
\r
991 sprintf(p, " %s%s%s", sbEJL_LF, sbEJL_EN, sbEJL_LF);
\r
995 pCmdBuff->len += (EPS_INT32)(p - pCmdBuff->p);
\r
1001 EPS_ERR_CODE ejlEnd (
\r
1003 EPS_COMMAND_BUFFER *pCmdBuff,
\r
1004 PAGE_CmdBuffGrow pfncGrow,
\r
1005 EPS_INT32 pageCount
\r
1008 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
1009 EPS_UINT32 dwPaperNum = pageCount;
\r
1014 #ifdef GCOMSW_DEBUG
\r
1015 if(pCmdBuff->len+EPS_EJL_LINEMAX > pCmdBuff->size){EPS_DBGPRINT(("Command buffer not enough!\r\n"))}
\r
1018 p = pCmdBuff->p + pCmdBuff->len;
\r
1020 /* EJL commands -------- */
\r
1021 sprintf(p, "%s%s ",
\r
1022 sbEJL_ESC_SOH, /* <ESC><SOH> */
\r
1023 sbEJL); /* @EJL */
\r
1027 if( printJob.attr.duplex != EPS_DUPLEX_NONE ){
\r
1028 dwPaperNum = (pageCount+1)/2;
\r
1030 sprintf(p, "JI PAGES=\"%d\"", dwPaperNum);
\r
1034 sprintf(p, " %s%s %s", sbEJL_LF, sbEJL, sbEJL_LF);
\r
1037 pCmdBuff->len = (EPS_INT32)(p - pCmdBuff->p);
\r
1039 #ifdef GCOMSW_DEBUG
\r
1040 if(pCmdBuff->len > pCmdBuff->size){EPS_DBGPRINT(("Command buffer over flow!!\r\n"))}
\r
1047 EPS_ERR_CODE ejlPageEsc (
\r
1049 EPS_COMMAND_BUFFER *pCmdBuff,
\r
1050 PAGE_CmdBuffGrow pfncGrow
\r
1053 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
1058 #define PageEscCommand_ADDCMD(b, CMD) { \
\r
1059 memcpy(b, CMD, sizeof(CMD)); \
\r
1060 b += sizeof(CMD); \
\r
1063 p = pCmdBuff->p + pCmdBuff->len;
\r
1065 /* Set Logical Origin Setting */
\r
1066 sprintf(p, sbLOS, printJob.leftMargin, printJob.topMargin);
\r
1069 /* Reset the current absolute position */
\r
1070 PageEscCommand_ADDCMD(p, sbCHPAS);
\r
1071 PageEscCommand_ADDCMD(p, sbCVPAS);
\r
1073 /* Set Clip Area */
\r
1074 sprintf(p, sbCA, printJob.printableAreaWidth, printJob.printableAreaHeight);
\r
1077 pCmdBuff->len = (EPS_INT32)(p - pCmdBuff->p);
\r
1082 /*__________________________________ epson-escpage.c ________________________________*/
\r
1084 /*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
\r
1085 /* 1 2 3 4 5 6 7 8 */
\r
1086 /*******************************************|********************************************/
\r
1087 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
1088 /***** End of File *** End of File *** End of File *** End of File *** End of File ******/
\r
1089 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r