Fix manifests
[platform/upstream/epson-inkjet-printer-escpr.git] / lib / epson-net-raw.c
1 /*________________________________   epson-net-raw.c   _________________________________*/\r
2 \r
3 /*       1         2         3         4         5         6         7         8        */\r
4 /*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/\r
5 /*******************************************|********************************************/\r
6 /*\r
7  *   Copyright (c) 2010  Seiko Epson Corporation                 All rights reserved.\r
8  *\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
14  *\r
15  */\r
16 /*******************************************|********************************************/\r
17 /*                                                                                      */\r
18 /*                               Raw Port protocol Module                               */\r
19 /*                                                                                      */\r
20 /*                                Public Function Calls                                 */\r
21 /*                              --------------------------                              */\r
22 /*      EPS_ERR_CODE rawFindStart       (sock, address, flg                     );      */\r
23 /*              EPS_ERR_CODE rawFind            (sock, printer                          );      */\r
24 /*      EPS_ERR_CODE rawFindEnd         (sock                                   );      */\r
25 /*      EPS_ERR_CODE rawProbePrinterByID(printerUUID, timeout, printer          );      */\r
26 /*              EPS_ERR_CODE rawStartJob            (printr                                 );      */\r
27 /*      EPS_ERR_CODE rawEndPage         (                                       );      */\r
28 /*      EPS_ERR_CODE rawResetPrinter    (                                       );      */\r
29 /*      EPS_ERR_CODE rawWritePrintData  (buffer, bufferlen, sendlen             );      */\r
30 /*      EPS_ERR_CODE rawGetStatus       (printer, status, ioStatus              );      */\r
31 /*      EPS_ERR_CODE rawGetJobStatus    (pstInfo                                            );      */\r
32 /*      EPS_ERR_CODE rawGetPMString     (printer, pString, bufSize              );      */\r
33 /*      EPS_ERR_CODE rawMechCommand     (printer, Command                       );      */\r
34 /*                                                                                      */\r
35 /*******************************************|********************************************/\r
36 \r
37 \r
38 /*------------------------------------  Includes   -------------------------------------*/\r
39 /*******************************************|********************************************/\r
40 #include "epson-escpr-def.h"\r
41 #include "epson-escpr-err.h"\r
42 #include "epson-escpr-mem.h"\r
43 #include "epson-escpr-services.h"\r
44 #include "epson-protocol.h"\r
45 #include "epson-net-snmp.h"\r
46 #include "epson-net-raw.h"\r
47 \r
48 /*-----------------------------  Local Macro Definitions -------------------------------*/\r
49 /*******************************************|********************************************/\r
50 #ifdef EPS_LOG_MODULE_RAW\r
51 #define EPS_LOG_MODULE  EPS_LOG_MODULE_RAW\r
52 #else\r
53 #define EPS_LOG_MODULE  0\r
54 #endif\r
55 \r
56 #define RAW_PORT_NUM                    (9100)                          /* Protocol port number                         */\r
57 \r
58 #define IS_JOB_ACTIVE                                                                                                                                           \\r
59                 ( (NULL != printJob.printer) && (NULL != printJob.hProtInfo)                                            \\r
60                         && (EPS_PROTOCOL_RAW == EPS_PRT_PROTOCOL(printJob.printer->protocol)) )\r
61 \r
62 #define IS_VALID_DATA_SESSION                                                                                                                           \\r
63                 ( (NULL != printJob.printer) && (NULL != printJob.hProtInfo)                                            \\r
64                         && (EPS_PROTOCOL_RAW == EPS_PRT_PROTOCOL(printJob.printer->protocol))                   \\r
65                         && (EPS_INVALID_SOCKET != ((EPS_PRINT_JOB_RAW*)printJob.hProtInfo)->socData) )\r
66 \r
67 /*----------------------------  ESC/P-R Lib Global Variables  --------------------------*/\r
68 /*******************************************|********************************************/\r
69 \r
70         /*** Extern Function                                                                */\r
71 extern EPS_NET_FUNC    epsNetFnc;\r
72 extern EPS_CMN_FUNC    epsCmnFnc;\r
73 \r
74     /*** Print Job Structure                                                            */\r
75     /*** -------------------------------------------------------------------------------*/\r
76 extern EPS_PRINT_JOB   printJob;\r
77 \r
78 static EPS_SNMP_FUNCS   snmp;\r
79 \r
80 /*---------------------------  Data Structure Declarations   ---------------------------*/\r
81 /*******************************************|********************************************/\r
82 typedef struct _tagEPS_PRINT_JOB_RAW_ {\r
83         EPS_SOCKET      socData;                                        /* RAW socket for send data                 */\r
84         EPS_SOCKET      socStat;                                        /* SNMP socket for check status             */\r
85         EPS_BOOL        reseted;                                        /* reseted                                  */\r
86         EPS_BOOL        pageend;                                        /* page end - start                         */\r
87 } EPS_PRINT_JOB_RAW;\r
88 \r
89 /*--------------------------------  RAW Local Variables  -------------------------------*/\r
90 /*******************************************|********************************************/\r
91 \r
92 /*--------------------------  Local Functions Declaration   ----------------------------*/\r
93 /*******************************************|********************************************/\r
94 static EPS_ERR_CODE StartDataSession    (EPS_PRINT_JOB_RAW*, const EPS_PRINTER_INN*     );\r
95 static EPS_ERR_CODE EndDataSession      (EPS_PRINT_JOB_RAW*                             );    \r
96 \r
97 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
98 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
99 /*%%%%%%%%%%%%%%%%%%%%                                             %%%%%%%%%%%%%%%%%%%%%*/\r
100 /*--------------------              Public Functions               ---------------------*/\r
101 /*%%%%%%%%%%%%%%%%%%%%                                             %%%%%%%%%%%%%%%%%%%%%*/\r
102 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
103 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
104 void            rawSetupSTFunctions     (\r
105                                                                  \r
106                  const EPS_PRINTER_INN* printer\r
107                  \r
108 ){\r
109         EPS_LOG_FUNCIN\r
110 \r
111         snmpSetupSTFunctions(&snmp, printer);\r
112 \r
113         EPS_RETURN_VOID\r
114 }\r
115 \r
116 \r
117 EPS_UINT16      rawGetDefautiPort    (\r
118                                                                   \r
119                 void\r
120                 \r
121 ){\r
122         return RAW_PORT_NUM;\r
123 }\r
124 \r
125 \r
126 /*******************************************|********************************************/\r
127 /*                                                                                      */\r
128 /* Function name:     rawFindStart()                                                    */\r
129 /*                                                                                      */\r
130 /* Arguments                                                                            */\r
131 /* ---------                                                                            */\r
132 /* Name:        Type:               Description:                                        */\r
133 /* sock             EPS_SOCKET*         O: send discovery message socket                    */\r
134 /* address              EPS_INT8*           I: Destination address                              */\r
135 /* multi                EPS_BOOL            I: If TRUE, send multicast                          */\r
136 /*                                                                                      */\r
137 /* Return value:                                                                        */\r
138 /*      EPS_ERR_NONE                                    - Success                                       */\r
139 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
140 /*                                                                                      */\r
141 /* Description:                                                                         */\r
142 /*      Sends EPSNET_NUM_DISCOVERIES number of upnp discovery message to find                   */\r
143 /*              devices.  Discovery message is sent more than once because udp is unreliable.   */\r
144 /*                                                                                      */\r
145 /*******************************************|********************************************/\r
146 EPS_ERR_CODE rawFindStart(\r
147 \r
148                 EPS_SOCKET*             sock,\r
149                 const EPS_INT8* address,\r
150                 EPS_BOOL        multi\r
151                 \r
152 ){\r
153         EPS_LOG_FUNCIN\r
154         EPS_RETURN( snmpFindStart(sock, address, multi) )\r
155 }\r
156 \r
157 \r
158 /*******************************************|********************************************/\r
159 /*                                                                                      */\r
160 /* Function name:     rawFind()                                                         */\r
161 /*                                                                                      */\r
162 /* Arguments                                                                            */\r
163 /* ---------                                                                            */\r
164 /* Name:        Type:               Description:                                        */\r
165 /* sock             EPS_SOCKET          I: Discover Socket                                              */\r
166 /* printer              EPS_PRINTER_INN**   O: pointer for found printer structure              */\r
167 /*                                                                                      */\r
168 /* Return value:                                                                        */\r
169 /*      EPS_ERR_NONE                    - Success                                       */\r
170 /*      EPS_ERR_COMM_ERROR              - socket error                                      */\r
171 /*      EPS_ERR_MEMORY_ALLOCATION                                                                                   */\r
172 /*      EPS_ERR_PRINTER_NOT_FOUND       - printer not found                             */\r
173 /*      EPS_ERR_PRINTER_NOT_USEFUL      - received but not usefl                        */\r
174 /*                                                                                      */\r
175 /* Description:                                                                         */\r
176 /*      Receive discover messasge. Get printer name.                                    */\r
177 /*                                                                                      */\r
178 /*******************************************|********************************************/\r
179 EPS_ERR_CODE rawFind     (\r
180                                                   \r
181                 EPS_SOCKET                      sock,\r
182                 EPS_PRINTER_INN**   printer\r
183                 \r
184 ){\r
185         EPS_LOG_FUNCIN\r
186         EPS_RETURN( snmpFind(sock, RAW_PORT_NUM, EPS_PROTOCOL_RAW, printer) )\r
187 }\r
188 \r
189 \r
190 /*******************************************|********************************************/\r
191 /*                                                                                      */\r
192 /* Function name:     rawFindEnd()                                                                      */\r
193 /*                                                                                      */\r
194 /* Arguments                                                                            */\r
195 /* ---------                                                                            */\r
196 /* Name:        Type:               Description:                                        */\r
197 /* sock             EPS_SOCKET          I: Discover Socket                                              */\r
198 /*                                                                                      */\r
199 /* Return value:                                                                        */\r
200 /*      EPS_ERR_NONE                - Success                                           */\r
201 /*      EPS_ERR_COMM_ERROR          - Close socket failed                                       */\r
202 /*                                                                                      */\r
203 /* Description:                                                                         */\r
204 /*      close discover process.                                                                             */\r
205 /*                                                                                      */\r
206 /*******************************************|********************************************/\r
207 EPS_ERR_CODE rawFindEnd  (\r
208                                                   \r
209                 EPS_SOCKET sock\r
210                 \r
211 ){\r
212         EPS_LOG_FUNCIN\r
213         EPS_RETURN( snmpFindEnd(sock) )\r
214 }\r
215 \r
216 \r
217 /*******************************************|********************************************/\r
218 /*                                                                                      */\r
219 /* Function name:   rawProbePrinterByID()                                               */\r
220 /*                                                                                      */\r
221 /* Arguments                                                                            */\r
222 /* ---------                                                                            */\r
223 /* Name:        Type:               Description:                                        */\r
224 /* defstr           EPS_INT8*                   I: ID String of probe target                        */\r
225 /* timeout      EPS_UINT32          I: find timeout                                     */\r
226 /* printer          EPS_PRINTER*                O: Pointer for Alloc Printer infomation structure   */\r
227 /*                                                                                      */\r
228 /* Return value:                                                                        */\r
229 /*      EPS_ERR_NONE                - Success                                           */\r
230 /*      EPS_ERR_COMM_ERROR              - socket failed                                         */\r
231 /*      EPS_ERR_MEMORY_ALLOCATION   - Failed to allocate memory                         */\r
232 /*      EPS_ERR_PRINTER_NOT_FOUND   - printer not found                                 */\r
233 /*                                                                                      */\r
234 /* Description:                                                                         */\r
235 /*     Probe printer by ID String.                                                                      */\r
236 /*                                                                                      */\r
237 /*******************************************|********************************************/\r
238 EPS_ERR_CODE   rawProbePrinterByID (\r
239 \r
240                 EPS_INT8*                       printerUUID,\r
241                 EPS_UINT32                      timeout, \r
242                 EPS_PRINTER_INN**       printer\r
243 \r
244 ){\r
245         EPS_LOG_FUNCIN\r
246         EPS_RETURN( snmpProbeByID(printerUUID, RAW_PORT_NUM, EPS_PROTOCOL_RAW, timeout, printer) )\r
247 }\r
248 \r
249 \r
250 /*******************************************|********************************************/\r
251 /*                                                                                      */\r
252 /* Function name:     rawStartJob()                                                                                                     */\r
253 /*                                                                                      */\r
254 /* Arguments                                                                            */\r
255 /* ---------                                                                            */\r
256 /* Name:        Type:               Description:                                        */\r
257 /* printer              EPS_PRINTER_INN*        I: pointer to printer Structure                                         */\r
258 /*                                                                                      */\r
259 /* Return value:                                                                        */\r
260 /*      EPS_ERR_NONE                    - Success                                       */\r
261 /*      EPS_ERR_MEMORY_ALLOCATION       - Failed to allocate memory                     */\r
262 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
263 /*      EPS_ERR_PRINTER_ERR_OCCUR       - Printer Error happened                        */\r
264 /* Description:                                                                         */\r
265 /*      Open socekt & Send start job messasge.                                          */\r
266 /*                                                                                      */\r
267 /*******************************************|********************************************/\r
268 EPS_ERR_CODE rawStartJob(\r
269 \r
270                 void\r
271 \r
272 ){\r
273         EPS_ERR_CODE ret = EPS_ERR_NONE;\r
274         EPS_PRINT_JOB_RAW *rawPrintJob = NULL;\r
275 \r
276         EPS_LOG_FUNCIN\r
277 \r
278         /* Alloc RAW Job Data */\r
279         rawPrintJob = (EPS_PRINT_JOB_RAW*)EPS_ALLOC( sizeof(EPS_PRINT_JOB_RAW) );\r
280         if( NULL == rawPrintJob ){\r
281                 EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )\r
282         }\r
283         memset(rawPrintJob, 0, sizeof(EPS_PRINT_JOB_RAW));\r
284         rawPrintJob->socStat = rawPrintJob->socData = EPS_INVALID_SOCKET;\r
285         rawPrintJob->reseted = FALSE;\r
286         rawPrintJob->pageend = FALSE;\r
287 \r
288         /* Establish Connection & send start job message */\r
289         ret = StartDataSession( rawPrintJob, printJob.printer );\r
290 \r
291         if( EPS_ERR_NONE == ret\r
292                 && EPS_IS_BI_PROTOCOL(printJob.printer->protocol) ){\r
293                 /* create check status */\r
294                 ret = snmpOpenSocket( &(rawPrintJob->socStat) );\r
295                 if( EPS_ERR_NONE != ret ){\r
296                         goto rawStartJob_END;\r
297                 }\r
298         }\r
299 \r
300         printJob.hProtInfo = (EPS_HANDLE)rawPrintJob;\r
301 \r
302 rawStartJob_END:\r
303 \r
304         if( EPS_ERR_NONE != ret ){\r
305                 if( EPS_INVALID_SOCKET != rawPrintJob->socStat ){\r
306                         snmpCloseSocket( &rawPrintJob->socStat );\r
307                 }\r
308 \r
309                 if( EPS_INVALID_SOCKET != rawPrintJob->socData ){\r
310                         epsNetFnc.close( rawPrintJob->socData );\r
311                         rawPrintJob->socData = EPS_INVALID_SOCKET;\r
312                 }\r
313                 EPS_SAFE_RELEASE( rawPrintJob );\r
314 \r
315                 printJob.hProtInfo = NULL;\r
316         }\r
317 \r
318         EPS_RETURN( ret )\r
319 }\r
320 \r
321 \r
322 /*******************************************|********************************************/\r
323 /*                                                                                      */\r
324 /* Function name:     rawRestartJob()                                                                                                   */\r
325 /*                                                                                      */\r
326 /* Arguments                                                                            */\r
327 /* ---------                                                                            */\r
328 /* Name:        Type:               Description:                                        */\r
329 /* N/A                                                                                  */\r
330 /*                                                                                      */\r
331 /* Return value:                                                                        */\r
332 /*      EPS_ERR_NONE                    - Success                                       */\r
333 /*      EPS_ERR_MEMORY_ALLOCATION       - Failed to allocate memory                     */\r
334 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
335 /*      EPS_ERR_PRINTER_ERR_OCCUR       - Printer Error happened                        */\r
336 /*                                                                                      */\r
337 /* Description:                                                                         */\r
338 /*      Open socekt & Send start job messasge.                                          */\r
339 /*                                                                                      */\r
340 /*******************************************|********************************************/\r
341 EPS_ERR_CODE rawRestartJob(\r
342 \r
343                 void\r
344 \r
345 ){\r
346         EPS_PRINT_JOB_RAW *rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;\r
347         \r
348         EPS_LOG_FUNCIN\r
349 \r
350         if( NULL == rawPrintJob ){\r
351                 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )\r
352         }\r
353 \r
354         /* Establish Connection & send start job message */\r
355         EPS_RETURN( StartDataSession( rawPrintJob, printJob.printer ) )\r
356 }\r
357 \r
358 \r
359 /*******************************************|********************************************/\r
360 /*                                                                                      */\r
361 /* Function name:     rawWritePrintData()                                                                                               */\r
362 /*                                                                                      */\r
363 /* Arguments                                                                            */\r
364 /* ---------                                                                            */\r
365 /* Name:        Type:               Description:                                        */\r
366 /* buffer           EPS_UINT8*          I: Print data                                                       */\r
367 /* bufferlen    EPS_INT32               I: Print data length                                                    */\r
368 /* sendlen          EPS_INT32*          O: Sended length                                                                */\r
369 /*                                                                                      */\r
370 /* Return value:                                                                        */\r
371 /*      EPS_ERR_NONE                    - Success                                       */\r
372 /*      EPS_ERR_JOB_NOT_INITIALIZED     - JOB is NOT initialized                                                */\r
373 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
374 /*                                                                                      */\r
375 /* Description:                                                                         */\r
376 /*      Called from epsPrintBand, Send ESC/P-R data.                                        */\r
377 /*                                                                                      */\r
378 /*******************************************|********************************************/\r
379 EPS_ERR_CODE rawWritePrintData(\r
380 \r
381                 const EPS_UINT8* buffer, \r
382                 EPS_UINT32 bufferlen, \r
383                 EPS_UINT32* sendlen\r
384                 \r
385 ){\r
386         EPS_ERR_CODE ret = EPS_ERR_NONE;\r
387         EPS_PRINT_JOB_RAW* rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;\r
388         EPS_UINT32 timeout;\r
389         EPS_INT32  sentSize = 0;\r
390 \r
391         EPS_LOG_FUNCIN\r
392 \r
393         if( !rawPrintJob ){\r
394                 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )\r
395         }\r
396 \r
397         /* Send ESC/P-R data                                                                                                                            */\r
398         timeout = (EPS_UINT32)((EPS_IS_BI_PROTOCOL(printJob.printer->protocol))?EPSNET_BAND_SEND_TIMEOUT:EPSNET_BAND_SEND_TIMEOUTL);\r
399                 \r
400         sentSize = epsNetFnc.send(rawPrintJob->socData, (char*)buffer, (EPS_INT32)bufferlen, timeout);\r
401 \r
402         if( EPS_SOCKET_ERROR == sentSize ){\r
403                 *sendlen = 0;\r
404                 ret = EPS_ERR_COMM_ERROR;\r
405         } else if( EPS_SOCKET_TIMEOUT == sentSize ){\r
406                 *sendlen = 0;\r
407                 ret = EPS_COM_TINEOUT;\r
408         } else{\r
409                 *sendlen = (EPS_UINT32)sentSize;\r
410         }\r
411 \r
412         EPS_RETURN( ret )\r
413 }\r
414 \r
415 \r
416 /*******************************************|********************************************/\r
417 /*                                                                                      */\r
418 /* Function name:     rawEndJob()                                                                                                               */\r
419 /*                                                                                      */\r
420 /* Arguments                                                                            */\r
421 /* ---------                                                                            */\r
422 /* Name:        Type:               Description:                                        */\r
423 /* (none)                                                                               */\r
424 /*                                                                                      */\r
425 /* Return value:                                                                        */\r
426 /*      EPS_ERR_NONE                    - Success                                       */\r
427 /*      EPS_ERR_JOB_NOT_INITIALIZED     - JOB is NOT initialized                                                */\r
428 /*                                                                                      */\r
429 /* Description:                                                                         */\r
430 /*      Send endjob messasge & Close connection.                                        */\r
431 /*                                                                                      */\r
432 /*******************************************|********************************************/\r
433 EPS_ERR_CODE rawEndJob()\r
434 {\r
435         EPS_ERR_CODE ret = EPS_ERR_NONE;\r
436         EPS_PRINT_JOB_RAW* rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;\r
437 \r
438         EPS_LOG_FUNCIN\r
439 \r
440         if( !rawPrintJob ){\r
441                 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )\r
442         }\r
443 \r
444         /* Close SendData Session */\r
445         EndDataSession(rawPrintJob);\r
446 \r
447         if( EPS_IS_BI_PROTOCOL(printJob.printer->protocol) ){\r
448                 snmpCloseSocket( &rawPrintJob->socStat );\r
449         }\r
450 \r
451         EPS_SAFE_RELEASE( printJob.hProtInfo );\r
452 \r
453         EPS_RETURN( ret )\r
454 }\r
455 \r
456 \r
457 /*******************************************|********************************************/\r
458 /*                                                                                      */\r
459 /* Function name:     rawResetPrinter()                                                                                                 */\r
460 /*                                                                                      */\r
461 /* Arguments                                                                            */\r
462 /* ---------                                                                            */\r
463 /* Name:        Type:               Description:                                        */\r
464 /* (none)                                                                               */\r
465 /*                                                                                      */\r
466 /* Return value:                                                                        */\r
467 /*      EPS_ERR_NONE                    - Success                                       */\r
468 /*      EPS_ERR_JOB_NOT_INITIALIZED     - JOB is NOT initialized                                                */\r
469 /*                                                                                      */\r
470 /* Description:                                                                         */\r
471 /*      Send endjob messasge & Close connection.                                        */\r
472 /*                                                                                      */\r
473 /*******************************************|********************************************/\r
474 EPS_ERR_CODE rawResetPrinter(\r
475 \r
476                 void\r
477 \r
478 ){\r
479         EPS_PRINT_JOB_RAW* rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;\r
480 \r
481         EPS_LOG_FUNCIN\r
482 \r
483         if( NULL == printJob.hProtInfo || NULL == printJob.printer){\r
484                 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )\r
485         }\r
486 \r
487 /*** If we already successfully called this function once for a given print job,        */\r
488     if(printJob.resetSent != EPS_RESET_SENT \r
489                 && FALSE != printJob.transmittable\r
490                 && TRUE == printJob.sendJS ){\r
491         rawMechCommand(printJob.printer, EPS_CBTCOM_RJ);\r
492     }   \r
493 \r
494         rawPrintJob->reseted = TRUE;\r
495 \r
496         /* Close SendData Session */\r
497         EPS_RETURN( EndDataSession(rawPrintJob) )\r
498 }\r
499 \r
500 \r
501 /*******************************************|********************************************/\r
502 /*                                                                                      */\r
503 /* Function name:     rawStartPage()                                                                                                    */\r
504 /*                                                                                      */\r
505 /* Arguments                                                                            */\r
506 /* ---------                                                                            */\r
507 /* Name:        Type:               Description:                                        */\r
508 /* N/A                                                                                  */\r
509 /*                                                                                      */\r
510 /* Return value:                                                                        */\r
511 /*      EPS_ERR_NONE                    - Success                                       */\r
512 /*      EPS_ERR_MEMORY_ALLOCATION       - Failed to allocate memory                     */\r
513 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
514 /*      EPS_ERR_PRINTER_ERR_OCCUR       - Printer Error happened                        */\r
515 /*                                                                                      */\r
516 /* Description:                                                                         */\r
517 /*      Open socekt & Send start job messasge.                                          */\r
518 /*                                                                                      */\r
519 /*******************************************|********************************************/\r
520 EPS_ERR_CODE rawStartPage(\r
521 \r
522                 void\r
523 \r
524 ){\r
525         EPS_PRINT_JOB_RAW *rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;\r
526         \r
527         EPS_LOG_FUNCIN\r
528 \r
529         if( NULL == rawPrintJob ){\r
530                 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )\r
531         }\r
532 \r
533         ((EPS_PRINT_JOB_RAW*)printJob.hProtInfo)->pageend = FALSE;\r
534 \r
535         /* Establish Connection & send start job message */\r
536         EPS_RETURN( StartDataSession( rawPrintJob, printJob.printer ) )\r
537 }\r
538 \r
539 \r
540 /*******************************************|********************************************/\r
541 /*                                                                                      */\r
542 /* Function name:     rawEndPage()                                                                                                      */\r
543 /*                                                                                      */\r
544 /* Arguments                                                                            */\r
545 /* ---------                                                                            */\r
546 /* Name:        Type:               Description:                                        */\r
547 /* (none)                                                                               */\r
548 /*                                                                                      */\r
549 /* Return value:                                                                        */\r
550 /*      EPS_ERR_NONE                    - Success                                       */\r
551 /*      EPS_ERR_JOB_NOT_INITIALIZED     - JOB is NOT initialized                                                */\r
552 /*                                                                                      */\r
553 /* Description:                                                                         */\r
554 /*      Send endjob messasge & Close connection.                                        */\r
555 /*                                                                                      */\r
556 /*******************************************|********************************************/\r
557 EPS_ERR_CODE rawEndPage(\r
558 \r
559                 void\r
560 \r
561 ){\r
562         EPS_PRINT_JOB_RAW *rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;\r
563 \r
564         EPS_LOG_FUNCIN\r
565 \r
566         if( NULL == printJob.hProtInfo ){\r
567                 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )\r
568         }\r
569 \r
570         rawPrintJob->pageend = TRUE;\r
571 \r
572         /* Close SendData Session */\r
573         EPS_RETURN( EndDataSession(rawPrintJob) )\r
574 }\r
575 \r
576 \r
577 /*******************************************|********************************************/\r
578 /*                                                                                      */\r
579 /* Function name:     rawGetStatus()                                                                                                    */\r
580 /*                                                                                      */\r
581 /* Arguments                                                                            */\r
582 /* ---------                                                                            */\r
583 /* Name:        Type:               Description:                                        */\r
584 /* printer          EPS_PRINTER_INN*    I: Printer data structure                                   */\r
585 /* status               EPS_STATUS_INFO*        O: retrieve printer satus                                                   */\r
586 /* ioStatus             EPS_INT32*              O: It is possible to communicate                                    */\r
587 /* canceling    EPS_BOOL*               O: Cancel processing                                                */\r
588 /*                                                                                      */\r
589 /* Return value:                                                                        */\r
590 /*      EPS_ERR_NONE                    - Success                                       */\r
591 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
592 /*                                                                                      */ \r
593 /* Description:                                                                         */\r
594 /*      Get Printer status by SNMP.                                                                     */\r
595 /*                                                                                      */\r
596 /*******************************************|********************************************/\r
597 EPS_ERR_CODE rawGetStatus(\r
598 \r
599                 EPS_STATUS_INFO*        pstInfo,\r
600                 EPS_BOOL*                               pIoStatus,\r
601                 EPS_BOOL*                               pCancelling\r
602                 \r
603 ){\r
604         EPS_ERR_CODE            ret = EPS_ERR_NONE;\r
605         EPS_PRINTER_INN*        printer = printJob.printer;\r
606         EPS_SOCKET                      sock = EPS_INVALID_SOCKET;\r
607 \r
608         EPS_LOG_FUNCIN\r
609 \r
610         if( !EPS_IS_BI_PROTOCOL(printer->protocol) ){\r
611         EPS_RETURN( EPS_ERR_NEED_BIDIRECT );\r
612         }\r
613 \r
614     memset(pstInfo, -1, sizeof(EPS_STATUS_INFO));\r
615 \r
616         /*** Get Printer status by SNMP                                                     */\r
617         ret = snmpOpenSocket( &sock );\r
618         if( EPS_ERR_NONE != ret ){\r
619                 EPS_RETURN( ret )\r
620         }\r
621 \r
622         ret = snmp.GetStatus(sock, printer->location, pstInfo );\r
623 \r
624         if( !IS_VALID_DATA_SESSION ){\r
625                 /* Another proceessing, or printing after endjob */\r
626                 if(    EPS_ST_WAITING == pstInfo->nState \r
627                         && EPS_PRNERR_NOERROR == pstInfo->nError){\r
628                         pstInfo->nState = EPS_ST_ERROR;\r
629                         pstInfo->nError = EPS_PRNERR_BUSY;\r
630                 }\r
631         }\r
632 \r
633         if(NULL != pIoStatus && NULL != pCancelling){\r
634                 if(EPS_ERR_NONE == ret){\r
635                         if( IS_VALID_DATA_SESSION || pstInfo->nState == EPS_ST_IDLE ||\r
636                                 (IS_JOB_ACTIVE && ((EPS_PRINT_JOB_RAW*)printJob.hProtInfo)->pageend) ){\r
637                                 *pIoStatus = TRUE;\r
638                         } else{\r
639                                 *pIoStatus = FALSE;\r
640                         }\r
641 \r
642                         if( IS_JOB_ACTIVE ){\r
643                                 if( TRUE == ((EPS_PRINT_JOB_RAW*)printJob.hProtInfo)->reseted ){\r
644                                         if(EPS_ST_IDLE == pstInfo->nState){\r
645                                                 /* cancel finished */\r
646                                                 *pCancelling = FALSE;\r
647                                                 ((EPS_PRINT_JOB_RAW*)printJob.hProtInfo)->reseted = FALSE;\r
648                                         } else{\r
649                                                 /* cancelling */\r
650                                                 *pCancelling = TRUE;\r
651                                         }\r
652                                 } else  if( pstInfo->nCancel == EPS_CAREQ_CANCEL ){\r
653                                         /* cancel request from printer */\r
654                                         *pCancelling = TRUE;\r
655                                 } else{\r
656                                         *pCancelling = FALSE;\r
657                                 }\r
658                         } else{\r
659                                 *pCancelling = FALSE;\r
660                         }\r
661                 } else{\r
662                         *pIoStatus      = FALSE;\r
663                         *pCancelling    = FALSE;\r
664                 }\r
665         }\r
666 \r
667         snmpCloseSocket( &sock );\r
668         \r
669         EPS_RETURN( ret )\r
670 }\r
671 \r
672 \r
673 /*******************************************|********************************************/\r
674 /*                                                                                      */\r
675 /* Function name:     rawGetJobStatus()                                                                                         */\r
676 /*                                                                                      */\r
677 /* Arguments                                                                            */\r
678 /* ---------                                                                            */\r
679 /* Name:        Type:               Description:                                        */\r
680 /* pstInfo          EPS_STATUS_INFO*    O: retrieve printer satus                                   */\r
681 /*                                                                                      */\r
682 /* Return value:                                                                        */\r
683 /*      EPS_ERR_NONE                    - Success                                       */\r
684 /*      EPS_ERR_JOB_NOT_INITIALIZED     - JOB is NOT initialized                                                */\r
685 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
686 /*                                                                                      */\r
687 /* Description:                                                                         */\r
688 /*      Get Printer status by SNMP. It is possible to use in Job.                       */\r
689 /*                                                                                      */\r
690 /*******************************************|********************************************/\r
691 EPS_ERR_CODE rawGetJobStatus(\r
692 \r
693                 EPS_STATUS_INFO* pstInfo\r
694                 \r
695 ){\r
696         EPS_PRINT_JOB_RAW*   rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;\r
697         EPS_PRINTER_INN*     printer = (EPS_PRINTER_INN*)printJob.printer;\r
698 \r
699         EPS_LOG_FUNCIN\r
700 \r
701         /* Initialize variables */\r
702         memset(pstInfo, 0, sizeof(EPS_STATUS_INFO));\r
703 \r
704         if( !rawPrintJob ){\r
705                 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )\r
706         }\r
707         \r
708         /*** Get Printer status by SNMP                                                     */\r
709         EPS_RETURN( snmp.GetStatus( rawPrintJob->socStat, printer->location, pstInfo ) )\r
710 }\r
711 \r
712 \r
713 /*******************************************|********************************************/\r
714 /*                                                                                      */\r
715 /* Function name:     rawGetInkInfo()                                                                                                   */\r
716 /*                                                                                      */\r
717 /* Arguments                                                                            */\r
718 /* ---------                                                                            */\r
719 /* Name:        Type:               Description:                                        */\r
720 /* status               EPS_STATUS_INFO*        O: retrieve printer satus                                                   */\r
721 /*                                                                                      */\r
722 /* Return value:                                                                        */\r
723 /*      EPS_ERR_NONE                    - Success                                       */\r
724 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
725 /*                                                                                      */ \r
726 /* Description:                                                                         */\r
727 /*      Get Ink information.                                                                            */\r
728 /*                                                                                      */\r
729 /*******************************************|********************************************/\r
730 EPS_ERR_CODE rawGetInkInfo(\r
731 \r
732                 EPS_STATUS_INFO*        pstInfo\r
733                 \r
734 ){\r
735         EPS_PRINTER_INN*        printer = printJob.printer;\r
736 \r
737         EPS_LOG_FUNCIN\r
738         EPS_RETURN( snmp.GetInkInfo(printer->location, pstInfo ) )\r
739 }\r
740 \r
741 \r
742 /*******************************************|********************************************/\r
743 /*                                                                                      */\r
744 /* Function name:     rawGetPMString()                                                                                          */\r
745 /*                                                                                      */\r
746 /* Arguments                                                                            */\r
747 /* ---------                                                                            */\r
748 /* Name:        Type:               Description:                                        */\r
749 /* printer      EPS_PRINTER_INN*    I: Pointer to a PrinterInfo                         */\r
750 /* pString              EPS_UINT8*                      O: Pointer to PM String                             */\r
751 /* bufSize              EPS_INT32                       I: pString buffer size                              */\r
752 /*                                                                                      */\r
753 /* Return value:                                                                                                                                                */\r
754 /*      EPS_ERR_NONE                                    - Success                                                                               */\r
755 /*      EPS_ERR_MEMORY_ALLOCATION       - Failed to allocate memory                     */\r
756 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
757 /*      EPS_ERR_PROTOCOL_NOT_SUPPORTED  - Unsupported function Error                    */\r
758 /*                                                                                      */\r
759 /* Description:                                                                         */\r
760 /*      Sends request to printer for supported media.  Parses response and stores               */\r
761 /*              PM String : pString                                                             */\r
762 /*                                                                                      */\r
763 /*******************************************|********************************************/\r
764 EPS_ERR_CODE rawGetPMString(\r
765                                                                   \r
766                 const EPS_PRINTER_INN*  printer, \r
767                 EPS_INT32               type,\r
768         EPS_UINT8*              pString,\r
769                 EPS_INT32*              bufSize\r
770 \r
771 ){\r
772         EPS_LOG_FUNCIN\r
773         EPS_RETURN( snmp.GetPMString(printer, type, pString, bufSize) )\r
774 }\r
775 \r
776 \r
777 /*******************************************|********************************************/\r
778 /*                                                                                      */\r
779 /* Function name:   rawMechCommand()                                                    */\r
780 /*                                                                                      */\r
781 /* Arguments                                                                            */\r
782 /* ---------                                                                            */\r
783 /* Name:        Type:               Description:                                        */\r
784 /* Command      EPS_INT32           I: Command Code                                     */\r
785 /*                                                                                      */\r
786 /* Return value:                                                                        */\r
787 /*      EPS_ERR_NONE                    - Mech command executed successfully            */\r
788 /*      EPS_ERR_JOB_NOT_INITIALIZED     - JOB is NOT initialized                                                */\r
789 /*      EPS_ERR_COMM_ERROR              - Mech command execution error                  */\r
790 /*                                                                                      */\r
791 /* Description:                                                                         */\r
792 /*      Sends mechanincal commands to the printer.                                      */\r
793 /*                                                                                      */\r
794 /*******************************************|********************************************/\r
795 EPS_ERR_CODE    rawMechCommand (\r
796 \r
797         const EPS_PRINTER_INN*  printer, \r
798         EPS_INT32   Command\r
799         \r
800 ){\r
801         EPS_LOG_FUNCIN\r
802         EPS_RETURN( snmp.MechCommand(printer, Command) )\r
803 }\r
804 \r
805 \r
806 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
807 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
808 /*%%%%%%%%%%%%%%%%%%%%                                             %%%%%%%%%%%%%%%%%%%%%*/\r
809 /*--------------------               Local Functions               ---------------------*/\r
810 /*%%%%%%%%%%%%%%%%%%%%                                             %%%%%%%%%%%%%%%%%%%%%*/\r
811 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
812 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
813 \r
814 /*******************************************|********************************************/\r
815 /*                                                                                      */\r
816 /* Function name:     StartDataSession()                                                                                                */\r
817 /*                                                                                      */\r
818 /* Arguments                                                                            */\r
819 /* ---------                                                                            */\r
820 /* Name:        Type:               Description:                                        */\r
821 /* rawPrintJob  EPS_PRINT_JOB_RAW*  O : RAW Job information                                                     */\r
822 /* printer      EPS_PRINTER_INN*    I : target printer information                                      */\r
823 /*                                                                                      */\r
824 /* Return value:                                                                                                                                                */\r
825 /*              EPS_ERR_NONE                                    - Success                                                                   */\r
826 /*      EPS_ERR_MEMORY_ALLOCATION       - Failed to allocate memory                     */\r
827 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
828 /*      EPS_ERR_PRINTER_ERR_OCCUR       - Printer Error happened                        */\r
829 /*                                                                                      */\r
830 /* Description:                                                                         */\r
831 /*      Starts a print job.  Establish Connection, Send StartJob message.                       */\r
832 /*                                                                                      */\r
833 /*******************************************|********************************************/\r
834 static EPS_ERR_CODE StartDataSession(\r
835 \r
836                 EPS_PRINT_JOB_RAW* rawPrintJob,\r
837                 const EPS_PRINTER_INN* printer\r
838 \r
839 ){\r
840         EPS_ERR_CODE ret = EPS_ERR_NONE;\r
841 \r
842         EPS_LOG_FUNCIN\r
843 \r
844         if(EPS_INVALID_SOCKET != rawPrintJob->socData){\r
845                 /* Already established */\r
846                 EPS_RETURN( EPS_ERR_NONE )\r
847         }\r
848 \r
849         /* Check status */\r
850         if( EPS_IS_BI_PROTOCOL(printer->protocol) ){\r
851                 EPS_STATUS_INFO stInfo;\r
852                 ret = rawGetStatus(&stInfo, NULL, NULL);\r
853                 if(EPS_ERR_NONE != ret){\r
854                         EPS_RETURN( ret )\r
855                 } else if(stInfo.nState != EPS_ST_IDLE){\r
856                         EPS_RETURN( EPS_ERR_PRINTER_ERR_OCCUR )\r
857                 }\r
858         }\r
859 \r
860         /* create socket */\r
861         rawPrintJob->socData = epsNetFnc.socket(EPS_PF_INET, EPS_SOCK_STREAM, EPS_PROTOCOL_TCP);  \r
862         if( EPS_INVALID_SOCKET == rawPrintJob->socData ){\r
863                 EPS_DBGPRINT(("StartDataSession ERR\n"));\r
864                 ret = EPS_ERR_COMM_ERROR;\r
865                 goto StartDataSession_END;\r
866         }\r
867                                \r
868         /* connect to printer */\r
869         if(EPS_SOCKET_SUCCESS != epsNetFnc.connect(rawPrintJob->socData, printer->location, printer->printPort)){\r
870                 EPS_DBGPRINT(("StartDataSession ERR\n"));\r
871                 ret = EPS_ERR_COMM_ERROR;\r
872                 goto StartDataSession_END;\r
873         }\r
874 \r
875         rawPrintJob->reseted = FALSE;\r
876         rawPrintJob->pageend = FALSE;\r
877         /*printJob.hProtInfo = (EPS_HANDLE)rawPrintJob;*/\r
878 \r
879 StartDataSession_END:\r
880         if( EPS_ERR_NONE != ret ){\r
881                 if( EPS_INVALID_SOCKET != rawPrintJob->socData ){\r
882                         epsNetFnc.close( rawPrintJob->socData );\r
883                         rawPrintJob->socData = EPS_INVALID_SOCKET;\r
884                 }\r
885         }\r
886 \r
887         EPS_RETURN( ret )\r
888 }\r
889 \r
890 \r
891 /*******************************************|********************************************/\r
892 /*                                                                                      */\r
893 /* Function name:     EndDataSession()                                                                                                  */\r
894 /*                                                                                      */\r
895 /* Arguments                                                                            */\r
896 /* ---------                                                                            */\r
897 /* Name:        Type:               Description:                                        */\r
898 /* rawPrintJob  EPS_PRINT_JOB_RAW*  IO : RAW Job information                                                    */\r
899 /*                                                                                      */\r
900 /* Return value:                                                                                                                                                */\r
901 /*      EPS_ERR_NONE                                - Success                                       */\r
902 /*      EPS_ERR_COMM_ERROR              - Communication Error                           */\r
903 /*                                                                                      */\r
904 /* Description:                                                                         */\r
905 /*      Send EndJob line to printer, shutdown/close socket.                                     */\r
906 /*                                                                                      */\r
907 /*******************************************|********************************************/\r
908 static EPS_ERR_CODE EndDataSession(\r
909                                                  \r
910                 EPS_PRINT_JOB_RAW* rawPrintJob\r
911                 \r
912 ){      \r
913         EPS_ERR_CODE ret = EPS_ERR_NONE;                                                /* Used for error handling */   \r
914 \r
915         EPS_LOG_FUNCIN\r
916 \r
917         if( EPS_INVALID_SOCKET != rawPrintJob->socData){\r
918         /*** If we already successfully called this function once for a given print job,        */\r
919                 epsNetFnc.shutdown(rawPrintJob->socData, EPS_SHUTDOWN_SEND);\r
920                 epsNetFnc.shutdown(rawPrintJob->socData, EPS_SHUTDOWN_RECV);\r
921                 epsNetFnc.shutdown(rawPrintJob->socData, EPS_SHUTDOWN_BOTH);\r
922 \r
923                 ret = epsNetFnc.close(rawPrintJob->socData);\r
924                 rawPrintJob->socData = EPS_INVALID_SOCKET;\r
925         }\r
926 \r
927         EPS_RETURN( ret )\r
928 }\r
929 /*_______________________________    epson-net-raw.c    ________________________________*/\r
930 \r
931 /*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/\r
932 /*       1         2         3         4         5         6         7         8        */\r
933 /*******************************************|********************************************/\r
934 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
935 /***** End of File *** End of File *** End of File *** End of File *** End of File ******/\r
936 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/\r
937 \r