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
70 const EPS_PAGE_MEDIA_NAME pagePaperSource[] = {
\r
71 { EPS_MPID_AUTO, "AU" },
\r
72 { EPS_MPID_MPTRAY, "MP" },
\r
73 { EPS_MPID_FRONT1, "LC1" },
\r
74 { EPS_MPID_FRONT2, "LC2" },
\r
75 { EPS_MPID_FRONT3, "LC3" },
\r
76 { EPS_MPID_FRONT4, "LC4" }
\r
80 /*---------------------------- ESC/P-R Lib Global Variables --------------------------*/
\r
81 /*******************************************|********************************************/
\r
82 extern EPS_CMN_FUNC epsCmnFnc;
\r
83 extern EPS_PRINT_JOB printJob;
\r
86 #include "epsmp-make-img.h"
\r
87 static FILE *fp = NULL;
\r
90 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
91 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
92 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
93 /*-------------------- Public Functions ---------------------*/
\r
94 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
95 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
96 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
98 /*******************************************|********************************************/
\r
100 /* Function name: pageInitJob() */
\r
104 /* Name: Type: Description: */
\r
105 /* jobAttr const EPS_JOB_ATTRIB* I: Print Job Attribute */
\r
107 /* Return value: */
\r
109 /* EPS_ERR_NONE - Success */
\r
111 /* EPS_ERR_INVALID_VERSION - Invalid structure version */
\r
112 /* EPS_ERR_INV_COLOR_PLANE - Invalid Color Plane */
\r
113 /* EPS_ERR_INV_PALETTE_SIZE - Invalid Palette Size */
\r
114 /* EPS_ERR_INV_PALETTE_DATA - Invalid Palette Data */
\r
115 /* EPS_ERR_INV_MEDIA_SIZE - Invalid Media Size */
\r
116 /* EPS_ERR_INV_MEDIA_TYPE - Invalid Media Type */
\r
117 /* EPS_ERR_INV_BORDER_MODE - Invalid Border Mode */
\r
118 /* EPS_ERR_INV_PAPER_SOURCE - Invalid Paper source */
\r
119 /* EPS_ERR_INV_COLOR_MODE - Invalid Color Mode */
\r
120 /* EPS_ERR_INV_INPUT_RESOLUTION - Invalid Input Resolution */
\r
121 /* EPS_ERR_INV_DUPLEX - Invalid duplex */
\r
122 /* EPS_ERR_INV_FEED_DIRECTION - Invalid feed direction */
\r
125 /* Called form epsStartJob. Confirm ESC/Page Job Attribute. */
\r
127 /*******************************************|********************************************/
\r
128 EPS_ERR_CODE pageInitJob(
\r
130 const EPS_JOB_ATTRIB *jobAttr
\r
134 const EPS_PAGE_MEDIASIZE *mediaSizeEnt = NULL;
\r
138 /*** Validate input parameters */
\r
139 /*** Structure version */
\r
140 if(EPS_JOB_ATTRIB_VER_3 > jobAttr->version){
\r
141 EPS_RETURN( EPS_ERR_INVALID_VERSION )
\r
144 /*** Color Plane */
\r
145 if (! ( (jobAttr->colorPlane == EPS_CP_FULLCOLOR ) ||
\r
146 (jobAttr->colorPlane == EPS_CP_256COLOR ) ) ){
\r
147 EPS_RETURN( EPS_ERR_INV_COLOR_PLANE )
\r
151 for( i=0; i < dim(pageMediaType); i++ ) {
\r
152 if( jobAttr->mediaTypeIdx == pageMediaType[i].id ) {
\r
156 if(i >= dim(pageMediaType)){
\r
157 EPS_RETURN( EPS_ERR_INV_MEDIA_TYPE )
\r
161 /*** Print Quality */
\r
162 if (! ( (jobAttr->printQuality == EPS_MQID_NORMAL ) ||
\r
163 (jobAttr->printQuality == EPS_MQID_HIGH ) ) ){
\r
164 EPS_RETURN( EPS_ERR_INV_PRINT_QUALITY )
\r
167 /*** Input Image Resolution */
\r
168 if (! ( (jobAttr->inputResolution == EPS_IR_150X150 ) ||
\r
169 (jobAttr->inputResolution == EPS_IR_300X300 )
\r
170 #if !EPS_PAGE_LOWRES_MODE
\r
171 || (jobAttr->inputResolution == EPS_IR_600X600 )
\r
174 EPS_RETURN( EPS_ERR_INV_INPUT_RESOLUTION )
\r
177 /*** Paper Source */
\r
178 for( i=0; i < dim(pagePaperSource); i++ ) {
\r
179 if( jobAttr->paperSource == pagePaperSource[i].id ) {
\r
183 if(i >= dim(pagePaperSource)){
\r
184 EPS_RETURN( EPS_ERR_INV_PAPER_SOURCE )
\r
187 /*** Border Mode */
\r
188 if( jobAttr->printLayout != EPS_MLID_BORDERS ){
\r
189 EPS_RETURN( EPS_ERR_INV_BORDER_MODE )
\r
193 if( !( (jobAttr->colorMode == EPS_CM_COLOR ) ||
\r
194 (jobAttr->colorMode == EPS_CM_MONOCHROME ) ) ){
\r
195 EPS_RETURN( EPS_ERR_INV_COLOR_MODE )
\r
197 if( jobAttr->colorMode == EPS_CM_COLOR &&
\r
198 printJob.printer->language == EPS_LANG_ESCPAGE){
\r
199 EPS_RETURN( EPS_ERR_INV_COLOR_MODE )
\r
202 /*** Pallette Data */
\r
203 if (jobAttr->colorPlane == EPS_CP_256COLOR) {
\r
204 if (! ((jobAttr->paletteSize >= 3 ) &&
\r
205 (jobAttr->paletteSize <= 768/*765*/ ) ) ){
\r
206 EPS_RETURN( EPS_ERR_INV_PALETTE_SIZE )
\r
209 if ( jobAttr->paletteData == NULL ){
\r
210 EPS_RETURN( EPS_ERR_INV_PALETTE_DATA )
\r
215 if( !( (jobAttr->duplex == EPS_DUPLEX_NONE ) ||
\r
216 (jobAttr->duplex == EPS_DUPLEX_LONG ) ||
\r
217 (jobAttr->duplex == EPS_DUPLEX_SHORT ) ) ){
\r
218 EPS_RETURN( EPS_ERR_INV_DUPLEX )
\r
222 if( !( (jobAttr->feedDirection == EPS_FEEDDIR_PORTRAIT ) ||
\r
223 (jobAttr->feedDirection == EPS_FEEDDIR_LANDSCAPE ) ) ){
\r
224 EPS_RETURN( EPS_ERR_INV_FEED_DIRECTION )
\r
228 memcpy(&printJob.attr, jobAttr, sizeof(printJob.attr));
\r
229 if(jobAttr->copies < 0){
\r
230 printJob.attr.copies = 1;
\r
233 /*** Find the Media by ID */
\r
234 for(i = 0; i < dim(pageMediaSize); i++){
\r
235 if( jobAttr->mediaSizeIdx == pageMediaSize[i].id ){
\r
236 mediaSizeEnt = &pageMediaSize[i];
\r
240 if( NULL != mediaSizeEnt){
\r
241 printJob.printableAreaWidth = mediaSizeEnt->print_area_x_border;
\r
242 printJob.printableAreaHeight = mediaSizeEnt->print_area_y_border;
\r
243 printJob.topMargin = 120;
\r
244 printJob.leftMargin = 120;
\r
246 EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE )
\r
249 if(EPS_IR_300X300 == jobAttr->inputResolution){
\r
250 printJob.printableAreaWidth /= 2;
\r
251 printJob.printableAreaHeight /= 2;
\r
252 printJob.topMargin /= 2;
\r
253 printJob.leftMargin /= 2;
\r
254 } else if(EPS_IR_150X150 == jobAttr->inputResolution){
\r
255 printJob.printableAreaWidth /= 4;
\r
256 printJob.printableAreaHeight /= 4;
\r
257 printJob.topMargin /= 4;
\r
258 printJob.leftMargin /= 4;
\r
261 printJob.bpp = (printJob.attr.colorPlane == EPS_CP_256COLOR)?1:3;
\r
262 printJob.whiteColorValue = memSearchWhiteColorVal(printJob.attr.colorPlane,
\r
263 printJob.attr.paletteData,
\r
264 printJob.attr.paletteSize);
\r
266 EPS_RETURN( EPS_ERR_NONE )
\r
270 /*******************************************|********************************************/
\r
272 /* Function name: pageAllocBuffer() */
\r
276 /* Name: Type: Description: */
\r
279 /* Return value: */
\r
280 /* EPS_ERR_NONE - Success */
\r
281 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
284 /* Allocate buffer for ESC/Page Job. */
\r
286 /*******************************************|********************************************/
\r
287 EPS_ERR_CODE pageAllocBuffer(void)
\r
289 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
293 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
294 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
295 ret = pageS_AllocBuffer();
\r
298 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
299 /** ESC/Page-Color **/
\r
300 ret = pageAllocBuffer_C();
\r
303 ret = pageAllocBuffer_M();
\r
310 /*******************************************|********************************************/
\r
312 /* Function name: pageRelaseBuffer() */
\r
316 /* Name: Type: Description: */
\r
319 /* Return value: */
\r
323 /* Free buffer for ESC/Page Job. */
\r
325 /*******************************************|********************************************/
\r
326 void pageRelaseBuffer(void)
\r
330 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
331 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
332 pageS_RelaseBuffer();
\r
335 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
336 /** ESC/Page-Color **/
\r
337 pageRelaseBuffer_C();
\r
340 pageRelaseBuffer_M();
\r
347 /*******************************************|********************************************/
\r
349 /* Function name: pageStartJob() */
\r
353 /* Name: Type: Description: */
\r
356 /* Return value: */
\r
357 /* EPS_ERR_NONE - Success */
\r
358 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
359 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
360 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
361 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
364 /* Send ESC/Page start job commands. */
\r
366 /*******************************************|********************************************/
\r
367 EPS_ERR_CODE pageStartJob(void)
\r
369 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
373 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
374 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
375 ret = pageS_StartJob();
\r
378 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
379 /** ESC/Page-Color **/
\r
380 ret = pageStartJob_C();
\r
383 ret = pageStartJob_M();
\r
390 /*******************************************|********************************************/
\r
392 /* Function name: pageEndJob() */
\r
396 /* Name: Type: Description: */
\r
399 /* Return value: */
\r
400 /* EPS_ERR_NONE - Success */
\r
401 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
402 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
403 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
404 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
407 /* Send ESC/Page end job commands. */
\r
409 /*******************************************|********************************************/
\r
410 EPS_ERR_CODE pageEndJob()
\r
412 EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
\r
416 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
417 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
418 ret = pageS_EndJob();
\r
421 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
422 /** ESC/Page-Color **/
\r
423 ret = pageEndJob_C();
\r
426 ret = pageEndJob_M();
\r
433 /*******************************************|********************************************/
\r
435 /* Function name: pageStartPage() */
\r
439 /* Name: Type: Description: */
\r
442 /* Return value: */
\r
443 /* EPS_ERR_NONE - Success */
\r
444 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
445 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
446 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
447 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
450 /* Send ESC/Page start page commands. */
\r
452 /*******************************************|********************************************/
\r
453 EPS_ERR_CODE pageStartPage()
\r
455 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
459 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
460 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
461 ret = pageS_StartPage();
\r
464 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
465 /** ESC/Page-Color **/
\r
466 ret = pageStartPage_C();
\r
469 ret = pageStartPage_M();
\r
476 /*******************************************|********************************************/
\r
478 /* Function name: pageEndPage() */
\r
482 /* Name: Type: Description: */
\r
485 /* Return value: */
\r
486 /* EPS_ERR_NONE - Success */
\r
487 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
488 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
489 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
490 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
493 /* Send ESC/Page end page commands. */
\r
495 /*******************************************|********************************************/
\r
496 EPS_ERR_CODE pageEndPage()
\r
498 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
502 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
503 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
504 ret = pageS_EndPage();
\r
507 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
508 /** ESC/Page-Color **/
\r
509 ret = pageEndPage_C();
\r
516 /*******************************************|********************************************/
\r
518 /* Function name: pageColorRow() */
\r
522 /* Name: Type: Description: */
\r
525 /* Return value: */
\r
526 /* EPS_ERR_NONE - Success */
\r
527 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
528 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
529 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
530 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
533 /* Send ESC/Page raster commands. */
\r
535 /*******************************************|********************************************/
\r
536 EPS_ERR_CODE pageColorRow(
\r
538 const EPS_BANDBMP* pInBmp,
\r
542 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
546 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
547 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
548 ret = pageS_ColorRow(pInBmp, pBandRec);
\r
551 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
552 /** ESC/Page-Color **/
\r
553 ret = pageColorRow_C(pInBmp, pBandRec);
\r
556 ret = pageColorRow_M(pInBmp, pBandRec);
\r
563 /*******************************************|********************************************/
\r
565 /* Function name: pageSendLeftovers() */
\r
569 /* Name: Type: Description: */
\r
572 /* Return value: */
\r
573 /* EPS_ERR_NONE - Success */
\r
574 /* EPS_ERR_INVALID_CALL - This call was unnecessary */
\r
575 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
576 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
577 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
580 /* send leftovers data. */
\r
582 /*******************************************|********************************************/
\r
583 EPS_ERR_CODE pageSendLeftovers(
\r
588 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
592 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
593 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
594 ret = pageS_SendLeftovers();
\r
597 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
598 /** ESC/Page-Color **/
\r
599 ret = pageSendLeftovers_C();
\r
602 ret = pageSendLeftovers_M();
\r
609 EPS_ERR_CODE pageCreateMediaInfo (
\r
611 EPS_PRINTER_INN* printer,
\r
612 EPS_UINT8* pmString,
\r
616 EPS_INT32 num_mSize = dim(pageMediaSize);
\r
617 EPS_INT32 num_mType = dim(pageMediaType);
\r
619 EPS_MEDIA_SIZE* sizeList = NULL;
\r
620 EPS_MEDIA_TYPE* typeList = NULL;
\r
621 EPS_UINT32 paperSource = EPS_MPID_ALL_ESCPAGE;
\r
625 memset(&printer->supportedMedia, 0, sizeof(EPS_SUPPORTED_MEDIA));
\r
627 /* Allocate memory for the media size list. */
\r
628 sizeList = (EPS_MEDIA_SIZE*)EPS_ALLOC( sizeof(EPS_MEDIA_SIZE) * num_mSize );
\r
629 if( sizeList == NULL ){
\r
630 EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
\r
633 /* Allocate memory for the media type array. */
\r
634 typeList = (EPS_MEDIA_TYPE*)EPS_ALLOC( sizeof(EPS_MEDIA_TYPE) * num_mSize * num_mType );
\r
635 if (typeList == NULL) {
\r
636 EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
\r
639 if( sizeof(EPS_UINT32) == pmSize ){
\r
640 memcpy(&paperSource, pmString, sizeof(EPS_UINT32));
\r
643 /* set media size property. */
\r
644 for(i = 0; i < num_mSize; i++){
\r
645 /* set media type property. */
\r
646 for(j = 0; j < num_mType; j++){
\r
647 n = i * num_mType + j;
\r
648 typeList[n].mediaTypeID = pageMediaType[j].id;
\r
649 typeList[n].paperSource = paperSource;
\r
650 typeList[n].layout = EPS_MLID_BORDERS;
\r
651 #if EPS_PAGE_LOWRES_MODE
\r
652 typeList[n].quality = EPS_MQID_DRAFT | EPS_MQID_NORMAL;
\r
654 typeList[n].quality = EPS_MQID_DRAFT | EPS_MQID_NORMAL | EPS_MQID_HIGH;
\r
657 if(EPS_MSID_POSTCARD == pageMediaSize[i].id){
\r
658 typeList[n].duplex = EPS_DUPLEX_DISABLE;
\r
660 typeList[n].duplex = EPS_DUPLEX_ENABLE;
\r
664 sizeList[i].mediaSizeID = pageMediaSize[i].id;
\r
665 sizeList[i].numTypes = num_mType;
\r
666 sizeList[i].typeList = &typeList[i];
\r
669 printer->supportedMedia.sizeList = sizeList;
\r
670 printer->supportedMedia.numSizes = num_mSize;
\r
672 #if EPS_PAGE_LOWRES_MODE
\r
673 printer->supportedMedia.resolution = EPS_IR_150X150 | EPS_IR_300X300;
\r
675 printer->supportedMedia.resolution = EPS_IR_150X150 | EPS_IR_300X300 | EPS_IR_600X600;
\r
678 #if GCOMSW_CMD_ESCPAGE_S
\r
679 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
680 pageS_UpdateSupportedMedia( &printer->supportedMedia );
\r
684 EPS_RETURN( EPS_ERR_NONE )
\r
688 void pageClearSupportedMedia (
\r
690 EPS_PRINTER_INN* printer
\r
695 if( NULL != printer->supportedMedia.sizeList ){
\r
696 EPS_SAFE_RELEASE(printer->supportedMedia.sizeList[0].typeList);
\r
697 EPS_SAFE_RELEASE(printer->supportedMedia.sizeList);
\r
704 EPS_ERR_CODE pageGetPrintableArea (
\r
706 EPS_JOB_ATTRIB* jobAttr,
\r
707 EPS_UINT32* printableWidth,
\r
708 EPS_UINT32* printableHeight
\r
711 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
712 EPS_INT32 num_mSize = dim(pageMediaSize);
\r
713 EPS_INT32 sizeIdx = 0;
\r
717 /*** Validate/Confirm Page Attribute Data */
\r
719 for(sizeIdx = 0; sizeIdx < num_mSize; sizeIdx++){
\r
720 if(pageMediaSize[sizeIdx].id == jobAttr->mediaSizeIdx){
\r
724 if(sizeIdx >= num_mSize){
\r
725 EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE )
\r
728 /*** Border Mode */
\r
729 if( jobAttr->printLayout != EPS_MLID_BORDERS ){
\r
730 EPS_RETURN( EPS_ERR_INV_BORDER_MODE )
\r
733 /*** Input Image Resolution */
\r
734 if (! ( (jobAttr->inputResolution == EPS_IR_150X150 ) ||
\r
735 (jobAttr->inputResolution == EPS_IR_300X300 ) ||
\r
736 (jobAttr->inputResolution == EPS_IR_600X600 ) ) ){
\r
737 EPS_RETURN( EPS_ERR_INV_INPUT_RESOLUTION )
\r
740 *printableWidth = pageMediaSize[sizeIdx].print_area_x_border;
\r
741 *printableHeight = pageMediaSize[sizeIdx].print_area_y_border;
\r
742 #ifdef GCOMSW_CMD_ESCPAGE_S
\r
743 if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
\r
744 pageS_FeedExchange(jobAttr, printableWidth, printableHeight);
\r
748 if(EPS_IR_300X300 == jobAttr->inputResolution){
\r
749 *printableWidth /= 2;
\r
750 *printableHeight /= 2;
\r
751 } else if(EPS_IR_150X150 == jobAttr->inputResolution){
\r
752 *printableWidth /= 4;
\r
753 *printableHeight /= 4;
\r
754 *printableHeight -= 2;
\r
761 EPS_ERR_CODE ejlStart (
\r
763 EPS_COMMAND_BUFFER *pCmdBuff,
\r
764 PAGE_CmdBuffGrow pfncGrow
\r
767 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
773 #define EJLStart_ADDSTR(b, p, v) \
\r
775 sprintf(b, " %s=%s", p, v); \
\r
778 #define EJLStart_ADDINT(b, p, v) \
\r
780 sprintf(b, " %s=%d", p, v); \
\r
784 #ifdef GCOMSW_DEBUG
\r
785 if(pCmdBuff->len+EPS_EJL_LINEMAX > pCmdBuff->size){EPS_DBGPRINT(("Command buffer not enough!\r\n"))}
\r
788 p = pCmdBuff->p + pCmdBuff->len;
\r
790 /*** EJL commands ***/
\r
791 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
792 /** ESC/Page-Color **/
\r
793 sprintf(p, "%s%s \x0A%s\x0A%s %s",
\r
794 sbEJL_ESC_SOH, /* <ESC><SOH> */
\r
796 sbEJL_SE, /* EJL SELECT command */
\r
798 sbEJL_SET); /* SET command */
\r
801 sprintf(p, "%s%s \x0A%s\x0A%s%s \x0A%s\x0A%s %s",
\r
802 sbEJL_ESC_SOH, /* <ESC><SOH> */
\r
804 sbEJL_EN, /* EJL ENTER command */
\r
805 sbEJL_ESC_SOH, /* <ESC><SOH> */
\r
807 sbEJL_SE, /* EJL SELECT command */
\r
809 sbEJL_SET); /* SET command */
\r
814 EJLStart_ADDSTR(p, "RS",
\r
815 (EPS_IR_600X600 == printJob.attr.inputResolution)?"FN":"QK" );
\r
818 for( i=0; i < dim(pageMediaSize); i++ ) {
\r
819 if( printJob.attr.mediaSizeIdx == pageMediaSize[i].id ) {
\r
823 EJLStart_ADDSTR(p, "PS", pageMediaSize[i].name);
\r
826 for( i=0; i < dim(pageMediaType); i++ ) {
\r
827 if( printJob.attr.mediaTypeIdx == pageMediaType[i].id ) {
\r
831 EJLStart_ADDSTR(p, "PK", pageMediaType[i].name);
\r
834 for( i=0; i < dim(pagePaperSource); i++ ) {
\r
835 if( printJob.attr.paperSource == pagePaperSource[i].id ) {
\r
839 EJLStart_ADDSTR(p, "PU", pagePaperSource[i].name);
\r
842 #if EPS_PAGE_OUTUNIT_FACEDOWN
\r
843 EJLStart_ADDSTR(p, "OU", "FD");
\r
845 EJLStart_ADDSTR(p, "OU", "FU");
\r
849 EJLStart_ADDSTR(p, "DX", ( printJob.attr.duplex != EPS_DUPLEX_NONE )?"ON":"OFF");
\r
851 if( printJob.attr.duplex != EPS_DUPLEX_NONE ) {
\r
853 EJLStart_ADDSTR(p, "BD", ( printJob.attr.duplex == EPS_DUPLEX_LONG )?"LE":"SE");
\r
856 EJLStart_ADDSTR(p, "TB", "0");
\r
857 EJLStart_ADDSTR(p, "LB", "0");
\r
861 EJLStart_ADDSTR(p, "ZO", "OFF");
\r
864 EJLStart_ADDSTR(p, "EC", "ON" );
\r
868 EJLStart_ADDSTR(p, "RI", "ON");
\r
870 EJLStart_ADDSTR(p, "RI", "OFF");
\r
874 #if EPS_PAGE_TONER_SAVE
\r
875 EJLStart_ADDSTR(p, "SN", "ON");
\r
877 EJLStart_ADDSTR(p, "SN", "OFF");
\r
882 if( printJob.attr.collate ) {
\r
884 EJLStart_ADDINT(p, "CO", 1);
\r
886 EJLStart_ADDINT(p, "QT", printJob.attr.copies);
\r
890 EJLStart_ADDINT(p, "CO", printJob.attr.copies);
\r
892 EJLStart_ADDINT(p, "QT", 1);
\r
895 /* Feed direction */
\r
896 if( EPS_FEEDDIR_LANDSCAPE == printJob.attr.feedDirection ){
\r
897 EJLStart_ADDSTR(p, "FE", "SE");
\r
900 if( EPS_CM_COLOR == printJob.attr.colorMode ){
\r
901 /** ESC/Page-Color **/
\r
903 EJLStart_ADDSTR(p, "SZ", "OFF");
\r
906 EJLStart_ADDSTR(p, "GAMMAMODE", "NORMAL");
\r
909 EJLStart_ADDSTR(p, "SL", "YES");
\r
912 EJLStart_ADDSTR(p, "TO", "0");
\r
915 EJLStart_ADDSTR(p, "LO", "0");
\r
918 EJLStart_ADDSTR(p, "OR", "PO");
\r
920 /* EJL ENTER command */
\r
921 sprintf(p, " %s%s%s", sbEJL_LF, sbEJL_EN_C, sbEJL_LF);
\r
924 EJLStart_ADDSTR(p, "FO", "OFF");
\r
926 /* EJL ENTER command */
\r
927 sprintf(p, " %s%s%s", sbEJL_LF, sbEJL_EN, sbEJL_LF);
\r
931 pCmdBuff->len += (EPS_INT32)(p - pCmdBuff->p);
\r
937 EPS_ERR_CODE ejlEnd (
\r
939 EPS_COMMAND_BUFFER *pCmdBuff,
\r
940 PAGE_CmdBuffGrow pfncGrow,
\r
941 EPS_INT32 pageCount
\r
944 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
945 EPS_UINT32 dwPaperNum = pageCount;
\r
950 #ifdef GCOMSW_DEBUG
\r
951 if(pCmdBuff->len+EPS_EJL_LINEMAX > pCmdBuff->size){EPS_DBGPRINT(("Command buffer not enough!\r\n"))}
\r
954 p = pCmdBuff->p + pCmdBuff->len;
\r
956 /* EJL commands -------- */
\r
957 sprintf(p, "%s%s ",
\r
958 sbEJL_ESC_SOH, /* <ESC><SOH> */
\r
963 if( printJob.attr.duplex != EPS_DUPLEX_NONE ){
\r
964 dwPaperNum = (pageCount+1)/2;
\r
966 sprintf(p, "JI PAGES=\"%d\"", dwPaperNum);
\r
970 sprintf(p, " %s%s %s", sbEJL_LF, sbEJL, sbEJL_LF);
\r
973 pCmdBuff->len = (EPS_INT32)(p - pCmdBuff->p);
\r
975 #ifdef GCOMSW_DEBUG
\r
976 if(pCmdBuff->len > pCmdBuff->size){EPS_DBGPRINT(("Command buffer over flow!!\r\n"))}
\r
983 EPS_ERR_CODE ejlPageEsc (
\r
985 EPS_COMMAND_BUFFER *pCmdBuff,
\r
986 PAGE_CmdBuffGrow pfncGrow
\r
989 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
994 #define PageEscCommand_ADDCMD(b, CMD) { \
\r
995 memcpy(b, CMD, sizeof(CMD)); \
\r
996 b += sizeof(CMD); \
\r
999 p = pCmdBuff->p + pCmdBuff->len;
\r
1001 /* Set Logical Origin Setting */
\r
1002 sprintf(p, sbLOS, printJob.leftMargin, printJob.topMargin);
\r
1005 /* Reset the current absolute position */
\r
1006 PageEscCommand_ADDCMD(p, sbCHPAS);
\r
1007 PageEscCommand_ADDCMD(p, sbCVPAS);
\r
1009 /* Set Clip Area */
\r
1010 sprintf(p, sbCA, printJob.printableAreaWidth, printJob.printableAreaHeight);
\r
1013 pCmdBuff->len = (EPS_INT32)(p - pCmdBuff->p);
\r
1018 /*__________________________________ epson-escpage.c ________________________________*/
\r
1020 /*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
\r
1021 /* 1 2 3 4 5 6 7 8 */
\r
1022 /*******************************************|********************************************/
\r
1023 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
1024 /***** End of File *** End of File *** End of File *** End of File *** End of File ******/
\r
1025 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r