1 /*________________________________ epson-net-raw.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
16 /*******************************************|********************************************/
\r
18 /* Raw Port protocol Module */
\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
35 /*******************************************|********************************************/
\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
48 /*----------------------------- Local Macro Definitions -------------------------------*/
\r
49 /*******************************************|********************************************/
\r
50 #ifdef EPS_LOG_MODULE_RAW
\r
51 #define EPS_LOG_MODULE EPS_LOG_MODULE_RAW
\r
53 #define EPS_LOG_MODULE 0
\r
56 #define RAW_PORT_NUM (9100) /* Protocol port number */
\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
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
67 /*---------------------------- ESC/P-R Lib Global Variables --------------------------*/
\r
68 /*******************************************|********************************************/
\r
70 /*** Extern Function */
\r
71 extern EPS_NET_FUNC epsNetFnc;
\r
72 extern EPS_CMN_FUNC epsCmnFnc;
\r
74 /*** Print Job Structure */
\r
75 /*** -------------------------------------------------------------------------------*/
\r
76 extern EPS_PRINT_JOB printJob;
\r
78 static EPS_SNMP_FUNCS snmp;
\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
89 /*-------------------------------- RAW Local Variables -------------------------------*/
\r
90 /*******************************************|********************************************/
\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
97 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
98 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
99 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
100 /*-------------------- Public Functions ---------------------*/
\r
101 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
102 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
103 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
104 void rawSetupSTFunctions (
\r
106 const EPS_PRINTER_INN* printer
\r
111 snmpSetupSTFunctions(&snmp, printer);
\r
117 EPS_UINT16 rawGetDefautiPort (
\r
122 return RAW_PORT_NUM;
\r
126 /*******************************************|********************************************/
\r
128 /* Function name: rawFindStart() */
\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
137 /* Return value: */
\r
138 /* EPS_ERR_NONE - Success */
\r
139 /* EPS_ERR_COMM_ERROR - Communication Error */
\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
145 /*******************************************|********************************************/
\r
146 EPS_ERR_CODE rawFindStart(
\r
149 const EPS_INT8* address,
\r
154 EPS_RETURN( snmpFindStart(sock, address, multi) )
\r
158 /*******************************************|********************************************/
\r
160 /* Function name: rawFind() */
\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
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
176 /* Receive discover messasge. Get printer name. */
\r
178 /*******************************************|********************************************/
\r
179 EPS_ERR_CODE rawFind (
\r
182 EPS_PRINTER_INN** printer
\r
186 EPS_RETURN( snmpFind(sock, RAW_PORT_NUM, EPS_PROTOCOL_RAW, printer) )
\r
190 /*******************************************|********************************************/
\r
192 /* Function name: rawFindEnd() */
\r
196 /* Name: Type: Description: */
\r
197 /* sock EPS_SOCKET I: Discover Socket */
\r
199 /* Return value: */
\r
200 /* EPS_ERR_NONE - Success */
\r
201 /* EPS_ERR_COMM_ERROR - Close socket failed */
\r
204 /* close discover process. */
\r
206 /*******************************************|********************************************/
\r
207 EPS_ERR_CODE rawFindEnd (
\r
213 EPS_RETURN( snmpFindEnd(sock) )
\r
217 /*******************************************|********************************************/
\r
219 /* Function name: rawProbePrinterByID() */
\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
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
235 /* Probe printer by ID String. */
\r
237 /*******************************************|********************************************/
\r
238 EPS_ERR_CODE rawProbePrinterByID (
\r
240 EPS_INT8* printerUUID,
\r
241 EPS_UINT32 timeout,
\r
242 EPS_PRINTER_INN** printer
\r
246 EPS_RETURN( snmpProbeByID(printerUUID, RAW_PORT_NUM, EPS_PROTOCOL_RAW, timeout, printer) )
\r
250 /*******************************************|********************************************/
\r
252 /* Function name: rawStartJob() */
\r
256 /* Name: Type: Description: */
\r
257 /* printer EPS_PRINTER_INN* I: pointer to printer Structure */
\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
265 /* Open socekt & Send start job messasge. */
\r
267 /*******************************************|********************************************/
\r
268 EPS_ERR_CODE rawStartJob(
\r
273 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
274 EPS_PRINT_JOB_RAW *rawPrintJob = NULL;
\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
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
288 /* Establish Connection & send start job message */
\r
289 ret = StartDataSession( rawPrintJob, printJob.printer );
\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
300 printJob.hProtInfo = (EPS_HANDLE)rawPrintJob;
\r
304 if( EPS_ERR_NONE != ret ){
\r
305 if( EPS_INVALID_SOCKET != rawPrintJob->socStat ){
\r
306 snmpCloseSocket( &rawPrintJob->socStat );
\r
309 if( EPS_INVALID_SOCKET != rawPrintJob->socData ){
\r
310 epsNetFnc.close( rawPrintJob->socData );
\r
311 rawPrintJob->socData = EPS_INVALID_SOCKET;
\r
313 EPS_SAFE_RELEASE( rawPrintJob );
\r
315 printJob.hProtInfo = NULL;
\r
322 /*******************************************|********************************************/
\r
324 /* Function name: rawRestartJob() */
\r
328 /* Name: Type: Description: */
\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
338 /* Open socekt & Send start job messasge. */
\r
340 /*******************************************|********************************************/
\r
341 EPS_ERR_CODE rawRestartJob(
\r
346 EPS_PRINT_JOB_RAW *rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;
\r
350 if( NULL == rawPrintJob ){
\r
351 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )
\r
354 /* Establish Connection & send start job message */
\r
355 EPS_RETURN( StartDataSession( rawPrintJob, printJob.printer ) )
\r
359 /*******************************************|********************************************/
\r
361 /* Function name: rawWritePrintData() */
\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
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
376 /* Called from epsPrintBand, Send ESC/P-R data. */
\r
378 /*******************************************|********************************************/
\r
379 EPS_ERR_CODE rawWritePrintData(
\r
381 const EPS_UINT8* buffer,
\r
382 EPS_UINT32 bufferlen,
\r
383 EPS_UINT32* sendlen
\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
393 if( !rawPrintJob ){
\r
394 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )
\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
400 sentSize = epsNetFnc.send(rawPrintJob->socData, (char*)buffer, (EPS_INT32)bufferlen, timeout);
\r
402 if( EPS_SOCKET_ERROR == sentSize ){
\r
404 ret = EPS_ERR_COMM_ERROR;
\r
405 } else if( EPS_SOCKET_TIMEOUT == sentSize ){
\r
407 ret = EPS_COM_TINEOUT;
\r
409 *sendlen = (EPS_UINT32)sentSize;
\r
416 /*******************************************|********************************************/
\r
418 /* Function name: rawEndJob() */
\r
422 /* Name: Type: Description: */
\r
425 /* Return value: */
\r
426 /* EPS_ERR_NONE - Success */
\r
427 /* EPS_ERR_JOB_NOT_INITIALIZED - JOB is NOT initialized */
\r
430 /* Send endjob messasge & Close connection. */
\r
432 /*******************************************|********************************************/
\r
433 EPS_ERR_CODE rawEndJob()
\r
435 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
436 EPS_PRINT_JOB_RAW* rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;
\r
440 if( !rawPrintJob ){
\r
441 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )
\r
444 /* Close SendData Session */
\r
445 EndDataSession(rawPrintJob);
\r
447 if( EPS_IS_BI_PROTOCOL(printJob.printer->protocol) ){
\r
448 snmpCloseSocket( &rawPrintJob->socStat );
\r
451 EPS_SAFE_RELEASE( printJob.hProtInfo );
\r
457 /*******************************************|********************************************/
\r
459 /* Function name: rawResetPrinter() */
\r
463 /* Name: Type: Description: */
\r
466 /* Return value: */
\r
467 /* EPS_ERR_NONE - Success */
\r
468 /* EPS_ERR_JOB_NOT_INITIALIZED - JOB is NOT initialized */
\r
471 /* Send endjob messasge & Close connection. */
\r
473 /*******************************************|********************************************/
\r
474 EPS_ERR_CODE rawResetPrinter(
\r
479 EPS_PRINT_JOB_RAW* rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;
\r
483 if( NULL == printJob.hProtInfo || NULL == printJob.printer){
\r
484 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )
\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
494 rawPrintJob->reseted = TRUE;
\r
496 /* Close SendData Session */
\r
497 EPS_RETURN( EndDataSession(rawPrintJob) )
\r
501 /*******************************************|********************************************/
\r
503 /* Function name: rawStartPage() */
\r
507 /* Name: Type: Description: */
\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
517 /* Open socekt & Send start job messasge. */
\r
519 /*******************************************|********************************************/
\r
520 EPS_ERR_CODE rawStartPage(
\r
525 EPS_PRINT_JOB_RAW *rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;
\r
529 if( NULL == rawPrintJob ){
\r
530 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )
\r
533 ((EPS_PRINT_JOB_RAW*)printJob.hProtInfo)->pageend = FALSE;
\r
535 /* Establish Connection & send start job message */
\r
536 EPS_RETURN( StartDataSession( rawPrintJob, printJob.printer ) )
\r
540 /*******************************************|********************************************/
\r
542 /* Function name: rawEndPage() */
\r
546 /* Name: Type: Description: */
\r
549 /* Return value: */
\r
550 /* EPS_ERR_NONE - Success */
\r
551 /* EPS_ERR_JOB_NOT_INITIALIZED - JOB is NOT initialized */
\r
554 /* Send endjob messasge & Close connection. */
\r
556 /*******************************************|********************************************/
\r
557 EPS_ERR_CODE rawEndPage(
\r
562 EPS_PRINT_JOB_RAW *rawPrintJob = (EPS_PRINT_JOB_RAW*)printJob.hProtInfo;
\r
566 if( NULL == printJob.hProtInfo ){
\r
567 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )
\r
570 rawPrintJob->pageend = TRUE;
\r
572 /* Close SendData Session */
\r
573 EPS_RETURN( EndDataSession(rawPrintJob) )
\r
577 /*******************************************|********************************************/
\r
579 /* Function name: rawGetStatus() */
\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
589 /* Return value: */
\r
590 /* EPS_ERR_NONE - Success */
\r
591 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
594 /* Get Printer status by SNMP. */
\r
596 /*******************************************|********************************************/
\r
597 EPS_ERR_CODE rawGetStatus(
\r
599 EPS_STATUS_INFO* pstInfo,
\r
600 EPS_BOOL* pIoStatus,
\r
601 EPS_BOOL* pCancelling
\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
610 if( !EPS_IS_BI_PROTOCOL(printer->protocol) ){
\r
611 EPS_RETURN( EPS_ERR_NEED_BIDIRECT );
\r
614 memset(pstInfo, -1, sizeof(EPS_STATUS_INFO));
\r
616 /*** Get Printer status by SNMP */
\r
617 ret = snmpOpenSocket( &sock );
\r
618 if( EPS_ERR_NONE != ret ){
\r
622 ret = snmp.GetStatus(sock, printer->location, pstInfo );
\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
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
639 *pIoStatus = FALSE;
\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
650 *pCancelling = TRUE;
\r
652 } else if( pstInfo->nCancel == EPS_CAREQ_CANCEL ){
\r
653 /* cancel request from printer */
\r
654 *pCancelling = TRUE;
\r
656 *pCancelling = FALSE;
\r
659 *pCancelling = FALSE;
\r
662 *pIoStatus = FALSE;
\r
663 *pCancelling = FALSE;
\r
667 snmpCloseSocket( &sock );
\r
673 /*******************************************|********************************************/
\r
675 /* Function name: rawGetJobStatus() */
\r
679 /* Name: Type: Description: */
\r
680 /* pstInfo EPS_STATUS_INFO* O: retrieve printer satus */
\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
688 /* Get Printer status by SNMP. It is possible to use in Job. */
\r
690 /*******************************************|********************************************/
\r
691 EPS_ERR_CODE rawGetJobStatus(
\r
693 EPS_STATUS_INFO* pstInfo
\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
701 /* Initialize variables */
\r
702 memset(pstInfo, 0, sizeof(EPS_STATUS_INFO));
\r
704 if( !rawPrintJob ){
\r
705 EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED )
\r
708 /*** Get Printer status by SNMP */
\r
709 EPS_RETURN( snmp.GetStatus( rawPrintJob->socStat, printer->location, pstInfo ) )
\r
713 /*******************************************|********************************************/
\r
715 /* Function name: rawGetInkInfo() */
\r
719 /* Name: Type: Description: */
\r
720 /* status EPS_STATUS_INFO* O: retrieve printer satus */
\r
722 /* Return value: */
\r
723 /* EPS_ERR_NONE - Success */
\r
724 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
727 /* Get Ink information. */
\r
729 /*******************************************|********************************************/
\r
730 EPS_ERR_CODE rawGetInkInfo(
\r
732 EPS_STATUS_INFO* pstInfo
\r
735 EPS_PRINTER_INN* printer = printJob.printer;
\r
738 EPS_RETURN( snmp.GetInkInfo(printer->location, pstInfo ) )
\r
742 /*******************************************|********************************************/
\r
744 /* Function name: rawGetPMString() */
\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
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
760 /* Sends request to printer for supported media. Parses response and stores */
\r
761 /* PM String : pString */
\r
763 /*******************************************|********************************************/
\r
764 EPS_ERR_CODE rawGetPMString(
\r
766 const EPS_PRINTER_INN* printer,
\r
768 EPS_UINT8* pString,
\r
773 EPS_RETURN( snmp.GetPMString(printer, type, pString, bufSize) )
\r
777 /*******************************************|********************************************/
\r
779 /* Function name: rawMechCommand() */
\r
783 /* Name: Type: Description: */
\r
784 /* Command EPS_INT32 I: Command Code */
\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
792 /* Sends mechanincal commands to the printer. */
\r
794 /*******************************************|********************************************/
\r
795 EPS_ERR_CODE rawMechCommand (
\r
797 const EPS_PRINTER_INN* printer,
\r
802 EPS_RETURN( snmp.MechCommand(printer, Command) )
\r
806 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
807 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
808 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
809 /*-------------------- Local Functions ---------------------*/
\r
810 /*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
\r
811 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
812 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
\r
814 /*******************************************|********************************************/
\r
816 /* Function name: StartDataSession() */
\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
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
831 /* Starts a print job. Establish Connection, Send StartJob message. */
\r
833 /*******************************************|********************************************/
\r
834 static EPS_ERR_CODE StartDataSession(
\r
836 EPS_PRINT_JOB_RAW* rawPrintJob,
\r
837 const EPS_PRINTER_INN* printer
\r
840 EPS_ERR_CODE ret = EPS_ERR_NONE;
\r
844 if(EPS_INVALID_SOCKET != rawPrintJob->socData){
\r
845 /* Already established */
\r
846 EPS_RETURN( EPS_ERR_NONE )
\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
855 } else if(stInfo.nState != EPS_ST_IDLE){
\r
856 EPS_RETURN( EPS_ERR_PRINTER_ERR_OCCUR )
\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
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
875 rawPrintJob->reseted = FALSE;
\r
876 rawPrintJob->pageend = FALSE;
\r
877 /*printJob.hProtInfo = (EPS_HANDLE)rawPrintJob;*/
\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
891 /*******************************************|********************************************/
\r
893 /* Function name: EndDataSession() */
\r
897 /* Name: Type: Description: */
\r
898 /* rawPrintJob EPS_PRINT_JOB_RAW* IO : RAW Job information */
\r
900 /* Return value: */
\r
901 /* EPS_ERR_NONE - Success */
\r
902 /* EPS_ERR_COMM_ERROR - Communication Error */
\r
905 /* Send EndJob line to printer, shutdown/close socket. */
\r
907 /*******************************************|********************************************/
\r
908 static EPS_ERR_CODE EndDataSession(
\r
910 EPS_PRINT_JOB_RAW* rawPrintJob
\r
913 EPS_ERR_CODE ret = EPS_ERR_NONE; /* Used for error handling */
\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
923 ret = epsNetFnc.close(rawPrintJob->socData);
\r
924 rawPrintJob->socData = EPS_INVALID_SOCKET;
\r
929 /*_______________________________ epson-net-raw.c ________________________________*/
\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