1 /*______________________________ epson-escpage-color.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-media.h"
\r
21 #include "epson-escpr-mem.h"
\r
22 #include "epson-escpage.h"
\r
23 #include "epson-escpage-comp.h"
\r
24 #include "epson-escpage-color.h"
\r
26 /*----------------------------- Local Macro Definitions -------------------------------*/
\r
27 /*******************************************|********************************************/
\r
28 #ifdef EPS_LOG_MODULE_PAGE
\r
29 #define EPS_LOG_MODULE EPS_LOG_MODULE_PAGE
\r
31 #define EPS_LOG_MODULE 0
\r
35 /*----------------------------- ESC/PAGE-Color commands -------------------------------*/
\r
36 /*******************************************|********************************************/
\r
37 const static EPS_UINT8 sbCR[] = {0x0D}; /* Carriage return "CR" */
\r
38 const static EPS_UINT8 sbFF[] = {0x0C}; /* Form Feed "FF" */
\r
39 const static EPS_UINT8 sbIP[] = {0x1D, 'r', 'h', 'E'}; /* Initialize printer */
\r
40 const static EPS_UINT8 sbSU150[] = {0x1D, '0', ';', '.', '4', '8', 'm', 'u', 'E'}; /* Set unit to 150 */
\r
41 const static EPS_UINT8 sbSU300[] = {0x1D, '0', ';', '.', '2', '4', 'm', 'u', 'E'}; /* Set unit to 300 */
\r
42 const static EPS_UINT8 sbSU600[] = {0x1D, '0', ';', '.', '1', '2', 'm', 'u', 'E'}; /* Set unit to 600 */
\r
43 const static EPS_UINT8 sbSU1200[] = {0x1D, '0', ';', '.', '0', '6', 'm', 'u', 'E'}; /* Set unit to 1200 */
\r
45 const static EPS_UINT8 sbPSSL[] = {0x1D, '3', '0', 'p', 's', 'E'}; /* Set Letter paper */
\r
46 const static EPS_UINT8 sbPSSA4[] = {0x1D, '1', '4', 'p', 's', 'E'}; /* Set A4 paper */
\r
47 const static EPS_UINT8 sbPSSB5[] = {0x1D, '2', '5', 'p', 's', 'E'}; /* Set B5 paper */
\r
48 const static EPS_UINT8 sbPSSLE[] = {0x1D, '3', '2', 'p', 's', 'E'}; /* Set Legal paper */
\r
49 const static EPS_UINT8 sbPSSA3[] = {0x1D, '1', '3', 'p', 's', 'E'}; /* Set A3 paper */
\r
50 const static EPS_UINT8 sbPSSB4[] = {0x1D, '2', '4', 'p', 's', 'E'}; /* Set B4 paper */
\r
51 const static EPS_UINT8 sbPSSPS[] = {0x1D, '3', '8', 'p', 's', 'E'}; /* Set B4 paper */
\r
52 const static EPS_UINT8 sbPSSF4[] = {0x1D, '3', '7', 'p', 's', 'E'}; /* Set F4 paper */
\r
53 const static EPS_UINT8 sbPSSA5[] = {0x1D, '1', '5', 'p', 's', 'E'}; /* Set A5 paper */
\r
54 const static EPS_UINT8 sbPSSHLT[] = {0x1D, '3', '1', 'p', 's', 'E'}; /* Set HLT paper */
\r
55 const static EPS_UINT8 sbPSSEXE[] = {0x1D, '3', '3', 'p', 's', 'E'}; /* Set EXE paper */
\r
56 const static EPS_UINT8 sbPSSB[] = {0x1D, '3', '6', 'p', 's', 'E'}; /* Set B paper */
\r
57 const static EPS_UINT8 sbPSSGLT[] = {0x1D, '3', '5', 'p', 's', 'E'}; /* Set GLT paper */
\r
58 const static EPS_UINT8 sbPSSGLG[] = {0x1D, '3', '4', 'p', 's', 'E'}; /* Set GLG paper */
\r
59 const static EPS_UINT8 sbPSSMON[] = {0x1D, '8', '0', 'p', 's', 'E'}; /* Set MON paper */
\r
60 const static EPS_UINT8 sbPSSC10[] = {0x1D, '8', '1', 'p', 's', 'E'}; /* Set C10 paper */
\r
61 const static EPS_UINT8 sbPSSDL[] = {0x1D, '9', '0', 'p', 's', 'E'}; /* Set DL paper */
\r
62 const static EPS_UINT8 sbPSSC5[] = {0x1D, '9', '1', 'p', 's', 'E'}; /* Set C5 paper */
\r
63 const static EPS_UINT8 sbPSSC6[] = {0x1D, '9', '2', 'p', 's', 'E'}; /* Set C6 paper */
\r
64 const static EPS_UINT8 sbPSSIB5[] = {0x1D, '9', '9', 'p', 's', 'E'}; /* Set IB5 paper */
\r
67 const static EPS_UINT8 sbSDE0[] = {0x1D, '0', 's', 'd', 'E'}; /* Set Duplex OFF */
\r
68 const static EPS_UINT8 sbSDE1[] = {0x1D, '1', 's', 'd', 'E'}; /* Set Duplex ON */
\r
69 const static EPS_UINT8 sbBDE0[] = {0x1D, '0', 'b', 'd', 'E'}; /* Set Duplex long */
\r
70 const static EPS_UINT8 sbBDE1[] = {0x1D, '1', 'b', 'd', 'E'}; /* Set Duplex short */
\r
72 const static EPS_UINT8 sbPTE0[] = {0x1D, '0', 'p', 't', 'E'}; /* select paper type 0:other */
\r
73 const static EPS_UINT8 sbPTE1[] = {0x1D, '1', 'p', 't', 'E'}; /* select paper type 1:plane */
\r
74 const static EPS_UINT8 sbPTE2[] = {0x1D, '1', '3', 'p', 't', 'E'}; /* select paper type 1:semi thick */
\r
75 const static EPS_UINT8 sbPTE3[] = {0x1D, '2', 'p', 't', 'E'}; /* select paper type 1:preprinter */
\r
76 const static EPS_UINT8 sbPTE4[] = {0x1D, '3', 'p', 't', 'E'}; /* select paper type 1:letterhead */
\r
77 const static EPS_UINT8 sbPTE5[] = {0x1D, '6', 'p', 't', 'E'}; /* select paper type 1:Recycled */
\r
78 const static EPS_UINT8 sbPTE6[] = {0x1D, '7', 'p', 't', 'E'}; /* select paper type 1:color */
\r
79 const static EPS_UINT8 sbPTE7[] = {0x1D, '9', 'p', 't', 'E'}; /* select paper type 1:labels */
\r
80 const static EPS_UINT8 sbPTE8[] = {0x1D, '1', '2', 'p', 't', 'E'}; /* select paper type 1:thick */
\r
81 const static EPS_UINT8 sbPTE9[] = {0x1D, '1', '6', 'p', 't', 'E'}; /* select paper type 1:coated */
\r
82 const static EPS_UINT8 sbPTE10[] = {0x1D, '1', '0', 'p', 't', 'E'}; /* select paper type 1:special */
\r
83 const static EPS_UINT8 sbPTE11[] = {0x1D, '1', '7', 'p', 't', 'E'}; /* select paper type 1:transparent */
\r
85 const static EPS_UINT8 sbIUE1[] = {0x1D, '0', ';', '0', 'i', 'u', 'E'};
\r
86 const static EPS_UINT8 sbIUE0[] = {0x1D, '1', '6', ';', '1', 'i', 'u', 'E'};
\r
87 const static EPS_UINT8 sbIUE2[] = {0x1D, '1', ';', '1', 'i', 'u', 'E'};
\r
88 const static EPS_UINT8 sbIUE3[] = {0x1D, '2', ';', '1', 'i', 'u', 'E'};
\r
89 const static EPS_UINT8 sbIUE4[] = {0x1D, '3', ';', '1', 'i', 'u', 'E'};
\r
90 const static EPS_UINT8 sbIUE5[] = {0x1D, '4', ';', '1', 'i', 'u', 'E'};
\r
91 const static EPS_UINT8 sbIUE6[] = {0x1D, '5', ';', '1', 'i', 'u', 'E'};
\r
92 const static EPS_UINT8 sbIUE7[] = {0x1D, '6', ';', '1', 'i', 'u', 'E'};
\r
93 const static EPS_UINT8 sbIUE8[] = {0x1D, '7', ';', '1', 'i', 'u', 'E'};
\r
94 const static EPS_UINT8 sbIUE9[] = {0x1D, '8', ';', '1', 'i', 'u', 'E'};
\r
95 const static EPS_UINT8 sbIUE10[] = {0x1D, '9', ';', '1', 'i', 'u', 'E'};
\r
96 const static EPS_UINT8 sbIUE11[] = {0x1D, '1', '0', ';', '1', 'i', 'u', 'E'};
\r
97 const static EPS_UINT8 sbIUE12[] = {0x1D, '1', '1', ';', '1', 'i', 'u', 'E'};
\r
98 const static EPS_UINT8 sbIUE13[] = {0x1D, '1', '2', ';', '1', 'i', 'u', 'E'};
\r
99 const static EPS_UINT8 sbIUE14[] = {0x1D, '1', '3',';', '1', 'i', 'u', 'E'};
\r
100 const static EPS_UINT8 sbIUE15[] = {0x1D, '2', '4',';', '1', 'i', 'u', 'E'};
\r
101 const static EPS_UINT8 sbIUE16[] = {0x1D, '2', '5',';', '1', 'i', 'u', 'E'};
\r
103 const static EPS_UINT8 sbCMS[] = {0x1D, '1', 'c', 'm', 'E'}; /* Clip Mode Set */
\r
104 const static EPS_UINT8 sbSDS1200_0[] = {0x1D, '0', ';', '1', '2', '0', '0', ';', '1', '2', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(1200) 0:image */
\r
105 const static EPS_UINT8 sbSDS1200_1[] = {0x1D, '1', ';', '1', '2', '0', '0', ';', '1', '2', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(1200) 1:font */
\r
106 const static EPS_UINT8 sbSDS1200_2[] = {0x1D, '2', ';', '1', '2', '0', '0', ';', '1', '2', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(1200) 2:binary format pattern */
\r
107 const static EPS_UINT8 sbSDS1200_3[] = {0x1D, '3', ';', '1', '2', '0', '0', ';', '1', '2', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(1200) 3:color pattern */
\r
108 const static EPS_UINT8 sbSDS600_0[] = {0x1D, '0', ';', '6', '0', '0', ';', '6', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(600) 0:image */
\r
109 const static EPS_UINT8 sbSDS600_1[] = {0x1D, '1', ';', '6', '0', '0', ';', '6', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(600) 1:font */
\r
110 const static EPS_UINT8 sbSDS600_2[] = {0x1D, '2', ';', '6', '0', '0', ';', '6', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(600) 2:binary format pattern */
\r
111 const static EPS_UINT8 sbSDS600_3[] = {0x1D, '3', ';', '6', '0', '0', ';', '6', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(600) 3:color pattern */
\r
112 const static EPS_UINT8 sbSDS300_0[] = {0x1D, '0', ';', '3', '0', '0', ';', '3', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(300) 0:image */
\r
113 const static EPS_UINT8 sbSDS300_1[] = {0x1D, '1', ';', '3', '0', '0', ';', '3', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(300) 1:font */
\r
114 const static EPS_UINT8 sbSDS300_2[] = {0x1D, '2', ';', '3', '0', '0', ';', '3', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(300) 2:binary format pattern */
\r
115 const static EPS_UINT8 sbSDS300_3[] = {0x1D, '3', ';', '3', '0', '0', ';', '3', '0', '0', 'd', 'r', 'E'}; /* Select Dot Size(300) 3:color pattern */
\r
116 const static EPS_UINT8 sbSDS150_0[] = {0x1D, '0', ';', '1', '5', '0', ';', '1', '5', '0', 'd', 'r', 'E'}; /* Select Dot Size(150) 0:image */
\r
117 const static EPS_UINT8 sbSDS150_1[] = {0x1D, '1', ';', '1', '5', '0', ';', '1', '5', '0', 'd', 'r', 'E'}; /* Select Dot Size(150) 1:font */
\r
118 const static EPS_UINT8 sbSDS150_2[] = {0x1D, '2', ';', '1', '5', '0', ';', '1', '5', '0', 'd', 'r', 'E'}; /* Select Dot Size(150) 2:binary format pattern */
\r
119 const static EPS_UINT8 sbSDS150_3[] = {0x1D, '3', ';', '1', '5', '0', ';', '1', '5', '0', 'd', 'r', 'E'}; /* Select Dot Size(150) 3:color pattern */
\r
121 const static EPS_UINT8 sbMMS[] = {0x1D, '1', 'm', 'm', 'E'}; /* Select Page memory mode */
\r
123 const static EPS_UINT8 sbPDS0[] = {0x1D, '0', 'p', 'o', 'E'}; /* Set paper direction to normal */
\r
124 const static EPS_UINT8 sbPDS1[] = {0x1D, '1', 'p', 'o', 'E'}; /* Set paper direction to rotate */
\r
126 const static EPS_UINT8 sbPDS[] = {0x1D, '0', 'p', 'o', 'E'}; /* Set paper direction to normal */
\r
127 const static EPS_UINT8 sbACRLFS[] = {0x1D, '0', 'a', 'l', 'f', 'P'}; /* Does not perform auto carriage return */
\r
128 const static EPS_UINT8 sbAFFS[] = {0x1D, '0', 'a', 'f', 'f', 'P'}; /* Does not perform auto Form Feed */
\r
129 const static EPS_UINT8 sbABPS[] = {0x1D, '1', 'a', 'b', 'P'}; /* Set current position to 0 after bit image draw */
\r
130 const static EPS_UINT8 sbSARGAS[] = {0x1D, '2', 's', 'a', 'r', 'G'}; /* Set Absolute Graph Coordinate mode */
\r
131 const static EPS_UINT8 sbPMPPS[] = {0x1D, '0', 'p', 'm', 'P'}; /* Set current move mode to print pitch mode */
\r
132 const static EPS_UINT8 sbCSE[] = {0x1D, '2', 'c', 's', 'E'}; /* Select color space */
\r
133 const static EPS_UINT8 sbPDDO[] = {0x1D, '0', 'p', 'd', 'd', 'O'}; /* Select Imaging device 0:CPGI 1:PGI */
\r
134 const static EPS_UINT8 sbCCME[] = {0x1D, '0', ';', '2', ';', '4', 'c', 'c', 'm', 'E'}; /* Select color collect */
\r
135 const static EPS_UINT8 sbCAME[] = {0x1D, '7', ';', '0', ';', '2', ';', '3', 'c', 'a', 'm', '{', 'E'};
\r
136 const static EPS_UINT8 sbRAE_1[] = {0x1D, '1', ';', '1', 'r', 'a', 'E'};
\r
137 const static EPS_UINT8 sbRAE_2[] = {0x1D, '2', ';', '1', 'r', 'a', 'E'};
\r
138 const static EPS_UINT8 sbRAE_3[] = {0x1D, '3', ';', '2', 'r', 'a', 'E'};
\r
139 const static EPS_UINT8 sbCMME_0[] = {0x1D, '0', 'c', 'm', 'm', 'E'};
\r
140 const static EPS_UINT8 sbCMME_1[] = {0x1D, '1', 'c', 'm', 'm', 'E'};
\r
141 const static EPS_UINT8 sbCLFP[] = {0x1D, '0', ';', '0', ';', '0', 'c', 'l', 'f', 'P'};
\r
142 const static EPS_UINT8 sbWFE[] = {0x1D, '5', ';', '2', '0', '4', 'w', 'f', 'E'};
\r
144 const static EPS_UINT8 sbBCTI20[] = {0x1D, '2', ';', '2', '0', 'b', 'c', 't', '{', 'I'};
\r
145 const static EPS_UINT8 sbC20[] = {0x1, 0x2};
\r
147 const static EPS_INT8 sbSCRI[] = "scrI";
\r
148 const static EPS_INT8 sbCRI[] = "\x1D%d;%dcr{I";
\r
149 const static EPS_INT8 sbCUI[] = "cu{I";
\r
150 const static EPS_UINT8 sbECRI[] = {0x1D, 'e', 'c', 'r', 'I'};
\r
152 const static EPS_INT8 sbplrBE[] = "\x1D%d;0;2;256;256plr{E";
\r
154 /*----------------------------- Local Macro Definitions -------------------------------*/
\r
155 /*******************************************|********************************************/
\r
156 #define EPS_PAGE_RASTER (64) /* number of scanning rasters */
\r
157 #define EPS_PAGE_CMDBUFF_SIZE EPS_EJL_LINEMAX
\r
160 /*--------------------------- Data Structure Declarations ---------------------------*/
\r
161 /*******************************************|********************************************/
\r
162 typedef struct _tagEPS_PAGE_BAND_
\r
164 EPS_INT32 compressType; /* compless mode */
\r
165 EPS_INT32 widthInPixels;
\r
166 EPS_INT32 currentWidthInPixels;
\r
167 EPS_INT32 rasterRow;
\r
168 EPS_INT32 encDataSize; /* Compless data size */
\r
169 EPS_UINT8 *pEncData; /* Compless data */
\r
170 EPS_INT32 scanLineSize; /* Source data line size */
\r
171 EPS_INT32 scanBuffSize; /* Source data buffer size */
\r
172 EPS_INT32 scanDataSize; /* Source data size */
\r
173 EPS_UINT8 *pScanData; /* Source data */
\r
178 /*---------------------------- ESC/P-R Lib Global Variables --------------------------*/
\r
179 /*******************************************|********************************************/
\r
180 extern EPS_CMN_FUNC epsCmnFnc;
\r
181 extern EPS_PRINT_JOB printJob;
\r
183 /*---------------------------------- Local Variables --------------------------------*/
\r
184 /*******************************************|********************************************/
\r
185 static EPS_PAGE_BAND band;
\r
186 static EPS_COMMAND_BUFFER cmdBuf;
\r
187 static EPS_INT32 pageCount = 0;
\r
188 static EPS_INT32 emitRowCount = 0;
\r
191 /*-------------------------- Local Functions Declaration ----------------------------*/
\r
192 /*******************************************|********************************************/
\r
193 static EPS_ERR_CODE CmdBuffInit (EPS_COMMAND_BUFFER *pCmdBuff, EPS_PAGE_BAND *pBand);
\r
194 static EPS_ERR_CODE CmdBuffGrow (EPS_COMMAND_BUFFER *pCmdBuff, EPS_INT32 addSize);
\r
195 static void CmdBuffTerm (EPS_COMMAND_BUFFER *pCmdBuff);
\r
197 static EPS_ERR_CODE RegisterPalette (EPS_UINT16, EPS_UINT8*, EPS_COMMAND_BUFFER *pCmdBuff);
\r
199 static EPS_BOOL BandInit (EPS_PAGE_BAND* pBand);
\r
200 static void BandTerm (EPS_PAGE_BAND* pBand);
\r
201 static EPS_BOOL BandEmit (EPS_PAGE_BAND* pBand);
\r
202 static EPS_ERR_CODE BandSetScanData (EPS_PAGE_BAND* pBand, const EPS_UINT8 *Row, EPS_UINT32 DeltaByte);
\r
203 static EPS_ERR_CODE BandCompress (EPS_PAGE_BAND* pBand, EPS_INT32);
\r
204 static void BandClear (EPS_PAGE_BAND* pBand);
\r
206 static EPS_INT32 GetEncodeMode(EPS_INT32 bpp);
\r
208 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
209 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
210 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
211 /*-------------------- Public Functions ---------------------*/
\r
212 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
213 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
214 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
216 /*******************************************|********************************************/
\r
218 /* Function name: pageAllocBuffer_C() */
\r
222 /* Name: Type: Description: */
\r
225 /* Return value: */
\r
226 /* EPS_ERR_NONE - Success */
\r
227 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
230 /* Allocate buffer for ESC/Page Job. */
\r
232 /*******************************************|********************************************/
\r
233 EPS_ERR_CODE pageAllocBuffer_C(void)
\r
235 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
239 ret = BandInit(&band);
\r
241 if ( EPS_ERR_NONE == ret ) {
\r
242 ret = CmdBuffInit(&cmdBuf, &band);
\r
249 /*******************************************|********************************************/
\r
251 /* Function name: pageRelaseBuffer_C() */
\r
255 /* Name: Type: Description: */
\r
258 /* Return value: */
\r
262 /* Free buffer for ESC/Page Job. */
\r
264 /*******************************************|********************************************/
\r
265 void pageRelaseBuffer_C(void)
\r
267 /*** Clear Memory */
\r
268 CmdBuffTerm(&cmdBuf);
\r
273 /*******************************************|********************************************/
\r
275 /* Function name: pageStartJob_C() */
\r
279 /* Name: Type: Description: */
\r
282 /* Return value: */
\r
283 /* EPS_ERR_NONE - Success */
\r
284 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
285 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
286 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
287 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
290 /* Send ESC/Page start job commands. */
\r
292 /*******************************************|********************************************/
\r
293 EPS_ERR_CODE pageStartJob_C(void)
\r
295 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
296 EPS_UINT32 retBufSize = 0;
\r
300 #define pgStartJob_ADDCMD(CMD) { \
\r
301 ret = CmdBuffGrow(&cmdBuf, sizeof(CMD) ); \
\r
302 if( EPS_ERR_NONE != ret){EPS_RETURN( ret )} \
\r
303 memcpy(cmdBuf.p + cmdBuf.len, CMD, sizeof(CMD)); \
\r
304 cmdBuf.len += sizeof(CMD); \
\r
307 debug_msg("__ debug 0 __\n");
\r
308 cmdBuf.len = 0; /* reset */
\r
309 debug_msg("__ debug 0.1 __\n");
\r
310 /*** Make EJL Command ***/
\r
311 ret = ejlStart(&cmdBuf, CmdBuffGrow);
\r
312 if( EPS_ERR_NONE != ret){
\r
315 debug_msg("__ debug 0.0 __\n");
\r
316 /* Initialize the printer. */
\r
317 pgStartJob_ADDCMD(sbIP)
\r
318 debug_msg("__ debug 1 __\n");
\r
319 /* Set the minimum Unit Setting (600 or 300 resolution) */
\r
320 /* Dot Pattern Resolution Selection */
\r
321 if(EPS_IR_600X600 == printJob.attr.inputResolution) {
\r
322 pgStartJob_ADDCMD(sbSU600);
\r
323 pgStartJob_ADDCMD(sbSDS600_3);
\r
324 pgStartJob_ADDCMD(sbSDS600_2);
\r
325 pgStartJob_ADDCMD(sbSDS600_1);
\r
326 pgStartJob_ADDCMD(sbSDS600_0);
\r
328 else if(EPS_IR_1200X1200 == printJob.attr.inputResolution) {
\r
329 pgStartJob_ADDCMD(sbSU1200);
\r
330 pgStartJob_ADDCMD(sbSDS1200_3);
\r
331 pgStartJob_ADDCMD(sbSDS1200_2);
\r
332 pgStartJob_ADDCMD(sbSDS1200_1);
\r
333 pgStartJob_ADDCMD(sbSDS1200_0);
\r
335 else if(EPS_IR_300X300 == printJob.attr.inputResolution) {
\r
336 pgStartJob_ADDCMD(sbSU300);
\r
337 pgStartJob_ADDCMD(sbSDS300_3);
\r
338 pgStartJob_ADDCMD(sbSDS300_2);
\r
339 pgStartJob_ADDCMD(sbSDS300_1);
\r
340 pgStartJob_ADDCMD(sbSDS300_0);
\r
342 pgStartJob_ADDCMD(sbSU150);
\r
343 pgStartJob_ADDCMD(sbSDS150_3);
\r
344 pgStartJob_ADDCMD(sbSDS150_2);
\r
345 pgStartJob_ADDCMD(sbSDS150_1);
\r
346 pgStartJob_ADDCMD(sbSDS150_0);
\r
348 debug_msg("__ debug 2 __\n");
\r
349 /* Set Memory Mode Selection to Page memory mode */
\r
350 pgStartJob_ADDCMD(sbMMS);
\r
352 /* Set Paper Size */
\r
353 debug_msg("__ nguyen nam __\n", printJob.attr.mediaSizeIdx );
\r
354 switch ( printJob.attr.mediaSizeIdx ) {
\r
355 case EPS_MSID_A4: pgStartJob_ADDCMD(sbPSSA4); break;
\r
356 case EPS_MSID_A5: pgStartJob_ADDCMD(sbPSSA5); break;
\r
357 case EPS_MSID_HLT: pgStartJob_ADDCMD(sbPSSHLT); break;
\r
358 case EPS_MSID_EXECUTIVE: pgStartJob_ADDCMD(sbPSSEXE); break;
\r
359 case EPS_MSID_B: pgStartJob_ADDCMD(sbPSSB); break;
\r
360 case EPS_MSID_GLT: pgStartJob_ADDCMD(sbPSSGLT); break;
\r
361 case EPS_MSID_GLG: pgStartJob_ADDCMD(sbPSSGLG); break;
\r
362 case EPS_MSID_MON: pgStartJob_ADDCMD(sbPSSMON); break;
\r
363 case EPS_MSID_C10: pgStartJob_ADDCMD(sbPSSC10); break;
\r
364 case EPS_MSID_DL: pgStartJob_ADDCMD(sbPSSDL); break;
\r
365 case EPS_MSID_C5: pgStartJob_ADDCMD(sbPSSC5); break;
\r
366 case EPS_MSID_C6: pgStartJob_ADDCMD(sbPSSC6); break;
\r
367 case EPS_MSID_IB5: pgStartJob_ADDCMD(sbPSSIB5); break;
\r
368 case EPS_MSID_F4: pgStartJob_ADDCMD(sbPSSF4); break;
\r
369 case EPS_MSID_B5: pgStartJob_ADDCMD(sbPSSB5); break;
\r
370 case EPS_MSID_B4: pgStartJob_ADDCMD(sbPSSB4); break;
\r
371 case EPS_MSID_A3: pgStartJob_ADDCMD(sbPSSA3); break;
\r
372 case EPS_MSID_LETTER: pgStartJob_ADDCMD(sbPSSL); break;
\r
373 case EPS_MSID_LEGAL: pgStartJob_ADDCMD(sbPSSLE); break;
\r
374 default: pgStartJob_ADDCMD(sbPSSA4); break;
\r
377 ret = ejlPageEsc(&cmdBuf, CmdBuffGrow);
\r
378 if( EPS_ERR_NONE != ret){
\r
382 /* Set Clip Mode */
\r
383 pgStartJob_ADDCMD(sbCMS);
\r
385 /* Does not perform automatic carriage return line feed */
\r
386 pgStartJob_ADDCMD(sbACRLFS);
\r
388 /* Does not perform automatic Form Feed */
\r
389 pgStartJob_ADDCMD(sbAFFS);
\r
391 /* Set current position to 0 after Bit image draw */
\r
392 pgStartJob_ADDCMD(sbABPS);
\r
394 /* Step 4 - Adjust Vertical Print Position (if necessary) */
\r
396 pgStartJob_ADDCMD(sbCR);
\r
398 /* Set Absolute graph coordinate mode */
\r
399 pgStartJob_ADDCMD(sbSARGAS);
\r
401 /* Set current position move mode to print pitch */
\r
402 pgStartJob_ADDCMD(sbPMPPS);
\r
404 /* select paper type */
\r
405 switch(printJob.attr.mediaTypeIdx){
\r
406 case EPS_MTID_PLAIN: pgStartJob_ADDCMD(sbPTE1); break;
\r
407 case EPS_MTID_SEMITHICK: pgStartJob_ADDCMD(sbPTE2); break;
\r
408 case EPS_MTID_PREPRINTED: pgStartJob_ADDCMD(sbPTE3); break;
\r
409 case EPS_MTID_LETTERHEAD: pgStartJob_ADDCMD(sbPTE4); break;
\r
410 case EPS_MTID_RECYCLED: pgStartJob_ADDCMD(sbPTE5); break;
\r
411 case EPS_MTID_COLOR: pgStartJob_ADDCMD(sbPTE6); break;
\r
412 case EPS_MTID_LABEL: pgStartJob_ADDCMD(sbPTE7); break;
\r
413 case EPS_MTID_THICK: pgStartJob_ADDCMD(sbPTE8); break;
\r
414 case EPS_MTID_COATED: pgStartJob_ADDCMD(sbPTE9); break;
\r
415 case EPS_MTID_SPECIAL: pgStartJob_ADDCMD(sbPTE10); break;
\r
416 case EPS_MTID_TRANSPARENT: pgStartJob_ADDCMD(sbPTE11); break;
\r
417 case EPS_MTID_UNSPECIFIED: pgStartJob_ADDCMD(sbPTE0); break;
\r
418 default: pgStartJob_ADDCMD(sbPTE0); break;
\r
421 /* Set paper direction */
\r
422 if(printJob.attr.orienTation == 1)
\r
424 pgStartJob_ADDCMD(sbPDS1); /* Landscape */
\r
426 pgStartJob_ADDCMD(sbPDS0); /* Potrait */
\r
430 if(printJob.attr.duplex == EPS_DUPLEX_NONE){
\r
431 pgStartJob_ADDCMD(sbSDE0);
\r
433 pgStartJob_ADDCMD(sbSDE1);
\r
434 if(printJob.attr.duplex == EPS_DUPLEX_SHORT){
\r
435 pgStartJob_ADDCMD(sbBDE1);
\r
437 pgStartJob_ADDCMD(sbBDE0);
\r
441 /* Set paper direction */
\r
442 pgStartJob_ADDCMD(sbPDS);
\r
444 /* Set Manual Feed */
\r
445 if(printJob.attr.manualFeed == 1)
\r
447 pgStartJob_ADDCMD(sbIUE0); /* manual */
\r
449 switch(printJob.attr.paperSource){
\r
450 case IPS_MPTID_AUTO:
\r
451 pgStartJob_ADDCMD(sbIUE1);
\r
453 case IPS_MPTID_TRAY1:
\r
454 pgStartJob_ADDCMD(sbIUE2);
\r
456 case IPS_MPTID_TRAY2:
\r
457 pgStartJob_ADDCMD(sbIUE3);
\r
459 case IPS_MPTID_TRAY3:
\r
460 pgStartJob_ADDCMD(sbIUE4);
\r
462 case IPS_MPTID_TRAY4:
\r
463 pgStartJob_ADDCMD(sbIUE5);
\r
465 case IPS_MPTID_TRAY5:
\r
466 pgStartJob_ADDCMD(sbIUE6);
\r
468 case IPS_MPTID_TRAY6:
\r
469 pgStartJob_ADDCMD(sbIUE7);
\r
471 case IPS_MPTID_TRAY7:
\r
472 pgStartJob_ADDCMD(sbIUE8);
\r
474 case IPS_MPTID_TRAY8:
\r
475 pgStartJob_ADDCMD(sbIUE9);
\r
477 case IPS_MPTID_TRAY9:
\r
478 pgStartJob_ADDCMD(sbIUE10);
\r
480 case IPS_MPTID_TRAY10:
\r
481 pgStartJob_ADDCMD(sbIUE11);
\r
483 case IPS_MPTID_TRAY11:
\r
484 pgStartJob_ADDCMD(sbIUE12);
\r
486 case IPS_MPTID_TRAY12:
\r
487 pgStartJob_ADDCMD(sbIUE13);
\r
489 case IPS_MPTID_TRAY13:
\r
490 pgStartJob_ADDCMD(sbIUE14);
\r
492 case IPS_MPTID_TRAY14:
\r
493 pgStartJob_ADDCMD(sbIUE15);
\r
495 case IPS_MPTID_TRAY15:
\r
496 pgStartJob_ADDCMD(sbIUE16);
\r
499 pgStartJob_ADDCMD(sbIUE1);
\r
504 /* Select Imaging device */
\r
505 pgStartJob_ADDCMD(sbPDDO);
\r
507 /* Select color space */
\r
508 pgStartJob_ADDCMD(sbCSE);
\r
510 /* cancel color controle */
\r
511 pgStartJob_ADDCMD(sbCMME_0);
\r
513 /* Select color collect */
\r
514 pgStartJob_ADDCMD(sbCCME);
\r
516 /* Select color condition */
\r
517 pgStartJob_ADDCMD(sbCAME);
\r
519 /* Select screening */
\r
520 pgStartJob_ADDCMD(sbRAE_1);
\r
521 pgStartJob_ADDCMD(sbRAE_2);
\r
522 pgStartJob_ADDCMD(sbRAE_3);
\r
524 /* set color controle */
\r
525 pgStartJob_ADDCMD(sbCMME_1);
\r
527 pgStartJob_ADDCMD(sbCLFP);
\r
529 /* set logical operation */
\r
530 pgStartJob_ADDCMD(sbWFE);
\r
532 switch( band.compressType )
\r
534 case EP_COMPRESS20:
\r
535 pgStartJob_ADDCMD(sbBCTI20); /* set compless table */
\r
536 pgStartJob_ADDCMD(sbC20); /* set data format */
\r
538 default:/* for 8bpp */
\r
541 ret = SendCommand((EPS_UINT8*)cmdBuf.p, cmdBuf.len, &retBufSize, TRUE);
\r
549 /*******************************************|********************************************/
\r
551 /* Function name: pageEndJob_C() */
\r
555 /* Name: Type: Description: */
\r
558 /* Return value: */
\r
559 /* EPS_ERR_NONE - Success */
\r
560 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
561 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
562 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
563 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
566 /* Send ESC/Page end job commands. */
\r
568 /*******************************************|********************************************/
\r
569 EPS_ERR_CODE pageEndJob_C()
\r
571 EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
\r
572 EPS_UINT32 retBufSize = 0;
\r
576 cmdBuf.len = 0; /* reset */
\r
578 /* end color image drawing */
\r
579 memcpy((EPS_INT8*)cmdBuf.p, sbECRI, sizeof(sbECRI));
\r
580 cmdBuf.len += sizeof(sbECRI);
\r
582 /*** Make EJL Command ***/
\r
583 ret = ejlEnd(&cmdBuf, CmdBuffGrow, pageCount);
\r
584 if( EPS_ERR_NONE != ret){
\r
588 ret = SendCommand((EPS_UINT8*)cmdBuf.p, cmdBuf.len, &retBufSize, TRUE);
\r
594 /*******************************************|********************************************/
\r
596 /* Function name: pageStartPage_C() */
\r
600 /* Name: Type: Description: */
\r
603 /* Return value: */
\r
604 /* EPS_ERR_NONE - Success */
\r
605 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
606 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
607 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
608 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
611 /* Send ESC/Page start page commands. */
\r
613 /*******************************************|********************************************/
\r
614 EPS_ERR_CODE pageStartPage_C()
\r
616 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
617 EPS_UINT32 retBufSize = 0;
\r
621 cmdBuf.len = 0; /* reset */
\r
622 if( 0 == pageCount ){
\r
623 if (printJob.attr.colorPlane == EPS_CP_256COLOR){
\r
624 ret = RegisterPalette(printJob.attr.paletteSize, printJob.attr.paletteData,
\r
628 memcpy(cmdBuf.p, sbFF, sizeof(sbFF));
\r
629 cmdBuf.len += sizeof(sbFF);
\r
631 ret = ejlPageEsc(&cmdBuf, CmdBuffGrow);
\r
633 if( EPS_ERR_NONE != ret){
\r
637 if(cmdBuf.len > 0){
\r
638 ret = SendCommand((EPS_UINT8*)cmdBuf.p, cmdBuf.len, &retBufSize, TRUE);
\r
648 /*******************************************|********************************************/
\r
650 /* Function name: pageEndPage_C() */
\r
654 /* Name: Type: Description: */
\r
657 /* Return value: */
\r
658 /* EPS_ERR_NONE - Success */
\r
659 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
660 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
661 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
662 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
665 /* Send ESC/Page end page commands. */
\r
667 /*******************************************|********************************************/
\r
668 EPS_ERR_CODE pageEndPage_C()
\r
670 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
674 if( EP_COMPRESS0 != band.compressType ){
\r
675 BandCompress(&band, printJob.bpp*8);
\r
676 if( band.encDataSize > 0 ) {
\r
677 ret = BandEmit(&band);
\r
680 if( band.scanDataSize > 0 ){
\r
681 ret = BandEmit(&band);
\r
685 if( EPS_ERR_NONE == ret){
\r
693 /*******************************************|********************************************/
\r
695 /* Function name: pageColorRow_C() */
\r
699 /* Name: Type: Description: */
\r
702 /* Return value: */
\r
703 /* EPS_ERR_NONE - Success */
\r
704 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
705 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
706 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
707 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
710 /* Send ESC/Page raster commands. */
\r
712 /*******************************************|********************************************/
\r
713 EPS_ERR_CODE pageColorRow_C(
\r
715 const EPS_BANDBMP* pInBmp,
\r
719 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
720 EPS_UINT16 linePixelSize;
\r
721 EPS_UINT16 widthBytes;
\r
724 debug_msg("pBandRec->right = %d\n", pBandRec->right);
\r
725 debug_msg("pBandRec->left = %d\n", pBandRec->left);
\r
726 if( (EPS_UINT32)(pBandRec->right - pBandRec->left) <= printJob.printableAreaWidth){
\r
727 linePixelSize = (EPS_UINT16)(pBandRec->right - pBandRec->left);
\r
728 debug_msg("check linePixe \n");
\r
730 linePixelSize = (EPS_UINT16) printJob.printableAreaWidth;
\r
732 widthBytes = linePixelSize * printJob.bpp;
\r
733 debug_msg("printJob.bpp = %d\n", printJob.bpp);
\r
734 band.currentWidthInPixels = linePixelSize;
\r
735 /* reset scan size from current line size */
\r
736 band.scanLineSize = widthBytes;
\r
737 if( band.scanLineSize & 3 ){
\r
739 band.scanLineSize = (band.scanLineSize & ~3) + 4;
\r
741 BandSetScanData(&band, pInBmp->bits, widthBytes);
\r
743 if(EP_COMPRESS0 != band.compressType){
\r
744 if( (band.rasterRow >= EPS_PAGE_RASTER )) {
\r
745 BandCompress(&band, printJob.bpp*8);
\r
746 if( band.encDataSize > 0 ) {
\r
747 ret = BandEmit(&band);
\r
749 debug_msg("band.rasterRow = %d\n", band.rasterRow);
\r
750 emitRowCount += band.rasterRow;
\r
751 if( EPS_ERR_NONE == ret){
\r
752 //debug_msg("check reset band\n");
\r
753 BandClear(&band); /* reset */
\r
757 ret = BandEmit(&band);
\r
758 emitRowCount += band.rasterRow;
\r
759 if( EPS_ERR_NONE == ret){
\r
760 BandClear(&band); /* reset */
\r
768 /*******************************************|********************************************/
\r
770 /* Function name: pageSendLeftovers_C() */
\r
774 /* Name: Type: Description: */
\r
777 /* Return value: */
\r
778 /* EPS_ERR_NONE - Success */
\r
779 /* EPS_ERR_INVALID_CALL - This call was unnecessary */
\r
780 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
781 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
782 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
785 /* send leftovers data. */
\r
787 /*******************************************|********************************************/
\r
788 EPS_ERR_CODE pageSendLeftovers_C(
\r
793 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
794 EPS_UINT32 retBufSize = 0;
\r
798 if( NULL != printJob.contData.sendData && 0 < printJob.contData.sendDataSize){
\r
800 ret = SendCommand(printJob.contData.sendData,
\r
801 printJob.contData.sendDataSize, &retBufSize, TRUE);
\r
803 if( EPS_ERR_NONE == ret ){
\r
804 if( band.dataSent ){
\r
805 /* send encode data */
\r
806 if( EP_COMPRESS0 != band.compressType ){
\r
807 debug_msg("band.pEncData = %d\n", band.pEncData);
\r
808 debug_msg("band.encDataSize = %d\n", band.encDataSize);
\r
809 ret = SendCommand(band.pEncData, band.encDataSize, &retBufSize, TRUE);
\r
811 ret = SendCommand(band.pScanData, band.scanDataSize, &retBufSize, TRUE);
\r
814 band.dataSent = FALSE;
\r
816 if( EPS_ERR_NONE == ret){
\r
821 ret = EPS_ERR_INVALID_CALL;
\r
827 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
828 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
829 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
830 /*-------------------- Local Functions ---------------------*/
\r
831 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
832 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
833 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
836 /*******************************************|********************************************/
\r
838 /* Function name: CmdBuffInit() */
\r
842 /* Name: Type: Description: */
\r
843 /* pCmdBuff EPS_COMMAND_BUFFER* I: command buffer strcture */
\r
844 /* pBand EPS_PAGE_BAND* I: band data strcture */
\r
846 /* Return value: */
\r
847 /* EPS_ERR_NONE - Success */
\r
848 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
851 /* Allocate command buffer. */
\r
853 /*******************************************|********************************************/
\r
854 static EPS_ERR_CODE CmdBuffInit(
\r
856 EPS_COMMAND_BUFFER* pCmdBuff,
\r
857 EPS_PAGE_BAND* pBand
\r
860 pCmdBuff->pExtent = pBand;
\r
862 if(EP_COMPRESS0 == pBand->compressType){
\r
863 pCmdBuff->size = EPS_EJL_LINEMAX;
\r
864 pCmdBuff->p = EPS_ALLOC(pCmdBuff->size);
\r
865 if( NULL == pCmdBuff->p){
\r
866 return EPS_ERR_MEMORY_ALLOCATION;
\r
870 /* use scan-buffer as command-buffer */
\r
871 pCmdBuff->size = pBand->scanBuffSize;
\r
872 pCmdBuff->p = (EPS_INT8*)pBand->pScanData;
\r
877 return EPS_ERR_NONE;
\r
881 /*******************************************|********************************************/
\r
883 /* Function name: CmdBuffGrow() */
\r
887 /* Name: Type: Description: */
\r
888 /* pCmdBuff EPS_COMMAND_BUFFER* I: command buffer strcture */
\r
889 /* addSize EPS_INT32 I: growing size */
\r
891 /* Return value: */
\r
892 /* EPS_ERR_NONE - Success */
\r
893 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
896 /* ReAllocate command buffer. */
\r
898 /*******************************************|********************************************/
\r
899 static EPS_ERR_CODE CmdBuffGrow(
\r
901 EPS_COMMAND_BUFFER* pCmdBuff,
\r
905 EPS_INT32 block, sizeNew;
\r
906 EPS_PAGE_BAND *pBand = (EPS_PAGE_BAND*)pCmdBuff->pExtent;
\r
908 if(pCmdBuff->size < pCmdBuff->len + addSize){
\r
909 block = (((pCmdBuff->len+addSize) / EPS_PAGE_CMDBUFF_SIZE) + 1);
\r
910 sizeNew = block * EPS_PAGE_CMDBUFF_SIZE;
\r
911 pCmdBuff->p = memRealloc(pCmdBuff->p, pCmdBuff->size, sizeNew);
\r
912 if( NULL == pCmdBuff->p){
\r
913 return EPS_ERR_MEMORY_ALLOCATION;
\r
915 pCmdBuff->size = sizeNew;
\r
917 if(EP_COMPRESS0 != pBand->compressType){
\r
918 pBand->scanBuffSize = cmdBuf.size;
\r
919 pBand->pScanData = (EPS_UINT8*)cmdBuf.p;
\r
923 return EPS_ERR_NONE;
\r
927 /*******************************************|********************************************/
\r
929 /* Function name: CmdBuffTerm() */
\r
933 /* Name: Type: Description: */
\r
934 /* pCmdBuff EPS_COMMAND_BUFFER* I: command buffer strcture */
\r
936 /* Return value: */
\r
940 /* Free command buffer. */
\r
942 /*******************************************|********************************************/
\r
943 static void CmdBuffTerm (
\r
945 EPS_COMMAND_BUFFER* pCmdBuff
\r
948 EPS_PAGE_BAND* pBand = (EPS_PAGE_BAND*)pCmdBuff->pExtent;
\r
950 if( NULL != pBand ){
\r
951 if(EP_COMPRESS0 == pBand->compressType){
\r
952 EPS_SAFE_RELEASE(pCmdBuff->p);
\r
954 pCmdBuff->p = NULL;
\r
959 pCmdBuff->size = 0;
\r
960 pCmdBuff->pExtent = NULL;
\r
964 /*******************************************|********************************************/
\r
966 /* Function name: RegisterPalette() */
\r
970 /* Name: Type: Description: */
\r
971 /* paletteSize EPS_UINT16 I: Palette Size */
\r
972 /* paletteData EPS_UINT8* I: Palette Size */
\r
973 /* pCmdBuff EPS_COMMAND_BUFFER* I: command buffer strcture */
\r
975 /* Return value: */
\r
976 /* EPS_ERR_NONE - Success */
\r
977 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
980 /* Register the palette for Printer. */
\r
982 /*******************************************|********************************************/
\r
983 static EPS_ERR_CODE RegisterPalette(
\r
985 EPS_UINT16 paletteSize,
\r
986 EPS_UINT8* paletteData,
\r
987 EPS_COMMAND_BUFFER* pCmdBuff
\r
990 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
991 EPS_INT8 *p = NULL;
\r
992 EPS_UINT16 entryNum = paletteSize / 3; /* 3 = RGB */
\r
997 #ifdef GCOMSW_DEBUG
\r
998 if(pCmdBuff->len+EPS_EJL_LINEMAX > pCmdBuff->size){EPS_DBGPRINT(("Command buffer not enough!\r\n"))}
\r
1000 p = pCmdBuff->p + pCmdBuff->len;
\r
1002 sprintf(p, sbplrBE, entryNum*4); /* 4 = RGBA */
\r
1003 pCmdBuff->len += (EPS_UINT32)strlen(p);
\r
1005 /* expand for palette data */
\r
1006 ret = CmdBuffGrow(pCmdBuff, entryNum*4);
\r
1007 if( EPS_ERR_NONE != ret){
\r
1010 p = pCmdBuff->p + pCmdBuff->len;
\r
1013 for(i = 0; i < paletteSize; i+=3){
\r
1014 *p++ = paletteData[i+2]; /* B */
\r
1015 *p++ = paletteData[i+1]; /* G */
\r
1016 *p++ = paletteData[i]; /* R */
\r
1017 *p++ = 0; /* dummy */
\r
1019 pCmdBuff->len = (EPS_INT32)(p - pCmdBuff->p);
\r
1025 /*******************************************|********************************************/
\r
1027 /* Function name: BandInit() */
\r
1031 /* Name: Type: Description: */
\r
1032 /* pBand EPS_PAGE_BAND* I: band data strcture */
\r
1034 /* Return value: */
\r
1035 /* EPS_ERR_NONE - Success */
\r
1036 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
1038 /* Description: */
\r
1039 /* Allocate band data buffers. */
\r
1041 /*******************************************|********************************************/
\r
1042 EPS_ERR_CODE BandInit(
\r
1044 EPS_PAGE_BAND* pBand
\r
1047 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
1051 memset(pBand, 0, sizeof(EPS_PAGE_BAND));
\r
1052 pBand->compressType = GetEncodeMode( printJob.attr.colorPlane ); /* Set compless mode */
\r
1053 pBand->widthInPixels = printJob.printableAreaWidth;
\r
1054 pBand->scanDataSize = 0;
\r
1055 pBand->encDataSize = 0;
\r
1056 pBand->emited = FALSE;
\r
1057 pBand->dataSent = FALSE;
\r
1060 debug_msg("pBand->compressType = %d\n", pBand->compressType);
\r
1061 if(EP_COMPRESS0 == pBand->compressType){
\r
1062 pBand->scanLineSize = pBand->widthInPixels * printJob.bpp;
\r
1063 pBand->scanBuffSize = pBand->scanLineSize; /* one line buffering */
\r
1065 debug_msg("check compresstype bands \n");
\r
1066 pBand->scanLineSize = (pBand->widthInPixels * printJob.bpp);
\r
1067 if( pBand->scanLineSize & 3 ){
\r
1068 debug_msg("check band scanline & 3 \n");
\r
1070 pBand->scanLineSize = (pBand->scanLineSize & ~3) + 4;
\r
1072 pBand->scanBuffSize = pBand->scanLineSize * EPS_PAGE_RASTER;
\r
1074 debug_msg("pBand->scanBuffSize = %d\n", pBand->scanBuffSize);
\r
1075 pBand->pScanData = (EPS_UINT8*)EPS_ALLOC( pBand->scanBuffSize );
\r
1076 if( NULL == pBand->pScanData ){
\r
1077 EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
\r
1084 /*******************************************|********************************************/
\r
1086 /* Function name: BandTerm() */
\r
1090 /* Name: Type: Description: */
\r
1091 /* pBand EPS_PAGE_BAND* I: band data strcture */
\r
1093 /* Return value: */
\r
1096 /* Description: */
\r
1097 /* free band data buffers. */
\r
1099 /*******************************************|********************************************/
\r
1100 static void BandTerm(
\r
1102 EPS_PAGE_BAND* pBand
\r
1107 EPS_SAFE_RELEASE(pBand->pScanData);
\r
1114 /*******************************************|********************************************/
\r
1116 /* Function name: BandEmit() */
\r
1120 /* Name: Type: Description: */
\r
1121 /* pBand EPS_PAGE_BAND* I: band data strcture */
\r
1123 /* Return value: */
\r
1124 /* EPS_ERR_NONE - Success */
\r
1125 /* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
\r
1126 /* EPS_ERR_OPR_FAIL - Internal Error */
\r
1127 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
1128 /* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
\r
1130 /* Description: */
\r
1131 /* Emit data to printer. */
\r
1133 /*******************************************|********************************************/
\r
1134 static EPS_ERR_CODE BandEmit(
\r
1136 EPS_PAGE_BAND* pBand
\r
1139 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
1140 EPS_INT8 *p = NULL;
\r
1141 EPS_UINT32 retBufSize = 0;
\r
1145 cmdBuf.len = 0; /* reset */
\r
1146 p = (EPS_INT8*)cmdBuf.p;
\r
1148 if( pBand->emited ){
\r
1149 /* end color image drawing for previous data */
\r
1150 memcpy(p, sbECRI, sizeof(sbECRI));
\r
1151 p += sizeof(sbECRI);
\r
1153 pBand->emited = TRUE;
\r
1156 /* Reset the current absolute position */
\r
1157 strcpy(p, "\x1D""0X");
\r
1160 EPS_DBGPRINT(("Emit Y pos = %d \r\n", emitRowCount));
\r
1161 sprintf(p, "\x1D%dY", emitRowCount);
\r
1164 /* ----- stretch color image ----- */
\r
1165 if(printJob.attr.colorPlane == EPS_CP_256COLOR){
\r
1166 strcpy(p, "\x1D""2;204;0;"); /* Indirectly RGB8, palett=0 */
\r
1168 strcpy(p, "\x1D""2;102;0;"); /* RGB888 */
\r
1172 switch(pBand->compressType){
\r
1173 case EP_COMPRESS20:
\r
1176 case EP_COMPRESS0:
\r
1183 sprintf(p, "%d;%d;%d;%d;0%s", pBand->currentWidthInPixels, pBand->rasterRow,
\r
1184 pBand->currentWidthInPixels, pBand->rasterRow, sbSCRI);
\r
1187 /*** Draw color image ***/
\r
1188 if(EP_COMPRESS20 == pBand->compressType){
\r
1189 /* Number of data bytes */
\r
1190 /* Bit image width */
\r
1191 //debug_msg("pBand->rasterRow = %d\n",pBand->rasterRow);
\r
1192 sprintf(p, sbCRI, pBand->encDataSize, pBand->rasterRow);
\r
1194 ret = SendCommand((EPS_UINT8*)cmdBuf.p, (EPS_INT32)(p - (EPS_INT8*)cmdBuf.p), &retBufSize, TRUE);
\r
1196 pBand->dataSent = TRUE; /* encode date until send */
\r
1197 if( EPS_ERR_NONE == ret){
\r
1198 debug_msg("ret = err_none \n");
\r
1199 ret = SendCommand(pBand->pEncData, pBand->encDataSize, &retBufSize, TRUE);
\r
1200 pBand->dataSent = FALSE; /* encode date has sent */
\r
1203 } else{ /* non compless */
\r
1204 /* Number of data bytes */
\r
1205 /* Bit image width */
\r
1206 sprintf(p, "\x1D""%d;%d%s", pBand->scanDataSize, pBand->rasterRow, sbCUI);
\r
1209 ret = SendCommand((EPS_UINT8*)cmdBuf.p, (EPS_INT32)(p - (EPS_INT8*)cmdBuf.p), &retBufSize, TRUE);
\r
1211 pBand->dataSent = TRUE; /* encode date until send */
\r
1212 if( EPS_ERR_NONE == ret){
\r
1213 ret = SendCommand(pBand->pScanData, pBand->scanDataSize, &retBufSize, TRUE);
\r
1214 pBand->dataSent = FALSE; /* encode date has sent */
\r
1222 /*******************************************|********************************************/
\r
1224 /* Function name: BandSetScanData() */
\r
1228 /* Name: Type: Description: */
\r
1229 /* pBand EPS_PAGE_BAND* I: band data strcture */
\r
1230 /* Row const EPS_UINT8* I: band data */
\r
1231 /* DeltaByte EPS_UINT32 I: number of data bytes */
\r
1233 /* Return value: */
\r
1234 /* EPS_ERR_NONE - Success */
\r
1236 /* Description: */
\r
1237 /* save band data. */
\r
1239 /*******************************************|********************************************/
\r
1240 static EPS_ERR_CODE BandSetScanData(
\r
1242 EPS_PAGE_BAND* pBand,
\r
1243 const EPS_UINT8* Row,
\r
1244 EPS_UINT32 DeltaByte
\r
1247 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
1251 pBand->rasterRow++;
\r
1253 if(EP_COMPRESS0 != pBand->compressType){
\r
1254 debug_msg("DeltaByte = %d\n", DeltaByte);
\r
1255 debug_msg("pBand->rasterRow = %d\n", pBand->rasterRow);
\r
1256 memcpy(pBand->pScanData + (pBand->scanLineSize * (EPS_PAGE_RASTER - pBand->rasterRow)), Row, DeltaByte);
\r
1258 memcpy(pBand->pScanData, Row, DeltaByte);
\r
1260 //debug_msg("pBand->scanDataSize = %d\n", pBand->scanDataSize);
\r
1261 pBand->scanDataSize += DeltaByte;
\r
1267 /*******************************************|********************************************/
\r
1269 /* Function name: BandCompress() */
\r
1273 /* Name: Type: Description: */
\r
1274 /* pBand EPS_PAGE_BAND* I: band data strcture */
\r
1275 /* WidthBytes EPS_INT32 I: data length */
\r
1276 /* bitCount EPS_INT32 I: image bit count */
\r
1278 /* Return value: */
\r
1279 /* EPS_ERR_NONE - Success */
\r
1281 /* Description: */
\r
1282 /* Data is compressed. */
\r
1284 /*******************************************|********************************************/
\r
1285 static EPS_ERR_CODE BandCompress(
\r
1287 EPS_PAGE_BAND* pBand,
\r
1288 EPS_INT32 bitCount
\r
1291 debug_msg("check compress \n");
\r
1292 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
1293 EPS_BITMAPINFO BitMapInfo;
\r
1294 EPS_UINT32 lCompressType;
\r
1295 EPS_UINT32 lImageSize = 0;
\r
1297 EPS_UINT8* pRealBits;
\r
1301 memset(&BitMapInfo, 0, sizeof(EPS_BITMAPINFO));
\r
1303 BitMapInfo.biWidth = pBand->currentWidthInPixels;
\r
1304 BitMapInfo.biHeight = pBand->rasterRow;
\r
1305 BitMapInfo.biBitCount = bitCount;
\r
1307 rect.left = rect.top = 0;
\r
1308 rect.bottom = pBand->rasterRow;
\r
1309 rect.right = pBand->currentWidthInPixels;
\r
1311 pRealBits = pBand->pScanData + (pBand->scanLineSize * (EPS_PAGE_RASTER - pBand->rasterRow));
\r
1313 pBand->pEncData = CompressBitImage(
\r
1317 pBand->compressType,
\r
1321 pBand->encDataSize = lImageSize;
\r
1322 debug_msg("lImageSize = %d\n", lImageSize);
\r
1323 debug_msg("pBand->encDataSize = %d\n", pBand->encDataSize);
\r
1329 /*******************************************|********************************************/
\r
1331 /* Function name: BandClear() */
\r
1335 /* Name: Type: Description: */
\r
1336 /* pBand EPS_PAGE_BAND* I: band data strcture */
\r
1338 /* Return value: */
\r
1339 /* EPS_ERR_NONE - Success */
\r
1341 /* Description: */
\r
1342 /* Reset band data. */
\r
1344 /*******************************************|********************************************/
\r
1345 static void BandClear(
\r
1347 EPS_PAGE_BAND *pBand
\r
1351 EPS_SAFE_RELEASE(pBand->pEncData);
\r
1352 pBand->scanDataSize = 0;
\r
1353 pBand->encDataSize = 0;
\r
1354 pBand->rasterRow = 0;
\r
1360 /*******************************************|********************************************/
\r
1362 /* Function name: GetEncodeMode() */
\r
1366 /* Name: Type: Description: */
\r
1367 /* pBand EPS_PAGE_BAND* I: band data strcture */
\r
1369 /* Return value: */
\r
1370 /* EPS_ERR_NONE compless mode */
\r
1372 /* Description: */
\r
1373 /* choose compless mode. */
\r
1375 /*******************************************|********************************************/
\r
1376 static EPS_INT32 GetEncodeMode(
\r
1381 if(bpp == EPS_CP_256COLOR){
\r
1382 return EP_COMPRESS0;
\r
1383 } else{ /* if EPS_CP_FULLCOLOR */
\r
1384 return EP_COMPRESS20;
\r
1388 /*______________________________ epson-escpage-color.c ______________________________*/
\r
1390 /*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
\r
1391 /* 1 2 3 4 5 6 7 8 */
\r
1392 /*******************************************|********************************************/
\r
1393 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
1394 /***** End of File *** End of File *** End of File *** End of File *** End of File ******/
\r
1395 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r