summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDidier Raboud <odyx@debian.org>2015-09-26 17:29:47 +0200
committerDidier Raboud <odyx@debian.org>2015-09-26 17:29:47 +0200
commitcc6f90c578b7b6fd93c517867fc3b3a0fcdf0c06 (patch)
tree056ab9a43c98fbf5a86e2977e9781d1a9b5fc846 /lib
parent8dbc45d27fbb6f29b94908bcb406a896f8100ad5 (diff)
Imported Upstream version 1.5.2
Diffstat (limited to 'lib')
-rw-r--r--[-rwxr-xr-x]lib/Makefile.am6
-rw-r--r--lib/Makefile.in46
-rw-r--r--[-rwxr-xr-x]lib/epson-cbt.c0
-rw-r--r--[-rwxr-xr-x]lib/epson-cbt.h0
-rw-r--r--[-rwxr-xr-x]lib/epson-escpage-color.c2
-rw-r--r--[-rwxr-xr-x]lib/epson-escpage-color.h0
-rw-r--r--[-rwxr-xr-x]lib/epson-escpage-comp.c3
-rw-r--r--[-rwxr-xr-x]lib/epson-escpage-comp.h0
-rw-r--r--[-rwxr-xr-x]lib/epson-escpage-mono.c4
-rw-r--r--[-rwxr-xr-x]lib/epson-escpage-mono.h0
-rw-r--r--[-rwxr-xr-x]lib/epson-escpage.c226
-rw-r--r--[-rwxr-xr-x]lib/epson-escpage.h3
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-api.c1981
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-api.h13
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-dbg.c0
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-dbg.h4
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-def.h141
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-err.h59
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-media.h332
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-mem.c0
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-mem.h11
-rw-r--r--lib/epson-escpr-pm.c3467
-rw-r--r--lib/epson-escpr-pm.h74
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-pvt.h44
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-services.c2290
-rw-r--r--[-rwxr-xr-x]lib/epson-escpr-services.h28
-rw-r--r--[-rwxr-xr-x]lib/epson-layout.c24
-rw-r--r--[-rwxr-xr-x]lib/epson-layout.h7
-rw-r--r--[-rwxr-xr-x]lib/epson-net-lpr.c48
-rw-r--r--[-rwxr-xr-x]lib/epson-net-lpr.h7
-rw-r--r--[-rwxr-xr-x]lib/epson-net-raw.c48
-rw-r--r--[-rwxr-xr-x]lib/epson-net-raw.h7
-rw-r--r--[-rwxr-xr-x]lib/epson-net-snmp.c1545
-rw-r--r--[-rwxr-xr-x]lib/epson-net-snmp.h84
-rw-r--r--[-rwxr-xr-x]lib/epson-protocol.c279
-rw-r--r--[-rwxr-xr-x]lib/epson-protocol.h15
-rw-r--r--[-rwxr-xr-x]lib/epson-typedefs.h0
-rw-r--r--[-rwxr-xr-x]lib/epson-usb.c1205
-rw-r--r--[-rwxr-xr-x]lib/epson-usb.h5
-rwxr-xr-xlib/escpr_def.h223
-rwxr-xr-xlib/escpr_osdep.h74
41 files changed, 8036 insertions, 4269 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 95cc49e..ec39c28 100755..100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -61,6 +61,7 @@ libescpr_la_SOURCES = \
epson-escpr-err.h \
epson-escpr-media.h \
epson-escpr-mem.c epson-escpr-mem.h \
+ epson-escpr-pm.c epson-escpr-pm.h \
epson-escpr-pvt.h \
epson-escpr-services.c epson-escpr-services.h \
epson-layout.c epson-layout.h \
@@ -69,8 +70,7 @@ libescpr_la_SOURCES = \
epson-net-snmp.c epson-net-snmp.h \
epson-protocol.c epson-protocol.h \
epson-typedefs.h \
- epson-usb.c epson-usb.h \
- escpr_def.h \
- escpr_osdep.h
+ epson-usb.c epson-usb.h
+
libescpr_la_LDFLAGS = -O2 -version-info 1:0:0
diff --git a/lib/Makefile.in b/lib/Makefile.in
index 7748821..73091e6 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -1,9 +1,9 @@
-# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# Makefile.in generated by automake 1.11.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
-# Inc.
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
+# Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -68,6 +68,12 @@ am__nobase_list = $(am__nobase_strip_setup); \
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
libescpr_la_LIBADD =
@@ -77,7 +83,7 @@ am_libescpr_la_OBJECTS = libescpr_la-epson-cbt.lo \
libescpr_la-epson-escpage-comp.lo \
libescpr_la-epson-escpage-mono.lo \
libescpr_la-epson-escpr-api.lo libescpr_la-epson-escpr-dbg.lo \
- libescpr_la-epson-escpr-mem.lo \
+ libescpr_la-epson-escpr-mem.lo libescpr_la-epson-escpr-pm.lo \
libescpr_la-epson-escpr-services.lo \
libescpr_la-epson-layout.lo libescpr_la-epson-net-lpr.lo \
libescpr_la-epson-net-raw.lo libescpr_la-epson-net-snmp.lo \
@@ -121,6 +127,7 @@ CUPS_PPD_DIR = @CUPS_PPD_DIR@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
@@ -145,6 +152,7 @@ LN_S = @LN_S@
LSB_VER = @LSB_VER@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
@@ -172,6 +180,7 @@ abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
@@ -205,7 +214,6 @@ libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
-lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
@@ -256,6 +264,7 @@ libescpr_la_SOURCES = \
epson-escpr-err.h \
epson-escpr-media.h \
epson-escpr-mem.c epson-escpr-mem.h \
+ epson-escpr-pm.c epson-escpr-pm.h \
epson-escpr-pvt.h \
epson-escpr-services.c epson-escpr-services.h \
epson-layout.c epson-layout.h \
@@ -264,9 +273,7 @@ libescpr_la_SOURCES = \
epson-net-snmp.c epson-net-snmp.h \
epson-protocol.c epson-protocol.h \
epson-typedefs.h \
- epson-usb.c epson-usb.h \
- escpr_def.h \
- escpr_osdep.h
+ epson-usb.c epson-usb.h
libescpr_la_LDFLAGS = -O2 -version-info 1:0:0
all: all-am
@@ -334,7 +341,7 @@ clean-libLTLIBRARIES:
echo "rm -f \"$${dir}/so_locations\""; \
rm -f "$${dir}/so_locations"; \
done
-libescpr.la: $(libescpr_la_OBJECTS) $(libescpr_la_DEPENDENCIES)
+libescpr.la: $(libescpr_la_OBJECTS) $(libescpr_la_DEPENDENCIES) $(EXTRA_libescpr_la_DEPENDENCIES)
$(libescpr_la_LINK) -rpath $(libdir) $(libescpr_la_OBJECTS) $(libescpr_la_LIBADD) $(LIBS)
mostlyclean-compile:
@@ -351,6 +358,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libescpr_la-epson-escpr-api.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libescpr_la-epson-escpr-dbg.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libescpr_la-epson-escpr-mem.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libescpr_la-epson-escpr-pm.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libescpr_la-epson-escpr-services.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libescpr_la-epson-layout.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libescpr_la-epson-net-lpr.Plo@am__quote@
@@ -436,6 +444,13 @@ libescpr_la-epson-escpr-mem.lo: epson-escpr-mem.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libescpr_la_CFLAGS) $(CFLAGS) -c -o libescpr_la-epson-escpr-mem.lo `test -f 'epson-escpr-mem.c' || echo '$(srcdir)/'`epson-escpr-mem.c
+libescpr_la-epson-escpr-pm.lo: epson-escpr-pm.c
+@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libescpr_la_CFLAGS) $(CFLAGS) -MT libescpr_la-epson-escpr-pm.lo -MD -MP -MF $(DEPDIR)/libescpr_la-epson-escpr-pm.Tpo -c -o libescpr_la-epson-escpr-pm.lo `test -f 'epson-escpr-pm.c' || echo '$(srcdir)/'`epson-escpr-pm.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libescpr_la-epson-escpr-pm.Tpo $(DEPDIR)/libescpr_la-epson-escpr-pm.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epson-escpr-pm.c' object='libescpr_la-epson-escpr-pm.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libescpr_la_CFLAGS) $(CFLAGS) -c -o libescpr_la-epson-escpr-pm.lo `test -f 'epson-escpr-pm.c' || echo '$(srcdir)/'`epson-escpr-pm.c
+
libescpr_la-epson-escpr-services.lo: epson-escpr-services.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libescpr_la_CFLAGS) $(CFLAGS) -MT libescpr_la-epson-escpr-services.lo -MD -MP -MF $(DEPDIR)/libescpr_la-epson-escpr-services.Tpo -c -o libescpr_la-epson-escpr-services.lo `test -f 'epson-escpr-services.c' || echo '$(srcdir)/'`epson-escpr-services.c
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libescpr_la-epson-escpr-services.Tpo $(DEPDIR)/libescpr_la-epson-escpr-services.Plo
@@ -590,10 +605,15 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
- `test -z '$(STRIP)' || \
- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
mostlyclean-generic:
clean-generic:
diff --git a/lib/epson-cbt.c b/lib/epson-cbt.c
index e65bd5c..e65bd5c 100755..100644
--- a/lib/epson-cbt.c
+++ b/lib/epson-cbt.c
diff --git a/lib/epson-cbt.h b/lib/epson-cbt.h
index 936ae02..936ae02 100755..100644
--- a/lib/epson-cbt.h
+++ b/lib/epson-cbt.h
diff --git a/lib/epson-escpage-color.c b/lib/epson-escpage-color.c
index c162739..af92d64 100755..100644
--- a/lib/epson-escpage-color.c
+++ b/lib/epson-escpage-color.c
@@ -980,7 +980,7 @@ static EPS_ERR_CODE BandEmit(
strcpy(p, "\x1D""0X");
p += strlen(p);
- EPS_DBGPRINT(("Emit Y pos = %d \r\n", emitRowCount));
+ /*EPS_DBGPRINT(("Emit Y pos = %d \r\n", emitRowCount));*/
sprintf(p, "\x1D%dY", emitRowCount);
p += strlen(p);
diff --git a/lib/epson-escpage-color.h b/lib/epson-escpage-color.h
index 50e5246..50e5246 100755..100644
--- a/lib/epson-escpage-color.h
+++ b/lib/epson-escpage-color.h
diff --git a/lib/epson-escpage-comp.c b/lib/epson-escpage-comp.c
index cb458ee..03bb21c 100755..100644
--- a/lib/epson-escpage-comp.c
+++ b/lib/epson-escpage-comp.c
@@ -91,10 +91,11 @@ extern EPS_CMN_FUNC epsCmnFnc;
/*******************************************|********************************************/
static const EPS_UINT16 HufmanDefTable2[]
= {0, 0, 1, 2, 2, 4, 4, 7, 9, 14, 17, 24, 172} ;
-static const EPS_UINT16 HufmanDefTable3[][2]
+/*static const EPS_UINT16 HufmanDefTable3[][2]
= { 0x00, 2, 0x02, 2, 0x01, 2, 0x03, 4, 0x0b, 4,
0x07, 5, 0x17, 5, 0x0f, 5, 0x1f, 5,
} ;
+*/
/*-------------------------- Private Functions Declaration --------------------------*/
/*******************************************|********************************************/
diff --git a/lib/epson-escpage-comp.h b/lib/epson-escpage-comp.h
index 9036210..9036210 100755..100644
--- a/lib/epson-escpage-comp.h
+++ b/lib/epson-escpage-comp.h
diff --git a/lib/epson-escpage-mono.c b/lib/epson-escpage-mono.c
index beb9246..f0698a4 100755..100644
--- a/lib/epson-escpage-mono.c
+++ b/lib/epson-escpage-mono.c
@@ -885,7 +885,7 @@ static EPS_ERR_CODE BandInit(
EPS_LOG_FUNCIN;
- memset(pBand, 0, sizeof(pBand));
+ memset(pBand, 0, sizeof(EPS_PAGE_BAND_M));
pBand->WidthInPixels = widthInPixels;
pBand->WidthInBytes = (pBand->WidthInPixels+7)/8;
@@ -991,7 +991,7 @@ static EPS_ERR_CODE BandEmit(
cmdBuf.len = 0; /* reset */
p = (EPS_INT8*)cmdBuf.p;
- EPS_DBGPRINT(("Y = %d \r\n", iRow));
+ /*EPS_DBGPRINT(("Y = %d \r\n", iRow));*/
sprintf(p, "\x1D%dY", iRow);
p += strlen(p);
diff --git a/lib/epson-escpage-mono.h b/lib/epson-escpage-mono.h
index 50c7d20..50c7d20 100755..100644
--- a/lib/epson-escpage-mono.h
+++ b/lib/epson-escpage-mono.h
diff --git a/lib/epson-escpage.c b/lib/epson-escpage.c
index 1635192..d95e539 100755..100644
--- a/lib/epson-escpage.c
+++ b/lib/epson-escpage.c
@@ -23,6 +23,9 @@
#ifdef GCOMSW_CMD_ESCPAGE_S
#include "epson-escpage-s.h"
#endif
+#ifdef GCOMSW_CMD_PCL
+#include "epson-pcl.h"
+#endif
#include "epson-escpage.h"
/*----------------------------- Local Macro Definitions -------------------------------*/
@@ -37,7 +40,7 @@
/*******************************************|********************************************/
const static EPS_UINT8 sbEJL_ESC_SOH[] = "\x1B\x01"; /* Escape and start of heading <ESC><SOH> */
const static EPS_UINT8 sbEJL[] = "@EJL"; /* EJL command */
-const static EPS_UINT8 sbEJL_SP[] = "\x20"; /* Space <SP> */
+/*const static EPS_UINT8 sbEJL_SP[] = "\x20"; Space <SP> */
const static EPS_UINT8 sbEJL_LF[] = "\x0A"; /* Line Feed <LF> */
const static EPS_UINT8 sbEJL_EN[] = "@EJL""\x20""EN""\x20""LA=ESC/PAGE"; /* EJL ENTER command */
const static EPS_UINT8 sbEJL_EN_C[] = "@EJL""\x20""EN""\x20""LA=ESC/PAGE-COLOR";/* EJL ENTER command */
@@ -68,6 +71,7 @@ const EPS_PAGE_MEDIA_NAME pageMediaType[] = {
/* Paper Source */
const EPS_PAGE_MEDIA_NAME pagePaperSource[] = {
+ { EPS_MPID_NOT_SPEC, "AU" },
{ EPS_MPID_AUTO, "AU" },
{ EPS_MPID_MPTRAY, "MP" },
{ EPS_MPID_FRONT1, "LC1" },
@@ -134,6 +138,12 @@ EPS_ERR_CODE pageInitJob(
const EPS_PAGE_MEDIASIZE *mediaSizeEnt = NULL;
EPS_LOG_FUNCIN
+#ifdef GCOMSW_CMD_PCL
+ if(printJob.printer &&
+ (EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language) ){
+ EPS_RETURN( PCL_InitJob(jobAttr) );
+ }
+#endif
/*** Validate input parameters */
/*** Structure version */
@@ -295,6 +305,12 @@ EPS_ERR_CODE pageAllocBuffer(void)
ret = pageS_AllocBuffer();
} else
#endif
+#ifdef GCOMSW_CMD_PCL
+ if(printJob.printer &&
+ (EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language) ){
+ ret = PCL_AllocBuffer();
+ } else
+#endif
if( EPS_CM_COLOR == printJob.attr.colorMode ){
/** ESC/Page-Color **/
ret = pageAllocBuffer_C();
@@ -332,6 +348,12 @@ void pageRelaseBuffer(void)
pageS_RelaseBuffer();
} else
#endif
+#ifdef GCOMSW_CMD_PCL
+ if(printJob.printer &&
+ (EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language)){
+ PCL_RelaseBuffer();
+ } else
+#endif
if( EPS_CM_COLOR == printJob.attr.colorMode ){
/** ESC/Page-Color **/
pageRelaseBuffer_C();
@@ -375,6 +397,13 @@ EPS_ERR_CODE pageStartJob(void)
ret = pageS_StartJob();
} else
#endif
+#ifdef GCOMSW_CMD_PCL
+ if(printJob.printer &&
+ (EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language) ){
+ ret = PCL_StartJob(&printJob.attr);
+ } else
+#endif
+
if( EPS_CM_COLOR == printJob.attr.colorMode ){
/** ESC/Page-Color **/
ret = pageStartJob_C();
@@ -418,6 +447,12 @@ EPS_ERR_CODE pageEndJob()
ret = pageS_EndJob();
} else
#endif
+#ifdef GCOMSW_CMD_PCL
+ if(printJob.printer &&
+ (EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language) ){
+ ret = PCL_EndJob();
+ } else
+#endif
if( EPS_CM_COLOR == printJob.attr.colorMode ){
/** ESC/Page-Color **/
ret = pageEndJob_C();
@@ -461,6 +496,12 @@ EPS_ERR_CODE pageStartPage()
ret = pageS_StartPage();
} else
#endif
+#ifdef GCOMSW_CMD_PCL
+ if(printJob.printer &&
+ (EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language) ){
+ ret = PCL_StartPage();
+ } else
+#endif
if( EPS_CM_COLOR == printJob.attr.colorMode ){
/** ESC/Page-Color **/
ret = pageStartPage_C();
@@ -504,6 +545,12 @@ EPS_ERR_CODE pageEndPage()
ret = pageS_EndPage();
} else
#endif
+#ifdef GCOMSW_CMD_PCL
+ if(printJob.printer &&
+ (EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language) ){
+ ret = PCL_EndPage();
+ } else
+#endif
if( EPS_CM_COLOR == printJob.attr.colorMode ){
/** ESC/Page-Color **/
ret = pageEndPage_C();
@@ -548,6 +595,12 @@ EPS_ERR_CODE pageColorRow(
ret = pageS_ColorRow(pInBmp, pBandRec);
} else
#endif
+#ifdef GCOMSW_CMD_PCL
+ if(printJob.printer &&
+ (EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language) ){
+ ret = PCL_Row(pInBmp, pBandRec);
+ } else
+#endif
if( EPS_CM_COLOR == printJob.attr.colorMode ){
/** ESC/Page-Color **/
ret = pageColorRow_C(pInBmp, pBandRec);
@@ -594,6 +647,12 @@ EPS_ERR_CODE pageSendLeftovers(
ret = pageS_SendLeftovers();
} else
#endif
+#ifdef GCOMSW_CMD_PCL
+ if(printJob.printer &&
+ (EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language) ){
+ ret = PCLSendLeftovers();
+ } else
+#endif
if( EPS_CM_COLOR == printJob.attr.colorMode ){
/** ESC/Page-Color **/
ret = pageSendLeftovers_C();
@@ -646,7 +705,7 @@ EPS_ERR_CODE pageCreateMediaInfo (
for(j = 0; j < num_mType; j++){
n = i * num_mType + j;
typeList[n].mediaTypeID = pageMediaType[j].id;
- typeList[n].paperSource = paperSource;
+ typeList[n].paperSource = (1 >= memGetBitCount(paperSource))?EPS_MPID_AUTO:(paperSource | EPS_MPID_AUTO);
typeList[n].layout = EPS_MLID_BORDERS;
#if EPS_PAGE_LOWRES_MODE
typeList[n].quality = EPS_MQID_DRAFT | EPS_MQID_NORMAL;
@@ -675,8 +734,9 @@ EPS_ERR_CODE pageCreateMediaInfo (
printer->supportedMedia.resolution = EPS_IR_150X150 | EPS_IR_300X300 | EPS_IR_600X600;
#endif
-#if GCOMSW_CMD_ESCPAGE_S
- if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
+#if defined(GCOMSW_CMD_ESCPAGE_S) || defined (GCOMSW_CMD_PCL)
+ if(printJob.printer &&
+ (EPS_LANG_ESCPAGE_S == printJob.printer->language || EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language)){
pageS_UpdateSupportedMedia( &printer->supportedMedia );
}
#endif
@@ -714,6 +774,14 @@ EPS_ERR_CODE pageGetPrintableArea (
EPS_LOG_FUNCIN
+#ifdef GCOMSW_CMD_PCL
+ if(printJob.printer &&
+ (EPS_LANG_PCL == printJob.printer->language || EPS_LANG_PCL_COLOR == printJob.printer->language) ){
+ ret = PCL_GetPrintableArea(jobAttr, printableWidth, printableHeight);
+ EPS_RETURN( ret );
+ }
+#endif
+
/*** Validate/Confirm Page Attribute Data */
/*** Media Size */
for(sizeIdx = 0; sizeIdx < num_mSize; sizeIdx++){
@@ -739,11 +807,6 @@ EPS_ERR_CODE pageGetPrintableArea (
*printableWidth = pageMediaSize[sizeIdx].print_area_x_border;
*printableHeight = pageMediaSize[sizeIdx].print_area_y_border;
-#ifdef GCOMSW_CMD_ESCPAGE_S
- if(printJob.printer && EPS_LANG_ESCPAGE_S == printJob.printer->language){
- pageS_FeedExchange(jobAttr, printableWidth, printableHeight);
- }
-#endif
if(EPS_IR_300X300 == jobAttr->inputResolution){
*printableWidth /= 2;
@@ -758,6 +821,151 @@ EPS_ERR_CODE pageGetPrintableArea (
}
+/*******************************************|********************************************/
+/* */
+/* Function name: pageCreatePrintAreaInfoFromTable() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* resolution EPS_UINT32 I : input resolution */
+/* printAreaInfo EPS_PRINT_AREA_INFO O : print area information structure */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_INV_MEDIA_SIZE - Invalid Media Size */
+/* EPS_ERR_INV_BORDER_MODE - Invalid Border Mode */
+/* EPS_ERR_INV_INPUT_RESOLUTION - Invalid Input Resolution */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE pageGetPrintAreaInfoFromTable(
+
+ const EPS_JOB_ATTRIB* jobAttr,
+ EPS_UINT32* paperWidth,
+ EPS_UINT32* paperHeight,
+ EPS_LAYOUT_INFO* layoutInfo
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 num_mSize = dim(pageMediaSize);
+ EPS_INT32 sizeIdx = 0;
+ EPS_INT32 factor = 1; /* Scaling factor for dpi */
+
+ EPS_LOG_FUNCIN
+
+/*** Validate/Confirm Page Attribute Data */
+ /*** Media Size */
+ for(sizeIdx = 0; sizeIdx < num_mSize; sizeIdx++){
+ if(pageMediaSize[sizeIdx].id == jobAttr->mediaSizeIdx){
+ break;
+ }
+ }
+ if(sizeIdx >= num_mSize){
+ EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE )
+ }
+
+ /*** Border Mode */
+ if( jobAttr->printLayout != EPS_MLID_BORDERS ){
+ EPS_RETURN( EPS_ERR_INV_BORDER_MODE )
+ }
+
+ /*** Input Image Resolution */
+ if (! ( (jobAttr->inputResolution == EPS_IR_150X150 ) ||
+ (jobAttr->inputResolution == EPS_IR_300X300 ) ||
+ (jobAttr->inputResolution == EPS_IR_600X600 ) ) ){
+ EPS_RETURN( EPS_ERR_INV_INPUT_RESOLUTION )
+ }
+
+ switch(jobAttr->inputResolution){
+ case EPS_IR_150X150:
+ factor = 4;
+ break;
+ case EPS_IR_300X300:
+ factor = 2;
+ break;
+ case EPS_IR_600X600:
+ break;
+ default:
+ EPS_RETURN( EPS_ERR_INV_INPUT_RESOLUTION )
+ }
+
+ *paperWidth = pageMediaSize[sizeIdx].paper_x / factor;
+ *paperHeight = pageMediaSize[sizeIdx].paper_y / factor;
+
+ layoutInfo->layout = EPS_MLID_BORDERS;
+ layoutInfo->margin.top =
+ layoutInfo->margin.bottom = (pageMediaSize[sizeIdx].paper_y - pageMediaSize[sizeIdx].print_area_y_border) / 2 / factor;
+ layoutInfo->margin.left =
+ layoutInfo->margin.right = (pageMediaSize[sizeIdx].paper_x - pageMediaSize[sizeIdx].print_area_x_border) / 2 / factor;
+ if(EPS_IR_150X150 == jobAttr->inputResolution){
+ layoutInfo->margin.left =
+ layoutInfo->margin.right += 1;
+ }
+ EPS_RETURN( ret )
+}
+
+
+EPS_ERR_CODE pageCreatePrintAreaInfoFromTable(
+
+ EPS_UINT32 resolution,
+ EPS_PRINT_AREA_INFO* printAreaInfo
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 sizeNum, i;
+ EPS_LAYOUTSIZE_INFO *pSize;
+ const EPS_PAGE_MEDIASIZE* pMI = pageMediaSize;
+ EPS_INT32 factor = 1; /* Scaling factor for dpi */
+
+ EPS_LOG_FUNCIN;
+
+ switch(resolution){
+ case EPS_IR_150X150:
+ factor = 4;
+ break;
+ case EPS_IR_300X300:
+ factor = 2;
+ break;
+ case EPS_IR_600X600:
+ break;
+ default:
+ EPS_RETURN( EPS_ERR_INV_INPUT_RESOLUTION )
+ }
+
+ sizeNum = dim(pageMediaSize);
+ pSize = (EPS_LAYOUTSIZE_INFO*)EPS_ALLOC(sizeof(EPS_LAYOUTSIZE_INFO) * sizeNum);
+ if( pSize == NULL ){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ memset(pSize, 0, sizeof(EPS_LAYOUTSIZE_INFO) * sizeNum);
+ printAreaInfo->sizeList = pSize;
+ printAreaInfo->numSizes = sizeNum;
+
+ for(i = 0; i < sizeNum; i++){
+ pSize->mediaSizeID = pMI->id;
+ pSize->numLayouts = 1;
+ pSize->layoutList = (EPS_LAYOUT_INFO*)EPS_ALLOC(sizeof(EPS_LAYOUT_INFO));
+
+ pSize->paperWidth = pMI->paper_x / factor;
+ pSize->paperHeight = pMI->paper_y / factor;
+
+ pSize->layoutList[0].layout = EPS_MLID_BORDERS;
+ pSize->layoutList[0].margin.top =
+ pSize->layoutList[0].margin.bottom = (pMI->paper_y - pMI->print_area_y_border) / 2 / factor;
+ pSize->layoutList[0].margin.left =
+ pSize->layoutList[0].margin.right = (pMI->paper_x - pMI->print_area_x_border) / 2 / factor;
+
+ pSize++;
+ pMI++;
+ }
+
+ EPS_RETURN( ret );
+}
+
+
EPS_ERR_CODE ejlStart (
EPS_COMMAND_BUFFER *pCmdBuff,
diff --git a/lib/epson-escpage.h b/lib/epson-escpage.h
index 4711c50..2d11416 100755..100644
--- a/lib/epson-escpage.h
+++ b/lib/epson-escpage.h
@@ -92,6 +92,9 @@ extern EPS_ERR_CODE pageSendLeftovers (void);
extern EPS_ERR_CODE pageCreateMediaInfo (EPS_PRINTER_INN* printer, EPS_UINT8* pmString,
EPS_INT32 pmSize );
extern void pageClearSupportedMedia (EPS_PRINTER_INN* printer );
+extern EPS_ERR_CODE pageGetPrintAreaInfoFromTable(const EPS_JOB_ATTRIB*,
+ EPS_UINT32*, EPS_UINT32*, EPS_LAYOUT_INFO*);
+extern EPS_ERR_CODE pageCreatePrintAreaInfoFromTable (EPS_UINT32,EPS_PRINT_AREA_INFO* );
/*** Get Printable Area */
/*** -------------------------------------------------------------------------------*/
diff --git a/lib/epson-escpr-api.c b/lib/epson-escpr-api.c
index fb86525..863b17a 100755..100644
--- a/lib/epson-escpr-api.c
+++ b/lib/epson-escpr-api.c
@@ -39,6 +39,8 @@
/* API-0017 EPS_ERR_CODE epsGetPrintableArea (pageAttrib, */
/* printableWidth, */
/* printableHeight); */
+/* API-0018 EPS_ERR_CODE epsGetUsersizeRange (resolution, minWidth, maxWidth, */
+/* minHeight, maxHeight); */
/* */
/*******************************************|********************************************/
@@ -51,20 +53,19 @@
/* 1: Make 4KB packet */
#define LCOMSW_CANCEL_JOB 0
-#define LCOMSW_USE_720DPI 0 /* Not support 720dpi */
-
#define ESCPR_DEBUG_IMAGE_LOG 0 /* 0: OFF 1: ON */
#define LCOMSW_DUMMY_SEND 0 /* 1: Enable 0byte data sending */
/*#define LCOMSW_JOBPARAM_CEHCK_OFF*/
-/* #define LCOMSW_CMDDMP */
+/*#define LCOMSW_CMDDMP */
/*------------------------------------ Includes -------------------------------------*/
/*******************************************|********************************************/
#include "epson-escpr-pvt.h"
#include "epson-escpr-services.h"
+#include "epson-escpr-pm.h"
#include "epson-escpr-mem.h"
#include "epson-protocol.h"
#include "epson-layout.h"
@@ -90,22 +91,10 @@ EPS_CMN_FUNC epsCmnFnc;
/*** Print Job Structure */
/*** -------------------------------------------------------------------------------*/
EPS_PRINT_JOB printJob;
-EPS_INT32 tonerSave;
-EPS_INT32 back_type;
-
-EPS_INT32 lWidth;
-EPS_INT32 lHeight;
-
-EPS_INT32 areaWidth;
-EPS_INT32 areaHeight;
/*------------------------- Module "Local Global" Variables --------------------------*/
/*******************************************|********************************************/
- /*** internal stock */
- /*** -------------------------------------------------------------------------------*/
-static EPS_SUPPORTED_MEDIA g_supportedMedia; /* Supported Media */
-
/*** Job function */
/*** -------------------------------------------------------------------------------*/
EPS_JOB_FUNCS jobFnc;
@@ -120,7 +109,7 @@ EPS_JOB_FUNCS jobFnc;
/*** Roop Count */
/*** -------------------------------------------------------------------------------*/
-#define EPS_ROOP_NUM 40 /* Send the data for "EPS_ROOP_NUM" */
+#define EPS_ROOP_NUM 100 /* Send the data for "EPS_ROOP_NUM" */
/* times and get printer status */
#define EPS_TIMEOUT_NUM 20 /* retry Send the data "EPS_TIMEOUT_NUM"*/
@@ -226,6 +215,8 @@ static const EPS_UINT8 RemoteNC[] = {
'N', 'C', 0x02, 0x00, 0x00, 0x00 };
static const EPS_UINT8 RemoteVI[] = {
'V', 'I', 0x02, 0x00, 0x00, 0x00 };
+static const EPS_UINT8 RemoteEX33[] = {
+ 'E', 'X', 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xFF, 0x01, 0x00};
static const EPS_UINT8 DataCR[] = {0x0D };
static const EPS_UINT8 DataLF[] = {0x0A };
@@ -239,14 +230,38 @@ static const EPS_UINT8 PrintQualityCmd[] = {
's', 'e', 't', 'q',
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
- /*** ESC/P-R Commands (APF setting) */
+ /*** ESC/P-R Commands (Print Num) */
+ /*** -------------------------------------------------------------------------------*/
+static const EPS_UINT8 PrintNumCmd[] = {
+ 0x1B, 'n', 0x02, 0x00, 0x00, 0x00,
+ 's', 'e', 't', 'n',
+ 0x00, 0x00};
+
+ /*** ESC/P-R Commands (custom setting) */
+ /*** -------------------------------------------------------------------------------*/
+static const EPS_UINT8 CustomCmd[] = {
+ 0x1B, 'm', 0x01, 0x00, 0x00, 0x00,
+ 's', 'e', 't', 'c',
+ 0x00 };
+static const EPS_UINT8 Chkcmd[] = {
+ 0x1B, 'u', 0x02, 0x00, 0x00, 0x00,
+ 'c', 'h', 'k', 'u',
+ 0x01, 0x01};
+
+ /*** ESC/P-R Commands (Copy num) */
+ /*** -------------------------------------------------------------------------------*/
+static const EPS_UINT8 CopyCmd[] = {
+ 0x1B, 'c', 0x01, 0x00, 0x00, 0x00,
+ 's', 'e', 't', 'c',
+ 0x00};
+ /*** ESC/P-R Commands (APF setting) */
/*** -------------------------------------------------------------------------------*/
static const EPS_UINT8 APFSettingCmd[] = {
0x1B, 'a', 0x04, 0x00, 0x00, 0x00,
's', 'e', 't', 'a',
0x00, 0x00, 0x00, 0x00};
- /*** ESC/P-R Commands (Print Job) */
+ /*** ESC/P-R Commands (Print Job) */
/*** -------------------------------------------------------------------------------*/
static const EPS_UINT8 JobCmd[] = {
0x1B, 'j', 0x16, 0x00, 0x00, 0x00,
@@ -254,7 +269,7 @@ static const EPS_UINT8 JobCmd[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-static const EPS_UINT8 JobCmdJpg[] = {
+static const EPS_UINT8 SizeCmd[] = {
0x1B, 'j', 0x05, 0x00, 0x00, 0x00,
's', 'e', 't', 's',
0x00, 0x00, 0x00, 0x00, 0x00 };
@@ -307,7 +322,7 @@ EPS_INT32 libStatus; /* Library (epsInitDriver) status
/*** Status counter */
/*** -------------------------------------------------------------------------------*/
-static EPS_INT32 gStatusCount; /* Variable for register the number of getting */
+EPS_INT32 gStatusCount; /* Variable for register the number of getting */
/* printer status */
/*** Buffer for Print Band */
@@ -337,16 +352,18 @@ static EPS_UINT16 RunLengthEncode (const EPS_UINT8*, EPS_UINT8*, EPS_U
static void MakeRemoteTICmd (EPS_UINT8* );
static void MakeQualityCmd (EPS_UINT8* );
+static void MakePageNumCmd (EPS_UINT8* );
static void MakeAPFCmd (EPS_UINT8* );
static void MakeJobCmd (EPS_UINT8* );
+static void MakeSizeCmd (EPS_UINT8* );
static EPS_ERR_CODE AddCmdBuff (EPS_UINT8 **, EPS_UINT8 **, EPS_UINT32 *,
const EPS_UINT8 *, EPS_UINT32 );
-static EPS_ERR_CODE CreateMediaInfo (EPS_PRINTER_INN*, EPS_UINT8*, EPS_INT32 );
+static EPS_ERR_CODE GetSupportedMedia (EPS_PRINTER_INN* );
static EPS_ERR_CODE DuplSupportedMedia (EPS_PRINTER_INN*, EPS_SUPPORTED_MEDIA* );
static EPS_ERR_CODE GetPaperSource (EPS_PRINTER_INN* );
-static EPS_ERR_CODE GetJpgMax (EPS_PRINTER_INN* );
-static void ClearSupportedMedia (void );
+static EPS_ERR_CODE CalcPrintableArea (EPS_JOB_ATTRIB*, EPS_PM_DATA*, EPS_PRINT_JOB*,
+ EPS_UINT32*, EPS_UINT32*);
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
@@ -482,11 +499,6 @@ struct timeb sleepS, sleepE;
printJob.contData.sendData = NULL;
printJob.contData.sendDataSize = 0;
- /* DEL printJob.additional = EPS_ADDDATA_NONE;
- printJob.qrcode.bits = NULL;
- printJob.qrcode.cellNum = 0;
- printJob.qrcode.dpc = 0; */
-
obsClear();
/*** Set "Endian-ness" for the current cpu */
@@ -536,17 +548,11 @@ EPS_ERR_CODE epsReleaseDriver (
epsEndJob();
-/*** Clear inside supported media list */
- ClearSupportedMedia();
-
/*** Clear inside printer list */
prtClearPrinterList();
printJob.printer = NULL;
obsClear();
-/*** Clear inside additional data buffer */
- /* DEL EPS_SAFE_RELEASE( printJob.qrcode.bits ) */
-
/*** Change ESC/P-R Lib Status */
libStatus = EPS_STATUS_NOT_INITIALIZED;
@@ -831,6 +837,8 @@ EPS_LOG_FUNCIN;
/* EPS_ERR_INV_RIGHT_MARGIN - Invalid Right Margin */
/* EPS_ERR_MARGIN_OVER_PRINTABLE_WIDTH - Invalid Magin Setting (Width) */
/* EPS_ERR_MARGIN_OVER_PRINTABLE_HEIGHT - Invalid Magin Setting (Height) */
+/* EPS_ERR_INV_CD_INDIM - Invalid CD Outside Diameter */
+/* EPS_ERR_INV_CD_OUTDIM - Invalid CD Outside Diameter */
/* EPS_ERR_INV_PAPER_SOURCE - Invalid Paper source */
/* EPS_ERR_INV_DUPLEX - Invalid duplex */
/* EPS_ERR_INV_FEED_DIRECTION - Invalid feed direction */
@@ -849,7 +857,6 @@ EPS_LOG_FUNCIN;
/* EPS_ERR_MEMORY_ALLOCATION - Fail to memory allocation */
/* (Bi-Directional Only) */
/* EPS_ERR_PRINTER_ERR_OCCUR - Printer Error happened */
-
/* */
/* Description: */
/* Creates a new print job. */
@@ -877,6 +884,10 @@ EPS_LOG_FUNCIN;
EPS_RETURN( EPS_ERR_JOB_NOT_CLOSED );
}
+ if (jobAttr == NULL){
+ EPS_RETURN( EPS_ERR_INV_ARG_JOB_ATTRIB )
+ }
+
/*** Has a target printer specified */
if(NULL == printJob.printer){
EPS_RETURN( EPS_ERR_PRINTER_NOT_SET );
@@ -889,32 +900,6 @@ EPS_LOG_FUNCIN;
}
/*======================================================================================*/
-/*** Setup Page Attribute */
-/*======================================================================================*/
- if (jobAttr == NULL){
- EPS_RETURN( EPS_ERR_INV_ARG_JOB_ATTRIB )
- }
-
- if(EPS_LANG_ESCPR == printJob.printer->language ){
- /*** ESC/P-R ***/
- retStatus = SetupJobAttrib(jobAttr);
- } else{
- /*** ESC/Page ***/
-#ifdef GCOMSW_CMD_ESCPAGE
- retStatus = pageInitJob(jobAttr);
-#else
- retStatus = EPS_ERR_LANGUAGE_NOT_SUPPORTED;
-#endif
- }
- if (EPS_ERR_NONE != retStatus){
- EPS_RETURN( retStatus );
- }
-
-/*** Change Job Status */
- printJob.jobStatus = EPS_STATUS_INITIALIZED;
- obsSetColorPlane( printJob.attr.colorPlane );
-
-/*======================================================================================*/
/*** Check the printer status. (before session open) */
/*======================================================================================*/
memset(&stInfo, 0, sizeof(stInfo));
@@ -945,6 +930,35 @@ EPS_LOG_FUNCIN;
}
/*======================================================================================*/
+/*** Setup Page Attribute */
+/*======================================================================================*/
+ if(EPS_LANG_ESCPR == printJob.printer->language ){
+ /*** ESC/P-R ***/
+ if( (printJob.printer->pmData.version <= 0)
+ && EPS_IS_BI_PROTOCOL(printJob.printer->protocol) ){
+ /* get supported media */
+ retStatus = GetSupportedMedia(printJob.printer);
+ }
+ if (EPS_ERR_NONE == retStatus){
+ retStatus = SetupJobAttrib(jobAttr);
+ }
+ } else{
+ /*** ESC/Page ***/
+#ifdef GCOMSW_CMD_ESCPAGE
+ retStatus = pageInitJob(jobAttr);
+#else
+ retStatus = EPS_ERR_LANGUAGE_NOT_SUPPORTED;
+#endif
+ }
+ if (EPS_ERR_NONE != retStatus){
+ EPS_RETURN( retStatus );
+ }
+
+/*** Change Job Status */
+ printJob.jobStatus = EPS_STATUS_INITIALIZED;
+ obsSetColorPlane( printJob.attr.colorPlane );
+
+/*======================================================================================*/
/*** Prepar RGB buffer */
/*======================================================================================*/
if(EPS_LANG_ESCPR == printJob.printer->language ){
@@ -974,15 +988,6 @@ EPS_LOG_FUNCIN;
EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
}
memset(tmpLineBuf, 0xFF, (EPS_UINT32)tmpLineBufSize);
-
- } else if(EPS_CP_JPEG == printJob.attr.colorPlane){
- if(0 == printJob.printer->JpgMax){
- /*** get jpeg limit */
- retStatus = GetJpgMax(printJob.printer);
- if (retStatus != EPS_ERR_NONE) {
- goto epsStartJob_END;
- }
- }
}
} else{
#ifdef GCOMSW_CMD_ESCPAGE
@@ -1384,7 +1389,11 @@ EPS_ERR_CODE retStatus = EPS_ERR_NONE;
/*******************************************|********************************************/
EPS_ERR_CODE epsEndPage (
+#if GCOMSW_UPDATE_PAGE_REMAINDER
+ EPS_INT32 nextPage
+#else
EPS_BOOL nextPage
+#endif
){
/*** Declare Variable Local to Routine */
@@ -1461,6 +1470,23 @@ EPS_LOG_FUNCIN;
pCmd = sendDataBuf;
memcpy(pCmd, EndPage, sizeof(EndPage));
+#if GCOMSW_UPDATE_PAGE_REMAINDER
+ if( 0 >= nextPage ){
+ if (EPS_DUPLEX_NONE != printJob.attr.duplex &&
+ 0 == (printJob.pageCount & 0x01)) {
+ nextPage = 1;
+ }
+ }
+ if(0 >= nextPage
+ || EPS_IS_CDDVD( printJob.attr.mediaTypeIdx )){
+ pCmd[10] = EPS_END_PAGE;
+ } else{
+ if(printJob.attr.pageNum <= nextPage){
+ printJob.attr.pageNum = nextPage+1;
+ }
+ pCmd[10] = (--printJob.attr.pageNum & 0xFF);
+ }
+#else
if( FALSE == nextPage ){
if (EPS_DUPLEX_NONE != printJob.attr.duplex &&
0 == (printJob.pageCount & 0x01)) {
@@ -1471,8 +1497,12 @@ EPS_LOG_FUNCIN;
|| EPS_IS_CDDVD( printJob.attr.mediaTypeIdx )){
pCmd[10] = EPS_END_PAGE;
} else{
- pCmd[10] = EPS_NEXT_PAGE;
+ if(printJob.attr.pageNum <= 1){
+ printJob.attr.pageNum = 2;
+ }
+ pCmd[10] = (--printJob.attr.pageNum & 0xFF);
}
+#endif
retStatus = SendCommand(sendDataBuf, sizeof(EndPage), &retBufSize, TRUE);
}
@@ -1486,7 +1516,6 @@ EPS_LOG_FUNCIN;
}
}
-
epsEndPage_END:
/*** Return to Caller */
if(EPS_ERR_NONE == retStatus){
@@ -1634,7 +1663,7 @@ EPS_LOG_FUNCIN;
break;
}
- EPS_DBGPRINT(("retry ENDJOB\n"))
+ /*EPS_DBGPRINT(("retry ENDJOB\n"))*/
retStatus = SendLeftovers();
if(EPS_ERR_INVALID_CALL == retStatus){
retStatus = EPS_ERR_NONE;
@@ -1648,7 +1677,9 @@ EPS_LOG_FUNCIN;
JOBEND_END:
/*** Clear Memory */
#ifdef GCOMSW_CMD_ESCPAGE
- pageRelaseBuffer();
+ if(printJob.printer && EPS_LANG_ESCPR != printJob.printer->language){
+ pageRelaseBuffer();
+ }
#endif
EPS_SAFE_RELEASE(sendDataBuf );
EPS_SAFE_RELEASE(tmpLineBuf );
@@ -1659,9 +1690,6 @@ JOBEND_END:
printJob.contData.sendData = NULL;
printJob.contData.sendDataSize = 0;
-/*** Clear inside additional data buffer */
- /* DEL EPS_SAFE_RELEASE( printJob.qrcode.bits );*/
-
/*** Clear and Copy Print_Job struct */
memcpy(&tempPrintJob, &printJob, sizeof(EPS_PRINT_JOB));
memset(&printJob, 0, sizeof(EPS_PRINT_JOB));
@@ -1687,7 +1715,7 @@ JOBEND_END:
}
#else
if (EPS_ERR_NONE != retStatus) {
- EPS_DBGPRINT(("epsEndJob failed (%d)\r\n", retStatus));
+ /*EPS_DBGPRINT(("epsEndJob failed (%d)\r\n", retStatus));*/
retStatus = EPS_ERR_NONE;
}
#endif
@@ -1744,11 +1772,13 @@ EPS_LOG_FUNCIN;
if (printJob.jobStatus == EPS_STATUS_ESTABLISHED) {
/*** Send the reset command to printer */
- retStatus = PRT_INVOKE_JOBFNC(jobFnc.ResetPrinter, ());
+ if(TRUE == printJob.bComm){
+ retStatus = PRT_INVOKE_JOBFNC(jobFnc.ResetPrinter, ());
+ }
printJob.resetSent = EPS_RESET_SENT;
printJob.resetReq = FALSE;
if(EPS_ERR_NONE != retStatus){
- EPS_DBGPRINT(("ResetPrinter() failed (%d)\r\n", retStatus));
+ /*EPS_DBGPRINT(("ResetPrinter() failed (%d)\r\n", retStatus));*/
retStatus = EPS_ERR_CAN_NOT_RESET;
/* return retStatus; Force continue */
}
@@ -1763,7 +1793,7 @@ EPS_LOG_FUNCIN;
/*** Invoke epsEndJob() */
retTmp = epsEndJob();
if (retTmp != EPS_ERR_NONE) {
- EPS_DBGPRINT(("epsEndJob() failed (%d)\r\n", retTmp));
+ /*EPS_DBGPRINT(("epsEndJob() failed (%d)\r\n", retTmp));*/
/* return retStatus; Force continue */
}
#if LCOMSW_CANCEL_JOB
@@ -1858,6 +1888,10 @@ EPS_ERR_CODE epsContinueJob (
/*** Check printer starus */
retStatus = MonitorStatus(NULL);
if(EPS_ERR_NONE != retStatus){
+ if(EPS_ERR_COMM_ERROR == retStatus){
+ printJob.bComm = FALSE;
+ retStatus = EPS_ERR_PRINTER_ERR_OCCUR;
+ }
EPS_RETURN( retStatus );
}
@@ -2038,8 +2072,8 @@ EPS_ERR_CODE epsGetStatus (
ret = EPS_ERR_COMM_ERROR;
}
-// EPS_DBGPRINT((" State\t: %d\n Error\t: %d\n IoStatus\t: %d\n Canceling\t: %d\n Prepare\t: %d\n",
-// stInfo.nState, stInfo.nError, bIoStatus, bCanceling, stInfo.nPrepare))
+/* EPS_DBGPRINT((" State\t: %d\n Error\t: %d\n IoStatus\t: %d\n Canceling\t: %d\n Prepare\t: %d\n",
+ stInfo.nState, stInfo.nError, bIoStatus, bCanceling, stInfo.nPrepare)) */
if(EPS_ERR_COMM_ERROR == ret ||
EPS_ERR_NOT_OPEN_IO == ret ||
@@ -2072,11 +2106,6 @@ EPS_ERR_CODE epsGetStatus (
status->printerStatus = EPS_PRNST_ERROR;
switch(stInfo.nError){
- case EPS_PRNERR_INKOUT:
- /* Convert Ink error */
- serGetInkError(&stInfo, &status->errorCode);
- break;
-
case EPS_PRNERR_INTERFACE:
case EPS_PRNERR_BUSY:
if(EPS_STATUS_ESTABLISHED == printJob.jobStatus){
@@ -2086,7 +2115,6 @@ EPS_ERR_CODE epsGetStatus (
} else{
status->printerStatus = EPS_PRNST_BUSY;
}
-
break;
case EPS_PRNERR_PAPERJAM:
@@ -2193,6 +2221,9 @@ EPS_ERR_CODE epsGetStatus (
case EPS_PRNERR_BATTERYVOLTAGE:
case EPS_PRNERR_BATTERYTEMPERATURE:
case EPS_PRNERR_BATTERYEMPTY:
+ case EPS_PRNERR_LOW_BATTERY_FNC:
+ case EPS_PRNERR_BATTERY_TEMPERATURE_HIGH:
+ case EPS_PRNERR_BATTERY_TEMPERATURE_LOW:
case EPS_PRNERR_COMM:
status->jobContinue = FALSE;
break;
@@ -2209,6 +2240,10 @@ EPS_ERR_CODE epsGetStatus (
}
}
+ if(EPS_PRNERR_NOERROR != status->errorCode && 0x0EF0 == printJob.printer->egID){
+ status->errorCode = EPS_PRNERR_ANY;
+ }
+
/*** Return to Caller */
EPS_RETURN( ret );
}
@@ -2247,6 +2282,7 @@ EPS_ERR_CODE epsGetInkInfo (
){
/*** Declare Variable Local to Routine */
EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
+ EPS_SUPPLY_INFO supplyInfo;
EPS_LOG_FUNCIN;
@@ -2261,11 +2297,75 @@ EPS_ERR_CODE epsGetInkInfo (
}
memset(info, 0, sizeof(EPS_INK_INFO));
+ memset(&supplyInfo, 0, sizeof(EPS_SUPPLY_INFO));
-/*** protocol GetStatus */
- ret = prtGetInkInfo(printJob.printer, info);
+ ret = epsGetSupplyInfo(&supplyInfo);
+ if (EPS_ERR_NONE == ret){
+ memcpy(info, &supplyInfo.ink, sizeof(*info));
+ }
/*** Return to Caller */
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: epsGetSupplyInfo() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* status EPS_STATUS* Pointer to the printer status. */
+/* */
+/* Return value: */
+/* << Normal >> */
+/* EPS_ERR_NONE - Success */
+/* << Error >> */
+/* EPS_ERR_NEED_BIDIRECT - Need Bi-Directional Communication */
+/* EPS_ERR_PRINTER_NOT_SET - Target printer is not specified */
+/* EPS_ERR_INV_ARG_SUPPLYINFO - Invalid argument */
+/* EPS_ERR_COMM_ERROR - Communication Error */
+/* EPS_ERR_NOT_OPEN_IO - Cannot Open I/O Portal */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* EPS_ERR_MEMORY_ALLOCATION - Failed to allocate memory */
+/* */
+/* Description: */
+/* Gets the ink, power supply and paper setting Infomation. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epsGetSupplyInfo (
+
+ EPS_SUPPLY_INFO *info
+
+){
+/*** Declare Variable Local to Routine */
+ EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
+ EPS_PRINTER_INN* innerPrinter = NULL;
+ EPS_UINT8 buffer[_STATUS_REPLY_BUF];
+ EPS_UINT8* pBuf =&buffer[0];
+ EPS_INT32 bufSize = _STATUS_REPLY_BUF;
+
+ EPS_LOG_FUNCIN;
+
+/*** Has a target printer specified */
+ if(NULL == printJob.printer){
+ EPS_RETURN( EPS_ERR_PRINTER_NOT_SET );
+ }
+ innerPrinter = printJob.printer;
+
+/*** Validate input parameters */
+ if (info == NULL){
+ EPS_RETURN( EPS_ERR_INV_ARG_SUPPLYINFO );
+ }
+
+ memset(info, 0, sizeof(EPS_SUPPLY_INFO));
+
+/*** get information */
+ ret = prtGetInfo(innerPrinter, EPS_CBTCOM_ST, &pBuf, &bufSize);
+ if (EPS_ERR_NONE == ret){
+ ret = serGetSupplyInfo(pBuf, info);
+ }
EPS_RETURN( ret );
}
@@ -2295,8 +2395,7 @@ EPS_ERR_CODE epsGetInkInfo (
/* EPS_ERR_MEMORY_ALLOCATION - Failed to allocate memory */
/* */
/* Description: */
-/* Get supported media information from printer and save those data in */
-/* "g_supportedMedia" structure. */
+/* Get supported media information from printer and save those data. */
/* */
/*******************************************|********************************************/
EPS_ERR_CODE epsGetSupportedMedia (
@@ -2306,16 +2405,13 @@ EPS_ERR_CODE epsGetSupportedMedia (
){
/*** Declare Variable Local to Routine */
- EPS_ERR_CODE retStatus, retGetPM; /* Return status of internal calls */
- EPS_UINT8 pmString[EPS_PM_MAXSIZE]; /* Retrieved PM data from printer */
- EPS_INT32 pmSize = EPS_PM_MAXSIZE;
-
+ EPS_ERR_CODE retStatus; /* Return status of internal calls */
EPS_PRINTER_INN* innerPrinter = NULL;
EPS_LOG_FUNCIN;
/*** Initialize Local Variables */
- retStatus = retGetPM = EPS_ERR_NONE;
+ retStatus = EPS_ERR_NONE;
/*** Validate communication mode */
if( !EPS_IS_BI_PROTOCOL(printJob.commMode) ){
@@ -2328,10 +2424,6 @@ EPS_ERR_CODE epsGetSupportedMedia (
}
innerPrinter = printJob.printer;
- if( !EPS_IS_BI_PROTOCOL(innerPrinter->protocol) ){
- EPS_RETURN( EPS_ERR_NEED_BIDIRECT );
- }
-
/*** Validate input parameters */
if (supportedMedia == NULL){
EPS_RETURN( EPS_ERR_INV_ARG_SUPPORTED_MEDIA );
@@ -2345,40 +2437,15 @@ EPS_ERR_CODE epsGetSupportedMedia (
}
#endif
- /* Clear the prev value */
- prtClearSupportedMedia(innerPrinter);
-
- /* Clear the Printer Model Information (Media data or "PM" data) */
- memset(pmString,0,EPS_PM_MAXSIZE);
-
- /*** Get PM from Printer */
- retStatus = prtGetPMString(innerPrinter, 1, pmString, &pmSize);
-
- /*** ESC/Page divergence ***/
- if(EPS_LANG_ESCPR != innerPrinter->language ){
-#ifdef GCOMSW_CMD_ESCPAGE
- if( EPS_ERR_NONE == retStatus ) {
- /*** Create Media Infomation */
- retStatus = pageCreateMediaInfo(innerPrinter, pmString, pmSize);
- }
-#else
- retStatus = EPS_ERR_LANGUAGE_NOT_SUPPORTED;
-#endif
-
- } else {
- if ( EPS_ERR_NONE == retStatus ){
- /*** Create Media Infomation */
- retStatus = CreateMediaInfo(innerPrinter, pmString, pmSize);
- }
- }
+ retStatus = GetSupportedMedia(innerPrinter);
/*** Copy the supproted media information from "printer" structure to input buffer */
if ( EPS_ERR_NONE == retStatus ){
/* Copy to input buffer */
retStatus = DuplSupportedMedia(innerPrinter, supportedMedia);
}
-/*** Return to Caller */
- EPS_RETURN( retStatus );
+
+ EPS_RETURN( retStatus );
}
@@ -2390,12 +2457,13 @@ EPS_ERR_CODE epsGetSupportedMedia (
/* --------- */
/* Name: Type: Description: */
/* jobAttr const EPS_JOB_ATTRIB* I: Print Job Attribute */
-/* printableWidth EPS_INT32* O: Printable area width. */
-/* printableHeight EPS_INT32* O: Printable area height. */
+/* printableWidth EPS_UINT32* O: Printable area width. */
+/* printableHeight EPS_UINT32* O: Printable area height. */
/* */
/* Return value: */
/* << Normal >> */
/* EPS_ERR_NONE - Success */
+/* EPS_TEMPORARY_VALUE - Temporary value */
/* << Error >> */
/* EPS_ERR_LIB_NOT_INITIALIZED - ESC/P-R Lib is NOT initialized */
/* EPS_ERR_INV_ARG_JBO_ATTRIB - Invalid argument "jobAttr" */
@@ -2410,6 +2478,7 @@ EPS_ERR_CODE epsGetSupportedMedia (
/* EPS_ERR_INV_RIGHT_MARGIN - Invalid Right Margin */
/* EPS_ERR_MARGIN_OVER_PRINTABLE_WIDTH - Invalid Magin Setting (Width) */
/* EPS_ERR_MARGIN_OVER_PRINTABLE_HEIGHT - Invalid Magin Setting (Height) */
+/* EPS_ERR_INV_CD_OUTDIM - Invalid CD Outside Diameter */
/* EPS_ERR_OPR_FAIL - Internal Error */
/* */
/* Description: */
@@ -2423,15 +2492,11 @@ EPS_ERR_CODE epsGetPrintableArea (
EPS_UINT32* printableHeight
){
-
/*** Declare Variable Local to Routine */
-EPS_INT32 idx; /* General loop/index varaible */
-EPS_ERR_CODE retStatus; /* Return status of internal calls */
-EPS_INT32 factor; /* Scaling factor for dpi */
-EPS_INT32 tempPrintableWidth;
-EPS_INT32 tempPrintableHeight;
-const EPS_MEDIA_INFO* pMI = NULL;
-EPS_INT16 minCustomBorder;
+ EPS_ERR_CODE retStatus = EPS_ERR_NONE;
+ EPS_ERR_CODE retTmp = EPS_ERR_NONE;
+ EPS_PRINTER_INN* innerPrinter;
+ EPS_INT32 pmVer = 0;
EPS_LOG_FUNCIN;
@@ -2442,16 +2507,20 @@ EPS_LOG_FUNCIN;
if(NULL == printJob.printer){
EPS_RETURN( EPS_ERR_PRINTER_NOT_SET );
}
+ innerPrinter = printJob.printer;
/*** Validate input parameters */
- if (jobAttr == NULL)
+ if (jobAttr == NULL){
EPS_RETURN( EPS_ERR_INV_ARG_JOB_ATTRIB );
+ }
- if (printableWidth == NULL)
+ if (printableWidth == NULL){
EPS_RETURN( EPS_ERR_INV_ARG_PRINTABLE_WIDTH );
+ }
- if (printableHeight == NULL)
+ if (printableHeight == NULL){
EPS_RETURN( EPS_ERR_INV_ARG_PRINTABLE_HEIGHT );
+ }
/*** ESC/Page divergence ***/
if( EPS_LANG_ESCPR != printJob.printer->language ){
@@ -2463,184 +2532,415 @@ EPS_LOG_FUNCIN;
EPS_RETURN( retStatus );
}
-/*** Initialize Local Variables */
- retStatus = EPS_ERR_NONE;
-
/*** Validate/Confirm Page Attribute Data */
/*** Media Size */
if (! ( ( (jobAttr->mediaSizeIdx >= EPS_MSID_A4 ) &&
- (jobAttr->mediaSizeIdx <= EPS_MSID_HIVISION ) ) ||
+ (jobAttr->mediaSizeIdx <= EPS_MSID_A5_24HOLE ) ) ||
( (jobAttr->mediaSizeIdx >= EPS_MSID_A3NOBI ) &&
- (jobAttr->mediaSizeIdx <= EPS_MSID_12X12 ) ) ||
- ( (jobAttr->mediaSizeIdx == EPS_MSID_USER ) ) ) )
+ (jobAttr->mediaSizeIdx <= EPS_MSID_12X12 ) ) ||
+ ( (jobAttr->mediaSizeIdx == EPS_MSID_USER ) ) ) )
+ {
EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE );
-
-#if 0 /* These parameter are not used in this function */
- /*** Media Type */
- if (! ( ( (jobAttr->mediaTypeIdx >= EPS_MTID_PLAIN ) &&
-/* (jobAttr->mediaTypeIdx <= EPS_MTID_GLOSSYHAGAKI ) ) ||*/
- (jobAttr->mediaTypeIdx <= EPS_MTID_BUSINESSCOAT ) ) ||
- ( (jobAttr->mediaTypeIdx >= EPS_MTID_CDDVD ) &&
- (jobAttr->mediaTypeIdx <= EPS_MTID_CDDVDGLOSSY ) ) ||
- ( (jobAttr->mediaTypeIdx == EPS_MTID_CLEANING ) ) ) )
- EPS_RETURN( EPS_ERR_INV_MEDIA_TYPE );
-#endif
+ }
/*** Border Mode */
if (! ( (jobAttr->printLayout == EPS_MLID_BORDERLESS ) ||
(jobAttr->printLayout == EPS_MLID_BORDERS ) ||
(jobAttr->printLayout == EPS_MLID_CDLABEL ) ||
(jobAttr->printLayout == EPS_MLID_DIVIDE16 ) ||
- (jobAttr->printLayout == EPS_MLID_CUSTOM ) ) )
+ (jobAttr->printLayout == EPS_MLID_CUSTOM ) ) )
+ {
EPS_RETURN( EPS_ERR_INV_BORDER_MODE );
+ }
-#if 0 /* These parameter are not used in this function */
- /*** Print Quality */
- if (! ( (jobAttr->printQuality == EPS_MQID_DRAFT ) ||
- (jobAttr->printQuality == EPS_MQID_NORMAL ) ||
- (jobAttr->printQuality == EPS_MQID_HIGH ) ) )
- EPS_RETURN( EPS_ERR_INV_PRINT_QUALITY );
-
- /*** Color Mode */
- if (! ( (jobAttr->colorMode == EPS_CM_COLOR ) ||
- (jobAttr->colorMode == EPS_CM_MONOCHROME ) ) )
- EPS_RETURN( EPS_ERR_INV_COLOR_MODE );
-#endif
-
- /*** Input Image Resolution */
- /*** Select table and factor */
- if(jobAttr->inputResolution == EPS_IR_360X360){
- pMI = epsMediaSize;
- factor = 1;
- minCustomBorder = EPS_BORDERS_MARGIN_360;
- } else if(jobAttr->inputResolution == EPS_IR_720X720){
- pMI = epsMediaSize;
- factor = 2;
- minCustomBorder = EPS_BORDERS_MARGIN_360;
- } else if(jobAttr->inputResolution == EPS_IR_300X300){
- pMI = epsMediaSize300;
- factor = 1;
- minCustomBorder = EPS_BORDERS_MARGIN_300;
- } else if(jobAttr->inputResolution == EPS_IR_600X600){
- pMI = epsMediaSize300;
- factor = 2;
- minCustomBorder = EPS_BORDERS_MARGIN_300;
+ /*** decided pm version */
+ pmVer = 0;
+ if( jobAttr->mediaSizeIdx == EPS_MSID_USER ||
+ jobAttr->printLayout == EPS_MLID_CDLABEL ||
+ jobAttr->printLayout == EPS_MLID_DIVIDE16)
+ { /* CD and PhotoSeal do not depend on the model */
+ pmVer = 1; /* use static table */
} else{
- EPS_RETURN( EPS_ERR_INV_INPUT_RESOLUTION )
+ if(innerPrinter->pmData.version <= 0 ){
+ /* get supported media */
+ retStatus = GetSupportedMedia(innerPrinter);
+ }
+ if(EPS_ERR_NONE == retStatus){
+ pmVer = innerPrinter->pmData.version;
+ }
+ }
+
+ /*** Get Printable Area */
+ retTmp = CalcPrintableArea(jobAttr, &innerPrinter->pmData, NULL, printableWidth, printableHeight);
+ if(EPS_ERR_NONE == retTmp){
+ if(0 == pmVer)retStatus = EPS_TEMPORARY_VALUE;
+ } else{
+ retStatus = retTmp;
}
-#if 0 /* These parameter are not used in this function */
- /*** Printing Direction */
- if (! ( (jobAttr->printDirection == EPS_PD_BIDIREC ) ||
- (jobAttr->printDirection == EPS_PD_UNIDIREC ) ) )
- EPS_RETURN( EPS_ERR_INV_PRINT_DIRECTION );
-
- /*** Color Plane */
- if (! ( (jobAttr->colorPlane == EPS_CP_FULLCOLOR ) ||
- (jobAttr->colorPlane == EPS_CP_256COLOR ) ) )
- EPS_RETURN( EPS_ERR_INV_COLOR_PLANE );
-
- /*** Pallette Data */
- if (jobAttr->colorPlane == EPS_CP_256COLOR) {
- if (! ((jobAttr->paletteSize >= 3 ) &&
- (jobAttr->paletteSize <= 768/*765*/ ) ) )
- EPS_RETURN( EPS_ERR_INV_PALETTE_SIZE );
- if ( jobAttr->paletteData == NULL )
- EPS_RETURN( EPS_ERR_INV_PALETTE_DATA );
- }
+ EPS_RETURN( retStatus );
+}
- /*** Brightness */
- if (! ( (jobAttr->brightness >= -50 ) &&
- (jobAttr->brightness <= 50 ) ) )
- EPS_RETURN( EPS_ERR_INV_BRIGHTNESS );
- /*** Contrast */
- if (! ( (jobAttr->contrast >= -50 ) &&
- (jobAttr->contrast <= 50 ) ) )
- EPS_RETURN( EPS_ERR_INV_CONTRAST );
+/*******************************************|********************************************/
+/* */
+/* Function name: epsGetPrintAreaInfo() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* jobAttr const EPS_JOB_ATTRIB* I: Print Job Attribute */
+/* paperWidth EPS_UINT32* O: Paper width. */
+/* paperHeight EPS_UINT32* O: Paper height. */
+/* margin EPS_LAYOUT_MARGIN* O: Printable area height. */
+/* */
+/* Return value: */
+/* << Normal >> */
+/* EPS_ERR_NONE - Success */
+/* EPS_TEMPORARY_VALUE - Temporary value */
+/* << Error >> */
+/* EPS_ERR_LIB_NOT_INITIALIZED - ESC/P-R Lib is NOT initialized */
+/* EPS_ERR_PRINTER_NOT_SET - Target printer is not specified */
+/* EPS_ERR_INV_ARG_JOB_ATTRIB - Invalid argument "jobAttr" */
+/* EPS_ERR_INV_ARG_PAPER_WIDTH - Invalid argument "paperWidth" */
+/* EPS_ERR_INV_ARG_PAPER_HEIGHT - Invalid argument "paperHeight" */
+/* EPS_ERR_INV_ARG_LAYOUT_MARGIN - Invalid argument */
+/* EPS_ERR_INV_MEDIA_SIZE - Invalid Media Size */
+/* EPS_ERR_INV_BORDER_MODE - Invalid Border Mode */
+/* EPS_ERR_INV_INPUT_RESOLUTION - Invalid Input Resolution */
+/* EPS_ERR_MARGIN_OVER_PRINTABLE_WIDTH - Invalid Magin Setting (Width) */
+/* EPS_ERR_MARGIN_OVER_PRINTABLE_HEIGHT - Invalid Magin Setting (Height) */
+/* EPS_ERR_INV_CD_OUTDIM - Invalid CD Outside Diameter */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* Gets the prin area information of the preview. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epsGetPrintAreaInfo (
- /*** Saturation */
- if (! ( (jobAttr->saturation >= -50 ) &&
- (jobAttr->saturation <= 50 ) ) )
- EPS_RETURN( EPS_ERR_INV_SATURATION );
-#endif
+ const EPS_JOB_ATTRIB* jobAttr,
+ EPS_UINT32* paperWidth,
+ EPS_UINT32* paperHeight,
+ EPS_LAYOUT_INFO* layoutInfo
- /*** Margin */
- if (jobAttr->printLayout == EPS_MLID_CUSTOM) {
- if (jobAttr->topMargin < minCustomBorder*factor) EPS_RETURN( EPS_ERR_INV_TOP_MARGIN );
- if (jobAttr->leftMargin < minCustomBorder*factor) EPS_RETURN( EPS_ERR_INV_LEFT_MARGIN );
- if (jobAttr->bottomMargin < minCustomBorder*factor) EPS_RETURN( EPS_ERR_INV_BOTTOM_MARGIN );
- if (jobAttr->rightMargin < minCustomBorder*factor) EPS_RETURN( EPS_ERR_INV_RIGHT_MARGIN );
- }
+){
+/*** Declare Variable Local to Routine */
+ EPS_ERR_CODE retStatus = EPS_ERR_NONE;
+ EPS_ERR_CODE retTmp = EPS_ERR_NONE;
+ EPS_PRINTER_INN* innerPrinter;
+ EPS_INT32 pmVer = 0;
+ EPS_INT32 tempPrintableWidth, tempPrintableHeight;
-#if 0 /* Don't need this logic */
- /*** If full-color mode, nullify the 256-color parameters */
- printJob.bpp = 1;
- if (jobAttr->colorPlane == EPS_CP_FULLCOLOR) {
- jobAttr->paletteSize = 0;
- jobAttr->paletteData = NULL;
- printJob.bpp = 3;
- }
+EPS_LOG_FUNCIN;
+
+/*** Has a Lib been initialized */
+ if (libStatus != EPS_STATUS_INITIALIZED) {
+ EPS_RETURN( EPS_ERR_LIB_NOT_INITIALIZED );
+ }
+ if(NULL == printJob.printer){
+ EPS_RETURN( EPS_ERR_PRINTER_NOT_SET );
+ }
+ innerPrinter = printJob.printer;
+
+/*** Validate input parameters */
+ if (jobAttr == NULL){
+ EPS_RETURN( EPS_ERR_INV_ARG_JOB_ATTRIB );
+ }
+ if (paperWidth == NULL){
+ EPS_RETURN( EPS_ERR_INV_ARG_PAPER_WIDTH );
+ }
+ if (paperHeight == NULL){
+ EPS_RETURN( EPS_ERR_INV_ARG_PAPER_HEIGHT );
+ }
+ if (layoutInfo == NULL){
+ EPS_RETURN( EPS_ERR_INV_ARG_LAYOUT_MARGIN );
+ }
+
+ if( EPS_LANG_ESCPR != printJob.printer->language ){
+#ifdef GCOMSW_CMD_ESCPAGE
+ retStatus = pageGetPrintAreaInfoFromTable(jobAttr,
+ paperWidth, paperHeight, layoutInfo);
+#else
+ retStatus = EPS_ERR_LANGUAGE_NOT_SUPPORTED;
#endif
+ } else{
+ /*** decided pm version */
+ pmVer = 0;
+ if( jobAttr->mediaSizeIdx == EPS_MSID_USER ||
+ jobAttr->printLayout == EPS_MLID_CDLABEL ||
+ jobAttr->printLayout == EPS_MLID_DIVIDE16)
+ { /* CD and PhotoSeal do not depend on the model */
+ pmVer = 1; /* use static table */
+ } else{
+ if(innerPrinter->pmData.version <= 0 ){
+ /* get supported media */
+ retStatus = GetSupportedMedia(innerPrinter);
+ }
+ if(EPS_ERR_NONE == retStatus){
+ pmVer = innerPrinter->pmData.version;
+ }
+ }
+
+ retTmp = epspmGetPrintAreaInfo(TRUE, jobAttr, &innerPrinter->pmData,
+ paperWidth, paperHeight, layoutInfo, NULL);
-/*** Get Printable Area */
- /*** Find the Media by ID */
- for (idx = 0; pMI[idx].id != -1; idx++) {
- if (pMI[idx].id == jobAttr->mediaSizeIdx)
- break;
- }
- if (pMI[idx].id == -1) {
- EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE );
- }
+ /*** Validate/Confirm Magin Setting */
+ tempPrintableWidth = *paperWidth - layoutInfo->margin.left - layoutInfo->margin.right;
+ tempPrintableHeight = *paperHeight - layoutInfo->margin.top - layoutInfo->margin.bottom;
+ if (tempPrintableWidth <= 0) EPS_RETURN( EPS_ERR_MARGIN_OVER_PRINTABLE_WIDTH );
+ if (tempPrintableHeight <= 0) EPS_RETURN( EPS_ERR_MARGIN_OVER_PRINTABLE_HEIGHT );
- /*** Initialize Printable based on printLayout */
- switch( jobAttr->printLayout ){
- case EPS_MLID_BORDERLESS:
- tempPrintableWidth = pMI[idx].print_area_x_borderless * factor;
- tempPrintableHeight = pMI[idx].print_area_y_borderless * factor;
- break;
+ if(EPS_ERR_NONE == retTmp){
+ if(0 == pmVer)retStatus = EPS_TEMPORARY_VALUE;
+ } else{
+ retStatus = retTmp;
+ }
+ }
- case EPS_MLID_BORDERS:
- case EPS_MLID_DIVIDE16: /* layout processing is not done. */
- tempPrintableWidth = pMI[idx].print_area_x_border * factor;
- tempPrintableHeight = pMI[idx].print_area_y_border * factor;
- break;
+ EPS_RETURN( retStatus );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: epsGetPrintAreaInfoAll() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* resorution EPS_UINT32 I: input resolution */
+/* printAreaInfo EPS_PRINT_AREA_INFO* O: Printable area information */
+/* */
+/* Return value: */
+/* << Normal >> */
+/* EPS_ERR_NONE - Success */
+/* EPS_TEMPORARY_VALUE - Temporary value */
+/* << Error >> */
+/* EPS_ERR_LIB_NOT_INITIALIZED - ESC/P-R Lib is NOT initialized */
+/* EPS_ERR_PRINTER_NOT_SET - Target printer is not specified */
+/* EPS_ERR_INV_ARG_PRINTAREA_INFO - Invalid argument */
+/* EPS_ERR_INV_INPUT_RESOLUTION - Invalid Input Resolution */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* Gets the prin area information of the preview at all supported media. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epsGetPrintAreaInfoAll (
+
+ EPS_UINT32 resorution,
+ EPS_PRINT_AREA_INFO* printAreaInfo
+
+){
+/*** Declare Variable Local to Routine */
+ EPS_ERR_CODE retStatus = EPS_ERR_NONE;
+ EPS_ERR_CODE retTmp = EPS_ERR_NONE;
+ EPS_PRINTER_INN* innerPrinter;
+
+EPS_LOG_FUNCIN;
+
+/*** Has a Lib been initialized */
+ if (libStatus != EPS_STATUS_INITIALIZED) {
+ EPS_RETURN( EPS_ERR_LIB_NOT_INITIALIZED );
+ }
+ if(NULL == printJob.printer){
+ EPS_RETURN( EPS_ERR_PRINTER_NOT_SET );
+ }
+ innerPrinter = printJob.printer;
- case EPS_MLID_CDLABEL:
- if( !( (jobAttr->cdDimOut >= EPS_CDDIM_IN_MIN )
- && (jobAttr->cdDimOut <= EPS_CDDIM_OUT_MAX ) ) ){
- EPS_RETURN( EPS_ERR_INV_CD_OUTDIM );
+/*** Validate input parameters */
+ if (printAreaInfo == NULL){
+ EPS_RETURN( EPS_ERR_INV_ARG_PRINTAREA_INFO );
+ }
+
+ /* clear old */
+ epspmClearPrintAreaInfo(&innerPrinter->printAreaInfo);
+
+ if( EPS_LANG_ESCPR != printJob.printer->language ){
+#ifdef GCOMSW_CMD_ESCPAGE
+ retStatus = pageCreatePrintAreaInfoFromTable(resorution, &innerPrinter->printAreaInfo);
+#else
+ retStatus = EPS_ERR_LANGUAGE_NOT_SUPPORTED;
+#endif
+ } else{
+ /*** get supported media */
+ if(innerPrinter->pmData.version <= 0){
+ retStatus = GetSupportedMedia(innerPrinter);
+ }
+
+ if(EPS_ERR_NONE == retStatus){
+ if(1 == innerPrinter->pmData.version){
+ retStatus = epspmCreatePrintAreaInfoFromTable(&innerPrinter->supportedMedia,
+ resorution,
+ &innerPrinter->printAreaInfo);
+ } else{
+ retStatus = epspmCreatePrintAreaInfoFromPM(innerPrinter->pmData.pmString,
+ innerPrinter->pmData.length,
+ resorution,
+ &innerPrinter->printAreaInfo);
+ }
+ } else{
+ retTmp = epspmCreatePrintAreaInfoFromTable(NULL, resorution,
+ &innerPrinter->printAreaInfo);
+ if(EPS_ERR_NONE == retTmp){
+ retStatus = EPS_TEMPORARY_VALUE;
+ }
}
+ }
+
+ /* Copy to input buffer */
+ printAreaInfo->numSizes = innerPrinter->printAreaInfo.numSizes;
+ printAreaInfo->sizeList = innerPrinter->printAreaInfo.sizeList;
+
+ EPS_RETURN( retStatus );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: epsGetUsersizeRange() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* resolution EPS_INT32* I: resolution to use. */
+/* minWidth EPS_INT32* O: Printable area min width. */
+/* minWidth EPS_INT32* O: Printable area max width. */
+/* minHeight EPS_INT32* O: Printable area min height. */
+/* maxHeight EPS_INT32* O: Printable area max height. */
+/* */
+/* Return value: */
+/* << Normal >> */
+/* EPS_ERR_NONE - Success */
+/* << Error >> */
+/* EPS_ERR_LIB_NOT_INITIALIZED - ESC/P-R Lib is NOT initialized */
+/* EPS_ERR_LANGUAGE_NOT_SUPPORTED - Unsupported function Error (language) */
+/* EPS_ERR_PRINTER_NOT_SET - Target printer is not specified */
+/* EPS_ERR_INV_INPUT_RESOLUTION - Invalid Input Resolution */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* EPS_ERR_MEMORY_ALLOCATION - Failed to allocate memory */
+/* */
+/* Description: */
+/* Gets the printable area of user defined size. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epsGetUsersizeRange (
+
+ EPS_UINT8 resolution,
+ EPS_UINT32* minWidth,
+ EPS_UINT32* maxWidth,
+ EPS_UINT32* minHeight,
+ EPS_UINT32* maxHeight
+
+){
+/*** Declare Variable Local to Routine */
+ EPS_ERR_CODE retStatus; /* Return status of internal calls */
+ EPS_PRINTER_INN* innerPrinter;
+ const EPS_MEDIA_INFO* pMI = NULL;
+ EPS_INT32 factor; /* Scaling factor for dpi */
+ EPS_UINT32 baseDPI;
+ EPS_INT32 n, idx;
+ EPS_UINT32 minW, maxW, minH, maxH;
+
+EPS_LOG_FUNCIN;
+
+/*** Initialize Variables */
+ retStatus = EPS_ERR_NONE;
+ *minWidth = *maxWidth = *minHeight = *maxHeight = 0;
+ factor = 1;
+
+/*** Has a Lib been initialized */
+ if (libStatus != EPS_STATUS_INITIALIZED) {
+ EPS_RETURN( EPS_ERR_LIB_NOT_INITIALIZED );
+ }
+/*** Has a target printer specified */
+ if(NULL == printJob.printer){
+ EPS_RETURN( EPS_ERR_PRINTER_NOT_SET );
+ }
+ innerPrinter = printJob.printer;
- tempPrintableWidth =
- tempPrintableHeight = elGetDots(jobAttr->inputResolution, jobAttr->cdDimOut);
+ if( EPS_LANG_ESCPR != innerPrinter->language ){
+ EPS_RETURN( EPS_ERR_LANGUAGE_NOT_SUPPORTED );
+ }
+
+/*** Validate input parameters */
+ /*** Select table and factor */
+ switch(resolution){
+ case EPS_IR_360X360:
+ pMI = epsMediaSize;
+ factor = 1;
+ baseDPI = 36;
+ break;
+ case EPS_IR_720X720:
+ pMI = epsMediaSize;
+ factor = 2;
+ baseDPI = 36;
+ break;
+ case EPS_IR_300X300:
+ pMI = epsMediaSize300;
+ factor = 1;
+ baseDPI = 30;
+ break;
+ case EPS_IR_600X600:
+ pMI = epsMediaSize300;
+ factor = 2;
+ baseDPI = 30;
break;
+ default:
+ EPS_RETURN( EPS_ERR_INV_INPUT_RESOLUTION )
+ }
- default: /* printLayout == EPS_MLID_CUSTOM */
- tempPrintableWidth = pMI[idx].paper_x *factor -
- jobAttr->leftMargin -
- jobAttr->rightMargin;
- tempPrintableHeight = pMI[idx].paper_y *factor -
- jobAttr->topMargin -
- jobAttr->bottomMargin;
- }
+ if(innerPrinter->pmData.version <= 0){
+ retStatus = GetSupportedMedia(innerPrinter);
+ }
-/*** Validate/Confirm Magin Setting */
- if (jobAttr->printLayout == EPS_MLID_CUSTOM) {
- if (tempPrintableWidth <= 0) EPS_RETURN( EPS_ERR_MARGIN_OVER_PRINTABLE_WIDTH );
- if (tempPrintableHeight <= 0) EPS_RETURN( EPS_ERR_MARGIN_OVER_PRINTABLE_HEIGHT );
- }
+ if( EPS_ERR_NONE == retStatus ){
+ minW = minH = 0xFFFFFFFF;
+ maxW = maxH = 0;
+ for(n = 0; n < innerPrinter->supportedMedia.numSizes; n++){
+ if (EPS_MSID_USER != innerPrinter->supportedMedia.sizeList[n].mediaSizeID){
+ for (idx = 0; pMI[idx].id != -1; idx++) {
+ if (pMI[idx].id == innerPrinter->supportedMedia.sizeList[n].mediaSizeID)
+ break;
+ }
-/*** Set Printable Area to input parameter */
- if ((tempPrintableWidth > 0) && (tempPrintableHeight > 0)) {
- *printableWidth = (EPS_UINT32)tempPrintableWidth;
- *printableHeight = (EPS_UINT32)tempPrintableHeight;
- } else{
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
-
-/*** Return to Caller */
- EPS_RETURN( EPS_ERR_NONE );
+ if(minW > (EPS_UINT32)pMI[idx].paper_x)minW = pMI[idx].paper_x;
+ if(minH > (EPS_UINT32)pMI[idx].paper_y)minH = pMI[idx].paper_y;
+
+ if(maxW < (EPS_UINT32)pMI[idx].paper_x)maxW = pMI[idx].paper_x;
+ if(maxH < (EPS_UINT32)pMI[idx].paper_y)maxH = pMI[idx].paper_y;
+ }
+ }
+ } else{
+ minW = EPS_USER_WIDTH_MIN * baseDPI;
+ minH = EPS_USER_HEIGHT_MIN * baseDPI;
+ maxW = EPS_USER_WIDTH_MAX2 * baseDPI;
+ maxH = EPS_USER_HEIGHT_MAX * baseDPI;
+ }
+
+ if (minWidth != NULL) {
+ if(minW < EPS_USER_WIDTH_MIN * baseDPI)minW = EPS_USER_WIDTH_MIN * baseDPI;
+ *minWidth = minW * factor;
+ }
+ if (maxWidth != NULL) {
+ if(maxW > EPS_USER_WIDTH_MAX2 * baseDPI){
+ maxW = EPS_USER_WIDTH_MAX2 * baseDPI;
+ } else if((maxW > EPS_USER_WIDTH_MAX1 * baseDPI) && (maxW < EPS_USER_WIDTH_MAX2 * baseDPI)){
+ maxW = EPS_USER_WIDTH_MAX1 * baseDPI;
+ }
+ *maxWidth = maxW * factor;
+ }
+ if (minHeight != NULL) {
+ if(minH < EPS_USER_HEIGHT_MIN * baseDPI)minH = EPS_USER_HEIGHT_MIN * baseDPI;
+ *minHeight = minH * factor;
+ }
+ if (maxHeight != NULL) {
+ if(maxH > EPS_USER_HEIGHT_MAX * baseDPI)maxH = EPS_USER_HEIGHT_MAX * baseDPI;
+ *maxHeight = maxH * factor;
+ }
+
+ EPS_RETURN( retStatus );
}
@@ -2730,6 +3030,12 @@ EPS_ERR_CODE epsMakeMainteCmd (
}
}
MakeMainteCmd_ADDCMD(RemoteJS)
+ MakeMainteCmd_ADDCMD(RemotePP)
+ if(pCmdPos){
+ *(pCmdPos - sizeof(RemotePP) + 5) = 0x01;
+ *(pCmdPos - sizeof(RemotePP) + 6) = 0xFE;
+ }
+ MakeMainteCmd_ADDCMD(RemoteEX33)
MakeMainteCmd_ADDCMD(RemoteNC)
if(pCmdPos && obsIsA3Model(EPS_MDC_NOZZLE)){
*(pCmdPos - sizeof(RemoteNC) + 5) = 0x10;
@@ -2877,7 +3183,6 @@ static EPS_ERR_CODE MonitorStatus (
/* The error occurs in printer. */
printJob.contData.lastError = StatInfo.nError;
- /*EPS_DBGPRINT(("EPS SER: STAT MON -> Printer State [0x%x]\r\n",StatInfo.nState));*/
if( StatInfo.nState & ( EPS_ST_IDLE |
EPS_ST_WAITING |
EPS_ST_SELF_PRINTING |
@@ -2885,6 +3190,7 @@ static EPS_ERR_CODE MonitorStatus (
/*EPS_DBGPRINT(("EPS SER: STAT MON -> SETTLING\r\n"));*/
EPS_RETURN( EPS_ERR_NONE );
}else{
+ /*EPS_DBGPRINT(("EPS SER: STAT MON -> Printer State [0x%x]\r\n",StatInfo.nState));*/
EPS_RETURN( EPS_ERR_PRINTER_ERR_OCCUR );
}
}
@@ -2996,21 +3302,16 @@ EPS_UINT32 sendHeight;
/*** Initialize variable */
line.bytesPerLine = printJob.bpp * widthPixels;
linePixels = Min(line.bytesPerLine, printJob.bpp * printJob.printableAreaWidth);
-
for (; idx < sendHeight; idx++) {
/* Calculate position of image line */
- //if(idx == 1){
- //idx = sendHeight;
- //break;
- //}
line.data = data + idx * line.bytesPerLine;
-
+
/*** Make new LineRect */
line.rect.top = (EPS_INT32)(printJob.verticalOffset + idx);
line.rect.left = 0;
line.rect.bottom = line.rect.top + 1;
line.rect.right = (EPS_INT32)(widthPixels);
-
+
/*** Test if current image data is completely white */
if(EPS_LANG_ESCPR == printJob.printer->language ){
skipLine = TRUE;
@@ -3035,9 +3336,8 @@ EPS_UINT32 sendHeight;
if (skipLine == TRUE)continue;
}
+
/*** Image Data not completely white - print image data */
- //idx = sendHeight;
- //break;
retStatus = PrintLine(&line);
if (retStatus != EPS_ERR_NONE) {
@@ -3400,6 +3700,8 @@ static EPS_ERR_CODE SendBlankBand (
/* EPS_ERR_INV_RIGHT_MARGIN - Invalid Right Margin */
/* EPS_ERR_MARGIN_OVER_PRINTABLE_WIDTH - Invalid Magin Setting (Width) */
/* EPS_ERR_MARGIN_OVER_PRINTABLE_HEIGHT - Invalid Magin Setting (Height) */
+/* EPS_ERR_INV_CD_INDIM - Invalid CD Outside Diameter */
+/* EPS_ERR_INV_CD_OUTDIM - Invalid CD Outside Diameter */
/* */
/* Description: */
/* Confirm ESC/P-R Job Attribute. */
@@ -3414,15 +3716,12 @@ EPS_ERR_CODE SetupJobAttrib (
EPS_LOG_FUNCIN;
-
-
/*** Validate input parameters */
#ifndef LCOMSW_JOBPARAM_CEHCK_OFF
/*======================================================================================*/
/*** Validate/Confirm Page Attribute Data */
/*======================================================================================*/
/*** Color Plane */
-
if (! ( (jobAttr->colorPlane == EPS_CP_FULLCOLOR ) ||
(jobAttr->colorPlane == EPS_CP_256COLOR ) ||
(jobAttr->colorPlane == EPS_CP_JPEG ) ||
@@ -3446,15 +3745,23 @@ EPS_LOG_FUNCIN;
} else{ /* Image(RGB, Jpeg) */
/*** Media Size */
if (! ( ( (jobAttr->mediaSizeIdx >= EPS_MSID_A4 ) &&
- (jobAttr->mediaSizeIdx <= EPS_MSID_HIVISION ) ) ||
+ (jobAttr->mediaSizeIdx <= EPS_MSID_A5_24HOLE ) ) ||
( (jobAttr->mediaSizeIdx >= EPS_MSID_A3NOBI ) &&
(jobAttr->mediaSizeIdx <= EPS_MSID_12X12 ) ) ||
- ( (jobAttr->mediaSizeIdx == EPS_MSID_USER ) ) ) ){
+ ( (jobAttr->mediaSizeIdx == EPS_MSID_USER ) ) ) )
+ {
EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE )
+ } else if (jobAttr->mediaSizeIdx == EPS_MSID_USER ) {
+ if(EPS_JOB_ATTRIB_VER_4 > jobAttr->version){
+ EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE )
+ } else if( jobAttr->userDefWidth <= 0 || jobAttr->userDefHeight <= 0 ){
+ EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE )
+ }
}
+
/*** Media Type */
if (! ( ( (jobAttr->mediaTypeIdx >= EPS_MTID_PLAIN ) &&
- (jobAttr->mediaTypeIdx <= EPS_MTID_COLORPAPER ) ) ||
+ (jobAttr->mediaTypeIdx <= EPS_MTID_GROSSY_ROLL_STICKER) ) ||
( (jobAttr->mediaTypeIdx >= EPS_MTID_CDDVD ) &&
(jobAttr->mediaTypeIdx <= EPS_MTID_CDDVDGLOSSY ) ) ||
( (jobAttr->mediaTypeIdx == EPS_MTID_CLEANING ) ) ) ){
@@ -3488,23 +3795,18 @@ EPS_LOG_FUNCIN;
EPS_RETURN( EPS_ERR_INV_SATURATION )
}
/*** Paper Source */
- if (! ( (jobAttr->paperSource == EPS_MPID_AUTO ) ||
+ if (! ( (jobAttr->paperSource == EPS_MPID_NOT_SPEC ) ||
+ (jobAttr->paperSource == EPS_MPID_AUTO ) ||
(jobAttr->paperSource == EPS_MPID_REAR ) ||
(jobAttr->paperSource == EPS_MPID_FRONT1 ) ||
(jobAttr->paperSource == EPS_MPID_FRONT2 ) ||
(jobAttr->paperSource == EPS_MPID_FRONT3 ) ||
(jobAttr->paperSource == EPS_MPID_FRONT4 ) ||
(jobAttr->paperSource == EPS_MPID_CDTRAY ) ||
- (jobAttr->paperSource == EPS_MPID_REARMANUAL ) ||
-
- (jobAttr->paperSource == EPS_MPID_PAGE_S_MP_TRAY ) ||
- (jobAttr->paperSource == EPS_MPID_PAGE_S_CASSETTE1 ) ||
- (jobAttr->paperSource == EPS_MPID_PAGE_S_CASSETTE2 ) ||
- (jobAttr->paperSource == EPS_MPID_PAGE_S_CASSETTE3 ) ||
- (jobAttr->paperSource == EPS_MPID_PAGE_S_CASSETTE4 ) ||
- (jobAttr->paperSource == EPS_MPID_PAGE_S_PARAM_MANUALFEED ) ||
- (jobAttr->paperSource == EPS_MPID_PAGE_S_AUTO_TRAY )
- ) ){
+ (jobAttr->paperSource == EPS_MPID_ROLL ) ||
+ (jobAttr->paperSource == EPS_MPID_MANUAL ) ||
+ (jobAttr->paperSource == EPS_MPID_MANUAL2 ) ) ){
+
EPS_RETURN( EPS_ERR_INV_PAPER_SOURCE )
}
@@ -3529,8 +3831,6 @@ EPS_LOG_FUNCIN;
}
#endif
-
-
/*======================================================================================*/
/*** Copy Input Page Attribute Data to Internal Variable */
/*======================================================================================*/
@@ -3540,8 +3840,10 @@ EPS_LOG_FUNCIN;
memcpy((void*)(&printJob.attr), (void*)jobAttr, sizeof(EPS_JOB_ATTRIB));
retStatus = SetupRGBAttrib();
if(EPS_ERR_NONE == retStatus){
- _SP_ChangeSpec_DraftOnly(printJob.printer, &printJob.attr);
+ epspmChangeSpec_DraftOnly(printJob.printer, &printJob.attr);
/* Ignore the return value of this func */
+ } else{
+ EPS_RETURN( retStatus );
}
break;
@@ -3549,8 +3851,16 @@ EPS_LOG_FUNCIN;
memcpy((void*)(&printJob.attr), (void*)jobAttr, sizeof(EPS_JOB_ATTRIB));
retStatus = SetupJPGAttrib();
if(EPS_ERR_NONE == retStatus){
- _SP_ChangeSpec_DraftOnly(printJob.printer, &printJob.attr);
+ epspmChangeSpec_DraftOnly(printJob.printer, &printJob.attr);
/* Ignore the return value of this func */
+ } else{
+ EPS_RETURN( retStatus );
+ }
+
+ /*** Set User defined Printable Area */
+ retStatus = CalcPrintableArea(&printJob.attr, &printJob.printer->pmData, &printJob, NULL, NULL);
+ if( EPS_ERR_NONE != retStatus ){
+ EPS_RETURN( retStatus );
}
break;
@@ -3602,20 +3912,9 @@ EPS_ERR_CODE SetupRGBAttrib (
){
/*** Declare Variable Local to Routine */
-EPS_INT32 factor; /* Scaling factor for dpi */
-EPS_INT32 idx; /* Paper size index */
-EPS_INT32 tempPrintableWidth; /* Temporary Variable */
-EPS_INT32 tempPrintableHeight; /* Temporary Variable */
-const EPS_MEDIA_INFO* pMI = NULL;
-EPS_INT16 borderPixels;
+ EPS_ERR_CODE retStatus = EPS_ERR_NONE; /* Return status of internal calls */
EPS_LOG_FUNCIN;
-
-/*** Initialize Global/Local Variables */
- idx = -1;
- tempPrintableWidth = 0;
- tempPrintableHeight = 0;
-
#ifndef LCOMSW_JOBPARAM_CEHCK_OFF
/*** Validate input parameters */
/*** Border Mode */
@@ -3633,30 +3932,6 @@ EPS_INT16 borderPixels;
EPS_RETURN( EPS_ERR_INV_COLOR_MODE )
}
- /*** Input Image Resolution */
- /*** Select table and factor */
- if(printJob.attr.inputResolution == EPS_IR_360X360){
- pMI = epsMediaSize;
- factor = 1;
- borderPixels = EPS_BORDERS_MARGIN_360;
- } else if(printJob.attr.inputResolution == EPS_IR_720X720){
- pMI = epsMediaSize;
- factor = 2;
- borderPixels = EPS_BORDERS_MARGIN_360;
- } else if(printJob.attr.inputResolution == EPS_IR_300X300){
- pMI = epsMediaSize300;
- //pMI = epsMediaSize;
- factor = 1;
- borderPixels = EPS_BORDERS_MARGIN_300;
- //borderPixels = EPS_BORDERS_MARGIN_360;
- } else if(printJob.attr.inputResolution == EPS_IR_600X600){
- pMI = epsMediaSize300;
- factor = 2;
- borderPixels = EPS_BORDERS_MARGIN_300;
- } else{
- EPS_RETURN( EPS_ERR_INV_INPUT_RESOLUTION )
- }
-
/*** Printing Direction */
if (! ( (printJob.attr.printDirection == EPS_PD_BIDIREC ) ||
(printJob.attr.printDirection == EPS_PD_UNIDIREC ) ) ){
@@ -3674,106 +3949,13 @@ EPS_INT16 borderPixels;
EPS_RETURN( EPS_ERR_INV_PALETTE_DATA )
}
}
-
- /*** Margin */
- if (printJob.attr.printLayout == EPS_MLID_CUSTOM) {
- if (printJob.attr.topMargin < borderPixels*factor) EPS_RETURN( EPS_ERR_INV_TOP_MARGIN );
- if (printJob.attr.leftMargin < borderPixels*factor) EPS_RETURN( EPS_ERR_INV_LEFT_MARGIN );
- if (printJob.attr.bottomMargin < borderPixels*factor) EPS_RETURN( EPS_ERR_INV_BOTTOM_MARGIN );
- if (printJob.attr.rightMargin < borderPixels*factor) EPS_RETURN( EPS_ERR_INV_RIGHT_MARGIN );
- }
#endif
-/*======================================================================================*/
-/*** Set the following parameter */
-/*** - printJob.topMargin */
-/*** - printJob.leftMargin */
-/*** - printJob.printableAreaWidth */
-/*** - printJob.printableAreaHeight */
-/*** - printJob.borderlessModeInternal */
-/*** - printJob.verticalOffset */
-/*======================================================================================*/
- /*** Find the Media by ID */
- for (idx = 0; pMI[idx].id != -1; idx++) {
- if (pMI[idx].id == printJob.attr.mediaSizeIdx)
- break;
- }
- if (pMI[idx].id == -1) {
- EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE );
- }
-
- /*** Media Attributes */
- printJob.paperWidth = pMI[idx].paper_x * factor;
- printJob.paperHeight = pMI[idx].paper_y * factor;
-
- /*** Initialize Printable based on border mode */
- switch( printJob.attr.printLayout ){
- case EPS_MLID_BORDERLESS:
- printJob.topMargin = pMI[idx].top_margin_borderless * factor;
- printJob.leftMargin = pMI[idx].left_margin_borderless * factor;
- tempPrintableWidth = pMI[idx].print_area_x_borderless * factor;
- tempPrintableHeight = pMI[idx].print_area_y_borderless * factor;
- printJob.borderlessMode = EPS_BORDERLESS_NORMAL;
- break;
-
- case EPS_MLID_BORDERS:
- case EPS_MLID_DIVIDE16:
- printJob.topMargin = borderPixels * factor;
- printJob.leftMargin = borderPixels * factor;
-
- tempPrintableWidth = pMI[idx].print_area_x_border * factor;
- tempPrintableHeight = pMI[idx].print_area_y_border * factor;
- printJob.borderlessMode = EPS_BORDER_3MM_MARGINE;
- break;
-
- case EPS_MLID_CDLABEL:
- tempPrintableWidth =
- tempPrintableHeight = elGetDots(printJob.attr.inputResolution, printJob.attr.cdDimOut);
- printJob.topMargin = CDDVD_OFFSET_Y(printJob.attr.inputResolution, printJob.attr.cdDimOut);
- printJob.leftMargin = CDDVD_OFFSET_X(printJob.attr.inputResolution, printJob.attr.cdDimOut);
- printJob.borderlessMode = EPS_BORDER_3MM_MARGINE; /* It's no meaning & no effect */
-
- EPS_DBGPRINT(("dim: %d / top: %d / left: %d\n", printJob.attr.cdDimOut,
- printJob.topMargin, printJob.leftMargin));
- break;
-
- default: /* printJob.attr.printLayout == EPS_MLID_CUSTOM */
- printJob.topMargin = printJob.attr.topMargin;
- printJob.leftMargin = printJob.attr.leftMargin;
- tempPrintableWidth = pMI[idx].paper_x * factor -
- printJob.attr.leftMargin -
- printJob.attr.rightMargin;
- tempPrintableHeight = pMI[idx].paper_y * factor -
- printJob.attr.topMargin -
- printJob.attr.bottomMargin;
- printJob.borderlessMode = EPS_BORDER_CUSTOM;
- }
-
- /*** Validate/Confirm Magin Setting */
- if (printJob.attr.printLayout == EPS_MLID_CUSTOM) {
- if (tempPrintableWidth <= 0) EPS_RETURN( EPS_ERR_MARGIN_OVER_PRINTABLE_WIDTH );
- if (tempPrintableHeight <= 0) EPS_RETURN( EPS_ERR_MARGIN_OVER_PRINTABLE_HEIGHT );
- }
-
- /*** Set Printable Area */
- EPS_INT32 lOffset = printJob.attr.inputResolution/30;
- //printJob.printableAreaHeight = (EPS_UINT32)lWidth + lOffset*2;
- //printJob.printableAreaWidth = (EPS_UINT32)lHeight + lOffset*2;
-
- printJob.printableAreaWidth = (EPS_UINT32)tempPrintableWidth;
- printJob.printableAreaHeight = (EPS_UINT32)tempPrintableHeight;
- //printJob.printableAreaWidth = (EPS_UINT32)tempPrintableHeight;
- //printJob.printableAreaHeight = (EPS_UINT32)tempPrintableWidth;
- /*
- areaWidth = tempPrintableHeight;
- areaHeight = tempPrintableWidth;
- EPS_INT32 lOffset = printJob.attr.inputResolution/30;
- printJob.printableAreaHeight = (EPS_UINT32)lHeight + lOffset*2;
- printJob.printableAreaWidth = (EPS_UINT32)lWidth + lOffset*2;
- */
- //printJob.printableAreaHeight = (EPS_UINT32)lHeight + lOffset*2;
- //printJob.printableAreaWidth = (EPS_UINT32)lWidth + lOffset*2;
-
+ /*** Set Printable Area */
+ retStatus = CalcPrintableArea(&printJob.attr, &printJob.printer->pmData, &printJob, NULL, NULL);
+ if( EPS_ERR_NONE != retStatus ){
+ EPS_RETURN( retStatus );
+ }
/*** Scan through palette for the index value of white and set the global white
value to this index for skipping white raster lines */
@@ -3788,19 +3970,76 @@ EPS_INT16 borderPixels;
printJob.attr.paletteData,
printJob.attr.paletteSize);
- /*** Set "Base Point" Data */
- /*** BORDER */
- printJob.border.top =
- printJob.border.left =
- printJob.border.bottom =
- printJob.border.right = borderPixels * factor;
-
- AdjustBasePoint();
+ AdjustBasePoint();
EPS_RETURN( EPS_ERR_NONE );
}
+EPS_ERR_CODE CalcPrintableArea (
+
+ EPS_JOB_ATTRIB* pAttr,
+ EPS_PM_DATA* pmData,
+ EPS_PRINT_JOB* pJobInfo,
+ EPS_UINT32* printableWidth,
+ EPS_UINT32* printableHeight
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_UINT32 paperWidth, paperHeight;
+ EPS_INT32 tempPrintableWidth, tempPrintableHeight;
+ EPS_LAYOUT_INFO lm;
+ EPS_RECT baseBorder;
+
+ EPS_LOG_FUNCIN;
+
+ ret = epspmGetPrintAreaInfo(FALSE, pAttr, pmData, &paperWidth, &paperHeight, &lm, &baseBorder);
+ if(EPS_ERR_NONE != ret){
+ EPS_RETURN( ret );
+ }
+
+ tempPrintableWidth = paperWidth - lm.margin.left - lm.margin.right;
+ tempPrintableHeight = paperHeight - lm.margin.top - lm.margin.bottom;
+
+ /*** Validate/Confirm Magin Setting */
+ if (tempPrintableWidth <= 0) EPS_RETURN( EPS_ERR_MARGIN_OVER_PRINTABLE_WIDTH );
+ if (tempPrintableHeight <= 0) EPS_RETURN( EPS_ERR_MARGIN_OVER_PRINTABLE_HEIGHT );
+
+ /*** Set Printable Area to input parameter */
+ if(printableWidth != NULL && printableHeight != NULL){
+ *printableWidth = tempPrintableWidth;
+ *printableHeight = tempPrintableHeight;
+ }
+
+ if(pJobInfo != NULL){
+ /*** Set Printable Area */
+ pJobInfo->paperWidth = paperWidth;
+ pJobInfo->paperHeight = paperHeight;
+ pJobInfo->printableAreaWidth = (EPS_UINT32)tempPrintableWidth;
+ pJobInfo->printableAreaHeight = (EPS_UINT32)tempPrintableHeight;
+ pJobInfo->topMargin = lm.margin.top;
+ pJobInfo->leftMargin = lm.margin.left;
+
+ switch( pAttr->printLayout ){
+ case EPS_MLID_BORDERLESS:
+ case EPS_MLID_BORDERS:
+ case EPS_MLID_DIVIDE16:
+ pJobInfo->borderlessMode = EPS_BORDERLESS_NORMAL; /* It's no meaning & no effect */
+ break;
+ case EPS_MLID_CDLABEL:
+ pJobInfo->borderlessMode = EPS_BORDERLESS_NORMAL; /* It's no meaning & no effect */
+ break;
+ default: /* pAttr->printLayout == EPS_MLID_CUSTOM */
+ pJobInfo->borderlessMode = EPS_BORDER_CUSTOM;
+ }
+ /*** Set "Base Point" for custom margin */
+ pJobInfo->border = baseBorder;
+ }
+
+ EPS_RETURN( ret );
+}
+
+
/*******************************************|********************************************/
/* */
/* Function name: SetupJPGAttrib() */
@@ -4000,7 +4239,6 @@ EPS_UINT32 retBufSize = 0; /* Size of buffer written
/*** Remote Command - PP */
SendStartJob_ADDCMD(RemotePP)
pCmdPos -= sizeof(RemotePP);
-
switch(printJob.attr.paperSource){
case EPS_MPID_REAR:
pCmdPos[5] = 0x01; pCmdPos[6] = 0x00;
@@ -4011,12 +4249,24 @@ EPS_UINT32 retBufSize = 0; /* Size of buffer written
case EPS_MPID_FRONT2:
pCmdPos[5] = 0x01; pCmdPos[6] = 0x02;
break;
+ case EPS_MPID_FRONT3:
+ pCmdPos[5] = 0x01; pCmdPos[6] = 0x03;
+ break;
+ case EPS_MPID_FRONT4:
+ pCmdPos[5] = 0x01; pCmdPos[6] = 0x04;
+ break;
case EPS_MPID_CDTRAY:
pCmdPos[5] = 0x02; pCmdPos[6] = 0x01;
break;
- case EPS_MPID_REARMANUAL:
+ case EPS_MPID_ROLL:
+ pCmdPos[5] = 0x03; pCmdPos[6] = 0x00;
+ break;
+ case EPS_MPID_MANUAL:
pCmdPos[5] = 0x02; pCmdPos[6] = 0x00;
break;
+ case EPS_MPID_MANUAL2:
+ pCmdPos[5] = 0x02; pCmdPos[6] = 0x02;
+ break;
case EPS_MPID_AUTO:
default:
@@ -4025,12 +4275,11 @@ EPS_UINT32 retBufSize = 0; /* Size of buffer written
/* Jpeg CD print need PP */
pCmdPos[5] = 0x02; pCmdPos[6] = 0x01;
} else{
- EPS_DBGPRINT(("Paper Sourcr AutoSelect\n"));
+ /*EPS_DBGPRINT(("Paper Sourcr AutoSelect\n"));*/
pCmdPos[5] = 0x01; pCmdPos[6] = 0xFF; /* auto select */
}
break;
}
-
pCmdPos += sizeof(RemotePP);
/*** Remote Command - DP(duplex) */
@@ -4052,19 +4301,44 @@ EPS_UINT32 retBufSize = 0; /* Size of buffer written
SendStartJob_ADDCMD_LEN(PrintQualityCmd, printJob.attr.paletteSize)
MakeQualityCmd(pCmdPos - (sizeof(PrintQualityCmd) + printJob.attr.paletteSize) );
- /*** ESC/PR "apf setting" Command */
- if(EPS_CP_JPEG == printJob.attr.colorPlane){
- SendStartJob_ADDCMD(APFSettingCmd)
- MakeAPFCmd(pCmdPos-sizeof(APFSettingCmd));
- }
-
- /*** ESC/PR "Job" Command to Printer */
if( EPS_CP_JPEG != printJob.attr.colorPlane ){ /* RGB */
+ /*** ESC/PR "page num" Command */
+ SendStartJob_ADDCMD(PrintNumCmd)
+ MakePageNumCmd(pCmdPos - sizeof(PrintNumCmd));
+
+ /*** ESC/PR "custom" Command (media size) */
+ SendStartJob_ADDCMD(CustomCmd)
+ *(pCmdPos-1) = (EPS_UINT8)(printJob.attr.mediaSizeIdx & 0xFF);
+
+ if( 3 <= printJob.printer->pmData.version ){
+ SendStartJob_ADDCMD(Chkcmd)
+ } else{
+ EPS_PRV_COMMANDS(&sendDataBuf, &pCmdPos, &sendDataBufSize)
+ }
+
+ /*** ESC/PR "Job" Command to Printer */
SendStartJob_ADDCMD(JobCmd)
MakeJobCmd(pCmdPos-sizeof(JobCmd));
+
} else{ /* JPEG */
- SendStartJob_ADDCMD(JobCmdJpg)
- MakeJobCmd(pCmdPos-sizeof(JobCmdJpg));
+ /*** ESC/PR "apf setting" Command */
+ SendStartJob_ADDCMD(APFSettingCmd)
+ MakeAPFCmd(pCmdPos-sizeof(APFSettingCmd));
+
+ if(printJob.attr.copies > 1){
+ SendStartJob_ADDCMD(CopyCmd);
+ *(--pCmdPos) = (EPS_UINT8)(printJob.attr.copies & 0xff);
+ pCmdPos++;
+ }
+
+ if(printJob.attr.mediaSizeIdx == EPS_MSID_USER){
+ SendStartJob_ADDCMD(JobCmd) /* set user defined size */
+ MakeJobCmd(pCmdPos-sizeof(JobCmd));
+ }
+
+ /*** ESC/P-R Jpeg "Job" Command to Printer */
+ SendStartJob_ADDCMD(SizeCmd)
+ MakeSizeCmd(pCmdPos-sizeof(SizeCmd));
}
if(bAddStartPage){
@@ -4175,6 +4449,28 @@ EPS_UINT8 array4[4] = {0, 0, 0, 0}; /* Temporary Buffer for 4 byte Big E
/*======================================================================================*/
+/*** Set up ESC/PR "Print Num" Command */
+/*======================================================================================*/
+static void MakePageNumCmd (
+
+ EPS_UINT8* pBuf
+
+){
+EPS_UINT8 array2[2] = {0, 0}; /* Temporary Buffer for 2 byte Big Endian */
+ EPS_LOG_FUNCIN;
+
+ /*** Skip Header */
+ pBuf += ESCPR_HEADER_LENGTH;
+
+ /*** Set Attributes/Values */
+ memSetEndian(EPS_ENDIAN_BIG, EPS_2_BYTES, (EPS_INT32)printJob.attr.pageNum, array2);
+ memcpy(pBuf, array2, sizeof(array2));
+
+ EPS_RETURN_VOID;
+}
+
+
+/*======================================================================================*/
/*** Set up ESC/PR "APF setting" Command */
/*======================================================================================*/
static void MakeAPFCmd (
@@ -4214,71 +4510,80 @@ EPS_UINT8 array4[4] = {0, 0, 0, 0}; /* Temporary Buffer for 4 byte Big E
/*** Skip Header */
pBuf += ESCPR_HEADER_LENGTH;
- if( EPS_CP_JPEG != printJob.attr.colorPlane ){ /* RGB */
- /*EPS_DBGPRINT(("(%d, %d) / (%d, %d) / (%d, %d)\n",
- printJob.paperWidth, printJob.paperHeight,
- printJob.topMargin, printJob.leftMargin,
- printJob.printableAreaWidth, printJob.printableAreaHeight))*/
- /*** Set Attributes/Values */
- memSetEndian(EPS_ENDIAN_BIG, EPS_4_BYTES, (EPS_UINT32)printJob.paperWidth, array4);
- memcpy(pBuf, array4, sizeof(array4));
- pBuf += sizeof(array4);
- memSetEndian(EPS_ENDIAN_BIG, EPS_4_BYTES, (EPS_UINT32)printJob.paperHeight, array4);
- memcpy(pBuf, array4, sizeof(array4));
- pBuf += sizeof(array4);
- memSetEndian(EPS_ENDIAN_BIG, EPS_2_BYTES, (EPS_UINT32)printJob.topMargin, array2);
- memcpy(pBuf, array2, sizeof(array2));
- pBuf += sizeof(array2);
- memSetEndian(EPS_ENDIAN_BIG, EPS_2_BYTES, (EPS_UINT32)printJob.leftMargin, array2);
- memcpy(pBuf, array2, sizeof(array2));
- pBuf += sizeof(array2);
- memSetEndian(EPS_ENDIAN_BIG, EPS_4_BYTES, printJob.printableAreaWidth, array4);
- memcpy(pBuf, array4, sizeof(array4));
- pBuf += sizeof(array4);
- memSetEndian(EPS_ENDIAN_BIG, EPS_4_BYTES, printJob.printableAreaHeight, array4);
- memcpy(pBuf, array4, sizeof(array4));
- pBuf += sizeof(array4);
- switch( printJob.attr.inputResolution ){
- case EPS_IR_720X720:
+ /*EPS_DBGPRINT(("(%d, %d) / (%d, %d) / (%d, %d)\n",
+ printJob.paperWidth, printJob.paperHeight,
+ printJob.topMargin, printJob.leftMargin,
+ printJob.printableAreaWidth, printJob.printableAreaHeight))*/
+ /*** Set Attributes/Values */
+ memSetEndian(EPS_ENDIAN_BIG, EPS_4_BYTES, (EPS_UINT32)printJob.paperWidth, array4);
+ memcpy(pBuf, array4, sizeof(array4));
+ pBuf += sizeof(array4);
+ memSetEndian(EPS_ENDIAN_BIG, EPS_4_BYTES, (EPS_UINT32)printJob.paperHeight, array4);
+ memcpy(pBuf, array4, sizeof(array4));
+ pBuf += sizeof(array4);
+ memSetEndian(EPS_ENDIAN_BIG, EPS_2_BYTES, (EPS_UINT32)printJob.topMargin, array2);
+ memcpy(pBuf, array2, sizeof(array2));
+ pBuf += sizeof(array2);
+ memSetEndian(EPS_ENDIAN_BIG, EPS_2_BYTES, (EPS_UINT32)printJob.leftMargin, array2);
+ memcpy(pBuf, array2, sizeof(array2));
+ pBuf += sizeof(array2);
+ memSetEndian(EPS_ENDIAN_BIG, EPS_4_BYTES, printJob.printableAreaWidth, array4);
+ memcpy(pBuf, array4, sizeof(array4));
+ pBuf += sizeof(array4);
+ memSetEndian(EPS_ENDIAN_BIG, EPS_4_BYTES, printJob.printableAreaHeight, array4);
+ memcpy(pBuf, array4, sizeof(array4));
+ pBuf += sizeof(array4);
+ switch( printJob.attr.inputResolution ){
+ case EPS_IR_720X720:
+ *pBuf++ = 0x01;
+ break;
+ case EPS_IR_300X300:
+ *pBuf++ = 0x02;
+ break;
+ case EPS_IR_600X600:
+ *pBuf++ = 0x03;
+ break;
+ case EPS_IR_360X360:
+ default:
+ *pBuf++ = 0x00;
+ break;
+ }
+ *pBuf = printJob.attr.printDirection;
+ EPS_RETURN_VOID;
+}
+
+static void MakeSizeCmd (
+
+ EPS_UINT8* pBuf
+
+){
+ EPS_LOG_FUNCIN;
+
+ /*** Skip Header */
+ pBuf += ESCPR_HEADER_LENGTH;
+
+ /*** Set Attributes/Values */
+ *pBuf++ = (EPS_UINT8)printJob.attr.mediaSizeIdx;
+ if( EPS_IS_CDDVD( printJob.attr.mediaTypeIdx ) ){
+ *pBuf++ = 0x0A;
+ } else{
+ switch( printJob.attr.printLayout ){
+ case EPS_MLID_BORDERLESS:
*pBuf++ = 0x01;
break;
- case EPS_IR_300X300:
- *pBuf++ = 0x02;
+ case EPS_MLID_CDLABEL:
+ *pBuf++ = 0x0A;
break;
- case EPS_IR_600X600:
- *pBuf++ = 0x03;
+ case EPS_MLID_DIVIDE16:
+ *pBuf++ = 0x90;
break;
- case EPS_IR_360X360:
- default:
+ default: /* FIXED, CUSTOM */
*pBuf++ = 0x00;
- break;
- }
- *pBuf = printJob.attr.printDirection;
-
- } else{ /* JPEG */
- /*** Set Attributes/Values */
- *pBuf++ = (EPS_UINT8)printJob.attr.mediaSizeIdx;
- if( EPS_IS_CDDVD( printJob.attr.mediaTypeIdx ) ){
- *pBuf++ = 0x0A;
- } else{
- switch( printJob.attr.printLayout ){
- case EPS_MLID_BORDERLESS:
- *pBuf++ = 0x01;
- break;
- case EPS_MLID_CDLABEL:
- *pBuf++ = 0x0A;
- break;
- case EPS_MLID_DIVIDE16:
- *pBuf++ = 0x90;
- break;
- default: /* FIXED, CUSTOM */
- *pBuf++ = 0x00;
- }
}
- *pBuf++ = printJob.attr.cdDimIn;
- *pBuf++ = printJob.attr.cdDimOut;
- *pBuf = printJob.attr.printDirection;
}
+ *pBuf++ = printJob.attr.cdDimIn;
+ *pBuf++ = printJob.attr.cdDimOut;
+ *pBuf = printJob.attr.printDirection;
EPS_RETURN_VOID;
}
@@ -4411,8 +4716,10 @@ EPS_ERR_CODE SendCommand (
putc(*(Buffer + i), outfp);
}
*pSize = BuffLen;
+
return EPS_ERR_NONE;
#endif
+
/*** Declare Variable Local to Routine */
EPS_ERR_CODE Ret = EPS_ERR_NONE;
EPS_INT32 retStatus;
@@ -4464,7 +4771,7 @@ EPS_ERR_CODE SendCommand (
if(gStatusCount == EPS_ROOP_NUM){
gStatusCount = 0;
if ((Ret = MonitorStatus(NULL) ) != EPS_ERR_NONE){
- EPS_DBGPRINT(("MonitorStatus=%d\n", Ret));
+ /*EPS_DBGPRINT(("MonitorStatus=%d\n", Ret));*/
if(Ret == EPS_JOB_CANCELED){
EPS_RETURN( Ret );
@@ -4494,7 +4801,7 @@ EPS_ERR_CODE SendCommand (
printJob.resetReq = TRUE;
EPS_RETURN( Ret );
} else if (Ret != EPS_COM_TINEOUT){
- EPS_DBGPRINT(("PRINT--> Print Failed [%d]\r\n",Ret));
+ /*EPS_DBGPRINT(("PRINT--> Print Failed [%d]\r\n",Ret));*/
EPS_RETURN( EPS_ERR_COMM_ERROR );
} else if(sendSize > sentSize){
Buffer += sentSize;
@@ -4605,7 +4912,6 @@ static void AdjustBasePoint (
printJob.offset_x = 0;
printJob.offset_y = 0;
-
/*** Adjust the base point for custum border printing mode */
/*** (In case that left margin = 42 and top margin = 42 are NOT inputed) */
@@ -4677,7 +4983,9 @@ static EPS_ERR_CODE PrintLine (
){
EPS_RECT AdjBandRec; /* Rectangle after BasePointAdjustment */
EPS_BANDBMP InBmp; /* Input band data */
+
EPS_LOG_FUNCIN;
+
/* Initialize input image structure */
InBmp.bits = line->data;
InBmp.widthBytes = line->bytesPerLine;
@@ -4687,7 +4995,7 @@ static EPS_ERR_CODE PrintLine (
AdjBandRec.left = line->rect.left + printJob.offset_x;
AdjBandRec.bottom = line->rect.bottom + printJob.offset_y;
AdjBandRec.right = line->rect.right + printJob.offset_x;
-
+
/* band is not visible */
if ((EPS_UINT32)AdjBandRec.bottom > printJob.printableAreaHeight){
EPS_RETURN( EPS_ERR_NONE );
@@ -4771,7 +5079,6 @@ static EPS_ERR_CODE SendLine (
sdBuf = sendDataBuf;
compData = tmpLineBuf;
-
/* EPS_DBGPRINT(("MakeOneRasterData: T,B,L,R [%d,%d,%d,%d]\r\n",
pBandRec->top, pBandRec->bottom, pBandRec->left, pBandRec->right));
*/
@@ -4800,18 +5107,12 @@ static EPS_ERR_CODE SendLine (
}
/*** RunLength Encode */
-
compDataSize = RunLengthEncode(srcAddr,
compData,
linePixelSize,
printJob.bpp,
&compFlag);
- //compFlag = EPS_RLE_COMPRESS_NOT_DONE;
- if(compDataSize < 0){
- //return compDataSize;
- }
-
/* Set Parameter Length */
paramSize = (EPS_UINT32)(ESCPR_SEND_DATA_LENGTH + compDataSize);
cmdSize = ESCPR_HEADER_LENGTH + paramSize;
@@ -4822,7 +5123,7 @@ static EPS_ERR_CODE SendLine (
/* Header */
memcpy(sdBuf, SendDataCmd, sizeof(SendDataCmd));
cpyCount += sizeof(SendDataCmd);
-
+
/* Parameter Length */
memSetEndian(EPS_ENDIAN_LITTLE, EPS_4_BYTES, (EPS_UINT32)paramSize, array4);
memcpy(sdBuf + cpyCount, array4, sizeof(array4));
@@ -4831,7 +5132,7 @@ static EPS_ERR_CODE SendLine (
/* Command Name */
memcpy(sdBuf + cpyCount, SendDataName, sizeof(SendDataName));
cpyCount += sizeof(SendDataName);
-
+
/* lXoffset */
memSetEndian(EPS_ENDIAN_BIG, EPS_2_BYTES, (EPS_UINT32)pBandRec->left, array2);
memcpy((sdBuf + cpyCount), array2, sizeof(array2));
@@ -4854,7 +5155,7 @@ static EPS_ERR_CODE SendLine (
memSetEndian(EPS_ENDIAN_BIG, EPS_2_BYTES, (EPS_UINT32)compDataSize, array2);
memcpy((sdBuf + cpyCount), array2, sizeof(array2));
cpyCount += sizeof(array2);
-
+
/* RGB Raster Data */
memcpy((sdBuf + cpyCount), compData, compDataSize);
cpyCount += compDataSize;
@@ -4863,7 +5164,6 @@ static EPS_ERR_CODE SendLine (
EPS_RETURN( EPS_ERR_OPR_FAIL );
}
-
/* Send Print Quality Command to Printer */
/*** -----------------------------------------------------*/
#if LCOMSW_PACKET_4KB /* Set 1 packett size in 4096byte */
@@ -4922,6 +5222,7 @@ static EPS_ERR_CODE SendLine (
#endif /* ESCPR_DEBUG_IMAGE_LOG */
retBufSize = 0;
+
retStatus = SendCommand(sdBuf, cmdSize, &retBufSize, TRUE);
if (!((retStatus == EPS_ERR_NONE) && (cmdSize == retBufSize))) {
EPS_RETURN( retStatus );
@@ -4974,7 +5275,7 @@ static EPS_UINT16 RunLengthEncode (
EPS_BOOL bCompress = TRUE;
EPS_LOG_FUNCIN;
-int i_index = 0;
+
while (srcCnt < pixel) {
/* In case of replay data */
if ((srcCnt + 1 < pixel) && (!memcmp(pSrcPos, pSrcPos + bpp, bpp))) {
@@ -4984,7 +5285,7 @@ int i_index = 0;
(!memcmp(pSrcPos + (repCnt - 1) * bpp, pSrcPos + repCnt * bpp, bpp)) ) {
repCnt++;
}
-
+
/* Renewal compressed data size counter */
retCnt += 1 + bpp;
@@ -4998,28 +5299,19 @@ int i_index = 0;
/* Set replay count and data */
/* Set data counter */
- if(pDstPos == NULL || (pDstPos+1) == NULL || (pDstPos + bpp) == NULL || pSrcPos == NULL ||( pSrcPos + bpp * repCnt) == NULL){
- return i_index * (-1);
- }
*pDstPos++ = (EPS_UINT8)(0xFF - repCnt + 2 );
-
+
/* Set data */
memcpy(pDstPos, pSrcPos, bpp);
/* Renewal data size counter */
srcCnt += repCnt;
- i_index += bpp * repCnt;
/* Renewal original data address */
- if((pSrcPos + bpp * repCnt) == NULL){
- return i_index * (-1);
- }
pSrcPos += bpp * repCnt;
/* Renewal compressed data address */
pDstPos += bpp;
-
-
}
/* In case of non replay data */
@@ -5046,19 +5338,14 @@ int i_index = 0;
}
/* Set data counter */
- if(pDstPos == NULL || (pDstPos +1) == NULL){
- return i_index *(-1);
- }
*pDstPos++ = (EPS_UINT8)(repCnt - 1);
+
/* Renewal data size counter */
/* Size of non replay data (byte) */
srcCnt += repCnt;
copySize = (EPS_UINT32)(repCnt * bpp);
- if(pDstPos == NULL || (pDstPos +1) == NULL || (pDstPos + copySize) == NULL || (pSrcPos + copySize) == NULL || pSrcPos == NULL){
- return i_index * (-1);
- }
-
+
/* Set data */
memcpy(pDstPos, pSrcPos, copySize);
@@ -5067,7 +5354,6 @@ int i_index = 0;
/* Renewal compressed data address */
pDstPos += copySize;
- i_index += copySize;
}
}
@@ -5083,244 +5369,92 @@ int i_index = 0;
}
+
/*******************************************|********************************************/
/* */
-/* Function name: CreateMediaInfo() */
+/* Function name: GetSupportedMedia() */
/* */
/* Arguments */
/* --------- */
-/* Name: Type: Description: */
-/* innerPrinter EPS_PRINTER_INN* I: printer that it has original structure */
-/* pmString EPS_INT8* I: PM reply string */
-/* pmSize EPS_INT32 I: size of PM reply string */
+/* Name: Type: Description: */
+/* innerPrinter EPS_PRINTER_INN* I: Pointer to a PrinterInfo */
/* */
/* Return value: */
+/* << Normal >> */
/* EPS_ERR_NONE - Success */
+/* << Error >> */
+/* EPS_ERR_COMM_ERROR - Communication Error */
+/* EPS_ERR_NOT_OPEN_IO - Cannot Open I/O Portal */
+/* EPS_ERR_NOT_CLOSE_IO - Cannot Close I/O Portal */
+/* EPS_ERR_PROTOCOL_NOT_SUPPORTED - Unsupported function Error */
/* EPS_ERR_OPR_FAIL - Internal Error */
-/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* EPS_ERR_MEMORY_ALLOCATION - Failed to allocate memory */
/* */
/* Description: */
-/* Marge paper source to EPS_SUPPORTED_MEDIA. */
+/* Get supported media information from printer and save those data in */
+/* "supportedMedia" structure. */
/* */
/*******************************************|********************************************/
-EPS_ERR_CODE CreateMediaInfo(
-
- EPS_PRINTER_INN* innerPrinter,
- EPS_UINT8* pmString,
- EPS_INT32 pmSize
-
+EPS_ERR_CODE GetSupportedMedia (
+
+ EPS_PRINTER_INN* innerPrinter
+
){
- EPS_ERR_CODE retStatus = EPS_ERR_NONE;
- EPS_UINT8* cmdField; /* Pointer of pm command field */
- EPS_INT32 pmIdx; /* pm string index */
- EPS_UINT32 idx; /* Index */
- EPS_INT32 sIdx = 0; /* Media size index */
- EPS_INT32 tIdx = 0; /* Media type index */
- EPS_INT32 num_mType = 0; /* Media type number */
- EPS_INT32 num_mSize = 0; /* Media size number */
- EPS_BOOL extPaper = FALSE; /* extend paper source is exist */
+/*** Declare Variable Local to Routine */
+ EPS_ERR_CODE retStatus; /* Return status of internal calls */
+ EPS_UINT8* pmString = NULL; /* Retrieved PM data from printer */
+ EPS_INT32 pmSize = 0;
+ EPS_BOOL paperSourceInfo = FALSE;
EPS_LOG_FUNCIN;
- /*** Is this really "PM" data */
- cmdField = (EPS_UINT8*)strstr((const char*)pmString,"PM");
- if (cmdField == NULL ) {
- EPS_DBGPRINT(("Get Model Info faild : ModelInfo = [%s]\r\n",pmString));
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
-EPS_DUMP(pmString, 256);
+/*** Initialize Local Variables */
+ retStatus = EPS_ERR_NONE;
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- if(innerPrinter->supportedMedia.numSizes != -1){
- /*** "Filter" Raw "PM" data (Remake the correct pm stirng) */
- retStatus = _SP_ChangeSpec_UpdatePMReply(innerPrinter, pmString, pmSize);
- if (retStatus != EPS_ERR_NONE) {
- EPS_RETURN( retStatus );
- }
+ if( !EPS_IS_BI_PROTOCOL(innerPrinter->protocol) ){
+ EPS_RETURN( EPS_ERR_NEED_BIDIRECT );
}
-#else
-/*** "Filter" Raw "PM" data (Remake the correct pm stirng) */
- retStatus = _SP_ChangeSpec_UpdatePMReply(innerPrinter, pmString, pmSize);
- if (retStatus != EPS_ERR_NONE) {
- EPS_RETURN( EPS_ERR_OPR_FAIL ); /* Invalid format */
- }
-#endif
-
-/*** Create the structure of the support media */
- innerPrinter->supportedMedia.resolution = EPS_IR_360X360; /* default support */
-
- /*** Count "Paper Size" field & check format */
- pmIdx = EPS_PM_HEADER_LEN; /* skip the command header of pm string */
- while( pmIdx < EPS_PM_MAXSIZE ) {
- switch(pmString[pmIdx]) {
- case 'R':
- if( 720 == ((pmString[pmIdx+1] << 8) + pmString[pmIdx+2]) ){
- innerPrinter->supportedMedia.resolution |= EPS_IR_720X720;
- } else if( 600 == ((pmString[pmIdx+1] << 8) + pmString[pmIdx+2]) ){
- innerPrinter->supportedMedia.resolution |= EPS_IR_300X300 | EPS_IR_600X600;
- } else if( 300 == ((pmString[pmIdx+1] << 8) + pmString[pmIdx+2]) ){
- innerPrinter->supportedMedia.resolution |= EPS_IR_300X300;
- }
- pmIdx += 6;
- break;
-
- case 'M':
- innerPrinter->supportedMedia.JpegSizeLimit =
- (pmString[pmIdx+1] << 24) + (pmString[pmIdx+2] << 16) + (pmString[pmIdx+3] << 8) + pmString[pmIdx+4];
- innerPrinter->JpgMax = innerPrinter->supportedMedia.JpegSizeLimit;
- pmIdx += 6;
- break;
-
- case 'S':
- /* move T field */
- if(pmIdx < EPS_PM_MAXSIZE-2){
- pmIdx += 2;
- } else{
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
-
- num_mSize++;
-
- for(; pmIdx < EPS_PM_MAXSIZE-4; pmIdx += 4) { /* 4 = T x x / */
- if(pmString[pmIdx] == '/'){
- pmIdx += 1;
- break;
- } else if(pmString[pmIdx] != 'T') {
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
- }
- if(pmIdx >= EPS_PM_MAXSIZE-4){
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
- break;
- default:
- EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
- }
-
- /* If we run into an occurrence of carriage return followed by line feed,
- * we have found the terminating characters of the string. */
- if(pmString[pmIdx] == 0x0D && pmString[pmIdx+1] == 0x0A) {
- break;
- }
- }
- if(pmIdx >= EPS_PM_MAXSIZE){
- EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
- }
-
- /* Allocate memory for the media size list. */
- innerPrinter->supportedMedia.sizeList =
- (EPS_MEDIA_SIZE*)EPS_ALLOC( sizeof(EPS_MEDIA_SIZE) * num_mSize );
- if( innerPrinter->supportedMedia.sizeList == NULL ){
- EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
- }
- memset(innerPrinter->supportedMedia.sizeList, 0, sizeof(EPS_MEDIA_SIZE) * num_mSize);
- innerPrinter->supportedMedia.numSizes = num_mSize;
-
- pmIdx = EPS_PM_HEADER_LEN; /* skip the command header of pm string */
- for(sIdx = 0; sIdx < num_mSize; sIdx++) {
- if(pmString[pmIdx] == 'M' || pmString[pmIdx] == 'R') {
- pmIdx += 6;
- sIdx--;
- continue;
- }
+ /* Clear the prev value */
+ prtClearPrinterAttribute(innerPrinter);
- innerPrinter->supportedMedia.sizeList[sIdx].mediaSizeID = pmString[pmIdx+1];
-/* EPS_DBGPRINT(("Size=%d\r\n", pmString[pmIdx+1]));*/
- pmIdx += 2;
+ /*** ESC/Page divergence ***/
+ if(EPS_LANG_ESCPR != innerPrinter->language ){
+ /*** Get PM from Printer */
+ retStatus = prtGetInfo(innerPrinter, EPS_CBTCOM_PM, &pmString, &pmSize);
- /* For the given paper type, iterate through the paper type to get the number
- * of media types contained in it */
- num_mType = 0;
- for(idx = pmIdx; idx < EPS_PM_MAXSIZE-4; idx += 4) {
- if(pmString[idx] == '/'){
- idx += 1;
- break;
- }
- num_mType++;
+#ifdef GCOMSW_CMD_ESCPAGE
+ if( EPS_ERR_NONE == retStatus ) {
+ /*** Create Media Infomation */
+ retStatus = pageCreateMediaInfo(innerPrinter, pmString, pmSize);
}
-
- /* Allocate memory for the media type array. */
- innerPrinter->supportedMedia.sizeList[sIdx].typeList =
- (EPS_MEDIA_TYPE*)EPS_ALLOC( sizeof(EPS_MEDIA_TYPE) * num_mType );
-
- if (innerPrinter->supportedMedia.sizeList[sIdx].typeList == NULL) {
- EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
- }
-
- memset(innerPrinter->supportedMedia.sizeList[sIdx].typeList, 0, sizeof(EPS_MEDIA_TYPE) * num_mType);
- innerPrinter->supportedMedia.sizeList[sIdx].numTypes = num_mType;
-
- for(tIdx = 0; tIdx < num_mType; tIdx++) {
- innerPrinter->supportedMedia.sizeList[sIdx].typeList[tIdx].mediaTypeID = pmString[pmIdx+1];
-/* EPS_DBGPRINT(("\tType=%d (%02X)\r\n", pmString[pmIdx+1], pmString[pmIdx+2]));*/
-
- /* Bitwise OR with 10000000 - Check for borderless */
- if( pmString[pmIdx+2] & 0x80 ){
- innerPrinter->supportedMedia.sizeList[sIdx].typeList[tIdx].layout |= EPS_MLID_BORDERLESS;
- }
- /* Bitwise OR with 01000000 - Check for border "disable" mode */
- if( !(pmString[pmIdx+2] & 0x40) ){
- innerPrinter->supportedMedia.sizeList[sIdx].typeList[tIdx].layout |= EPS_MLID_BORDERS;
- }
-
- /* set quality */
- innerPrinter->supportedMedia.sizeList[sIdx].typeList[tIdx].quality |= (pmString[pmIdx+2] & EPS_MQID_ALL);
-
- /* set duplex */
- if( pmString[pmIdx+2] & 0x10 &&
- obsEnableDuplex(innerPrinter->supportedMedia.sizeList[sIdx].mediaSizeID) ){
- innerPrinter->supportedMedia.sizeList[sIdx].typeList[tIdx].duplex = EPS_DUPLEX_ENABLE;/*EPS_DUPLEX_SHORT*/;
- } else{
- innerPrinter->supportedMedia.sizeList[sIdx].typeList[tIdx].duplex = EPS_DUPLEX_DISABLE;
- }
-
- /* Bitwise OR with 00001000 - Check for extend paper source */
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- if( pmString[pmIdx+2] & 0x08 ){
- extPaper = TRUE;
- } else {
- /* DEFAULT. All printer support rear paper source */
- innerPrinter->supportedMedia.sizeList[sIdx].typeList[tIdx].paperSource = EPS_MPID_REAR;
- }
-
- /* param2 value check */
- if( !(pmString[pmIdx+2] & (0x01 | 0x02 | 0x04)) ){
- printf("\n\n!!!!!!!!! Quality is not described. !!!!!!!!!\n"
- "SizeID=0x%02X / TypeID=0x%02X / param2=0x%02X\n",
- innerPrinter->supportedMedia.sizeList[sIdx].mediaSizeID,
- pmString[pmIdx+1], pmString[pmIdx+2]);
- }
- if( !(pmString[pmIdx+2] & 0x80) && (pmString[pmIdx+2] & 0x40) ){
- printf("\n\n!!!!!!!!! Layout is not described. !!!!!!!!!\n"
- "SizeID=0x%02X / TypeID=0x%02X / param2=0x%02X\n",
- innerPrinter->supportedMedia.sizeList[sIdx].mediaSizeID,
- pmString[pmIdx+1], pmString[pmIdx+2]);
- }
-
#else
- if( pmString[pmIdx+2] & 0x08 ){
- extPaper = TRUE;
- }
- /* DEFAULT. All printer support rear paper source */
- innerPrinter->supportedMedia.sizeList[sIdx].typeList[tIdx].paperSource = EPS_MPID_REAR;
+ retStatus = EPS_ERR_LANGUAGE_NOT_SUPPORTED;
#endif
- pmIdx += 4; /* move next field */
- }
- pmIdx += 1; /* skip terminater */
- }
-/*** Add extend infomation */
- if( EPS_ERR_NONE == retStatus && TRUE == extPaper ){
- retStatus = GetPaperSource(innerPrinter);
+ } else {
+ /*** Get PM from Printer */
+ retStatus = prtGetInfo(innerPrinter, EPS_CBTCOM_PM3, &pmString, &pmSize);
+ if ( EPS_ERR_NONE == retStatus ){
+ retStatus = epspmCreateMediaInfo3(innerPrinter, pmString, pmSize);
+ } else if(EPS_ERR_PRINTER_NOT_SUPPORTED == retStatus){
+ retStatus = prtGetInfo(innerPrinter, EPS_CBTCOM_PM, &pmString, &pmSize);
+ if ( EPS_ERR_NONE == retStatus ){
+ /*** Create Media Infomation */
+ retStatus = epspmCreateMediaInfo(innerPrinter, pmString, pmSize, &paperSourceInfo);
+ if( EPS_ERR_NONE == retStatus && TRUE == paperSourceInfo ){
+ retStatus = GetPaperSource(innerPrinter);
+ }
+ }
+ }
if( EPS_ERR_NONE != retStatus){
- prtClearSupportedMedia(innerPrinter);
+ prtClearPrinterAttribute(innerPrinter);
}
}
+ EPS_SAFE_RELEASE(pmString);
- serAppendMedia(&innerPrinter->supportedMedia);
-
- EPS_RETURN( retStatus );
+/*** Return to Caller */
+ EPS_RETURN( retStatus );
}
@@ -5347,223 +5481,22 @@ EPS_ERR_CODE GetPaperSource(
){
EPS_ERR_CODE ret = EPS_ERR_NONE;
- EPS_UINT8 pmString[EPS_PM_MAXSIZE]; /* Retrieved PM data from printer */
- EPS_INT32 pmSize = EPS_PM_MAXSIZE;
- EPS_UINT32 pmIdx; /* pm string index */
- EPS_INT32 sIdx = 0; /* Media size index */
- EPS_INT32 tIdx = 0; /* Media type index */
- EPS_MEDIA_SIZE *pMSize = NULL;
+ EPS_UINT8* pmString = NULL; /* Retrieved PM data from printer */
+ EPS_INT32 pmSize = 0;
EPS_LOG_FUNCIN;
- /* Clear the Printer Model Information (Media data or "PM" data) */
- memset(pmString, 0, EPS_PM_MAXSIZE);
-
/*** Get PM2 from Printer */
- ret = prtGetPMString(innerPrinter, 2, pmString, &pmSize);
+ ret = prtGetInfo(innerPrinter, EPS_CBTCOM_PM2, &pmString, &pmSize);
if(ret == EPS_ERR_PROTOCOL_NOT_SUPPORTED){
EPS_RETURN( EPS_ERR_NONE );
} else if(ret != EPS_ERR_NONE){
EPS_RETURN( ret );
}
- /*** Is this really "PM" data */
- if( strstr((const char*)pmString, "PM") == NULL ) {
- EPS_DBGPRINT(("Get Model Info faild : ModelInfo = [%s]\r\n", pmString));
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
+ ret = epspmMargePaperSource(innerPrinter, pmString, pmSize);
- /* Delete the command header of pm string */
- pmIdx = EPS_PM_HEADER_LEN; /* skip the command header of pm string */
-
-/*** Check to make sure the PM reply has a valid beginning */
- if(pmString[pmIdx] != 'S' && pmString[pmIdx+2] != 'T') {
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
-
-/*** Create the structure of the support media */
- /*** Count "Paper Size" field & check format */
- for(; pmIdx < EPS_PM_MAXSIZE-7; ) { /* 7 = S x T x x // */
- if(pmString[pmIdx] != 'S') {
- EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
- }
-
- /* search size ID */
- pmIdx++;
- pMSize = NULL;
- for(sIdx = 0; sIdx < innerPrinter->supportedMedia.numSizes; sIdx++){
- if(pmString[pmIdx] == innerPrinter->supportedMedia.sizeList[sIdx].mediaSizeID){
- pMSize = &innerPrinter->supportedMedia.sizeList[sIdx];
-/* EPS_DBGPRINT(("Size = %d\n", innerPrinter->supportedMedia.sizeList[sIdx].mediaSizeID))*/
- break;
- }
- }
-
- pmIdx++; /* move next field */
-
- while( pmIdx < EPS_PM_MAXSIZE-4 ){ /* 4 = T x x / */
- if(pmString[pmIdx] == 'T'){
- if(NULL != pMSize){
- /* search type ID */
- pmIdx++;
- for(tIdx = 0; tIdx < pMSize->numTypes; tIdx++){
- if(pmString[pmIdx] == pMSize->typeList[tIdx].mediaTypeID){
- pMSize->typeList[tIdx].paperSource = pmString[pmIdx+1];
-#if !_VALIDATE_SUPPORTED_MEDIA_DATA_
- pMSize->typeList[tIdx].paperSource &= EPS_MPID_ALL_ESCPR;
-#endif
- pmIdx += 3;
- break;
- }
- }
- if(tIdx >= pMSize->numTypes){
- /* Skip unknown T */
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- printf("\n\n!!!!!!!!! pm2 contains TypeID(0x%02X) that doesn't exist in pm1. !!!!!!!!!\n", pmString[pmIdx]);
-#endif
- pmIdx += 3;
- }
- } else{
- /* Skip unknown S */
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- printf("\n\n!!!!!!!!! pm2 contains SizeID(0x%02X) that doesn't exist in pm1. !!!!!!!!!\n", pmString[pmIdx]);
-#endif
- pmIdx += 4;
- }
- } else if(pmString[pmIdx] == '/') {
- pmIdx++;
- break;
- } else{
- EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
- }
- }
- if(pmIdx >= EPS_PM_MAXSIZE-4){
- EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
- }
-
- /* If we run into an occurrence of carriage return followed by line feed,
- * we have found the terminating characters of the string. */
- if(pmString[pmIdx] == 0x0D && pmString[pmIdx+1] == 0x0A) {
- break;
- }
- }
- if(pmIdx >= EPS_PM_MAXSIZE){
- EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
- }
-
- EPS_RETURN( ret );
-}
-
-
-/*******************************************|********************************************/
-/* */
-/* Function name: GetJpgMax() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* innerPrinter EPS_PRINTER_INN* IO: printer that it has original structure */
-/* */
-/* Return value: */
-/* EPS_ERR_NONE - Success */
-/* EPS_ERR_OPR_FAIL - Internal Error */
-/* */
-/* Description: */
-/* Marge paper source to EPS_SUPPORTED_MEDIA. */
-/* */
-/*******************************************|********************************************/
-EPS_ERR_CODE GetJpgMax(
-
- EPS_PRINTER_INN* printer
-
-){
- EPS_ERR_CODE ret = EPS_ERR_NONE;
- EPS_UINT8 pmString[EPS_PM_MAXSIZE]; /* Retrieved PM data from printer */
- EPS_INT32 pmSize = EPS_PM_MAXSIZE;
- EPS_UINT32 pmIdx; /* pm string index */
-
- EPS_LOG_FUNCIN;
-
- if( !EPS_IS_BI_PROTOCOL(printJob.printer->protocol) ){ /* Uni direction */
- /* set unlimited(2GB) */
- printer->JpgMax = EPS_JPEG_SIZE_UNLIMIT;
- EPS_RETURN( EPS_ERR_NONE )
- }
-
- /* Clear the Printer Model Information (Media data or "PM" data) */
- memset(pmString, 0, EPS_PM_MAXSIZE);
-
-/*** Get PM1 from Printer */
- ret = prtGetPMString(printer, 1, pmString, &pmSize);
- if(ret == EPS_ERR_PROTOCOL_NOT_SUPPORTED){
- /* set unlimited(2GB) */
- printer->JpgMax = EPS_JPEG_SIZE_UNLIMIT;
- EPS_RETURN( EPS_ERR_NONE )
- } else if(ret != EPS_ERR_NONE){
- EPS_RETURN( ret );
- }
-
-/*** "Filter" Raw "PM" data (Remake the correct pm stirng) */
- ret = _SP_ChangeSpec_UpdatePMReply(printer, pmString, pmSize);
- if (ret != EPS_ERR_NONE) {
- EPS_RETURN( EPS_ERR_OPR_FAIL ); /* Invalid format */
- }
-
- /*** Is this really "PM" data */
- if( strstr((const char*)pmString, "PM") == NULL ) {
- EPS_DBGPRINT(("Get Model Info faild : ModelInfo = [%s]\r\n", pmString));
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
-
- /* Delete the command header of pm string */
- pmIdx = EPS_PM_HEADER_LEN; /* skip the command header of pm string */
- while( pmIdx < EPS_PM_MAXSIZE ) {
- switch(pmString[pmIdx]) {
- case 'M':
- printer->JpgMax =
- (pmString[pmIdx+1] << 24) + (pmString[pmIdx+2] << 16) + (pmString[pmIdx+3] << 8) + pmString[pmIdx+4];
-
- pmIdx += 6;
- break;
-
- case 'R':
- pmIdx += 6;
- break;
-
- case 'S':
- /* move T field */
- if(pmIdx < EPS_PM_MAXSIZE-2){
- pmIdx += 2;
- } else{
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
-
- for(; pmIdx < EPS_PM_MAXSIZE-4; pmIdx += 4) { /* 4 = T x x / */
- if(pmString[pmIdx] == '/'){
- pmIdx += 1;
- break;
- } else if(pmString[pmIdx] != 'T') {
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
- }
- if(pmIdx >= EPS_PM_MAXSIZE-4){
- EPS_RETURN( EPS_ERR_OPR_FAIL );
- }
- break;
-
- default:
- EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
- }
-
- /* If we run into an occurrence of carriage return followed by line feed,
- * we have found the terminating characters of the string. */
- if(pmString[pmIdx] == 0x0D && pmString[pmIdx+1] == 0x0A) {
- break;
- }
- }
- if(pmIdx >= EPS_PM_MAXSIZE || 0 == printer->JpgMax){
- EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
- }
+ EPS_SAFE_RELEASE(pmString);
EPS_RETURN( ret );
}
@@ -5594,92 +5527,18 @@ EPS_ERR_CODE DuplSupportedMedia(
){
EPS_ERR_CODE ret = EPS_ERR_NONE;
- EPS_INT32 idx;
EPS_LOG_FUNCIN;
- ClearSupportedMedia();
-
- g_supportedMedia.JpegSizeLimit = innerPrinter->supportedMedia.JpegSizeLimit;
- g_supportedMedia.resolution = innerPrinter->supportedMedia.resolution;
- g_supportedMedia.numSizes = innerPrinter->supportedMedia.numSizes;
- g_supportedMedia.sizeList = (EPS_MEDIA_SIZE*)EPS_ALLOC( sizeof(EPS_MEDIA_SIZE) * innerPrinter->supportedMedia.numSizes );
- if( g_supportedMedia.sizeList ){
- for(idx = 0; idx < innerPrinter->supportedMedia.numSizes; idx++) {
- g_supportedMedia.sizeList[idx].mediaSizeID = innerPrinter->supportedMedia.sizeList[idx].mediaSizeID;
- g_supportedMedia.sizeList[idx].numTypes = innerPrinter->supportedMedia.sizeList[idx].numTypes;
- g_supportedMedia.sizeList[idx].typeList =
- (EPS_MEDIA_TYPE*)EPS_ALLOC( sizeof(EPS_MEDIA_TYPE) * innerPrinter->supportedMedia.sizeList[idx].numTypes );
- if( g_supportedMedia.sizeList[idx].typeList ){
- memcpy(g_supportedMedia.sizeList[idx].typeList,
- innerPrinter->supportedMedia.sizeList[idx].typeList,
- sizeof(EPS_MEDIA_TYPE) * innerPrinter->supportedMedia.sizeList[idx].numTypes);
- } else{
- ret = EPS_ERR_MEMORY_ALLOCATION;
- break;
- }
- }
- } else{
- ret = EPS_ERR_MEMORY_ALLOCATION;
- }
-
- if(EPS_ERR_NONE == ret){
- /* Copy to out param */
- pMedia->JpegSizeLimit = g_supportedMedia.JpegSizeLimit;
- pMedia->resolution = g_supportedMedia.resolution;
- pMedia->numSizes = g_supportedMedia.numSizes;
- pMedia->sizeList = g_supportedMedia.sizeList;
-
- } else{
- /* If error occur, unwind. */
- for(idx = 0; idx < g_supportedMedia.numSizes; idx++) {
- EPS_SAFE_RELEASE(g_supportedMedia.sizeList[idx].typeList);
- }
- EPS_SAFE_RELEASE(g_supportedMedia.sizeList);
- g_supportedMedia.numSizes = 0;
- }
+ /* Copy to out param */
+ pMedia->JpegSizeLimit = innerPrinter->supportedMedia.JpegSizeLimit;
+ pMedia->resolution = innerPrinter->supportedMedia.resolution;
+ pMedia->numSizes = innerPrinter->supportedMedia.numSizes;
+ pMedia->sizeList = innerPrinter->supportedMedia.sizeList;
EPS_RETURN( ret );
}
-
-/*******************************************|********************************************/
-/* */
-/* Function name: ClearSupportedMedia() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* (none) */
-/* */
-/* Return value: */
-/* void */
-/* */
-/* Description: */
-/* Crean up inside list of supported media structure. */
-/* */
-/*******************************************|********************************************/
-void ClearSupportedMedia(
-
- void
-
-){
- EPS_INT32 idx;
-
- EPS_LOG_FUNCIN;
-
- /* Clear "supportedMedia" */
- if( NULL != g_supportedMedia.sizeList){
- for(idx = 0; idx < g_supportedMedia.numSizes; idx++) {
- EPS_SAFE_RELEASE(g_supportedMedia.sizeList[idx].typeList);
- }
- EPS_SAFE_RELEASE(g_supportedMedia.sizeList);
- g_supportedMedia.numSizes = 0;
- }
-
- EPS_RETURN_VOID;
-}
-
/*_______________________________ epson-escpr-api.c ________________________________*/
/*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
diff --git a/lib/epson-escpr-api.h b/lib/epson-escpr-api.h
index 2811577..9b0ce77 100755..100644
--- a/lib/epson-escpr-api.h
+++ b/lib/epson-escpr-api.h
@@ -34,6 +34,7 @@ extern "C" {
/* GCOMSW_DEBUG Enable Debug monde. */
+/*#define GCOMSW_UPDATE_PAGE_REMAINDER 0 */
/*------------------------------------ Includes -------------------------------------*/
/*******************************************|********************************************/
@@ -42,6 +43,8 @@ extern "C" {
#include "epson-escpr-err.h"
#include "epson-escpr-media.h"
+#include "epson-escpr-pvt.h"
+
/*---------------------------------- Generic Macros ---------------------------------*/
/*******************************************|********************************************/
@@ -67,7 +70,11 @@ extern EPS_ERR_CODE epsStartJob (const EPS_JOB_ATTRIB*
extern EPS_ERR_CODE epsStartPage (const EPS_PAGE_ATTRIB* );
extern EPS_ERR_CODE epsSendData (EPS_PRN_DATA* );
extern EPS_ERR_CODE epsPrintBand (const EPS_UINT8*, EPS_UINT32, EPS_UINT32* );
+#if GCOMSW_UPDATE_PAGE_REMAINDER
+extern EPS_ERR_CODE epsEndPage (EPS_INT32 );
+#else
extern EPS_ERR_CODE epsEndPage (EPS_BOOL );
+#endif
extern EPS_ERR_CODE epsEndJob (void );
extern EPS_ERR_CODE epsCancelJob (EPS_INT32 );
extern EPS_ERR_CODE epsContinueJob (void );
@@ -85,6 +92,7 @@ extern EPS_ERR_CODE epsCancelFindPrinter (void
/*** -------------------------------------------------------------------------------*/
extern EPS_ERR_CODE epsGetStatus (EPS_STATUS* );
extern EPS_ERR_CODE epsGetInkInfo (EPS_INK_INFO* );
+extern EPS_ERR_CODE epsGetSupplyInfo (EPS_SUPPLY_INFO* );
/*** Get Supported Media Function */
/*** -------------------------------------------------------------------------------*/
@@ -93,6 +101,11 @@ extern EPS_ERR_CODE epsGetSupportedMedia (EPS_SUPPORTED_MEDIA*
/*** Get Printable Area */
/*** -------------------------------------------------------------------------------*/
extern EPS_ERR_CODE epsGetPrintableArea (EPS_JOB_ATTRIB*, EPS_UINT32*, EPS_UINT32* );
+extern EPS_ERR_CODE epsGetPrintAreaInfo (const EPS_JOB_ATTRIB*, EPS_UINT32*, EPS_UINT32*,
+ EPS_LAYOUT_INFO* );
+extern EPS_ERR_CODE epsGetPrintAreaInfoAll(EPS_UINT32, EPS_PRINT_AREA_INFO* );
+extern EPS_ERR_CODE epsGetUsersizeRange (EPS_UINT8, EPS_UINT32*, EPS_UINT32*,
+ EPS_UINT32*, EPS_UINT32* );
/*** Maintenance Command function */
/*** -------------------------------------------------------------------------------*/
diff --git a/lib/epson-escpr-dbg.c b/lib/epson-escpr-dbg.c
index 683f0aa..683f0aa 100755..100644
--- a/lib/epson-escpr-dbg.c
+++ b/lib/epson-escpr-dbg.c
diff --git a/lib/epson-escpr-dbg.h b/lib/epson-escpr-dbg.h
index 1dfa8d8..5239339 100755..100644
--- a/lib/epson-escpr-dbg.h
+++ b/lib/epson-escpr-dbg.h
@@ -56,8 +56,8 @@ extern void dbgFree(void *p);
#define EPS_MEM_REPORT_PEAK dbgMemReportPeak();
#define EPS_MEM_GET_PEAK dbgMemGetPeak()
#define EPS_MEM_REPORT_LEAK dbgMemReportLeak();
-#define EPS_ALLOC( s ) dbgAlloc( __FILE__, __LINE__, (EPS_UINT32)s )
-#define EPS_FREE( p ) dbgFree( (void*)p )
+#define EPS_ALLOC( s ) dbgAlloc( __FILE__, __LINE__, (EPS_UINT32)(s) )
+#define EPS_FREE( p ) dbgFree( (void*)(p) )
/*** PRINT */
diff --git a/lib/epson-escpr-def.h b/lib/epson-escpr-def.h
index 51a9800..eb69b02 100755..100644
--- a/lib/epson-escpr-def.h
+++ b/lib/epson-escpr-def.h
@@ -18,8 +18,8 @@
/* Epson ESC/PR External Definitions */
/* */
/*******************************************|********************************************/
-#ifndef __EPSON_ESCPR_DEF_2_H__
-#define __EPSON_ESCPR_DEF_2_H__
+#ifndef __EPSON_ESCPR_DEF_H__
+#define __EPSON_ESCPR_DEF_H__
#ifdef __cplusplus
extern "C" {
#endif
@@ -28,6 +28,12 @@ extern "C" {
/*******************************************|********************************************/
#include "epson-typedefs.h"
+/*------------------------------ Local Compiler Switch -------------------------------*/
+/*******************************************|********************************************/
+/* Network Intarface bind option. following items are only either one in effect. */
+#define LCOMSW_BINDIF_IF_NEED 0 /* 1: bind interface when send find packet error*/
+#define LCOMSW_USE_MULTI_IF 0 /* 1: bind multi interface */
+
/*------------------------------------- Data Types -------------------------------------*/
/*******************************************|********************************************/
@@ -36,10 +42,17 @@ extern "C" {
/*----------------------------------- Definitions ------------------------------------*/
/*******************************************|********************************************/
+
+#define EPS_IFNAME_LEN (16)
+
/*** Maximum Ink Cartridge Number */
/*** -------------------------------------------------------------------------------*/
#define EPS_INK_NUM 20
+ /*** Maximum PaperSource Number */
+ /*** -------------------------------------------------------------------------------*/
+#define EPS_PAPERSOURCE_NUM 20
+
/*** Buffer size for manufacter name and model name */
/*** -------------------------------------------------------------------------------*/
#define EPS_NAME_BUFFSIZE 64
@@ -279,7 +292,24 @@ enum EPS_COLOR {
EPS_COLOR_ORANGE,
EPS_COLOR_GREEN,
EPS_COLOR_WHITE,
- EPS_COLOR_CLEAN
+ EPS_COLOR_CLEAN,
+
+ /* add ver5.4*/
+ EPS_COLOR_COMPOSITE,
+};
+
+ /*** Power info */
+ /*** -------------------------------------------------------------------------------*/
+enum EPS_POWER_SOUECE {
+ EPS_POWER_SOUECE_NOT_SUPPORTED = -1,
+ EPS_POWER_SOUECE_UNKNOWN = 0,
+ EPS_POWER_SOUECE_AC,
+ EPS_POWER_SOUECE_BATTERY,
+};
+
+enum EPS_CHARGE_STATE {
+ EPS_CHARGE_STATE_NONE,
+ EPS_CHARGE_STATE_CHARGING,
};
@@ -307,6 +337,8 @@ typedef struct _tagEPS_PRINTER_ {
/* ver 5.0 */
EPS_UINT32 language; /* print language */
EPS_INT8 macAddress[EPS_ADDR_BUFFSIZE];
+ /* ver 5.2 */
+ EPS_INT8 serialNo[EPS_ADDR_BUFFSIZE];
} EPS_PRINTER;
@@ -361,12 +393,19 @@ typedef struct _tagEPS_JOB_ATTRIB_ {
EPS_INT32 duplex; /* Duplex print */
EPS_INT32 copies; /* copies count */
EPS_INT32 feedDirection; /* paper feed direction */
+
+ /* -------------------------------------------------------------------------------- */
+ /* Ver 4 */
+ EPS_UINT32 userDefWidth; /* user defined width */
+ EPS_UINT32 userDefHeight; /* user defined height */
+ EPS_INT32 pageNum; /* amount of pages */
} EPS_JOB_ATTRIB;
#define EPS_JOB_ATTRIB_VER_1 1
#define EPS_JOB_ATTRIB_VER_2 2
#define EPS_JOB_ATTRIB_VER_3 3
-#define EPS_JOB_ATTRIB_VER_CUR EPS_JOB_ATTRIB_VER_3
+#define EPS_JOB_ATTRIB_VER_4 4
+#define EPS_JOB_ATTRIB_VER_CUR EPS_JOB_ATTRIB_VER_4
/*** Page Attributes */
@@ -378,24 +417,6 @@ typedef struct _tagEPS_PAGE_ATTRIB_ {
#define EPS_PAGE_ATTRIB_VER_CUR EPS_PAGE_ATTRIB_VER_0
- /*** Additional Data */
- /*** -------------------------------------------------------------------------------*/
-#if 0 /* DEL */
-typedef struct _tagEPS_QRCODE_ {
- EPS_UINT16 version; /* structure version */
- EPS_INT8* source; /* source buffer */
- EPS_UINT16 srcLength; /* source size */
- EPS_INT32 xPos; /* Left position */
- EPS_INT32 yPos; /* Top position */
- EPS_UINT32 width; /* width */
-} EPS_QRCODE;
-#define EPS_QRCODE_VER_1 1
-#define EPS_QRCODE_VER_CUR EPS_QRCODE_VER_1
-
-#define EPS_ADDDATA_NONE 0x00
-#define EPS_ADDDATA_QRCODE 0x01
-#endif
-
/*** Print Data */
/*** -------------------------------------------------------------------------------*/
typedef union _tagEPS_PRN_DATA_ {
@@ -432,8 +453,34 @@ typedef struct _tagEPS_INK_INFO_ {
EPS_INT32 number;
EPS_INT32 colors[EPS_INK_NUM];
EPS_INT32 remaining[EPS_INK_NUM];
+ EPS_INT32 status[EPS_INK_NUM];
} EPS_INK_INFO;
+ /*** Paper setting infomation */
+ /*** -------------------------------------------------------------------------------*/
+typedef struct _tagEPS_PAPERSOURCE_INFO_ {
+ EPS_INT32 number;
+ EPS_UINT32 id[EPS_PAPERSOURCE_NUM];
+ EPS_INT32 mediaSizeID[EPS_PAPERSOURCE_NUM];
+ EPS_INT32 mediaTypeID[EPS_PAPERSOURCE_NUM];
+} EPS_PAPERSOURCE_INFO;
+
+ /*** Power source infomation */
+ /*** -------------------------------------------------------------------------------*/
+typedef struct _tagEPS_POWERSOURCE_INFO_ {
+ EPS_UINT32 type;
+ EPS_UINT32 chargeState;
+ EPS_INT32 remaining;
+} EPS_POWERSOURCE_INFO;
+
+ /*** supplies infomation */
+ /*** -------------------------------------------------------------------------------*/
+typedef struct _tagEPS_SUPPLY_INFO_ {
+ EPS_INK_INFO ink;
+ EPS_PAPERSOURCE_INFO paperSource;
+ EPS_POWERSOURCE_INFO powerSource;
+} EPS_SUPPLY_INFO;
+
/*** Supported Media Information */
/*** -------------------------------------------------------------------------------*/
/* Media Type and Printing Modes */
@@ -470,7 +517,37 @@ typedef struct _tagEPS_SUPPORTED_MEDIA_ {
EPS_UINT32 resolution; /* supported input resolution */
}EPS_SUPPORTED_MEDIA;
- /* USB device infomation */
+
+ /*** Print Area Information */
+ /*** -------------------------------------------------------------------------------*/
+typedef struct _tagEPS_MARGIN_ {
+ EPS_INT32 top;
+ EPS_INT32 left;
+ EPS_INT32 bottom;
+ EPS_INT32 right;
+} EPS_MARGIN;
+
+typedef struct _tagEPS_LAYOUT_INFO_ {
+ EPS_UINT32 layout;
+ EPS_MARGIN margin;
+}EPS_LAYOUT_INFO;
+
+typedef struct _tagEPS_LAYOUTSIZE_INFO_ {
+ EPS_INT32 mediaSizeID;
+ EPS_UINT32 paperWidth;
+ EPS_UINT32 paperHeight;
+ EPS_INT32 numLayouts;
+ EPS_LAYOUT_INFO* layoutList;
+}EPS_LAYOUTSIZE_INFO;
+
+typedef struct _tagEPS_PRINT_AREA_INFO_ {
+ EPS_INT32 numSizes;
+ EPS_LAYOUTSIZE_INFO* sizeList;
+}EPS_PRINT_AREA_INFO;
+
+
+ /*** USB device Information */
+ /*** -------------------------------------------------------------------------------*/
typedef struct _tagEPS_USB_DEVICE_ {
EPS_UINT32 vid; /* vender ID */
EPS_UINT32 pid; /* product ID */
@@ -534,7 +611,8 @@ typedef EPS_FILEDSC (*EPS_OpenPortal )(const EPS_USB_DEVICE*
typedef EPS_INT32 (*EPS_ClosePortal )(EPS_FILEDSC );
typedef EPS_INT32 (*EPS_ReadPortal )(EPS_FILEDSC, EPS_UINT8*, EPS_INT32, EPS_INT32*);
typedef EPS_INT32 (*EPS_WritePortal )(EPS_FILEDSC, const EPS_UINT8*, EPS_INT32, EPS_INT32*);
-typedef EPS_INT32 (*EPS_GetDeviceID )(EPS_FILEDSC, EPS_INT8* );
+typedef EPS_INT32 (*EPS_GetDeviceID )(EPS_FILEDSC, EPS_INT8*, EPS_INT32* );
+typedef EPS_INT32 (*EPS_SoftReset )(EPS_FILEDSC );
/*** Sockets Function Definitions */
@@ -556,7 +634,12 @@ typedef EPS_INT32 (*EPS_NetReceiveFrom )(EPS_SOCKET, void*, EPS_INT32,
typedef EPS_INT32 (*EPS_NetGetSockName )(EPS_SOCKET, EPS_INT8*, EPS_UINT16* );
typedef EPS_INT32 (*EPS_NetSetMulticastTTL )(EPS_SOCKET, EPS_INT32 );
typedef EPS_INT32 (*EPS_NetSetBroadCast )(EPS_SOCKET );
-
+#if LCOMSW_USE_MULTI_IF
+typedef EPS_INT32 (*EPS_NetEnumInterface )(EPS_UINT8*, EPS_UINT32 );
+typedef EPS_INT32 (*EPS_NetBindInterface )(EPS_SOCKET, const EPS_UINT8* );
+#elif LCOMSW_BINDIF_IF_NEED
+typedef EPS_INT32 (*EPS_NetBindInterface )(EPS_SOCKET );
+#endif
/*** External Function Definitions */
/*** -------------------------------------------------------------------------------*/
@@ -587,6 +670,8 @@ typedef struct _tagEPS_USB_FUNC_ {
EPS_FindFirstPort findFirst; /* Find usb device start Function */
EPS_FindNextPort findNext; /* Find next usb device Function */
EPS_FindClose findClose; /* Find process end Function */
+ EPS_GetDeviceID getDeviceID; /* Get Device ID Function */
+ EPS_SoftReset softReset; /* USB soft reset Function */
} EPS_USB_FUNC;
#define EPS_USBFUNC_VER_1 1
@@ -610,6 +695,12 @@ typedef struct _tagEPS_NET_FUNC_ {
EPS_NetGetSockName getsockname; /* getsockname Function */
EPS_NetSetMulticastTTL setMulticastTTL; /* Set Multicast TTL Function */
EPS_NetSetBroadCast setBroadcast; /* Set enable broadcast Function */
+#if LCOMSW_USE_MULTI_IF
+ EPS_NetEnumInterface enumInterface;
+ EPS_NetBindInterface bindInterface;
+#elif LCOMSW_BINDIF_IF_NEED
+ EPS_NetBindInterface bindInterface;
+#endif
} EPS_NET_FUNC;
#define EPS_NETFUNC_VER_1 1
#define EPS_NETFUNC_VER_CUR EPS_USBFUNC_VER_1
diff --git a/lib/epson-escpr-err.h b/lib/epson-escpr-err.h
index f6e068c..8237b01 100755..100644
--- a/lib/epson-escpr-err.h
+++ b/lib/epson-escpr-err.h
@@ -42,6 +42,7 @@ extern "C" {
#define EPS_JOB_CANCELED 40 /* Printing job is canceled by user */
#define EPS_OUT_OF_BOUNDS 41 /* Print band is in out of printable area */
#define EPS_FIND_CANCELED 42 /* Find printer is canceled by user */
+#define EPS_TEMPORARY_VALUE 43 /* output value is temporary */
/*----------------------- Error Return Value of ESC/P-R Lib API ----------------------*/
/*******************************************|********************************************/
@@ -62,6 +63,7 @@ enum EPS_RUN_TIME_ERROR {
EPS_ERR_INVALID_VERSION = -1013, /* Invalid structure version */
EPS_ERR_INVALID_DATATYPE = -1014, /* Invalid data type */
EPS_ERR_LANGUAGE_NOT_SUPPORTED = -1015, /* Unsupported function Error (language) */
+ EPS_ERR_PRINTER_NOT_SUPPORTED = -1016, /* Unsupported function Error (printer model) */
/*** Library Status Error */
/*** -------------------------------------------------------------------------------*/
@@ -96,6 +98,8 @@ enum EPS_RUN_TIME_ERROR {
EPS_ERR_INV_FNCP_FINDFIRST = -1215, /* Invalid function pointer "findFirst" */
EPS_ERR_INV_FNCP_FINDNEXT = -1216, /* Invalid function pointer "findNext" */
EPS_ERR_INV_FNCP_FINDCLOSE = -1217, /* Invalid function pointer "findClose" */
+ EPS_ERR_INV_FNCP_GETDEVICEID = -1218, /* Invalid function pointer "getDeviceID" */
+ EPS_ERR_INV_FNCP_SOFTRESET = -1219, /* Invalid function pointer "softReset" */
EPS_ERR_INV_FNCP_NETSOCKET = -1221, /* Invalid function pointer "socket" */
EPS_ERR_INV_FNCP_NETCLOSE = -1222, /* Invalid function pointer "close" */
@@ -128,7 +132,7 @@ enum EPS_RUN_TIME_ERROR {
EPS_ERR_PRINTER_NOT_SET = -1351, /* Target printer is not specified */
EPS_ERR_INV_PRINT_LANGUAGE = -1352, /* Invalid Argument "printer.language" */
- /*** Page Attribution Error (epsStartJob(), epsGetPrintableArea()) */
+ /*** Page Attribution Error (epsStartJob(), epsGetPrintableArea(), epsGetPrintableAreaInfo()) */
/*** -------------------------------------------------------------------------------*/
EPS_ERR_INV_MEDIA_SIZE = -1400, /* Invalid Media Size */
EPS_ERR_INV_MEDIA_TYPE = -1401, /* Invalid Media Type */
@@ -185,6 +189,7 @@ enum EPS_RUN_TIME_ERROR {
/*** -------------------------------------------------------------------------------*/
EPS_ERR_INV_ARG_STATUS = -1700, /* Invalid argument "status" */
EPS_ERR_INV_ARG_INKINFO = -1710, /* Invalid argument "inkInfo" */
+ EPS_ERR_INV_ARG_SUPPLYINFO = -1711, /* Invalid argument "supplyInfo" */
/*** epsGetSupportedMedia() Error */
/*** -------------------------------------------------------------------------------*/
@@ -195,6 +200,13 @@ enum EPS_RUN_TIME_ERROR {
EPS_ERR_INV_ARG_PRINTABLE_WIDTH = -1800, /* Invalid argument "printableWidth" */
EPS_ERR_INV_ARG_PRINTABLE_HEIGHT = -1801, /* Invalid argument "printableHeight" */
+ /*** epsGetPrintAreaInfo(), epsGetPrintAreaInfoAll() Error */
+ /*** -------------------------------------------------------------------------------*/
+ EPS_ERR_INV_ARG_LAYOUT_MARGIN = -1850, /* Invalid Argument "margin" */
+ EPS_ERR_INV_ARG_PRINTAREA_INFO = -1851, /* Invalid Argument "printAreaInfo" */
+ EPS_ERR_INV_ARG_PAPER_WIDTH = -1852, /* Invalid argument "paperWidth" */
+ EPS_ERR_INV_ARG_PAPER_HEIGHT = -1853, /* Invalid argument "paperHeight" */
+
/*** epsSetAdditionalData() Error */
/*** -------------------------------------------------------------------------------*/
EPS_ERR_INV_ARG_ADDDATA = -2001, /* Invalid argument "data" */
@@ -283,8 +295,32 @@ enum EPS_PRINTER_ERROR {
EPS_PRNERR_CDDVDCONFIG ,
EPS_PRNERR_CDREXIST_MAINTE ,
- /* Status Error */
- EPS_PRNERR_BUSY = 100,
+ /* append for 2012 Model */
+ EPS_PRNERR_FEEDERCLOSE ,
+
+ /* append for 2013 Model */
+ EPS_PRNERR_3DMEDIA_FACE , /* Improper insert face at 3D printing media */
+ EPS_PRNERR_3DMEDIA_DIRECTION , /* Improper insert direction at 3D printing media */
+ EPS_PRNERR_MANUALFEED_SET_PAPER , /* Set a paper into Manual Feed */
+ EPS_PRNERR_MANUALFEED_SET_PAPER_NOLCD ,
+ EPS_PRNERR_MANUALFEED_FAILED , /* Non feed at Manual Feed */
+ EPS_PRNERR_MANUALFEED_FAILED_NOLCD ,
+ EPS_PRNERR_MANUALFEED_EXCESSIVE , /* Excessive inserting paper on Manual Feed */
+ EPS_PRNERR_MANUALFEED_EXCESSIVE_NOLCD ,
+ EPS_PRNERR_CDDVDCONFIG_STARTBUTTON , /* restart with start button */
+ EPS_PRNERR_CDDVDCONFIG_FEEDBUTTON , /* restart with feed button */
+ EPS_PRNERR_INTERRUPT_BY_INKEND ,
+
+ /* append for 2014 Model */
+ EPS_PRNERR_ROLLPAPER_TOOSHORT ,
+ EPS_PRNERR_NO_BATTERY ,
+ EPS_PRNERR_LOW_BATTERY_FNC ,
+ EPS_PRNERR_BATTERY_CHARGING ,
+ EPS_PRNERR_BATTERY_TEMPERATURE_HIGH ,
+ EPS_PRNERR_BATTERY_TEMPERATURE_LOW ,
+
+ /* Status Error */
+ EPS_PRNERR_BUSY = 100,
EPS_PRNERR_FACTORY ,
/* Communication Error */
EPS_PRNERR_COMM ,
@@ -296,8 +332,9 @@ enum EPS_PRINTER_ERROR {
EPS_PRNERR_CDGUIDECLOSE , /* CDR guide close */
/* EPS_PRNERR_OVERHEAT OVERHEAT is not an error */
EPS_PRNERR_JPG_LIMIT , /* Jpeg print data size limit */
- EPS_PRNERR_DISABEL_CLEANING /* can not start Head Cleaning */
-
+ EPS_PRNERR_DISABEL_CLEANING , /* can not start Head Cleaning */
+
+ EPS_PRNERR_ANY = 200,
};
/*** Ink Cartridge Error */
@@ -306,6 +343,18 @@ enum EPS_PRINTER_ERROR {
#define EPS_INK_FAIL (-2)
#define EPS_INK_NOTAVAIL (-3)
#define EPS_INK_NOREAD (-4)
+#define EPS_INK_OBSOLETE (-5)
+
+
+ /*** Ink Cartridge Status */
+ /*** -------------------------------------------------------------------------------*/
+#define EPS_INK_ST_NORMAL (0)
+#define EPS_INK_ST_LOW (1)
+#define EPS_INK_ST_END (2)
+#define EPS_INK_ST_NOTPRESENT EPS_INK_NOTPRESENT
+#define EPS_INK_ST_FAIL EPS_INK_FAIL
+#define EPS_INK_ST_NOTAVAIL EPS_INK_NOTAVAIL
+#define EPS_INK_ST_NOREAD EPS_INK_NOREAD
/*** Notifification Reply Values */
/*** -------------------------------------------------------------------------------*/
diff --git a/lib/epson-escpr-media.h b/lib/epson-escpr-media.h
index 4be5015..1bcfc98 100755..100644
--- a/lib/epson-escpr-media.h
+++ b/lib/epson-escpr-media.h
@@ -89,6 +89,11 @@ typedef enum _tagMEDIA_SIZE_ID_ {
EPS_MSID_PALBUM_A5_L , /* 41 0x29 [210.000,148.300] */
EPS_MSID_PALBUM_A4 , /* 42 0x2A [210.000,296.300] */
EPS_MSID_HIVISION , /* 43 0x2B [101.600,180.600] */
+ EPS_MSID_KAKU_2 , /* 44 0x2C [240.000,332.000] */
+ EPS_MSID_ENV_C4_P , /* 45 0x2D [229.000,324.000] */
+ EPS_MSID_B6 , /* 46 0x2E [128.000,182.000] */
+ EPS_MSID_KAKU_20 , /* 47 0x2F [229.000,324.000] */
+ EPS_MSID_A5_24HOLE , /* 48 0x30 [148.000,210.000] */
EPS_MSID_A3NOBI =61, /* 61 0x3D [329.000,483.000] */
EPS_MSID_A3 , /* 62 0x3E [297.000,420.000] */
EPS_MSID_B4 , /* 63 0x3F [257.000,364.000] */
@@ -98,21 +103,6 @@ typedef enum _tagMEDIA_SIZE_ID_ {
EPS_MSID_A2 , /* 67 0x43 [420.000,594.000] */
EPS_MSID_USC , /* 68 0x44 [431.800,558.800] */
EPS_MSID_10X12 , /* 69 0x45 [254.000,304.800] */
- EPS_MSID_F4 ,
- EPS_MSID_ENVY0 ,
- EPS_MSID_ENVY6 ,
- EPS_MSID_ENVK2 ,
- EPS_MSID_4PC ,
- EPS_MSID_CHOKEI_5 ,
- EPS_MSID_CHOKEI_6 ,
- EPS_MSID_YOUGATA_1 ,
- EPS_MSID_YOUGATA_2 ,
- EPS_MSID_KAKUGATA ,
- //EPS_MSID_QPOSTCARD ,
- EPS_MSID_LEB , /*Ledger(B)*/
- EPS_MSID_GLG,
- EPS_MSID_GLT , /*Government Letter */
- EPS_MSID_HLT ,
EPS_MSID_12X12 , /* 70 0x46 [304.800,304.800] */
EPS_MSID_USER =99, /* 99 0x63 [ 0.000, 0.000] */
EPS_MSID_UNKNOWN =0xff/* unknown */
@@ -136,67 +126,65 @@ typedef struct _tagEPS_MEDIA_INFO_ {
/*** ---------------------------------------------------------------------------*/
static const EPS_MEDIA_INFO epsMediaSize[] = {
/* ID PaperW/L 3mm W/L 0mm L/T 0mm W/L */
-{ EPS_MSID_A4, 2976, 4209, 2892, 4125, -36, -42, 3048, 4321 },
-{ EPS_MSID_LETTER, 3060, 3960, 2976, 3876, -36, -42, 3132, 4072 },
-{ EPS_MSID_LEGAL, 3060, 5040, 2976, 4956, -36, -42, 3132, 5152 },
-{ EPS_MSID_A5, 2098, 2976, 2014, 2892, -36, -42, 2170, 3088 },
-{ EPS_MSID_A6, 1488, 2098, 1404, 2014, -36, -42, 1560, 2210 },
-{ EPS_MSID_B5, 2579, 3642, 2495, 3558, -36, -42, 2651, 3754 },
-{ EPS_MSID_EXECUTIVE, 2610, 3780, 2526, 3696, -36, -42, 2682, 3892 },
-{ EPS_MSID_HALFLETTER, 1980, 3060, 1896, 2976, -36, -42, 2052, 3172 },
-{ EPS_MSID_PANORAMIC, 2976, 8419, 2892, 8335, -36, -42, 3048, 8531 },
-{ EPS_MSID_TRIM_4X6, 1610, 2330, 1526, 2246, -36, -42, 1682, 2442 },
-{ EPS_MSID_4X6, 1440, 2160, 1356, 2076, -36, -42, 1512, 2272 },
-{ EPS_MSID_5X8, 1800, 2880, 1716, 2796, -36, -42, 1872, 2992 },
-{ EPS_MSID_8X10, 2880, 3600, 2796, 3516, -36, -42, 2952, 3712 },
-{ EPS_MSID_F4, 2976, 4677, 2892, 4593, -36, -42, 3048, 4789 },
-{ EPS_MSID_ENVY0, 1701, 3331, 1617, 3247, -36, -42, 1773, 3443 },
-{ EPS_MSID_ENVY6, 1389, 2693, 1305, 2609, -36, -42, 1461, 2805 },
-{ EPS_MSID_ENVK2, 3402, 4706, 3318, 4622, -36, -42, 3474, 4818 },
-{ EPS_MSID_4PC, 2835, 4195, 2751, 4111, -36, -42, 2907, 4307 },
-{ EPS_MSID_10X15, 1417, 2125, 1333, 2041, -36, -42, 1489, 2237 },
-{ EPS_MSID_200X300, 3061, 4790, 2977, 4706, -36, -42, 3133, 4902 },
-{ EPS_MSID_L, 1260, 1800, 1176, 1716, -36, -42, 1332, 1912 },
-{ EPS_MSID_POSTCARD, 1417, 2098, 1333, 2013, -36, -42, 1489, 2210 },
-{ EPS_MSID_DBLPOSTCARD, 2834, 2097, 2750, 2013, -36, -42, 2906, 2209 },
+{ EPS_MSID_A4, 2976, 4209, 2892, 4125, -36, -42, 3048, 4321 },
+{ EPS_MSID_LETTER, 3060, 3960, 2976, 3876, -36, -42, 3132, 4072 },
+{ EPS_MSID_LEGAL, 3060, 5040, 2976, 4956, -36, -42, 3132, 5152 },
+{ EPS_MSID_A5, 2098, 2976, 2014, 2892, -36, -42, 2170, 3088 },
+{ EPS_MSID_A6, 1488, 2098, 1404, 2014, -36, -42, 1560, 2210 },
+{ EPS_MSID_B5, 2579, 3642, 2495, 3558, -36, -42, 2651, 3754 },
+{ EPS_MSID_EXECUTIVE, 2610, 3780, 2526, 3696, -36, -42, 2682, 3892 },
+{ EPS_MSID_HALFLETTER, 1980, 3060, 1896, 2976, -36, -42, 2052, 3172 },
+{ EPS_MSID_PANORAMIC, 2976, 8419, 2892, 8335, -36, -42, 3048, 8531 },
+{ EPS_MSID_TRIM_4X6, 1610, 2330, 1526, 2246, -36, -42, 1682, 2442 },
+{ EPS_MSID_4X6, 1440, 2160, 1356, 2076, -36, -42, 1512, 2272 },
+{ EPS_MSID_5X8, 1800, 2880, 1716, 2796, -36, -42, 1872, 2992 },
+{ EPS_MSID_8X10, 2880, 3600, 2796, 3516, -36, -42, 2952, 3712 },
+{ EPS_MSID_10X15, 1417, 2125, 1333, 2041, -36, -42, 1489, 2237 },
+{ EPS_MSID_200X300, 3061, 4790, 2977, 4706, -36, -42, 3133, 4902 },
+{ EPS_MSID_L, 1260, 1800, 1176, 1716, -36, -42, 1332, 1912 },
+{ EPS_MSID_POSTCARD, 1417, 2098, 1333, 2013, -36, -42, 1489, 2210 },
+{ EPS_MSID_DBLPOSTCARD, 2834, 2097, 2750, 2013, -36, -42, 2906, 2209 },
{ EPS_MSID_ENV_10_L, 3420, 1485, 3336, 1401, -36, -42, 3492, 1597 },
{ EPS_MSID_ENV_C6_L, 2296, 1616, 2212, 1532, -36, -42, 2368, 1728 },
{ EPS_MSID_ENV_DL_L, 3118, 1559, 3034, 1475, -36, -42, 3190, 1671 },
{ EPS_MSID_NEWEVN_L, 3118, 1871, 3034, 1787, -36, -42, 3190, 1983 },
-{ EPS_MSID_CHOKEI_3, 1701, 3685, 1617, 3247, -36, -42, 1773, 3797 },
-{ EPS_MSID_CHOKEI_4, 1276, 3161, 1192, 2822, -36, -42, 1348, 3273 },
-{ EPS_MSID_YOKEI_1, 1701, 2494, 1561, 2169, -36, -42, 1773, 2606 },
-{ EPS_MSID_YOKEI_2, 1616, 2296, 1476, 1971, -36, -42, 1688, 2408 },
-{ EPS_MSID_YOKEI_3, 1389, 2098, 1249, 1773, -36, -42, 1461, 2210 },
-{ EPS_MSID_YOKEI_4, 1488, 3330, 1348, 3005, -36, -42, 1560, 3442 },
-{ EPS_MSID_2L, 1800, 2522, 1716, 2436, -36, -42, 1872, 2634 },
-{ EPS_MSID_ENV_10_P, 1485, 3420, 1345, 3095, -36, -42, 1557, 3532 },
-{ EPS_MSID_ENV_C6_P, 1615, 2296, 1475, 1971, -36, -42, 1687, 2408 },
-{ EPS_MSID_ENV_DL_P, 1559, 3118, 1419, 2793, -36, -42, 1631, 3230 },
-{ EPS_MSID_NEWENV_P, 1871, 3118, 1787, 2793, -36, -42, 1943, 3230 },
-{ EPS_MSID_MEISHI, 1261, 779, 1177, 695, -36, -42, 1333, 891 },
-{ EPS_MSID_BUZCARD_89X50, 1261, 709, 1177, 625, -36, -42, 1333, 821 },
-{ EPS_MSID_CARD_54X86, 765, 1219, 681, 1135, -36, -42, 837, 1331 },
-{ EPS_MSID_BUZCARD_55X91, 780, 1290, 696, 1206, -36, -42, 852, 1402 },
-{ EPS_MSID_ALBUM_L, 1800, 2607, 1716, 2523, -36, -42, 1872, 2719 },
-{ EPS_MSID_ALBUM_A5, 2976, 4294, 2892, 4210, -36, -42, 3048, 4406 },
-{ EPS_MSID_PALBUM_L_L, 1800, 1260, 1716, 1176, -36, -42, 1872, 1372 },
-{ EPS_MSID_PALBUM_2L, 1800, 2521, 1716, 2437, -36, -42, 1872, 2633 },
-{ EPS_MSID_PALBUM_A5_L, 2976, 2101, 2892, 2017, -36, -42, 3048, 2213 },
-{ EPS_MSID_PALBUM_A4, 2976, 4203, 2892, 4119, -36, -42, 3048, 4315 },
-{ EPS_MSID_HIVISION, 1440, 2560, 1356, 2476, -36, -42, 1512, 2672 },
-{ EPS_MSID_A3NOBI, 4662, 6845, 4577, 6760, -48, -42, 4758, 6957 },
-{ EPS_MSID_A3, 4209, 5952, 4125, 5867, -48, -42, 4305, 6064 },
-{ EPS_MSID_B4, 3643, 5159, 3559, 5075, -48, -42, 3739, 5271 },
-{ EPS_MSID_USB, 3960, 6120, 3876, 6036, -48, -42, 4056, 6232 },
-{ EPS_MSID_11X14, 3960, 5040, 3876, 4956, -48, -42, 4056, 5152 },
-{ EPS_MSID_B3, 5159, 7285, 5075, 7201, -48, -42, 5255, 7397 },
-{ EPS_MSID_A2, 5953, 8419, 5869, 8335, -48, -42, 6049, 8531 },
-{ EPS_MSID_USC, 6120, 7920, 6036, 7836, -48, -42, 6216, 8032 },
-{ EPS_MSID_10X12, 3600, 4320, 3516, 4236, -36, -42, 3672, 4432 },
-{ EPS_MSID_12X12, 4320, 4320, 4236, 4236, -36, -42, 4392, 4432 },
-{ EPS_MSID_GLT, 2880, 3780, 2796, 3696, -36, -42, 2952, 3892},
-{ EPS_MSID_GLG, 3060, 4680, 2976, 4596, -36, -42, 3132, 4792},
+{ EPS_MSID_CHOKEI_3, 1700, 3330, 1560, 3005, -36, -42, 1772, 3442 },
+{ EPS_MSID_CHOKEI_4, 1275, 2905, 1135, 2580, -36, -42, 1347, 3017 },
+{ EPS_MSID_YOKEI_1, 1701, 2494, 1561, 2169, -36, -42, 1773, 2606 },
+{ EPS_MSID_YOKEI_2, 1616, 2296, 1476, 1971, -36, -42, 1688, 2408 },
+{ EPS_MSID_YOKEI_3, 1389, 2098, 1249, 1773, -36, -42, 1461, 2210 },
+{ EPS_MSID_YOKEI_4, 1488, 3330, 1348, 3005, -36, -42, 1560, 3442 },
+{ EPS_MSID_2L, 1800, 2522, 1716, 2436, -36, -42, 1872, 2634 },
+{ EPS_MSID_ENV_10_P, 1485, 3420, 1345, 3095, -36, -42, 1557, 3532 },
+{ EPS_MSID_ENV_C6_P, 1615, 2296, 1475, 1971, -36, -42, 1687, 2408 },
+{ EPS_MSID_ENV_DL_P, 1559, 3118, 1419, 2793, -36, -42, 1631, 3230 },
+{ EPS_MSID_NEWENV_P, 1871, 3118, 1731, 2793, -36, -42, 1943, 3230 },
+{ EPS_MSID_MEISHI, 1261, 779, 1177, 695, -36, -42, 1333, 891 },
+{ EPS_MSID_BUZCARD_89X50, 1261, 709, 1177, 625, -36, -42, 1333, 821 },
+{ EPS_MSID_CARD_54X86, 765, 1219, 681, 1135, -36, -42, 837, 1331 },
+{ EPS_MSID_BUZCARD_55X91, 780, 1290, 696, 1206, -36, -42, 852, 1402 },
+{ EPS_MSID_ALBUM_L, 1800, 2607, 1716, 2523, -36, -42, 1872, 2719 },
+{ EPS_MSID_ALBUM_A5, 2976, 4294, 2892, 4210, -36, -42, 3048, 4406 },
+{ EPS_MSID_PALBUM_L_L, 1800, 1260, 1716, 1176, -36, -42, 1872, 1372 },
+{ EPS_MSID_PALBUM_2L, 1800, 2521, 1716, 2437, -36, -42, 1872, 2633 },
+{ EPS_MSID_PALBUM_A5_L, 2976, 2101, 2892, 2017, -36, -42, 3048, 2213 },
+{ EPS_MSID_PALBUM_A4, 2976, 4203, 2892, 4119, -36, -42, 3048, 4315 },
+{ EPS_MSID_HIVISION, 1440, 2560, 1356, 2476, -36, -42, 1512, 2672 },
+{ EPS_MSID_KAKU_2, 3401, 4705, 2977, 4380, -36, -42, 3472, 4817 },
+{ EPS_MSID_ENV_C4_P, 3245, 4592, 2963, 4267, -36, -42, 3317, 4422 },
+{ EPS_MSID_B6, 1814, 2580, 1730, 2496, -36, -42, 1886, 2692 },
+{ EPS_MSID_KAKU_20, 3245, 4592, 2963, 4267, -36, -42, 3317, 4422 },
+{ EPS_MSID_A5_24HOLE, 2098, 2976, 1816, 2694, -36, -42, 2170, 3088 },
+{ EPS_MSID_A3NOBI, 4663, 6846, 4579, 6762, -48, -42, 4758, 6957 },
+{ EPS_MSID_A3, 4209, 5953, 4125, 5869, -48, -42, 4305, 6064 },
+{ EPS_MSID_B4, 3643, 5159, 3559, 5075, -48, -42, 3739, 5271 },
+{ EPS_MSID_USB, 3960, 6120, 3876, 6036, -48, -42, 4056, 6232 },
+{ EPS_MSID_11X14, 3960, 5040, 3876, 4956, -48, -42, 4056, 5152 },
+{ EPS_MSID_B3, 5159, 7299, 5075, 7215, -48, -42, 5255, 7397 },
+{ EPS_MSID_A2, 5953, 8419, 5869, 8335, -48, -42, 6049, 8531 },
+{ EPS_MSID_USC, 6120, 7920, 6036, 7836, -48, -42, 6216, 8032 },
+{ EPS_MSID_10X12, 3600, 4320, 3516, 4236, -48, -42, 3696, 4432 },
+{ EPS_MSID_12X12, 4320, 4320, 4236, 4236, -48, -42, 4416, 4432 },
{ EPS_MSID_USER, 0, 0, 0, 0, -36, -42, 0, 0 },
{ -1, 0, 0, 0, 0, 0, 0, 0, 0 }
};
@@ -208,69 +196,67 @@ static const EPS_MEDIA_INFO epsMediaSize[] = {
/*** ---------------------------------------------------------------------------*/
static const EPS_MEDIA_INFO epsMediaSize300[] = {
/* ID PaperW/L 3mm W/L 0mm L/T 0mm W/L */
-{ EPS_MSID_A4, 2480, 3507, 2410, 3437, -30, -35, 2540, 3600 },
-{ EPS_MSID_LETTER, 2550, 3300, 2480, 3230, -30, -35, 2610, 3393 },
-{ EPS_MSID_LEGAL, 2550, 4200, 2480, 4130, -30, -35, 2610, 4293 },
-{ EPS_MSID_A5, 1748, 2480, 1678, 2410, -30, -35, 1808, 2573 },
-{ EPS_MSID_A6, 1240, 1748, 1170, 1678, -30, -35, 1300, 1841 },
-{ EPS_MSID_B5, 2149, 3035, 2079, 2965, -30, -35, 2209, 3128 },
-{ EPS_MSID_EXECUTIVE, 2175, 3150, 2105, 3080, -30, -35, 2235, 3243 },
-{ EPS_MSID_HALFLETTER, 1650, 2550, 1580, 2480, -30, -35, 1710, 2643 },
-{ EPS_MSID_PANORAMIC, 2480, 7016, 2410, 6946, -30, -35, 2540, 7109 },
-{ EPS_MSID_TRIM_4X6, 1342, 1942, 1272, 1872, -30, -35, 1402, 2035 },
-{ EPS_MSID_4X6, 1200, 1800, 1130, 1730, -30, -35, 1260, 1893 },
-{ EPS_MSID_5X8, 1500, 2400, 1430, 2330, -30, -35, 1560, 2493 },
-{ EPS_MSID_8X10, 2400, 3000, 2330, 2930, -30, -35, 2460, 3093 },
-{ EPS_MSID_10X15, 1181, 1771, 1111, 1701, -30, -35, 1241, 1864 },
-{ EPS_MSID_F4, 2480, 3898, 2410, 3828, -30, -35, 2540, 3991 },
-{ EPS_MSID_ENVY0, 1417, 2776, 1347, 2706, -36, -42, 1477, 2869 },
-{ EPS_MSID_ENVY6, 1157, 2244, 1087, 2174, -36, -42, 1217, 2337 },
-{ EPS_MSID_ENVK2, 2835, 3921, 2765, 3851, -36, -42, 2895, 4014 },
-{ EPS_MSID_4PC, 2362, 3496, 2292, 3426, -30, -35, 2422, 3589 },
-{ EPS_MSID_200X300, 2551, 3992, 2481, 3922, -30, -35, 2611, 4085 },
-{ EPS_MSID_L, 1050, 1500, 980, 1430, -30, -35, 1110, 1593 },
-{ EPS_MSID_POSTCARD, 1181, 1748, 1111, 1678, -30, -35, 1241, 1841 },
+{ EPS_MSID_A4, 2480, 3507, 2410, 3437, -30, -35, 2540, 3601 },
+{ EPS_MSID_LETTER, 2550, 3300, 2480, 3230, -30, -35, 2610, 3394 },
+{ EPS_MSID_LEGAL, 2550, 4200, 2480, 4130, -30, -35, 2610, 4294 },
+{ EPS_MSID_A5, 1748, 2480, 1678, 2410, -30, -35, 1808, 2574 },
+{ EPS_MSID_A6, 1240, 1748, 1170, 1678, -30, -35, 1300, 1842 },
+{ EPS_MSID_B5, 2149, 3035, 2079, 2965, -30, -35, 2209, 3129 },
+{ EPS_MSID_EXECUTIVE, 2175, 3150, 2105, 3080, -30, -35, 2235, 3244 },
+{ EPS_MSID_HALFLETTER, 1650, 2550, 1580, 2480, -30, -35, 1710, 2644 },
+{ EPS_MSID_PANORAMIC, 2480, 7015, 2410, 6945, -30, -35, 2540, 7109 },
+{ EPS_MSID_TRIM_4X6, 1334, 1937, 1264, 1867, -30, -35, 1394, 2031 },
+{ EPS_MSID_4X6, 1200, 1800, 1130, 1730, -30, -35, 1260, 1894 },
+{ EPS_MSID_5X8, 1500, 2400, 1430, 2330, -30, -35, 1560, 2494 },
+{ EPS_MSID_8X10, 2400, 3000, 2330, 2930, -30, -35, 2460, 3094 },
+{ EPS_MSID_10X15, 1181, 1171, 1111, 1101, -30, -35, 1241, 1265 },
+{ EPS_MSID_200X300, 2362, 3543, 2292, 3473, -30, -35, 2422, 3637 },
+{ EPS_MSID_L, 1051, 1500, 981, 1430, -30, -35, 1111, 1594 },
+{ EPS_MSID_POSTCARD, 1181, 1748, 1111, 1678, -30, -35, 1241, 1842 },
{ EPS_MSID_DBLPOSTCARD, 2362, 1748, 2292, 1678, -30, -35, 2422, 1842 },
{ EPS_MSID_ENV_10_L, 2850, 1238, 2780, 1168, -30, -35, 2910, 1331 },
{ EPS_MSID_ENV_C6_L, 1913, 1347, 1843, 1277, -30, -35, 1973, 1440 },
{ EPS_MSID_ENV_DL_L, 2598, 1299, 2528, 1229, -30, -35, 2658, 1392 },
{ EPS_MSID_NEWEVN_L, 2598, 1559, 2528, 1489, -30, -35, 2658, 1652 },
-{ EPS_MSID_CHOKEI_3, 1418, 3071, 1348, 3001, -30, -35, 1478, 3164 },
-{ EPS_MSID_CHOKEI_4, 1063, 2634, 993, 2564, -30, -35, 1123, 2727 },
+{ EPS_MSID_CHOKEI_3, 1417, 2775, 1299, 2504, -30, -35, 1477, 2869 },
+{ EPS_MSID_CHOKEI_4, 1063, 2421, 945, 2150, -30, -35, 1123, 2515 },
{ EPS_MSID_YOKEI_1, 1417, 2078, 1299, 1807, -30, -35, 1477, 2172 },
{ EPS_MSID_YOKEI_2, 1346, 1913, 1228, 1642, -30, -35, 1406, 2007 },
{ EPS_MSID_YOKEI_3, 1157, 1748, 1039, 1477, -30, -35, 1217, 1842 },
-{ EPS_MSID_YOKEI_4, 1240, 2775, 1122, 2504, -30, -35, 1300, 2869 },
-{ EPS_MSID_2L, 1500, 2100, 1430, 2030, -30, -35, 1560, 2193 },
+{ EPS_MSID_YOKEI_4, 1240, 2775, 1122, 2504, -30, -35, 1300, 2869 },
+{ EPS_MSID_2L, 1500, 2102, 1430, 2032, -30, -35, 1560, 2196 },
{ EPS_MSID_ENV_10_P, 1238, 2850, 1120, 2579, -30, -35, 1298, 2944 },
{ EPS_MSID_ENV_C6_P, 1346, 1913, 1228, 1642, -30, -35, 1406, 2007 },
{ EPS_MSID_ENV_DL_P, 1299, 2598, 1181, 2327, -30, -35, 1359, 2692 },
{ EPS_MSID_NEWENV_P, 1535, 2598, 1417, 2327, -30, -35, 1595, 2692 },
-{ EPS_MSID_MEISHI, 1051, 649, 981, 579, -30, -35, 1111, 742 },
-{ EPS_MSID_BUZCARD_89X50, 1051, 591, 981, 521, -30, -35, 1111, 684 },
-{ EPS_MSID_CARD_54X86, 638, 1016, 568, 946, -30, -35, 698, 1109 },
-{ EPS_MSID_BUZCARD_55X91, 650, 1075, 580, 1005, -30, -35, 710, 1168 },
-{ EPS_MSID_ALBUM_L, 1500, 2173, 1430, 2103, -30, -35, 1560, 2266 },
-{ EPS_MSID_ALBUM_A5, 2480, 3578, 2410, 3508, -30, -35, 2540, 3671 },
-{ EPS_MSID_PALBUM_L_L, 1500, 1050, 1430, 980, -30, -35, 1560, 1143 },
-{ EPS_MSID_PALBUM_2L, 1500, 2101, 1430, 2031, -30, -35, 1560, 2194 },
-{ EPS_MSID_PALBUM_A5_L, 2480, 1751, 2410, 1681, -30, -35, 2540, 1844 },
-{ EPS_MSID_PALBUM_A4, 2480, 3503, 2410, 3433, -30, -35, 2540, 3596 },
-{ EPS_MSID_HIVISION, 1200, 2133, 1130, 2063, -30, -35, 1260, 2226 },
-{ EPS_MSID_A3NOBI, 3886, 5705, 3816, 5635, -40, -35, 3946, 5798 },
-{ EPS_MSID_A3, 3507, 4960, 3437, 4890, -40, -35, 3567, 5053 },
-{ EPS_MSID_B4, 3036, 4299, 2966, 4229, -30, -35, 3096, 4392 },
-{ EPS_MSID_USB, 3300, 5100, 3230, 5030, -30, -35, 3360, 5193 },
-{ EPS_MSID_11X14, 3300, 4200, 3230, 4130, -30, -35, 3360, 4293 },
-{ EPS_MSID_B3, 4299, 6071, 4229, 6001, -40, -35, 4359, 6164 },
-{ EPS_MSID_A2, 4961, 7016, 4891, 6946, -40, -35, 5021, 7109 },
-{ EPS_MSID_USC, 5100, 6600, 5030, 6530, -40, -35, 5160, 6693 },
-{ EPS_MSID_10X12, 3000, 3600, 2930, 3530, -30, -35, 3060, 3693 },
-{ EPS_MSID_12X12, 3600, 3600, 3530, 3530, -30, -35, 3660, 3693 },
-{ EPS_MSID_GLT, 2400, 3150, 2330, 3080, -30, -35, 2460, 3243 },
-{ EPS_MSID_GLG, 2550, 3900, 2480, 3830, -30, -35, 2610, 3993 },
+{ EPS_MSID_MEISHI, 1051, 650, 981, 580, -30, -35, 1111, 744 },
+{ EPS_MSID_BUZCARD_89X50, 1051, 590, 981, 520, -30, -35, 1111, 684 },
+{ EPS_MSID_CARD_54X86, 637, 1015, 567, 945, -30, -35, 697, 1109 },
+{ EPS_MSID_BUZCARD_55X91, 650, 1074, 580, 1004, -30, -35, 710, 1168 },
+{ EPS_MSID_ALBUM_L, 1500, 2173, 1430, 2103, -30, -35, 1560, 2267 },
+{ EPS_MSID_ALBUM_A5, 2480, 3578, 2410, 3508, -30, -35, 2540, 3672 },
+{ EPS_MSID_PALBUM_L_L, 1500, 1051, 1430, 981, -30, -35, 1560, 1145 },
+{ EPS_MSID_PALBUM_2L, 1500, 2102, 1430, 2032, -30, -35, 1560, 2196 },
+{ EPS_MSID_PALBUM_A5_L, 2480, 1748, 2410, 1678, -30, -35, 2540, 1842 },
+{ EPS_MSID_PALBUM_A4, 2480, 3507, 2410, 3437, -30, -35, 2540, 3601 },
+{ EPS_MSID_HIVISION, 1200, 2133, 1130, 2063, -30, -35, 1260, 2227 },
+{ EPS_MSID_KAKU_2, 2834, 3921, 2480, 3650, -30, -35, 2894, 4010 },
+{ EPS_MSID_ENV_C4_P, 2704, 3826, 2468, 3555, -30, -35, 2764, 3919 },
+{ EPS_MSID_B6, 1512, 2150, 1442, 2080, -30, -35, 1572, 2244 },
+{ EPS_MSID_KAKU_20, 2704, 3826, 2468, 3555, -30, -35, 2764, 3919 },
+{ EPS_MSID_A5_24HOLE, 1748, 2480, 1513, 2410, -30, -35, 1808, 2574 },
+{ EPS_MSID_A3NOBI, 3885, 5704, 3815, 5634, -42, -35, 3969, 5798 },
+{ EPS_MSID_A3, 3507, 4960, 3437, 4890, -42, -35, 3591, 5054 },
+{ EPS_MSID_B4, 3035, 4299, 2965, 4229, -42, -35, 3119, 4393 },
+{ EPS_MSID_USB, 3300, 5100, 3230, 5030, -42, -35, 3384, 5194 },
+{ EPS_MSID_11X14, 3300, 4200, 3230, 4130, -42, -35, 3384, 4294 },
+{ EPS_MSID_B3, 4299, 6082, 4229, 6012, -42, -35, 4383, 6176 },
+{ EPS_MSID_A2, 4960, 7015, 4890, 6945, -42, -35, 5044, 7109 },
+{ EPS_MSID_USC, 5100, 6600, 5030, 6530, -42, -35, 5184, 6694 },
+{ EPS_MSID_10X12, 3000, 3600, 2930, 3530, -42, -35, 3084, 3694 },
+{ EPS_MSID_12X12, 3600, 3600, 3530, 3530, -42, -35, 3684, 3694 },
{ EPS_MSID_USER, 0, 0, 0, 0, -30, -35, 0, 0 },
-{ -1, 0, 0, 0, 0, 0, 0, 0, 0 }
+{ -1, 0, 0, 0, 0, 0, 0, 0, 0 }
};
#define EPS_BORDERS_MARGIN_360 (42)
@@ -278,10 +264,10 @@ static const EPS_MEDIA_INFO epsMediaSize300[] = {
#define EPS_BORDERS_MARGIN_300 (35)
/*#define EPS_BORDERS_MARGIN_600 (70)*/
-#define EPS_RIGHT_MARGIN__BORDERLESS_360 (-36)
-#define EPS_BOTTOM_MARGIN__BORDERLESS_360 (-70)
-#define EPS_RIGHT_MARGIN__BORDERLESS_300 (-30)
-#define EPS_BOTTOM_MARGIN__BORDERLESS_300 (-58)
+#define EPS_RIGHT_MARGIN_BORDERLESS_360 (-36)
+#define EPS_BOTTOM_MARGIN_BORDERLESS_360 (-70)
+#define EPS_RIGHT_MARGIN_BORDERLESS_300 (-30)
+#define EPS_BOTTOM_MARGIN_BORDERLESS_300 (-58)
/* user defined size range */
#define EPS_USER_WIDTH_MIN (35) /* 3.5inch x 10 */
@@ -290,6 +276,8 @@ static const EPS_MEDIA_INFO epsMediaSize300[] = {
#define EPS_USER_WIDTH_MAX2 (130) /* 13 inch x 10 */
#define EPS_USER_HEIGHT_MAX (440) /* 44 inch x 10 */
+
+
/*------------- Definition of Media Type ID / Global Media Type Declarations --------*/
/*******************************************|********************************************/
/*** Media Type ID */
@@ -341,18 +329,20 @@ typedef enum _tagMEDIA_TYPE_ID_ {
EPS_MTID_GLOSSYHAGAKI , /* 42 0x2A, "Glossy Postcard\0" */
EPS_MTID_GLOSSYPHOTO , /* 43 0x2B, "Glossy Photo Paper\0" */
EPS_MTID_GLOSSYCAST , /* 44 0x2C, "Epson Photo\0" */
- EPS_MTID_BUSINESSCOAT , /* 45 0x2D, "Business Ink Jet Coat Paper\0" */
- EPS_MTID_MEDICINEBAG , /* 46 0x2E, "Medicine bag\0" */
- EPS_MTID_THICKPAPER , /* 47 0x2F, "Thick Paper\0" */
- EPS_MTID_BROCHURE , /* 48 0x30, "Brochure & Flyer Paper Glossy Double-sided\0"*/
- EPS_MTID_MATTE_DS , /* 49 0x31, "EPSON Matte Double-sided\0" */
- EPS_MTID_BSMATTE_DS , /* 50 0x32, "EPSON Bussines card Matte Double-sided\0" */
- EPS_MTID_3D , /* 51 0x33, "3D media\0" */
- EPS_MTID_LCPP , /* 52 0x34, "Photo Paper Glossy\0" */
- EPS_MTID_PREPRINTED , /* 53 0x35, "Preprinted\0" */
- EPS_MTID_LETTERHEAD , /* 54 0x36, "Letterhead\0" */
- EPS_MTID_RECYCLED , /* 55 0x37, "Recycled\0" */
- EPS_MTID_COLORPAPER , /* 56 0x38, "Color\0" */
+ EPS_MTID_BUSINESSCOAT , /* 45 0x2D, "Business Ink Jet Coat Paper\0" */
+ EPS_MTID_MEDICINEBAG , /* 46 0x2E, "Medicine bag\0" */
+ EPS_MTID_THICKPAPER , /* 47 0x2F, "Thick Paper\0" */
+ EPS_MTID_BROCHURE , /* 48 0x30, "Brochure & Flyer Paper Glossy Double-sided\0"*/
+ EPS_MTID_MATTE_DS , /* 49 0x31, "EPSON Matte Double-sided\0" */
+ EPS_MTID_BSMATTE_DS , /* 50 0x32, "EPSON Bussines card Matte Double-sided\0" */
+ EPS_MTID_3D , /* 51 0x33, "3D media\0" */
+ EPS_MTID_LCPP , /* 52 0x34, "Photo Paper Glossy\0" */
+ EPS_MTID_PREPRINTED , /* 53 0x35, "Preprinted\0" */
+ EPS_MTID_LETTERHEAD , /* 54 0x36, "Letterhead\0" */
+ EPS_MTID_RECYCLED , /* 55 0x37, "Recycled\0" */
+ EPS_MTID_COLOR , /* 56 0x38, "Color\0" */
+ EPS_MTID_PLAIN_ROLL_STICKER=59, /* 59 0x3B "Plain Roll Sticker\0" */
+ EPS_MTID_GROSSY_ROLL_STICKER, /* 60 0x3C "Glossy Roll Sticker\0" */
EPS_MTID_CDDVD =91, /* 91 0x5B, "CD/DVD Label\0" */
EPS_MTID_CDDVDHIGH , /* 92 0x5C, "CD/DVD High Quality Label\0" */
EPS_MTID_CDDVDGLOSSY , /* 93 0x5D, "CD/DVD Glossy Surface\0" */
@@ -410,24 +400,27 @@ static const EPS_UINT32 epsMediaTypeIndex[] = {
EPS_MTID_GLOSSYHAGAKI , /* 42 0x2A, "Glossy Postcard\0" */
EPS_MTID_GLOSSYPHOTO , /* 43 0x2B, "Glossy Photo Paper\0" */
EPS_MTID_GLOSSYCAST , /* 44 0x2C, "Epson Photo\0" */
- EPS_MTID_BUSINESSCOAT , /* 45 0x2D, "Business Ink Jet Coat Paper\0" */
- EPS_MTID_MEDICINEBAG , /* 46 0x2D, "Medicine bag\0" */
- EPS_MTID_THICKPAPER , /* 47 0x2D, "Thick Paper\0" */
- EPS_MTID_BROCHURE , /* 48 0x2E, "Brochure & Flyer Paper Glossy Double-sided\0"*/
- EPS_MTID_MATTE_DS , /* 49 0x2F, "EPSON Matte Double-sided\0" */
- EPS_MTID_BSMATTE_DS , /* 50 0x30, "EPSON Bussines card Matte Double-sided\0" */
- EPS_MTID_3D , /* 51 0x31, "3D media\0" */
- EPS_MTID_LCPP , /* 52 0x34, "Photo Paper Glossy\0" */
- EPS_MTID_PREPRINTED , /* 53 0x35, "Preprinted\0" */
- EPS_MTID_LETTERHEAD , /* 54 0x36, "Letterhead\0" */
- EPS_MTID_RECYCLED , /* 55 0x37, "Recycled\0" */
- EPS_MTID_COLORPAPER , /* 56 0x38, "Color\0" */
- EPS_MTID_CDDVD , /* 91 0x5B, "CD/DVD Label\0" */
+ EPS_MTID_BUSINESSCOAT , /* 45 0x2D, "Business Ink Jet Coat Paper\0" */
+ EPS_MTID_MEDICINEBAG , /* 46 0x2D, "Medicine bag\0" */
+ EPS_MTID_THICKPAPER , /* 47 0x2D, "Thick Paper\0" */
+ EPS_MTID_BROCHURE , /* 48 0x2E, "Brochure & Flyer Paper Glossy Double-sided\0"*/
+ EPS_MTID_MATTE_DS , /* 49 0x2F, "EPSON Matte Double-sided\0" */
+ EPS_MTID_BSMATTE_DS , /* 50 0x30, "EPSON Bussines card Matte Double-sided\0" */
+ EPS_MTID_3D , /* 51 0x31, "3D media\0" */
+ EPS_MTID_LCPP , /* 52 0x34, "Photo Paper Glossy\0" */
+ EPS_MTID_PREPRINTED , /* 53 0x35, "Preprinted\0" */
+ EPS_MTID_LETTERHEAD , /* 54 0x36, "Letterhead\0" */
+ EPS_MTID_RECYCLED , /* 55 0x37, "Recycled\0" */
+ EPS_MTID_COLOR , /* 56 0x38, "Color\0" */
+ EPS_MTID_PLAIN_ROLL_STICKER, /* 59 0x3B "Plain Roll Sticker\0" */
+ EPS_MTID_GROSSY_ROLL_STICKER, /* 60 0x3C "Glossy Roll Sticker\0" */
+ EPS_MTID_CDDVD , /* 91 0x5B, "CD/DVD Label\0" */
EPS_MTID_CDDVDHIGH , /* 92 0x5C, "CD/DVD High Quality Label\0" */
EPS_MTID_CDDVDGLOSSY , /* 93 0x5D, "CD/DVD Glossy Surface\0" */
EPS_MTID_CLEANING , /* 99 0x63, "Cleaning Paper\0" */
/* EPS_MTID_UNKNOWN not include this list */
};
+
#define EPS_NUM_MEDIA_TYPES sizeof(epsMediaTypeIndex)/sizeof(EPS_UINT32)
@@ -451,28 +444,22 @@ static const EPS_UINT32 epsMediaTypeIndex[] = {
/*** Paper Source */
/*** -------------------------------------------------------------------------------*/
-#define EPS_MPID_NOT_SPEC 0x00
-#define EPS_MPID_AUTO EPS_MPID_NOT_SPEC
-#define EPS_MPID_REAR 0x01
-#define EPS_MPID_FRONT1 0x02
-#define EPS_MPID_FRONT2 0x04
-#define EPS_MPID_CDTRAY 0x08
-#define EPS_MPID_REARMANUAL 0x10
-//printer PAGE-S
-#define EPS_MPID_PAGE_S_MP_TRAY 0x00
-#define EPS_MPID_PAGE_S_CASSETTE1 0x01
-#define EPS_MPID_PAGE_S_CASSETTE2 0x02
-#define EPS_MPID_PAGE_S_CASSETTE3 0x03
-#define EPS_MPID_PAGE_S_CASSETTE4 0x04
-#define EPS_MPID_PAGE_S_PARAM_MANUALFEED 0x0A
-#define EPS_MPID_PAGE_S_AUTO_TRAY 0xFF
-
-
+#define EPS_MPID_NOT_SPEC 0x0000
+#define EPS_MPID_REAR 0x0001
+#define EPS_MPID_FRONT1 0x0002
+#define EPS_MPID_FRONT2 0x0004
+#define EPS_MPID_CDTRAY 0x0008
+#define EPS_MPID_MANUAL 0x0010
+#define EPS_MPID_REARMANUAL EPS_MPID_MANUAL
+#define EPS_MPID_FRONT3 0x0020
+#define EPS_MPID_FRONT4 0x0040
+#define EPS_MPID_AUTO 0x0080
+#define EPS_MPID_ROLL 0x0100
+#define EPS_MPID_MANUAL2 0x0200
/* append for page printer */
-#define EPS_MPID_MPTRAY 0x100
-#define EPS_MPID_FRONT3 0x200
-#define EPS_MPID_FRONT4 0x400
-#define EPS_MPID_ALL_ESCPR (EPS_MPID_REAR | EPS_MPID_FRONT1 | EPS_MPID_FRONT2 | EPS_MPID_CDTRAY | EPS_MPID_REARMANUAL)
+#define EPS_MPID_MPTRAY 0x8000
+#define EPS_MPID_ALL_ESCPR (EPS_MPID_REAR | EPS_MPID_FRONT1 | EPS_MPID_FRONT2 | EPS_MPID_FRONT3 | EPS_MPID_FRONT4 | \
+ EPS_MPID_CDTRAY | EPS_MPID_ROLL | EPS_MPID_MANUAL | EPS_MPID_MANUAL2 | EPS_MPID_AUTO)
#define EPS_MPID_ALL_ESCPAGE (EPS_MPID_MPTRAY | EPS_MPID_FRONT1 | EPS_MPID_FRONT2 | EPS_MPID_FRONT3 | EPS_MPID_FRONT4)
@@ -502,4 +489,3 @@ static const EPS_UINT32 epsMediaTypeIndex[] = {
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/***** End of File *** End of File *** End of File *** End of File *** End of File ******/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
diff --git a/lib/epson-escpr-mem.c b/lib/epson-escpr-mem.c
index 7205e52..7205e52 100755..100644
--- a/lib/epson-escpr-mem.c
+++ b/lib/epson-escpr-mem.c
diff --git a/lib/epson-escpr-mem.h b/lib/epson-escpr-mem.h
index 70d4a50..1141ad6 100755..100644
--- a/lib/epson-escpr-mem.h
+++ b/lib/epson-escpr-mem.h
@@ -31,7 +31,6 @@ extern "C" {
/*------------------------------------ Includes -------------------------------------*/
/*******************************************|********************************************/
#include "epson-typedefs.h"
-#include "epson-escpr-pvt.h"
/*------------------------------ Import Debug utility -------------------------------*/
@@ -40,8 +39,8 @@ extern "C" {
#include "epson-escpr-dbg.h"
#else
/* Redefine Debug macros */
-#define EPS_ALLOC( s ) epsCmnFnc.memAlloc((EPS_UINT32)s)
-#define EPS_FREE( p ) epsCmnFnc.memFree( p )
+#define EPS_ALLOC( s ) epsCmnFnc.memAlloc((EPS_UINT32)(s))
+#define EPS_FREE( p ) epsCmnFnc.memFree( (p) )
#define EPS_RETURN(e) return e;
#define EPS_RETURN_VOID return;
@@ -70,9 +69,9 @@ extern "C" {
/*******************************************|********************************************/
#define EPS_SAFE_RELEASE( p ) \
- if( NULL != p ){ \
- EPS_FREE( p ); \
- p = NULL; \
+ if( NULL != (p) ){ \
+ EPS_FREE( (p) ); \
+ (p) = NULL; \
}
/*---------------------------------- CPU Endian-ness -----------------------------------*/
diff --git a/lib/epson-escpr-pm.c b/lib/epson-escpr-pm.c
new file mode 100644
index 0000000..d4990a9
--- /dev/null
+++ b/lib/epson-escpr-pm.c
@@ -0,0 +1,3467 @@
+/*_______________________________ epson-escpr-pm.c _________________________________*/
+
+/* 1 2 3 4 5 6 7 8 */
+/*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
+/*******************************************|********************************************/
+/*
+ * Copyright (c) 2014 Seiko Epson Corporation All rights reserved.
+ *
+ * Copyright protection claimed includes all forms and matters of
+ * copyrightable material and information now allowed by statutory or judicial
+ * law or hereinafter granted, including without limitation, material generated
+ * from the software programs which are displayed on the screen such as icons,
+ * screen display looks, etc.
+ *
+ */
+/*******************************************|********************************************/
+/* */
+/* Epson ESC/PR print media Functions */
+/* */
+/*******************************************|********************************************/
+
+/*------------------------------------ Includes -------------------------------------*/
+/*******************************************|********************************************/
+#include "epson-escpr-err.h"
+#include "epson-escpr-mem.h"
+#include "epson-escpr-media.h"
+#include "epson-escpr-services.h"
+#include "epson-layout.h"
+
+
+/*------------------------------------ Definition -----------------------------------*/
+/*******************************************|********************************************/
+#ifdef EPS_LOG_MODULE_SER
+#define EPS_LOG_MODULE EPS_LOG_MODULE_SER
+extern EPS_CMN_FUNC epsCmnFnc;
+#else
+#define EPS_LOG_MODULE 0
+#endif
+
+ /*** Index of printing quality */
+ /*** -------------------------------------------------------------------------------*/
+#define Q_DRAFT 0
+#define Q_NORMAL 1
+#define Q_HIGH 2
+
+typedef struct _tagEPS_PRINTAREA_SOURCE_ {
+ const EPS_MEDIA_INFO* pMI;
+ EPS_UINT32 resolution;
+ EPS_INT32 factor;
+ /* for user defined size */
+ EPS_INT32 defaultBorder;
+ EPS_INT32 borderlessBottom;
+} EPS_PRINTAREA_SOURCE;
+
+/*---------------------------- ESC/P-R Lib Global Variables --------------------------*/
+/*******************************************|********************************************/
+extern EPS_CMN_FUNC epsCmnFnc;
+
+/*------------------------------ Local Global Variables ------------------------------*/
+/*******************************************|********************************************/
+static const EPS_UINT8 PM_REPLY_HEADER[EPS_PM_HEADER_LEN] = {
+ /* @ B D C <SP> P M <CR> <LF> */
+ 0x40, 0x42, 0x44, 0x43, 0x20, 0x50, 0x4D, 0x0D, 0x0A
+ };
+
+/*--------------------------- Special PM String table -------------------------------*/
+/*******************************************|********************************************/
+ /*** PM string resource ID */
+ /*** -------------------------------------------------------------------------------*/
+#define EPS_PMS_E300 (1)
+#define EPS_PMS_E500 (2)
+#define EPS_PMS_E700 EPS_PMS_E500
+#define EPS_PMS_PM200 (3)
+#define EPS_PMS_PM240 (4)
+
+typedef struct _tagSP_PM_STRINGS
+{
+ EPS_UINT32 id; /* ID */
+ const EPS_UINT8* res; /* PM String */
+ EPS_UINT32 len; /* length */
+}SP_PM_STRINGS;
+
+const EPS_UINT8 spm_E300[] = {0x40, 0x42, 0x44, 0x43, 0x20, 0x50, 0x4D, 0x0D, 0x0A, 0x53, 0x0F, 0x54, 0x26, 0x82, 0x2F, 0x54,
+ 0x0B, 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x0A, 0x54, 0x26, 0x82, 0x2F, 0x54, 0x0B,
+ 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x10, 0x54, 0x0B, 0x82, 0x2F, 0x54, 0x08, 0x02,
+ 0x2F, 0x2F, 0x53, 0x23, 0x54, 0x0B, 0x82, 0x2F, 0x2F, 0x0D, 0x0A};
+const EPS_UINT8 spm_E500[] = {0x40, 0x42, 0x44, 0x43, 0x20, 0x50, 0x4D, 0x0D, 0x0A, 0x53, 0x0F, 0x54, 0x26, 0x82, 0x2F, 0x54,
+ 0x0B, 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x0A, 0x54, 0x26, 0x82, 0x2F, 0x54, 0x0B,
+ 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x2B, 0x54, 0x0B, 0x82, 0x2F, 0x2F, 0x53, 0x10,
+ 0x54, 0x0B, 0x82, 0x2F, 0x54, 0x08, 0x02, 0x2F, 0x2F, 0x53, 0x23, 0x54, 0x0B, 0x82, 0x2F, 0x2F,
+ 0x0D, 0x0A};
+const EPS_UINT8 spm_PM200[] = {0x40, 0x42, 0x44, 0x43, 0x20, 0x50, 0x4D, 0x0D, 0x0A, 0x53, 0x0A, 0x54, 0x26, 0x82, 0x2F, 0x54,
+ 0x0B, 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x10, 0x54, 0x08, 0x02, 0x2F, 0x2F, 0x0D,
+ 0x0A};
+const EPS_UINT8 spm_PM240[] = {0x40, 0x42, 0x44, 0x43, 0x20, 0x50, 0x4D, 0x0D, 0x0A, 0x53, 0x0A, 0x54, 0x26, 0x82, 0x2F, 0x54,
+ 0x0B, 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x2B, 0x54, 0x0B, 0x82, 0x2F, 0x2F, 0x53,
+ 0x10, 0x54, 0x08, 0x42, 0x2F, 0x2F, 0x0D, 0x0A};
+
+const SP_PM_STRINGS spPMStrTbl[] =
+{
+ { EPS_PMS_E300, spm_E300, sizeof(spm_E300) },
+ { EPS_PMS_E500, spm_E500, sizeof(spm_E500) },
+ { EPS_PMS_PM200, spm_PM200, sizeof(spm_PM200) },
+ { EPS_PMS_PM240, spm_PM240, sizeof(spm_PM240) }
+};
+
+const EPS_UINT32 EPS_SPM_STRINGS = sizeof(spPMStrTbl) / sizeof(SP_PM_STRINGS);
+
+/*-------------------------------- Local Functions ----------------------------------*/
+/*******************************************|********************************************/
+static EPS_INT32 _SP_LoadPMString (EPS_UINT32, EPS_UINT8*, EPS_UINT32 );
+static EPS_ERR_CODE _SP_ChangeSpec_UpdatePMReply(EPS_PRINTER_INN*, EPS_UINT8*, EPS_INT32);
+static EPS_INT32 _pmFindSfield (EPS_UINT8, EPS_UINT8*, EPS_UINT8**, EPS_UINT8**);
+static EPS_UINT8* _pmScanTfield (EPS_UINT8, EPS_UINT8* );
+static EPS_INT16 _pmAppendTfield (EPS_UINT8*, EPS_UINT8* );
+static void _pmValidateRemoveDelimiter (EPS_UINT8*, EPS_UINT8*, EPS_INT32 );
+static EPS_INT16 _pmValidateRemoveUnknownSfield (EPS_UINT8*, EPS_UINT8* );
+static void _pmCorrectUnknownTfield (EPS_UINT8*, EPS_UINT8* );
+static void _pmCorrectDupulicatedFields (EPS_UINT8*, EPS_UINT8*, EPS_INT32* );
+static void _pmAdjustQuality (EPS_UINT8* );
+static void AppendMedia (EPS_SUPPORTED_MEDIA* );
+static EPS_UINT32 ComplementPaperSource (EPS_INT32 );
+
+static EPS_ERR_CODE GetPrintAreaSource (EPS_UINT32, EPS_PRINTAREA_SOURCE* );
+static EPS_ERR_CODE CalcPrintMargin (EPS_BOOL, EPS_PRINTAREA_SOURCE*,
+ const EPS_JOB_ATTRIB*,
+ EPS_LAYOUT_INFO*, EPS_RECT* );
+static EPS_INT32 LeftBorderPixel (EPS_PRINTAREA_SOURCE* );
+static EPS_INT32 RightBorderPixel (EPS_PRINTAREA_SOURCE* );
+static EPS_INT32 TopBorderPixel (EPS_PRINTAREA_SOURCE* );
+static EPS_INT32 BottomBorderPixel (EPS_PRINTAREA_SOURCE* );
+
+static EPS_ERR_CODE pm3GetPrintMargin (EPS_PM_DATA*, const EPS_JOB_ATTRIB*,
+ EPS_LAYOUT_INFO*, EPS_RECT* );
+static EPS_ERR_CODE pm3ScanSfield (EPS_UINT8*, EPS_INT32, EPS_INT32*,
+ EPS_PRINTAREA_SOURCE*, EPS_INT32,
+ EPS_INT32, EPS_PRINT_AREA_INFO* );
+static EPS_ERR_CODE pm3ScanTfield (EPS_UINT8*, EPS_INT32, EPS_INT32*,
+ EPS_INT32*, EPS_UINT8**, EPS_UINT32*);
+static EPS_ERR_CODE pm3ScanLfield (EPS_UINT8*, EPS_INT32, EPS_INT32*,
+ EPS_UINT8*, EPS_INT32, EPS_SUPPORTED_MEDIA*);
+static EPS_ERR_CODE pm3ScanPfield (EPS_UINT8*, EPS_INT32, EPS_INT32*,
+ EPS_INT32* );
+static EPS_ERR_CODE pm3GetTfieldValue (EPS_UINT8*, EPS_INT32, EPS_INT32*,
+ EPS_INT32*, EPS_UINT8**, EPS_UINT32*);
+static EPS_UINT8* pm3FindTfield (EPS_UINT8*, EPS_INT32, EPS_UINT8 );
+static EPS_ERR_CODE pm3ChangeSpec_UpdatePMReply (EPS_PRINTER_INN*, EPS_UINT8*, EPS_INT32*);
+
+/*------------------------------------ Debug Dump -----------------------------------*/
+/*******************************************|********************************************/
+ /*** ALL Debug Dump Switch for <epson-escpr-pm.c> */
+ /*** -------------------------------------------------------------------------------*/
+#define _ESCPR_DEBUG_SP 0 /* 0: OFF 1: ON */
+#define _ESCPR_DEBUG_SP_VERBOSE 0 /* 0: OFF 1: ON */
+
+ /*** _ESCPR_DEBUG_SP --- Definition of << DUMP_PMREPLY() >> */
+ /*** -------------------------------------------------------------------------------*/
+#if _ESCPR_DEBUG_SP | _VALIDATE_SUPPORTED_MEDIA_DATA_
+
+typedef enum _DUMP_TYPE {
+ DUMP_HEX = 0,
+ DUMP_ASCII,
+ DUMP_S_TAG_ONLY,
+} DUMP_TYPE;
+
+char* str[] ={
+ "DUMP_HEX",
+ "DUMP_ASCII",
+ "DUMP_S_TAG_ONLY",
+ };
+
+static void print_PMREPLY(EPS_UINT8* pm, DUMP_TYPE type, EPS_INT8* msg)
+{
+ EPS_UINT8* p = pm;
+ EPS_INT16 col = 0;
+
+ if(*p != 'S') {
+ if(type != DUMP_HEX) {
+ return; /* do not anything */
+ }
+
+ /* Anyway if type is DUMP_HEX then dump it */
+ }
+
+ printf("%s\r\n", msg);
+ printf("PM REPLY DUMP [TYPE:%s]\r\n", str[type]);
+
+ if(type == DUMP_HEX) {
+ while(!((*p == 0x0D) && (*(p+1) == 0x0A))) {
+ printf("0x%02X ", *p++);
+
+ if((++col % 10) == 0) {
+ printf("\r\n");
+ }
+ }
+
+ } else {
+ while(*p == 'S') {
+ printf("%c ", *p++);
+ printf("%02d\r\n", *p++);
+ while(*p == 'T') {
+ printf(" %c", *p++);
+ printf(" %02d", *p++);
+ printf(" [0x%02X]", *p++);
+ printf(" %c\r\n", *p++);
+ }
+ printf("%c\r\n", *p++);
+
+ if(type == DUMP_S_TAG_ONLY) {
+ break;
+ }
+
+ if ((*p == 0x0D) && (*(p+1) == 0x0A)) {
+ break;
+ }
+ }
+
+ }
+
+ if(type != DUMP_S_TAG_ONLY) {
+ printf("0x%02X ", *p++);
+ printf("0x%02X ", *p);
+ }
+
+ printf("\r\nEND\r\n");
+
+}
+#endif
+
+#if _ESCPR_DEBUG_SP
+#define DUMP_PMREPLY(a) print_PMREPLY a
+#else
+#define DUMP_PMREPLY(a)
+#endif
+
+ /*** _ESCPR_DEBUG_SP_VERBOSE */
+ /*** --- Definition of << VERBOSE_DUMP_PMREPLY() >> and << verbose_dbprint() >> */
+ /*** -------------------------------------------------------------------------------*/
+#if _ESCPR_DEBUG_SP_VERBOSE
+#define VERBOSE_DUMP_PMREPLY(a) print_PMREPLY a
+#define verbose_dbprint(a) EPS_DBGPRINT(a)
+#else
+#define VERBOSE_DUMP_PMREPLY(a)
+#define verbose_dbprint(a)
+#endif
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
+/*-------------------- Public Functions ---------------------*/
+/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: epspmCreateMediaInfo() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* printer EPS_PRINTER_INN* I: printer that it has original structure */
+/* pmString EPS_INT8* I: PM reply string */
+/* pmSize EPS_INT32 I: size of PM reply string */
+/* needPaperSource EPS_BOOK* o: extend paper source is exist */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* Marge paper source to EPS_SUPPORTED_MEDIA. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epspmCreateMediaInfo(
+
+ EPS_PRINTER_INN* printer,
+ EPS_UINT8* pmString,
+ EPS_INT32 pmSize,
+ EPS_BOOL* extPaper
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 pmIdx; /* pm string index */
+ EPS_INT32 idx; /* Index */
+ EPS_INT32 sIdx = 0; /* Media size index */
+ EPS_INT32 tIdx = 0; /* Media type index */
+ EPS_INT32 num_mType = 0; /* Media type number */
+ EPS_INT32 num_mSize = 0; /* Media size number */
+ EPS_BOOL breakParse = FALSE;
+
+ EPS_LOG_FUNCIN;
+
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ if(printer->supportedMedia.numSizes != -1){
+ /*** "Filter" Raw "PM" data (Remake the correct pm stirng) */
+ ret = _SP_ChangeSpec_UpdatePMReply(printer, pmString, pmSize);
+ if (ret != EPS_ERR_NONE) {
+ EPS_RETURN( ret );
+ }
+ }
+#else
+/*** "Filter" Raw "PM" data (Remake the correct pm stirng) */
+ ret = _SP_ChangeSpec_UpdatePMReply(printer, pmString, pmSize);
+ if (ret != EPS_ERR_NONE) {
+ EPS_RETURN( EPS_ERR_OPR_FAIL ); /* Invalid format */
+ }
+#endif
+
+/*** Create the structure of the support media */
+ printer->supportedMedia.resolution = EPS_IR_360X360; /* default support */
+
+ /*** Count "Paper Size" field & check format */
+ pmIdx = EPS_PM_HEADER_LEN; /* skip the command header of pm string */
+ while( pmIdx < pmSize && FALSE == breakParse) {
+ switch(pmString[pmIdx]) {
+ case 'R':
+ if( 720 == ((pmString[pmIdx+1] << 8) + pmString[pmIdx+2]) ){
+ printer->supportedMedia.resolution |= EPS_IR_720X720;
+ } else if( 600 == ((pmString[pmIdx+1] << 8) + pmString[pmIdx+2]) ){
+ printer->supportedMedia.resolution |= EPS_IR_300X300 | EPS_IR_600X600;
+ } else if( 300 == ((pmString[pmIdx+1] << 8) + pmString[pmIdx+2]) ){
+ printer->supportedMedia.resolution |= EPS_IR_300X300;
+ }
+ pmIdx += 6;
+ break;
+
+ case 'M':
+ printer->supportedMedia.JpegSizeLimit =
+ (pmString[pmIdx+1] << 24) + (pmString[pmIdx+2] << 16) + (pmString[pmIdx+3] << 8) + pmString[pmIdx+4];
+ printer->JpgMax = printer->supportedMedia.JpegSizeLimit;
+ pmIdx += 6;
+ break;
+
+ case 'S':
+ /* move T field */
+ if(pmIdx < pmSize-2){
+ pmIdx += 2;
+ } else{
+ EPS_RETURN( EPS_ERR_OPR_FAIL );
+ }
+
+ num_mSize++;
+
+ for(; pmIdx < pmSize-4; pmIdx += 4) { /* 4 = T x x / */
+ if(pmString[pmIdx] == '/'){
+ pmIdx += 1;
+ break;
+ } else if(pmString[pmIdx] != 'T') {
+ EPS_RETURN( EPS_ERR_OPR_FAIL );
+ }
+ }
+ break;
+
+ default:
+ breakParse = TRUE; /* unknown field */
+ break;
+ }
+
+ if(FALSE == breakParse){
+ /* If we run into an occurrence of carriage return followed by line feed,
+ * we have found the terminating characters of the string. */
+ if(pmString[pmIdx] == 0x0D && pmString[pmIdx+1] == 0x0A) {
+ break;
+ }
+ }
+ }
+
+ /* Allocate memory for the media size list. */
+ printer->supportedMedia.sizeList =
+ (EPS_MEDIA_SIZE*)EPS_ALLOC( sizeof(EPS_MEDIA_SIZE) * num_mSize );
+ if(NULL == printer->supportedMedia.sizeList){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ memset(printer->supportedMedia.sizeList, 0, sizeof(EPS_MEDIA_SIZE) * num_mSize);
+ printer->supportedMedia.numSizes = num_mSize;
+
+ pmIdx = EPS_PM_HEADER_LEN; /* skip the command header of pm string */
+ for(sIdx = 0; sIdx < num_mSize; sIdx++) {
+ if(pmString[pmIdx] == 'M' || pmString[pmIdx] == 'R') {
+ pmIdx += 6;
+ sIdx--;
+ continue;
+ }
+
+ printer->supportedMedia.sizeList[sIdx].mediaSizeID = pmString[pmIdx+1];
+/* EPS_DBGPRINT(("Size=%d\r\n", pmString[pmIdx+1]));*/
+ pmIdx += 2;
+
+ /* For the given paper type, iterate through the paper type to get the number
+ * of media types contained in it */
+ num_mType = 0;
+ for(idx = pmIdx; idx < pmSize-4; idx += 4) {
+ if(pmString[idx] == '/'){
+ idx += 1;
+ break;
+ }
+ num_mType++;
+
+ }
+
+ /* Allocate memory for the media type array. */
+ printer->supportedMedia.sizeList[sIdx].typeList =
+ (EPS_MEDIA_TYPE*)EPS_ALLOC( sizeof(EPS_MEDIA_TYPE) * num_mType );
+
+ if (printer->supportedMedia.sizeList[sIdx].typeList == NULL) {
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+
+ memset(printer->supportedMedia.sizeList[sIdx].typeList, 0, sizeof(EPS_MEDIA_TYPE) * num_mType);
+ printer->supportedMedia.sizeList[sIdx].numTypes = num_mType;
+
+ for(tIdx = 0; tIdx < num_mType; tIdx++) {
+#ifndef GCOMSW_USE_3DMEDIA
+ if( EPS_MTID_3D == pmString[pmIdx+1] ){
+ printer->supportedMedia.sizeList[sIdx].numTypes--;
+ num_mType--; tIdx--;
+ pmIdx += 4; /* move next field */
+ continue;
+ }
+#endif
+#ifndef GCOMSW_USE_ROLLE_PAPER
+ if( EPS_MTID_PLAIN_ROLL_STICKER == pmString[pmIdx+1] ||
+ EPS_MTID_GROSSY_ROLL_STICKER == pmString[pmIdx+1] ){
+ printer->supportedMedia.sizeList[sIdx].numTypes--;
+ pmIdx += 4; /* move next field */
+ continue;
+ }
+#endif
+ printer->supportedMedia.sizeList[sIdx].typeList[tIdx].mediaTypeID = pmString[pmIdx+1];
+/* EPS_DBGPRINT(("\tType=%d (%02X)\r\n", pmString[pmIdx+1], pmString[pmIdx+2]));*/
+
+ /* Bitwise OR with 10000000 - Check for borderless */
+ if( pmString[pmIdx+2] & 0x80 ){
+ printer->supportedMedia.sizeList[sIdx].typeList[tIdx].layout |= EPS_MLID_BORDERLESS;
+ }
+ /* Bitwise OR with 01000000 - Check for border "disable" mode */
+ if( !(pmString[pmIdx+2] & 0x40) ){
+ printer->supportedMedia.sizeList[sIdx].typeList[tIdx].layout |= EPS_MLID_BORDERS;
+ }
+
+ /* set quality */
+ printer->supportedMedia.sizeList[sIdx].typeList[tIdx].quality |= (pmString[pmIdx+2] & EPS_MQID_ALL);
+
+ /* set duplex */
+ if( pmString[pmIdx+2] & 0x10 &&
+ obsEnableDuplex(printer->supportedMedia.sizeList[sIdx].mediaSizeID) ){
+ printer->supportedMedia.sizeList[sIdx].typeList[tIdx].duplex = EPS_DUPLEX_ENABLE;/*EPS_DUPLEX_SHORT*/;
+ } else{
+ printer->supportedMedia.sizeList[sIdx].typeList[tIdx].duplex = EPS_DUPLEX_DISABLE;
+ }
+
+ /* Bitwise OR with 00001000 - Check for extend paper source */
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ if( pmString[pmIdx+2] & 0x08 ){
+ *extPaper = TRUE;
+ } else {
+ /* DEFAULT. All printer support rear paper source */
+ printer->supportedMedia.sizeList[sIdx].typeList[tIdx].paperSource = EPS_MPID_REAR;
+ }
+
+ /* param2 value check */
+ if( !(pmString[pmIdx+2] & (0x01 | 0x02 | 0x04)) ){
+ printf("\n\n!!!!!!!!! Quality is not described. !!!!!!!!!\n"
+ "SizeID=0x%02X / TypeID=0x%02X / param2=0x%02X\n",
+ printer->supportedMedia.sizeList[sIdx].mediaSizeID,
+ pmString[pmIdx+1], pmString[pmIdx+2]);
+ }
+ if( !(pmString[pmIdx+2] & 0x80) && (pmString[pmIdx+2] & 0x40) ){
+ printf("\n\n!!!!!!!!! Layout is not described. !!!!!!!!!\n"
+ "SizeID=0x%02X / TypeID=0x%02X / param2=0x%02X\n",
+ printer->supportedMedia.sizeList[sIdx].mediaSizeID,
+ pmString[pmIdx+1], pmString[pmIdx+2]);
+ }
+
+#else
+ if( pmString[pmIdx+2] & 0x08 ){
+ *extPaper = TRUE;
+ }
+ /* DEFAULT. All printer support rear paper source */
+ printer->supportedMedia.sizeList[sIdx].typeList[tIdx].paperSource = EPS_MPID_REAR;
+#endif
+ pmIdx += 4; /* move next field */
+ }
+ pmIdx += 1; /* skip terminater */
+ }
+
+/*** Add extend infomation */
+ AppendMedia(&printer->supportedMedia);
+
+ EPS_RETURN( ret );
+}
+
+
+void epspmClearMediaInfo(
+
+ EPS_SUPPORTED_MEDIA* supportedMedia
+
+){
+ EPS_INT32 idx;
+ if( NULL != supportedMedia->sizeList ){
+ for(idx = 0; idx < supportedMedia->numSizes; idx++) {
+ EPS_SAFE_RELEASE(supportedMedia->sizeList[idx].typeList);
+ }
+ EPS_SAFE_RELEASE(supportedMedia->sizeList);
+ supportedMedia->numSizes = 0;
+ }
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: epspmMargePaperSource() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* printer EPS_PRINTER_INN* I: printer that it has original structure */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* */
+/* Description: */
+/* Marge paper source to EPS_SUPPORTED_MEDIA. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epspmMargePaperSource(
+
+ EPS_PRINTER_INN* printer,
+ EPS_UINT8* pmString,
+ EPS_INT32 pmSize
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 pmIdx; /* pm string index */
+ EPS_INT32 sIdx = 0; /* Media size index */
+ EPS_INT32 tIdx = 0; /* Media type index */
+ EPS_MEDIA_SIZE *pMSize = NULL;
+
+ EPS_LOG_FUNCIN;
+
+ if(memcmp(pmString, PM_REPLY_HEADER, EPS_PM_HEADER_LEN) != 0) {
+ EPS_DBGPRINT(("_SP_ChangeSpec_UpdatePMReply > EPS_ERR_SP_INVALID_HEADER\r\n"));
+ EPS_RETURN( EPS_ERR_SP_INVALID_HEADER );
+ }
+
+ /* Delete the command header of pm string */
+ pmIdx = EPS_PM_HEADER_LEN; /* skip the command header of pm string */
+
+/*** Check to make sure the PM reply has a valid beginning */
+ if(pmString[pmIdx] != 'S' && pmString[pmIdx+2] != 'T') {
+ EPS_RETURN( EPS_ERR_OPR_FAIL );
+ }
+
+/*** Create the structure of the support media */
+ /*** Count "Paper Size" field & check format */
+ for(; pmIdx < pmSize-7; ) { /* 7 = S x T x x // */
+ if(pmString[pmIdx] != 'S') {
+ EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
+ }
+
+ /* search size ID */
+ pmIdx++;
+ pMSize = NULL;
+ for(sIdx = 0; sIdx < printer->supportedMedia.numSizes; sIdx++){
+ if(pmString[pmIdx] == printer->supportedMedia.sizeList[sIdx].mediaSizeID){
+ pMSize = &printer->supportedMedia.sizeList[sIdx];
+/* EPS_DBGPRINT(("Size = %d\n", printer->supportedMedia.sizeList[sIdx].mediaSizeID))*/
+ break;
+ }
+ }
+
+ pmIdx++; /* move next field */
+
+ while( pmIdx < pmSize ){
+ if(pmString[pmIdx] == 'T'){
+ if(NULL != pMSize){
+ /* search type ID */
+ pmIdx++;
+ for(tIdx = 0; tIdx < pMSize->numTypes && pmIdx < pmSize-4; tIdx++){ /* 4 = T x x / */
+ if(pmString[pmIdx] == pMSize->typeList[tIdx].mediaTypeID){
+ pMSize->typeList[tIdx].paperSource = pmString[pmIdx+1];
+ if( 0 == pMSize->typeList[tIdx].paperSource ){
+ pMSize->typeList[tIdx].paperSource = ComplementPaperSource(pMSize->mediaSizeID);
+ }
+ if( obsEnableAutoFeed() ){
+ pMSize->typeList[tIdx].paperSource |= EPS_MPID_AUTO;
+ }
+#if !_VALIDATE_SUPPORTED_MEDIA_DATA_
+ pMSize->typeList[tIdx].paperSource &= EPS_MPID_ALL_ESCPR;
+#endif
+ pmIdx += 3;
+ break;
+ }
+ }
+ if(tIdx >= pMSize->numTypes){
+ /* Skip unknown T */
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ printf("\n\n!!!!!!!!! pm2 contains TypeID(0x%02X) that doesn't exist in pm1. !!!!!!!!!\n", pmString[pmIdx]);
+#endif
+ pmIdx += 3;
+ }
+ } else{
+ /* Skip unknown S */
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ printf("\n\n!!!!!!!!! pm2 contains SizeID(0x%02X) that doesn't exist in pm1. !!!!!!!!!\n", pmString[pmIdx]);
+#endif
+ pmIdx += 4;
+ }
+ } else if(pmString[pmIdx] == '/') {
+ pmIdx++;
+ break;
+ } else{
+ EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
+ }
+ }
+
+ /* If we run into an occurrence of carriage return followed by line feed,
+ * we have found the terminating characters of the string. */
+ if(pmString[pmIdx] == 0x0D && pmString[pmIdx+1] == 0x0A) {
+ break;
+ }
+ }
+ if(pmIdx >= pmSize){
+ EPS_RETURN( EPS_ERR_OPR_FAIL ); /* bad format */
+ }
+
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: epspmGetPrintAreaInfo() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* supportedMedia EPS_SUPPORTED_MEDIA* I : supported media structure */
+/* resolution EPS_UINT32 I : input resolution */
+/* layoutInfo EPS_LAYOUT_INFO O : print area information structure */
+/* baseBorder EPS_RECT* O : custom border base margin for print */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_INV_INPUT_RESOLUTION - Invalid Input Resolution */
+/* EPS_ERR_INV_MEDIA_SIZE - Invalid Media Size */
+/* EPS_ERR_INV_BORDER_MODE - Invalid Border Mode */
+/* EPS_ERR_INV_TOP_MARGIN - Invalid Top Magirn */
+/* EPS_ERR_INV_LEFT_MARGIN - Invalid Left Margin */
+/* EPS_ERR_INV_BOTTOM_MARGIN - Invalid Bottom Margin */
+/* EPS_ERR_INV_RIGHT_MARGIN - Invalid Right Margin */
+/* EPS_ERR_INV_CD_OUTDIM - Invalid CD Outside Diameter */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* Create print size and margin information. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epspmGetPrintAreaInfo(
+
+ EPS_BOOL preview,
+ const EPS_JOB_ATTRIB* pAttr,
+ EPS_PM_DATA* pmData,
+ EPS_UINT32* paperWidth,
+ EPS_UINT32* paperHeight,
+ EPS_LAYOUT_INFO* layoutInfo,
+ EPS_RECT* baseBorder
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_PRINTAREA_SOURCE src;
+ EPS_INT32 idx;
+ EPS_MEDIA_INFO tmpMI;
+
+ EPS_LOG_FUNCIN;
+
+ ret = GetPrintAreaSource(pAttr->inputResolution, &src);
+ if (EPS_ERR_NONE != ret) {
+ EPS_RETURN( ret );
+ }
+
+ for (idx = 0; src.pMI[idx].id != -1; idx++) {
+ if (src.pMI[idx].id == pAttr->mediaSizeIdx)
+ break;
+ }
+ if (src.pMI[idx].id == -1) {
+ EPS_RETURN( EPS_ERR_INV_MEDIA_SIZE );
+ }
+
+ if(EPS_MSID_USER != src.pMI[idx].id){
+ src.pMI = &src.pMI[idx]; /* point target */
+ *paperWidth = src.pMI->paper_x * src.factor;
+ *paperHeight = src.pMI->paper_y * src.factor;
+
+ } else{
+ /* temparaly media info for user-defined size */
+ tmpMI.id = EPS_MSID_USER;
+ tmpMI.paper_x = *paperWidth = pAttr->userDefWidth;
+ tmpMI.paper_y = *paperHeight = pAttr->userDefHeight;
+ tmpMI.print_area_x_border = *paperWidth - src.defaultBorder * src.factor * 2;
+ tmpMI.print_area_y_border = *paperHeight - src.defaultBorder * src.factor * 2;
+ tmpMI.left_margin_borderless = src.pMI[idx].left_margin_borderless;
+ tmpMI.top_margin_borderless = src.pMI[idx].top_margin_borderless;
+ tmpMI.print_area_x_borderless = tmpMI.paper_x - tmpMI.left_margin_borderless * 2;
+ tmpMI.print_area_y_borderless = tmpMI.paper_y
+ - tmpMI.top_margin_borderless - src.borderlessBottom;
+ src.pMI = &tmpMI; /* point target */
+
+ *paperWidth = pAttr->userDefWidth;
+ *paperHeight = pAttr->userDefHeight;
+ }
+
+ if(EPS_MLID_CDLABEL == pAttr->printLayout){
+ if(preview){
+ *paperWidth =
+ *paperHeight = elGetDots(pAttr->inputResolution, EPS_CDDIM_OUT_MAX*10);
+ }
+ }
+
+ /*** Margin */
+ layoutInfo->layout = pAttr->printLayout;
+ if( ( NULL != pmData && 3 <= pmData->version ) &&
+ ( EPS_MLID_BORDERLESS != pAttr->printLayout &&
+ EPS_MLID_CDLABEL != pAttr->printLayout) )
+ { /*** from pm3 */
+ ret = pm3GetPrintMargin(pmData, pAttr, layoutInfo, baseBorder);
+ } else{ /*** from table */
+ ret = CalcPrintMargin(preview, &src, pAttr, layoutInfo, baseBorder);
+ }
+
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: epspmCreatePrintAreaInfoFromTable() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* supportedMedia EPS_SUPPORTED_MEDIA* I : supported media structure */
+/* resolution EPS_UINT32 I : input resolution */
+/* layoutInfo EPS_LAYOUT_INFO O : print area information structure */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_INV_INPUT_RESOLUTION - Invalid Input Resolution */
+/* EPS_ERR_INV_MEDIA_SIZE - Invalid Media Size */
+/* EPS_ERR_INV_BORDER_MODE - Invalid Border Mode */
+/* EPS_ERR_INV_TOP_MARGIN - Invalid Top Magirn */
+/* EPS_ERR_INV_LEFT_MARGIN - Invalid Left Margin */
+/* EPS_ERR_INV_BOTTOM_MARGIN - Invalid Bottom Margin */
+/* EPS_ERR_INV_RIGHT_MARGIN - Invalid Right Margin */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* Create print size and margin information fom internal table. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epspmCreatePrintAreaInfoFromTable(
+
+ const EPS_SUPPORTED_MEDIA* supportedMedia,
+ EPS_UINT32 resolution,
+ EPS_PRINT_AREA_INFO* printAreaInfo
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 sizeNum, i, idx;
+ EPS_LAYOUTSIZE_INFO *pSize;
+ EPS_PRINTAREA_SOURCE src;
+ const EPS_MEDIA_INFO* tmpMI;
+
+ EPS_LOG_FUNCIN;
+
+ ret = GetPrintAreaSource(resolution, &src);
+ if (EPS_ERR_NONE != ret) {
+ EPS_RETURN( ret );
+ }
+
+ sizeNum = (NULL != supportedMedia)?supportedMedia->numSizes:EPS_NUM_MEDIA_SIZES;
+ pSize = (EPS_LAYOUTSIZE_INFO*)EPS_ALLOC(sizeof(EPS_LAYOUTSIZE_INFO) * sizeNum);
+ if( pSize == NULL ){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ memset(pSize, 0, sizeof(EPS_LAYOUTSIZE_INFO) * sizeNum);
+ printAreaInfo->sizeList = pSize;
+ printAreaInfo->numSizes = sizeNum;
+
+ if(NULL == supportedMedia){
+ idx = -1; /* use static table */
+ } else{
+ idx = 0;
+ }
+ tmpMI = src.pMI;
+ for(i = 0; i < sizeNum; i++){
+ if(NULL != supportedMedia){
+ for (idx = 0; tmpMI[idx].id != -1; idx++) {
+ if (tmpMI[idx].id == supportedMedia->sizeList[i].mediaSizeID)
+ break;
+ }
+ } else{
+ idx++;
+ }
+ if (tmpMI[idx].id == -1 || tmpMI[idx].id == EPS_MSID_USER) {
+ printAreaInfo->numSizes--;
+ continue;
+ }
+ src.pMI = &tmpMI[idx]; /* point target */
+
+ pSize->mediaSizeID = src.pMI->id;
+ pSize->numLayouts = 2;
+ pSize->layoutList = (EPS_LAYOUT_INFO*)EPS_ALLOC(sizeof(EPS_LAYOUT_INFO) * 2);
+
+ pSize->paperWidth = src.pMI->paper_x * src.factor;
+ pSize->paperHeight = src.pMI->paper_y * src.factor;
+
+ pSize->layoutList[0].layout = EPS_MLID_BORDERLESS;
+ ret = CalcPrintMargin(TRUE, &src, NULL, &pSize->layoutList[0], NULL);
+ if (EPS_ERR_NONE != ret) {
+ break;
+ }
+
+ pSize->layoutList[1].layout = EPS_MLID_BORDERS;
+ ret = CalcPrintMargin(TRUE, &src, NULL, &pSize->layoutList[1], NULL);
+ if (EPS_ERR_NONE != ret) {
+ break;
+ }
+
+ pSize++;
+ }
+
+ EPS_RETURN( ret );
+}
+
+
+void epspmClearPrintAreaInfo(
+
+ EPS_PRINT_AREA_INFO* printAreaInfo
+
+){
+ EPS_INT32 idx;
+ if( NULL != printAreaInfo->sizeList ){
+ for(idx = 0; idx < printAreaInfo->numSizes; idx++) {
+ EPS_SAFE_RELEASE(printAreaInfo->sizeList[idx].layoutList);
+ }
+ EPS_SAFE_RELEASE(printAreaInfo->sizeList);
+ printAreaInfo->numSizes = 0;
+ }
+}
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
+/*-------------------- Local Functions ---------------------*/
+/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: _SP_ChangeSpec_UpdatePMReply() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* printer EPS_PRINTER_INN* I/O: Pointer to a printer infomation */
+/* orgPmString EPS_UINT8* I: String of the pm command reply */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_SP_INVALID_POINTER - Input pointer error */
+/* EPS_ERR_SP_INVALID_HEADER - pm string header error */
+/* EPS_ERR_SP_INVALID_TERMINATOR - pm string terminator error */
+/* EPS_ERR_SP_NO_VALID_FIELD - pm string field error */
+/* */
+/* Description: */
+/* - Invalid formats : Delete */
+/* - Unknown 'S' field : Delete */
+/* - Unknown 'T' field : Replace to PGPP-Premium Glossy Photo Paper(id:0x0b) */
+/* field If PGPP aleady exist its 'S' field then just */
+/* combine the mode property */
+/* - Duplicated 'S' fields : Merge together */
+/* - Duplicated 'T' fields : Merge together and combine each mode properties */
+/* - Only DRAFT mode exist : Add NORMAL mode to its print quality property */
+/* */
+/* NOTE: */
+/* Be sure that the pData is a pointers that a starting address of 512 bytes */
+/* buffer should be assigned or memory acces violation should be occured. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE _SP_ChangeSpec_UpdatePMReply (
+
+ EPS_PRINTER_INN* printer,
+ EPS_UINT8* orgPmString,
+ EPS_INT32 bufSize
+
+){
+/*** Declare Variable Local to Routine */
+ EPS_UINT8* pBefore = NULL;
+ EPS_UINT8* pAfter = NULL;
+ EPS_UINT8* pSrc = NULL;
+ EPS_UINT8* pDes = NULL;
+ EPS_UINT8 tempPmString[EPS_PM_MAXSIZE]; /* Retrieved PM data from printer */
+ EPS_UINT8 paperSize;
+ EPS_UINT8 paperType;
+ EPS_INT32 desSize = EPS_PM_MAXSIZE - EPS_PM_HEADER_LEN;
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ EPS_UINT8 PmStringForCompare[EPS_PM_MAXSIZE]; /* Retrieved PM data from printer */
+#endif
+ EPS_INT16 idx;
+
+ EPS_LOG_FUNCIN;
+
+/*** Validate input parameters */
+ if(orgPmString == NULL) {
+ EPS_DBGPRINT(("_SP_ChangeSpec_UpdatePMReply > EPS_ERR_SP_INVALID_POINTER\r\n"));
+ EPS_RETURN( EPS_ERR_SP_INVALID_POINTER );
+ }
+
+ if(memcmp(orgPmString, PM_REPLY_HEADER, EPS_PM_HEADER_LEN) != 0) {
+ EPS_DBGPRINT(("_SP_ChangeSpec_UpdatePMReply > EPS_ERR_SP_INVALID_HEADER\r\n"));
+ EPS_RETURN( EPS_ERR_SP_INVALID_HEADER );
+ }
+
+ for(idx = EPS_PM_HEADER_LEN; idx <= (EPS_PM_MAXSIZE-EPS_PM_TERMINATOR_LEN); idx++) {
+ if(orgPmString[idx]== 0x0D && orgPmString[idx+1] == 0x0A) {
+ break;
+ }
+ }
+ if(idx > (EPS_PM_MAXSIZE-EPS_PM_TERMINATOR_LEN)) {
+ EPS_DBGPRINT(("_SP_ChangeSpec_UpdatePMReply > EPS_ERR_SP_INVALID_TERMINATOR\r\n"));
+ EPS_RETURN( EPS_ERR_SP_INVALID_TERMINATOR );
+ }
+
+/*** Initialize Local Variables */
+ memset(tempPmString, 0x00, EPS_PM_MAXSIZE);
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ memset(PmStringForCompare, 0x00, EPS_PM_MAXSIZE);
+#endif
+
+ /* Initialize pm data state */
+ printer->pmData.version = 0;
+ printer->pmData.length = 0;
+ EPS_SAFE_RELEASE( printer->pmData.pmString )
+
+/*** Correct PM REPLY following 7 steps */
+/*** ---------------------------------------------------------------------------------- */
+/*** STEP 1 : Replace Built-in resource. Because PM REPLY of the following printers */
+/*** is insufficient, */
+/*** ---------------------------------------------------------------------------------- */
+ if( (strcmp(printer->modelName, "E-300" ) == 0) ){
+ bufSize = _SP_LoadPMString(EPS_PMS_E300, orgPmString, bufSize);
+
+ } else if( (strcmp(printer->modelName, "E-500" ) == 0) ||
+ (strcmp(printer->modelName, "E-700" ) == 0) ) {
+ bufSize = _SP_LoadPMString(EPS_PMS_E500, orgPmString, bufSize);
+
+ } else if( (strcmp(printer->modelName, "PictureMate PM 200" ) == 0) ||
+ (strcmp(printer->modelName, "PictureMate PM 210" ) == 0) ){
+ bufSize = _SP_LoadPMString(EPS_PMS_PM200, orgPmString, bufSize);
+
+ } else if( (strcmp(printer->modelName, "PictureMate PM 240" ) == 0) ||
+ (strcmp(printer->modelName, "PictureMate PM 250" ) == 0) ||
+ (strcmp(printer->modelName, "PictureMate PM 280" ) == 0) ){
+ bufSize = _SP_LoadPMString(EPS_PMS_PM240, orgPmString, bufSize);
+ }
+ if(bufSize <= 0){
+ return bufSize;
+ }
+
+ /* Use work pointers to call each filter functions */
+ pBefore = orgPmString + EPS_PM_HEADER_LEN; /* position of first tab 'S' */
+ pAfter = tempPmString;
+ bufSize -= EPS_PM_HEADER_LEN;
+
+/*** ---------------------------------------------------------------------------------- */
+/*** STEP 2 : Remove <CR><LF> on the way */
+/*** ---------------------------------------------------------------------------------- */
+ pSrc = pBefore;
+ pDes = pAfter;
+
+ DUMP_PMREPLY((pSrc, DUMP_HEX, "< ORIGINAL >"));
+
+ _pmValidateRemoveDelimiter(pDes, pSrc, bufSize);
+
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ if(memcmp(pBefore, pAfter, bufSize - EPS_PM_HEADER_LEN) != 0){
+ printf("!!!!!!!!! PM reply data modified on STEP 2. !!!!!!!!!\nRemove <CR><LF> on the way\n\n");
+ }
+#endif
+ /* Update orgPmString */
+ memcpy(pBefore, pAfter, bufSize);
+
+ VERBOSE_DUMP_PMREPLY((pDes, DUMP_ASCII, "< STEP 1 PASSED >"));
+
+/*** ---------------------------------------------------------------------------------- */
+/*** STEP 3 : Copy only valid fields to reply buffer and remove unknown 'S' from reply */
+/*** ---------------------------------------------------------------------------------- */
+ pSrc = pBefore;
+ pDes = pAfter;
+
+ DUMP_PMREPLY((pSrc, DUMP_HEX, "< ORIGINAL >"));
+
+ if(_pmValidateRemoveUnknownSfield(pDes, pSrc) == 0) {
+ EPS_DBGPRINT(("_SP_ChangeSpec_UpdatePMReply > EPS_ERR_SP_NO_VALID_FIELD\r\n"));
+ EPS_RETURN( EPS_ERR_SP_NO_VALID_FIELD );
+ }
+
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ if(memcmp(pBefore, pAfter, bufSize) != 0){
+ printf("!!!!!!!!! PM reply data modified on STEP 3. !!!!!!!!!\n\n\n");
+ print_PMREPLY(pAfter, DUMP_HEX, "< Filterd >");
+ }
+#endif
+ /* Update orgPmString */
+ memcpy(pBefore, pAfter, bufSize);
+
+ VERBOSE_DUMP_PMREPLY((pDes, DUMP_ASCII, "< STEP 1 PASSED >"));
+
+/*** ---------------------------------------------------------------------------------- */
+/*** STEP 4 : Correct unknown 'T' fields */
+/*** ---------------------------------------------------------------------------------- */
+ pSrc = pBefore;
+ pDes = pAfter;
+
+ _pmCorrectUnknownTfield(pDes, pSrc);
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ if(memcmp(pBefore, pAfter, bufSize) != 0){
+ printf("!!!!!!!!! PM reply data modified on STEP 4. !!!!!!!!!\n\n\n");
+ print_PMREPLY(pAfter, DUMP_HEX, "< Filterd >");
+ }
+#endif
+
+ /* Update orgPmString */
+ memcpy(pBefore, pAfter, bufSize);
+
+ VERBOSE_DUMP_PMREPLY((pDes, DUMP_ASCII, "< STEP 2 PASSED >"));
+
+/*** ---------------------------------------------------------------------------------- */
+/*** STEP 5 : Merge duplicated fields */
+/*** ---------------------------------------------------------------------------------- */
+ pSrc = pBefore;
+ pDes = pAfter;
+
+ _pmCorrectDupulicatedFields(pDes, pSrc, &desSize);
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ if(memcmp(pBefore, pAfter, bufSize) != 0){
+ printf("!!!!!!!!! PM reply data modified on STEP 5. !!!!!!!!!\n\n\n");
+ print_PMREPLY(pAfter, DUMP_HEX, "< Filterd >");
+ }
+#endif
+
+ /* Update orgPmString */
+ memcpy(pBefore, pAfter, bufSize);
+
+ VERBOSE_DUMP_PMREPLY((pDes, DUMP_ASCII, "< STEP 3 PASSED >"));
+
+ /* Now, Service Pack retains filtered data its original quality properties */
+ /* within the inner buffer g_PMinfo.data */
+ /* This data would be referenced whenever it is required to compare its originality */
+ DUMP_PMREPLY((orgPmString, DUMP_ASCII, \
+ "< FILTERED (Retained within SP-same printer's caps) >"));
+
+
+/*** ---------------------------------------------------------------------------------- */
+/*** STEP 6 : Delete the paper type "CD/DVD label" from the pm string when "Stylus */
+/*** Photo R380" or "Stylus Photo RX580" is used. */
+/*** ---------------------------------------------------------------------------------- */
+ if ((strcmp(printer->modelName, "Stylus Photo R380" ) == 0) ||
+ (strcmp(printer->modelName, "Stylus Photo RX580") == 0) ) {
+
+ pSrc = pBefore;
+ pDes = pAfter;
+ paperSize = 0xFF;
+ paperType = 0xFF;
+
+ while (*pSrc == 'S') {
+ paperSize = *(pSrc + 1); /* Save the media size */
+
+ *pDes++ = *pSrc++; /* set 'S' */
+ *pDes++ = *pSrc++; /* set the meida size */
+
+ while (*pSrc == 'T') {
+ paperType = *(pSrc + 1); /* Save the media type */
+
+ if ((paperSize == EPS_MSID_LETTER) && (paperType == EPS_MTID_CDDVD)) {
+ pSrc += 4; /* Move to next 'T' */
+ } else{
+ *pDes++ = *pSrc++; /* set 'T' */
+ *pDes++ = *pSrc++; /* set the media type */
+ *pDes++ = *pSrc++; /* set the printing mode info */
+ *pDes++ = *pSrc++; /* set '/' */
+ }
+ }
+ if (*pSrc == '/') {
+ *pDes++ = *pSrc++; /* set '/' */
+ }
+
+ /* check for string termination */
+ if ((*pSrc == 0xD) && (*(pSrc+1) == 0xA)) {
+ *pDes++ = *pSrc++;
+ *pDes++ = *pSrc++;
+ break;
+ }
+ }
+
+ /* Update orgPmString */
+ memcpy(pBefore, pAfter, bufSize);
+ }
+
+/*** ---------------------------------------------------------------------------------- */
+/*** STEP 7 : Adjust quality properties to the formal in order to return to the driver. */
+/*** it dose not change the filtered data through previous steps retained */
+/*** within Service Pack. but just change the buffer asigned as parameter. */
+/*** (in this case orgPmString) */
+/*** after duplicating the filtered data to it. */
+/*** ---------------------------------------------------------------------------------- */
+ /* set filterd value "printer->pmData.pmString" */
+ desSize += EPS_PM_HEADER_LEN;
+ printer->pmData.pmString = (EPS_UINT8*)EPS_ALLOC(desSize);
+ if( NULL == printer->pmData.pmString){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ memcpy(printer->pmData.pmString, orgPmString, desSize);
+ printer->pmData.length = desSize;
+ printer->pmData.version = 1;
+
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ memcpy(PmStringForCompare, orgPmString, bufSize);
+#endif
+
+ /* If Draft Quality is only supported, add Normal Quality */
+ _pmAdjustQuality(orgPmString);
+#if _VALIDATE_SUPPORTED_MEDIA_DATA_
+ if(memcmp(PmStringForCompare, orgPmString, bufSize - EPS_PM_HEADER_LEN) != 0){
+ printf("!!!!!!!!! PM reply data modified on STEP 7. !!!!!!!!!\n\n\n");
+ print_PMREPLY(PmStringForCompare + EPS_PM_HEADER_LEN, DUMP_HEX, "< Origin >");
+ print_PMREPLY(orgPmString + EPS_PM_HEADER_LEN, DUMP_HEX, "< Filterd >");
+ }
+#endif
+
+ DUMP_PMREPLY((orgPmString+EPS_PM_HEADER_LEN, DUMP_ASCII, \
+ "< FILTERED (Returned data to the driver-adjusted quality properties) >"));
+
+/*** Return to caller */
+ EPS_RETURN( EPS_ERR_NONE );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: epspmChangeSpec_DraftOnly() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* printer EPS_PRINTER_INN* I/O: Pointer to a printer infomation */
+/* jobAtter EPS_JOB_ATTRIB* I: Data structure containing page attribut settings */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* */
+/* Description: */
+/* If the quality mode which is not supported by printer is assigned, replace it */
+/* to printer's support mode. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epspmChangeSpec_DraftOnly (
+
+ EPS_PRINTER_INN* printer,
+ EPS_JOB_ATTRIB* jobAtter /* Print Attributes for this Job */
+
+){
+/*** Declare Variable Local to Routine */
+ EPS_UINT8 mediaSizeID;
+ EPS_UINT8 mediaTypeID;
+ EPS_UINT8* pPMinfo;
+ EPS_UINT8* pS_begin;
+ EPS_UINT8* pS_end;
+ EPS_UINT8* pTfield;
+ EPS_UINT8 quality[3]; /* Q_DRAFT / Q_NORMAL / Q_HIGH */
+
+ EPS_LOG_FUNCIN;
+
+/*** Validate input parameters */
+ if(printer->pmData.version <= 0) {
+ EPS_DBGPRINT(("ChangeSpec_DraftOnly : PM info not initialized\r\n"));
+ /* it is not able to hadle this situation so do nothing */
+ EPS_RETURN( EPS_ERR_NONE );
+ }
+
+/*** Initialize Global/Local Variables */
+ mediaSizeID = (EPS_UINT8)jobAtter->mediaSizeIdx;
+ mediaTypeID = (EPS_UINT8)jobAtter->mediaTypeIdx;
+ pPMinfo = NULL;
+ pS_begin = NULL;
+ pS_end = NULL;
+ pTfield = NULL;
+ memset(quality, 0, sizeof(quality));
+
+/*** Change quality */
+ /* Refer the data retained within Service Pack. */
+ /* "printer->pmData.pmString" has the header. */
+ pPMinfo = (EPS_UINT8*)(printer->pmData.pmString + EPS_PM_HEADER_LEN);
+
+ if(1 == printer->pmData.version) {
+ /* S field start postion */
+ if(_pmFindSfield(mediaSizeID, pPMinfo, &pS_begin, &pS_end) < 0) {
+ EPS_DBGPRINT(("ChangeSpec_DraftOnly : cannot find mediaSizeID(%d)\r\n", mediaSizeID));
+ /* it is not able to hadle this situation so do nothing */
+ EPS_RETURN( EPS_ERR_NONE );
+ };
+
+ VERBOSE_DUMP_PMREPLY((pS_begin, DUMP_S_TAG_ONLY,
+ "< ChangeSpec_DraftOnly : retained S field info >"));
+
+ /* Fetch the T field */
+ if((pTfield = _pmScanTfield(mediaTypeID, pS_begin)) == NULL) {
+ EPS_DBGPRINT(("ChangeSpec_DraftOnly : cannot find mediaTypeID(%d)\r\n", mediaTypeID));
+ /* it is not able to hadle this situation so do nothing */
+ EPS_RETURN( EPS_ERR_NONE );
+ }
+
+ pTfield += 2;
+ } else{
+ /* Fetch the T field */
+ if((pTfield = pm3FindTfield(printer->pmData.pmString, printer->pmData.length, mediaTypeID)) == NULL) {
+ EPS_DBGPRINT(("ChangeSpec_DraftOnly : cannot find mediaTypeID(%d)\r\n", mediaTypeID));
+ /* it is not able to hadle this situation so do nothing */
+ EPS_RETURN( EPS_ERR_NONE );
+ }
+ pTfield += 2;
+ }
+
+ /* Quality should be assigned to the only supported mode */
+ verbose_dbprint((" >> adjusted PrintQuality : %d -> ", jobAtter->printQuality));
+
+ if(!((*pTfield & 0x07) & /* Printer's support mode actually */
+ (jobAtter->printQuality))) { /* Upper layer(driver) assigned mode */
+
+ /* The quality mode which is not supported by printer is assigned */
+ /* Replace it to printer's support mode */
+ switch(*pTfield & 0x07) {
+ case 0x01: /* 0 0 1 : Draft only */
+ quality[Q_DRAFT] = EPS_MQID_DRAFT;
+ quality[Q_NORMAL] = EPS_MQID_DRAFT;
+ quality[Q_HIGH] = EPS_MQID_DRAFT;
+ break;
+ case 0x02: /* 0 1 0 : Normal only */
+ quality[Q_DRAFT] = EPS_MQID_NORMAL;
+ quality[Q_NORMAL] = EPS_MQID_NORMAL;
+ quality[Q_HIGH] = EPS_MQID_NORMAL;
+ break;
+ case 0x04: /* 1 0 0 : High only */
+ quality[Q_DRAFT] = EPS_MQID_HIGH;
+ quality[Q_NORMAL] = EPS_MQID_HIGH;
+ quality[Q_HIGH] = EPS_MQID_HIGH;
+ break;
+ case 0x03: /* 0 1 1 : Normal and Draft */
+ quality[Q_DRAFT] = EPS_MQID_DRAFT;
+ quality[Q_NORMAL] = EPS_MQID_NORMAL;
+ quality[Q_HIGH] = EPS_MQID_NORMAL;
+ break;
+ case 0x05: /* 1 0 1 : High and Draft */
+ quality[Q_DRAFT] = EPS_MQID_DRAFT;
+ quality[Q_NORMAL] = EPS_MQID_HIGH;
+ quality[Q_HIGH] = EPS_MQID_HIGH;
+ break;
+ case 0x06: /* 1 1 0 : High and Normal */
+ quality[Q_DRAFT] = EPS_MQID_NORMAL;
+ quality[Q_NORMAL] = EPS_MQID_NORMAL;
+ quality[Q_HIGH] = EPS_MQID_HIGH;
+ break;
+ case 0x07: /* 1 1 1 : Anything possible */
+ break;
+ default:
+ break;
+ }
+
+ /* Now, the value of quality array of index which is same as PrintQuality is valid */
+ switch(jobAtter->printQuality) {
+ case EPS_MQID_DRAFT:
+ jobAtter->printQuality= quality[Q_DRAFT];
+ break;
+ case EPS_MQID_NORMAL:
+ jobAtter->printQuality= quality[Q_NORMAL];
+ break;
+ case EPS_MQID_HIGH:
+ jobAtter->printQuality= quality[Q_HIGH];
+ break;
+ }
+ }
+
+ verbose_dbprint(("%d\r\n", jobAtter->printQuality));
+
+ EPS_RETURN( EPS_ERR_NONE );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: _SP_LoadPMString() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* resouceID EPS_UINT32 I: PM resouce ID */
+/* pString EPS_INT8* O: PM string */
+/* bufSize EPS_INT32 I: pString size */
+/* */
+/* Return value: */
+/* EPS_INT32 buffer size or error */
+/* */
+/* Description: */
+/* Load special PM string. Because a part of model is insufficient PM reply info. */
+/* */
+/*******************************************|********************************************/
+EPS_INT32 _SP_LoadPMString (
+
+ EPS_UINT32 resouceID,
+ EPS_UINT8* pString,
+ EPS_UINT32 bufSize
+
+){
+ EPS_UINT32 i = 0;
+
+ for (i = 0; i < EPS_SPM_STRINGS; i++){
+ if (spPMStrTbl[i].id == resouceID){
+ if(bufSize < spPMStrTbl[i].len){
+ return EPS_ERR_OPR_FAIL;
+ }
+ memcpy(pString, spPMStrTbl[i].res, spPMStrTbl[i].len);
+ return spPMStrTbl[i].len;
+ }
+ }
+
+ return EPS_ERR_OPR_FAIL;
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: _pmFindSfield() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* id EPS_UINT8 I: Media Size ID */
+/* pSrc EPS_UINT8* I: pm String */
+/* pStart EPS_UINT8** O: Start Pointer of 'S' fields */
+/* pEnd EPS_UINT8** O: End Pointer of 'S' fields */
+/* */
+/* Return value: */
+/* Length of founded 'S' fields - Success */
+/* -1 - There is NOT the Media Size ID in pm string */
+/* */
+/* Description: */
+/* Find a 'S' field that includes the <id> in <pSrc> and save its starting('S') */
+/* and ending pointer('/') to <pStart> and <pEnd>. */
+/* <pSrc> should be a complete PM REPLY format that start with 'S' and terminate */
+/* at "0x0D 0x0A". */
+/* */
+/*******************************************|********************************************/
+static EPS_INT32 _pmFindSfield (
+
+ EPS_UINT8 id,
+ EPS_UINT8* pSrc,
+ EPS_UINT8** pStart,
+ EPS_UINT8** pEnd
+
+){
+ EPS_LOG_FUNCIN;
+
+ while (*pSrc != 0xD || *(pSrc+1) != 0xA) {
+
+ *pStart = NULL;
+ *pEnd = NULL;
+
+ /* find 'S' */
+ while(*pSrc == 'S') {
+ if(id == *(pSrc+1)) {
+ *pStart = pSrc;
+ }
+
+ pSrc += 2;
+
+ while(*pSrc == 'T') {
+ pSrc += 4;
+ }
+
+ /* Found id */
+ if(*pStart != NULL) {
+ *pEnd = pSrc;
+ EPS_RETURN( (EPS_INT32)(*pEnd - *pStart)+1 );
+ }
+
+ /* next 'S' */
+ pSrc++;
+ }
+
+ if(*pSrc == 'M' || *pSrc == 'R'){
+ pSrc += 6;
+ }
+ }
+
+ EPS_RETURN( (-1) );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: _pmScanTfield() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* id EPS_UINT8 Media Type ID */
+/* pSfield EPS_UINT8* Pointer to 'S' field */
+/* */
+/* Return value: */
+/* Pointer to 'T' on the pSfield - Success */
+/* NULL - There is NOT 'T' in the pSfield */
+/* */
+/* Description: */
+/* Find 'T' field that includs the <id>. */
+/* */
+/*******************************************|********************************************/
+static EPS_UINT8* _pmScanTfield (
+
+ EPS_UINT8 id,
+ EPS_UINT8* pSfield
+
+){
+ EPS_UINT8* pScan = pSfield;
+ EPS_UINT8* pT = NULL;
+
+ if(*pScan == 'S') {
+ pScan += 2;
+
+ while(*pScan == 'T') {
+ if(id == *(pScan+1)) {
+ pT = pScan;
+ break;
+ }
+
+ pScan += 4;
+ }
+ }
+
+ return pT;
+}
+
+/*******************************************|********************************************/
+/* */
+/* Function name: _pmAppendTfield() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pT EPS_UINT8* I: Pointer to 'T' field */
+/* pDes EPS_UINT8* O: Pointer to 'S' field */
+/* */
+/* Return value: */
+/* 4 - Success (Return increased bytes) */
+/* -1 - Failure */
+/* */
+/* Description: */
+/* Append 'T' field to <pDes> if same field dose not exsit, but same one aleady */
+/* exsits just combine mode properdy. */
+/* <pDes> should have a complete 'S' field consist of 'S' and '/' and pT should */
+/* have a 'T' field of 4 bytes starts with 'T'. */
+/* This function returns the increased bytes so that caller change the last */
+/* position or (-1) to indicate nothing changed. */
+/* */
+/*******************************************|********************************************/
+static EPS_INT16 _pmAppendTfield (
+
+ EPS_UINT8* pT,
+ EPS_UINT8* pDes
+
+){
+ EPS_UINT8 t_id = *(pT+1);
+ EPS_INT16 t_exist = 0;
+
+ if(*pDes == 'S') {
+
+ pDes += 2; /* move to first 'T' */
+
+ while(*pDes == 'T') {
+
+ /* same id exist */
+ if(t_id == *(pDes+1)) {
+ /* Just combine mode property */
+ *(pDes+2) |= *(pT+2);
+
+ t_exist = 1;
+ break;
+ }
+
+ /* next 'T' */
+ pDes += 4;
+ }
+
+ /* samd id field dose not exist */
+ /* Append new 'T' fields */
+ if(t_exist == 0) {
+ memcpy(pDes, pT, 4);
+ pDes += 4;
+ *pDes = '/';
+
+ return 4; /* size of 'T' field */
+ }
+
+ /* type id aleady exist then do not anything */
+ }
+
+ return (-1);
+}
+
+/*******************************************|********************************************/
+/* */
+/* Function name: _pmValidateRemoveDelimiter() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pDes EPS_UINT8* O: Pointer to validated pm string */
+/* pSrc EPS_UINT8* I: Pointer to original pm string */
+/* */
+/* Return value: */
+/* The number of valid fields */
+/* */
+/* Description: */
+/* Copy valid fields to reply buffer only. */
+/* Remove <CR><LF> on the way. */
+/* */
+/*******************************************|********************************************/
+static void _pmValidateRemoveDelimiter (
+
+ EPS_UINT8* pDes,
+ EPS_UINT8* pSrc,
+ EPS_INT32 bufSize
+
+){
+ EPS_UINT8* pEOF = pSrc + bufSize;
+
+ EPS_LOG_FUNCIN;
+
+ while (pSrc < pEOF) {
+
+ if(*pSrc == 'S') {
+ memcpy(pDes, pSrc, 2);
+ pSrc += 2;
+ pDes += 2;
+
+ while(*pSrc == 'T') {
+ memcpy(pDes, pSrc, 3);
+ pSrc += 3;
+ pDes += 3;
+
+ if(*pSrc == '/') {
+ *pDes++ = *pSrc++;
+ }
+ }
+
+ if(*pSrc == '/') {
+ *pDes++ = *pSrc++;
+ }
+
+ } else if(*pSrc == 'M' || *pSrc == 'R'){
+ /* Jpeg size limit */
+ if( *(pSrc + 5) == '/' ){
+ memcpy(pDes, pSrc, 6 );
+ pDes += 6;
+ }
+ pSrc += (pEOF-pSrc > 6)?6:(pEOF-pSrc);
+
+ } else if(*pSrc == 0xD || *(pSrc+1) == 0xA){
+ /* Terminater skip */
+ pSrc += 2;
+ } else{
+ /* unknown field */
+ pSrc++;
+ }
+ }
+
+ /* set truth terminater */
+ *pDes++ = 0x0d; /* 0xD */
+ *pDes = 0x0a; /* 0xA */
+
+ EPS_RETURN_VOID;
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: _pmValidateRemoveUnknownSfield() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pDes EPS_UINT8* O: Pointer to validated pm string */
+/* pSrc EPS_UINT8* I: Pointer to original pm string */
+/* */
+/* Return value: */
+/* The number of valid fields */
+/* */
+/* Description: */
+/* Copy valid fields to reply buffer only. */
+/* Remove unknown 'S' field. */
+/* Minimum conditons for valid PM REPLY are */
+/* - it must have a complete 'S' field more than one ( 'S' ~ '/'). */
+/* - it must end with 0xD and 0xA. */
+/* */
+/*******************************************|********************************************/
+static EPS_INT16 _pmValidateRemoveUnknownSfield (
+
+ EPS_UINT8* pDes,
+ EPS_UINT8* pSrc
+
+){
+ EPS_UINT8* pPrev = NULL; /* save previous pointer */
+ EPS_UINT8* pS = NULL; /* valid field's starting position */
+ EPS_UINT8* pE = NULL; /* valid field's ending postion */
+
+ EPS_INT16 valid = 0; /* flag for indicating 'S' field's validation */
+ EPS_INT16 t_cnt = 0; /* count valid 'T' fields */
+ EPS_UINT16 s_idx = 0; /* index of epsMediaSize */
+
+ EPS_INT16 num_valid_fields = 0; /* value for returning */
+
+ EPS_LOG_FUNCIN;
+
+#ifdef _TEST_PM_STEP_1 /* Change first 'S' field's id to unknown id such as 0xFF */
+ *(pSrc+1) = 0xFF;
+#endif
+
+ while (*pSrc != 0xD || *(pSrc+1) != 0xA) {
+ pPrev = pSrc;
+
+ pS = NULL;
+ pE = NULL;
+ valid = 0;
+ t_cnt = 0;
+ s_idx = 0;
+
+ if(*pSrc == 'S') {
+ pS = pSrc;
+ pSrc += 2;
+
+ while(*pSrc == 'T') {
+ pSrc += 3;
+
+ if(*pSrc == '/') {
+ pSrc++;
+ t_cnt++;
+ }
+ }
+
+ if(t_cnt && *pSrc == '/') {
+ pE = pSrc;
+ }
+
+ } else if(*pSrc == 'M' || *pSrc == 'R'){
+ /* Jpeg size limit */
+ if( *(pSrc + 5) == '/' ){
+ memcpy(pDes, pSrc, 6 );
+ pDes += 6;
+ pSrc += 6;
+ continue;
+ }
+ }
+
+ /* Copy valid and support 'S' fields only */
+ /* Valid means size id should be find in its table */
+ /* and 'T' field exist at least more than one */
+ /* Unknown 'S' field should be removed */
+ if(pS && pE) {
+ for(s_idx = 0; s_idx < EPS_NUM_MEDIA_SIZES; s_idx++) {
+ if(epsMediaSize[s_idx].id == *(pS+1)) {
+ memcpy(pDes, pS, (EPS_UINT32)((pE-pS)+1) );
+ pDes += (pE-pS)+1;
+ valid = 1;
+
+ /* now increase num of valid fields */
+ num_valid_fields++;
+
+ break;
+ }
+ }
+ }
+
+ /* Restore work buffer pos to the previous */
+ /* cause fail to get a valid fields */
+ if(valid == 0) {
+ pSrc = pPrev;
+ }
+
+ pSrc++;
+ }
+
+ *pDes++ = *pSrc++; /* 0xD */
+ *pDes++ = *pSrc; /* 0xA */
+
+ EPS_RETURN( num_valid_fields );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: _pmCorrectUnknownTfield() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pDes EPS_UINT8* O: Pointer to validated pm string */
+/* pSrc EPS_UINT8* I: Pointer to original pm string */
+/* */
+/* Return value: */
+/* None */
+/* */
+/* Description: */
+/* Change an unknown 'T' field to PGPP's in case that PGPP dose not exist in */
+/* 'S' field. If aleady PGPP exist delete it. */
+/* */
+/*******************************************|********************************************/
+static void _pmCorrectUnknownTfield (
+
+ EPS_UINT8* pDes,
+ EPS_UINT8* pSrc
+
+){
+ static const EPS_UINT8 PGPP_FIELD [ ] = { 0x54, 0x0B, 0x87, 0x2F };
+
+ EPS_INT16 PGPP = 0; /* Premium Glossy Photo Paper (type id : 0x0b) */
+ EPS_UINT16 t_idx = 0; /* Index of table defined Support 'T' id table */
+ EPS_UINT8 * pScan = NULL; /* word pointer for scanning id */
+
+ EPS_LOG_FUNCIN;
+
+#ifdef _TEST_PM_STEP_2 /* Change 'T' field's id to unknown id such as 0xFF */
+ *(pSrc+3) = 0xFF;
+#endif
+
+ while (*pSrc != 0xD || *(pSrc+1) != 0xA) {
+ /* reset PGPP flag each new 'S' field */
+ PGPP = 0;
+
+ if(*pSrc == 'S') {
+ /* Scan PGPP in current 'S' field */
+ pScan = pSrc;
+
+ if(_pmScanTfield(EPS_MTID_PGPHOTO, pScan) != NULL) {
+ PGPP = 1;
+ }
+
+ *pDes++ = *pSrc++;
+ *pDes++ = *pSrc++;
+
+ while(*pSrc == 'T') {
+ /* Copy support 'T' field */
+ for(t_idx = 0; t_idx < EPS_NUM_MEDIA_TYPES; t_idx++) {
+ if(epsMediaTypeIndex[t_idx] == *(pSrc+1)) {
+ memcpy(pDes, pSrc, 4);
+ pDes += 4;
+ break;
+ }
+ }
+
+ /* Unknown type id encountered */
+ /* if PGPP did not exist in 'S' field */
+ /* then append PGPP fields to pDes */
+ if(t_idx == EPS_NUM_MEDIA_TYPES && PGPP == 0) {
+ memcpy(pDes, PGPP_FIELD, 4);
+ pDes += 4;
+ PGPP = 1;
+ }
+
+ /* move to next 'T' */
+ pSrc += 4;
+ }
+
+ /* copy '/' and move next 'S' */
+ *pDes++ = *pSrc++;
+
+ }else if(*pSrc == 'M' || *pSrc == 'R') {
+ memcpy(pDes, pSrc, 6);
+ pDes += 6;
+ pSrc += 6;
+ }
+ }
+
+ *pDes++ = *pSrc++; /* 0xD */
+ *pDes = *pSrc; /* 0xA */
+
+ EPS_RETURN_VOID;
+}
+
+/*******************************************|********************************************/
+/* */
+/* Function name: _pmCorrectDupulicatedFields() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pDes EPS_UINT8* O: Pointer to validated pm string */
+/* pSrc EPS_UINT8* I: Pointer to original pm string */
+/* */
+/* Return value: */
+/* None */
+/* */
+/* Description: */
+/* Merge duplicated fields. */
+/* */
+/*******************************************|********************************************/
+static void _pmCorrectDupulicatedFields (
+
+ EPS_UINT8* pDes,
+ EPS_UINT8* pSrc,
+ EPS_INT32* desSize
+
+){
+ EPS_UINT8 merged_buf[EPS_PM_MAXSIZE];
+
+ EPS_UINT8* pDesTop = pDes;
+ EPS_UINT8* pFieldS = NULL; /* current 'S' in merged buffer */
+ EPS_UINT8* pFieldT = NULL; /* work pontter to merge a 'T' */
+ EPS_UINT8* pS = NULL; /* duplicated field's starting position */
+ EPS_UINT8* pE = NULL; /* duplicated field's ending postion */
+ EPS_UINT8* pM = NULL; /* pos of merged buffer */
+ EPS_UINT8* pScan = NULL; /* work pointer to find a field */
+ EPS_UINT8 s_id = 0xFF; /* current 'S' id */
+ EPS_INT16 bytes;
+
+ EPS_LOG_FUNCIN;
+
+#ifdef _TEST_PM_STEP_3
+ *(pSrc+8) = 0x0F; /* make duplicate 'S' */
+#endif
+ memset(merged_buf, 0, EPS_PM_MAXSIZE);
+ pM = &merged_buf[0];
+
+ /* Aleady merged fields no need to copy again */
+ while (*pSrc != 0xD || *(pSrc+1) != 0xA) {
+ pFieldS = NULL;
+
+ if(*pSrc == 'S') {
+ VERBOSE_DUMP_PMREPLY((pSrc, DUMP_S_TAG_ONLY, "< STEP 3 : SOURCE 'S' ... >"));
+
+ /* save current 'S' id */
+ s_id = *(pSrc+1);
+
+ if(s_id != MERGED_FIELD) {
+ /* Current 'S' field's starting pos */
+ /* it is used to merge fields later */
+ pFieldS = pM;
+
+ COPY_BYTES(pM, pSrc, 2);
+ }
+
+ pSrc += 2; /* move to first 'T' */
+
+ /* Merge 'T' fields */
+ while(*pSrc == 'T') {
+
+ if(pFieldS && s_id != MERGED_FIELD) {
+ /* if 'T' aleady exist just combine its property by BIT OR operation */
+ if((pFieldT = _pmScanTfield(*(pSrc+1), pFieldS)) != NULL) {
+ *(pFieldT+2) |= *(pSrc+2);
+ }
+
+ /* Copy only new 'T' field */
+ if(pFieldT == NULL) {
+ COPY_BYTES(pM, pSrc, 4);
+ }
+ }
+
+ pSrc += 4; /* next 'T' */
+ }
+ }else if(*pSrc == 'M' || *pSrc == 'R') {
+ memcpy(pM, pSrc, 6);
+ pM += 6;
+ pSrc += 6;
+ continue;
+ }
+
+ if(s_id != MERGED_FIELD) {
+ COPY_BYTES(pM, pSrc, 1);
+ }
+ pSrc++;
+
+ /* aleady merged field just go on next */
+ if(s_id == MERGED_FIELD) {
+ continue;
+ }
+
+ /*----------------------------------------------------*/
+ /* Find dupulicated 'S' being followed and merge them */
+
+ pScan = pSrc; /* do not change pSrc in following loop */
+
+ while(_pmFindSfield(s_id, pScan, &pS, &pE) > 0) {
+
+ /* Change source's 'S' id to MERGED_FIELD */
+ *(pS+1) = MERGED_FIELD;
+ pS += 2;
+
+ /* merge dupulicated 'T' */
+ while(*pS == 'T') {
+
+ /* Append NEW 'T' field to the current 'S' field */
+ /* aleady same 'T' exist only its mode property will be combined */
+ /* after called function */
+ if(pFieldS) {
+ if((bytes = _pmAppendTfield(pS, pFieldS)) > 0) {
+
+ /* update merged_buf's the last pos that pM point it */
+ pM += bytes; /* MUST 4 BYTES(size of 'T' field) ! */
+ }
+ }
+
+ pS += 4; /* next 'T' */
+ }
+
+ /* find next 'S' */
+ pScan = (pE+1);
+
+ VERBOSE_DUMP_PMREPLY((pFieldS, DUMP_S_TAG_ONLY, "< STEP 3 : MERGE PROCESSING ... >"));
+ }
+ }
+
+ /* 0x0D & 0x0A */
+ COPY_BYTES(pM, pSrc, 2);
+
+ /*----------------------------------*/
+ /* Copy the merged PM REPLY to pDes */
+
+ pM = &merged_buf[0];
+
+ while (*pM != 0xD || *(pM+1) != 0xA) {
+ *pDes++ = *pM++;
+ }
+
+ *pDes++ = *pM++; /* 0xD */
+ *pDes = *pM; /* 0xA */
+
+ *desSize = (EPS_INT32)(pDes - pDesTop) + 1;
+
+ EPS_RETURN_VOID;
+}
+
+/*******************************************|********************************************/
+/* */
+/* Function name: _pmAdjustQuality() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pData EPS_UINT8* I/O: Pointer to pm string */
+/* */
+/* Return value: */
+/* None */
+/* */
+/* Description: */
+/* Adjust quality properties to the formal. */
+/* example : quality has only draft mode -> turn on normal mode. */
+/* */
+/*******************************************|********************************************/
+static void _pmAdjustQuality (
+
+ EPS_UINT8* pData
+
+){
+ EPS_UINT8* p = pData;
+
+ EPS_LOG_FUNCIN;
+
+ /* skip pm heder */
+ p += EPS_PM_HEADER_LEN;
+
+ verbose_dbprint(("< STEP 4 : Adjust quality >\r\n"));
+
+ /* adjuct each quality properties */
+ while(!(*p == 0x0D && *(p+1) == 0x0A)) {
+
+ while(*p == 'S') {
+
+ verbose_dbprint(("%c %02d\r\n", *p, *(p+1)));
+
+ p += 2; /* move to the first T field */
+
+ while(*p == 'T') {
+
+ verbose_dbprint(("\t%c %02d 0x%02x %c -> ", *p, *(p+1), *(p+2), *(p+3)));
+
+ p += 2; /* move to quality pos */
+
+ /* Quality property */
+ switch(*p & 0x07) {
+ /* Should be handled following case 1 bit of Draft turned on only */
+ case 0x01: /* 0 0 1 -> 0 1 1 */
+ *p |= (1<<1); /* turn normal on */
+ break;
+ default:
+ break;
+ }
+
+ verbose_dbprint(("%c %02d 0x%02x %c\r\n", *(p-2), *(p-1), *(p), *(p+1)));
+
+ p += 2; /* move to the next T field */
+ }
+
+ p += 1; /* move to the next S field */
+ }
+
+ if(*p == 'M' || *p == 'R') {
+ p += 6;
+ }
+ }
+
+ EPS_RETURN_VOID;
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: AppendMedia() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pMedia EPS_SUPPORTED_MEDIA* I/O: supported media structuer */
+/* */
+/* Return value: */
+/* none */
+/* */
+/* Description: */
+/* Append Media attribute from PM reply info. */
+/* */
+/*******************************************|********************************************/
+void AppendMedia (
+
+ EPS_SUPPORTED_MEDIA* pMedia
+
+){
+ EPS_INT32 idxSize, idxType;
+ EPS_BOOL foundCD = FALSE;
+
+ EPS_LOG_FUNCIN;
+
+ for(idxSize = 0; idxSize < pMedia->numSizes; idxSize++){
+ /*** Append "CD/DVD Label" rayout to plain, CDDVD ***/
+ for(idxType = 0; idxType < pMedia->sizeList[idxSize].numTypes; idxType++){
+
+ if( EPS_IS_CDDVD( pMedia->sizeList[idxSize].typeList[idxType].mediaTypeID ) ){
+ /* Set "CD/DVD Label" rayout to CDDVD */
+ pMedia->sizeList[idxSize].typeList[idxType].layout = EPS_MLID_CDLABEL;
+
+ /* paperSource is only CD tray */
+ pMedia->sizeList[idxSize].typeList[idxType].paperSource = EPS_MPID_CDTRAY;
+
+ foundCD = TRUE;
+ } else if(EPS_MTID_MINIPHOTO == pMedia->sizeList[idxSize].typeList[idxType].mediaTypeID){
+ /* Append "16 Division" rayout to Photo Stickers */
+ pMedia->sizeList[idxSize].typeList[idxType].layout |= EPS_MLID_DIVIDE16;
+ }
+ }
+
+ if(foundCD){
+ for(idxType = 0; idxType < pMedia->sizeList[idxSize].numTypes; idxType++){
+ if(EPS_MTID_PLAIN == pMedia->sizeList[idxSize].typeList[idxType].mediaTypeID ){
+ /* Append "CD/DVD Label" rayout to plain */
+ pMedia->sizeList[idxSize].typeList[idxType].layout |= EPS_MLID_CDLABEL;
+ break;
+ }
+ }
+ foundCD = FALSE;
+ }
+ }
+
+ EPS_RETURN_VOID
+}
+
+
+EPS_UINT32 ComplementPaperSource (
+
+ EPS_INT32 mediaSizeID
+
+){
+ switch(mediaSizeID){
+ case EPS_MSID_A4:
+ case EPS_MSID_LETTER:
+ case EPS_MSID_LEGAL:
+ return EPS_MPID_FRONT1;
+ break;
+ default:
+ if(EPS_MSID_KAKU_2 <= mediaSizeID){
+ return EPS_MPID_FRONT1;
+ }
+ }
+
+ return EPS_MPID_FRONT2;
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: GetPrintAreaSource() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* resolution EPS_UINT32 I : input resolusion */
+/* src EPS_PRINTAREA_SOURCE* O: Former information @ */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_INV_INPUT_RESOLUTION - Invalid Input Resolution */
+/* */
+/* Description: */
+/* setup former information for margin calculation. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE GetPrintAreaSource(
+
+ EPS_UINT32 resolution,
+ EPS_PRINTAREA_SOURCE* source
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+
+ EPS_LOG_FUNCIN;
+
+ source->resolution = resolution;
+ switch(resolution){
+ case EPS_IR_360X360:
+ source->pMI = epsMediaSize;
+ source->factor = 1;
+ source->defaultBorder = EPS_BORDERS_MARGIN_360;
+ source->borderlessBottom = EPS_BOTTOM_MARGIN_BORDERLESS_360;
+ break;
+ case EPS_IR_720X720:
+ source->pMI = epsMediaSize;
+ source->factor = 2;
+ source->defaultBorder = EPS_BORDERS_MARGIN_360;
+ source->borderlessBottom = EPS_BOTTOM_MARGIN_BORDERLESS_360;
+ break;
+ case EPS_IR_300X300:
+ source->pMI = epsMediaSize300;
+ source->factor = 1;
+ source->defaultBorder = EPS_BORDERS_MARGIN_300;
+ source->borderlessBottom = EPS_BOTTOM_MARGIN_BORDERLESS_300;
+ break;
+ case EPS_IR_600X600:
+ source->pMI = epsMediaSize300;
+ source->factor = 2;
+ source->defaultBorder = EPS_BORDERS_MARGIN_300;
+ source->borderlessBottom = EPS_BOTTOM_MARGIN_BORDERLESS_300;
+ break;
+ default:
+ ret = EPS_ERR_INV_INPUT_RESOLUTION;
+ }
+ EPS_RETURN( ret )
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: CalcPrintMargin() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* preview EPS_BOOL I : values for preview or print command */
+/* src EPS_PRINTAREA_SOURCE* I: Former information @ */
+/* cdDimOut EPS_BOOL I : CD Outer diameter @ */
+/* lm EPS_LAYOUT_INFO* O : margin information */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_INV_BORDER_MODE - Invalid Border Mode */
+/* EPS_ERR_INV_CD_OUTDIM - Invalid CD Outside Diameter */
+/* EPS_ERR_INV_TOP_MARGIN - Invalid Top Magirn */
+/* EPS_ERR_INV_LEFT_MARGIN - Invalid Left Margin */
+/* EPS_ERR_INV_BOTTOM_MARGIN - Invalid Bottom Margin */
+/* EPS_ERR_INV_RIGHT_MARGIN - Invalid Right Margin */
+/* */
+/* Description: */
+/* create margin informations. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE CalcPrintMargin(
+
+ EPS_BOOL preview,
+ EPS_PRINTAREA_SOURCE* src,
+ const EPS_JOB_ATTRIB* pAttr,
+ EPS_LAYOUT_INFO* lm,
+ EPS_RECT* baseBorder
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+
+ EPS_LOG_FUNCIN;
+
+ switch(lm->layout){
+ case EPS_MLID_BORDERLESS:
+ lm->margin.top = src->pMI->top_margin_borderless * src->factor;
+ lm->margin.bottom = -(src->pMI->print_area_y_borderless - src->pMI->paper_y + src->pMI->top_margin_borderless) * src->factor;
+ lm->margin.left = src->pMI->left_margin_borderless * src->factor;
+ lm->margin.right = -(src->pMI->print_area_x_borderless - src->pMI->paper_x + src->pMI->left_margin_borderless) * src->factor;
+ break;
+
+ case EPS_MLID_BORDERS:
+ case EPS_MLID_DIVIDE16:
+ lm->margin.top = TopBorderPixel(src);
+ lm->margin.bottom = BottomBorderPixel(src);
+ lm->margin.left = LeftBorderPixel(src);
+ lm->margin.right = RightBorderPixel(src);
+ break;
+
+ case EPS_MLID_CDLABEL:
+ if(NULL != pAttr){
+ if( (pAttr->cdDimOut >= EPS_CDDIM_OUT_MIN) && (pAttr->cdDimOut <= EPS_CDDIM_OUT_MAX) ){
+ if(preview){
+ lm->margin.top =
+ lm->margin.bottom =
+ lm->margin.left =
+ lm->margin.right = ( elGetDots(src->resolution, EPS_CDDIM_OUT_MAX*10)
+ - elGetDots(src->resolution, pAttr->cdDimOut*10) ) / 2;
+ } else{
+ lm->margin.top = CDDVD_OFFSET_Y(src->resolution, pAttr->cdDimOut);
+ lm->margin.bottom = src->pMI->paper_y * src->factor - lm->margin.top
+ - elGetDots(src->resolution, pAttr->cdDimOut*10);
+ lm->margin.left = CDDVD_OFFSET_X(src->resolution, pAttr->cdDimOut);
+ lm->margin.right = src->pMI->paper_x * src->factor - lm->margin.left
+ - elGetDots(src->resolution, pAttr->cdDimOut*10);
+ }
+ } else{
+ ret = EPS_ERR_INV_CD_OUTDIM;
+ }
+ }
+ break;
+
+ case EPS_MLID_CUSTOM:
+ if(NULL != pAttr){
+ if (pAttr->topMargin < TopBorderPixel(src) ) EPS_RETURN( EPS_ERR_INV_TOP_MARGIN );
+ if (pAttr->leftMargin < LeftBorderPixel(src) ) EPS_RETURN( EPS_ERR_INV_LEFT_MARGIN );
+ if (pAttr->bottomMargin < BottomBorderPixel(src)) EPS_RETURN( EPS_ERR_INV_BOTTOM_MARGIN );
+ if (pAttr->rightMargin < RightBorderPixel(src) ) EPS_RETURN( EPS_ERR_INV_RIGHT_MARGIN );
+
+ lm->margin.top = pAttr->topMargin;
+ lm->margin.left = pAttr->leftMargin;
+ lm->margin.bottom = pAttr->bottomMargin;
+ lm->margin.right = pAttr->rightMargin;
+ }
+ if (NULL != baseBorder) {
+ baseBorder->top = TopBorderPixel(src);
+ baseBorder->bottom = BottomBorderPixel(src);
+ baseBorder->left = LeftBorderPixel(src);
+ baseBorder->right = RightBorderPixel(src);
+ }
+ break;
+
+ default:
+ ret = EPS_ERR_INV_BORDER_MODE;
+ }
+
+ EPS_RETURN( ret );
+}
+
+EPS_INT32 LeftBorderPixel(EPS_PRINTAREA_SOURCE* src)
+{
+ EPS_INT32 sizeID = src->pMI->id;
+ if( EPS_MSID_ENV_C4_P == sizeID || EPS_MSID_KAKU_2 == sizeID || EPS_MSID_KAKU_20 == sizeID ||
+ EPS_MSID_A5_24HOLE == sizeID ||
+ (EPS_MSID_ENV_10_L <= sizeID && EPS_MSID_YOKEI_4 >= sizeID) ||
+ (EPS_MSID_ENV_10_P <= sizeID && EPS_MSID_NEWENV_P >= sizeID) )
+ {
+ return (src->pMI->paper_x - src->pMI->print_area_x_border) * src->factor / 2;
+ } else{
+ return src->defaultBorder * src->factor;
+ }
+}
+EPS_INT32 RightBorderPixel(EPS_PRINTAREA_SOURCE* src)
+{
+ return (src->pMI->paper_x - src->pMI->print_area_x_border - LeftBorderPixel(src)) * src->factor;
+}
+EPS_INT32 TopBorderPixel(EPS_PRINTAREA_SOURCE* src)
+{
+ EPS_INT32 sizeID = src->pMI->id;
+ if(EPS_MSID_A5_24HOLE == sizeID )
+ {
+ return (src->pMI->paper_y - src->pMI->print_area_y_border) * src->factor / 2;
+ } else{
+ return src->defaultBorder * src->factor;
+ }
+}
+EPS_INT32 BottomBorderPixel(EPS_PRINTAREA_SOURCE* src)
+{
+ return (src->pMI->paper_y - src->pMI->print_area_y_border - TopBorderPixel(src)) * src->factor;
+}
+
+
+
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
+/*-------------------- PM3 Functions ---------------------*/
+/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
+/*******************************************|********************************************/
+/* */
+/* Function name: epspmCreateMediaInfo3() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* printer EPS_PRINTER_INN* I:Pointer to printer data */
+/* pmString EPS_PM_DATA* I:Pointer to pm data */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_INV_MEDIA_SIZE - Invalid Media Size */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* */
+/* Description: */
+/* create support media information from pm3. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epspmCreateMediaInfo3(
+
+ EPS_PRINTER_INN* printer,
+ EPS_UINT8* pmString,
+ EPS_INT32 pmSize
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 pmIdx; /* pm string index */
+ EPS_INT32 totalTypeNum = 0; /* Total Media type number */
+ EPS_UINT8* pTVals = NULL; /* Type&Quality pair of T field */
+ EPS_BOOL complete = FALSE;
+
+ EPS_SUPPORTED_MEDIA *pMedia = &printer->supportedMedia;
+
+ EPS_LOG_FUNCIN;
+
+ /*EPS_DUMP(pmString, pmSize);*/
+
+/*** "Filter" Raw "PM" data (Remake the correct pm stirng) */
+ ret = pm3ChangeSpec_UpdatePMReply(printer, pmString, &pmSize);
+ if(EPS_ERR_NONE != ret){
+ EPS_RETURN( ret );
+ }
+
+ pmIdx = 0; /* skip the command header of pm string */
+
+/*** Create the structure of the support media */
+ pMedia->resolution = EPS_IR_360X360; /* default support */
+
+ while( EPS_ERR_NONE == ret && pmIdx < pmSize-3 && FALSE == complete) {
+ switch(pmString[pmIdx]) {
+ case 'S':
+ ret = pm3ScanSfield(pmString, pmSize, &pmIdx, NULL, 0, 0, NULL); /* skip S field */
+ break;
+
+ case 'T':
+ /* make type & quality pair */
+ ret = pm3GetTfieldValue(pmString, pmSize, &pmIdx, &totalTypeNum, &pTVals, &pMedia->resolution);
+ break;
+
+ case 'L':
+ if(NULL == pTVals){
+ ret = pm3GetTfieldValue(pmString, pmSize, &pmIdx, &totalTypeNum, &pTVals, &pMedia->resolution);
+ }
+ ret = pm3ScanLfield(pmString, pmSize, &pmIdx, pTVals, totalTypeNum, pMedia);
+ break;
+
+ case 'P':
+ ret = pm3ScanPfield(pmString, pmSize, &pmIdx, &pMedia->JpegSizeLimit);
+ if(EPS_ERR_NONE == ret){
+ printer->JpgMax = pMedia->JpegSizeLimit;
+ }
+ break;
+
+ case ';':
+ default: /* unknown category */
+ complete = TRUE;
+ break;
+ }
+
+ /* If we run into an occurrence of carriage return followed by line feed,
+ * we have found the terminating characters of the string. */
+ if(pmString[pmIdx] == ';' && pmString[pmIdx+1] == 0xFF) {
+ break;
+ }
+ }
+ if( NULL != pTVals){
+ EPS_FREE(pTVals);
+ }
+
+ if(EPS_ERR_NONE == ret){
+/*** Add extend infomation */
+ AppendMedia(&printer->supportedMedia);
+ }
+
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: pm3GetPrintMargin() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pmString EPS_PM_DATA* I:Pointer to pm data */
+/* pAttr EPS_JOB_ATTRIB* I:Pointer to print settings */
+/* lm EPS_LAYOUT_INFO* I/O:Pointer to margin information */
+/* baseBorder EPS_RECT* I:basic border size */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_INV_MEDIA_SIZE - Invalid Media Size */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* */
+/* Description: */
+/* create print margin information from pm3. */
+/* */
+/*******************************************|********************************************/
+#define EPS_PM3_RESCOMV(v) (EPS_INT32)((EPS_INT32)(v) * factor * resVal / baseResVal)
+
+EPS_ERR_CODE pm3GetPrintMargin(
+
+ EPS_PM_DATA* pmData,
+ const EPS_JOB_ATTRIB* pAttr,
+ EPS_LAYOUT_INFO* lm,
+ EPS_RECT* baseBorder
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_UINT8* pmString = pmData->pmString;
+ EPS_INT32 pmSize = pmData->length;
+ EPS_INT32 pmIdx = 0; /* pm string index */
+ EPS_INT32 num_mSize = 0; /* Media size number */
+ EPS_INT32 idx; /* Index */
+ EPS_INT32 blkSize = 0; /* data block size */
+ EPS_UINT32 baseResolution = 0;
+ EPS_INT32 resVal, baseResVal, factor;
+ EPS_MARGIN fixedMargin;
+ EPS_BOOL complete = FALSE;
+
+ EPS_LOG_FUNCIN;
+
+ pmIdx = 0; /* skip the command header of pm string */
+ while( EPS_ERR_NONE == ret && pmIdx < pmSize-3 && FALSE == complete) {
+ switch(pmString[pmIdx]) {
+ case 'S':
+ if(0 == baseResolution){
+ ret = pm3GetTfieldValue(pmString, pmSize, &pmIdx, NULL, NULL, &baseResolution);
+ if( EPS_ERR_NONE != ret ){
+ break;
+ }
+ }
+ resVal = ((pAttr->inputResolution == EPS_IR_360X360) || (pAttr->inputResolution == EPS_IR_720X720))?
+ 360:300;
+ baseResVal = ((baseResolution == EPS_IR_360X360) || (baseResolution == EPS_IR_720X720))?
+ 360:300;
+ factor = ((pAttr->inputResolution == EPS_IR_360X360) || (pAttr->inputResolution == EPS_IR_300X300))?1:2;
+
+ pmIdx++;
+ num_mSize = pmString[pmIdx];
+ pmIdx++;
+ for(idx = 0; idx < num_mSize && FALSE == complete; idx++){
+ blkSize = pmString[pmIdx] + 1;
+ if(blkSize < 14){
+ ret = EPS_ERR_OPR_FAIL; /* Invalid format */
+ break;
+ }
+
+ if(pmString[pmIdx+1] == pAttr->mediaSizeIdx){
+ switch(lm->layout){
+ case EPS_MLID_BORDERLESS:
+ /* not reached
+ lm->margin.top = -EPS_PM3_RESCOMV( pmString[pmIdx+2] << 8 | pmString[pmIdx+3] );
+ lm->margin.left =
+ lm->margin.right = -EPS_PM3_RESCOMV( pmString[pmIdx+4] << 8 | pmString[pmIdx+5] );
+ lm->margin.bottom = -EPS_PM3_RESCOMV( pmString[pmIdx+6] << 8 | pmString[pmIdx+7] );
+ */
+ ret = EPS_ERR_OPR_FAIL;
+ break;
+ case EPS_MLID_BORDERS:
+ case EPS_MLID_DIVIDE16:
+ lm->layout = EPS_MLID_BORDERS;
+ lm->margin.top = EPS_PM3_RESCOMV( pmString[pmIdx+8] << 8 | pmString[pmIdx+9] );
+ lm->margin.left =
+ lm->margin.right = EPS_PM3_RESCOMV( pmString[pmIdx+10] << 8 | pmString[pmIdx+11] );
+ lm->margin.bottom = EPS_PM3_RESCOMV( pmString[pmIdx+12] << 8 | pmString[pmIdx+13] );
+ break;
+ case EPS_MLID_CUSTOM:
+ if(NULL != pAttr){
+ fixedMargin.top = EPS_PM3_RESCOMV( pmString[pmIdx+8] << 8 | pmString[pmIdx+9] );
+ fixedMargin.left =
+ fixedMargin.right = EPS_PM3_RESCOMV( pmString[pmIdx+10] << 8 | pmString[pmIdx+11] );
+ fixedMargin.bottom= EPS_PM3_RESCOMV( pmString[pmIdx+12] << 8 | pmString[pmIdx+13] );
+
+ if (pAttr->topMargin < fixedMargin.top) EPS_RETURN( EPS_ERR_INV_TOP_MARGIN );
+ if (pAttr->leftMargin < fixedMargin.left) EPS_RETURN( EPS_ERR_INV_LEFT_MARGIN );
+ if (pAttr->bottomMargin < fixedMargin.bottom)EPS_RETURN( EPS_ERR_INV_BOTTOM_MARGIN );
+ if (pAttr->rightMargin < fixedMargin.right) EPS_RETURN( EPS_ERR_INV_RIGHT_MARGIN );
+
+ lm->margin.top = pAttr->topMargin;
+ lm->margin.left = pAttr->leftMargin;
+ lm->margin.bottom = pAttr->bottomMargin;
+ lm->margin.right = pAttr->rightMargin;
+ if(NULL != baseBorder){
+ baseBorder->top = fixedMargin.top;
+ baseBorder->left = fixedMargin.left;
+ baseBorder->right = fixedMargin.right;
+ baseBorder->bottom= fixedMargin.bottom;
+ }
+ }
+ break;
+
+ case EPS_MLID_CDLABEL:
+ default:
+ ret = EPS_ERR_INV_BORDER_MODE;
+ }
+ complete = TRUE;
+
+ }
+ pmIdx += blkSize;
+ }
+ if(FALSE == complete){
+ ret = EPS_ERR_INV_MEDIA_SIZE;
+ }
+ break;
+
+ case 'T':
+ /* get base resolution */
+ ret = pm3GetTfieldValue(pmString, pmSize, &pmIdx, NULL, NULL, &baseResolution);
+ break;
+ case 'L':
+ ret = pm3ScanLfield(pmString, pmSize, &pmIdx, NULL, 0, NULL); /* skip L field */
+ break;
+ case 'P':
+ ret = pm3ScanPfield(pmString, pmSize, &pmIdx, NULL);
+ break;
+ case ';':
+ default: /* unknown category */
+ ret = EPS_ERR_OPR_FAIL;
+ break;
+ }
+
+ /* If we run into an occurrence of carriage return followed by line feed,
+ * we have found the terminating characters of the string. */
+ if(pmString[pmIdx] == ';' && pmString[pmIdx+1] == 0xFF) {
+ break;
+ }
+ }
+
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: epspmCreatePrintAreaInfoFromPM() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pmString EPS_UINT8* I:Pointer to pm string */
+/* pmSize EPS_INT32 I:Length of pm string */
+/* resolution EPS_INT32 I:caluclate resotution */
+/* printAreaInfo EPS_PRINT_AREA_INFO* O:pointer to size information */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* create printable area information from pm3. */
+/* */
+/*******************************************|********************************************/
+EPS_ERR_CODE epspmCreatePrintAreaInfoFromPM(
+
+ EPS_UINT8* pmString,
+ EPS_INT32 pmSize,
+ EPS_UINT32 resolution,
+ EPS_PRINT_AREA_INFO* printAreaInfo
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_PRINTAREA_SOURCE src;
+ EPS_INT32 pmIdx = 0; /* pm string index */
+ EPS_UINT32 baseResolution = 0;
+ EPS_INT32 resVal, baseResVal;
+ EPS_BOOL complete = FALSE;
+
+ EPS_LOG_FUNCIN;
+
+ ret = GetPrintAreaSource(resolution, &src);
+ if (EPS_ERR_NONE != ret) {
+ EPS_RETURN( ret );
+ }
+
+ pmIdx = 0; /* skip the command header of pm string */
+ while( EPS_ERR_NONE == ret && pmIdx < pmSize-3 && FALSE == complete) {
+ switch(pmString[pmIdx]) {
+ case 'S':
+ if(0 == baseResolution){
+ ret = pm3GetTfieldValue(pmString, pmSize, &pmIdx, NULL, NULL, &baseResolution);
+ }
+ resVal = ((resolution & EPS_IR_360X360) || (resolution & EPS_IR_720X720))?
+ 360:300;
+ baseResVal = ((baseResolution & EPS_IR_360X360) || (baseResolution & EPS_IR_720X720))?
+ 360:300;
+
+ ret = pm3ScanSfield(pmString, pmSize, &pmIdx, &src, resVal, baseResVal, printAreaInfo);
+ break;
+
+ case 'T':
+ /* get base resolution */
+ ret = pm3GetTfieldValue(pmString, pmSize, &pmIdx, NULL, NULL, &baseResolution);
+ break;
+ case 'L':
+ ret = pm3ScanLfield(pmString, pmSize, &pmIdx, NULL, 0, NULL); /* skip L field */
+ break;
+ case 'P':
+ ret = pm3ScanPfield(pmString, pmSize, &pmIdx, NULL);
+ break;
+ case ';':
+ default: /* unknown category */
+ complete = TRUE;
+ break;
+ }
+
+ /* If we run into an occurrence of carriage return followed by line feed,
+ * we have found the terminating characters of the string. */
+ if(pmString[pmIdx] == ';' && pmString[pmIdx+1] == 0xFF) {
+ break;
+ }
+ }
+
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: pm3ScanSfield() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pmString EPS_UINT8* I:Pointer to pm string */
+/* pmSize EPS_INT32 I:Length of pm string */
+/* pPmIdx EPS_INT32* I/O:pointer to index of pm buffer */
+/* src EPS_PRINTAREA_SOURCE* I:pointer to basic size values */
+/* resVal EPS_INT32 I:caluclate resotution */
+/* baseResVal EPS_INT32 I:pm data resotution */
+/* printAreaInfo EPS_PRINT_AREA_INFO* O:pointer to size information */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* parse S field and make size information. move next field. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE pm3ScanSfield(
+
+ EPS_UINT8* pmString,
+ EPS_INT32 pmSize,
+ EPS_INT32* pPmIdx,
+ EPS_PRINTAREA_SOURCE* src,
+ EPS_INT32 resVal,
+ EPS_INT32 baseResVal,
+ EPS_PRINT_AREA_INFO* printAreaInfo
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_LAYOUTSIZE_INFO *pSize = NULL;
+ EPS_INT32 pmIdx = 0; /* pm string index */
+ EPS_INT32 idx, sIdx; /* Index */
+ EPS_INT32 num_mSize = 0; /* Media size number */
+ EPS_INT32 blkSize = 0; /* data block size */
+ EPS_INT32 factor = 0;
+
+ EPS_LOG_FUNCIN;
+
+ pmIdx = *pPmIdx;
+
+ pmIdx++;
+ num_mSize = pmString[pmIdx];
+ pmIdx++;
+
+ if(NULL != printAreaInfo){
+ pSize = (EPS_LAYOUTSIZE_INFO*)EPS_ALLOC(sizeof(EPS_LAYOUTSIZE_INFO) * num_mSize);
+ if( NULL == pSize ){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ memset(pSize, 0, sizeof(EPS_LAYOUTSIZE_INFO) * num_mSize);
+ printAreaInfo->sizeList = pSize;
+ printAreaInfo->numSizes = num_mSize;
+ }
+
+ for(idx = 0; idx < num_mSize; idx++){
+ if(pmIdx >= pmSize){
+ ret = EPS_ERR_OPR_FAIL; /* Invalid format */
+ break;
+ }
+
+ blkSize = pmString[pmIdx] + 1;
+ if(blkSize < 14){
+ ret = EPS_ERR_OPR_FAIL; /* Invalid format */
+ break;
+ }
+
+ if(NULL != printAreaInfo){
+ pSize->mediaSizeID = pmString[pmIdx+1];
+ for (sIdx = 0; src->pMI[sIdx].id != -1; sIdx++) {
+ if (src->pMI[sIdx].id == pSize->mediaSizeID){
+ break;
+ }
+ }
+
+ pSize->numLayouts = 2;
+ pSize->layoutList = (EPS_LAYOUT_INFO*)EPS_ALLOC(sizeof(EPS_LAYOUT_INFO) * 2);
+ if( NULL == pSize->layoutList ){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+
+ pSize->paperWidth = src->pMI[sIdx].paper_x * src->factor;
+ pSize->paperHeight = src->pMI[sIdx].paper_y * src->factor;
+
+ factor = src->factor;
+ pSize->layoutList[0].layout = EPS_MLID_BORDERLESS;
+ ret = CalcPrintMargin(TRUE, src, NULL, &pSize->layoutList[0], NULL);
+ if (EPS_ERR_NONE != ret) {
+ break;
+ }
+ /* not use printer data
+ pSize->layoutList[0].margin.top = -EPS_PM3_RESCOMV( pmString[pmIdx+2] << 8 | pmString[pmIdx+3] );
+ pSize->layoutList[0].margin.left =
+ pSize->layoutList[0].margin.right = -EPS_PM3_RESCOMV( pmString[pmIdx+4] << 8 | pmString[pmIdx+5] );
+ pSize->layoutList[0].margin.bottom = -EPS_PM3_RESCOMV( pmString[pmIdx+6] << 8 | pmString[pmIdx+7] );
+ */
+
+ pSize->layoutList[1].layout = EPS_MLID_BORDERS;
+ pSize->layoutList[1].margin.top = EPS_PM3_RESCOMV( pmString[pmIdx+8] << 8 | pmString[pmIdx+9] );
+ pSize->layoutList[1].margin.left =
+ pSize->layoutList[1].margin.right = EPS_PM3_RESCOMV( pmString[pmIdx+10] << 8 | pmString[pmIdx+11] );
+ pSize->layoutList[1].margin.bottom = EPS_PM3_RESCOMV( pmString[pmIdx+12] << 8 | pmString[pmIdx+13] );
+
+ pSize++;
+ }
+ pmIdx += blkSize;
+ }
+
+ *pPmIdx = pmIdx;
+
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: pm3ScanTfield() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pmString EPS_UINT8* I:Pointer to pm string */
+/* pmSize EPS_INT32 I:Length of pm string */
+/* pPmIdx EPS_INT32* I/O:pointer to index of pm buffer */
+/* totalTypeNum EPS_INT32* O:pointer to index of pm buffer */
+/* pTVals EPS_UINT8** O:pointer to type & quality pair */
+/* resolution EPS_UINT32* O:pointer to basic resolution */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* parse T field and make type & quality pair. move next field. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE pm3ScanTfield(
+
+ EPS_UINT8* pmString,
+ EPS_INT32 pmSize,
+ EPS_INT32* pPmIdx,
+ EPS_INT32* totalTypeNum,
+ EPS_UINT8** pTVals,
+ EPS_UINT32* resolution
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 pmIdx; /* pm string index */
+ EPS_INT32 idx; /* Index */
+ EPS_INT32 num_mType = 0; /* Media type number */
+ EPS_INT32 blkSize = 0; /* data block size */
+
+ EPS_LOG_FUNCIN;
+
+ pmIdx = *pPmIdx;
+
+ /* make type & quality pair */
+ pmIdx++;
+ num_mType = pmString[pmIdx];
+ if(NULL != totalTypeNum){
+ *totalTypeNum = num_mType;
+ }
+ if(NULL != pTVals){
+ *pTVals = (EPS_UINT8*)EPS_ALLOC( *totalTypeNum * 2 );
+ if( NULL == pTVals){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ }
+
+ pmIdx++;
+ for(idx = 0; idx < num_mType; idx++){
+ if(pmIdx >= pmSize){
+ ret = EPS_ERR_OPR_FAIL; /* Invalid format */
+ break;
+ }
+
+ blkSize = pmString[pmIdx] + 1;
+ if(blkSize < 7){
+ ret = EPS_ERR_OPR_FAIL; /* Invalid format */
+ break;
+ }
+
+ if(NULL != pTVals){
+ (*pTVals)[2*idx] = pmString[pmIdx+1];
+ (*pTVals)[2*idx+1] = (pmString[pmIdx+2] & EPS_MQID_ALL);
+ /* If Draft Quality is only supported, add Normal Quality */
+ if(EPS_MQID_DRAFT == (*pTVals)[2*idx+1]){
+ (*pTVals)[2*idx+1] |= EPS_MQID_NORMAL;
+ }
+ }
+
+ if(NULL != resolution){
+ if( 720 == ((pmString[pmIdx+3] << 8) + pmString[pmIdx+4]) ){
+ *resolution |= EPS_IR_720X720;
+ } else if( 600 == ((pmString[pmIdx+3] << 8) + pmString[pmIdx+4]) ){
+ *resolution |= EPS_IR_300X300 | EPS_IR_600X600;
+ } else if( 300 == ((pmString[pmIdx+3] << 8) + pmString[pmIdx+4]) ){
+ *resolution |= EPS_IR_300X300;
+ }
+ }
+
+ pmIdx += blkSize;
+ }
+
+ *pPmIdx = pmIdx;
+
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: pm3ScanLfield() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pmString EPS_UINT8* I:Pointer to pm string */
+/* pmSize EPS_INT32 I:Length of pm string */
+/* pPmIdx EPS_INT32* I/O:pointer to index of pm buffer */
+/* pTVals EPS_UINT8* I:pointer to type & quality pair */
+/* totalTypeNum EPS_INT32 I:pointer to index of pm buffer */
+/* pMedia EPS_SUPPORTED_MEDIA* O:pointer to support media structure */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* parse P field and create support media information. move next field. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE pm3ScanLfield(
+
+ EPS_UINT8* pmString,
+ EPS_INT32 pmSize,
+ EPS_INT32* pPmIdx,
+ EPS_UINT8* pTVals,
+ EPS_INT32 totalTypeNum,
+ EPS_SUPPORTED_MEDIA* pMedia
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 pmIdx; /* pm string index */
+ EPS_INT32 idx; /* Index */
+ EPS_INT32 sIdx = 0; /* Media size index */
+ EPS_INT32 tIdx = 0; /* Media type index */
+ EPS_INT32 num_mType = 0; /* Media type number */
+ EPS_INT32 num_mSize = 0; /* Media size number */
+ EPS_INT32 blkSize = 0; /* data block size */
+
+ EPS_LOG_FUNCIN;
+
+ pmIdx = *pPmIdx;
+
+ pmIdx++;
+ num_mSize = pmString[pmIdx];
+ pmIdx++;
+
+ if(NULL != pMedia){
+ pMedia->numSizes = num_mSize;
+ pMedia->sizeList = (EPS_MEDIA_SIZE*)EPS_ALLOC( sizeof(EPS_MEDIA_SIZE) * pMedia->numSizes );
+ if( NULL == pMedia->sizeList){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ memset(pMedia->sizeList, 0, sizeof(EPS_MEDIA_SIZE) * pMedia->numSizes);
+ }
+
+ for(sIdx = 0; sIdx < num_mSize; sIdx++){
+ if(pmIdx >= pmSize){
+ ret = EPS_ERR_OPR_FAIL; /* Invalid format */
+ break;
+ }
+
+ num_mType = pmString[pmIdx+1];
+
+ if(NULL != pMedia){
+ pMedia->sizeList[sIdx].mediaSizeID = pmString[pmIdx];
+ pMedia->sizeList[sIdx].numTypes = num_mType;
+
+ pMedia->sizeList[sIdx].typeList =
+ (EPS_MEDIA_TYPE*)EPS_ALLOC( sizeof(EPS_MEDIA_TYPE) * num_mType );
+ if (NULL == pMedia->sizeList[sIdx].typeList) {
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ memset(pMedia->sizeList[sIdx].typeList, 0, sizeof(EPS_MEDIA_TYPE) * num_mType);
+ }
+ pmIdx += 2;
+
+ for(tIdx = 0; tIdx < num_mType; tIdx++){
+ if(pmIdx >= pmSize){
+ ret = EPS_ERR_OPR_FAIL; /* Invalid format */
+ break;
+ }
+
+ blkSize = pmString[pmIdx] + 1;
+ if(blkSize < 5){
+ ret = EPS_ERR_OPR_FAIL; /* Invalid format */
+ break;
+ }
+
+ if(NULL != pMedia){
+#ifndef GCOMSW_USE_3DMEDIA
+ if( EPS_MTID_3D == pmString[pmIdx+1] ){
+ pMedia->sizeList[sIdx].numTypes--;
+ num_mType--; tIdx--;
+ pmIdx += blkSize; /* move next field */
+ continue;
+ }
+#endif
+#ifndef GCOMSW_USE_ROLLE_PAPER
+ if( EPS_MTID_PLAIN_ROLL_STICKER == pmString[pmIdx+1] ||
+ EPS_MTID_GROSSY_ROLL_STICKER == pmString[pmIdx+1] ){
+ pMedia->sizeList[sIdx].numTypes--;
+ num_mType--; tIdx--;
+ pmIdx += blkSize; /* move next field */
+ continue;
+ }
+#endif
+ /* type id */
+ pMedia->sizeList[sIdx].typeList[tIdx].mediaTypeID = pmString[pmIdx+1];
+
+ /* layout */
+ if( pmString[pmIdx+2] & 0x01 ){ /* bit0 */
+ pMedia->sizeList[sIdx].typeList[tIdx].layout |= EPS_MLID_BORDERS;
+ }
+ if( pmString[pmIdx+2] & 0x02 ){ /* bit1 */
+ pMedia->sizeList[sIdx].typeList[tIdx].layout |= EPS_MLID_BORDERLESS;
+ }
+
+ /* duplex */
+ if( pmString[pmIdx+2] & 0x04 ){ /* bit2 */
+ pMedia->sizeList[sIdx].typeList[tIdx].duplex = EPS_DUPLEX_ENABLE;
+ } else{
+ pMedia->sizeList[sIdx].typeList[tIdx].duplex = EPS_DUPLEX_DISABLE;
+ }
+
+ /* paper source */
+ pMedia->sizeList[sIdx].typeList[tIdx].paperSource =
+ (pmString[pmIdx+3] << 8 | pmString[pmIdx+4]) & EPS_MPID_ALL_ESCPR;
+
+ /* quality */
+ for(idx = 0; idx < totalTypeNum; idx++){
+ if(pMedia->sizeList[sIdx].typeList[tIdx].mediaTypeID == pTVals[2*idx]){
+ pMedia->sizeList[sIdx].typeList[tIdx].quality = pTVals[2*idx+1];
+ break;
+ }
+ }
+ if(0 == pMedia->sizeList[sIdx].typeList[tIdx].quality){
+ ret = EPS_ERR_OPR_FAIL; /* Invalid format */
+ break;
+ }
+ }
+
+ if(EPS_ERR_NONE != ret){
+ break;
+ }
+ pmIdx += blkSize;
+ }
+ if(EPS_ERR_NONE != ret){
+ break;
+ }
+ }
+
+ *pPmIdx = pmIdx;
+
+ EPS_RETURN( ret );
+}
+
+/*******************************************|********************************************/
+/* */
+/* Function name: pm3ScanPfield() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pmString EPS_UINT8* I:Pointer to pm string */
+/* pmSize EPS_INT32 I:Length of pm string */
+/* pPmIdx EPS_INT32* I/O:pointer to index of pm buffer */
+/* jpegMax EPS_INT32* O:pointer to jpeg max size */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* */
+/* Description: */
+/* parse P field and get jpeg max size. move next field. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE pm3ScanPfield(
+
+ EPS_UINT8* pmString,
+ EPS_INT32 pmSize,
+ EPS_INT32* pPmIdx,
+ EPS_INT32* jpegMax
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 pmIdx; /* pm string index */
+ EPS_INT32 blkSize = 0; /* data block size */
+
+ EPS_LOG_FUNCIN;
+
+ pmIdx = *pPmIdx;
+
+ pmIdx++;
+ if(pmIdx+2 >= pmSize){
+ EPS_RETURN( EPS_ERR_OPR_FAIL ); /* Invalid format */
+ }
+
+ blkSize = ((pmString[pmIdx] << 8) & 0xFF) + (pmString[pmIdx+1] & 0xFF) + 2;
+ if(blkSize < 7){
+ EPS_RETURN( EPS_ERR_OPR_FAIL ); /* Invalid format */
+ }
+ pmIdx += 2;
+
+ if(NULL != jpegMax){
+ *jpegMax = (pmString[pmIdx+2] << 24) + (pmString[pmIdx+3] << 16) + (pmString[pmIdx+4] << 8) + pmString[pmIdx+5];
+ }
+
+ pmIdx += blkSize;
+ *pPmIdx = pmIdx;
+
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: pm3GetTfieldValue() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pmString EPS_UINT8* I:Pointer to pm string */
+/* pmSize EPS_INT32 I:Length of pm string */
+/* pPmIdx EPS_INT32* I/O:pointer to index of pm buffer */
+/* totalTypeNum EPS_INT32* O:pointer to index of pm buffer */
+/* pTVals EPS_UINT8** O:pointer to type & quality pair */
+/* resolution EPS_UINT32* O:pointer to basic resolution */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_OPR_FAIL - Internal Error */
+/* EPS_ERR_MEMORY_ALLOCATION - Alloc memory failed */
+/* */
+/* Description: */
+/* move to T field and make type & quality pair. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE pm3GetTfieldValue(
+
+ EPS_UINT8* pmString,
+ EPS_INT32 pmSize,
+ EPS_INT32* pPmIdx,
+ EPS_INT32* totalTypeNum,
+ EPS_UINT8** pTVals,
+ EPS_UINT32* resolution
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 pmIdx; /* pm string index */
+ EPS_BOOL complete = FALSE;
+ EPS_BOOL updateMainCounter = FALSE;
+
+ EPS_LOG_FUNCIN;
+ pmIdx = *pPmIdx;
+
+ while( EPS_ERR_NONE == ret && FALSE == complete && pmIdx < pmSize-3 ) {
+ switch(pmString[pmIdx]) {
+ case 'S':
+ ret = pm3ScanSfield(pmString, pmSize, &pmIdx, NULL, 0, 0, NULL); /* skip S field */
+ break;
+
+ case 'T':
+ updateMainCounter = (pmIdx == *pPmIdx);
+ ret = pm3ScanTfield(pmString, pmSize, &pmIdx, totalTypeNum, pTVals, resolution);
+ if(updateMainCounter){
+ *pPmIdx = pmIdx;
+ }
+ complete = TRUE;
+ break;
+
+ case 'L':
+ ret = pm3ScanLfield(pmString, pmSize, &pmIdx, NULL, 0, NULL); /* skip L field */
+ break;
+
+ case 'P':
+ ret = pm3ScanPfield(pmString, pmSize, &pmIdx, NULL);
+ break;
+
+ case ';':
+ default: /* unknown category */
+ complete = TRUE;
+ break;
+ }
+
+ /* If we run into an occurrence of carriage return followed by line feed,
+ * we have found the terminating characters of the string. */
+ if(pmString[pmIdx] == ';' && pmString[pmIdx+1] == 0xFF) {
+ break;
+ }
+ }
+
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: pm3FindTfield() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* pmString EPS_UINT8* Pointer to pm string */
+/* pmSize EPS_INT32 Length of pm string */
+/* mediaTypeID EPS_UINT8 Media Type ID */
+/* */
+/* Return value: */
+/* Pointer to 'T' on the pSfield - Success */
+/* NULL - There is NOT 'T' in the pSfield */
+/* */
+/* Description: */
+/* Find 'T' field that includs the <id>. */
+/* */
+/*******************************************|********************************************/
+static EPS_UINT8* pm3FindTfield(
+
+ EPS_UINT8* pmString,
+ EPS_INT32 pmSize,
+ EPS_UINT8 mediaTypeID
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT32 pmIdx; /* pm string index */
+ EPS_INT32 idx; /* Index */
+ EPS_INT32 num_mType = 0; /* Media type number */
+ EPS_INT32 blkSize = 0; /* data block size */
+ EPS_BOOL complete = FALSE;
+ EPS_UINT8* pT = NULL;
+
+ pmIdx = 0; /* skip the command header of pm string */
+ while( EPS_ERR_NONE == ret && pmIdx < pmSize-3 && FALSE == complete) {
+ switch(pmString[pmIdx]) {
+ case 'S':
+ ret = pm3ScanSfield(pmString, pmSize, &pmIdx, NULL, 0, 0, NULL); /* skip S field */
+ break;
+
+ case 'T':
+ pmIdx++;
+ num_mType = pmString[pmIdx];
+ pmIdx++;
+ for(idx = 0; idx < num_mType; idx++){
+ blkSize = pmString[pmIdx] + 1;
+ if(blkSize < 7){
+ ret = EPS_ERR_OPR_FAIL; /* Invalid format */
+ break;
+ }
+
+ if(mediaTypeID == pmString[pmIdx+1]){
+ pT = &pmString[pmIdx];
+ complete = TRUE;
+ break;
+ }
+
+ pmIdx += blkSize;
+ }
+ break;
+ case 'L':
+ ret = pm3ScanLfield(pmString, pmSize, &pmIdx, NULL, 0, NULL); /* skip L field */
+ break;
+ case 'P':
+ ret = pm3ScanPfield(pmString, pmSize, &pmIdx, NULL); /* skip P field */
+ break;
+ case ';':
+ default: /* unknown category */
+ complete = TRUE;
+ break;
+ }
+
+ /* If we run into an occurrence of carriage return followed by line feed,
+ * we have found the terminating characters of the string. */
+ if(pmString[pmIdx] == ';' && pmString[pmIdx+1] == 0xFF) {
+ break;
+ }
+ }
+
+ return pT;
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: pm3ChangeSpec_UpdatePMReply() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* printer EPS_PRINTER_INN* I/O: Pointer to a printer infomation */
+/* orgPmString EPS_UINT8* I: String of the pm command reply */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_SP_INVALID_POINTER - Input pointer error */
+/* EPS_ERR_SP_INVALID_HEADER - pm string header error */
+/* EPS_ERR_SP_INVALID_TERMINATOR - pm string terminator error */
+/* EPS_ERR_SP_NO_VALID_FIELD - pm string field error */
+/* */
+/* Description: */
+/* - Invalid formats : Delete */
+/* - Unknown 'S' field : Delete */
+/* - Unknown 'T' field : Delete */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE pm3ChangeSpec_UpdatePMReply (
+
+ EPS_PRINTER_INN* printer,
+ EPS_UINT8* orgPmString,
+ EPS_INT32* bufSize
+
+){
+/*** Declare Variable Local to Routine */
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_UINT8 *tempPmString = NULL; /* Retrieved PM data from printer */
+ EPS_UINT8 *pSrc, *pDes, *pEOF;
+ EPS_UINT8 *pSNum, *pTNum;
+ EPS_INT32 idx, s_idx, t_idx; /* Index */
+ EPS_INT32 sblkNum, tblkNum;
+ EPS_INT32 blkSize = 0; /* data block size */
+ EPS_UINT8 validSNum, validTNum;
+ EPS_BOOL validSfield;
+ EPS_BOOL complete = FALSE;
+
+ EPS_LOG_FUNCIN;
+
+/*** Validate input parameters */
+ if(orgPmString == NULL) {
+ EPS_DBGPRINT(("_SP_ChangeSpec_UpdatePMReply > EPS_ERR_SP_INVALID_POINTER\r\n"));
+ EPS_RETURN( EPS_ERR_SP_INVALID_POINTER );
+ }
+
+/*** Initialize Local Variables */
+ tempPmString = (EPS_UINT8*)EPS_ALLOC(*bufSize);
+ if(NULL == tempPmString){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ memset(tempPmString, 0x00, *bufSize);
+
+ /* Initialize pm data state */
+ printer->pmData.version = 0;
+ printer->pmData.length = 0;
+ EPS_SAFE_RELEASE( printer->pmData.pmString )
+
+ pSrc = orgPmString;
+ pDes = tempPmString;
+ pEOF = pSrc + *bufSize;
+
+ while( EPS_ERR_NONE == ret && pSrc < pEOF && FALSE == complete) {
+ switch(*pSrc) {
+ case 'S': /*** Correct unknown 'S' fields */
+ *pDes++ = *pSrc++;
+ sblkNum = *pSrc++;
+ pSNum = pDes;
+ pDes++;
+
+ validSNum = 0;
+ for(s_idx = 0; s_idx < sblkNum; s_idx++){
+ blkSize = *pSrc + 1;
+ for(idx = 0; idx < EPS_NUM_MEDIA_SIZES; idx++) {
+ if(epsMediaSize[idx].id == *(pSrc+1)) {
+ memcpy(pDes, pSrc, blkSize);
+ pDes += blkSize;
+ validSNum++;
+ break;
+ }
+ }
+ pSrc += blkSize;
+ }
+ *pSNum = validSNum;
+ break;
+
+ case 'T': /*** Correct unknown 'T' fields */
+ *pDes++ = *pSrc++;
+ tblkNum = *pSrc++;
+ pTNum = pDes;
+ pDes++;
+
+ validTNum = 0;
+ for(t_idx = 0; t_idx < tblkNum; t_idx++){
+ blkSize = *pSrc + 1;
+ for(idx = 0; idx < EPS_NUM_MEDIA_TYPES; idx++) {
+ if(epsMediaTypeIndex[idx] == *(pSrc+1)) {
+ memcpy(pDes, pSrc, blkSize);
+ pDes += blkSize;
+ validTNum++;
+ break;
+ }
+ }
+ pSrc += blkSize;
+ }
+ *pTNum = validTNum;
+ break;
+
+ case 'L': /*** Correct unknown Size, Type */
+ *pDes++ = *pSrc++;
+ sblkNum = *pSrc++;
+ pSNum = pDes;
+ pDes++;
+
+ validSNum = 0;
+ for(s_idx = 0; s_idx < sblkNum; s_idx++){
+ validSfield = FALSE;
+ for(idx = 0; idx < EPS_NUM_MEDIA_SIZES; idx++) {
+ if(epsMediaSize[idx].id == *(pSrc)) {
+ validSfield = TRUE;
+ validSNum++;
+ break;
+ }
+ }
+
+ if(validSfield){
+ *pDes++ = *pSrc++;
+ tblkNum = *pSrc++;
+ pTNum = pDes;
+ pDes++;
+
+ validTNum = 0;
+ for(t_idx = 0; t_idx < tblkNum; t_idx++){
+ blkSize = *pSrc + 1;
+ for(idx = 0; idx < EPS_NUM_MEDIA_TYPES; idx++) {
+ if(epsMediaTypeIndex[idx] == *(pSrc+1)) {
+ memcpy(pDes, pSrc, blkSize);
+ pDes += blkSize;
+ validTNum++;
+ break;
+ }
+ }
+ pSrc += blkSize;
+ }
+ *pTNum = validTNum;
+ } else{
+ pSrc++;
+ tblkNum = *pSrc++;
+ for(t_idx = 0; t_idx < tblkNum; t_idx++){
+ blkSize = *pSrc + 1;
+ pSrc += blkSize;
+ }
+ }
+ }
+ *pSNum = validSNum;
+ break;
+
+ case 'P':
+ *pDes++ = *pSrc++;
+ blkSize = ((*pSrc << 8) & 0xFF) + (*(pSrc+1) & 0xFF) + 2;
+ memcpy(pDes, pSrc, blkSize);
+ pSrc += blkSize;
+ pDes += blkSize;
+ break;
+
+ case ';':
+ *pDes++ = *pSrc++;
+ *pDes++ = 0xFF;
+ complete = TRUE;
+ break;
+
+ default: /* unknown category */
+ complete = TRUE;
+ break;
+ }
+ }
+ *bufSize = (EPS_INT32)(pDes - tempPmString);
+
+ /* Update orgPmString */
+ memcpy(orgPmString, tempPmString, *bufSize);
+
+ /* set filterd value "printer->pmData.pmString" */
+ printer->pmData.pmString = (EPS_UINT8*)EPS_ALLOC(*bufSize);
+ if( NULL != printer->pmData.pmString){
+ memcpy(printer->pmData.pmString, tempPmString, *bufSize);
+ printer->pmData.length = *bufSize;
+ printer->pmData.version = 3;
+ } else{
+ ret = EPS_ERR_MEMORY_ALLOCATION;
+ }
+
+ EPS_SAFE_RELEASE( tempPmString )
+
+/*** Return to caller */
+ EPS_RETURN( EPS_ERR_NONE );
+}
+
+/*_______________________________ epson-escpr-pm.c _________________________________*/
+
+/*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
+/* 1 2 3 4 5 6 7 8 */
+/*******************************************|********************************************/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/***** End of File *** End of File *** End of File *** End of File *** End of File ******/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
diff --git a/lib/epson-escpr-pm.h b/lib/epson-escpr-pm.h
new file mode 100644
index 0000000..76b887a
--- /dev/null
+++ b/lib/epson-escpr-pm.h
@@ -0,0 +1,74 @@
+/*_______________________________ epson-escpr-pm.h _________________________________*/
+
+/* 1 2 3 4 5 6 7 8 */
+/*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
+/*******************************************|********************************************/
+/*
+ * Copyright (c) 2014 Seiko Epson Corporation All rights reserved.
+ *
+ * Copyright protection claimed includes all forms and matters of
+ * copyrightable material and information now allowed by statutory or judicial
+ * law or hereinafter granted, including without limitation, material generated
+ * from the software programs which are displayed on the screen such as icons,
+ * screen display looks, etc.
+ *
+ */
+/*******************************************|********************************************/
+/* */
+/* Epson ESC/PR print media Functions */
+/* */
+/*******************************************|********************************************/
+#ifndef __EPSON_ESCPR_PM_H__
+#define __EPSON_ESCPR_PM_H__
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*------------------------------------ Includes -------------------------------------*/
+/*******************************************|********************************************/
+#include "epson-typedefs.h"
+#include "epson-escpr-pvt.h"
+
+/*------------------------------------- Data Types -------------------------------------*/
+/*******************************************|********************************************/
+
+/*-------------------------------------- Macros -------------------------------------*/
+/*******************************************|********************************************/
+
+/*----------------------------------- Definitions ------------------------------------*/
+/*******************************************|********************************************/
+
+/*--------------------------- Public Function Declarations ---------------------------*/
+/*******************************************|********************************************/
+
+ /*** pm reply */
+ /*** -------------------------------------------------------------------------------*/
+extern EPS_ERR_CODE epspmCreateMediaInfo (EPS_PRINTER_INN*, EPS_UINT8*, EPS_INT32, EPS_BOOL*);
+extern EPS_ERR_CODE epspmCreateMediaInfo3 (EPS_PRINTER_INN*, EPS_UINT8*, EPS_INT32);
+extern void epspmClearMediaInfo (EPS_SUPPORTED_MEDIA* );
+extern EPS_ERR_CODE epspmMargePaperSource (EPS_PRINTER_INN*, EPS_UINT8*, EPS_INT32);
+extern EPS_ERR_CODE epspmChangeSpec_DraftOnly (EPS_PRINTER_INN*, EPS_JOB_ATTRIB* );
+
+extern EPS_ERR_CODE epspmGetPrintAreaInfo (EPS_BOOL, const EPS_JOB_ATTRIB*, EPS_PM_DATA*,
+ EPS_UINT32*, EPS_UINT32*, EPS_LAYOUT_INFO*,
+ EPS_RECT* );
+extern EPS_ERR_CODE epspmCreatePrintAreaInfoFromTable (const EPS_SUPPORTED_MEDIA*, EPS_UINT32,
+ EPS_PRINT_AREA_INFO* );
+extern EPS_ERR_CODE epspmCreatePrintAreaInfoFromPM(EPS_UINT8*, EPS_INT32, EPS_UINT32,
+ EPS_PRINT_AREA_INFO* );
+extern void epspmClearPrintAreaInfo (EPS_PRINT_AREA_INFO* );
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* def __EPSON_ESCPR_PM_H__ */
+
+
+/*_______________________________ epson-escpr-pm.h _________________________________*/
+
+/*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
+/* 1 2 3 4 5 6 7 8 */
+/*******************************************|********************************************/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+/***** End of File *** End of File *** End of File *** End of File *** End of File ******/
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
diff --git a/lib/epson-escpr-pvt.h b/lib/epson-escpr-pvt.h
index eb63fd2..5296836 100755..100644
--- a/lib/epson-escpr-pvt.h
+++ b/lib/epson-escpr-pvt.h
@@ -32,13 +32,22 @@ extern "C" {
#include "epson-typedefs.h"
#include "epson-escpr-def.h"
+#ifdef GCOMSW_EXTENTION
+#include "epson-escpr-extention.h"
+#endif
+#ifdef GCOMSW_PRIVATE
+#include "epson-escpr-closed.h"
+#endif
+
/*------------------------------------- Data Types -------------------------------------*/
/*******************************************|********************************************/
typedef void* EPS_HANDLE; /* handle */
/*-------------------------------------- Macros -------------------------------------*/
/*******************************************|********************************************/
-
+#ifndef EPS_PRV_COMMANDS
+#define EPS_PRV_COMMANDS(p1, p2, p3)
+#endif
/*----------------------------------- Definitions ------------------------------------*/
/*******************************************|********************************************/
@@ -52,7 +61,8 @@ typedef void* EPS_HANDLE; /* handle
/*** Definitions for pm string data */
/*** -------------------------------------------------------------------------------*/
-#define EPS_PM_MAXSIZE 512
+#define EPS_PM_MAXSIZE 1024
+#define EPS_PM_BASESIZE 512
#define EPS_PM_HEADER_LEN 9
#define EPS_PM2_HEADER_LEN 10
#define EPS_PM_TERMINATOR_LEN 2
@@ -102,7 +112,9 @@ typedef void* EPS_HANDLE; /* handle
#define EPS_CBTCOM_DI 15
#define EPS_CBTCOM_PM2 16
#define EPS_CBTCOM_RJ 17
-
+#define EPS_CBTCOM_CD 18
+#define EPS_CBTCOM_PM3 19
+#define EPS_CBTCOM_VI5 20
/*** CBT Error Code */
/*** -------------------------------------------------------------------------------*/
@@ -173,6 +185,7 @@ typedef struct _tagEPS_STATUS_INFO_ {
EPS_INT32 nInkError;
EPS_INT32 nColor[EPS_INK_NUM];
EPS_INT32 nColorType[EPS_INK_NUM];
+ EPS_INT32 nColorStatus[EPS_INK_NUM];
} EPS_STATUS_INFO;
/*** Basic Rect Object */
@@ -207,8 +220,9 @@ typedef struct _tagEPS_BASEPOINT_ {
/*** "pm" Command Reply Data */
/*** -------------------------------------------------------------------------------*/
typedef struct _tagEPS_PM_DATA_ {
- EPS_INT32 state;
- EPS_UINT8 pmString[EPS_PM_MAXSIZE];
+ EPS_INT32 version;
+ EPS_INT32 length;
+ EPS_UINT8* pmString;
} EPS_PM_DATA;
@@ -221,19 +235,21 @@ typedef struct _tagEPS_PRINTER_INN_ {
EPS_INT8 modelName[EPS_NAME_BUFFSIZE];
EPS_INT8 friendlyName[EPS_NAME_BUFFSIZE];
EPS_INT8 location[EPS_ADDR_BUFFSIZE];
- /* unused EPS_INT8 serial[EPS_NAME_BUFFSIZE];*/
+ EPS_INT8 serialNo[EPS_ADDR_BUFFSIZE];
EPS_INT8 printerID[EPS_PRNID_BUFFSIZE];
/* unused EPS_BOOL needUpgrade; */
EPS_HANDLE protocolInfo;
EPS_UINT16 printPort;
EPS_UINT32 language; /* print language */
+ EPS_UINT32 egID; /* error group id */
EPS_INT8 macAddress[EPS_ADDR_BUFFSIZE];
/*** Supported Media */
/*** -------------------------------------------------------------------------------*/
EPS_SUPPORTED_MEDIA supportedMedia;
EPS_INT32 JpgMax;
+ EPS_PRINT_AREA_INFO printAreaInfo;
/*** Original PM reply */
/*** -------------------------------------------------------------------------------*/
@@ -306,8 +322,8 @@ typedef struct _tagEPS_PRINT_JOB_ {
/*** -------------------------------------------------------------------------------*/
EPS_INT32 topMargin; /* Media/Border-Mode Top Margin */
EPS_INT32 leftMargin; /* Media/Border-Mode Left Margin */
- EPS_INT32 bottomMargin; /* Media/Border-Mode Bottom Margin */
- EPS_INT32 rightMargin; /* Media/Border-Mode Right Margin */
+ /*EPS_INT32 bottomMargin; Media/Border-Mode Bottom Margin */
+ /*EPS_INT32 rightMargin; Media/Border-Mode Right Margin */
/*** Printable */
/*** -------------------------------------------------------------------------------*/
@@ -345,18 +361,6 @@ typedef struct _tagEPS_PRINT_JOB_ {
EPS_BOOL transmittable; /* possible to transmit */
EPS_BOOL bJpgLimit;
-#if 0 /* DEL */
- /*** Additional data */
- /*** -------------------------------------------------------------------------------*/
- EPS_UINT32 additional;
- struct { /* QR Code */
- EPS_INT32 cellNum;
- EPS_UINT8* bits;
- EPS_INT32 dpc; /* Dots per Cell */
- EPS_RECT rc;
- } qrcode;
-#endif
-
/*** Misc */
/*** -------------------------------------------------------------------------------*/
EPS_UINT8 whiteColorValue; /* Define white value or index */
diff --git a/lib/epson-escpr-services.c b/lib/epson-escpr-services.c
index 656fb12..456df29 100755..100644
--- a/lib/epson-escpr-services.c
+++ b/lib/epson-escpr-services.c
@@ -22,9 +22,6 @@
/* EPS_ERR_CODE serAnalyzeStatus (Status, StatusInfo ); */
/* void serDelayThread (Milliseconds ); */
/* EPS_ERR_CODE serSleep (Milliseconds ); */
-/* EPS_INT32 serGetInkError (pStatInfo, pNotify ); */
-/* EPS_INT32 _SP_ChangeSpec_UpdatePMReply(printer, orgPmString ); */
-/* EPS_ERR_CODE _SP_ChangeSpec_DraftOnly(printer, jobAtter ); */
/* */
/*******************************************|********************************************/
@@ -37,13 +34,17 @@
#ifdef GCOMSW_CMD_ESCPAGE_S
#include "epson-escpage-s.h"
#endif
+#ifdef GCOMSW_CMD_PCL
+#include "epson-pcl.h"
+#endif
+
+#ifndef EPS_PARSE_CARTRIDGE
+#define EPS_PARSE_CARTRIDGE(p1, p2, p3, p4) parseCartridge(p1, p2, p3, p4);
+#endif
+
+
/*------------------------------------ Definition -----------------------------------*/
/*******************************************|********************************************/
- /*** Index of printing quality */
- /*** -------------------------------------------------------------------------------*/
-#define Q_DRAFT 0
-#define Q_NORMAL 1
-#define Q_HIGH 2
#ifdef EPS_LOG_MODULE_SER
#define EPS_LOG_MODULE EPS_LOG_MODULE_SER
@@ -66,52 +67,14 @@ typedef struct _tagSP_OBSERVER
static SP_OBSERVER g_observer = {0};
-/*--------------------------- Special PM String table -------------------------------*/
-/*******************************************|********************************************/
-typedef struct _tagSP_PM_STRINGS
-{
- EPS_UINT32 id; /* ID */
- const EPS_UINT8* res; /* PM String */
- EPS_UINT32 len; /* length */
-}SP_PM_STRINGS;
-
-const EPS_UINT8 spm_E300[] = {0x40, 0x42, 0x44, 0x43, 0x20, 0x50, 0x4D, 0x0D, 0x0A, 0x53, 0x0F, 0x54, 0x26, 0x82, 0x2F, 0x54,
- 0x0B, 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x0A, 0x54, 0x26, 0x82, 0x2F, 0x54, 0x0B,
- 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x10, 0x54, 0x0B, 0x82, 0x2F, 0x54, 0x08, 0x02,
- 0x2F, 0x2F, 0x53, 0x23, 0x54, 0x0B, 0x82, 0x2F, 0x2F, 0x0D, 0x0A};
-const EPS_UINT8 spm_E500[] = {0x40, 0x42, 0x44, 0x43, 0x20, 0x50, 0x4D, 0x0D, 0x0A, 0x53, 0x0F, 0x54, 0x26, 0x82, 0x2F, 0x54,
- 0x0B, 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x0A, 0x54, 0x26, 0x82, 0x2F, 0x54, 0x0B,
- 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x2B, 0x54, 0x0B, 0x82, 0x2F, 0x2F, 0x53, 0x10,
- 0x54, 0x0B, 0x82, 0x2F, 0x54, 0x08, 0x02, 0x2F, 0x2F, 0x53, 0x23, 0x54, 0x0B, 0x82, 0x2F, 0x2F,
- 0x0D, 0x0A};
-const EPS_UINT8 spm_PM200[] = {0x40, 0x42, 0x44, 0x43, 0x20, 0x50, 0x4D, 0x0D, 0x0A, 0x53, 0x0A, 0x54, 0x26, 0x82, 0x2F, 0x54,
- 0x0B, 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x10, 0x54, 0x08, 0x02, 0x2F, 0x2F, 0x0D,
- 0x0A};
-const EPS_UINT8 spm_PM240[] = {0x40, 0x42, 0x44, 0x43, 0x20, 0x50, 0x4D, 0x0D, 0x0A, 0x53, 0x0A, 0x54, 0x26, 0x82, 0x2F, 0x54,
- 0x0B, 0x82, 0x2F, 0x54, 0x2B, 0x82, 0x2F, 0x2F, 0x53, 0x2B, 0x54, 0x0B, 0x82, 0x2F, 0x2F, 0x53,
- 0x10, 0x54, 0x08, 0x42, 0x2F, 0x2F, 0x0D, 0x0A};
-
-const SP_PM_STRINGS spPMStrTbl[] =
-{
- { EPS_PMS_E300, spm_E300, sizeof(spm_E300) },
- { EPS_PMS_E500, spm_E500, sizeof(spm_E500) },
- { EPS_PMS_PM200, spm_PM200, sizeof(spm_PM200) },
- { EPS_PMS_PM240, spm_PM240, sizeof(spm_PM240) }
-};
-
-const EPS_UINT32 EPS_SPM_STRINGS = sizeof(spPMStrTbl) / sizeof(SP_PM_STRINGS);
-
/*-------------------------------- Local Functions ----------------------------------*/
/*******************************************|********************************************/
-static EPS_INT32 _SP_LoadPMString (EPS_UINT32, EPS_UINT8*, EPS_UINT32 );
-static EPS_INT32 _pmFindSfield (EPS_UINT8, EPS_UINT8*, EPS_UINT8**, EPS_UINT8**);
-static EPS_UINT8* _pmScanTfield (EPS_UINT8, EPS_UINT8* );
-static EPS_INT16 _pmAppendTfield (EPS_UINT8*, EPS_UINT8* );
-static void _pmValidateRemoveDelimiter (EPS_UINT8*, EPS_UINT8*, EPS_INT32 );
-static EPS_INT16 _pmValidateRemoveUnknownSfield (EPS_UINT8*, EPS_UINT8* );
-static void _pmCorrectUnknownTfield (EPS_UINT8*, EPS_UINT8* );
-static void _pmCorrectDupulicatedFields (EPS_UINT8*, EPS_UINT8* );
-static void _pmAdjustQuality (EPS_UINT8* );
+#ifndef GCOMSW_EXTENTION
+static EPS_UINT8* parseCartridge (EPS_UINT8 ParameterByte, EPS_UINT8* param,
+ EPS_INK_INFO* ink, EPS_INT32 cartridges[] );
+#endif
+static EPS_UINT32 pptops (EPS_UINT8* pp );
+
/*----------------------------------- Debug Dump -------------------------------------*/
/*******************************************|********************************************/
@@ -123,104 +86,6 @@ static void _pmAdjustQuality (EPS_UINT8*
#define SerDebugPrintf(a)
#endif
-/*------------------------------------ Debug Dump -----------------------------------*/
-/*******************************************|********************************************/
- /*** ALL Debug Dump Switch for <epson-escpr-service.c> */
- /*** -------------------------------------------------------------------------------*/
-#define _ESCPR_DEBUG_SP 0 /* 0: OFF 1: ON */
-#define _ESCPR_DEBUG_SP_VERBOSE 0 /* 0: OFF 1: ON */
-
- /*** _ESCPR_DEBUG_SP --- Definition of << DUMP_PMREPLY() >> */
- /*** -------------------------------------------------------------------------------*/
-#if _ESCPR_DEBUG_SP | _VALIDATE_SUPPORTED_MEDIA_DATA_
-
-typedef enum _DUMP_TYPE {
- DUMP_HEX = 0,
- DUMP_ASCII,
- DUMP_S_TAG_ONLY,
-} DUMP_TYPE;
-
-char* str[] ={
- "DUMP_HEX",
- "DUMP_ASCII",
- "DUMP_S_TAG_ONLY",
- };
-
-static void print_PMREPLY(EPS_UINT8* pm, DUMP_TYPE type, EPS_INT8* msg)
-{
- EPS_UINT8* p = pm;
- EPS_INT16 col = 0;
-
- if(*p != 'S') {
- if(type != DUMP_HEX) {
- return; /* do not anything */
- }
-
- /* Anyway if type is DUMP_HEX then dump it */
- }
-
- printf("%s\r\n", msg);
- printf("PM REPLY DUMP [TYPE:%s]\r\n", str[type]);
-
- if(type == DUMP_HEX) {
- while(!((*p == 0x0D) && (*(p+1) == 0x0A))) {
- printf("0x%02X ", *p++);
-
- if((++col % 10) == 0) {
- printf("\r\n");
- }
- }
-
- } else {
- while(*p == 'S') {
- printf("%c ", *p++);
- printf("%02d\r\n", *p++);
- while(*p == 'T') {
- printf(" %c", *p++);
- printf(" %02d", *p++);
- printf(" [0x%02X]", *p++);
- printf(" %c\r\n", *p++);
- }
- printf("%c\r\n", *p++);
-
- if(type == DUMP_S_TAG_ONLY) {
- break;
- }
-
- if ((*p == 0x0D) && (*(p+1) == 0x0A)) {
- break;
- }
- }
-
- }
-
- if(type != DUMP_S_TAG_ONLY) {
- printf("0x%02X ", *p++);
- printf("0x%02X ", *p);
- }
-
- printf("\r\nEND\r\n");
-
-}
-#endif
-
-#if _ESCPR_DEBUG_SP
-#define DUMP_PMREPLY(a) print_PMREPLY a
-#else
-#define DUMP_PMREPLY(a)
-#endif
-
- /*** _ESCPR_DEBUG_SP_VERBOSE */
- /*** --- Definition of << VERBOSE_DUMP_PMREPLY() >> and << verbose_dbprint() >> */
- /*** -------------------------------------------------------------------------------*/
-#if _ESCPR_DEBUG_SP_VERBOSE
-#define VERBOSE_DUMP_PMREPLY(a) print_PMREPLY a
-#define verbose_dbprint(a) EPS_DBGPRINT(a)
-#else
-#define VERBOSE_DUMP_PMREPLY(a)
-#define verbose_dbprint(a)
-#endif
-
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
@@ -241,47 +106,152 @@ static void print_PMREPLY(EPS_UINT8* pm, DUMP_TYPE type, EPS_INT8* msg)
/* modelName EPS_INT8* I: Model Name */
/* */
/* Return value: */
-/* TRUE - Success */
-/* FALSE - Bad format or Not ESC/P-R device */
+/* 1 - Success */
+/* -1 - Bad format or Not Supported device */
+/* 0 - unknown */
/* */
/* Description: */
/* Get the manufacturer name and modelName from DeviceID string. */
/* */
/*******************************************|********************************************/
-EPS_BOOL serParseDeviceID (
+EPS_INT32 serParseDeviceID (
EPS_INT8* deviceIDString,
+ EPS_INT32 strlength,
EPS_INT8* manufacturer,
EPS_INT8* modelName,
EPS_INT32* cmdLevel,
- EPS_UINT32* lang
+ EPS_UINT32* lang,
+ EPS_UINT32* errorID
){
- EPS_INT8* i;
- EPS_INT8* j;
- EPS_INT8* k;
- EPS_INT8* p;
- EPS_BOOL found = FALSE;
+ EPS_INT8* i = NULL;
+ EPS_INT8* j = NULL;
+ EPS_INT8* k = NULL;
+ EPS_INT8* p = NULL;
+ EPS_UINT32 tmpLang = EPS_LANG_UNKNOWN;
EPS_LOG_FUNCIN;
/*** Delete the data of the device ID length from string */
- if(strlen(deviceIDString) < 2){
- EPS_RETURN( FALSE );
+ if(strlength < 2){
+ EPS_RETURN( -1 );
}
- if(deviceIDString[0] == 0x00 || deviceIDString[1] == 0x00)
+ *(deviceIDString+strlength) = '\0';
+ if(deviceIDString[0] == 0x00 || deviceIDString[1] == 0x00){
deviceIDString += 2;
+ }
+ EPS_DBGPRINT(("DI : %s\n", deviceIDString))
/*** ================================================================================== */
-/*** Step 1: Check for ESC/PR Support */
+/*** Step 1: Get Manufacturer Name */
+/*** ================================================================================== */
+ if((i = strstr(deviceIDString, "MFG:")) != NULL) {
+ i += 4;
+ } else if((i = strstr(deviceIDString, "MANUFACTURER:")) != NULL) {
+ i += 13;
+ } else{
+ /* Invalid device ID. */
+ EPS_RETURN( -1 );
+ }
+ j = i;
+
+ while(*j != ';')
+ {
+ j++;
+
+ /* Emergency exit condition to prevent an infinite loop scenario; if we hit a */
+ /* carriage return, we've run too far */
+ if(*j == 0x0D || *j == 0x00) {
+ /* EPS_RETURN( -1 ); When there is not ';', assume the whole a value */
+ break;
+ }
+ }
+ /* Null-terminate the MFG substring. */
+ *j = 0;
+
+ if((strncmp(i, "EPSON", 5) != 0) && (strncmp(i, "Epson", 5) != 0) ){
+ *j = ';';
+ EPS_RETURN( -1 );
+ }
+
+ if(NULL != manufacturer){
+ /* Make sure the manufacturer name is not longer than 64 bytes. */
+ if(strlen(i) < 64) {
+ strcpy(manufacturer, i); /* If the name is OK, copy the whole string as-is */
+ }
+ else {
+ memcpy(manufacturer, i, 63); /* If the name is longer than 64 bytes, only copy */
+ } /* 63 bytes and leave the 64th as null terminator */
+ }
+
+ /* Return the string to its original format. */
+ *j = ';';
+
+
+/*** ================================================================================== */
+/*** Step 2: Get Model Name */
+/*** ================================================================================== */
+ if(NULL != modelName){
+ if((i = strstr(deviceIDString, "MDL:")) != NULL) {
+ i += 4;
+ } else if((i = strstr(deviceIDString, "MODEL:")) != NULL) {
+ i += 6;
+ } else{
+ /* Invalid device ID. */
+ EPS_RETURN( -1 );
+ }
+ j = i;
+
+ while (*j != ';')
+ {
+ j++;
+
+ /* Emergency exit condition to prevent an infinite loop scenario; if we hit a */
+ /* carriage return, we've run too far */
+ if(*j == 0x0D || *j == 0x00){
+ /* Invalid device ID. */
+ /* EPS_RETURN( -1 ); */
+ break;
+ }
+ }
+
+ /* Null-terminate the MDL substring. */
+ *j = 0;
+
+ /* Make sure the model name is not longer than 64 bytes. */
+ if(strlen(i) < 64) {
+ strcpy(modelName, i); /* If the name is OK, copy the whole string as-is */
+ }
+ else {
+ memcpy(modelName, i, 63); /* If the name is longer than 64 bytes, only copy */
+ /* 63 bytes, leaving the 64th as null terminator */
+ }
+
+ *j = ';';
+ }
+
+
+/*** ================================================================================== */
+/*** Step 3: Check for ESC/PR Support */
/*** ================================================================================== */
if((i = strstr(deviceIDString, "CMD:")) == NULL) {
- EPS_RETURN( FALSE );
+ EPS_RETURN( 0 );
}
i += 4;
+ j = i;
- if((j = strstr(i, ";")) == NULL) {
- EPS_RETURN( FALSE );
+ while (*j != ';')
+ {
+ j++;
+
+ /* Emergency exit condition to prevent an infinite loop scenario; if we hit a */
+ /* carriage return, we've run too far */
+ if(*j == 0x0D || *j == 0x00){
+ /* Invalid device ID. */
+ /* EPS_RETURN( -1 ); */
+ break;
+ }
}
*j = '\0';
@@ -291,10 +261,7 @@ EPS_BOOL serParseDeviceID (
}
if((p = strstr(i, "ESCPR")) != NULL) {
- found = TRUE;
- if(NULL != lang){
- *lang = EPS_LANG_ESCPR;
- }
+ tmpLang = EPS_LANG_ESCPR;
if(NULL != cmdLevel){
sscanf(p+5, "%d", cmdLevel);
}
@@ -302,10 +269,7 @@ EPS_BOOL serParseDeviceID (
#ifdef GCOMSW_CMD_ESCPAGE
} else if(strstr(i, "ESCPAGECOLOR") != NULL) {
- found = TRUE;
- if(NULL != lang){
- *lang = EPS_LANG_ESCPAGE_COLOR;
- }
+ tmpLang = EPS_LANG_ESCPAGE_COLOR;
if(NULL != cmdLevel){
*cmdLevel = 1;
}
@@ -313,19 +277,31 @@ EPS_BOOL serParseDeviceID (
} else if(strstr(i, "ESCPAGE") != NULL) {
if(strstr(i, "ESCPAGES") == NULL) {
- found = TRUE;
- if(NULL != lang){
- *lang = EPS_LANG_ESCPAGE;
- }
+ tmpLang = EPS_LANG_ESCPAGE;
if(NULL != cmdLevel){
*cmdLevel = 1;
}
+ /* break; ESC/Page Color takes priority */
#ifdef GCOMSW_CMD_ESCPAGE_S
} else{
- found = pageS_ParseLang(i, cmdLevel, lang);
+ if(TRUE == pageS_ParseLang(i, cmdLevel, &tmpLang)){
+ /* break; ESC/Page takes priority */
+ }
#endif
}
+
+#ifdef GCOMSW_CMD_PCL
+ } else if( (strstr(i, "PCLXL") != NULL) && (strlen(i) == 5) ){
+ if(EPS_LANG_UNKNOWN == tmpLang){
+ tmpLang = EPS_LANG_PCL;
+ }
+ if(NULL != cmdLevel){
+ *cmdLevel = 1;
+ }
+ /*break; ESC/P-R, ESC/Page takes priority */
#endif
+
+#endif /* GCOMSW_CMD_ESCPAGE */
}
if(k){
@@ -342,84 +318,80 @@ EPS_BOOL serParseDeviceID (
*j = ';';
- if(FALSE == found){
- EPS_RETURN( FALSE );
+ if(EPS_LANG_UNKNOWN == tmpLang){
+ EPS_RETURN( -1 );
+ }
+ if(NULL != lang){
+ *lang = tmpLang;
}
-
/*** ================================================================================== */
-/*** Step 2: Get Manufacturer Name */
+/*** Step 4: Error Group ID */
/*** ================================================================================== */
- if((i = strstr(deviceIDString, "MFG:")) == NULL) {
- /* Invalid device ID. */
- EPS_RETURN( FALSE );
- }
-
- i += 4;
- j = i;
-
- while(*j != ';')
- {
- j++;
-
- /* Emergency exit condition to prevent an infinite loop scenario; if we hit a */
- /* carriage return, we've run too far */
- if(*j == 0x0D) {
- EPS_RETURN( FALSE );
- }
- }
- /* Null-terminate the MFG substring. */
- *j = 0;
+ if(NULL != errorID){
+ if((i = strstr(deviceIDString, "ELG:")) != NULL) {
+ i += 4;
+ } else{
+ EPS_RETURN( 1 );
+ }
+ j = i;
- /* Make sure the manufacturer name is not longer than 64 bytes. */
- if(strlen(i) < 64) {
- strcpy(manufacturer, i); /* If the name is OK, copy the whole string as-is */
- }
- else {
- memcpy(manufacturer, i, 63); /* If the name is longer than 64 bytes, only copy */
- } /* 63 bytes and leave the 64th as null terminator */
+ while (*j != ';')
+ {
+ j++;
+ if(*j == 0x0D || *j == 0x00){
+ EPS_RETURN( 1 );
+ }
+ }
- /* Return the string to its original format. */
- *j = ';';
+ /* Null-terminate the MDL substring. */
+ *j = 0;
-/*** ================================================================================== */
-/*** Step 3: Get Model Name */
-/*** ================================================================================== */
- if((i = strstr(deviceIDString, "MDL:")) == NULL) {
- /* Invalid device ID. */
- EPS_RETURN( FALSE );
+ if(strlen(i) <= 4) {
+ sscanf(i, "%x", errorID);
+ }
+ *j = ';';
}
-
- i += 4;
- j = i;
-
- while (*j != ';')
- {
- j++;
-
- /* Emergency exit condition to prevent an infinite loop scenario; if we hit a */
- /* carriage return, we've run too far */
- if(*j == 0x0D){
- /* Invalid device ID. */
- EPS_RETURN( FALSE );
- }
- }
-
- /* Null-terminate the MDL substring. */
- *j = 0;
-
- /* Make sure the model name is not longer than 64 bytes. */
- if(strlen(i) < 64) {
- strcpy(modelName, i); /* If the name is OK, copy the whole string as-is */
- }
- else {
- memcpy(modelName, i, 63); /* If the name is longer than 64 bytes, only copy */
- /* 63 bytes, leaving the 64th as null terminator */
- }
-
- EPS_RETURN( TRUE );
+
+ EPS_RETURN( 1 );
}
+/*******************************************|********************************************/
+/* */
+/* Function name: serCheckLang() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* langString EPS_INT8* I: Print lang string */
+/* lang EPS_UINT32* O: lang id */
+/* */
+/* Return value: */
+/* TRUE - Success */
+/* FALSE - Not Supported device */
+/* */
+/* Description: */
+/* Get the printer status and analyze the status string. */
+/* */
+/*******************************************|********************************************/
+EPS_BOOL serCheckLang (
+
+ EPS_INT8* langString,
+ EPS_UINT32* lang
+
+){
+ if( (strncmp(langString, "ESC-P/R", 7) == 0) ){
+ *lang = EPS_LANG_ESCPR;
+ return TRUE;
+#ifdef GCOMSW_CMD_PCL
+ } else if( (strcmp(langString, "PCL 6") == 0) ){
+ *lang = EPS_LANG_PCL;
+ return TRUE;
+#endif
+ }
+
+ return FALSE;
+}
/*******************************************|********************************************/
/* */
@@ -429,6 +401,7 @@ EPS_BOOL serParseDeviceID (
/* --------- */
/* Name: Type: Description: */
/* Status EPS_INT8* I: Printer Status string */
+/* egID EPS_UINT32 I: printer error group id */
/* pstInfo EPS_STATUS_INFO* O: Printer Status information */
/* */
/* Return value: */
@@ -442,19 +415,22 @@ EPS_BOOL serParseDeviceID (
EPS_ERR_CODE serAnalyzeStatus (
EPS_INT8* Status,
+ EPS_UINT32 egID,
EPS_STATUS_INFO* pstInfo
){
EPS_UINT8* Field;
EPS_UINT8* EndField;
EPS_INT32 i;
- EPS_INT32 Min;
EPS_UINT8 Header;
EPS_UINT8 ParameterByte;
EPS_INT8* Ink;
EPS_INT8 Parameter[128];
- EPS_UINT8 InkCartridgeType = 0;
+ EPS_BOOL mediaErr = FALSE;
+ EPS_UINT8 mediaErrNum, jamErrNum;
+ EPS_INT32 inkNum = 0;
+ EPS_INT32 nInkError = EPS_INKERR_NONE;
EPS_LOG_FUNCIN;
@@ -463,9 +439,12 @@ EPS_ERR_CODE serAnalyzeStatus (
EPS_RETURN( EPS_ERR_COMM_ERROR );
}
+ memset(pstInfo, 0, sizeof(EPS_STATUS_INFO));
pstInfo->nState = EPS_ST_IDLE;
pstInfo->nError = EPS_PRNERR_NOERROR;
pstInfo->nWarn = EPS_PRNWARN_NONE;
+ mediaErrNum = jamErrNum = 0;
+
#if _DEBUG_BIN_STATUS_
EPS_DUMP(Status, 256);
#endif
@@ -497,6 +476,7 @@ EPS_ERR_CODE serAnalyzeStatus (
case 0x0A: pstInfo->nState = EPS_ST_SHUTDOWN; break;
/* case 0x0B: pstInfo->nState = EPS_ST_WAITPAPERINIT; break;*/ /* Not supported by 2006 Model */
/* case 0x0C: pstInfo->nState = EPS_ST_INIT_PAPER; break;*/ /* Not supported by 2006 Model */
+ case 0x0D: pstInfo->nState = EPS_ST_BUSY; break;
default:
pstInfo->nState = EPS_ST_ERROR;
if(pstInfo->nError == EPS_PRNERR_NOERROR){
@@ -505,6 +485,7 @@ EPS_ERR_CODE serAnalyzeStatus (
break;
}
break;
+
case 0x02: /* ER */
EPS_DBGPRINT(("* ERR 0x%02X *\n", Parameter[0]))
switch(Parameter[0]) {
@@ -519,11 +500,11 @@ EPS_ERR_CODE serAnalyzeStatus (
break;
/* case 0x03: pstInfo->nError = EPS_PRNERR_LEVERPOSITION; break;*/ /* Not supported by 2006 Model */
case 0x04: pstInfo->nError = EPS_PRNERR_PAPERJAM; break;
- case 0x05: pstInfo->nError = EPS_PRNERR_INKOUT; break;
+ case 0x05: pstInfo->nError = EPS_PRNERR_INKOUT; break;
case 0x06: pstInfo->nError = EPS_PRNERR_PAPEROUT; break;
/* case 0x07: pstInfo->nError = EPS_PRNERR_INITIALIZESETTING; break;*/ /* Not supported by 2006 Model */
/* case 0x08: pstInfo->nError = EPS_PRNERR_UNKNOWN; break;*/ /* Not supported by 2006 Model */
- /* case 0x09: pstInfo->nError = EPS_PRNERR_PAPERCHANGE_UNCOMP; break;*/ /* Not supported by 2006 Model */
+ case 0x09: pstInfo->nError = EPS_PRNERR_CDRGUIDEOPEN/*EPS_PRNERR_PAPERCHANGE_UNCOMP*/; break; /* supported by 2012 Model */
case 0x0A: pstInfo->nError = EPS_PRNERR_SIZE_TYPE_PATH/*EPS_PRNERR_PAPERSIZE*/;break;/* supported by 2008 Model */
/* case 0x0B: pstInfo->nError = EPS_PRNERR_RIBBONJAM; break;*/ /* Not supported by 2006 Model */
case 0x0C: pstInfo->nError = EPS_PRNERR_SIZE_TYPE_PATH; break;
@@ -531,13 +512,13 @@ EPS_ERR_CODE serAnalyzeStatus (
/* case 0x0E: pstInfo->nError = EPS_PRNERR_PAPERFEED; break;*/ /* Not supported by 2006 Model */
/* case 0x0F: pstInfo->nError = EPS_PRNERR_SIMMCOPY; break;*/ /* Not supported by 2006 Model */
case 0x10: pstInfo->nError = EPS_PRNERR_SERVICEREQ; break;
- /* case 0x11: pstInfo->nError = EPS_PRNERR_WAITTEAROFFRETURN; break;*/ /* Not supported by 2006 Model */
+ case 0x11: pstInfo->nError = EPS_PRNERR_ANY/*EPS_PRNERR_WAITTEAROFFRETURN*/; break;
case 0x12: pstInfo->nError = EPS_PRNERR_DOUBLEFEED; break;
/* case 0x13: pstInfo->nError = EPS_PRNERR_HEADHOT; break;*/ /* Not supported by 2006 Model */
/* case 0x14: pstInfo->nError = EPS_PRNERR_PAPERCUTMIS; break;*/ /* Not supported by 2006 Model */
/* case 0x15: pstInfo->nError = EPS_PRNERR_HOLDLEVERRELEASE; break;*/ /* Not supported by 2006 Model */
/* case 0x16: pstInfo->nError = EPS_PRNERR_NOT_CLEANING; break;*/ /* Not supported by 2006 Model */
- /* case 0x17: pstInfo->nError = EPS_PRNERR_PAPERCONFIG; break;*/ /* Not supported by 2006 Model */
+ case 0x17: pstInfo->nError = EPS_PRNERR_SIZE_TYPE_PATH/*EPS_PRNERR_PAPERCONFIG*/; break; /* supported by 2012 Model */
/* case 0x18: pstInfo->nError = EPS_PRNERR_PAPERSLANT; break;*/ /* Not supported by 2006 Model */
/* case 0x19: pstInfo->nError = EPS_PRNERR_CLEANINGNUMOVER; break;*/ /* Not supported by 2006 Model */
case 0x1A: pstInfo->nError = EPS_PRNERR_INKCOVEROPEN; break;
@@ -545,6 +526,7 @@ EPS_ERR_CODE serAnalyzeStatus (
/* case 0x1C: pstInfo->nError = EPS_PRNERR_CUTTER; break;*/ /* Not supported by 2006 Model */
/* case 0x1D: pstInfo->nError = EPS_PRNERR_CUTTERJAM; break;*/ /* Not supported by 2006 Model */
/* case 0x1E: pstInfo->nError = EPS_PRNERR_INKCOLOR; break;*/ /* Not supported by 2006 Model */
+ case 0x1E: pstInfo->nError = EPS_PRNERR_ANY/*EPS_PRNERR_INKCOLOR*/; break; /* Not supported by 2006 Model */
/* case 0x1F: pstInfo->nError = EPS_PRNERR_CUTTERCOVEROPEN; break;*/ /* Not supported by 2006 Model */
/* case 0x20: pstInfo->nError = EPS_PRNERR_LFP_INKLEVERRELEASE; break;*/ /* Not supported by 2006 Model */
/* case 0x22: pstInfo->nError = EPS_PRNERR_LFP_NOMAINTENANCETANK1; break;*/ /* Not supported by 2006 Model */
@@ -577,14 +559,18 @@ EPS_ERR_CODE serAnalyzeStatus (
case 0x37:
if ( obsIsA3Model(EPS_MDC_STATUS) == TRUE ) {
pstInfo->nError = EPS_PRNERR_COVEROPEN;
- } else {
+ } else if(0x0D04 == egID || 0x0D84 == egID){
+ pstInfo->nError = EPS_PRNERR_COVEROPEN;
+ } else{
pstInfo->nError = EPS_PRNERR_SCANNEROPEN;
}
break;
case 0x38:
if ( obsIsA3Model(EPS_MDC_STATUS) == TRUE ) {
pstInfo->nError = EPS_PRNERR_CDDVDCONFIG;
- } else {
+ } else if((0x0D00 <= egID && 0x0D05 >= egID) || 0x0E21 == egID){
+ pstInfo->nError = EPS_PRNERR_TRAYCLOSE;
+ } else{
pstInfo->nError = EPS_PRNERR_CDRGUIDEOPEN;
}
break;
@@ -593,11 +579,25 @@ EPS_ERR_CODE serAnalyzeStatus (
case 0x46: pstInfo->nError = EPS_PRNERR_TRAYCLOSE; break;
case 0x47: pstInfo->nError = EPS_PRNERR_INKOUT; break; /* BlackPrint Error */
+ case 0x4C: pstInfo->nError = EPS_PRNERR_PAPEROUT; break;
+ case 0x4D: pstInfo->nError = EPS_PRNERR_CDDVDCONFIG; break;
+ case 0x4E: pstInfo->nError = EPS_PRNERR_FEEDERCLOSE; break;
+ case 0x55: mediaErr = TRUE; break;
+ case 0x56: pstInfo->nError = EPS_PRNERR_INTERRUPT_BY_INKEND; break;
+ case 0x57: pstInfo->nError = EPS_PRNERR_PAPEROUT; break;
+ case 0x5D: pstInfo->nError = EPS_PRNERR_NO_BATTERY; break;
+ case 0x5E: pstInfo->nError = EPS_PRNERR_LOW_BATTERY_FNC; break;
+ case 0x5F: pstInfo->nError = EPS_PRNERR_BATTERY_CHARGING; break;
+ case 0x60: pstInfo->nError = EPS_PRNERR_BATTERY_TEMPERATURE_HIGH;break;
+ case 0x61: pstInfo->nError = EPS_PRNERR_BATTERY_TEMPERATURE_LOW;break;
+ case 0x62: pstInfo->nError = EPS_PRNERR_ANY; break;
+
default:
pstInfo->nError = EPS_PRNERR_GENERAL;
break;
}
break;
+
case 0x04: /* WR */
/* ESC/P-R Lib does not notified the warning to application, */
/* so warning analysis dose not need to be done completely. */
@@ -608,6 +608,7 @@ EPS_ERR_CODE serAnalyzeStatus (
pstInfo->nWarn |= EPS_PRNWARN_INKLOW;
} else if( Parameter[i] >= 0x51 && Parameter[i] <= 0x5A ){
pstInfo->nWarn |= EPS_PRNWARN_DISABLE_CLEAN;
+ } else if( Parameter[i] >= 0x71 && Parameter[i] <= 0x7A ){
/*} else if( Parameter[i] == 0x44 ){ not use
pstInfo->nWarn |= EPS_PRNWARN_COLOR_INKOUT;*/
}
@@ -615,104 +616,28 @@ EPS_ERR_CODE serAnalyzeStatus (
break;
case 0x0F: /* INK */
- Ink = Parameter;
-
- pstInfo->nInkError = EPS_INKERR_NONE;
-
- if (Ink[1] >= 0x40) {
- InkCartridgeType = MI_CARTRIDGE_ONE;
- } else {
- InkCartridgeType = MI_CARTRIDGE_INDEP;
- }
-
- for( pstInfo->nInkNo=0, i=0; i<EPS_INK_NUM; i++ ) {
- pstInfo->nColorType[i] = EPS_COLOR_UNKNOWN;
- pstInfo->nColor[i] = EPS_INK_NOTAVAIL;
-
- if( Ink > Parameter+ParameterByte-Parameter[0] )
- continue;
-
- pstInfo->nInkNo++;
-
- switch( Ink[2] ) {
-
- case 0x00: pstInfo->nColorType[i] = EPS_COLOR_BLACK; break;
- case 0x01: pstInfo->nColorType[i] = EPS_COLOR_CYAN; break;
- case 0x02: pstInfo->nColorType[i] = EPS_COLOR_MAGENTA; break;
- case 0x03: pstInfo->nColorType[i] = EPS_COLOR_YELLOW; break;
- case 0x04: pstInfo->nColorType[i] = EPS_COLOR_LIGHTCYAN; break;
- case 0x05: pstInfo->nColorType[i] = EPS_COLOR_LIGHTMAGENTA; break;
- case 0x06: pstInfo->nColorType[i] = EPS_COLOR_LIGHTYELLOW; break;
- case 0x07: pstInfo->nColorType[i] = EPS_COLOR_DARKYELLOW; break;
- case 0x08: pstInfo->nColorType[i] = EPS_COLOR_LIGHTBLACK; break;
- case 0x09: pstInfo->nColorType[i] = EPS_COLOR_RED; break;
- case 0x0A: pstInfo->nColorType[i] = EPS_COLOR_VIOLET; break;
- case 0x0B: pstInfo->nColorType[i] = EPS_COLOR_CLEAR; break;
- case 0x0C: pstInfo->nColorType[i] = EPS_COLOR_LIGHTLIGHTBLACK; break;
- case 0x0D: pstInfo->nColorType[i] = EPS_COLOR_ORANGE; break;
- case 0x0E: pstInfo->nColorType[i] = EPS_COLOR_GREEN; break;
- default:
- pstInfo->nColorType[i] = EPS_COLOR_UNKNOWN;
- break;
- }
-
- switch( Ink[3] ) {
- case 'w' :
- case 'r' :
- pstInfo->nColor[i] = EPS_INK_FAIL;
- ( pstInfo->nColorType[i]==EPS_COLOR_BLACK ) ?
- (pstInfo->nInkError=EPS_INKERR_CFAILB) : (pstInfo->nInkError=EPS_INKERR_CFAILC);
- break;
- case 'n' :
- pstInfo->nColor[i] = EPS_INK_NOTPRESENT;
- ( pstInfo->nColorType[i]==EPS_COLOR_BLACK ) ?
- (pstInfo->nInkError = EPS_INKERR_CEMPTYB) : (pstInfo->nInkError = EPS_INKERR_CEMPTYC);
- break;
- case 'i' :
- pstInfo->nColor[i] = EPS_INK_NOREAD;
- break;
- default:
- if((Ink[3] >= 0) && (Ink[3] <= 100)) {
-
- pstInfo->nColor[i] = serInkLevelNromalize( Ink[3] );
-
- if( pstInfo->nColor[i] == 0) {
- if( pstInfo->nColorType[i]==EPS_COLOR_BLACK )
- (pstInfo->nInkError = EPS_INKERR_INKENDB);
- else
- (pstInfo->nInkError = EPS_INKERR_INKENDC);
- }
- } else {
- pstInfo->nColor[i] = EPS_INK_FAIL;
- if( pstInfo->nColorType[i]==EPS_COLOR_BLACK )
- (pstInfo->nInkError=EPS_INKERR_CFAILB);
- else
- (pstInfo->nInkError=EPS_INKERR_CFAILC);
- }
- break;
- }
-
+ inkNum = Min((ParameterByte-1) / Parameter[0], EPS_INK_NUM);
+ Ink = Parameter+1;
+
+ for( i=0; i < inkNum; i++ ) {
+ switch( Ink[2] ) {
+ case 'w' :
+ case 'r' :
+ nInkError = EPS_PRNERR_CFAIL;
+ break;
+ case 'n' :
+ nInkError = EPS_PRNERR_CEMPTY;
+ break;
+ case 0:
+ nInkError = EPS_PRNERR_INKOUT;
+ default:
+ break;
+ }
Ink = Ink + Parameter[0];
- }
-
- if((InkCartridgeType == MI_CARTRIDGE_ONE)){
- switch(pstInfo->nInkError) {
- case EPS_INKERR_INKENDB:
- case EPS_INKERR_INKENDC:
- pstInfo->nInkError = EPS_INKERR_INKENDALL;
- break;
- case EPS_INKERR_CFAILB:
- case EPS_INKERR_CFAILC:
- pstInfo->nInkError = EPS_INKERR_CFAILALL;
- break;
- case EPS_INKERR_CEMPTYB:
- case EPS_INKERR_CEMPTYC:
- pstInfo->nInkError = EPS_INKERR_CEMPTYALL;
- break;
- }
- }
- break;
- case 0x13: /* CANCEL REQUEST by Printer cancel botton */
+ }
+ break;
+
+ case 0x13: /* CANCEL REQUEST by Printer cancel botton */
switch((EPS_UINT8)Parameter[0]) {
case 0x81:
pstInfo->nCancel = EPS_CAREQ_CANCEL;
@@ -743,17 +668,76 @@ EPS_ERR_CODE serAnalyzeStatus (
}
break;
+ case 0x35: /* Paper Jam error information */
+ jamErrNum = (EPS_UINT8)Parameter[0];
+ break;
+
+ case 0x3B: /* Media */
+ mediaErrNum = (EPS_UINT8)Parameter[0];
+ break;
+
default:
break;
}
}
+ if( TRUE == mediaErr && EPS_PRNERR_NOERROR == pstInfo->nError){
+ switch( mediaErrNum ){
+ case 0x01: pstInfo->nError = EPS_PRNERR_3DMEDIA_FACE; break;
+ case 0x02: pstInfo->nError = EPS_PRNERR_3DMEDIA_DIRECTION; break;
+ default: pstInfo->nError = EPS_PRNERR_PAPEROUT; break;
+ }
+ } else if ( EPS_PRNERR_PAPERJAM == pstInfo->nError ){
+ if( 0x10 == jamErrNum && (0x0D00 <= egID && 0x0D05 >= egID)){
+ pstInfo->nError = EPS_PRNERR_CDDVDCONFIG;
+ }
+ } else if ( EPS_PRNERR_PAPEROUT == pstInfo->nError ){
+ switch( jamErrNum ){
+ case 0x90:
+ if(0x0D04 == egID){
+ pstInfo->nError = EPS_PRNERR_MANUALFEED_SET_PAPER_NOLCD;
+ } else if(0x0D00 <= egID && 0x0D05 >= egID){
+ pstInfo->nError = EPS_PRNERR_MANUALFEED_SET_PAPER;
+ }
+ break;
+ case 0x91:
+ if(0x0D04 == egID){
+ pstInfo->nError = EPS_PRNERR_MANUALFEED_FAILED_NOLCD;
+ } else if(0x0D00 <= egID && 0x0D05 >= egID){
+ pstInfo->nError = EPS_PRNERR_MANUALFEED_FAILED;
+ }
+ break;
+ case 0x92:
+ if(0x0D04 == egID){
+ pstInfo->nError = EPS_PRNERR_MANUALFEED_EXCESSIVE_NOLCD;
+ } else if(0x0D00 <= egID && 0x0D05 >= egID){
+ pstInfo->nError = EPS_PRNERR_MANUALFEED_EXCESSIVE;
+ }
+ break;
+ case 0xA3:
+ pstInfo->nError = EPS_PRNERR_ROLLPAPER_TOOSHORT;
+ break;
+ default: break;
+ }
+ } else if(EPS_PRNERR_INKOUT == pstInfo->nError && EPS_INKERR_NONE != nInkError ){
+ pstInfo->nError = nInkError;
+ }
+
+ if ( EPS_PRNERR_CDDVDCONFIG == pstInfo->nError ){
+ if(0x0D04 == egID){
+ pstInfo->nError = EPS_PRNERR_CDDVDCONFIG_FEEDBUTTON;
+ } else if (0x0D00 <= egID && 0x0D05 >= egID){
+ pstInfo->nError = EPS_PRNERR_CDDVDCONFIG_STARTBUTTON;
+ }
+ }
+
if( EPS_CAREQ_CANCEL == pstInfo->nCancel ){
EPS_DBGPRINT(("*** Cancel Request (ignore error) ***\n"))
pstInfo->nState = EPS_ST_WAITING;
pstInfo->nError = EPS_PRNERR_NOERROR;
}
+
#if _DEBUG_BIN_STATUS_
SerDebugPrintf(("***** ST = %d\r\n", pstInfo->nState));
SerDebugPrintf(("***** ER = %d\r\n", pstInfo->nError));
@@ -764,1415 +748,471 @@ EPS_ERR_CODE serAnalyzeStatus (
SerDebugPrintf(("***** INK = %d\t%d\r\n", pstInfo->nColorType[i], pstInfo->nColor[i]));
}
#endif
-
- if(InkCartridgeType == MI_CARTRIDGE_ONE) {
- Min = pstInfo->nColor[0];
- for(i = 1; i < pstInfo->nInkNo; i++){
- Min = ( (Min <= pstInfo->nColor[i]) ? Min : pstInfo->nColor[i] );
- }
- for(i = 0; i < pstInfo->nInkNo; i++){
- pstInfo->nColor[i] = Min;
- }
- }
EPS_RETURN( EPS_ERR_NONE );
-
}
-EPS_INT32 serInkLevelNromalize (
-
- EPS_INT32 level
-
-){
- if ( (level >= 75) && (level <= 100)) {
- return 100;
- } else if ((level >= 50) && (level <= 74)) {
- return 75;
- } else if ((level >= 25) && (level <= 49)) {
- return 50;
- } else if ((level >= 4) && (level <= 24)) {
- return 25;
- } else if ((level >= 1) && (level <= 3)) {
- return 1;
- } else if ( level == 0) {
- return 0;
- }
-
- return level;
-}
-
/*******************************************|********************************************/
/* */
-/* Function name: serDelayThread() */
+/* Function name: serGetSerialNo() */
/* */
/* Arguments */
/* --------- */
/* Name: Type: Description: */
-/* milliseconds EPS_UINT32 I: Sleep Period in microseconds */
-/* */
-/* Return value: */
-/* None */
-/* */
-/* Description: */
-/* Wait <milliseconds>. */
-/* If OS sleep function is used, change the unit of sleep time from milliseconds */
-/* to microseconds. */
-/* */
-/*******************************************|********************************************/
-void serDelayThread (
-
- EPS_UINT32 milliseconds,
- EPS_CMN_FUNC* epsCmnFnc
-
-){
-
-#ifdef GCOMSW_EPSON_SLEEP
- if (epsCmnFnc->sleep == serSleep) {
- epsCmnFnc->sleep((EPS_UINT32)milliseconds); /* Ignore return value of sleep func */
- } else{
- epsCmnFnc->sleep(milliseconds * 1000); /* Ignore return value of sleep func */
- }
-#else
- epsCmnFnc->sleep(milliseconds * 1000); /* Ignore return value of sleep func */
-#endif /* GCOMSW_EPSON_SLEEP */
-
-}
-
-/*******************************************|********************************************/
-/* */
-/* Function name: serSleep() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* sleepPeriod EPS_UINT32 I: Sleep Period in milliseconds */
-/* */
-/* Return value: */
-/* EPS_ERR_NONE - Success */
-/* */
-/* Description: */
-/* ESC/P-R Lib original sleep function. */
-/* This function is used when "epsCmnFnc.sleep = NULL". */
-/* */
-/*******************************************|********************************************/
-#ifdef GCOMSW_EPSON_SLEEP
-EPS_ERR_CODE serSleep (
-
- EPS_UINT32 sleepPeriod /* Sleep Period in milliseconds */
-
-){
-
-/*** Declare Variable Local to Routine */
- EPS_INT32 idx; /* General loop/index varaible */
- EPS_INT32 endx;
- struct timeb sleepM;
-
-/*** Initialize Local Variables */
- endx = sleepPeriod*printJob.sleepSteps;
- if (printJob.sleepSteps <= 0) endx = sleepPeriod/(-printJob.sleepSteps);
-
-/*** Sleep for about the requested sleepPeriod */
- for (idx = 1; idx < endx; idx++) {ftime(&sleepM); }
-
-/*** Return to Caller */
- return((EPS_ERR_CODE)EPS_ERR_NONE);
-
-}
-#endif /* GCOMSW_EPSON_SLEEP */
-
-
-/*******************************************|********************************************/
-/* */
-/* Function name: serGetInkError() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* pStatInfo EPS_STATUS_INFO* I: Printer Status Information */
-/* pNotify EPS_INT32* O: Notification Code */
+/* cdBuff EPS_INT8* I: 'cd' command reply */
+/* buflen EPS_INT32 I: 'cd' data length */
+/* serialNo EPS_INT8* O: serial number */
/* */
/* Return value: */
/* EPS_ERR_NONE - Success */
-/* EPS_ERR_OPR_FAIL - Failed to operate */
/* */
/* Description: */
-/* Set notification code about ink error */
+/* parse 'cd' command reply to get serial number string. */
/* */
/*******************************************|********************************************/
-EPS_INT32 serGetInkError (
+EPS_ERR_CODE serGetSerialNo (
- EPS_STATUS_INFO* pStatInfo,
- EPS_INT32* pNotify
+ EPS_INT8* cdBuff,
+ EPS_INT32 buflen,
+ EPS_INT8* serialNo
){
- SerDebugPrintf(("EPS SER : In Get Ink Error\r\n"));
-
- SerDebugPrintf(("EPS SER : In SP CTG %d,%d,%d,%d,%d,%d,%d,%d\r\n",
- pStatInfo->nColor[0],
- pStatInfo->nColor[1],
- pStatInfo->nColor[2],
- pStatInfo->nColor[3],
- pStatInfo->nColor[4],
- pStatInfo->nColor[5],
- pStatInfo->nColor[6],
- pStatInfo->nColor[7]));
-
- switch(pStatInfo->nInkError){
-/*** Ink End */
- case EPS_INKERR_INKENDALL:
- case EPS_INKERR_INKENDB:
- case EPS_INKERR_INKENDC:
- *pNotify = EPS_PRNERR_INKOUT;
- break;
-
-/*** Ink Fail */
- case EPS_INKERR_CFAILALL:
- case EPS_INKERR_CFAILB:
- case EPS_INKERR_CFAILC:
- *pNotify = EPS_PRNERR_CFAIL;
- break;
-
-/*** Ink Empty */
- case EPS_INKERR_CEMPTYALL:
- case EPS_INKERR_CEMPTYB:
- case EPS_INKERR_CEMPTYC:
- *pNotify = EPS_PRNERR_CEMPTY;
- break;
-
- case EPS_INKERR_NONE:
- break;
-
- default:
- return EPS_ERR_OPR_FAIL;
- }
-
- return EPS_ERR_NONE;
-}
-
-
-/*******************************************|********************************************/
-/* */
-/* Function name: _SP_ChangeSpec_UpdatePMReply() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* printer EPS_PRINTER_INN* I/O: Pointer to a printer infomation */
-/* orgPmString EPS_UINT8* I: String of the pm command reply */
-/* */
-/* Return value: */
-/* EPS_ERR_NONE - Success */
-/* EPS_ERR_SP_INVALID_POINTER - Input pointer error */
-/* EPS_ERR_SP_INVALID_HEADER - pm string header error */
-/* EPS_ERR_SP_INVALID_TERMINATOR - pm string terminator error */
-/* EPS_ERR_SP_NO_VALID_FIELD - pm string field error */
-/* */
-/* Description: */
-/* - Invalid formats : Delete */
-/* - Unknown 'S' field : Delete */
-/* - Unknown 'T' field : Replace to PGPP-Premium Glossy Photo Paper(id:0x0b) */
-/* field If PGPP aleady exist its 'S' field then just */
-/* combine the mode property */
-/* - Duplicated 'S' fields : Merge together */
-/* - Duplicated 'T' fields : Merge together and combine each mode properties */
-/* - Only DRAFT mode exist : Add NORMAL mode to its print quality property */
-/* */
-/* NOTE: */
-/* Be sure that the pData is a pointers that a starting address of 512 bytes */
-/* buffer should be assigned or memory acces violation should be occured. */
-/* */
-/*******************************************|********************************************/
-EPS_ERR_CODE _SP_ChangeSpec_UpdatePMReply (
-
- EPS_PRINTER_INN* printer,
- EPS_UINT8* orgPmString,
- EPS_INT32 bufSize
-
-){
-
-/*** Declare Variable Local to Routine */
- EPS_UINT8* pBefore = NULL;
- EPS_UINT8* pAfter = NULL;
- EPS_UINT8* pSrc = NULL;
- EPS_UINT8* pDes = NULL;
- EPS_UINT8 tempPmString[EPS_PM_MAXSIZE]; /* Retrieved PM data from printer */
- EPS_UINT8 paperSize;
- EPS_UINT8 paperType;
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- EPS_UINT8 PmStringForCompare[EPS_PM_MAXSIZE]; /* Retrieved PM data from printer */
-#endif
- static const EPS_UINT8 PM_REPLY_HEADER[EPS_PM_HEADER_LEN] = {
- /* @ B D C <SP> P M <CR> <LF> */
- 0x40, 0x42, 0x44, 0x43, 0x20, 0x50, 0x4D, 0x0D, 0x0A
- };
-
- EPS_INT16 idx;
-
- EPS_LOG_FUNCIN;
-
-/*** Validate input parameters */
- if(orgPmString == NULL) {
- SerDebugPrintf(("_SP_ChangeSpec_UpdatePMReply > EPS_ERR_SP_INVALID_POINTER\r\n"));
- EPS_RETURN( EPS_ERR_SP_INVALID_POINTER );
- }
-
- if(memcmp(orgPmString, PM_REPLY_HEADER, EPS_PM_HEADER_LEN) != 0) {
- SerDebugPrintf(("_SP_ChangeSpec_UpdatePMReply > EPS_ERR_SP_INVALID_HEADER\r\n"));
- EPS_RETURN( EPS_ERR_SP_INVALID_HEADER );
- }
-
- for(idx = EPS_PM_HEADER_LEN; idx <= (EPS_PM_MAXSIZE-EPS_PM_TERMINATOR_LEN); idx++) {
- if(orgPmString[idx]== 0x0D && orgPmString[idx+1] == 0x0A) {
- break;
- }
- }
-
- if(idx > (EPS_PM_MAXSIZE-EPS_PM_TERMINATOR_LEN)) {
- SerDebugPrintf(("_SP_ChangeSpec_UpdatePMReply > EPS_ERR_SP_INVALID_TERMINATOR\r\n"));
- EPS_RETURN( EPS_ERR_SP_INVALID_TERMINATOR );
- }
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT8* p = NULL;
+ EPS_INT32 datalen = 0;
+ EPS_UINT8 formVer = 0;
+
+#define EPS_GET_SERIAL(POS, LEN) \
+ if(datalen >= POS+LEN){ \
+ strncpy(serialNo, p+POS, LEN); \
+ } else{ \
+ ret = EPS_ERR_COMM_ERROR; \
+ }
-/*** Initialize Local Variables */
- memset(tempPmString, 0x00, EPS_PM_MAXSIZE);
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- memset(PmStringForCompare, 0x00, EPS_PM_MAXSIZE);
-#endif
+ EPS_LOG_FUNCIN
- /* Initialize pm data state */
- memset(printer->pmData.pmString, 0x00, EPS_PM_MAXSIZE);
- printer->pmData.state = EPS_PM_STATE_NOT_FILTERED;
-
-/*** Correct PM REPLY following 7 steps */
-/*** ---------------------------------------------------------------------------------- */
-/*** STEP 1 : Replace Built-in resource. Because PM REPLY of the following printers */
-/*** is insufficient, */
-/*** ---------------------------------------------------------------------------------- */
- if( (strcmp(printer->modelName, "E-300" ) == 0) ){
- bufSize = _SP_LoadPMString(EPS_PMS_E300, orgPmString, EPS_PM_MAXSIZE);
-
- } else if( (strcmp(printer->modelName, "E-500" ) == 0) ||
- (strcmp(printer->modelName, "E-700" ) == 0) ) {
- bufSize = _SP_LoadPMString(EPS_PMS_E500, orgPmString, EPS_PM_MAXSIZE);
-
- } else if( (strcmp(printer->modelName, "PictureMate PM 200" ) == 0) ||
- (strcmp(printer->modelName, "PictureMate PM 210" ) == 0) ){
- bufSize = _SP_LoadPMString(EPS_PMS_PM200, orgPmString, EPS_PM_MAXSIZE);
-
- } else if( (strcmp(printer->modelName, "PictureMate PM 240" ) == 0) ||
- (strcmp(printer->modelName, "PictureMate PM 250" ) == 0) ||
- (strcmp(printer->modelName, "PictureMate PM 280" ) == 0) ){
- bufSize = _SP_LoadPMString(EPS_PMS_PM240, orgPmString, EPS_PM_MAXSIZE);
+ /* verify */
+ if( buflen < 14 ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR)
}
- if(bufSize <= 0){
- return bufSize;
- }
-
-
- /* Use work pointers to call each filter functions */
- pBefore = orgPmString + EPS_PM_HEADER_LEN; /* position of first tab 'S' */
- pAfter = tempPmString;
- bufSize -= EPS_PM_HEADER_LEN;
-
-/*** ---------------------------------------------------------------------------------- */
-/*** STEP 2 : Remove <CR><LF> on the way */
-/*** ---------------------------------------------------------------------------------- */
- pSrc = pBefore;
- pDes = pAfter;
-
- DUMP_PMREPLY((pSrc, DUMP_HEX, "< ORIGINAL >"));
-
- _pmValidateRemoveDelimiter(pDes, pSrc, bufSize);
-
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- if(memcmp(pBefore, pAfter, EPS_PM_DATA_LEN) != 0){
- printf("!!!!!!!!! PM reply data modified on STEP 2. !!!!!!!!!\nRemove <CR><LF> on the way\n\n");
+ if( 0 != memcmp(cdBuff+buflen-2, ";\x0C", 2) ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR)
}
-#endif
- /* Update orgPmString */
- memcpy(pBefore, pAfter, EPS_PM_DATA_LEN);
-
- VERBOSE_DUMP_PMREPLY((pDes, DUMP_ASCII, "< STEP 1 PASSED >"));
-
-/*** ---------------------------------------------------------------------------------- */
-/*** STEP 3 : Copy only valid fields to reply buffer and remove unknown 'S' from reply */
-/*** ---------------------------------------------------------------------------------- */
- pSrc = pBefore;
- pDes = pAfter;
- DUMP_PMREPLY((pSrc, DUMP_HEX, "< ORIGINAL >"));
-
- if(_pmValidateRemoveUnknownSfield(pDes, pSrc) == 0) {
- SerDebugPrintf(("_SP_ChangeSpec_UpdatePMReply > EPS_ERR_SP_NO_VALID_FIELD\r\n"));
- EPS_RETURN( EPS_ERR_SP_NO_VALID_FIELD );
- }
-
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- if(memcmp(pBefore, pAfter, EPS_PM_DATA_LEN) != 0){
- printf("!!!!!!!!! PM reply data modified on STEP 3. !!!!!!!!!\n\n\n");
- print_PMREPLY(pAfter, DUMP_HEX, "< Filterd >");
+ p = strstr(cdBuff, "cd:");
+ if( NULL == p || buflen-(p-cdBuff) < 6 ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR)
}
-#endif
- /* Update orgPmString */
- memcpy(pBefore, pAfter, EPS_PM_DATA_LEN);
-
- VERBOSE_DUMP_PMREPLY((pDes, DUMP_ASCII, "< STEP 1 PASSED >"));
-
-/*** ---------------------------------------------------------------------------------- */
-/*** STEP 4 : Correct unknown 'T' fields */
-/*** ---------------------------------------------------------------------------------- */
- pSrc = pBefore;
- pDes = pAfter;
-
- _pmCorrectUnknownTfield(pDes, pSrc);
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- if(memcmp(pBefore, pAfter, EPS_PM_DATA_LEN) != 0){
- printf("!!!!!!!!! PM reply data modified on STEP 4. !!!!!!!!!\n\n\n");
- print_PMREPLY(pAfter, DUMP_HEX, "< Filterd >");
- }
-#endif
+ p += 5; /* skip head */
- /* Update orgPmString */
- memcpy(pBefore, pAfter, EPS_PM_DATA_LEN);
-
- VERBOSE_DUMP_PMREPLY((pDes, DUMP_ASCII, "< STEP 2 PASSED >"));
-
-/*** ---------------------------------------------------------------------------------- */
-/*** STEP 5 : Merge duplicated fields */
-/*** ---------------------------------------------------------------------------------- */
- pSrc = pBefore;
- pDes = pAfter;
-
- _pmCorrectDupulicatedFields(pDes, pSrc);
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- if(memcmp(pBefore, pAfter, EPS_PM_DATA_LEN) != 0){
- printf("!!!!!!!!! PM reply data modified on STEP 5. !!!!!!!!!\n\n\n");
- print_PMREPLY(pAfter, DUMP_HEX, "< Filterd >");
+ if( 0 == strncmp(p, "NA", 2) || 0 == strncmp(p, "BUSY", 4)){
+ EPS_RETURN( EPS_ERR_COMM_ERROR)
}
-#endif
-
- /* Update orgPmString */
- memcpy(pBefore, pAfter, EPS_PM_DATA_LEN);
-
- VERBOSE_DUMP_PMREPLY((pDes, DUMP_ASCII, "< STEP 3 PASSED >"));
-
- /* Now, Service Pack retains filtered data its original quality properties */
- /* within the inner buffer g_PMinfo.data */
- /* This data would be referenced whenever it is required to compare its originality */
- DUMP_PMREPLY((orgPmString, DUMP_ASCII, \
- "< FILTERED (Retained within SP-same printer's caps) >"));
-
-
-/*** ---------------------------------------------------------------------------------- */
-/*** STEP 6 : Delete the paper type "CD/DVD label" from the pm string when "Stylus */
-/*** Photo R380" or "Stylus Photo RX580" is used. */
-/*** ---------------------------------------------------------------------------------- */
- if ((strcmp(printer->modelName, "Stylus Photo R380" ) == 0) ||
- (strcmp(printer->modelName, "Stylus Photo RX580") == 0) ) {
-
- pSrc = pBefore;
- pDes = pAfter;
- paperSize = 0xFF;
- paperType = 0xFF;
-
- while (*pSrc == 'S') {
- paperSize = *(pSrc + 1); /* Save the media size */
-
- *pDes++ = *pSrc++; /* set 'S' */
- *pDes++ = *pSrc++; /* set the meida size */
-
- while (*pSrc == 'T') {
- paperType = *(pSrc + 1); /* Save the media type */
-
- if ((paperSize == EPS_MSID_LETTER) && (paperType == EPS_MTID_CDDVD)) {
- pSrc += 4; /* Move to next 'T' */
- } else{
- *pDes++ = *pSrc++; /* set 'T' */
- *pDes++ = *pSrc++; /* set the media type */
- *pDes++ = *pSrc++; /* set the printing mode info */
- *pDes++ = *pSrc++; /* set '/' */
- }
- }
- if (*pSrc == '/') {
- *pDes++ = *pSrc++; /* set '/' */
- }
-
- /* check for string termination */
- if ((*pSrc == 0xD) && (*(pSrc+1) == 0xA)) {
- *pDes++ = *pSrc++;
- *pDes++ = *pSrc++;
- break;
- }
- }
-
- /* Update orgPmString */
- memcpy(pBefore, pAfter, EPS_PM_DATA_LEN);
- }
-/*** ---------------------------------------------------------------------------------- */
-/*** STEP 7 : Adjust quality properties to the formal in order to return to the driver. */
-/*** it dose not change the filtered data through previous steps retained */
-/*** within Service Pack. but just change the buffer asigned as parameter. */
-/*** (in this case orgPmString) */
-/*** after duplicating the filtered data to it. */
-/*** ---------------------------------------------------------------------------------- */
- /* set filterd value "printer->pmData.pmString" */
- memset(printer->pmData.pmString, 0x00, EPS_PM_MAXSIZE);
- memcpy(printer->pmData.pmString, orgPmString, EPS_PM_MAXSIZE);
-
- printer->pmData.state = EPS_PM_STATE_FILTERED;
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- memcpy(PmStringForCompare, orgPmString, EPS_PM_DATA_LEN);
-#endif
+ datalen = (EPS_INT32)*p + ((EPS_INT32)*(p+1) << 8);
+ p += 2; /* skip lenght field */
- /* If Draft Quality is only supported, add Normal Quality */
- _pmAdjustQuality(orgPmString);
-#if _VALIDATE_SUPPORTED_MEDIA_DATA_
- if(memcmp(PmStringForCompare, orgPmString, EPS_PM_DATA_LEN) != 0){
- printf("!!!!!!!!! PM reply data modified on STEP 7. !!!!!!!!!\n\n\n");
- print_PMREPLY(PmStringForCompare + EPS_PM_HEADER_LEN, DUMP_HEX, "< Origin >");
- print_PMREPLY(orgPmString + EPS_PM_HEADER_LEN, DUMP_HEX, "< Filterd >");
+ /* get version */
+ formVer = 0x07;
+ if( buflen-(EPS_INT32)(p-cdBuff) > datalen+2 && /* 2 = ";\x0C" */
+ *(cdBuff+buflen-4) == '/'){
+ formVer = *(cdBuff+buflen-3);
}
-#endif
- DUMP_PMREPLY((orgPmString+EPS_PM_HEADER_LEN, DUMP_ASCII, \
- "< FILTERED (Returned data to the driver-adjusted quality properties) >"));
-
-/*** Return to caller */
- EPS_RETURN( EPS_ERR_NONE );
-}
-
-
-/*******************************************|********************************************/
-/* */
-/* Function name: _SP_ChangeSpec_DraftOnly() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* printer EPS_PRINTER_INN* I/O: Pointer to a printer infomation */
-/* jobAtter EPS_JOB_ATTRIB* I: Data structure containing page attribut settings */
-/* */
-/* Return value: */
-/* EPS_ERR_NONE - Success */
-/* */
-/* Description: */
-/* If the quality mode which is not supported by printer is assigned, replace it */
-/* to printer's support mode. */
-/* */
-/*******************************************|********************************************/
-EPS_ERR_CODE _SP_ChangeSpec_DraftOnly (
-
- EPS_PRINTER_INN* printer,
- EPS_JOB_ATTRIB* jobAtter /* Print Attributes for this Job */
-
-){
-/*** Declare Variable Local to Routine */
- EPS_UINT8 mediaSizeID;
- EPS_UINT8 mediaTypeID;
- EPS_UINT8* pPMinfo;
- EPS_UINT8* pS_begin;
- EPS_UINT8* pS_end;
- EPS_UINT8* pTfield;
- EPS_UINT8 quality[3]; /* Q_DRAFT / Q_NORMAL / Q_HIGH */
-
- EPS_LOG_FUNCIN;
-
-/*** Validate input parameters */
- if(printer->pmData.state != EPS_PM_STATE_FILTERED) {
- SerDebugPrintf(("ChangeSpec_DraftOnly : PM info not initialized\r\n"));
- /* it is not able to hadle this situation so do nothing */
- EPS_RETURN( EPS_ERR_NONE );
- }
-
-/*** Initialize Global/Local Variables */
- mediaSizeID = (EPS_UINT8)jobAtter->mediaSizeIdx;
- mediaTypeID = (EPS_UINT8)jobAtter->mediaTypeIdx;
- pPMinfo = NULL;
- pS_begin = NULL;
- pS_end = NULL;
- pTfield = NULL;
- memset(quality, 0, sizeof(quality));
-
-/*** Change quality */
- /* Refer the data retained within Service Pack. */
- /* "printer->pmData.pmString" has the header. */
- pPMinfo = (EPS_UINT8*)(printer->pmData.pmString + EPS_PM_HEADER_LEN);
-
- /* S field start postion */
- if(_pmFindSfield(mediaSizeID, pPMinfo, &pS_begin, &pS_end) < 0) {
- SerDebugPrintf(("ChangeSpec_DraftOnly : cannot find mediaSizeID(%d)\r\n", mediaSizeID));
- /* it is not able to hadle this situation so do nothing */
- EPS_RETURN( EPS_ERR_NONE );
- };
-
- VERBOSE_DUMP_PMREPLY((pS_begin, DUMP_S_TAG_ONLY,
- "< ChangeSpec_DraftOnly : retained S field info >"));
-
- /* Fetch the T field */
- if((pTfield = _pmScanTfield(mediaTypeID, pS_begin)) == NULL) {
- SerDebugPrintf(("ChangeSpec_DraftOnly : cannot find mediaTypeID(%d)\r\n", mediaTypeID));
- /* it is not able to hadle this situation so do nothing */
- EPS_RETURN( EPS_ERR_NONE );
- }
-
- /* Quality should be assigned to the only supported mode */
- verbose_dbprint((" >> adjusted PrintQuality : %d -> ", jobAtter->printQuality));
-
- if(!((*(pTfield+2) & 0x07) & /* Printer's support mode actually */
- (jobAtter->printQuality))) { /* Upper layer(driver) assigned mode */
-
- /* The quality mode which is not supported by printer is assigned */
- /* Replace it to printer's support mode */
- switch(*(pTfield+2) & 0x07) {
- case 0x01: /* 0 0 1 : Draft only */
- quality[Q_DRAFT] = EPS_MQID_DRAFT;
- quality[Q_NORMAL] = EPS_MQID_DRAFT;
- quality[Q_HIGH] = EPS_MQID_DRAFT;
- break;
- case 0x02: /* 0 1 0 : Normal only */
- quality[Q_DRAFT] = EPS_MQID_NORMAL;
- quality[Q_NORMAL] = EPS_MQID_NORMAL;
- quality[Q_HIGH] = EPS_MQID_NORMAL;
- break;
- case 0x04: /* 1 0 0 : High only */
- quality[Q_DRAFT] = EPS_MQID_HIGH;
- quality[Q_NORMAL] = EPS_MQID_HIGH;
- quality[Q_HIGH] = EPS_MQID_HIGH;
- break;
- case 0x03: /* 0 1 1 : Normal and Draft */
- quality[Q_DRAFT] = EPS_MQID_DRAFT;
- quality[Q_NORMAL] = EPS_MQID_NORMAL;
- quality[Q_HIGH] = EPS_MQID_NORMAL;
- break;
- case 0x05: /* 1 0 1 : High and Draft */
- quality[Q_DRAFT] = EPS_MQID_DRAFT;
- quality[Q_NORMAL] = EPS_MQID_HIGH;
- quality[Q_HIGH] = EPS_MQID_HIGH;
- break;
- case 0x06: /* 1 1 0 : High and Normal */
- quality[Q_DRAFT] = EPS_MQID_NORMAL;
- quality[Q_NORMAL] = EPS_MQID_NORMAL;
- quality[Q_HIGH] = EPS_MQID_HIGH;
- break;
- case 0x07: /* 1 1 1 : Anything possible */
- break;
- default:
- break;
- }
-
- /* Now, the value of quality array of index which is same as PrintQuality is valid */
- switch(jobAtter->printQuality) {
- case EPS_MQID_DRAFT:
- jobAtter->printQuality= quality[Q_DRAFT];
- break;
- case EPS_MQID_NORMAL:
- jobAtter->printQuality= quality[Q_NORMAL];
- break;
- case EPS_MQID_HIGH:
- jobAtter->printQuality= quality[Q_HIGH];
- break;
- }
- }
+ /* get serial number */
+ /* serialNo buffer size is EPS_ADDR_BUFFSIZE */
+ switch(formVer){
+ case 0x07:
+ /* EPS_GET_SERIAL(31, 18) not product serial */
+ break;
+ case 0x08:
+ case 0x10:
+ EPS_GET_SERIAL(31, 10)
+ break;
+
+ case 0x11:
+ default:
+ EPS_GET_SERIAL(46, 10)
+ break;
+ }
- verbose_dbprint(("%d\r\n", jobAtter->printQuality));
+ EPS_DBGPRINT(("Ser : %s\n", serialNo));
- EPS_RETURN( EPS_ERR_NONE );
+ EPS_RETURN( ret )
}
-/*******************************************|********************************************/
-/* */
-/* Function name: serAppendMedia() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* pMedia EPS_SUPPORTED_MEDIA* I/O: supported media structuer */
-/* */
-/* Return value: */
-/* none */
-/* */
-/* Description: */
-/* Append Media attribute from PM reply info. */
-/* */
-/*******************************************|********************************************/
-void serAppendMedia (
+EPS_ERR_CODE serGetSerialNoFormST (
- EPS_SUPPORTED_MEDIA* pMedia
+ EPS_INT8* Status,
+ EPS_INT8* serialNo,
+ EPS_INT32 fieldSize
){
- EPS_INT32 idxSize, idxType;
- EPS_BOOL foundCD = FALSE;
+ EPS_UINT8* Field;
+ EPS_UINT8* EndField;
+
+ EPS_UINT8 Header;
+ EPS_UINT8 ParameterByte;
EPS_LOG_FUNCIN;
- for(idxSize = 0; idxSize < pMedia->numSizes; idxSize++){
- /*** Append "CD/DVD Label" rayout to plain, CDDVD ***/
- for(idxType = 0; idxType < pMedia->sizeList[idxSize].numTypes; idxType++){
-
- if( EPS_IS_CDDVD( pMedia->sizeList[idxSize].typeList[idxType].mediaTypeID ) ){
- /* Set "CD/DVD Label" rayout to CDDVD */
- pMedia->sizeList[idxSize].typeList[idxType].layout = EPS_MLID_CDLABEL;
-
- /* paperSource is only CD tray */
- pMedia->sizeList[idxSize].typeList[idxType].paperSource = EPS_MPID_CDTRAY;
-
- foundCD = TRUE;
- } else if(EPS_MTID_MINIPHOTO == pMedia->sizeList[idxSize].typeList[idxType].mediaTypeID){
- /* Append "16 Division" rayout to Photo Stickers */
- pMedia->sizeList[idxSize].typeList[idxType].layout |= EPS_MLID_DIVIDE16;
- }
- }
-
- if(foundCD){
- for(idxType = 0; idxType < pMedia->sizeList[idxSize].numTypes; idxType++){
- if(EPS_MTID_PLAIN == pMedia->sizeList[idxSize].typeList[idxType].mediaTypeID ){
- /* Append "CD/DVD Label" rayout to plain */
- pMedia->sizeList[idxSize].typeList[idxType].layout |= EPS_MLID_CDLABEL;
- break;
- }
- }
- foundCD = FALSE;
- }
- }
-
- EPS_RETURN_VOID
-}
+ memset(serialNo, 0, fieldSize);
+ if((Field = (EPS_UINT8*)strstr(Status,"ST2")) == NULL ){
+ SerDebugPrintf(("EPS SER: Get Stat -> ST not found [%s]\r\n",Status));
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
-/*-------------------- Local Functions ---------------------*/
-/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-
-/*******************************************|********************************************/
-/* */
-/* Function name: _SP_LoadPMString() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* resouceID EPS_UINT32 I: PM resouce ID */
-/* pString EPS_INT8* O: PM string */
-/* bufSize EPS_INT32 I: pString size */
-/* */
-/* Return value: */
-/* EPS_INT32 buffer size or error */
-/* */
-/* Description: */
-/* Load special PM string. Because a part of model is insufficient PM reply info. */
-/* */
-/*******************************************|********************************************/
-EPS_INT32 _SP_LoadPMString (
-
- EPS_UINT32 resouceID,
- EPS_UINT8* pString,
- EPS_UINT32 bufSize
-
-){
- EPS_UINT32 i = 0;
+ Field = Field + 5;
+ EndField = Field + (2+(*Field)+ ((*(Field+1))*256) );
+ Field = Field + 2;
+
+ while ( Field < EndField ) {
+ Header = (EPS_UINT8) Field[0];
+ ParameterByte = (EPS_UINT8) Field[1];
- for (i = 0; i < EPS_SPM_STRINGS; i++){
- if (spPMStrTbl[i].id == resouceID){
- if(bufSize < spPMStrTbl[i].len){
- return EPS_ERR_OPR_FAIL;
+ if( 0x40 == Header ) {
+ if( fieldSize > ParameterByte){
+ memcpy(serialNo, Field+2, Min(ParameterByte, fieldSize-1));
+ EPS_RETURN( EPS_ERR_NONE );
}
- memcpy(pString, spPMStrTbl[i].res, spPMStrTbl[i].len);
- return spPMStrTbl[i].len;
- }
- }
-
- return EPS_ERR_OPR_FAIL;
-}
-
-
-/*******************************************|********************************************/
-/* */
-/* Function name: _pmFindSfield() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* id EPS_UINT8 I: Media Size ID */
-/* pSrc EPS_UINT8* I: pm String */
-/* pStart EPS_UINT8** O: Start Pointer of 'S' fields */
-/* pEnd EPS_UINT8** O: End Pointer of 'S' fields */
-/* */
-/* Return value: */
-/* Length of founded 'S' fields - Success */
-/* -1 - There is NOT the Media Size ID in pm string */
-/* */
-/* Description: */
-/* Find a 'S' field that includes the <id> in <pSrc> and save its starting('S') */
-/* and ending pointer('/') to <pStart> and <pEnd>. */
-/* <pSrc> should be a complete PM REPLY format that start with 'S' and terminate */
-/* at "0x0D 0x0A". */
-/* */
-/*******************************************|********************************************/
-static EPS_INT32 _pmFindSfield (
-
- EPS_UINT8 id,
- EPS_UINT8* pSrc,
- EPS_UINT8** pStart,
- EPS_UINT8** pEnd
-
-){
- EPS_LOG_FUNCIN;
-
- while (*pSrc != 0xD || *(pSrc+1) != 0xA) {
-
- *pStart = NULL;
- *pEnd = NULL;
-
- /* find 'S' */
- while(*pSrc == 'S') {
- if(id == *(pSrc+1)) {
- *pStart = pSrc;
- }
-
- pSrc += 2;
-
- while(*pSrc == 'T') {
- pSrc += 4;
- }
-
- /* Found id */
- if(*pStart != NULL) {
- *pEnd = pSrc;
- EPS_RETURN( (EPS_INT32)(*pEnd - *pStart)+1 );
- }
-
- /* next 'S' */
- pSrc++;
- }
-
- if(*pSrc == 'M' || *pSrc == 'R'){
- pSrc += 6;
+ break;
}
+
+ Field = Field + 2 + ParameterByte;
}
- EPS_RETURN( (-1) );
+ EPS_RETURN( EPS_ERR_OPR_FAIL );
}
/*******************************************|********************************************/
/* */
-/* Function name: _pmScanTfield() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* id EPS_UINT8 Media Type ID */
-/* pSfield EPS_UINT8* Pointer to 'S' field */
-/* */
-/* Return value: */
-/* Pointer to 'T' on the pSfield - Success */
-/* NULL - There is NOT 'T' in the pSfield */
-/* */
-/* Description: */
-/* Find 'T' field that includs the <id>. */
-/* */
-/*******************************************|********************************************/
-static EPS_UINT8* _pmScanTfield (
-
- EPS_UINT8 id,
- EPS_UINT8* pSfield
-
-){
- EPS_UINT8* pScan = pSfield;
- EPS_UINT8* pT = NULL;
-
- if(*pScan == 'S') {
- pScan += 2;
-
- while(*pScan == 'T') {
- if(id == *(pScan+1)) {
- pT = pScan;
- break;
- }
-
- pScan += 4;
- }
- }
-
- return pT;
-
-}
-
-/*******************************************|********************************************/
-/* */
-/* Function name: _pmAppendTfield() */
+/* Function name: serGetSupplyInfo() */
/* */
/* Arguments */
/* --------- */
/* Name: Type: Description: */
-/* pT EPS_UINT8* I: Pointer to 'T' field */
-/* pDes EPS_UINT8* O: Pointer to 'S' field */
+/* Status EPS_INT8* I: 'st' command reply */
+/* info EPS_SETTING_INFO* O: serial number */
/* */
/* Return value: */
-/* 4 - Success (Return increased bytes) */
-/* -1 - Failure */
+/* EPS_ERR_NONE - Success */
/* */
/* Description: */
-/* Append 'T' field to <pDes> if same field dose not exsit, but same one aleady */
-/* exsits just combine mode properdy. */
-/* <pDes> should have a complete 'S' field consist of 'S' and '/' and pT should */
-/* have a 'T' field of 4 bytes starts with 'T'. */
-/* This function returns the increased bytes so that caller change the last */
-/* position or (-1) to indicate nothing changed. */
+/* parse 'st' command reply to get paper setting status. */
/* */
/*******************************************|********************************************/
-static EPS_INT16 _pmAppendTfield (
+EPS_ERR_CODE serGetSupplyInfo (
- EPS_UINT8* pT,
- EPS_UINT8* pDes
+ EPS_UINT8* Status,
+ EPS_SUPPLY_INFO* info
){
- EPS_UINT8 t_id = *(pT+1);
- EPS_INT16 t_exist = 0;
-
- if(*pDes == 'S') {
-
- pDes += 2; /* move to first 'T' */
-
- while(*pDes == 'T') {
-
- /* same id exist */
- if(t_id == *(pDes+1)) {
- /* Just combine mode property */
- *(pDes+2) |= *(pT+2);
-
- t_exist = 1;
- break;
- }
+ EPS_UINT8* Field;
+ EPS_UINT8* EndField;
+
+ EPS_UINT8 Header;
+ EPS_UINT8 ParameterByte;
+ EPS_UINT8 formatVer;
+ EPS_UINT8* param;
+ EPS_INT32 unifiedCartridge[EPS_INK_NUM];
+ EPS_INT32 inkWarn[EPS_INK_NUM];
+ EPS_INT32 i;
- /* next 'T' */
- pDes += 4;
- }
+#define EPS_PISS_SIZE (9)
- /* samd id field dose not exist */
- /* Append new 'T' fields */
- if(t_exist == 0) {
- memcpy(pDes, pT, 4);
- pDes += 4;
- *pDes = '/';
+ EPS_LOG_FUNCIN;
- return 4; /* size of 'T' field */
- }
+ memset(info, 0, sizeof(EPS_SUPPLY_INFO));
+ for(i = 0; i < EPS_INK_NUM; i++){
+ unifiedCartridge[i] = -1;
+ inkWarn[i] = EPS_INK_ST_NORMAL;
+ }
- /* type id aleady exist then do not anything */
+ if((Field = (EPS_UINT8*)strstr((EPS_INT8*)Status, "ST2")) == NULL ){
+ SerDebugPrintf(("EPS SER: Get Stat -> ST not found [%s]\r\n",Status));
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
}
- return (-1);
-
-}
-
-/*******************************************|********************************************/
-/* */
-/* Function name: _pmValidateRemoveDelimiter() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* pDes EPS_UINT8* O: Pointer to validated pm string */
-/* pSrc EPS_UINT8* I: Pointer to original pm string */
-/* */
-/* Return value: */
-/* The number of valid fields */
-/* */
-/* Description: */
-/* Copy valid fields to reply buffer only. */
-/* Remove <CR><LF> on the way. */
-/* */
-/*******************************************|********************************************/
-static void _pmValidateRemoveDelimiter (
-
- EPS_UINT8* pDes,
- EPS_UINT8* pSrc,
- EPS_INT32 bufSize
-
-){
-
- EPS_UINT8* pEOF = pSrc + bufSize;
+ Field = Field + 5;
+ EndField = Field + (2+(*Field)+ ((*(Field+1))*256) );
+ Field = Field + 2;
+
+ info->ink.number = -1;
+ info->paperSource.number = -1;
+ info->powerSource.type = EPS_POWER_SOUECE_NOT_SUPPORTED;
- EPS_LOG_FUNCIN;
+ while ( Field < EndField ) {
+ Header = (EPS_UINT8) Field[0];
+ ParameterByte = (EPS_UINT8) Field[1];
+ param = Field + 2;
+ Field = Field + 2 + ParameterByte;
- while (pSrc < pEOF) {
+ switch( Header ) {
+ case 0x04: /* WR */
+ for(i = 0; i < ParameterByte; i++){
+ if( param[i] >= 0x10 && param[i] <= 0x1A ){
+ /* Ink Low Warning */
+ inkWarn[ param[i]-0x10 ] = EPS_INK_ST_LOW;
+ } else if( param[i] >= 0x51 && param[i] <= 0x5A ){
+ inkWarn[ param[i]-0x51 ] = EPS_INK_ST_LOW;
+ } else if( param[i] >= 0x71 && param[i] <= 0x7A ){
+ inkWarn[ param[i]-0x71 ] = EPS_INK_ST_LOW;
+ }
+ }
+ break;
- if(*pSrc == 'S') {
- memcpy(pDes, pSrc, 2);
- pSrc += 2;
- pDes += 2;
+ case 0x0F: /* INK */
+ param = EPS_PARSE_CARTRIDGE(ParameterByte, param, &info->ink, unifiedCartridge);
+ break;
- while(*pSrc == 'T') {
- memcpy(pDes, pSrc, 3);
- pSrc += 3;
- pDes += 3;
+ case 0x3F: /* Paper Setting */
+ formatVer = *param;
+ if( 1 == formatVer ) {
+ info->paperSource.number = Min((ParameterByte-1)/EPS_PISS_SIZE, EPS_PAPERSOURCE_NUM);
+ param++;
+ for(i = 0; i < info->paperSource.number; i++){
+ info->paperSource.id[i] = pptops(param);
+ info->paperSource.mediaTypeID[i] = *(param + 2);
+ info->paperSource.mediaSizeID[i] = *(param + 3);
+ param += EPS_PISS_SIZE;
+ }
+ }
+ break;
- if(*pSrc == '/') {
- *pDes++ = *pSrc++;
- }
- }
-
- if(*pSrc == '/') {
- *pDes++ = *pSrc++;
- }
-
- } else if(*pSrc == 'M' || *pSrc == 'R'){
- /* Jpeg size limit */
- if( *(pSrc + 5) == '/' ){
- memcpy(pDes, pSrc, 6 );
- pSrc += 6;
- pDes += 6;
+ case 0x22: /* Power Supply */
+ if( (5 == ParameterByte) && (0x00 == *(param+4)) ){ /* Genuine */
+ switch(*param){
+ case 0x00: info->powerSource.type = EPS_POWER_SOUECE_AC; break;
+ case 0x01: info->powerSource.type = EPS_POWER_SOUECE_BATTERY; break;
+ default: info->powerSource.type = EPS_POWER_SOUECE_UNKNOWN; break;
+ }
+ switch(*(param+2)){
+ case 0x01: info->powerSource.chargeState = EPS_CHARGE_STATE_CHARGING; break;
+ default:
+ case 0x00: info->powerSource.chargeState = EPS_CHARGE_STATE_NONE; break;
+ }
+ if((*(param+3) >= 0) && (*(param+3) <= 100)) {
+ info->powerSource.remaining = *(param+3);
+ } else{
+ info->powerSource.remaining = 0;
+ }
+ } else{
+ info->powerSource.type = EPS_POWER_SOUECE_UNKNOWN;
+ info->powerSource.chargeState = EPS_CHARGE_STATE_NONE;
+ info->powerSource.remaining = 0;
}
- } else if(*pSrc == 0xD || *(pSrc+1) == 0xA){
- /* Terminater skip */
- pSrc += 2;
- } else{
- /* unknown field */
- pSrc++;
+ break;
}
}
- /* set truth terminater */
- *pDes++ = 0x0d; /* 0xD */
- *pDes = 0x0a; /* 0xA */
+ {
+ EPS_INT32 warnIdx = 0;
+ for(i = 0; i < info->ink.number; i++){
+ if(EPS_INK_ST_NORMAL == info->ink.status[i]){
+ if( EPS_INK_ST_NORMAL != inkWarn[warnIdx] ){
+ info->ink.status[i] = inkWarn[warnIdx];
+ }
+ }
+ if( i < info->ink.number-1 &&
+ unifiedCartridge[i] != unifiedCartridge[i+1]){ /* Cartridge transition */
+ warnIdx++;
+ }
+ }
+ }
- EPS_RETURN_VOID;
+ EPS_RETURN( EPS_ERR_NONE );
}
-
-/*******************************************|********************************************/
-/* */
-/* Function name: _pmValidateRemoveUnknownSfield() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* pDes EPS_UINT8* O: Pointer to validated pm string */
-/* pSrc EPS_UINT8* I: Pointer to original pm string */
-/* */
-/* Return value: */
-/* The number of valid fields */
-/* */
-/* Description: */
-/* Copy valid fields to reply buffer only. */
-/* Remove unknown 'S' field. */
-/* Minimum conditons for valid PM REPLY are */
-/* - it must have a complete 'S' field more than one ( 'S' ~ '/'). */
-/* - it must end with 0xD and 0xA. */
-/* */
-/*******************************************|********************************************/
-static EPS_INT16 _pmValidateRemoveUnknownSfield (
-
- EPS_UINT8* pDes,
- EPS_UINT8* pSrc
-
+#ifndef GCOMSW_EXTENTION
+EPS_UINT8* parseCartridge(
+
+ EPS_UINT8 ParameterByte,
+ EPS_UINT8* param,
+ EPS_INK_INFO* ink,
+ EPS_INT32 cartridges[]
+
){
+ EPS_UINT8 blockSize;
+ EPS_INT32 i;
- EPS_UINT8* pPrev = NULL; /* save previous pointer */
- EPS_UINT8* pS = NULL; /* valid field's starting position */
- EPS_UINT8* pE = NULL; /* valid field's ending postion */
-
- EPS_INT16 valid = 0; /* flag for indicating 'S' field's validation */
- EPS_INT16 t_cnt = 0; /* count valid 'T' fields */
- EPS_UINT16 s_idx = 0; /* index of epsMediaSize */
-
- EPS_INT16 num_valid_fields = 0; /* value for returning */
-
- EPS_LOG_FUNCIN;
-
-#ifdef _TEST_PM_STEP_1 /* Change first 'S' field's id to unknown id such as 0xFF */
- *(pSrc+1) = 0xFF;
-#endif
-
- while (*pSrc != 0xD || *(pSrc+1) != 0xA) {
- pPrev = pSrc;
-
- pS = NULL;
- pE = NULL;
- valid = 0;
- t_cnt = 0;
- s_idx = 0;
-
- if(*pSrc == 'S') {
- pS = pSrc;
- pSrc += 2;
+ blockSize = *param;
+ ink->number = Min((ParameterByte-1) / blockSize, EPS_INK_NUM);
- while(*pSrc == 'T') {
- pSrc += 3;
+ param++;
- if(*pSrc == '/') {
- pSrc++;
- t_cnt++;
- }
- }
-
- if(t_cnt && *pSrc == '/') {
- pE = pSrc;
- }
-
- } else if(*pSrc == 'M' || *pSrc == 'R'){
- /* Jpeg size limit */
- if( *(pSrc + 5) == '/' ){
- memcpy(pDes, pSrc, 6 );
- pDes += 6;
- pSrc += 6;
- continue;
- }
+ for( i=0; i < ink->number; i++ ) {
+ cartridges[i] = *param - 0x40; /* Positive number is unified cartridge index */
+ if( cartridges[i] >= EPS_INK_NUM ){
+ cartridges[i] = -1;
}
-
- /* Copy valid and support 'S' fields only */
- /* Valid means size id should be find in its table */
- /* and 'T' field exist at least more than one */
- /* Unknown 'S' field should be removed */
- if(pS && pE) {
- for(s_idx = 0; s_idx < EPS_NUM_MEDIA_SIZES; s_idx++) {
- if(epsMediaSize[s_idx].id == *(pS+1)) {
- memcpy(pDes, pS, (EPS_UINT32)((pE-pS)+1) );
- pDes += (pE-pS)+1;
- valid = 1;
-
- /* now increase num of valid fields */
- num_valid_fields++;
-
- break;
- }
- }
+
+ switch( *(param+1) ) {
+ case 0x00: ink->colors[i] = EPS_COLOR_BLACK; break;
+ case 0x01: ink->colors[i] = EPS_COLOR_CYAN; break;
+ case 0x02: ink->colors[i] = EPS_COLOR_MAGENTA; break;
+ case 0x03: ink->colors[i] = EPS_COLOR_YELLOW; break;
+ case 0x04: ink->colors[i] = EPS_COLOR_LIGHTCYAN; break;
+ case 0x05: ink->colors[i] = EPS_COLOR_LIGHTMAGENTA; break;
+ case 0x06: ink->colors[i] = EPS_COLOR_LIGHTYELLOW; break;
+ case 0x07: ink->colors[i] = EPS_COLOR_DARKYELLOW; break;
+ case 0x08: ink->colors[i] = EPS_COLOR_LIGHTBLACK; break;
+ case 0x09: ink->colors[i] = EPS_COLOR_RED; break;
+ case 0x0A: ink->colors[i] = EPS_COLOR_VIOLET; break;
+ case 0x0B: ink->colors[i] = EPS_COLOR_CLEAR; break;
+ case 0x0C: ink->colors[i] = EPS_COLOR_LIGHTLIGHTBLACK; break;
+ case 0x0D: ink->colors[i] = EPS_COLOR_ORANGE; break;
+ case 0x0E: ink->colors[i] = EPS_COLOR_GREEN; break;
+ case 0x0F: ink->colors[i] = EPS_COLOR_WHITE; break;
+ case 0x40: ink->colors[i] = EPS_COLOR_COMPOSITE; break;
+ default:
+ ink->colors[i] = EPS_COLOR_UNKNOWN;
+ break;
}
+ switch( *param ) {
+ case 0x0B: ink->colors[i] = EPS_COLOR_MATTEBLACK; break;
+ default: break;
+ }
- /* Restore work buffer pos to the previous */
- /* cause fail to get a valid fields */
- if(valid == 0) {
- pSrc = pPrev;
+ switch( *(param+2) ) {
+ case 'w' :
+ case 'r' :
+ ink->status[i] = EPS_INK_ST_FAIL;
+ break;
+ case 'n' :
+ ink->status[i] = EPS_INK_ST_NOTPRESENT;
+ break;
+ case 'i' :
+ ink->status[i] = EPS_INK_ST_NOREAD;
+ break;
+ case 'g' :
+ ink->status[i] = EPS_INK_ST_NOTAVAIL;
+ break;
+ case 0:
+ ink->status[i] = EPS_INK_ST_END;
+ default:
+ break;
}
+ ink->remaining[i] = EPS_INK_OBSOLETE;
- pSrc++;
+ param += blockSize;
}
- *pDes++ = *pSrc++; /* 0xD */
- *pDes++ = *pSrc; /* 0xA */
-
- EPS_RETURN( num_valid_fields );
-
+ return param;
}
-
-
-/*******************************************|********************************************/
-/* */
-/* Function name: _pmCorrectUnknownTfield() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* pDes EPS_UINT8* O: Pointer to validated pm string */
-/* pSrc EPS_UINT8* I: Pointer to original pm string */
-/* */
-/* Return value: */
-/* None */
-/* */
-/* Description: */
-/* Change an unknown 'T' field to PGPP's in case that PGPP dose not exist in */
-/* 'S' field. If aleady PGPP exist delete it. */
-/* */
-/*******************************************|********************************************/
-static void _pmCorrectUnknownTfield (
-
- EPS_UINT8* pDes,
- EPS_UINT8* pSrc
-
-){
-
- static const EPS_UINT8 PGPP_FIELD [ ] = { 0x54, 0x0B, 0x87, 0x2F };
-
- EPS_INT16 PGPP = 0; /* Premium Glossy Photo Paper (type id : 0x0b) */
- EPS_UINT16 t_idx = 0; /* Index of table defined Support 'T' id table */
- EPS_UINT8 * pScan = NULL; /* word pointer for scanning id */
-
- EPS_LOG_FUNCIN;
-
-#ifdef _TEST_PM_STEP_2 /* Change 'T' field's id to unknown id such as 0xFF */
- *(pSrc+3) = 0xFF;
#endif
- while (*pSrc != 0xD || *(pSrc+1) != 0xA) {
- /* reset PGPP flag each new 'S' field */
- PGPP = 0;
-
- if(*pSrc == 'S') {
- /* Scan PGPP in current 'S' field */
- pScan = pSrc;
-
- if(_pmScanTfield(EPS_MTID_PGPHOTO, pScan) != NULL) {
- PGPP = 1;
- }
-
- *pDes++ = *pSrc++;
- *pDes++ = *pSrc++;
-
- while(*pSrc == 'T') {
- /* Copy support 'T' field */
- for(t_idx = 0; t_idx < EPS_NUM_MEDIA_TYPES; t_idx++) {
- if(epsMediaTypeIndex[t_idx] == *(pSrc+1)) {
- memcpy(pDes, pSrc, 4);
- pDes += 4;
- break;
- }
- }
-
- /* Unknown type id encountered */
- /* if PGPP did not exist in 'S' field */
- /* then append PGPP fields to pDes */
- if(t_idx == EPS_NUM_MEDIA_TYPES && PGPP == 0) {
- memcpy(pDes, PGPP_FIELD, 4);
- pDes += 4;
- PGPP = 1;
- }
-
- /* move to next 'T' */
- pSrc += 4;
- }
-
- /* copy '/' and move next 'S' */
- *pDes++ = *pSrc++;
-
- }else if(*pSrc == 'M' || *pSrc == 'R') {
- memcpy(pDes, pSrc, 6);
- pDes += 6;
- pSrc += 6;
+EPS_UINT32 pptops(EPS_UINT8* pp)
+{
+ switch(*pp){
+ case 0x01:
+ switch(*(pp+1)){
+ case 0x00: return EPS_MPID_REAR; break;
+ case 0x01: return EPS_MPID_FRONT1; break;
+ case 0x02: return EPS_MPID_FRONT2; break;
+ case 0x03: return EPS_MPID_FRONT3; break;
+ case 0x04: return EPS_MPID_FRONT4; break;
+ case 0xFF: return EPS_MPID_AUTO; break;
}
- }
-
- *pDes++ = *pSrc++; /* 0xD */
- *pDes = *pSrc; /* 0xA */
-
- EPS_RETURN_VOID;
+ break;
+ case 0x02:
+ switch(*(pp+1)){
+ case 0x00: return EPS_MPID_MANUAL; break;
+ case 0x01: return EPS_MPID_CDTRAY; break;
+ case 0x02: return EPS_MPID_MANUAL2;break;
+ }
+ break;
+ case 0x03:
+ switch(*(pp+1)){
+ case 0x00: return EPS_MPID_ROLL; break;
+ }
+ break;
+ }
+ return EPS_MPID_NOT_SPEC;
}
+
/*******************************************|********************************************/
/* */
-/* Function name: _pmCorrectDupulicatedFields() */
+/* Function name: serDelayThread() */
/* */
/* Arguments */
/* --------- */
/* Name: Type: Description: */
-/* pDes EPS_UINT8* O: Pointer to validated pm string */
-/* pSrc EPS_UINT8* I: Pointer to original pm string */
+/* milliseconds EPS_UINT32 I: Sleep Period in microseconds */
/* */
/* Return value: */
/* None */
/* */
/* Description: */
-/* Merge duplicated fields. */
+/* Wait <milliseconds>. */
+/* If OS sleep function is used, change the unit of sleep time from milliseconds */
+/* to microseconds. */
/* */
/*******************************************|********************************************/
-static void _pmCorrectDupulicatedFields (
+void serDelayThread (
- EPS_UINT8* pDes,
- EPS_UINT8* pSrc
+ EPS_UINT32 milliseconds,
+ EPS_CMN_FUNC* epsCmnFnc
){
- EPS_UINT8 merged_buf[EPS_PM_MAXSIZE];
-
- EPS_UINT8* pFieldS = NULL; /* current 'S' in merged buffer */
- EPS_UINT8* pFieldT = NULL; /* work pontter to merge a 'T' */
- EPS_UINT8* pS = NULL; /* duplicated field's starting position */
- EPS_UINT8* pE = NULL; /* duplicated field's ending postion */
- EPS_UINT8* pM = NULL; /* pos of merged buffer */
- EPS_UINT8* pScan = NULL; /* work pointer to find a field */
- EPS_UINT8 s_id = 0xFF; /* current 'S' id */
- EPS_INT16 bytes;
- EPS_LOG_FUNCIN;
-
-#ifdef _TEST_PM_STEP_3
- *(pSrc+8) = 0x0F; /* make duplicate 'S' */
-#endif
- memset(merged_buf, 0, EPS_PM_MAXSIZE);
- pM = &merged_buf[0];
-
- /* Aleady merged fields no need to copy again */
- while (*pSrc != 0xD || *(pSrc+1) != 0xA) {
- pFieldS = NULL;
-
- if(*pSrc == 'S') {
- VERBOSE_DUMP_PMREPLY((pSrc, DUMP_S_TAG_ONLY, "< STEP 3 : SOURCE 'S' ... >"));
-
- /* save current 'S' id */
- s_id = *(pSrc+1);
-
- if(s_id != MERGED_FIELD) {
- /* Current 'S' field's starting pos */
- /* it is used to merge fields later */
- pFieldS = pM;
-
- COPY_BYTES(pM, pSrc, 2);
- }
-
- pSrc += 2; /* move to first 'T' */
-
- /* Merge 'T' fields */
- while(*pSrc == 'T') {
-
- if(pFieldS && s_id != MERGED_FIELD) {
- /* if 'T' aleady exist just combine its property by BIT OR operation */
- if((pFieldT = _pmScanTfield(*(pSrc+1), pFieldS)) != NULL) {
- *(pFieldT+2) |= *(pSrc+2);
- }
-
- /* Copy only new 'T' field */
- if(pFieldT == NULL) {
- COPY_BYTES(pM, pSrc, 4);
- }
- }
-
- pSrc += 4; /* next 'T' */
- }
- }else if(*pSrc == 'M' || *pSrc == 'R') {
- memcpy(pM, pSrc, 6);
- pM += 6;
- pSrc += 6;
- continue;
- }
-
- if(s_id != MERGED_FIELD) {
- COPY_BYTES(pM, pSrc, 1);
- }
- pSrc++;
-
- /* aleady merged field just go on next */
- if(s_id == MERGED_FIELD) {
- continue;
- }
-
- /*----------------------------------------------------*/
- /* Find dupulicated 'S' being followed and merge them */
-
- pScan = pSrc; /* do not change pSrc in following loop */
-
- while(_pmFindSfield(s_id, pScan, &pS, &pE) > 0) {
-
- /* Change source's 'S' id to MERGED_FIELD */
- *(pS+1) = MERGED_FIELD;
- pS += 2;
-
- /* merge dupulicated 'T' */
- while(*pS == 'T') {
-
- /* Append NEW 'T' field to the current 'S' field */
- /* aleady same 'T' exist only its mode property will be combined */
- /* after called function */
- if(pFieldS) {
- if((bytes = _pmAppendTfield(pS, pFieldS)) > 0) {
-
- /* update merged_buf's the last pos that pM point it */
- pM += bytes; /* MUST 4 BYTES(size of 'T' field) ! */
- }
- }
-
- pS += 4; /* next 'T' */
- }
-
- /* find next 'S' */
- pScan = (pE+1);
-
- VERBOSE_DUMP_PMREPLY((pFieldS, DUMP_S_TAG_ONLY, "< STEP 3 : MERGE PROCESSING ... >"));
- }
- }
-
- /* 0x0D & 0x0A */
- COPY_BYTES(pM, pSrc, 2);
-
- /*----------------------------------*/
- /* Copy the merged PM REPLY to pDes */
-
- pM = &merged_buf[0];
-
- while (*pM != 0xD || *(pM+1) != 0xA) {
- *pDes++ = *pM++;
+#ifdef GCOMSW_EPSON_SLEEP
+ if (epsCmnFnc->sleep == serSleep) {
+ epsCmnFnc->sleep((EPS_UINT32)milliseconds); /* Ignore return value of sleep func */
+ } else{
+ epsCmnFnc->sleep(milliseconds * 1000); /* Ignore return value of sleep func */
}
+#else
+ epsCmnFnc->sleep(milliseconds * 1000); /* Ignore return value of sleep func */
+#endif /* GCOMSW_EPSON_SLEEP */
- *pDes++ = *pM++; /* 0xD */
- *pDes = *pM; /* 0xA */
-
- EPS_RETURN_VOID;
}
/*******************************************|********************************************/
/* */
-/* Function name: _pmAdjustQuality() */
+/* Function name: serSleep() */
/* */
/* Arguments */
/* --------- */
/* Name: Type: Description: */
-/* pData EPS_UINT8* I/O: Pointer to pm string */
+/* sleepPeriod EPS_UINT32 I: Sleep Period in milliseconds */
/* */
/* Return value: */
-/* None */
+/* EPS_ERR_NONE - Success */
/* */
/* Description: */
-/* Adjust quality properties to the formal. */
-/* example : quality has only draft mode -> turn on normal mode. */
+/* ESC/P-R Lib original sleep function. */
+/* This function is used when "epsCmnFnc.sleep = NULL". */
/* */
/*******************************************|********************************************/
-static void _pmAdjustQuality (
+#ifdef GCOMSW_EPSON_SLEEP
+EPS_ERR_CODE serSleep (
- EPS_UINT8* pData
+ EPS_UINT32 sleepPeriod /* Sleep Period in milliseconds */
){
- EPS_UINT8* p = pData;
-
- EPS_LOG_FUNCIN;
-
- /* skip pm heder */
- p += EPS_PM_HEADER_LEN;
-
- verbose_dbprint(("< STEP 4 : Adjust quality >\r\n"));
-
- /* adjuct each quality properties */
- while(!(*p == 0x0D && *(p+1) == 0x0A)) {
-
- while(*p == 'S') {
-
- verbose_dbprint(("%c %02d\r\n", *p, *(p+1)));
-
- p += 2; /* move to the first T field */
-
- while(*p == 'T') {
- verbose_dbprint(("\t%c %02d 0x%02x %c -> ", *p, *(p+1), *(p+2), *(p+3)));
-
- p += 2; /* move to quality pos */
-
- /* Quality property */
- switch(*p & 0x07) {
- /* Should be handled following case 1 bit of Draft turned on only */
- case 0x01: /* 0 0 1 -> 0 1 1 */
- *p |= (1<<1); /* turn normal on */
- break;
- default:
- break;
- }
-
- verbose_dbprint(("%c %02d 0x%02x %c\r\n", *(p-2), *(p-1), *(p), *(p+1)));
+/*** Declare Variable Local to Routine */
+ EPS_INT32 idx; /* General loop/index varaible */
+ EPS_INT32 endx;
+ struct timeb sleepM;
- p += 2; /* move to the next T field */
- }
+/*** Initialize Local Variables */
+ endx = sleepPeriod*printJob.sleepSteps;
+ if (printJob.sleepSteps <= 0) endx = sleepPeriod/(-printJob.sleepSteps);
- p += 1; /* move to the next S field */
- }
+/*** Sleep for about the requested sleepPeriod */
+ for (idx = 1; idx < endx; idx++) {ftime(&sleepM); }
- if(*p == 'M' || *p == 'R') {
- p += 6;
- }
- }
+/*** Return to Caller */
+ return((EPS_ERR_CODE)EPS_ERR_NONE);
- EPS_RETURN_VOID;
}
+#endif /* GCOMSW_EPSON_SLEEP */
/*******************************************|********************************************/
@@ -2332,7 +1372,6 @@ EPS_BOOL obsIsA3Model (
return FALSE;
}
-
static EPS_INT8 modelFY11Bussiness[][16] = {
"PX-1600F", "WF-7510 Series", "WF-7511 Series", "WF-7515 Series",
"PX-1700F", "WF-7520 Series", "WF-7521 Series", "WF-7525 Series",
@@ -2357,7 +1396,6 @@ EPS_BOOL obsEnableDuplex (
{
modelName = g_observer.printer->modelName;
for(i = 0; i < 28; i++){
- EPS_DBGPRINT(("%s\n", modelFY11Bussiness[i]));
if( strcmp(modelName, modelFY11Bussiness[i]) == 0){
return FALSE;
}
@@ -2366,6 +1404,24 @@ EPS_BOOL obsEnableDuplex (
return TRUE;
}
+
+EPS_BOOL obsEnableAutoFeed (
+
+ void
+
+){
+ const EPS_INT8 *modelName = NULL;
+ EPS_INT32 i = 0;
+
+ modelName = g_observer.printer->modelName;
+ for(i = 0; i < 28; i++){
+ if( strcmp(modelName, modelFY11Bussiness[i]) == 0){
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
/*____________________________ epson-escpr-services.c ______________________________*/
/*34567890123456789012345678901234567890123456789012345678901234567890123456789012345678*/
diff --git a/lib/epson-escpr-services.h b/lib/epson-escpr-services.h
index 7ef27b6..2f11236 100755..100644
--- a/lib/epson-escpr-services.h
+++ b/lib/epson-escpr-services.h
@@ -144,17 +144,9 @@ extern "C" {
/*** Misc */
/*** -------------------------------------------------------------------------------*/
#define _SECOND_ 1000 /* Unit for changing milli second to second */
-#define _STATUS_REPLY_BUF 256 /* Printer status buffer size */
+#define _STATUS_REPLY_BUF 512 /* Printer status buffer size */
- /*** PM string resource ID */
- /*** -------------------------------------------------------------------------------*/
-#define EPS_PMS_E300 (1)
-#define EPS_PMS_E500 (2)
-#define EPS_PMS_E700 EPS_PMS_E500
-#define EPS_PMS_PM200 (3)
-#define EPS_PMS_PM240 (4)
-
/*** Model depend */
/*** -------------------------------------------------------------------------------*/
#define EPS_MDC_STATUS (1)
@@ -162,22 +154,20 @@ extern "C" {
/*--------------------------- Public Function Declarations ---------------------------*/
/*******************************************|********************************************/
-extern EPS_BOOL serParseDeviceID (EPS_INT8*, EPS_INT8*, EPS_INT8*, EPS_INT32*, EPS_UINT32*);
-extern EPS_ERR_CODE serAnalyzeStatus (EPS_INT8*, EPS_STATUS_INFO* );
+extern EPS_INT32 serParseDeviceID (EPS_INT8*, EPS_INT32, EPS_INT8*, EPS_INT8*,
+ EPS_INT32*, EPS_UINT32*, EPS_UINT32* );
+extern EPS_BOOL serCheckLang (EPS_INT8*, EPS_UINT32* );
+extern EPS_ERR_CODE serAnalyzeStatus (EPS_INT8*, EPS_UINT32, EPS_STATUS_INFO*);
extern void serDelayThread (EPS_UINT32, EPS_CMN_FUNC* );
-extern EPS_INT32 serGetInkError (EPS_STATUS_INFO*, EPS_INT32* );
extern EPS_INT32 serInkLevelNromalize (EPS_INT32 );
+extern EPS_ERR_CODE serGetSerialNo (EPS_INT8*, EPS_INT32, EPS_INT8* );
+extern EPS_ERR_CODE serGetSerialNoFormST (EPS_INT8*, EPS_INT8*, EPS_INT32 );
+extern EPS_ERR_CODE serGetSupplyInfo (EPS_UINT8*, EPS_SUPPLY_INFO* );
#ifdef GCOMSW_EPSON_SLEEP
extern EPS_ERR_CODE serSleep (EPS_UINT32 );
#endif
- /*** pm reply */
- /*** -------------------------------------------------------------------------------*/
-extern EPS_ERR_CODE _SP_ChangeSpec_UpdatePMReply(EPS_PRINTER_INN*, EPS_UINT8*, EPS_INT32);
-extern EPS_ERR_CODE _SP_ChangeSpec_DraftOnly (EPS_PRINTER_INN*, EPS_JOB_ATTRIB* );
-extern void serAppendMedia (EPS_SUPPORTED_MEDIA* );
-
extern void obsSetPrinter (const EPS_PRINTER_INN* );
extern void obsSetColorPlane (EPS_UINT8 );
@@ -185,7 +175,7 @@ extern void obsClear (void
extern EPS_INT32 obsGetPageMode (void );
extern EPS_BOOL obsIsA3Model (EPS_INT32 );
extern EPS_BOOL obsEnableDuplex (EPS_INT32 );
-
+extern EPS_BOOL obsEnableAutoFeed (void );
#ifdef __cplusplus
}
diff --git a/lib/epson-layout.c b/lib/epson-layout.c
index d44e223..fd8baea 100755..100644
--- a/lib/epson-layout.c
+++ b/lib/epson-layout.c
@@ -19,8 +19,7 @@
/* */
/* Public Function Calls */
/* -------------------------- */
-/* EPS_ERR_CODE elAppendQRCode (qrcode ); */
-/* EPS_ERR_CODE elComposeQrcode (pSrc, pDst, bpp, pRec ); */
+/* EPS_ERR_CODE elGetDots (resolution, millimeter ); */
/* EPS_ERR_CODE elCDClipping (pSrc, pDst, bpp, pRec ); */
/* */
/*******************************************|********************************************/
@@ -58,8 +57,9 @@ extern EPS_PRINT_JOB printJob;
/*-------------------------- Local Functions Declaration ----------------------------*/
/*******************************************|********************************************/
+#ifdef GCOMSW_EL_CDLABEL
static EPS_UINT32 isqrt(EPS_UINT32 x);
-
+#endif
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
@@ -77,7 +77,7 @@ static EPS_UINT32 isqrt(EPS_UINT32 x);
/* --------- */
/* Name: Type: Description: */
/* resolution EPS_UINT8 I: resolution */
-/* length EPS_INT32 I: length */
+/* millimeter EPS_UINT32 I: length(millimeter x 10) */
/* */
/* Return value: */
/* Dot num */
@@ -89,25 +89,25 @@ static EPS_UINT32 isqrt(EPS_UINT32 x);
EPS_INT32 elGetDots (
EPS_UINT8 resolution,
- EPS_FLOAT millimeter
+ EPS_UINT32 millimeter
){
EPS_INT32 dots = 0;
if(resolution == EPS_IR_360X360){ /* EPS_IR_360X360 == 0 */
- dots = (EPS_INT32)(millimeter * 14.1732); /* 0.03937 * 360 = 14.1732 */
+ dots = (EPS_INT32)(millimeter * 14173); /* 0.03937 * 360 = 14.1732 -> x1000 */
} else if( resolution & EPS_IR_720X720 ){
- dots = (EPS_INT32)(millimeter * 28.3464); /* 0.03937 * 720 = 28.3464 */
+ dots = (EPS_INT32)(millimeter * 28346); /* 0.03937 * 720 = 28.3464 -> x1000 */
} else if( resolution & EPS_IR_300X300 ){
- dots = (EPS_INT32)(millimeter * 11.811); /* 0.03937 * 300 = 11.811 */
+ dots = (EPS_INT32)(millimeter * 11811); /* 0.03937 * 300 = 11.811 -> x1000 */
} else if( resolution & EPS_IR_600X600 ){
- dots = (EPS_INT32)(millimeter * 23.622); /* 0.03937 * 600 = 23.622 */
+ dots = (EPS_INT32)(millimeter * 23622); /* 0.03937 * 600 = 23.622 -> x1000 */
} else{
/* default 360dpi */
- dots = (EPS_INT32)(millimeter * 14.1732); /* 0.03937 * 360 = 14.1732 */
+ dots = (EPS_INT32)(millimeter * 14173); /* 0.03937 * 360 = 14.1732 -> x1000 */
}
- return dots;
+ return dots/10000; /* input:10 times, inche:1000 times */
}
@@ -139,7 +139,7 @@ EPS_ERR_CODE elCDClipping (
EPS_RECT* pRec
){
-#define GET_RADIUS(mm) (EPS_INT32)(elGetDots(printJob.attr.inputResolution, mm)/2)
+#define GET_RADIUS(mm) (EPS_INT32)(elGetDots(printJob.attr.inputResolution, mm*10)/2)
#define X_OF_SECANT(r, y) ((EPS_INT32)isqrt((r-y) * (r+y)))
EPS_LINE_SEGMENT segOut, segIn;
diff --git a/lib/epson-layout.h b/lib/epson-layout.h
index 2537ae7..83f35df 100755..100644
--- a/lib/epson-layout.h
+++ b/lib/epson-layout.h
@@ -28,6 +28,7 @@ extern "C" {
/*------------------------------------ Includes -------------------------------------*/
/*******************************************|********************************************/
#include "epson-typedefs.h"
+#include "epson-escpr-pvt.h"
/*---------------------------------- Generic Macros ---------------------------------*/
@@ -35,12 +36,12 @@ extern "C" {
/*** CD/DVD Sizing Information */
/*** -------------------------------------------------------------------------------*/
-#define CDDVD_OFFSET_X(r, d) (EPS_INT32)(elGetDots(r, (EPS_FLOAT)(14.0 + (EPS_FLOAT)(EPS_CDDIM_OUT_DEF - d)/2)) + elGetDots(r, 3))
-#define CDDVD_OFFSET_Y(r, d) (EPS_INT32)(elGetDots(r, (EPS_FLOAT)( 6.5 + (EPS_FLOAT)(EPS_CDDIM_OUT_DEF - d)/2)) + elGetDots(r, 3))
+#define CDDVD_OFFSET_X(r, d) (EPS_INT32)(elGetDots(r, (140 + (EPS_CDDIM_OUT_DEF*10 - d*10)/2)) + elGetDots(r, 30))
+#define CDDVD_OFFSET_Y(r, d) (EPS_INT32)(elGetDots(r, ( 65 + (EPS_CDDIM_OUT_DEF*10 - d*10)/2)) + elGetDots(r, 30))
/*---------------------------- API Function Declarations ----------------------------*/
/*******************************************|********************************************/
-extern EPS_INT32 elGetDots (EPS_UINT8 inputResolution, EPS_FLOAT length );
+extern EPS_INT32 elGetDots (EPS_UINT8 inputResolution, EPS_UINT32 millimeter );
#ifdef GCOMSW_EL_CDLABEL
extern EPS_ERR_CODE elCDClipping (const EPS_UINT8*, EPS_UINT8*, EPS_UINT8, EPS_RECT* );
diff --git a/lib/epson-net-lpr.c b/lib/epson-net-lpr.c
index a184267..ea3b538 100755..100644
--- a/lib/epson-net-lpr.c
+++ b/lib/epson-net-lpr.c
@@ -29,7 +29,7 @@
/* EPS_ERR_CODE lprWritePrintData (buffer, bufferlen, sendlen ); */
/* EPS_ERR_CODE lprGetStatus (printer, status, ioStatus ); */
/* EPS_ERR_CODE lprGetJobStatus (pstInfo ); */
-/* EPS_ERR_CODE lprGetPMString (printer, pString, bufSize ); */
+/* EPS_ERR_CODE lprGetInfo (printer, pString, bufSize ); */
/* EPS_ERR_CODE lprMechCommand (printer, Command ); */
/* */
/*******************************************|********************************************/
@@ -153,11 +153,12 @@ EPS_ERR_CODE lprFindStart(
EPS_SOCKET* sock,
const EPS_INT8* address,
- EPS_BOOL multi
+ EPS_BOOL multi,
+ const EPS_UINT8* mac
){
EPS_LOG_FUNCIN
- EPS_RETURN( snmpFindStart(sock, address, multi) )
+ EPS_RETURN( snmpFindStart(sock, address, multi, mac) )
}
@@ -625,7 +626,7 @@ EPS_ERR_CODE lprGetStatus(
EPS_RETURN( ret )
}
- ret = snmp.GetStatus(sock, printer->location, pstInfo );
+ ret = snmp.GetStatus(sock, printer->location, snmp.egID, pstInfo );
if( !IS_VALID_DATA_SESSION ){
/* Another proceessing, or printing after endjob */
@@ -712,42 +713,13 @@ EPS_ERR_CODE lprGetJobStatus(
}
/*** Get Printer status by SNMP */
- EPS_RETURN( snmp.GetStatus( lprPrintJob->socStat, printer->location, pstInfo ) )
+ EPS_RETURN( snmp.GetStatus( lprPrintJob->socStat, printer->location, snmp.egID, pstInfo ) )
}
/*******************************************|********************************************/
/* */
-/* Function name: lprGetInkInfo() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* status EPS_STATUS_INFO* O: retrieve printer satus */
-/* */
-/* Return value: */
-/* EPS_ERR_NONE - Success */
-/* EPS_ERR_COMM_ERROR - Communication Error */
-/* */
-/* Description: */
-/* Get Ink information. */
-/* */
-/*******************************************|********************************************/
-EPS_ERR_CODE lprGetInkInfo(
-
- EPS_STATUS_INFO* pstInfo
-
-){
- EPS_PRINTER_INN* printer = printJob.printer;
-
- EPS_LOG_FUNCIN
- EPS_RETURN( snmp.GetInkInfo(printer->location, pstInfo ) )
-}
-
-
-/*******************************************|********************************************/
-/* */
-/* Function name: lprGetPMString() */
+/* Function name: lprGetInfo() */
/* */
/* Arguments */
/* --------- */
@@ -767,16 +739,16 @@ EPS_ERR_CODE lprGetInkInfo(
/* PM String : pString */
/* */
/*******************************************|********************************************/
-EPS_ERR_CODE lprGetPMString(
+EPS_ERR_CODE lprGetInfo(
const EPS_PRINTER_INN* printer,
EPS_INT32 type,
- EPS_UINT8* pString,
+ EPS_UINT8** pString,
EPS_INT32* bufSize
){
EPS_LOG_FUNCIN
- EPS_RETURN( snmp.GetPMString(printer, type, pString, bufSize) )
+ EPS_RETURN( snmp.InfoCommand(printer, type, pString, bufSize) )
}
diff --git a/lib/epson-net-lpr.h b/lib/epson-net-lpr.h
index 6c19c8d..8094bd9 100755..100644
--- a/lib/epson-net-lpr.h
+++ b/lib/epson-net-lpr.h
@@ -36,7 +36,7 @@ extern void lprSetupSTFunctions (const EPS_PRINTER_INN* );
extern EPS_UINT16 lprGetDefautiPort (void );
/* Discovery message related Functions */
-extern EPS_ERR_CODE lprFindStart (EPS_SOCKET*, const EPS_INT8*, EPS_BOOL );
+extern EPS_ERR_CODE lprFindStart (EPS_SOCKET*, const EPS_INT8*, EPS_BOOL, const EPS_UINT8*);
extern EPS_ERR_CODE lprFind (EPS_SOCKET, EPS_PRINTER_INN** );
extern EPS_ERR_CODE lprFindEnd (EPS_SOCKET );
extern EPS_ERR_CODE lprProbePrinterByID (EPS_INT8*, EPS_UINT32, EPS_PRINTER_INN** );
@@ -53,10 +53,9 @@ extern EPS_ERR_CODE lprMechCommand (const EPS_PRINTER_INN*, EPS_INT32
/* Printer status Functions */
extern EPS_ERR_CODE lprGetStatus (EPS_STATUS_INFO*, EPS_BOOL*, EPS_BOOL* );
-extern EPS_ERR_CODE lprGetInkInfo (EPS_STATUS_INFO* );
extern EPS_ERR_CODE lprGetJobStatus (EPS_STATUS_INFO* );
-extern EPS_ERR_CODE lprGetPMString (const EPS_PRINTER_INN*, EPS_INT32,
- EPS_UINT8*, EPS_INT32* );
+extern EPS_ERR_CODE lprGetInfo (const EPS_PRINTER_INN*, EPS_INT32,
+ EPS_UINT8**, EPS_INT32* );
#ifdef __cplusplus
diff --git a/lib/epson-net-raw.c b/lib/epson-net-raw.c
index e22c8a0..27f6610 100755..100644
--- a/lib/epson-net-raw.c
+++ b/lib/epson-net-raw.c
@@ -29,7 +29,7 @@
/* EPS_ERR_CODE rawWritePrintData (buffer, bufferlen, sendlen ); */
/* EPS_ERR_CODE rawGetStatus (printer, status, ioStatus ); */
/* EPS_ERR_CODE rawGetJobStatus (pstInfo ); */
-/* EPS_ERR_CODE rawGetPMString (printer, pString, bufSize ); */
+/* EPS_ERR_CODE rawGetInfo (printer, pString, bufSize ); */
/* EPS_ERR_CODE rawMechCommand (printer, Command ); */
/* */
/*******************************************|********************************************/
@@ -147,11 +147,12 @@ EPS_ERR_CODE rawFindStart(
EPS_SOCKET* sock,
const EPS_INT8* address,
- EPS_BOOL multi
+ EPS_BOOL multi,
+ const EPS_UINT8* mac
){
EPS_LOG_FUNCIN
- EPS_RETURN( snmpFindStart(sock, address, multi) )
+ EPS_RETURN( snmpFindStart(sock, address, multi, mac) )
}
@@ -619,7 +620,7 @@ EPS_ERR_CODE rawGetStatus(
EPS_RETURN( ret )
}
- ret = snmp.GetStatus(sock, printer->location, pstInfo );
+ ret = snmp.GetStatus(sock, printer->location, snmp.egID, pstInfo );
if( !IS_VALID_DATA_SESSION ){
/* Another proceessing, or printing after endjob */
@@ -706,42 +707,13 @@ EPS_ERR_CODE rawGetJobStatus(
}
/*** Get Printer status by SNMP */
- EPS_RETURN( snmp.GetStatus( rawPrintJob->socStat, printer->location, pstInfo ) )
+ EPS_RETURN( snmp.GetStatus( rawPrintJob->socStat, printer->location, snmp.egID, pstInfo ) )
}
/*******************************************|********************************************/
/* */
-/* Function name: rawGetInkInfo() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* status EPS_STATUS_INFO* O: retrieve printer satus */
-/* */
-/* Return value: */
-/* EPS_ERR_NONE - Success */
-/* EPS_ERR_COMM_ERROR - Communication Error */
-/* */
-/* Description: */
-/* Get Ink information. */
-/* */
-/*******************************************|********************************************/
-EPS_ERR_CODE rawGetInkInfo(
-
- EPS_STATUS_INFO* pstInfo
-
-){
- EPS_PRINTER_INN* printer = printJob.printer;
-
- EPS_LOG_FUNCIN
- EPS_RETURN( snmp.GetInkInfo(printer->location, pstInfo ) )
-}
-
-
-/*******************************************|********************************************/
-/* */
-/* Function name: rawGetPMString() */
+/* Function name: rawGetInfo() */
/* */
/* Arguments */
/* --------- */
@@ -761,16 +733,16 @@ EPS_ERR_CODE rawGetInkInfo(
/* PM String : pString */
/* */
/*******************************************|********************************************/
-EPS_ERR_CODE rawGetPMString(
+EPS_ERR_CODE rawGetInfo(
const EPS_PRINTER_INN* printer,
EPS_INT32 type,
- EPS_UINT8* pString,
+ EPS_UINT8** pString,
EPS_INT32* bufSize
){
EPS_LOG_FUNCIN
- EPS_RETURN( snmp.GetPMString(printer, type, pString, bufSize) )
+ EPS_RETURN( snmp.InfoCommand(printer, type, pString, bufSize) )
}
diff --git a/lib/epson-net-raw.h b/lib/epson-net-raw.h
index 5d58ec4..1d74a13 100755..100644
--- a/lib/epson-net-raw.h
+++ b/lib/epson-net-raw.h
@@ -36,7 +36,7 @@ extern void rawSetupSTFunctions (const EPS_PRINTER_INN* );
extern EPS_UINT16 rawGetDefautiPort (void );
/* Discovery message related Functions */
-extern EPS_ERR_CODE rawFindStart (EPS_SOCKET*, const EPS_INT8*, EPS_BOOL );
+extern EPS_ERR_CODE rawFindStart (EPS_SOCKET*, const EPS_INT8*, EPS_BOOL, const EPS_UINT8*);
extern EPS_ERR_CODE rawFind (EPS_SOCKET, EPS_PRINTER_INN** );
extern EPS_ERR_CODE rawFindEnd (EPS_SOCKET );
extern EPS_ERR_CODE rawProbePrinterByID (EPS_INT8*, EPS_UINT32, EPS_PRINTER_INN** );
@@ -53,10 +53,9 @@ extern EPS_ERR_CODE rawMechCommand (const EPS_PRINTER_INN*, EPS_INT32
/* Printer status Functions */
extern EPS_ERR_CODE rawGetStatus (EPS_STATUS_INFO*, EPS_BOOL*, EPS_BOOL* );
-extern EPS_ERR_CODE rawGetInkInfo (EPS_STATUS_INFO* );
extern EPS_ERR_CODE rawGetJobStatus (EPS_STATUS_INFO* );
-extern EPS_ERR_CODE rawGetPMString (const EPS_PRINTER_INN*, EPS_INT32,
- EPS_UINT8*, EPS_INT32* );
+extern EPS_ERR_CODE rawGetInfo (const EPS_PRINTER_INN*, EPS_INT32,
+ EPS_UINT8**, EPS_INT32* );
#ifdef __cplusplus
} /* extern "C" */
diff --git a/lib/epson-net-snmp.c b/lib/epson-net-snmp.c
index ea10cf3..1531b6f 100755..100644
--- a/lib/epson-net-snmp.c
+++ b/lib/epson-net-snmp.c
@@ -24,7 +24,7 @@
/* EPS_ERR_CODE snmpFindEnd (sock ); */
/* EPS_ERR_CODE snmpProbeByID (printerUUID, timeout, printer ); */
/* EPS_ERR_CODE snmpGetStatus (sock, address, pstInfo ); */
-/* EPS_ERR_CODE snmpGetPMString (printer, pString, bufSize ); */
+/* EPS_ERR_CODE snmpInfoCommand (printer, cmd, pString, bufSize ); */
/* EPS_ERR_CODE snmpMechCommand (printer, Command ); */
/* EPS_ERR_CODE snmpOpenSocket (sock ); */
/* EPS_ERR_CODE snmpCloseSocket (sock ); */
@@ -47,6 +47,9 @@
#ifdef GCOMSW_CMD_ESCPAGE_S
#include "epson-escpage-s.h"
#endif
+ #ifdef GCOMSW_CMD_PCL
+ #include "epson-pcl.h"
+ #endif
#endif
/*----------------------------------- Definitions ------------------------------------*/
@@ -58,25 +61,9 @@
#endif
#define SNMP_PORT_NUM (161) /* Protocol port number */
-#define SNMP_MAX_BUF (512) /* Communication buffer size */
+#define SNMP_MAX_BUF (1024) /* Communication buffer size */
#define SNMP_MAX_OID (128) /* max oid size */
-/* SNMP variables */
-#define ASN_VT_INTEGER (0x02) /* integer */
-#define ASN_VT_OCTET_STRING (0x04) /* octet stream */
-#define ASN_VT_NULL (0x05) /* null */
-#define ASN_VT_OBJECT_ID (0x06) /* OID */
-#define ASN_VT_SEQUENCE (0x30) /* sequence */
-
-/* SNMP message */
-#define ASN_PDU_GET (EPS_UINT8)(0xA0) /* GetRequest */
-#define ASN_PDU_GET_NEXT (EPS_UINT8)(0xA1) /* GetNextRequest */
-#define ASN_PDU_RESP (EPS_UINT8)(0xA2) /* Response */
-#define ASN_PDU_SET (EPS_UINT8)(0xA3) /* SetRequest */
-#define ASN_PDU_TRAP (EPS_UINT8)(0xA4) /* Trap */
-#define ASN_PDU_TRAP_RSP (EPS_UINT8)(0xC2) /* TrapResponse */
-
-
#define SNMP_VERSION (0)
#define SNMP_COMMUNITY_STR "public"
/* Response corde */
@@ -105,26 +92,6 @@
#define MIB_PRERR_COVEROPEN (1 << 3)
#define MIB_PRERR_PAPERJAM (1 << 2)
-/*--------------------------- Data Structure Declarations ---------------------------*/
-/*******************************************|********************************************/
-/* SNMP variant type */
-typedef struct tag_ASN_VARIANT {
- EPS_INT8 type;
- EPS_UINT32 length;
- union{
- EPS_INT32 v_long; /* Integer */
- EPS_INT8* v_str; /* OCTET_STRING, ASN_VT_OBJECT_ID */
- } val;
-}ASN_VARIANT;
-
-/* If type is OBJECT_ID, ParseField() alloc heap. */
-#define EPS_REREASE_VARIANT( v ) \
- { \
- if( ASN_VT_OBJECT_ID == (v).type ){ \
- EPS_SAFE_RELEASE( (v).val.v_str ); \
- } \
- (v).type = ASN_VT_NULL; \
- }
/*---------------------------- ESC/P-R Lib Global Variables --------------------------*/
@@ -137,8 +104,6 @@ extern EPS_CMN_FUNC epsCmnFnc;
/*** Find */
extern EPS_BOOL g_FindBreak; /* Find printer end flag */
- /* CPU Endian-ness */
-extern EPS_INT16 cpuEndian;
/* { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1)
interfaces(2) ifTable(2) ifEntry(1) 6 } */
@@ -148,6 +113,9 @@ static EPS_INT8 s_oidPhysAddress[] = "1.3.6.1.2.1.2.2.1.6";
tcp(6) tcpConnTable(13) tcpConnEntry(1) 3 } */
static EPS_INT8 s_oidTcpConnLocalPort[]= "1.3.6.1.2.1.6.13.1.3";
+/* { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1)
+ printmib(43) prtInterpreter(15) prtInterpreterTable(1) prtInterpreterEntry(1) prtInterpreterDescription(5) } */
+static EPS_INT8 s_oidInterpreterDescription[] = "1.3.6.1.2.1.43.15.1.1.5";
#ifdef GCOMSW_CMD_ESCPAGE
/* { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1)
@@ -172,11 +140,17 @@ static EPS_INT8 s_oidMarkerColorant[] = "1.3.6.1.2.1.43.12.1.1.4";
static EPS_INT8 s_oidMarkerLevel[] = "1.3.6.1.2.1.43.11.1.1.9";
/* { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1)
+ printmib(43) prtMarkerSupplies(11) prtMarkerSuppliesTable(1) prtMarkerSuppliesEntry(1)
+ prtMarkerSuppliesMaxCapacity(8) } */
+static EPS_INT8 s_oidMarkerMaxLevel[] = "1.3.6.1.2.1.43.11.1.1.8";
+
+/* { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1)
printmib(43) prtInput(8) prtInputTable(2) prtInputEntry(1) prtInputName(13) } */
static EPS_INT8 s_oidInputName[] = "1.3.6.1.2.1.43.8.2.1.13";
#endif
static EPS_INT8 s_oidPrvPrinter[] = "1.3.6.1.4.1.1248.1.2.2.1.1.1.1";
+static EPS_INT8 s_oidPwgPrinter[] = "1.3.6.1.4.1.2699.1.2.1.2.1.1.3";
static EPS_INT8 s_oidPrvBonjourName[] = "1.3.6.1.4.1.1248.1.1.3.1.14.4.1.2";
static EPS_INT8 s_oidPrvStatus[] = "1.3.6.1.4.1.1248.1.2.2.1.1.1.4";
static EPS_INT8 s_oidPrvCtrl[] = "1.3.6.1.4.1.1248.1.2.2.44.1.1.2";
@@ -186,16 +160,18 @@ static EPS_INT8 g_TrnBuff[SNMP_MAX_BUF];
/*-------------------------- Public Functions Declaration ---------------------------*/
/*******************************************|********************************************/
-static EPS_ERR_CODE snmpGetStatus (EPS_SOCKET, const EPS_INT8*, EPS_STATUS_INFO* );
+static EPS_ERR_CODE snmpGetStatus (EPS_SOCKET, const EPS_INT8*, EPS_UINT32, EPS_STATUS_INFO*);
static EPS_ERR_CODE snmpGetInkInfo (const EPS_INT8*, EPS_STATUS_INFO* );
-static EPS_ERR_CODE snmpGetPMString (const EPS_PRINTER_INN*, EPS_INT32,
- EPS_UINT8*, EPS_INT32* );
+static EPS_ERR_CODE snmpInfoCommand (const EPS_PRINTER_INN*, EPS_INT32,
+ EPS_UINT8**, EPS_INT32* );
static EPS_ERR_CODE snmpMechCommand (const EPS_PRINTER_INN*, EPS_INT32 );
#ifdef GCOMSW_CMD_ESCPAGE
-static EPS_ERR_CODE snmpGetStatus_Page(EPS_SOCKET, const EPS_INT8*, EPS_STATUS_INFO* );
+static EPS_ERR_CODE snmpGetStatus_Page(EPS_SOCKET, const EPS_INT8*, EPS_UINT32, EPS_STATUS_INFO*);
static EPS_ERR_CODE snmpGetInkInfo_Page(const EPS_INT8*, EPS_STATUS_INFO* );
-static EPS_ERR_CODE snmpGetPMString_Page(const EPS_PRINTER_INN*, EPS_INT32,
- EPS_UINT8*, EPS_INT32* );
+static EPS_ERR_CODE snmpInfoCommand_Page(const EPS_PRINTER_INN*, EPS_INT32,
+ EPS_UINT8**, EPS_INT32* );
+static EPS_ERR_CODE snmpInfoCommand_PagePM(const EPS_PRINTER_INN*, EPS_INT32,
+ EPS_UINT8**, EPS_INT32* );
static EPS_ERR_CODE snmpMechCommand_Page(const EPS_PRINTER_INN*, EPS_INT32 );
#endif
@@ -203,34 +179,34 @@ static EPS_ERR_CODE snmpMechCommand_Page(const EPS_PRINTER_INN*, EPS_INT32
/*******************************************|********************************************/
static EPS_ERR_CODE SnmpTransact (const EPS_INT8*, EPS_INT32, const EPS_INT8*,
EPS_UINT8, ASN_VARIANT* pdu );
-static EPS_ERR_CODE SnmpTransactS (EPS_SOCKET, const EPS_INT8*, EPS_INT32,
- const EPS_INT8*, EPS_UINT8, ASN_VARIANT* );
static EPS_ERR_CODE SnmpFindRecv (EPS_SOCKET, EPS_UINT16, EPS_INT32,
const EPS_INT8*, const EPS_INT8*, EPS_PRINTER_INN**);
+static EPS_BOOL isFindCanceled ();
+static EPS_ERR_CODE BlkInfoCommand (const EPS_PRINTER_INN*, EPS_INT32,
+ EPS_UINT8**, EPS_INT32* );
static EPS_ERR_CODE mibGetPhysAddress(const EPS_INT8*, EPS_INT8*, EPS_UINT32 );
static EPS_ERR_CODE mibConfirmPrintPort(const EPS_INT8*, EPS_UINT16 );
+static EPS_ERR_CODE mibGetLanguage (const EPS_INT8*, EPS_UINT32* );
#ifdef GCOMSW_CMD_ESCPAGE_S
static EPS_ERR_CODE mibGetMaxMediaXFeedDir(const EPS_INT8* address, EPS_UINT32* val );
#endif
-static EPS_ERR_CODE GetPDU (EPS_INT8*, EPS_INT32, EPS_UINT8, const EPS_INT8*,
- ASN_VARIANT*, EPS_INT8*, EPS_INT32 );
#ifdef GCOMSW_CMD_ESCPAGE
static EPS_INT32 GetColorID (EPS_INT8* );
#endif
static EPS_ERR_CODE SnmpWalkMib (EPS_SOCKET, const EPS_INT8*, const EPS_INT8*, ASN_VARIANT*);
-static EPS_UINT8 GetRequestId (void );
static EPS_ERR_CODE ParseLength (EPS_INT8**, EPS_INT32*, EPS_UINT32* );
-static EPS_ERR_CODE ParseField (EPS_INT8**, EPS_INT32*, ASN_VARIANT* );
+static EPS_ERR_CODE ParseResponse (EPS_INT8*, EPS_INT32, EPS_INT32, const EPS_INT8*,
+ ASN_VARIANT*, EPS_INT8*, EPS_INT32 );
-static EPS_ERR_CODE CreateCommand (EPS_INT8*, EPS_UINT8, EPS_UINT8, const EPS_INT8*, EPS_INT32*);
+static EPS_ERR_CODE CreateCommand (EPS_INT8*, EPS_UINT8, const EPS_INT8*, EPS_INT32,
+ const EPS_SNMP_VARBIND*, EPS_INT32, EPS_INT32* );
static EPS_INT8* MakeLength (EPS_INT32, EPS_INT8* );
-static EPS_INT8* MakeIntField (EPS_INT32, EPS_INT8* );
-static EPS_INT8* MakeStrField (const EPS_INT8*, EPS_INT8* );
static EPS_ERR_CODE MakeOidField (const EPS_INT8*, EPS_INT8** );
static EPS_ERR_CODE MakeSequens (EPS_INT8*, EPS_UINT32*, EPS_BOOL );
+static EPS_UINT32 LengthOfLength (EPS_UINT32 );
static EPS_UINT16 IntToBer (EPS_INT32, EPS_INT8* );
static EPS_INT32 BerToInt (EPS_INT8*, EPS_INT32 );
@@ -275,15 +251,16 @@ void snmpSetupSTFunctions (
if( EPS_LANG_ESCPR != printer->language ){
fnc->GetStatus = snmpGetStatus_Page;
fnc->GetInkInfo = snmpGetInkInfo_Page;
- fnc->GetPMString = snmpGetPMString_Page;
+ fnc->InfoCommand = snmpInfoCommand_Page;
fnc->MechCommand = snmpMechCommand_Page;
}
else
#endif
{
+ fnc->egID = printer->egID;
fnc->GetStatus = snmpGetStatus;
fnc->GetInkInfo = snmpGetInkInfo;
- fnc->GetPMString = snmpGetPMString;
+ fnc->InfoCommand = snmpInfoCommand;
fnc->MechCommand = snmpMechCommand;
}
@@ -372,53 +349,130 @@ EPS_ERR_CODE snmpFindStart (
EPS_SOCKET* sock,
const EPS_INT8* address,
- EPS_BOOL multi
+ EPS_BOOL multi,
+ const EPS_UINT8* ifName
){
EPS_ERR_CODE ret = EPS_ERR_NONE;
- EPS_UINT8 nRqID = 0;
+ EPS_SNMP_VARBIND request;
+ EPS_INT32 nRqID = 0;
EPS_INT32 nSize = 0;
ASN_VARIANT pdu;
-
EPS_INT32 i = 0; /* Temporary counter for number of discoveries */
+#if LCOMSW_BINDIF_IF_NEED
+ EPS_BOOL useBind = FALSE;
+ EPS_INT32 r = 0;
+#endif
EPS_LOG_FUNCIN
- /* Create UDP broadcast socket */
- if(EPS_INVALID_SOCKET == *sock){ /* First Time */
- *sock = epsNetFnc.socket( EPS_PF_INET, EPS_SOCK_DGRAM, EPS_PROTOCOL_UDP );
- if( EPS_INVALID_SOCKET == *sock ){
- EPS_RETURN( EPS_ERR_COMM_ERROR )
+#if !LCOMSW_USE_MULTI_IF
+ (void)ifName; /* unused */
+#endif
+
+#if LCOMSW_BINDIF_IF_NEED
+ for (r = 0; r < 2; r++)
+ {
+#endif
+ /* Create UDP broadcast socket */
+ if(EPS_INVALID_SOCKET == *sock){ /* First Time */
+ *sock = epsNetFnc.socket( EPS_PF_INET, EPS_SOCK_DGRAM, EPS_PROTOCOL_UDP );
+ if( EPS_INVALID_SOCKET == *sock ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR )
+ }
+
+#if LCOMSW_USE_MULTI_IF
+ if(NULL != ifName){
+ if(EPS_SOCKET_SUCCESS != epsNetFnc.bindInterface( *sock, ifName ) ){
+ epsNetFnc.close( *sock );
+ *sock = EPS_INVALID_SOCKET;
+ EPS_RETURN( EPS_ERR_COMM_ERROR )
+ }
+ }
+#elif LCOMSW_BINDIF_IF_NEED
+ if(TRUE == useBind){
+ if(EPS_SOCKET_SUCCESS != epsNetFnc.bindInterface( *sock ) ){
+ epsNetFnc.close( *sock );
+ *sock = EPS_INVALID_SOCKET;
+ EPS_RETURN( EPS_ERR_COMM_ERROR )
+ }
+ useBind = FALSE;
+ }
+#endif
+ if(multi){
+ if( EPS_SOCKET_SUCCESS != epsNetFnc.setBroadcast(*sock) ){
+ /* If error occurr, close socket */
+ epsNetFnc.close( *sock );
+ *sock = EPS_INVALID_SOCKET;
+ EPS_RETURN( EPS_ERR_COMM_ERROR )
+ }
+ }
}
- if(multi){
- if( EPS_SOCKET_SUCCESS != epsNetFnc.setBroadcast(*sock) ){
+ /* Create Epson mib command */
+ memset(&pdu, 0, sizeof(pdu));
+ nRqID = snmpGetRequestId();
+ request.identifire = s_oidPrvPrinter;
+ request.value.type = ASN_VT_NULL;
+ if( EPS_ERR_NONE != (ret = CreateCommand(g_TrnBuff, ASN_PDU_GET_NEXT, SNMP_COMMUNITY_STR,
+ nRqID, &request, 1, &nSize)) ){
+ epsNetFnc.close( *sock );
+ EPS_RETURN( ret )
+ }
+ /* Send */
+ for (i = 0; i < EPSNET_NUM_DISCOVERIES; i++) {
+ if ( 0 >= epsNetFnc.sendTo(*sock, (char*)g_TrnBuff, nSize,
+ address, SNMP_PORT_NUM, 0)){
/* If error occurr, close socket */
epsNetFnc.close( *sock );
*sock = EPS_INVALID_SOCKET;
+#if LCOMSW_BINDIF_IF_NEED
+ ret = EPS_ERR_COMM_ERROR;
+ if (0 == i && NULL != epsNetFnc.bindInterface) {
+ useBind = TRUE;
+ }
+ break;
+#else
EPS_RETURN( EPS_ERR_COMM_ERROR )
+#endif
}
}
- }
-
- /* Create command */
- memset(&pdu, 0, sizeof(pdu));
- nRqID = GetRequestId();
- if( EPS_ERR_NONE != (ret = CreateCommand(g_TrnBuff, ASN_PDU_GET_NEXT, nRqID,
- s_oidPrvPrinter, &nSize)) ){
- EPS_RETURN( ret )
- }
+#if LCOMSW_BINDIF_IF_NEED
+ if(useBind){
+ continue;
+ }
+#endif
- /* Send */
- for (i = 0; i < EPSNET_NUM_DISCOVERIES; i++) {
- if ( 0 >= epsNetFnc.sendTo(*sock, (char*)g_TrnBuff, nSize,
- address, SNMP_PORT_NUM, 0)){
- /* If error occurr, close socket */
+ /* Create PWG mib command */
+ memset(&pdu, 0, sizeof(pdu));
+ nRqID = snmpGetRequestId();
+ request.identifire = s_oidPwgPrinter;
+ if( EPS_ERR_NONE != (ret = CreateCommand(g_TrnBuff, ASN_PDU_GET_NEXT, SNMP_COMMUNITY_STR,
+ nRqID, &request, 1, &nSize)) ){
epsNetFnc.close( *sock );
- *sock = EPS_INVALID_SOCKET;
- EPS_RETURN( EPS_ERR_COMM_ERROR )
+ EPS_RETURN( ret )
+ }
+ /* Send */
+ for (i = 0; i < EPSNET_NUM_DISCOVERIES; i++) {
+ if ( 0 >= epsNetFnc.sendTo(*sock, (char*)g_TrnBuff, nSize,
+ address, SNMP_PORT_NUM, 0)){
+ /* If error occurr, close socket */
+ epsNetFnc.close( *sock );
+ *sock = EPS_INVALID_SOCKET;
+#if LCOMSW_USE_MULTI_IF
+ ret = EPS_ERR_COMM_ERROR;
+ break;
+#else
+ EPS_RETURN( EPS_ERR_COMM_ERROR )
+#endif
+ }
+ }
+#if LCOMSW_BINDIF_IF_NEED
+ if(FALSE == useBind){
+ break;
}
}
+#endif
EPS_RETURN( ret )
}
@@ -453,12 +507,26 @@ EPS_ERR_CODE snmpFind(
EPS_PRINTER_INN** printer
){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_ERR_CODE lastRet = EPS_ERR_NONE;
+
EPS_LOG_FUNCIN
- EPS_RETURN( SnmpFindRecv(sock, printPort, printProtocol, NULL, NULL, printer) )
-}
-
+ ret = SnmpFindRecv(sock, printPort, printProtocol, NULL, NULL, printer);
+ lastRet = ret;
+ /* Until an effective value is provided from epson mib or PWG mib */
+ while(EPS_ERR_PRINTER_NOT_USEFUL == ret){
+ if(isFindCanceled()){
+ break;
+ }
+ ret = SnmpFindRecv(sock, printPort, printProtocol, NULL, NULL, printer);
+ }
+ if(EPS_COM_NOT_RECEIVE != ret){
+ lastRet = ret;
+ }
+ EPS_RETURN( lastRet )
+}
/*******************************************|********************************************/
/* */
@@ -547,18 +615,26 @@ EPS_ERR_CODE snmpProbeByID (
){
/*** Declare Variable Local to Routine */
EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
- EPS_SOCKET sock = EPS_INVALID_SOCKET;
+ EPS_SOCKET* socks = NULL;
EPS_UINT32 tmStart, tmNow, tmSpan, tmReq;
EPS_INT8 compName[EPS_NAME_BUFFSIZE];
EPS_INT8 compSysName[EPS_NAME_BUFFSIZE];
EPS_INT8* pPos = NULL;
EPS_INT32 nSegCnt = 0;
+ EPS_BOOL bBreak = FALSE;
-EPS_LOG_FUNCIN
+ EPS_INT32 ifNum = 0;
+ EPS_INT32 ifCnt = 0;
+ EPS_UINT8* ifBuf = NULL;
+#if LCOMSW_USE_MULTI_IF
+ EPS_UINT32 ifBufSize = 0;
+#endif
+
+ EPS_LOG_FUNCIN
/*** Initialize Local & global Variables */
if(epsCmnFnc.getTime){
- tmStart = tmReq = epsCmnFnc.getTime();
+ tmStart = tmReq = tmNow = epsCmnFnc.getTime();
} else{
timeout = tmStart = tmNow = tmReq = 0;
}
@@ -581,52 +657,88 @@ EPS_LOG_FUNCIN
EPS_RETURN( EPS_ERR_INV_ARG_PRINTER_ID )
}
+#if LCOMSW_USE_MULTI_IF
+ ifNum = epsNetFnc.enumInterface(NULL, ifBufSize);
+ if(ifNum > 0){
+ ifBufSize = ifNum * EPS_IFNAME_LEN;
+ ifBuf = (EPS_UINT8*)EPS_ALLOC(ifBufSize);
+ if(NULL == ifBuf){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+ memset(ifBuf, 0, ifBufSize);
+ ifNum = epsNetFnc.enumInterface(ifBuf, ifBufSize);
+ }
+ if(ifNum <= 0){
+ EPS_SAFE_RELEASE( ifBuf );
+ EPS_RETURN( EPS_ERR_COMM_ERROR )
+ }
+#else
+ ifNum = 1;
+#endif
+
+ socks = (EPS_SOCKET*)EPS_ALLOC(sizeof(EPS_SOCKET)*ifNum);
+ for(ifCnt = 0; ifCnt < ifNum; ifCnt++){
+ *(socks+ifCnt) = EPS_INVALID_SOCKET;
+ }
+
/*** probe message broadcast */
- ret = snmpFindStart( &sock, EPSNET_UDP_BROADCAST_ADDR, TRUE );
- if(EPS_ERR_NONE != ret){
- goto snmpProbeByID_END;
+ for(ifCnt = 0; ifCnt < ifNum; ifCnt++){
+ ret = snmpFindStart( socks+ifCnt, EPSNET_UDP_BROADCAST_ADDR, TRUE, ifBuf+(ifCnt*EPS_IFNAME_LEN) );
+ if(EPS_ERR_NONE != ret){
+ goto snmpProbeByID_END;
+ }
}
/*** Check response */
ret = EPS_ERR_PRINTER_NOT_FOUND;
- while( EPS_ERR_PRINTER_NOT_FOUND == ret ||
- EPS_ERR_PRINTER_NOT_USEFUL== ret )
+ while( FALSE == bBreak )
{
- ret = SnmpFindRecv(sock, printPort, printProtocol, compSysName, compName, printer);
-
- /* epsCancelFindPriter() */
- if( epsCmnFnc.lockSync && epsCmnFnc.unlockSync ){
- if( 0 == epsCmnFnc.lockSync() ){
- if( g_FindBreak ){
- epsCmnFnc.unlockSync();
- break;
- }
- epsCmnFnc.unlockSync();
+ for(ifCnt = 0; ifCnt < ifNum; ){
+ ret = SnmpFindRecv( *(socks+ifCnt), printPort, printProtocol, compSysName, compName, printer);
+
+ if( EPS_COM_NOT_RECEIVE == ret ){
+ ifCnt++; /* next interface */
+ } else if(EPS_ERR_PRINTER_NOT_FOUND == ret ){
+ } else if(EPS_ERR_PRINTER_NOT_USEFUL == ret ){
+ } else{
+ bBreak = TRUE;
+ break;
}
- }
- /* Timeout */
- if(timeout > 0){
- tmNow = epsCmnFnc.getTime();
- tmSpan = (EPS_UINT32)(tmNow - tmStart);
- /*EPS_DBGPRINT( ("TM %u - %u <> %u\n", tmNow, tmStart, tmSpan) )*/
- if( tmSpan >= timeout ){
+ /* epsCancelFindPriter() */
+ if( isFindCanceled() ){
+ bBreak = TRUE;
break;
}
+
+ /* Timeout */
+ if(timeout > 0){
+ tmNow = epsCmnFnc.getTime();
+ tmSpan = (EPS_UINT32)(tmNow - tmStart);
+ /*EPS_DBGPRINT( ("TM %u - %u <> %u\n", tmNow, tmStart, tmSpan) )*/
+ if( tmSpan >= timeout ){
+ bBreak = TRUE;
+ break;
+ }
+ }
}
+ if(bBreak)break;
/*EPS_DBGPRINT( ("TM %u - %u <> %u\n", tmNow, tmStart, tmSpan) )*/
if( EPS_COM_NOT_RECEIVE == ret ){
+ ret = EPS_ERR_PRINTER_NOT_FOUND;
/* beef up */
if( EPSNET_FIND_REREQUEST_TIME <= (EPS_UINT32)(tmNow - tmReq) ){
/*EPS_DBGPRINT( ("beef up\n") )*/
- ret = snmpFindStart( &sock, EPSNET_UDP_BROADCAST_ADDR, TRUE );
- if(EPS_ERR_NONE != ret){
- goto snmpProbeByID_END;
+ for(ifCnt = 0; ifCnt < ifNum; ifCnt++){
+ ret = snmpFindStart( socks+ifCnt, EPSNET_UDP_BROADCAST_ADDR, TRUE, ifBuf+(ifCnt*EPS_IFNAME_LEN) );
+ if(EPS_ERR_NONE != ret){
+ bBreak = TRUE;
+ break;
+ }
}
}
- ret = EPS_ERR_PRINTER_NOT_FOUND;
} else{
tmReq = tmNow;
}
@@ -639,7 +751,11 @@ EPS_LOG_FUNCIN
/*** Return to Caller */
snmpProbeByID_END:
- snmpFindEnd(sock);
+ for(ifCnt = 0; ifCnt < ifNum; ifCnt++){
+ snmpFindEnd(*(socks+ifCnt));
+ }
+ EPS_SAFE_RELEASE( ifBuf );
+ EPS_SAFE_RELEASE( socks );
if( EPS_ERR_NONE != ret ){
EPS_SAFE_RELEASE( *printer );
@@ -673,6 +789,7 @@ EPS_ERR_CODE snmpGetStatus(
EPS_SOCKET sock,
const EPS_INT8* address,
+ EPS_UINT32 egID,
EPS_STATUS_INFO* pstInfo
){
@@ -685,24 +802,25 @@ EPS_LOG_FUNCIN
memset(&pdu, 0, sizeof(pdu));
for(retry = 0; retry < EPSNET_STAT_RETRY; retry++){
- ret = SnmpTransactS(sock, address, EPSNET_STAT_RECV_TIMEOUT,
- s_oidPrvStatus, ASN_PDU_GET_NEXT, &pdu);
+ ret = snmpTransactS(sock, address, EPSNET_STAT_RECV_TIMEOUT,
+ s_oidPrvStatus, ASN_PDU_GET_NEXT, SNMP_COMMUNITY_STR,
+ NULL, &pdu);
if(EPS_ERR_NONE == ret ){
break;
}
- EPS_REREASE_VARIANT( pdu );
- EPS_DBGPRINT(("GetStatus retry %d\n", retry))
+ EPS_SNMP_REREASE_VARIANT( pdu );
+ /*EPS_DBGPRINT(("GetStatus retry %d\n", retry))*/
}
if( EPS_ERR_NONE == ret ){
if(ASN_VT_OCTET_STRING == pdu.type){
- ret = serAnalyzeStatus(pdu.val.v_str, pstInfo);
+ ret = serAnalyzeStatus(pdu.val.v_str, egID, pstInfo);
} else{
ret = EPS_ERR_COMM_ERROR;
}
}
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
EPS_RETURN( ret )
}
@@ -712,6 +830,7 @@ EPS_ERR_CODE snmpGetStatus_Page(
EPS_SOCKET sock,
const EPS_INT8* address,
+ EPS_UINT32 egID,
EPS_STATUS_INFO* pstInfo
){
@@ -722,25 +841,27 @@ EPS_ERR_CODE snmpGetStatus_Page(
EPS_LOG_FUNCIN
+ (void)egID;
+
+ memset(pstInfo, 0, sizeof(EPS_STATUS_INFO) );
pstInfo->nState = EPS_ST_IDLE;
pstInfo->nError = EPS_PRNERR_NOERROR;
pstInfo->nWarn = EPS_PRNWARN_NONE;
pstInfo->nCancel= EPS_CAREQ_NOCANCEL;
pstInfo->nInkNo = 0;
- memset(pstInfo->nColorType, 0, sizeof(pstInfo->nColorType) );
- memset(pstInfo->nColor, 0, sizeof(pstInfo->nColor) );
memset(&pdu, 0, sizeof(pdu));
/* get Device Status */
for(retry = 0; retry < EPSNET_STAT_RETRY; retry++){
- ret = SnmpTransactS(sock, address, EPSNET_STAT_RECV_TIMEOUT,
- s_oidDevStatus, ASN_PDU_GET_NEXT, &pdu);
+ ret = snmpTransactS(sock, address, EPSNET_STAT_RECV_TIMEOUT,
+ s_oidDevStatus, ASN_PDU_GET_NEXT, SNMP_COMMUNITY_STR,
+ NULL, &pdu);
if(EPS_ERR_NONE == ret ){
break;
}
- EPS_REREASE_VARIANT( pdu );
- EPS_DBGPRINT(("GetStatus retry %d\n", retry))
+ EPS_SNMP_REREASE_VARIANT( pdu );
+ /*EPS_DBGPRINT(("GetStatus retry %d\n", retry))*/
}
if( EPS_ERR_NONE == ret && ASN_VT_INTEGER == pdu.type){
devstat = pdu.val.v_long;
@@ -748,17 +869,18 @@ EPS_ERR_CODE snmpGetStatus_Page(
ret = EPS_ERR_COMM_ERROR;
goto snmpGetStatus_END;
}
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
/* get Printer Status */
for(retry = 0; retry < EPSNET_STAT_RETRY; retry++){
- ret = SnmpTransactS(sock, address, EPSNET_STAT_RECV_TIMEOUT,
- s_oidPrinterStatus, ASN_PDU_GET_NEXT, &pdu);
+ ret = snmpTransactS(sock, address, EPSNET_STAT_RECV_TIMEOUT,
+ s_oidPrinterStatus, ASN_PDU_GET_NEXT, SNMP_COMMUNITY_STR,
+ NULL, &pdu);
if(EPS_ERR_NONE == ret ){
break;
}
- EPS_REREASE_VARIANT( pdu );
- EPS_DBGPRINT(("GetStatus retry %d\n", retry))
+ EPS_SNMP_REREASE_VARIANT( pdu );
+ /*EPS_DBGPRINT(("GetStatus retry %d\n", retry))*/
}
if( EPS_ERR_NONE == ret && ASN_VT_INTEGER == pdu.type){
prnstat = pdu.val.v_long;
@@ -766,7 +888,7 @@ EPS_ERR_CODE snmpGetStatus_Page(
ret = EPS_ERR_COMM_ERROR;
goto snmpGetStatus_END;
}
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
/*EPS_DBGPRINT(("%d / %d\n", devstat, prnstat))*/
switch(devstat){
@@ -813,17 +935,18 @@ EPS_ERR_CODE snmpGetStatus_Page(
if( EPS_ST_ERROR == pstInfo->nState ){
/* get error reason */
for(retry = 0; retry < EPSNET_STAT_RETRY; retry++){
- ret = SnmpTransactS(sock, address, EPSNET_STAT_RECV_TIMEOUT,
- s_oidPrinterError, ASN_PDU_GET_NEXT, &pdu);
+ ret = snmpTransactS(sock, address, EPSNET_STAT_RECV_TIMEOUT,
+ s_oidPrinterError, ASN_PDU_GET_NEXT, SNMP_COMMUNITY_STR,
+ NULL, &pdu);
if(EPS_ERR_NONE == ret ){
break;
}
- EPS_REREASE_VARIANT( pdu );
- EPS_DBGPRINT(("GetStatus retry %d\n", retry))
+ EPS_SNMP_REREASE_VARIANT( pdu );
+ /*EPS_DBGPRINT(("GetStatus retry %d\n", retry))*/
}
if( EPS_ERR_NONE == ret && ASN_VT_OCTET_STRING == pdu.type){
- EPS_DBGPRINT(("0x%02X\n", pdu.val.v_str[0]))
+ /*EPS_DBGPRINT(("0x%02X\n", pdu.val.v_str[0]))*/
if( pdu.val.v_str[0] & MIB_PRERR_NOPAPER ){
pstInfo->nError = EPS_PRNERR_PAPEROUT;
} else if( pdu.val.v_str[0] & MIB_PRERR_NOINK ){
@@ -842,7 +965,7 @@ EPS_ERR_CODE snmpGetStatus_Page(
}
snmpGetStatus_END:
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
EPS_RETURN( ret )
}
@@ -884,13 +1007,13 @@ EPS_ERR_CODE snmpGetInkInfo(
if( EPS_ERR_NONE == ret ){
if(ASN_VT_OCTET_STRING == pdu.type){
- ret = serAnalyzeStatus(pdu.val.v_str, pstInfo);
+ ret = serAnalyzeStatus(pdu.val.v_str, 0, pstInfo);
} else{
ret = EPS_ERR_COMM_ERROR;
}
}
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
EPS_RETURN( ret )
}
@@ -906,6 +1029,7 @@ EPS_ERR_CODE snmpGetInkInfo_Page(
EPS_SOCKET soc;
ASN_VARIANT pdu;
EPS_INT32 i;
+ EPS_INT32 nMax[EPS_INK_NUM];
EPS_LOG_FUNCIN
@@ -919,16 +1043,16 @@ EPS_ERR_CODE snmpGetInkInfo_Page(
}
/* walk MarkerName record */
- i = 0;
ret = SnmpWalkMib(soc, address, s_oidMarkerColorant, &pdu);
- while(EPS_ERR_NONE == ret){
+ for(i = 0; EPS_ERR_NONE == ret && i < EPS_INK_NUM; i++){
if(ASN_VT_OCTET_STRING == pdu.type){
pdu.val.v_str[pdu.length] = '\0';
- pstInfo->nColorType[i++] = GetColorID(pdu.val.v_str);
+ /*EPS_DBGPRINT(("%s\n", pdu.val.v_str));*/
+ pstInfo->nColorType[i] = GetColorID(pdu.val.v_str);
}
/* next */
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
ret = SnmpWalkMib(soc, address, NULL, &pdu);
}
if(EPS_COM_NEXT_RECORD == ret){
@@ -940,17 +1064,34 @@ EPS_ERR_CODE snmpGetInkInfo_Page(
pstInfo->nInkNo = i;
+ /* walk MaxLevel record */
+ for(i = 0; i < EPS_INK_NUM; i++)nMax[i] = 100;
+ ret = SnmpWalkMib(soc, address, s_oidMarkerMaxLevel, &pdu);
+ for(i = 0; EPS_ERR_NONE == ret && i < pstInfo->nInkNo; i++){
+ if(ASN_VT_INTEGER == pdu.type){
+ /*EPS_DBGPRINT(("%d\n", pdu.val.v_long));*/
+ nMax[i] = pdu.val.v_long;
+ }
+
+ /* next */
+ EPS_SNMP_REREASE_VARIANT( pdu );
+ ret = SnmpWalkMib(soc, address, NULL, &pdu);
+ }
+ ret = EPS_ERR_NONE; /* ignore error */
+
/* walk MarkerLevel record */
- i = 0;
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
ret = SnmpWalkMib(soc, address, s_oidMarkerLevel, &pdu);
- while(EPS_ERR_NONE == ret){
- if(ASN_VT_INTEGER == pdu.type){
- pstInfo->nColor[i++] = serInkLevelNromalize(pdu.val.v_long);
+ for(i = 0; EPS_ERR_NONE == ret && i < pstInfo->nInkNo; i++){
+ if(ASN_VT_INTEGER == pdu.type && nMax[i] > 0){
+ /*EPS_DBGPRINT(("%d\n", pdu.val.v_long));*/
+ pstInfo->nColor[i] = pdu.val.v_long * 100 / nMax[i];
+ } else{
+ pstInfo->nColor[i] = 0;
}
/* next */
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
ret = SnmpWalkMib(soc, address, NULL, &pdu);
}
if(EPS_COM_NEXT_RECORD == ret){
@@ -962,7 +1103,7 @@ EPS_ERR_CODE snmpGetInkInfo_Page(
snmpGetInkInfo_END:
snmpCloseSocket(&soc);
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
EPS_RETURN( ret )
}
@@ -971,7 +1112,7 @@ snmpGetInkInfo_END:
/*******************************************|********************************************/
/* */
-/* Function name: snmpGetPMString() */
+/* Function name: snmpInfoCommand() */
/* */
/* Arguments */
/* --------- */
@@ -990,11 +1131,11 @@ snmpGetInkInfo_END:
/* PM String : pString */
/* */
/*******************************************|********************************************/
-EPS_ERR_CODE snmpGetPMString(
+EPS_ERR_CODE snmpInfoCommand(
const EPS_PRINTER_INN* printer,
- EPS_INT32 type,
- EPS_UINT8* pString,
+ EPS_INT32 cmd,
+ EPS_UINT8** pString,
EPS_INT32* bufSize
){
@@ -1004,48 +1145,265 @@ EPS_ERR_CODE snmpGetPMString(
EPS_LOG_FUNCIN
- memset(&pdu, 0, sizeof(pdu));
-
/* Create GetPM command */
- if(1 == type){
+ switch(cmd){
+ case EPS_CBTCOM_ST:
+ sprintf(cOid, "%s.1.%d.%d.%d.%d.%d", s_oidPrvCtrl, 's', 't', 0x01, 0x00, 0x01);
+ break;
+ case EPS_CBTCOM_PM:
sprintf(cOid, "%s.1.%d.%d.%d.%d.%d", s_oidPrvCtrl, 'p', 'm', 0x01, 0x00, 0x01);
- } else if(2 == type){
+ break;
+ case EPS_CBTCOM_PM2:
sprintf(cOid, "%s.1.%d.%d.%d.%d.%d", s_oidPrvCtrl, 'p', 'm', 0x01, 0x00, 0x02);
- } else{
+ break;
+ case EPS_CBTCOM_PM3:
+ ret = BlkInfoCommand(printer, cmd, pString, bufSize);
+ EPS_RETURN( ret )
+ break;
+ case EPS_CBTCOM_CD:
+ sprintf(cOid, "%s.1.%d.%d.%d.%d.%d", s_oidPrvCtrl, 'c', 'd', 0x01, 0x00, 0x00);
+ break;
+ case EPS_CBTCOM_VI5:
+ sprintf(cOid, "%s.1.%d.%d.%d.%d.%d", s_oidPrvCtrl, 'v', 'i', 0x01, 0x00, 0x05);
+ break;
+ default:
EPS_RETURN( EPS_ERR_OPR_FAIL )
}
- ret = SnmpTransact(printer->location, EPSNET_RECV_TIMEOUT, cOid, ASN_PDU_GET, &pdu);
+ memset(&pdu, 0, sizeof(pdu));
+
+ ret = SnmpTransact(printer->location, EPSNET_RECV_TIMEOUT, cOid, ASN_PDU_GET, &pdu);
if( EPS_ERR_NONE == ret ){
if(ASN_VT_OCTET_STRING == pdu.type){
- *bufSize = Min((EPS_UINT32)*bufSize, pdu.length-1);
- memcpy(pString, pdu.val.v_str+1, *bufSize);
+ *bufSize = pdu.length-1;
+ if(NULL == *pString){
+ *pString = (EPS_UINT8*)EPS_ALLOC(*bufSize);
+ if(NULL == *pString){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+ }
+
+ memcpy(*pString, pdu.val.v_str+1, *bufSize);
+ } else{
+ ret = EPS_ERR_COMM_ERROR;
+ }
+ }
+ EPS_SNMP_REREASE_VARIANT( pdu );
+
+ EPS_RETURN( ret )
+}
+
+
+EPS_ERR_CODE BlkInfoCommand(
+
+ const EPS_PRINTER_INN* printer,
+ EPS_INT32 cmd,
+ EPS_UINT8** pResult,
+ EPS_INT32* bufSize
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_SOCKET sock = EPS_INVALID_SOCKET;
+ ASN_VARIANT pdu;
+ EPS_INT8 cOid[SNMP_MAX_OID];
+ EPS_INT32 packetSize = 0;
+ EPS_INT32 packetNum = 0;
+ EPS_INT32 rspSize = 0;
+ EPS_INT32 totalRespSize = 0;
+ EPS_INT32 n = 0;
+
+ EPS_LOG_FUNCIN
+
+ if(NULL == *pResult && 0 == *bufSize){
+ *pResult = (EPS_UINT8*)EPS_ALLOC(EPS_PM_BASESIZE);
+ if(NULL == *pResult){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+ *bufSize = EPS_PM_BASESIZE;
+ }
+
+ ret = snmpOpenSocket(&sock);
+ if(EPS_ERR_NONE != ret){
+ EPS_RETURN( ret );
+ }
+
+ /* step 1: get reply size */
+ switch(cmd){
+ case EPS_CBTCOM_PM3:
+ sprintf(cOid, "%s.1.%d.%d.%d.%d.%d.%d.%d.%d.%d", s_oidPrvCtrl, 'p', 'm', 0x05, 0x00, 0x03,
+ 0x00, 0x00, (*bufSize) & 0xFF, ((*bufSize) >> 8) & 0xFF );
+ break;
+ default:
+ EPS_RETURN( EPS_ERR_OPR_FAIL )
+ }
+
+ memset(&pdu, 0, sizeof(pdu));
+
+ ret = snmpTransactS(sock, printer->location, EPSNET_RECV_TIMEOUT,
+ cOid, ASN_PDU_GET, "public", NULL, &pdu);
+ if(EPS_ERR_NONE != ret){
+ snmpCloseSocket(&sock);
+ EPS_SAFE_RELEASE(*pResult);
+ *bufSize = 0;
+ EPS_RETURN( ret );
+ }
+ if( ASN_VT_OCTET_STRING != pdu.type ){
+ ret = EPS_ERR_COMM_ERROR;
+ } else if(pdu.length < 8
+ || 0 == memcmp(&pdu.val.v_str[1], "pm:;\x0C", 5)
+ || 0 == memcmp(&pdu.val.v_str[1], "pm:NA;\x0C", 7))
+ {
+ ret = EPS_ERR_PRINTER_NOT_SUPPORTED;
+ } else if(pdu.length < 10
+ || 0 == memcmp(&pdu.val.v_str[1], "pm:BUSY;\x0C", 9) )
+ {
+ ret = EPS_ERR_COMM_ERROR;
+ } else if(pdu.length < 14){ /* unknown response */
+ ret = EPS_ERR_PRINTER_NOT_SUPPORTED;
+ }
+
+ if(EPS_ERR_NONE != ret){
+ snmpCloseSocket(&sock);
+ EPS_SAFE_RELEASE(*pResult);
+ *bufSize = 0;
+ EPS_RETURN( ret );
+ }
+
+ packetNum = ((EPS_UINT32)pdu.val.v_str[9] & 0xFF) + ((EPS_UINT32)pdu.val.v_str[10]<<8);
+ packetSize= ((EPS_UINT32)pdu.val.v_str[11] & 0xFF) + ((EPS_UINT32)pdu.val.v_str[12]<<8);
+
+ EPS_MEM_GROW(EPS_UINT8*, *pResult, bufSize, packetNum*packetSize )
+ if(NULL == *pResult){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+
+ /* step 2: send command */
+ for(n = 1; n <= packetNum && EPS_ERR_NONE == ret; n++ ){
+ if(EPS_CBTCOM_PM3 == cmd){
+ sprintf(cOid, "%s.1.%d.%d.%d.%d.%d.%d.%d.%d.%d", s_oidPrvCtrl, 'p', 'm',
+ 0x05, 0x00, 0x03,
+ (n) & 0xFF, ((n) >> 8) & 0xFF,
+ (packetSize) & 0xFF, ((packetSize) >> 8) & 0xFF);
} else{
+ ret = EPS_ERR_OPR_FAIL;
+ break;
+ }
+
+ ret = snmpTransactS(sock, printer->location, EPSNET_RECV_TIMEOUT,
+ cOid, ASN_PDU_GET, "public", NULL, &pdu);
+ if( EPS_ERR_NONE != ret ){
+ break;
+ }
+ if( ASN_VT_OCTET_STRING != pdu.type ){
+ ret = EPS_ERR_COMM_ERROR;
+ break;
+ } else if(pdu.length < 8
+ || 0 == memcmp(&pdu.val.v_str[1], "pm:;\x0C", 5)
+ || 0 == memcmp(&pdu.val.v_str[1], "pm:NA;\x0C", 7))
+ {
+ ret = EPS_ERR_PRINTER_NOT_SUPPORTED;
+ break;
+ } else if(pdu.length < 10
+ || 0 == memcmp(&pdu.val.v_str[1], "pm:BUSY;\x0C", 9) )
+ {
ret = EPS_ERR_COMM_ERROR;
+ break;
}
+
+ rspSize = ((EPS_UINT32)pdu.val.v_str[17] & 0xFF) + ((EPS_UINT32)pdu.val.v_str[18]<<8);
+ if(*bufSize < rspSize + totalRespSize){
+ ret = EPS_ERR_OPR_FAIL; /* buffer not enough */
+ break;
+ }
+
+ memcpy(*pResult+totalRespSize, pdu.val.v_str+23, rspSize);
+ totalRespSize += rspSize;
+
+ EPS_SNMP_REREASE_VARIANT( pdu );
+ }
+ snmpCloseSocket(&sock);
+
+ if(EPS_ERR_NONE == ret){
+ *bufSize = totalRespSize;
+ } else{
+ EPS_SAFE_RELEASE(*pResult);
+ *bufSize = 0;
}
- EPS_REREASE_VARIANT( pdu );
EPS_RETURN( ret )
}
+
#ifdef GCOMSW_CMD_ESCPAGE
-EPS_ERR_CODE snmpGetPMString_Page(
+EPS_ERR_CODE snmpInfoCommand_Page(
+
+ const EPS_PRINTER_INN* printer,
+ EPS_INT32 cmd,
+ EPS_UINT8** pString,
+ EPS_INT32* bufSize
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+
+ EPS_LOG_FUNCIN
+ switch(cmd){
+ case EPS_CBTCOM_ST:
+ {
+ EPS_STATUS_INFO pstInfo;
+ ret = snmpGetInkInfo_Page(printer->location, &pstInfo);
+ if(EPS_ERR_NONE == ret){
+ EPS_INT32 bufferSize = 15 + 3 * pstInfo.nInkNo;
+ EPS_INT32 i;
+ EPS_UINT8* p;
+ if(NULL == *pString && 0 == *bufSize){
+ *pString = (EPS_UINT8*)EPS_ALLOC(bufferSize);
+ if(NULL == *pString){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+ }
+ *bufSize = bufferSize;
+
+ memcpy(*pString, "\x40\x42\x44\x43\x20\x53\x54\x32\x0D\x0A\x22\x00"
+ "\x0F\x00\x03", 15);
+ *(*pString+13) = 1 + 3 * pstInfo.nInkNo;
+ p = *pString+15;
+ for(i = 0; i < pstInfo.nInkNo; i++){
+ *(p++) = 0;
+ *(p++) = pstInfo.nColorType[i];
+ *(p++) = pstInfo.nColor[i];
+ }
+ }
+ }
+ break;
+ case EPS_CBTCOM_PM:
+ case EPS_CBTCOM_PM2:
+ ret = snmpInfoCommand_PagePM(printer, cmd, pString, bufSize);
+ break;
+ default:
+ EPS_RETURN( EPS_ERR_PROTOCOL_NOT_SUPPORTED )
+ }
+
+ EPS_RETURN( ret )
+}
+
+EPS_ERR_CODE snmpInfoCommand_PagePM(
const EPS_PRINTER_INN* printer,
- EPS_INT32 type,
- EPS_UINT8* pString,
+ EPS_INT32 cmd,
+ EPS_UINT8** pString,
EPS_INT32* bufSize
){
EPS_ERR_CODE ret = EPS_ERR_NONE;
ASN_VARIANT pdu;
EPS_SOCKET soc;
- EPS_UINT32 paperSource = EPS_MPID_AUTO;
+ EPS_UINT32 paperSource = EPS_MPID_NOT_SPEC;
EPS_LOG_FUNCIN
+ (void)cmd;
+
/* walk MarkerLevel record for enum paper tray */
*bufSize = 0;
ret = snmpOpenSocket(&soc);
@@ -1056,21 +1414,36 @@ EPS_ERR_CODE snmpGetPMString_Page(
ret = SnmpWalkMib(soc, printer->location, s_oidInputName, &pdu);
while(EPS_ERR_NONE == ret){
if(ASN_VT_OCTET_STRING == pdu.type){
- if( strncmp(pdu.val.v_str, "MP Tray", pdu.length) == 0 ){
+ /*EPS_DBGPRINT(("%s", pdu.val.v_str));*/
+ if( strncmp(pdu.val.v_str, "MP Tray", Min(pdu.length, 7)) == 0 ||
+ strncmp(pdu.val.v_str, "MSI", Min(pdu.length, 3)) == 0)
+ {
paperSource |= EPS_MPID_MPTRAY;
- } else if( strncmp(pdu.val.v_str, "LC1", pdu.length) == 0 ){
+ } else if( strncmp(pdu.val.v_str, "LC1", Min(pdu.length, 3)) == 0 ||
+ strncmp(pdu.val.v_str, "Tray 1", Min(pdu.length, 6)) == 0 ||
+ strncmp(pdu.val.v_str, "TRAY 1", Min(pdu.length, 6)) == 0)
+ {
paperSource |= EPS_MPID_FRONT1;
- } else if( strncmp(pdu.val.v_str, "LC2", pdu.length) == 0 ){
+ } else if( strncmp(pdu.val.v_str, "LC2", Min(pdu.length, 3)) == 0 ||
+ strncmp(pdu.val.v_str, "Tray 2", Min(pdu.length, 6)) == 0 ||
+ strncmp(pdu.val.v_str, "TRAY 2", Min(pdu.length, 6)) == 0)
+ {
paperSource |= EPS_MPID_FRONT2;
- } else if( strncmp(pdu.val.v_str, "LC3", pdu.length) == 0 ){
+ } else if( strncmp(pdu.val.v_str, "LC3", Min(pdu.length, 3)) == 0 ||
+ strncmp(pdu.val.v_str, "Tray 3", Min(pdu.length, 6)) == 0 ||
+ strncmp(pdu.val.v_str, "TRAY 3", Min(pdu.length, 6)) == 0)
+ {
paperSource |= EPS_MPID_FRONT3;
- } else if( strncmp(pdu.val.v_str, "LC4", pdu.length) == 0 ){
+ } else if( strncmp(pdu.val.v_str, "LC4", Min(pdu.length, 3)) == 0 ||
+ strncmp(pdu.val.v_str, "Tray 4", Min(pdu.length, 6)) == 0 ||
+ strncmp(pdu.val.v_str, "TRAY 4", Min(pdu.length, 6)) == 0)
+ {
paperSource |= EPS_MPID_FRONT4;
}
}
/* next */
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
ret = SnmpWalkMib(soc, printer->location, NULL, &pdu);
}
@@ -1083,8 +1456,14 @@ EPS_ERR_CODE snmpGetPMString_Page(
snmpCloseSocket(&soc);
if(EPS_ERR_NONE == ret){
+ if(NULL == *pString && 0 == *bufSize){
+ *pString = (EPS_UINT8*)EPS_ALLOC(sizeof(EPS_UINT32));
+ if(NULL == *pString){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+ }
*bufSize = sizeof(EPS_UINT32);
- memcpy(pString, &paperSource, sizeof(EPS_UINT32));
+ memcpy(*pString, &paperSource, sizeof(EPS_UINT32));
}
EPS_RETURN( ret )
@@ -1140,7 +1519,7 @@ EPS_LOG_FUNCIN
ret = SnmpTransact(printer->location, EPSNET_RECV_TIMEOUT, cOid, ASN_PDU_GET, &pdu);
if( EPS_ERR_NONE == ret ){
- EPS_DBGPRINT(("%s\n", pdu.val.v_str+1))
+ /*EPS_DBGPRINT(("%s\n", pdu.val.v_str+1))*/
if( (ASN_VT_OCTET_STRING == pdu.type) &&
(strstr(pdu.val.v_str+1,"OK") != NULL) ){
ret = EPS_ERR_NONE;
@@ -1149,7 +1528,7 @@ EPS_LOG_FUNCIN
}
}
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
EPS_RETURN( ret )
}
@@ -1219,7 +1598,7 @@ EPS_LOG_FUNCIN
EPS_RETURN( ret )
}
- ret = SnmpTransactS(soc, address, recvtimeout, oid, request, pdu);
+ ret = snmpTransactS(soc, address, recvtimeout, oid, request, SNMP_COMMUNITY_STR, NULL, pdu);
snmpCloseSocket(&soc);
@@ -1227,29 +1606,40 @@ EPS_LOG_FUNCIN
}
-static EPS_ERR_CODE SnmpTransactS(
+EPS_ERR_CODE snmpTransactS(
EPS_SOCKET sock,
const EPS_INT8* address,
EPS_INT32 recvtimeout,
const EPS_INT8* oid,
- EPS_UINT8 request,
- ASN_VARIANT* pdu
+ EPS_UINT8 command,
+ const EPS_INT8* community,
+ const ASN_VARIANT* requestVal,
+ ASN_VARIANT* responseVal
){
EPS_ERR_CODE ret = EPS_ERR_NONE;
- EPS_UINT8 nRqID = 0;
+ EPS_SNMP_VARBIND request;
+ EPS_INT32 nRqID = 0;
EPS_INT32 nSize = 0;
EPS_INT32 nRecvSize = 0;
EPS_LOG_FUNCIN
- memset(pdu, 0, sizeof(ASN_VARIANT));
+ if(NULL != responseVal){
+ memset(responseVal, 0, sizeof(ASN_VARIANT));
+ }
/* Create GetStatus command */
- nRqID = GetRequestId();
- if( EPS_ERR_NONE != (ret = CreateCommand(g_TrnBuff, request, nRqID,
- oid, &nSize)) ){
+ nRqID = snmpGetRequestId();
+ request.identifire = oid;
+ if(NULL == requestVal){
+ request.value.type = ASN_VT_NULL;
+ } else{
+ request.value = *requestVal;
+ }
+ if( EPS_ERR_NONE != (ret = CreateCommand(g_TrnBuff, command, community,
+ nRqID, &request, 1, &nSize)) ){
EPS_RETURN( ret )
}
@@ -1261,17 +1651,19 @@ EPS_LOG_FUNCIN
ret = EPS_COM_READ_MORE;
while(ret == EPS_COM_READ_MORE){
- /* Wireless network always send pair message and receive.
+ /* Wireless network send pair message and receive.
This behave make probrem that receive befor message. If it occur, try receive once.*/
nRecvSize = epsNetFnc.receive( sock, g_TrnBuff, SNMP_MAX_BUF, recvtimeout );
if( 0 >= nRecvSize ){ /* Error Occur or Not Recieve */
EPS_RETURN( EPS_ERR_COMM_ERROR )
}
- ret = GetPDU(g_TrnBuff, nRecvSize, nRqID, oid, pdu, NULL, 0);
+ ret = ParseResponse(g_TrnBuff, nRecvSize, nRqID, oid, responseVal, NULL, 0);
}
if( EPS_ERR_NONE != ret ){
- EPS_REREASE_VARIANT( *pdu );
+ if(NULL != responseVal){
+ EPS_SNMP_REREASE_VARIANT( *responseVal );
+ }
if(EPS_COM_NEXT_RECORD == ret){
ret = EPS_ERR_COMM_ERROR;
}
@@ -1312,7 +1704,8 @@ static EPS_ERR_CODE SnmpWalkMib(
){
EPS_ERR_CODE ret = EPS_ERR_NONE;
- EPS_UINT8 nRqID = 0;
+ EPS_SNMP_VARBIND request;
+ EPS_INT32 nRqID = 0;
EPS_INT32 nSize = 0;
EPS_INT32 nRecvSize = 0;
static EPS_INT8 orgObjID[SNMP_OBJID_LEN];
@@ -1323,12 +1716,14 @@ EPS_LOG_FUNCIN
memset(pdu, 0, sizeof(ASN_VARIANT));
/* Create command */
- nRqID = GetRequestId();
+ nRqID = snmpGetRequestId();
if( oid ){
strcpy(orgObjID, oid);
strcpy(nextObjID, oid);
}
- ret = CreateCommand(g_TrnBuff, ASN_PDU_GET_NEXT, nRqID, nextObjID, &nSize);
+ request.identifire = nextObjID;
+ request.value.type = ASN_VT_NULL;
+ ret = CreateCommand(g_TrnBuff, ASN_PDU_GET_NEXT, SNMP_COMMUNITY_STR, nRqID, &request, 1, &nSize);
if( EPS_ERR_NONE != ret){
EPS_RETURN( ret )
}
@@ -1347,11 +1742,11 @@ EPS_LOG_FUNCIN
if( 0 >= nRecvSize ){ /* Error Occur or Not Recieve */
EPS_RETURN( EPS_ERR_COMM_ERROR )
}
- ret = GetPDU(g_TrnBuff, nRecvSize, nRqID, orgObjID, pdu, nextObjID, SNMP_OBJID_LEN);
+ ret = ParseResponse(g_TrnBuff, nRecvSize, nRqID, orgObjID, pdu, nextObjID, SNMP_OBJID_LEN);
}
if( EPS_ERR_NONE != ret ){
- EPS_REREASE_VARIANT( *pdu );
+ EPS_SNMP_REREASE_VARIANT( *pdu );
}
EPS_RETURN( ret )
@@ -1390,45 +1785,49 @@ static EPS_ERR_CODE mibGetPhysAddress(
ASN_VARIANT pdu;
EPS_UINT8 *p;
EPS_UINT32 i;
+ EPS_SOCKET sckTmp;
EPS_LOG_FUNCIN
- memset(&pdu, 0, sizeof(pdu));
- ret = SnmpTransact(address, EPSNET_RECV_TIMEOUT, s_oidPhysAddress, ASN_PDU_GET_NEXT, &pdu);
-
+ ret = snmpOpenSocket(&sckTmp);
if( EPS_ERR_NONE != ret ){
- ret = EPS_ERR_COMM_ERROR;
- goto mibGetPhysAddress_END;
- }
- if(ASN_VT_OCTET_STRING != pdu.type){
- ret = EPS_ERR_COMM_ERROR;
- goto mibGetPhysAddress_END;
+ EPS_RETURN( EPS_ERR_COMM_ERROR )
}
- /* convert to string */
- p = (EPS_UINT8*)val;
- vallen -= 2;
- for(i = 0; i < pdu.length && i < vallen; i++ ){
- *p = ((EPS_UINT8)pdu.val.v_str[i] >> 4);
- if(*p < 10){
- *p += 0x30;
- } else{
- *p += 0x37;
- }
- p++;
+ /* walk Tcp port record */
+ ret = SnmpWalkMib(sckTmp, address, s_oidPhysAddress, &pdu);
+ while(EPS_ERR_NONE == ret){
+ if(ASN_VT_OCTET_STRING == pdu.type && pdu.length > 0){
+ /* convert to string */
+ p = (EPS_UINT8*)val;
+ vallen -= 2;
+ for(i = 0; i < pdu.length && i < vallen; i++ ){
+ *p = ((EPS_UINT8)pdu.val.v_str[i] >> 4);
+ if(*p < 10){
+ *p += 0x30;
+ } else{
+ *p += 0x37;
+ }
+ p++;
- *p = ((EPS_UINT8)pdu.val.v_str[i] & 0x0F);
- if(*p < 10){
- *p += 0x30;
- } else{
- *p += 0x37;
+ *p = ((EPS_UINT8)pdu.val.v_str[i] & 0x0F);
+ if(*p < 10){
+ *p += 0x30;
+ } else{
+ *p += 0x37;
+ }
+ p++;
+ }
+ *p = '\0';
+ break;
}
- p++;
+ /* next */
+ EPS_SNMP_REREASE_VARIANT( pdu );
+ ret = SnmpWalkMib(sckTmp, address, NULL, &pdu);
}
- *p = '\0';
-mibGetPhysAddress_END:
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
+ snmpCloseSocket(&sckTmp);
EPS_RETURN( ret )
}
@@ -1475,17 +1874,74 @@ static EPS_ERR_CODE mibConfirmPrintPort(
ret = SnmpWalkMib(sckTmp, address, s_oidTcpConnLocalPort, &pdu);
while(EPS_ERR_NONE == ret){
if(ASN_VT_INTEGER == pdu.type){
- EPS_DBGPRINT(("pdu.val.v_long = %d, %d\n", printPort, pdu.val.v_long));
+ /*EPS_DBGPRINT(("pdu.val.v_long = %d, %d\n", printPort, pdu.val.v_long));*/
if( printPort == pdu.val.v_long) {
break;
}
}
/* next */
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
+ ret = SnmpWalkMib(sckTmp, address, NULL, &pdu);
+ }
+
+ EPS_SNMP_REREASE_VARIANT( pdu );
+ snmpCloseSocket(&sckTmp);
+
+ EPS_RETURN( ret )
+}
+
+/*******************************************|********************************************/
+/* */
+/* Function name: mibGetLanguage() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* printPort EPS_UINT16 I: print port */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Success */
+/* EPS_ERR_MEMORY_ALLOCATION - Failed to allocate memory */
+/* EPS_ERR_COMM_ERROR - Communication Error */
+/* EPS_COM_TINEOUT - Receive timeout */
+/* EPS_COM_NEXT_RECORD - got next recode */
+/* */
+/* Description: */
+/* Confirm whether can use Print-port. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE mibGetLanguage(
+
+ const EPS_INT8* address,
+ EPS_UINT32* lang
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_SOCKET sckTmp;
+ ASN_VARIANT pdu;
+
+ EPS_LOG_FUNCIN
+
+ ret = snmpOpenSocket(&sckTmp);
+ if( EPS_ERR_NONE != ret ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR )
+ }
+
+ ret = SnmpWalkMib(sckTmp, address, s_oidInterpreterDescription, &pdu);
+ while(EPS_ERR_NONE == ret){
+ if(ASN_VT_OCTET_STRING == pdu.type && pdu.length > 0){
+ pdu.val.v_str[pdu.length] = '\0';
+ /*EPS_DBGPRINT(("lang = %s\n", pdu.val.v_str));*/
+ if( serCheckLang(pdu.val.v_str, lang) ) {
+ break;
+ }
+ }
+ /* next */
+ EPS_SNMP_REREASE_VARIANT( pdu );
ret = SnmpWalkMib(sckTmp, address, NULL, &pdu);
}
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
snmpCloseSocket(&sckTmp);
EPS_RETURN( ret )
@@ -1545,7 +2001,7 @@ static EPS_ERR_CODE mibGetMaxMediaXFeedDir(
*val = pdu.val.v_long;
mibGetMaxMediaXFeedDir_END:
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
EPS_RETURN( ret )
}
@@ -1596,7 +2052,10 @@ static EPS_ERR_CODE SnmpFindRecv(
EPS_UINT16 nFromPort = 0; /* Remote Port */
EPS_INT32 cmdLevel = 0;
EPS_INT8 idString[EPS_PRNID_BUFFSIZE];
- EPS_INT8 devidString[SNMP_MAX_BUF];
+ EPS_INT8 infoBuf[SNMP_MAX_BUF];
+ EPS_UINT8* pInfoBuf = (EPS_UINT8*)&infoBuf[0];
+ EPS_INT32 infoBufSize = SNMP_MAX_BUF;
+ EPS_INT32 devIdRes = 0;
EPS_LOG_FUNCIN
@@ -1618,17 +2077,18 @@ static EPS_ERR_CODE SnmpFindRecv(
goto SnmpFindRecv_END;
}
/* Existing check */
- EPS_DBGPRINT(("%s\n", sFromAdder))
+ /*EPS_DBGPRINT(("rcv : %s\n", sFromAdder))*/
if( prtIsRegistered(sFromAdder, NULL, printProtocol) ){
ret = EPS_ERR_PRINTER_NOT_FOUND;
goto SnmpFindRecv_END;
}
/* parse value */
- ret = GetPDU(pRecvBuf, nRecvSize, 0, s_oidPrvPrinter, &pdu, NULL, 0);
+ ret = ParseResponse(pRecvBuf, nRecvSize, 0, NULL, &pdu, NULL, 0);
if( EPS_COM_ERR_REPLY == ret ||
EPS_COM_READ_MORE == ret ||
EPS_COM_NEXT_RECORD == ret ||
+ EPS_ERR_PRINTER_NOT_SUPPORTED == ret ||
EPS_ERR_COMM_ERROR == ret ){
ret = EPS_ERR_PRINTER_NOT_USEFUL;
}
@@ -1639,9 +2099,9 @@ static EPS_ERR_CODE SnmpFindRecv(
ret = EPS_ERR_PRINTER_NOT_USEFUL;
goto SnmpFindRecv_END;
}
- memset(devidString, 0, sizeof(devidString));
- strncpy(devidString, pdu.val.v_str, Min(pdu.length, SNMP_MAX_BUF-1));
- devidString[Min(pdu.length, SNMP_MAX_BUF-1)] = 0;
+ memset(infoBuf, 0, sizeof(infoBuf));
+ strncpy(infoBuf, pdu.val.v_str, Min(pdu.length, SNMP_MAX_BUF-1));
+ infoBuf[Min(pdu.length, SNMP_MAX_BUF-1)] = 0;
/* Create printer data */
*printer = (EPS_PRINTER_INN*)EPS_ALLOC( sizeof(EPS_PRINTER_INN) );
@@ -1651,11 +2111,21 @@ static EPS_ERR_CODE SnmpFindRecv(
}
memset( *printer, 0, sizeof(EPS_PRINTER_INN) );
- if( !serParseDeviceID(devidString, (*printer)->manufacturerName, (*printer)->modelName,
- &cmdLevel, &(*printer)->language) ){
+ devIdRes = serParseDeviceID(infoBuf, (EPS_INT32)strlen(infoBuf),
+ (*printer)->manufacturerName, (*printer)->modelName,
+ &cmdLevel, &(*printer)->language, &(*printer)->egID);
+ if( -1 == devIdRes ){
ret = EPS_ERR_PRINTER_NOT_USEFUL; /* Not ESC/P-R,ESC/Page Printer */
goto SnmpFindRecv_END;
+ } else if( 0 == devIdRes ){
+ ret = mibGetLanguage(sFromAdder, &(*printer)->language);
+ if( EPS_ERR_NONE != ret ){
+ ret = EPS_ERR_PRINTER_NOT_USEFUL;
+ goto SnmpFindRecv_END;
+ }
+ cmdLevel = 1; /* default support */
}
+
if( EPS_PROTOCOL_LPR != printProtocol ){
if( EPS_LANG_ESCPR != (*printer)->language ){
ret = EPS_ERR_PRINTER_NOT_USEFUL; /* Page Printer Not support via Raw */
@@ -1663,21 +2133,26 @@ static EPS_ERR_CODE SnmpFindRecv(
}
}
- switch(cmdLevel){
- case 0: /* Support all. For Uin communication */
- case 2:
+ if(0 == cmdLevel){
+ cmdLevel = 0xFFFFFFFF; /* Support all. For Uin communication */
+ }
+ (*printer)->supportFunc |= EPS_SPF_RGBPRINT; /* RGB print */
+ if(cmdLevel & 0x0002){
(*printer)->supportFunc |= EPS_SPF_JPGPRINT; /* Jpeg print */
- case 1:
- (*printer)->supportFunc |= EPS_SPF_RGBPRINT; /* RGB print */
}
(*printer)->protocol = printProtocol;
(*printer)->printPort = printPort;
strcpy( (*printer)->location, sFromAdder );
+ if( isFindCanceled() ){
+ ret = EPS_ERR_PRINTER_NOT_FOUND;
+ goto SnmpFindRecv_END;
+ }
+
/* confirm whether can use Print-port */
if( 0 != printPort && EPS_LANG_ESCPR == (*printer)->language){
- EPS_DBGPRINT(("mibConfirmPrintPort\n"))
+ /*EPS_DBGPRINT(("mibConfirmPrintPort\n"))*/
ret = mibConfirmPrintPort(sFromAdder, printPort);
if( EPS_ERR_NONE != ret ){
ret = EPS_ERR_PRINTER_NOT_USEFUL;
@@ -1685,13 +2160,17 @@ static EPS_ERR_CODE SnmpFindRecv(
}
}
+ if( isFindCanceled() ){
+ ret = EPS_ERR_PRINTER_NOT_FOUND;
+ goto SnmpFindRecv_END;
+ }
+
/* Get mac address */
ret = mibGetPhysAddress(sFromAdder, (*printer)->macAddress, sizeof((*printer)->macAddress));
if(EPS_ERR_NONE != ret){
ret = EPS_ERR_PRINTER_NOT_USEFUL;
goto SnmpFindRecv_END;
}
-
if( NULL != compSysName && NULL != compName){
/* compaire name */
if( strcmp(compSysName, (*printer)->macAddress) ||
@@ -1702,8 +2181,35 @@ static EPS_ERR_CODE SnmpFindRecv(
}
}
+ /* Get serial number */
+ if( EPS_LANG_ESCPR == (*printer)->language ){
+ /* from st */
+ ret = SnmpTransact(sFromAdder, EPSNET_STAT_RECV_TIMEOUT,
+ s_oidPrvStatus, ASN_PDU_GET_NEXT, &pdu);
+ if(EPS_ERR_NONE == ret){
+ ret = serGetSerialNoFormST(pdu.val.v_str, (*printer)->serialNo, EPS_ADDR_BUFFSIZE);
+ }
+
+ if(EPS_ERR_NONE != ret){
+ /* from cd */
+ memset(infoBuf, 0, sizeof(infoBuf));
+ infoBufSize = sizeof(infoBuf);
+ ret = snmpInfoCommand( *printer, EPS_CBTCOM_CD, &pInfoBuf, &infoBufSize);
+ if(EPS_ERR_NONE == ret){
+ /*ret = */serGetSerialNo(infoBuf, infoBufSize, (*printer)->serialNo);
+ } else{
+ ret = EPS_ERR_NONE; /* ignoure */
+ }
+ }
+ }
+
+ if( isFindCanceled() ){
+ ret = EPS_ERR_PRINTER_NOT_FOUND;
+ goto SnmpFindRecv_END;
+ }
+
/* Get friendly name */
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
ret = SnmpTransact(sFromAdder, EPSNET_RECV_TIMEOUT, s_oidPrvBonjourName, ASN_PDU_GET_NEXT, &pdu);
if( EPS_ERR_NONE == ret && ASN_VT_OCTET_STRING == pdu.type){
if(pdu.length < EPS_NAME_BUFFSIZE-1){
@@ -1726,10 +2232,21 @@ static EPS_ERR_CODE SnmpFindRecv(
}
}
#endif
+#ifdef GCOMSW_CMD_PCL
+ if( EPS_LANG_PCL == (*printer)->language ){
+ EPS_STATUS_INFO stInfo;
+ (*printer)->language = EPS_LANG_PCL_COLOR; /* default: color */
+ if(EPS_ERR_NONE == snmpGetInkInfo_Page((*printer)->location, &stInfo) ){
+ if(1 == stInfo.nInkNo ){
+ (*printer)->language = EPS_LANG_PCL;/* mono */
+ }
+ }
+ }
+#endif
/*** Return to Caller */
SnmpFindRecv_END:
- EPS_REREASE_VARIANT( pdu );
+ EPS_SNMP_REREASE_VARIANT( pdu );
EPS_SAFE_RELEASE( pRecvBuf );
if(EPS_ERR_NONE != ret){
EPS_SAFE_RELEASE( *printer );
@@ -1738,6 +2255,18 @@ SnmpFindRecv_END:
EPS_RETURN( ret )
}
+static EPS_BOOL isFindCanceled()
+{
+ EPS_BOOL canceled = FALSE;
+ if( epsCmnFnc.lockSync && epsCmnFnc.unlockSync ){
+ if( 0 == epsCmnFnc.lockSync() ){
+ canceled = g_FindBreak;
+ epsCmnFnc.unlockSync();
+ }
+ }
+ return canceled;
+}
+
/*******************************************|********************************************/
/* */
@@ -1748,7 +2277,7 @@ SnmpFindRecv_END:
/* Name: Type: Description: */
/* pBuf EPS_INT8* O: SNMP request buffer */
/* nPDUType EPS_UINT8 I: PDU type */
-/* nRqID EPS_UINT8 I: SNMP request ID */
+/* nRqID EPS_INT32 I: SNMP request ID */
/* psIdentifire EPS_INT8* I: MIB number string */
/* pDataSize EPS_INT32* O: SNMP request buffer size */
/* */
@@ -1764,53 +2293,100 @@ static EPS_ERR_CODE CreateCommand(
EPS_INT8* pBuff,
EPS_UINT8 nPDUType,
- EPS_UINT8 nRqID,
- const EPS_INT8* psIdentifire,
+ const EPS_INT8* community,
+ EPS_INT32 nRqID,
+ const EPS_SNMP_VARBIND* reqObjs,
+ EPS_INT32 objNum,
+ EPS_INT32* pDataSize
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_INT8* pPos = pBuff;
+
+ /* version */
+ pPos = snmpMakeIntField(SNMP_VERSION, pPos);
+ /* Community */
+ pPos = snmpMakeStrField(community, (EPS_UINT32)strlen(community), pPos);
+
+ ret = snmpCreatePDU(pPos, nPDUType, nRqID, reqObjs, objNum, pDataSize);
+
+ /* Set All Seupence */
+ *pDataSize += (EPS_INT32)(pPos - pBuff);
+ ret = MakeSequens(pBuff, (EPS_UINT32*)pDataSize, TRUE);
+
+ return ret;
+}
+
+EPS_ERR_CODE snmpCreatePDU(
+
+ EPS_INT8* pBuff,
+ EPS_UINT8 nPDUType,
+ EPS_INT32 nRqID,
+ const EPS_SNMP_VARBIND* reqObjs,
+ EPS_INT32 objNum,
EPS_INT32* pDataSize
){
EPS_ERR_CODE ret = EPS_ERR_NONE;
EPS_INT8* pPos = pBuff;
EPS_INT8* pPDUTop = NULL;
+ EPS_INT8* pObjectsTop = NULL;
EPS_INT8* pObjTop = NULL;
EPS_UINT32 nLen = 0;
+ EPS_INT32 n = 0;
- /* version */
- pPos = MakeIntField(SNMP_VERSION, pPos);
- /* Community */
- pPos = MakeStrField(SNMP_COMMUNITY_STR, pPos);
/* PDU Type */
*(pPos++) = nPDUType;
pPDUTop = pPos;
/* Request ID */
- pPos = MakeIntField(nRqID, pPos);
- /* Error Index */
- pPos = MakeIntField(0, pPos);
+ pPos = snmpMakeIntField(nRqID, pPos);
/* Error Status */
- pPos = MakeIntField(0, pPos);
- pObjTop = pPos;
+ pPos = snmpMakeIntField(0, pPos);
+ /* Error Index */
+ pPos = snmpMakeIntField(0, pPos);
+ pObjectsTop = pPos;
+
+ for(n = 0; n < objNum; n++){
+ pObjTop = pPos;
+ /* OID */
+ ret = MakeOidField(reqObjs->identifire, &pPos);
+ switch(reqObjs->value.type){
+ case ASN_VT_INTEGER:
+ pPos = snmpMakeIntField(reqObjs->value.val.v_long, pPos);
+ break;
+ case ASN_VT_OCTET_STRING:
+ pPos = snmpMakeStrField(reqObjs->value.val.v_str, reqObjs->value.length, pPos);
+ break;
+ case ASN_VT_OBJECT_ID:
+ ret = MakeOidField(reqObjs->value.val.v_str, &pPos);
+ break;
+
+ case ASN_VT_SEQUENCE:
+ /* break; not imple */
+ case ASN_VT_NULL:
+ default:
+ *(pPos++) = ASN_VT_NULL;
+ *(pPos++) = (EPS_INT8)(0);
+ break;
+ }
- /* OID */
- ret = MakeOidField(psIdentifire, &pPos);
- /* Value(NULL) */
- *(pPos++) = ASN_VT_NULL;
- *(pPos++) = (EPS_INT8)(0);
+ /* Set Object Seupence */
+ nLen = (EPS_UINT32)(pPos - pObjTop);
+ ret = MakeSequens(pObjTop, &nLen, TRUE);
+ pPos = pObjTop + nLen;
+ reqObjs++;
+ }
/* Set Object Seupence */
- nLen = (EPS_UINT32)(pPos - pObjTop);
- ret = MakeSequens(pObjTop, &nLen, TRUE);
- ret = MakeSequens(pObjTop, &nLen, TRUE);
+ nLen = (EPS_UINT32)(pPos - pObjectsTop);
+ ret = MakeSequens(pObjectsTop, &nLen, TRUE);
/* Set Object Seupence */
- nLen = (EPS_UINT32)(pObjTop - pPDUTop) + nLen;
+ nLen += (EPS_UINT32)(pObjectsTop - pPDUTop);
ret = MakeSequens(pPDUTop, &nLen, FALSE);
- /* Set All Seupence */
- nLen = (EPS_UINT32)(pPDUTop - pBuff) + nLen;
- ret = MakeSequens(pBuff, &nLen, TRUE);
-
- *pDataSize = nLen;
+ *pDataSize = (EPS_INT32)(pPDUTop - pBuff) + nLen;
return ret;
}
@@ -1818,18 +2394,18 @@ static EPS_ERR_CODE CreateCommand(
/*******************************************|********************************************/
/* */
-/* Function name: GetPDU() */
+/* Function name: ParseResponse() */
/* */
/* Arguments */
/* --------- */
/* Name: Type: Description: */
/* pBuf EPS_INT8* I: SNMP reply buffer */
/* nBufSize EPS_INT32 I: SNMP reply buffer size */
-/* nRqID EPS_UINT8 I: SNMP request ID */
+/* nRqID EPS_INT32 I: SNMP request ID */
/* pObjID EPS_INT8* I: requested OID */
/* pPDU ASN_VARIANT* O: PDU field structure */
/* pResObjID EPS_INT8* O: response OID */
-/* nResObjIDSize EPS_INT8* I: size of pResObjID buffer */
+/* nResObjIDSizeEPS_INT32 I: size of pResObjID buffer */
/* */
/* Return value: */
/* EPS_ERR_NONE - Success */
@@ -1840,11 +2416,10 @@ static EPS_ERR_CODE CreateCommand(
/* Get PDU from SNMP reply. */
/* */
/*******************************************|********************************************/
-static EPS_ERR_CODE GetPDU(
-
+static EPS_ERR_CODE ParseResponse(
EPS_INT8* pBuf,
EPS_INT32 nBufSize,
- EPS_UINT8 nRqID,
+ EPS_INT32 nRqID,
const EPS_INT8* pObjID,
ASN_VARIANT *pPDU,
EPS_INT8* pResObjID,
@@ -1853,7 +2428,7 @@ static EPS_ERR_CODE GetPDU(
){
EPS_ERR_CODE ret = EPS_ERR_NONE;
EPS_UINT32 nAllSize = 0;
- EPS_UINT32 nSeqSize = 0;
+ EPS_SNMP_PDU response;
ASN_VARIANT vField;
EPS_INT32 nDataSize = nBufSize;
const EPS_INT8 *pOrg, *pRes;
@@ -1862,8 +2437,8 @@ static EPS_ERR_CODE GetPDU(
if(EPS_ERR_NONE != r ){ \
EPS_RETURN( r ) \
} else if( ASN_VT_INTEGER != v.type || n != v.val.v_long ){ \
- EPS_DBGPRINT(("type=%d / value=%d\n", v.type, v.val.v_long)) \
- EPS_REREASE_VARIANT( v ); \
+ /*EPS_DBGPRINT(("type=%d / value=%d\n", v.type, v.val.v_long))*/ \
+ EPS_SNMP_REREASE_VARIANT( v ); \
EPS_RETURN( EPS_ERR_COMM_ERROR ) \
}
@@ -1881,18 +2456,96 @@ EPS_LOG_FUNCIN
}
/* check version */
- ret = ParseField( &pBuf, &nDataSize, &vField );
+ ret = snmpParseField( &pBuf, &nDataSize, &vField );
SNMP_CHECK_INTVALUE( ret, vField, SNMP_VERSION );
/* check community */
- ret = ParseField( &pBuf, &nDataSize, &vField );
+ ret = snmpParseField( &pBuf, &nDataSize, &vField );
+#if 0 /* skip */
if( ASN_VT_OCTET_STRING != vField.type
|| NULL == memStrStrWithLen(vField.val.v_str, vField.length, SNMP_COMMUNITY_STR) ){
- EPS_REREASE_VARIANT( vField );
+ EPS_SNMP_REREASE_VARIANT( vField );
EPS_RETURN( EPS_ERR_COMM_ERROR )
}
- EPS_REREASE_VARIANT( vField );
-
+#endif
+ EPS_SNMP_REREASE_VARIANT( vField );
+
+ ret = snmpParsePDU(pBuf, nBufSize, &response);
+ if( EPS_ERR_NONE != ret ){
+ EPS_SNMP_REREASE_PDU(response)
+ EPS_RETURN( ret )
+ }
+
+ /* check Request ID */
+ if(nRqID != 0 && nRqID != response.requestID){
+ if(nRqID > response.requestID ) {
+ /* The data in front of one was received.->retry */
+ ret = EPS_COM_READ_MORE;
+ } else{
+ ret = EPS_ERR_COMM_ERROR;
+ }
+ EPS_SNMP_REREASE_PDU(response)
+ EPS_RETURN( ret )
+ }
+ /* check Error */
+ if(SNMP_ERR_SUCH_NAME == response.errorStatus ){
+ EPS_SNMP_REREASE_PDU(response)
+ EPS_RETURN( EPS_ERR_PRINTER_NOT_SUPPORTED )
+ } else if( SNMP_ERR_NONE != response.errorStatus ){
+ EPS_SNMP_REREASE_PDU(response)
+ EPS_RETURN( EPS_ERR_COMM_ERROR )
+ }
+
+ /* Check response MIB ID */
+ if(pObjID){
+ pOrg = pObjID;
+ pRes = response.var->identifire;
+ while(*pOrg != '\0' && *pRes != '\0'){
+ if( *pOrg++ < *pRes++ ){
+ /*if( strchr(pOrg, '.') != NULL){*/
+ ret = EPS_COM_NEXT_RECORD;
+ /*} else{ next item } */
+ break;
+ }
+ }
+ }
+ if( pResObjID ){
+ memset(pResObjID, 0, nResObjIDSize);
+ memcpy(pResObjID, response.var->identifire, Min(nResObjIDSize-1, (EPS_INT32)strlen(response.var->identifire)));
+ }
+ /*EPS_DBGPRINT(("\nORG : %s\nRES : %s\n", pObjID, vField.val.v_str))*/
+
+ if(NULL != pPDU){
+ *pPDU = response.var->value;
+ }
+ EPS_SNMP_REREASE_PDU(response)
+
+ EPS_RETURN( ret )
+}
+
+
+EPS_ERR_CODE snmpParsePDU(
+
+ EPS_INT8* pBuf,
+ EPS_INT32 nBufSize,
+ EPS_SNMP_PDU* pdu
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_UINT32 nSeqSize = 0;
+ ASN_VARIANT vField;
+ EPS_INT32 nDataSize = nBufSize;
+ EPS_INT8 *pVar, *pVarTop, *pVarEnd;
+ EPS_INT32 n = 0;
+
+EPS_LOG_FUNCIN
+
+ memset(pdu, 0, sizeof(EPS_SNMP_PDU));
+
+ vField.length = 0;
+ vField.type = ASN_VT_NULL;
+ vField.val.v_str = NULL;
+
/* check PDU Type */
if( (EPS_UINT8)(*pBuf) != ASN_PDU_RESP ){
EPS_RETURN( EPS_ERR_COMM_ERROR )
@@ -1904,79 +2557,86 @@ EPS_LOG_FUNCIN
EPS_RETURN( ret )
}
- /* check Request ID */
- ret = ParseField( &pBuf, &nDataSize, &vField );
- if(nRqID != vField.val.v_long)
- {
- if(EPS_ERR_NONE != ret )
- {
- EPS_RETURN( ret )
- }
- else if( ASN_VT_INTEGER != vField.type ||
- (nRqID != 0 && nRqID > vField.val.v_long ) )
- {
- /* The data in front of one was received.->retry */
- EPS_REREASE_VARIANT( vField );
- EPS_RETURN( EPS_COM_READ_MORE )
- }
+ /* Request ID */
+ ret = snmpParseField( &pBuf, &nDataSize, &vField );
+ if(EPS_ERR_NONE != ret ){
+ EPS_RETURN( ret )
+ }
+ pdu->requestID = vField.val.v_long;
+ if( ASN_VT_INTEGER != vField.type ){
+ /* The data in front of one was received.->retry */
+ EPS_RETURN( EPS_COM_READ_MORE )
}
- /* check Error */
- ret = ParseField( &pBuf, &nDataSize, &vField );
- SNMP_CHECK_INTVALUE( ret, vField, SNMP_ERR_NONE );
-
- /* skip Error Index */
- ret = ParseField( &pBuf, &nDataSize, &vField );
+ /* ErrorStatus */
+ ret = snmpParseField( &pBuf, &nDataSize, &vField );
if(EPS_ERR_NONE != ret ){
EPS_RETURN( ret )
}
- /* skip Sequence Head */
- ret = ParseField( &pBuf, &nDataSize, &vField );
+ pdu->errorStatus = vField.val.v_long;
+
+ /* ErrorIndex */
+ ret = snmpParseField( &pBuf, &nDataSize, &vField );
if(EPS_ERR_NONE != ret ){
EPS_RETURN( ret )
}
- ret = ParseField( &pBuf, &nDataSize, &vField );
+ pdu->errorIndex = vField.val.v_long;
+
+ /* varBind Length */
+ ret = snmpParseField( &pBuf, &nDataSize, &vField );
if(EPS_ERR_NONE != ret ){
EPS_RETURN( ret )
}
+ /* varBind count */
+ pVar = pVarTop = pBuf;
+ pVarEnd = pBuf + vField.length;
+ while(pVarEnd > pVar){
+ /* skip Sequence Head */
+ ret = snmpParseField( &pVar, &nDataSize, &vField );
+ if(EPS_ERR_NONE != ret ){
+ EPS_RETURN( ret )
+ }
+ pVar += vField.length;
+ pdu->varNum++;
+ }
+ pdu->var = (EPS_SNMP_VARBIND*)EPS_ALLOC( sizeof(EPS_SNMP_VARBIND) * pdu->varNum );
+ if(NULL == pdu->var ){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+
+ /* get varBind list */
+ pVar = pVarTop;
+ nDataSize = (EPS_INT32)(pVarEnd - pVarTop);
+ for(n = 0; n < pdu->varNum; n++){
+ /* skip Sequence Head */
+ ret = snmpParseField( &pVar, &nDataSize, &vField );
+ if(EPS_ERR_NONE != ret ){
+ EPS_RETURN( ret )
+ }
- /* Get MIB ID */
- ret = ParseField( &pBuf, &nDataSize, &vField );
- /*EPS_DBGPRINT(("\nORG : %s\nRES : %s\n", pObjID, vField.val.v_str))*/
+ /* Get MIB ID */
+ ret = snmpParseField( &pVar, &nDataSize, &vField );
+ if(EPS_ERR_NONE != ret ){
+ EPS_RETURN( ret )
+ }
+ pdu->var[n].identifire = vField.val.v_str;
+ /*EPS_DBGPRINT(("\nORG : %s\nRES : %s\n", pObjID, vField.val.v_str))*/
- /* Check response MIB ID */
- pOrg = pObjID;
- pRes = vField.val.v_str;
- while(*pOrg != '\0' && *pRes != '\0'){
- if( *pOrg++ < *pRes++ ){
- /*if( strchr(pOrg, '.') != NULL){*/
- ret = EPS_COM_NEXT_RECORD;
- /*} else{ next item } */
- break;
+ /* get valiable */
+ ret = snmpParseField( &pVar, &nDataSize, &vField );
+ if(EPS_ERR_NONE != ret ){
+ EPS_RETURN( ret )
}
- }
- if( pResObjID ){
- memset(pResObjID, 0, nResObjIDSize);
- memcpy(pResObjID, vField.val.v_str, Min(nResObjIDSize-1, (EPS_INT32)strlen(vField.val.v_str)));
- }
-
- EPS_REREASE_VARIANT( vField );
- if( EPS_ERR_NONE != ret){
- EPS_RETURN( ret )
+ pdu->var[n].value = vField;
}
- /* get valiable */
- ret = ParseField( &pBuf, &nDataSize, &vField );
-
- *pPDU = vField;
-
EPS_RETURN( ret )
}
/*******************************************|********************************************/
/* */
-/* Function name: ParseField() */
+/* Function name: snmpParseField() */
/* */
/* Arguments */
/* --------- */
@@ -1994,7 +2654,7 @@ EPS_LOG_FUNCIN
/* Parse PDU field. And move next area. */
/* */
/*******************************************|********************************************/
-static EPS_ERR_CODE ParseField(
+EPS_ERR_CODE snmpParseField(
EPS_INT8** pSrc,
EPS_INT32* pDataSize,
@@ -2047,10 +2707,10 @@ static EPS_ERR_CODE ParseField(
break;
case ASN_VT_SEQUENCE:
+ default:
pVal->val.v_str = *pSrc;
return ret; /* Not move next */
break;
-
}
*pSrc += pVal->length; /* Move next field */
@@ -2062,7 +2722,7 @@ static EPS_ERR_CODE ParseField(
/*******************************************|********************************************/
/* */
-/* Function name: MakeIntField() */
+/* Function name: snmpMakeIntField() */
/* */
/* Arguments */
/* --------- */
@@ -2077,20 +2737,22 @@ static EPS_ERR_CODE ParseField(
/* Make BER integer field. And move next area. */
/* */
/*******************************************|********************************************/
-static EPS_INT8* MakeIntField(
+EPS_INT8* snmpMakeIntField(
EPS_INT32 nSrc,
EPS_INT8* pDst
){
EPS_INT16 nLen = 0;
+ EPS_INT32 nLengthLen = 0;
/* Field type */
*(pDst++) = ASN_VT_INTEGER;
/* Field value */
nLen = IntToBer(nSrc, pDst);
- memmove(pDst+nLen, pDst , nLen);
+ nLengthLen = LengthOfLength(nLen);
+ memmove(pDst+nLengthLen, pDst, nLen);
/* Field length */
pDst = MakeLength( nLen, pDst );
@@ -2102,7 +2764,7 @@ static EPS_INT8* MakeIntField(
/*******************************************|********************************************/
/* */
-/* Function name: MakeStrField() */
+/* Function name: snmpMakeStrField() */
/* */
/* Arguments */
/* --------- */
@@ -2117,14 +2779,13 @@ static EPS_INT8* MakeIntField(
/* Make BER string field. And move next area. */
/* */
/*******************************************|********************************************/
-static EPS_INT8* MakeStrField(
+EPS_INT8* snmpMakeStrField(
const EPS_INT8* pSrc,
+ EPS_UINT32 nLen,
EPS_INT8* pDst
){
- EPS_UINT32 nLen = (EPS_UINT32)strlen(pSrc);
-
/* Field type */
*(pDst++) = ASN_VT_OCTET_STRING;
@@ -2198,7 +2859,7 @@ static EPS_ERR_CODE MakeOidField(
/* Name: Type: Description: */
/* pSrc EPS_INT8* I: PDU buffer(point to length field) */
/* pSize EPS_UINT32* O: pointer for length */
-/* bNeedType EPS_BOOL I: pointer for length */
+/* bNeedType EPS_BOOL I: add pdu type */
/* */
/* Return value: */
/* EPS_ERR_NONE - Success */
@@ -2208,7 +2869,7 @@ static EPS_ERR_CODE MakeOidField(
/* Make BER Sequens. And move next area. */
/* */
/*******************************************|********************************************/
-static EPS_ERR_CODE MakeSequens(
+EPS_ERR_CODE MakeSequens(
EPS_INT8* pSrc,
EPS_UINT32* pSize,
@@ -2219,17 +2880,7 @@ static EPS_ERR_CODE MakeSequens(
EPS_INT8 nLengthLen = 0;
/* Length field length calculation */
- if(*pSize <= 0x7F){
- nLengthLen = 1;
- } else{
- if( EPS_ENDIAN_LITTLE == cpuEndian ){
- nLengthLen = (sizeof(EPS_INT32) / sizeof(EPS_INT8)) - 1;
- for(; nLengthLen > -1 && 0x00 == *((EPS_UINT8*)pSize + nLengthLen); nLengthLen--);
- } else{
- EPS_INT8 nLim = sizeof(EPS_INT32) / sizeof(EPS_INT8);
- for(; nLengthLen < nLim && 0x00 == *((EPS_INT8*)pSize + nLengthLen); nLengthLen++);
- }
- }
+ nLengthLen = LengthOfLength(*pSize);
if( bNeedType ){
memmove(pSrc + nLengthLen + 1, pSrc, *pSize); /* 1 = Field type */
@@ -2253,6 +2904,27 @@ static EPS_ERR_CODE MakeSequens(
return ret;
}
+static EPS_UINT32 LengthOfLength(
+
+ EPS_UINT32 length
+
+){
+ EPS_INT8 nLengthLen = 0;
+ EPS_INT32 n = 0;
+
+ if(length <= 0x7F){
+ nLengthLen = 1;
+ } else{
+ for(n = sizeof(EPS_UINT32)*8-1; n >= 0; n--){
+ if( (length >> n) & 1 ){
+ break;
+ }
+ }
+ nLengthLen = ((n+1) >> 3) + (((n+1)&0x07)?1:0) + 1;
+ }
+
+ return nLengthLen;
+}
/*******************************************|********************************************/
/* */
@@ -2292,19 +2964,9 @@ static EPS_ERR_CODE ParseLength(
(*pSrc)++; (*pDataSize)--;
- if( EPS_ENDIAN_LITTLE == cpuEndian ){
- for(n = nLenLength-1; n >= 0; n--){
- *((EPS_INT8*)&(*pLength) + n) = *(*pSrc)++;
- (*pDataSize)--;
- }
- } else{
- for(n = sizeof(EPS_UINT32) - nLenLength; (EPS_UINT8)n < sizeof(EPS_UINT32); n++){
- *((EPS_INT8*)&(*pLength) + n) = *(*pSrc)++;
- (*pDataSize)--;
- if(*pDataSize <= 0){ /* data size not enough */
- return EPS_ERR_COMM_ERROR;
- }
- }
+ for(n = 0; n < nLenLength; n++){
+ *pLength |= (*(*pSrc)++ & 0xFF) << (8 * (nLenLength-n-1) );
+ (*pDataSize)--;
}
} else{
*pLength = *(*pSrc)++;
@@ -2342,32 +3004,18 @@ static EPS_INT8* MakeLength(
EPS_INT8* pDst
){
- if(nLength <= 0x7F){
+ EPS_INT32 n;
+ EPS_UINT32 nLenOfLen = LengthOfLength(nLength);
+
+ if(1 == nLenOfLen){
*(pDst++) = (EPS_INT8)nLength;
} else{
-
- if( EPS_ENDIAN_LITTLE == cpuEndian ){
- EPS_INT8 n = (sizeof(EPS_INT32) / sizeof(EPS_INT8)) - 1;
-
- /* set length */
- for(; n > -1 && 0x00 == *((EPS_INT8*)&nLength + n); n--);
- *(pDst++) = (EPS_INT8)(0x80 & (n+1));
-
- for(; n > -1; n--){
- *(pDst++) = *((EPS_INT8*)&nLength + n);
- }
- } else{
- EPS_INT8 nLim = sizeof(EPS_INT32) / sizeof(EPS_INT8);
- EPS_INT8 n = 0;
-
- /* set length */
- for(; n < nLim && 0x00 == *((EPS_INT8*)&nLength + n); n++);
- *(pDst++) = (EPS_INT8)(0x80 & (nLim-n));
-
- for(; n < nLim; n++){
- *(pDst++) = *((EPS_INT8*)&nLength + n);
+ *(pDst++) = (EPS_INT8)(0x80 | (nLenOfLen-1));
+ for(n = 3; n >= 0; n--){
+ if(0 != (nLength >> (n*8))){
+ *(pDst++) = (nLength >> (n*8));
}
- }
+ }
}
return pDst;
@@ -2565,52 +3213,29 @@ static EPS_UINT16 IntToBer(
){
EPS_UINT16 nCnt = 0;
-
- if( EPS_ENDIAN_LITTLE == cpuEndian ){
- EPS_INT8 n = (sizeof(EPS_INT32) / sizeof(EPS_INT8)) - 1;
-
- for(; n > -1; n--){
- if( 0 == nCnt){
- /* An unnecessary bit is thrown away. */
- if( 0xff == (EPS_INT32)*((EPS_UINT8*)&nSrc + n) ){
- if( n > 0 &&
- *((EPS_UINT8*)&nSrc + n-1) & 0x80 ){
- continue;
- }
- } else if( 0x00 == *((EPS_UINT8*)&nSrc + n) ){
- if( n > 0 &&
- !(*((EPS_UINT8*)&nSrc + n-1) & 0x80) ){
- continue;
- }
+ EPS_INT32 n;
+ EPS_UINT8 b;
+
+ for(n = 0; n < 3; n++){
+ b = (nSrc >> 8*(3-n)) & 0xFF;
+ if( 0 != b ){
+ if(nSrc < 0){
+ if( !(0xFF == b && (nSrc >> 8*(2-n)) & 0x80) ){
+ break;
}
+ } else{
+ break;
}
-
- *(pDst++) = *((EPS_UINT8*)&nSrc + n);
- nCnt++;
}
- } else{
- EPS_INT8 nMax = (sizeof(EPS_INT32) / sizeof(EPS_INT8));
- EPS_INT8 n = 0;
-
- for(; n < nMax; n++){
- if( 0 == nCnt){
- /* An unnecessary bit is thrown away. */
- if( 0xff == *((EPS_UINT8*)&nSrc + n) ){
- if( n < nMax-1 &&
- *((EPS_UINT8*)&nSrc + n+1) & 0x80 ){
- continue;
- }
- } else if( 0x00 == *((EPS_UINT8*)&nSrc + n) ){
- if( n < nMax-1 &&
- !(*((EPS_UINT8*)&nSrc + n+1) & 0x80) ){
- continue;
- }
- }
- }
+ }
- *(pDst++) = *((EPS_UINT8*)&nSrc + n);
- nCnt++;
- }
+ nCnt = 4 - n;
+ if(nSrc > 0 && nCnt < 4 && (nSrc >> 8*(nCnt-1)) & 0x80){
+ nCnt++;
+ }
+
+ for(n = nCnt-1; n > -1; n--){
+ *(pDst++) = (nSrc >> (8*n)) & 0xFF;
}
return nCnt;
@@ -2641,64 +3266,42 @@ static EPS_INT32 BerToInt(
){
EPS_INT32 nDst = 0;
+ EPS_INT32 n = 0;
- if( EPS_ENDIAN_LITTLE == cpuEndian ){
- EPS_INT8 nMax = (sizeof(EPS_INT32) / sizeof(EPS_INT8)) - 1;
- EPS_INT32 n = 0;
- EPS_INT32 m = nLen - 1;
-
- for(; n < nMax && m > -1; n++, m--){
- *((EPS_INT8*)&nDst + n) = *(pSrc+m);
- }
-
- if( n < nMax ){
- if( *(pSrc) & 0x80 ){
- memset(((EPS_INT8*)&nDst + n), 0xff, nMax-(n-1));
- } else{
- memset(((EPS_INT8*)&nDst + n), 0x00, nMax-(n-1));
- }
- }
- } else{
- EPS_INT8 nDstSize = (sizeof(EPS_INT32) / sizeof(EPS_INT8));
- EPS_INT32 n = nDstSize-nLen;
- EPS_INT32 m = 0;
-
- if( *(pSrc) & 0x80 ){
- memset(&nDst, 0xff, nDstSize-nLen);
- } else{
- memset(&nDst, 0x00, nDstSize-nLen);
- }
-
- for(; n < nDstSize && m < nLen; n++, m++){
- *((EPS_INT8*)&nDst + n) = *(pSrc+m);
+ if(*pSrc & 0x80){
+ for(n = sizeof(EPS_INT32)-1; n >= nLen; n--){
+ nDst |= 0xFF << (8 * n);
}
}
+ for(n = 0; n < nLen; n++){
+ nDst |= (*(pSrc+n) & 0xFF) << (8 * (nLen-n-1) );
+ }
return nDst;
}
/*******************************************|********************************************/
/* */
-/* Function name: GetRequestId() */
+/* Function name: snmpGetRequestId() */
/* */
/* Arguments */
/* --------- */
/* (none) */
/* */
/* Return value: */
-/* EPS_INT16 : RequestID */
+/* EPS_INT32 : RequestID */
/* */
/* Description: */
/* Generate SNMP request ID (value is between from 1 to 127). */
/* */
/*******************************************|********************************************/
-static EPS_UINT8 GetRequestId(void)
+EPS_INT32 snmpGetRequestId(void)
{
- static EPS_UINT8 nId = 1;
+ static EPS_INT32 nId = 1;
nId++;
- if( (char)0x7f < nId ){
+ if( 0x7fffffff <= nId ){
nId = 1;
}
diff --git a/lib/epson-net-snmp.h b/lib/epson-net-snmp.h
index 35b7f78..6c11c90 100755..100644
--- a/lib/epson-net-snmp.h
+++ b/lib/epson-net-snmp.h
@@ -28,24 +28,87 @@ extern "C" {
/*------------------------------------ Includes -------------------------------------*/
/*******************************************|********************************************/
#include "epson-typedefs.h"
+#include "epson-escpr-pvt.h"
/*----------------------------------- Definitions ------------------------------------*/
/*******************************************|********************************************/
+/* SNMP variables */
+#define ASN_VT_INTEGER (0x02) /* integer */
+#define ASN_VT_OCTET_STRING (0x04) /* octet stream */
+#define ASN_VT_NULL (0x05) /* null */
+#define ASN_VT_OBJECT_ID (0x06) /* OID */
+#define ASN_VT_SEQUENCE (0x30) /* sequence */
+
+/* SNMP message */
+#define ASN_PDU_GET (EPS_UINT8)(0xA0) /* GetRequest */
+#define ASN_PDU_GET_NEXT (EPS_UINT8)(0xA1) /* GetNextRequest */
+#define ASN_PDU_RESP (EPS_UINT8)(0xA2) /* Response */
+#define ASN_PDU_SET (EPS_UINT8)(0xA3) /* SetRequest */
+#define ASN_PDU_TRAP (EPS_UINT8)(0xA4) /* Trap */
+#define ASN_PDU_TRAP_RSP (EPS_UINT8)(0xC2) /* TrapResponse */
+
+
+/*--------------------------- Data Structure Declarations ---------------------------*/
+/*******************************************|********************************************/
+/* SNMP variant type */
+typedef struct tag_ASN_VARIANT {
+ EPS_INT8 type;
+ EPS_UINT32 length;
+ union{
+ EPS_INT32 v_long; /* Integer */
+ EPS_INT8* v_str; /* OCTET_STRING, ASN_VT_OBJECT_ID */
+ } val;
+}ASN_VARIANT;
+
+typedef struct tag_EPS_SNMP_VARBIND {
+ const EPS_INT8* identifire;
+ ASN_VARIANT value;
+}EPS_SNMP_VARBIND;
+
+
+typedef struct tag_EPS_SNMP_PDU {
+ EPS_INT32 requestID;
+ EPS_UINT32 errorStatus;
+ EPS_UINT32 errorIndex;
+ EPS_SNMP_VARBIND *var;
+ EPS_INT32 varNum;
+}EPS_SNMP_PDU;
+
+
+/* If type is OBJECT_ID, ParseField() alloc heap. */
+#define EPS_SNMP_REREASE_VARIANT( v ) \
+ { \
+ if( ASN_VT_OBJECT_ID == (v).type ){ \
+ EPS_SAFE_RELEASE( (v).val.v_str ); \
+ } \
+ (v).type = ASN_VT_NULL; \
+ }
+#define EPS_SNMP_REREASE_PDU( v ) \
+ { \
+ EPS_INT32 vc; \
+ for( vc = 0; vc < (v).varNum; vc++ ){ \
+ EPS_INT8* p = (EPS_INT8*)((v).var[vc].identifire); \
+ EPS_SAFE_RELEASE( p ); \
+ } \
+ EPS_FREE( (v).var ); \
+ }
/****************************************************************************************/
/* public SNMP functions */
-typedef EPS_ERR_CODE (*SNMP_GetStatus )(EPS_SOCKET, const EPS_INT8*, EPS_STATUS_INFO*);
+typedef EPS_ERR_CODE (*SNMP_GetStatus )(EPS_SOCKET, const EPS_INT8*, EPS_UINT32,
+ EPS_STATUS_INFO*);
typedef EPS_ERR_CODE (*SNMP_GetInkInfo )(const EPS_INT8*, EPS_STATUS_INFO* );
-typedef EPS_ERR_CODE (*SNMP_GetPMString )(const EPS_PRINTER_INN*, EPS_INT32,
- EPS_UINT8*, EPS_INT32* );
+typedef EPS_ERR_CODE (*SNMP_InfoCommand )(const EPS_PRINTER_INN*, EPS_INT32,
+ EPS_UINT8**, EPS_INT32* );
typedef EPS_ERR_CODE (*SNMP_MechCommand )(const EPS_PRINTER_INN*, EPS_INT32 );
typedef struct tagEPS_SNMP_FUNCS {
SNMP_GetStatus GetStatus;
SNMP_GetInkInfo GetInkInfo;
- SNMP_GetPMString GetPMString;
+ SNMP_InfoCommand InfoCommand;
SNMP_MechCommand MechCommand;
+ EPS_UINT32 egID;
}EPS_SNMP_FUNCS;
@@ -55,12 +118,23 @@ extern void snmpSetupSTFunctions(EPS_SNMP_FUNCS*, const EPS_PRINTER_INN*
extern EPS_ERR_CODE snmpOpenSocket (EPS_SOCKET* );
extern void snmpCloseSocket (EPS_SOCKET* );
+extern EPS_ERR_CODE snmpTransactS (EPS_SOCKET, const EPS_INT8*, EPS_INT32,
+ const EPS_INT8*, EPS_UINT8, const EPS_INT8*,
+ const ASN_VARIANT*, ASN_VARIANT*);
-extern EPS_ERR_CODE snmpFindStart (EPS_SOCKET*, const EPS_INT8*, EPS_BOOL );
+extern EPS_ERR_CODE snmpFindStart (EPS_SOCKET*, const EPS_INT8*, EPS_BOOL, const EPS_UINT8*);
extern EPS_ERR_CODE snmpFind (EPS_SOCKET, EPS_UINT16, EPS_INT32, EPS_PRINTER_INN**);
extern EPS_ERR_CODE snmpFindEnd (EPS_SOCKET );
extern EPS_ERR_CODE snmpProbeByID (EPS_INT8*, EPS_UINT16, EPS_INT32, EPS_UINT32, EPS_PRINTER_INN**);
+extern EPS_ERR_CODE snmpCreatePDU (EPS_INT8*, EPS_UINT8, EPS_INT32,
+ const EPS_SNMP_VARBIND*, EPS_INT32, EPS_INT32* );
+extern EPS_ERR_CODE snmpParsePDU (EPS_INT8*, EPS_INT32, EPS_SNMP_PDU* );
+extern EPS_INT8* snmpMakeIntField(EPS_INT32, EPS_INT8* );
+extern EPS_INT8* snmpMakeStrField(const EPS_INT8*, EPS_UINT32, EPS_INT8* );
+extern EPS_ERR_CODE snmpParseField (EPS_INT8**, EPS_INT32*, ASN_VARIANT* );
+extern EPS_INT32 snmpGetRequestId(void );
+
#ifdef __cplusplus
} /* extern "C" */
#endif
diff --git a/lib/epson-protocol.c b/lib/epson-protocol.c
index 8a69047..07798d3 100755..100644
--- a/lib/epson-protocol.c
+++ b/lib/epson-protocol.c
@@ -25,11 +25,11 @@
/* EPS_ERR_CODE prtProbePrinterByID (probeParam ); */
/* EPS_ERR_CODE prtProbePrinterByAddr (probeParam ); */
/* EPS_ERR_CODE prtRecoverPE ( ); */
-/* EPS_ERR_CODE prtGetPMString (printer, pString, bufSize ); */
+/* EPS_ERR_CODE prtGetInfo (printer, buffer, bufSize ); */
/* EPS_ERR_CODE prtRegPrinter (printer, bNotify ); */
/* EPS_ERR_CODE prtIsRegistered (Address, Protocol ); */
/* EPS_ERR_CODE prtClearPrinterList (printer ); */
-/* EPS_ERR_CODE prtClearSupportedMedia (printer ); */
+/* EPS_ERR_CODE prtClearPrinterAttribute(printer ); */
/* EPS_ERR_CODE prtSetIdStr (printer, idString ); */
/* */
/*******************************************|********************************************/
@@ -39,6 +39,7 @@
#include "epson-escpr-pvt.h"
#include "epson-escpr-err.h"
#include "epson-escpr-services.h"
+#include "epson-escpr-pm.h"
#include "epson-escpr-mem.h"
#ifdef GCOMSW_CMD_ESCPAGE
#include "epson-escpage.h"
@@ -46,6 +47,9 @@
#ifdef GCOMSW_CMD_ESCPAGE_S
#include "epson-escpage-s.h"
#endif
+#ifdef GCOMSW_CMD_PCL
+#include "epson-pcl.h"
+#endif
#include "epson-protocol.h"
@@ -72,7 +76,7 @@
/*------------------------------------ Definition -----------------------------------*/
/*******************************************|********************************************/
/* Find Printer functions */
-typedef EPS_ERR_CODE (*NET_FindStart )(EPS_SOCKET*, const EPS_INT8*, EPS_BOOL );
+typedef EPS_ERR_CODE (*NET_FindStart )(EPS_SOCKET*, const EPS_INT8*, EPS_BOOL, const EPS_UINT8*);
typedef EPS_ERR_CODE (*NET_FindCheck )(EPS_SOCKET, EPS_PRINTER_INN** );
typedef EPS_ERR_CODE (*NET_FindEnd )(EPS_SOCKET );
@@ -82,9 +86,9 @@ typedef struct tagEPS_FIND_FUNCS {
NET_FindEnd fncEnd; /* End function */
EPS_SOCKET sock; /* socekt */
EPS_INT8 address[EPS_ADDR_BUFFSIZE];
+ EPS_UINT8* ifName;
}EPS_FIND_FUNCS;
-
#define EPS_FINDNOTIFY_DELAY_COUNT (10)
/*-------------------------- ESC/P-R Net Lib Global Variables ------------------------*/
@@ -111,8 +115,6 @@ EPS_INT32 g_FindProtocol;
/*** -------------------------------------------------------------------------------*/
static EPS_PRINTER_LIST epsPrinterList; /* Printer List */
-
-
/*-------------------------------- Local Functions ----------------------------------*/
/*******************************************|********************************************/
#ifdef GCOMSW_PRT_USE_NETWORK
@@ -279,12 +281,18 @@ EPS_ERR_CODE prtFunctionCheck (
if (usbFuncPtrs->findFirst == NULL){
EPS_RETURN( EPS_ERR_INV_FNCP_FINDFIRST )
}
- if (usbFuncPtrs->findNext == NULL){
+ if (usbFuncPtrs->findNext == NULL){
EPS_RETURN( EPS_ERR_INV_FNCP_FINDNEXT )
}
if (usbFuncPtrs->findClose == NULL){
EPS_RETURN( EPS_ERR_INV_FNCP_FINDCLOSE )
}
+ if (usbFuncPtrs->getDeviceID == NULL){
+ EPS_RETURN( EPS_ERR_INV_FNCP_GETDEVICEID )
+ }
+ if (usbFuncPtrs->softReset == NULL){
+ EPS_RETURN( EPS_ERR_INV_FNCP_SOFTRESET )
+ }
#if 0 /* not necessary */
if (cmnFuncPtrs->stateCallback == NULL)
return (EPS_ERR_CODE)EPS_ERR_INV_FNCP_NOTIFYCALLBACK;
@@ -788,84 +796,7 @@ EPS_ERR_CODE prtSetupJobFunctions (
/*******************************************|********************************************/
/* */
-/* Function name: prtGetInkStatus() */
-/* */
-/* Arguments */
-/* --------- */
-/* Name: Type: Description: */
-/* status EPS_STATUS* Pointer to the printer status. */
-/* */
-/* Return value: */
-/* EPS_ERR_NONE - Success */
-/* EPS_ERR_NEED_BIDIRECT - Need Bi-Directional Communication */
-/* EPS_ERR_COMM_ERROR - Failed to send command */
-/* EPS_ERR_NOT_OPEN_IO - Cannot Open I/O Portal */
-/* EPS_ERR_NOT_CLOSE_IO - Cannot Close I/O Portal */
-/* EPS_ERR_PROTOCOL_NOT_SUPPORTED - Unsupported function Error */
-/* */
-/* Description: */
-/* Gets the Ink Infomation. */
-/* */
-/*******************************************|********************************************/
-EPS_ERR_CODE prtGetInkInfo (
-
- const EPS_PRINTER_INN* printer,
- EPS_INK_INFO* info
-
-){
-/*** Declare Variable Local to Routine */
- EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
- EPS_STATUS_INFO lclStatus;
- EPS_INT32 idx;
-
- EPS_LOG_FUNCIN
-
-/*** Validate communication mode */
- if ( !EPS_IS_BI_PROTOCOL(printer->protocol) ){
- EPS_RETURN( EPS_ERR_NEED_BIDIRECT )
- }
-
- memset(&lclStatus, 0, sizeof(lclStatus));
-/*** protocol GetStatus */
- switch( EPS_PRT_PROTOCOL( printer->protocol ) ){
-#ifdef GCOMSW_PRT_USE_USB
- case EPS_PROTOCOL_USB:
- ret = usbGetStatus(&lclStatus, NULL, NULL);
- break;
-#endif
-
-#ifdef GCOMSW_PRT_USE_LPR
- case EPS_PROTOCOL_LPR:
- ret = lprGetInkInfo(&lclStatus);
- break;
-#endif
-
-#ifdef GCOMSW_PRT_USE_RAW
- case EPS_PROTOCOL_RAW:
- ret = rawGetInkInfo(&lclStatus);
- break;
-#endif
-
- default:
- ret = EPS_ERR_OPR_FAIL;
- }
-
- if(EPS_ERR_NONE == ret
- && EPS_SUBPROTOCOL_PCDEV != EPS_PRT_SUBPROTOCOL(printer->protocol) ){
- info->number = lclStatus.nInkNo;
- for(idx=0; idx < EPS_INK_NUM; idx++) {
- info->colors[idx] = lclStatus.nColorType[idx];
- info->remaining[idx] = lclStatus.nColor[idx];
- }
- }
-
- EPS_RETURN( ret )
-}
-
-
-/*******************************************|********************************************/
-/* */
-/* Function name: prtGetPMString() */
+/* Function name: prtGetInfo() */
/* */
/* Arguments */
/* --------- */
@@ -885,11 +816,11 @@ EPS_ERR_CODE prtGetInkInfo (
/* Description: */
/* */
/*******************************************|********************************************/
-EPS_ERR_CODE prtGetPMString (
+EPS_ERR_CODE prtGetInfo (
const EPS_PRINTER_INN* printer,
EPS_INT32 type,
- EPS_UINT8* pString,
+ EPS_UINT8** buffer,
EPS_INT32* bufSize
){
@@ -898,22 +829,27 @@ EPS_ERR_CODE prtGetPMString (
EPS_LOG_FUNCIN
+/*** Validate communication mode */
+ if ( !EPS_IS_BI_PROTOCOL(printer->protocol) ){
+ EPS_RETURN( EPS_ERR_NEED_BIDIRECT )
+ }
+
switch( EPS_PRT_PROTOCOL( printer->protocol ) ){
#ifdef GCOMSW_PRT_USE_USB
case EPS_PROTOCOL_USB:
- ret = usbGetPMString(printer, type, pString, bufSize);
+ ret = usbGetInfo(printer, type, buffer, bufSize);
break;
#endif
#ifdef GCOMSW_PRT_USE_LPR
case EPS_PROTOCOL_LPR:
- ret = lprGetPMString(printer, type, pString, bufSize);
+ ret = lprGetInfo(printer, type, buffer, bufSize);
break;
#endif
#ifdef GCOMSW_PRT_USE_RAW
case EPS_PROTOCOL_RAW:
- ret = rawGetPMString(printer, type, pString, bufSize);
+ ret = rawGetInfo(printer, type, buffer, bufSize);
break;
#endif
@@ -1072,7 +1008,7 @@ EPS_BOOL prtIsRegistered(
const EPS_INT8 *Address,
const EPS_INT8 *modelName,
EPS_INT32 Protocol
-
+
){
EPS_PL_NODE* current = epsPrinterList.root;
EPS_BOOL bMatch = FALSE;
@@ -1103,7 +1039,7 @@ EPS_BOOL prtIsRegistered(
}
current = current->next;
- }
+ }
EPS_RETURN( FALSE )
}
@@ -1153,7 +1089,6 @@ EPS_ERR_CODE prtAddUsrPrinter(
EPS_RETURN( EPS_ERR_INV_ARG_COMMMODE )
}
if( tgtProtocol & EPS_PROTOCOL_USB ){ /* USB */
-
EPS_RETURN( EPS_ERR_INV_ARG_COMMMODE )
}
if( memGetBitCount(tgtProtocol) > 1 ){ /* Multi protocol */
@@ -1170,9 +1105,13 @@ EPS_ERR_CODE prtAddUsrPrinter(
#ifdef GCOMSW_CMD_ESCPAGE_S
EPS_LANG_ESCPAGE_S == usrPrinter->language ||
#endif
+#ifdef GCOMSW_CMD_PCL
+ EPS_LANG_PCL == usrPrinter->language ||
+ EPS_LANG_PCL_COLOR == usrPrinter->language ||
+#endif
EPS_LANG_ESCPAGE == usrPrinter->language ||
EPS_LANG_ESCPAGE_COLOR == usrPrinter->language ) ){
- EPS_RETURN( EPS_ERR_INV_PRINT_LANGUAGE );
+ EPS_RETURN( EPS_ERR_INV_PRINT_LANGUAGE )
}
/*** pase location */
@@ -1302,7 +1241,7 @@ void prtClearPrinterList(
while(NULL != pCur){
pNext = pCur->next;
- prtClearSupportedMedia(pCur->printer);
+ prtClearPrinterAttribute(pCur->printer);
EPS_SAFE_RELEASE( pCur->printer->protocolInfo );
EPS_SAFE_RELEASE( pCur->printer );
@@ -1320,7 +1259,7 @@ void prtClearPrinterList(
/*******************************************|********************************************/
/* */
-/* Function name: prtClearSupportedMedia() */
+/* Function name: prtClearPrinterAttribute() */
/* */
/* Arguments */
/* --------- */
@@ -1334,13 +1273,11 @@ void prtClearPrinterList(
/* Crean up inside list of supported media structure. */
/* */
/*******************************************|********************************************/
-void prtClearSupportedMedia(
+void prtClearPrinterAttribute(
EPS_PRINTER_INN* printer
){
- EPS_INT32 idx;
-
EPS_LOG_FUNCIN
/* Clear "supportedMedia" */
@@ -1348,16 +1285,14 @@ void prtClearSupportedMedia(
return;
}
+ epspmClearPrintAreaInfo(&printer->printAreaInfo);
+
#ifdef GCOMSW_CMD_ESCPAGE
if(EPS_LANG_ESCPR == printer->language ){
#endif
/*** ESC/P-R ***/
- if( NULL != printer->supportedMedia.sizeList ){
- for(idx = 0; idx < printer->supportedMedia.numSizes; idx++) {
- EPS_SAFE_RELEASE(printer->supportedMedia.sizeList[idx].typeList);
- }
- EPS_SAFE_RELEASE(printer->supportedMedia.sizeList);
- }
+ epspmClearMediaInfo(&printer->supportedMedia);
+ EPS_SAFE_RELEASE(printer->pmData.pmString);
#ifdef GCOMSW_CMD_ESCPAGE
} else{
/*** ESC/Page ***/
@@ -1504,6 +1439,13 @@ static EPS_ERR_CODE FindNetPrinter (
EPS_INT32 nCnt = 0;
EPS_BOOL bBreak = FALSE;
+ EPS_INT32 ifNum = 0;
+ EPS_UINT8* ifBuf = NULL;
+#if LCOMSW_USE_MULTI_IF
+ EPS_UINT32 ifBufSize = 0;
+#endif
+ EPS_INT32 ifCnt = 0;
+
EPS_LOG_FUNCIN
if(epsCmnFnc.getTime){
@@ -1513,48 +1455,80 @@ static EPS_ERR_CODE FindNetPrinter (
timeout = tmStart = tmNow = tmSpan = tmReq = 0;
}
+#if LCOMSW_USE_MULTI_IF
+ if(plural){
+ ifNum = epsNetFnc.enumInterface(NULL, ifBufSize);
+ if(ifNum > 0){
+ ifBufSize = ifNum * EPS_IFNAME_LEN;
+ ifBuf = (EPS_UINT8*)EPS_ALLOC(ifBufSize);
+ if(NULL == ifBuf){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+ memset(ifBuf, 0, ifBufSize);
+ ifNum = epsNetFnc.enumInterface(ifBuf, ifBufSize);
+ }
+ if(ifNum <= 0){
+ EPS_SAFE_RELEASE( ifBuf );
+ EPS_RETURN( EPS_ERR_COMM_ERROR )
+ }
+ } else{
+ ifNum = 1;
+ }
+#else
+ ifNum = 1;
+#endif
+
#ifdef GCOMSW_PRT_USE_LPR
- if(protocol & EPS_PROTOCOL_LPR) nProtocolCnt++;
+ if(protocol & EPS_PROTOCOL_LPR) nProtocolCnt += ifNum;
#endif
#ifdef GCOMSW_PRT_USE_RAW
- if( (protocol & EPS_PROTOCOL_RAW) && !(protocol & EPS_PROTOCOL_LPR) ) nProtocolCnt++;
+ if( (protocol & EPS_PROTOCOL_RAW) && !(protocol & EPS_PROTOCOL_LPR) ) nProtocolCnt += ifNum;
#endif
if(0 == nProtocolCnt){
+ EPS_SAFE_RELEASE( ifBuf );
EPS_RETURN( EPS_ERR_PRINTER_NOT_FOUND )
}
/* Setup net Find functions */
pProtocolFncs = (EPS_FIND_FUNCS*)EPS_ALLOC(sizeof(EPS_FIND_FUNCS)*nProtocolCnt);
if(NULL == pProtocolFncs){
+ EPS_SAFE_RELEASE( ifBuf );
EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
}
-
+ memset(pProtocolFncs, 0, sizeof(EPS_FIND_FUNCS)*nProtocolCnt);
pFncs = pProtocolFncs;
#ifdef GCOMSW_PRT_USE_LPR
if(protocol & EPS_PROTOCOL_LPR){
- pFncs->fncStart = &lprFindStart;
- pFncs->fncCheck = &lprFind;
- pFncs->fncEnd = &lprFindEnd;
- pFncs->sock = EPS_INVALID_SOCKET;
- if(plural){
- strcpy(pFncs->address, EPSNET_UDP_BROADCAST_ADDR);
- } else{
- strcpy(pFncs->address, address);
+ for(ifCnt = 0; ifCnt < ifNum; ifCnt++){
+ pFncs->fncStart = &lprFindStart;
+ pFncs->fncCheck = &lprFind;
+ pFncs->fncEnd = &lprFindEnd;
+ pFncs->sock = EPS_INVALID_SOCKET;
+ if(plural){
+ pFncs->ifName = ifBuf+(ifCnt*EPS_IFNAME_LEN);
+ strcpy(pFncs->address, EPSNET_UDP_BROADCAST_ADDR);
+ } else{
+ strcpy(pFncs->address, address);
+ }
+ pFncs++;
}
- pFncs++;
}
#endif
#ifdef GCOMSW_PRT_USE_RAW
if( (protocol & EPS_PROTOCOL_RAW) && !(protocol & EPS_PROTOCOL_LPR) ){
- pFncs->fncStart = &rawFindStart;
- pFncs->fncCheck = &rawFind;
- pFncs->fncEnd = &rawFindEnd;
- pFncs->sock = EPS_INVALID_SOCKET;
- if(plural){
- strcpy(pFncs->address, EPSNET_UDP_BROADCAST_ADDR);
- } else{
- strcpy(pFncs->address, address);
+ for(ifCnt = 0; ifCnt < ifNum; ifCnt++){
+ pFncs->fncStart = &rawFindStart;
+ pFncs->fncCheck = &rawFind;
+ pFncs->fncEnd = &rawFindEnd;
+ pFncs->sock = EPS_INVALID_SOCKET;
+ if(plural){
+ pFncs->ifName = ifBuf+(ifCnt*EPS_IFNAME_LEN);
+ strcpy(pFncs->address, EPSNET_UDP_BROADCAST_ADDR);
+ } else{
+ strcpy(pFncs->address, address);
+ }
+ pFncs++;
}
}
#endif
@@ -1563,7 +1537,7 @@ static EPS_ERR_CODE FindNetPrinter (
pFncs = pProtocolFncs;
ret = EPS_ERR_NONE;
for(nCnt = 0; (nCnt < nProtocolCnt) && (ret == EPS_ERR_NONE); nCnt++, pFncs++){
- ret = pFncs->fncStart( &(pFncs->sock), pFncs->address, plural );
+ ret = pFncs->fncStart( &(pFncs->sock), pFncs->address, plural, pFncs->ifName );
}
/* Check response */
@@ -1578,12 +1552,15 @@ static EPS_ERR_CODE FindNetPrinter (
if( EPS_COM_NOT_RECEIVE == ret ){
ret = EPS_ERR_PRINTER_NOT_FOUND;
+ /* next protocol */
+ nCnt++;
+ pFncs++;
} else{
tmReq = 0;
}
if( EPS_ERR_NONE == ret ){
- innerPrinter->protocol |= EPS_PRT_DIRECTION(printJob.commMode);
+ innerPrinter->protocol |= EPS_PRT_DIRECTION(printJob.commMode);
ret = prtRegPrinter( innerPrinter, TRUE );
@@ -1594,24 +1571,40 @@ static EPS_ERR_CODE FindNetPrinter (
bBreak = TRUE;
break;
}
-
} else if(EPS_ERR_PRINTER_NOT_FOUND == ret ){
- /* next protocol */
- nCnt++;
- pFncs++;
} else if(EPS_ERR_PRINTER_NOT_USEFUL == ret ){
if(FALSE == plural){
/* find one printer */
bBreak = TRUE;
break;
}
- /* next protocol */
- nCnt++;
- pFncs++;
} else{
bBreak = TRUE;
break;
}
+
+ /* epsCancelFindPriter() */
+ if( epsCmnFnc.lockSync && epsCmnFnc.unlockSync ){
+ if( 0 == epsCmnFnc.lockSync() ){
+ if( g_FindBreak ){
+ epsCmnFnc.unlockSync();
+ bBreak = TRUE;
+ break;
+ }
+ epsCmnFnc.unlockSync();
+ }
+ }
+
+ /* Timeout */
+ if(timeout > 0){
+ tmNow = epsCmnFnc.getTime();
+ tmSpan = (EPS_UINT32)(tmNow - tmStart);
+ /*EPS_DBGPRINT( ("TM %u - %u <> %u\n", tmNow, tmStart, tmSpan) )*/
+ if( tmSpan >= timeout ){
+ bBreak = TRUE;
+ break;
+ }
+ }
}
if(bBreak)break;
@@ -1627,17 +1620,6 @@ static EPS_ERR_CODE FindNetPrinter (
}
}
- /* Timeout */
- if(timeout > 0){
- tmNow = epsCmnFnc.getTime();
- tmSpan = (EPS_UINT32)(tmNow - tmStart);
- /*EPS_DBGPRINT( ("TM %u - %u <> %u\n", tmNow, tmStart, tmSpan) )*/
- if( tmSpan >= timeout ){
- bBreak = TRUE;
- break;
- }
- }
-
/* re isuue request */
/*EPS_DBGPRINT( ("TM %u - %u <> %u\n", tmNow, tmStart, tmSpan) )*/
if( (EPS_ERR_PRINTER_NOT_FOUND == ret ||
@@ -1649,18 +1631,17 @@ static EPS_ERR_CODE FindNetPrinter (
} else{
/* beef up */
if( EPSNET_FIND_REREQUEST_TIME <= (EPS_UINT32)(tmNow - tmReq) ){
- EPS_DBGPRINT( ("beef up TM %u - %u <> %u\n", tmNow, tmReq, (EPS_UINT32)(tmNow - tmReq)) )
+ /*EPS_DBGPRINT( ("beef up TM %u - %u <> %u\n", tmNow, tmReq, (EPS_UINT32)(tmNow - tmReq)) )*/
pFncs = pProtocolFncs;
ret = EPS_ERR_NONE;
for(nCnt = 0; (nCnt < nProtocolCnt) && (ret == EPS_ERR_NONE); nCnt++, pFncs++){
- ret = pFncs->fncStart( &(pFncs->sock), pFncs->address, plural );
+ ret = pFncs->fncStart( &(pFncs->sock), pFncs->address, plural, pFncs->ifName );
}
tmReq = 0;
if( EPS_ERR_NONE == ret){
ret = EPS_ERR_PRINTER_NOT_FOUND;
}
}
-
}
}
}
@@ -1672,6 +1653,7 @@ static EPS_ERR_CODE FindNetPrinter (
}
EPS_SAFE_RELEASE(pProtocolFncs);
+ EPS_SAFE_RELEASE( ifBuf );
EPS_RETURN( ret )
}
@@ -1711,6 +1693,7 @@ static void MakePrinterStructure(
strcpy(dst->manufacturerName, src->manufacturerName);
strcpy(dst->modelName, src->modelName);
strcpy(dst->friendlyName, src->friendlyName);
+ strcpy(dst->serialNo, src->serialNo);
strcpy(dst->printerID, src->printerID);
}
diff --git a/lib/epson-protocol.h b/lib/epson-protocol.h
index 765ed0b..aac01c8 100755..100644
--- a/lib/epson-protocol.h
+++ b/lib/epson-protocol.h
@@ -48,16 +48,18 @@ extern "C" {
#define EPSNET_UDP_BROADCAST_ADDR "255.255.255.255"
#define EPSNET_UPNP_MULTICAST_ADDR "239.255.255.250"
-#define EPSNET_NUM_DISCOVERIES (3) /* times to send discovery msg */
+#define EPSNET_NUM_DISCOVERIES (1) /* times to send discovery msg */
#define EPSNET_RECV_TIMEOUT (5000) /* default receive tiomeout */
#define EPSNET_FIND_RECV_TIMEOUT (100) /* discover receive tiomeout */
#define EPSNET_STAT_RECV_TIMEOUT (1000) /* status receive tiomeout */
#define EPSNET_SEND_TIMEOUT (500) /* default send tiomeout */
#define EPSNET_BAND_SEND_TIMEOUT (100) /* band data send tiomeout */
#define EPSNET_BAND_SEND_TIMEOUTL (3*60*1000) /* band data send tiomeout */
-#define EPSNET_FIND_REREQUEST_TIME (500) /* request re issue */
+#define EPSNET_FIND_REREQUEST_TIME (2000) /* request re issue */
#define EPSNET_MAX_PATH (255) /* path buffer length */
-#define EPSNET_STAT_RETRY (5) /* getstatus retry count */
+#define EPSNET_STAT_RETRY (5) /* getstatus retry count */
+
+#define EPS_STAT_RETRY (5) /* getstatus retry count */
/*** PrinterID string format */
@@ -139,9 +141,8 @@ extern EPS_ERR_CODE prtRecoverPE (void )
/*** Information */
/*** -------------------------------------------------------------------------------*/
-extern EPS_ERR_CODE prtGetPMString (const EPS_PRINTER_INN*, EPS_INT32,
- EPS_UINT8*, EPS_INT32* );
-extern EPS_ERR_CODE prtGetInkInfo (const EPS_PRINTER_INN*, EPS_INK_INFO* );
+extern EPS_ERR_CODE prtGetInfo (const EPS_PRINTER_INN*, EPS_INT32,
+ EPS_UINT8**, EPS_INT32* );
/*** Printer list */
/*** -------------------------------------------------------------------------------*/
@@ -151,7 +152,7 @@ extern void prtClearPrinterList (void
extern EPS_ERR_CODE prtDuplPrinterList (void );
extern EPS_ERR_CODE prtAddUsrPrinter (const EPS_PRINTER*, EPS_PRINTER_INN** );
extern EPS_PRINTER_INN* prtGetInnerPrinter (const EPS_PRINTER* );
-extern void prtClearSupportedMedia (EPS_PRINTER_INN* );
+extern void prtClearPrinterAttribute(EPS_PRINTER_INN* );
extern void prtSetIdStr (EPS_PRINTER_INN*, const EPS_INT8* );
diff --git a/lib/epson-typedefs.h b/lib/epson-typedefs.h
index 7f3681a..7f3681a 100755..100644
--- a/lib/epson-typedefs.h
+++ b/lib/epson-typedefs.h
diff --git a/lib/epson-usb.c b/lib/epson-usb.c
index 9b4af81..24dc2f2 100755..100644
--- a/lib/epson-usb.c
+++ b/lib/epson-usb.c
@@ -23,7 +23,7 @@
/* EPS_ERR_CODE usbStartJob (printer ); */
/* EPS_ERR_CODE usbStartPage ( ); */
/* EPS_ERR_CODE usbEndJob (printer ); */
-/* EPS_ERR_CODE usbGetPMString (printer, pString, bufSize ); */
+/* EPS_ERR_CODE usbGetInfo (printer, pString, bufSize ); */
/* EPS_ERR_CODE usbGetStatus (printer, status, ioStatus ); */
/* EPS_ERR_CODE usbGetJobStatus (pstInfo ); */
/* EPS_ERR_CODE usbWritePrintData (Buffer, BuffLen, sentSize ); */
@@ -50,11 +50,20 @@
#define EPS_LOG_MODULE 0
#endif
+/* USB protocol */
+#define EPS_USBP_UNK (0) /* unknown */
+#define EPS_USBP_CBT (1)
+#define EPS_USBP_ND4 (2)
+#define EPS_USBP_UNI (3)
+
+#define EPS_IS_CBT (EPS_USBP_CBT == ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol)
+
/*--------------------------- Data Structure Declarations ---------------------------*/
/*******************************************|********************************************/
typedef struct _tagEPS_USB_PRINTER_INFO_ {
EPS_USB_DEVICE dev;
EPS_BOOL bCheckDataChannel;
+ EPS_UINT32 usbProtocol;
}EPS_USB_PRINTER_INFO;
typedef struct _tagEPS_PRINT_JOB_USB_ {
@@ -89,14 +98,26 @@ extern EPS_BOOL ioOpenUniDirect; /* Open state of I/O port (Uni-Direc
/*-------------------------------- Local Functions ----------------------------------*/
/*******************************************|********************************************/
static EPS_ERR_CODE ProbePrinterByName (const EPS_INT8*, EPS_BOOL, EPS_UINT32,
- EPS_USB_DEVICE*, EPS_INT8*, EPS_INT8*, EPS_INT32*);
-static EPS_ERR_CODE ProbeESCPR (const EPS_USB_DEVICE*, EPS_INT8*, EPS_INT8*,
- EPS_INT32* );
-static EPS_ERR_CODE CreatePrinterInfo (const EPS_USB_DEVICE*, const EPS_INT8*,
- const EPS_INT8*, EPS_INT32, EPS_PRINTER_INN** );
+ EPS_USB_PRINTER_INFO*, EPS_INT8*, EPS_INT8*,
+ EPS_INT32*, EPS_UINT32* );
+static EPS_ERR_CODE ProbeESCPR (EPS_USB_PRINTER_INFO*, EPS_INT8*, EPS_INT8*,
+ EPS_INT32*, EPS_UINT32* );
+static EPS_ERR_CODE CreatePrinterInfo (EPS_USB_PRINTER_INFO*, const EPS_INT8*,
+ const EPS_INT8*, const EPS_INT8*, EPS_INT32,
+ EPS_UINT32, EPS_PRINTER_INN** );
static EPS_ERR_CODE PortResolution (const EPS_PRINTER_INN*, EPS_FILEDSC* );
-static EPS_ERR_CODE GetBinaryStatus (EPS_FILEDSC, EPS_STATUS_INFO* );
-static EPS_ERR_CODE InfoCommand (EPS_FILEDSC, EPS_INT32, EPS_UINT8*, EPS_INT32* );
+static EPS_ERR_CODE GetBinaryStatus (EPS_FILEDSC, EPS_UINT32, EPS_UINT32, EPS_STATUS_INFO*);
+static EPS_ERR_CODE InfoCommand (EPS_FILEDSC, EPS_UINT32, EPS_INT32, EPS_UINT8**, EPS_INT32*);
+static EPS_ERR_CODE CbtInfoCommand (EPS_FILEDSC, EPS_INT32, EPS_UINT8**, EPS_INT32*);
+static EPS_ERR_CODE RmtInfoCommand (EPS_FILEDSC, EPS_INT32, EPS_UINT8**, EPS_INT32*);
+
+static EPS_ERR_CODE nd4WritePortal (EPS_FILEDSC fd, const EPS_UINT8* buff, EPS_INT32* buffSize);
+static EPS_ERR_CODE nd4ReadPortal (EPS_FILEDSC fd, EPS_UINT8* buff, EPS_INT32* buffSize);
+static EPS_ERR_CODE OpenPortal (EPS_USB_PRINTER_INFO *usbInfo, EPS_FILEDSC *fd );
+static EPS_ERR_CODE ClosePortal (EPS_UINT32 usbProtocol, EPS_FILEDSC fd );
+static void ParseUsbProtocol (EPS_INT8* deviceIDString, EPS_INT32 strlength,
+ EPS_UINT32* usbProtocol );
+static EPS_ERR_CODE GetSerialNumber (EPS_USB_PRINTER_INFO*, EPS_INT8* serialNo );
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
@@ -121,7 +142,7 @@ static EPS_ERR_CODE InfoCommand (EPS_FILEDSC, EPS_INT32, EPS_UINT8*, EPS_INT32
/* EPS_ERR_NONE - Success Printer found */
/* EPS_ERR_PRINTER_NOT_FOUND - Printer not found (or error occur) */
/* EPS_ERR_MEMORY_ALLOCATION - memory allocation failed */
-/* EPS_ERR_NOT_OPEN_IO - Cannot Open I/O Portal */
+/* EPS_ERR_NOT_OPEN_IO - Cannot Open I/O Portal */
/* */
/* Description: */
/* find all USB printer. */
@@ -137,23 +158,26 @@ EPS_ERR_CODE usbFind (
EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
EPS_FILEDSC fd = EPS_INVALID_FILEDSC;
EPS_PRINTER_INN* printer = NULL;
- EPS_USB_DEVICE dev;
+ EPS_USB_PRINTER_INFO usbInfo;
EPS_INT8 manufacturer[EPS_NAME_BUFFSIZE]; /* Manufacturer name */
EPS_INT8 modelName[EPS_NAME_BUFFSIZE]; /* Printer model name */
+ EPS_INT8 serialNo[EPS_ADDR_BUFFSIZE]; /* Printer serial number */
EPS_UINT32 tmStart, tmNow, tmSpan;
EPS_INT32 cmdLevel = 0;
+ EPS_UINT32 egID = 0;
EPS_LOG_FUNCIN;
- memset(&dev, 0, sizeof(dev));
- memset(manufacturer, 0, EPS_NAME_BUFFSIZE);
- memset(modelName, 0, EPS_NAME_BUFFSIZE);
+ memset(&usbInfo, 0, sizeof(usbInfo));
+ memset(manufacturer, 0, sizeof(manufacturer));
+ memset(modelName, 0, sizeof(modelName));
+ memset(serialNo, 0, sizeof(serialNo));
/***------------------------------------------------------------------------------------*/
/*** Bi-Directional Communication Mode */
/***------------------------------------------------------------------------------------*/
if ( EPS_IS_BI_PROTOCOL(protocol) ) {
- fd = epsUsbFnc.findFirst( &dev );
+ fd = epsUsbFnc.findFirst( &usbInfo.dev );
if(EPS_INVALID_FILEDSC != fd){
if(epsCmnFnc.getTime){
tmStart = epsCmnFnc.getTime();
@@ -163,10 +187,12 @@ EPS_ERR_CODE usbFind (
do{
/*** Validate this is an Epson ESC/PR Printer */
- ret = ProbeESCPR(&dev, manufacturer, modelName, &cmdLevel);
+ ret = ProbeESCPR(&usbInfo, manufacturer, modelName, &cmdLevel, &egID);
if(EPS_ERR_NONE == ret){
- ret = CreatePrinterInfo(&dev, manufacturer, modelName, cmdLevel, &printer);
+ /*retStatus = */GetSerialNumber(&usbInfo, serialNo);
+ ret = CreatePrinterInfo(&usbInfo, manufacturer, modelName, serialNo,
+ cmdLevel, egID, &printer);
if( EPS_ERR_NONE == ret ){
ret = prtRegPrinter( printer, TRUE );
}
@@ -178,7 +204,7 @@ EPS_ERR_CODE usbFind (
if(*timeout > 0){
tmNow = epsCmnFnc.getTime();
tmSpan = (EPS_UINT32)(tmNow - tmStart);
- EPS_DBGPRINT( ("TM %u - %u <> %u\n", tmNow, tmStart, tmSpan) )
+ /*EPS_DBGPRINT( ("TM %u - %u <> %u\n", tmNow, tmStart, tmSpan) )*/
if( tmSpan >= *timeout ){
break;
}
@@ -193,7 +219,7 @@ EPS_ERR_CODE usbFind (
}
}
}
- }while( epsUsbFnc.findNext( fd, &dev ) );
+ }while( epsUsbFnc.findNext( fd, &usbInfo.dev ) );
epsUsbFnc.findClose(fd);
@@ -222,7 +248,8 @@ EPS_ERR_CODE usbFind (
epsUsbFnc.closePortal(fd);
/*** Create printer info structure */
- ret = CreatePrinterInfo(&dev, "", "", 0, &printer);
+ usbInfo.usbProtocol = EPS_USBP_UNI;
+ ret = CreatePrinterInfo(&usbInfo, "", "", "", 0, 0, &printer);
if( EPS_ERR_NONE == ret ){
ret = prtRegPrinter( printer, TRUE );
}
@@ -266,15 +293,17 @@ EPS_ERR_CODE usbProbePrinterByID (
/*** Declare Variable Local to Routine */
EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
EPS_FILEDSC fd = EPS_INVALID_FILEDSC;
- EPS_USB_DEVICE dev;
+ EPS_USB_PRINTER_INFO usbInfo;
EPS_INT8 manufacturer[EPS_NAME_BUFFSIZE]; /* Manufacturer name */
EPS_INT8 modelName[EPS_NAME_BUFFSIZE]; /* Printer model name */
+ EPS_INT8 serialNo[EPS_ADDR_BUFFSIZE]; /* Printer serial number */
EPS_INT8* pPos = NULL;
EPS_INT32 nSegCnt = 0;
EPS_UINT32 nTmp = 0;
EPS_INT8 modelNameTgt[EPS_NAME_BUFFSIZE]; /* target printer model name */
EPS_BOOL enableBreak = FALSE;
EPS_INT32 cmdLevel = 0;
+ EPS_UINT32 egID = 0;
EPS_LOG_FUNCIN;
@@ -302,7 +331,7 @@ EPS_ERR_CODE usbProbePrinterByID (
EPS_RETURN( EPS_ERR_INV_ARG_PRINTER_ID );
}
- memset(&dev, 0, sizeof(dev));
+ memset(&usbInfo, 0, sizeof(usbInfo));
/***------------------------------------------------------------------------------------*/
/*** Bi-Directional Communication Mode */
@@ -311,11 +340,15 @@ EPS_ERR_CODE usbProbePrinterByID (
enableBreak = (epsCmnFnc.lockSync && epsCmnFnc.unlockSync );
memset(manufacturer, 0, sizeof(manufacturer));
memset(modelName, 0, sizeof(modelName));
+ memset(serialNo, 0, sizeof(serialNo));
ret = ProbePrinterByName(modelNameTgt, enableBreak, timeout,
- &dev, manufacturer, modelName, &cmdLevel);
+ &usbInfo, manufacturer, modelName, &cmdLevel, &egID);
if(EPS_ERR_NONE == ret){
+ /*retStatus = */GetSerialNumber(&usbInfo, serialNo);
+
/*** Create printer info structure */
- ret = CreatePrinterInfo(&dev, manufacturer, modelName, cmdLevel, printer);
+ ret = CreatePrinterInfo(&usbInfo, manufacturer, modelName, serialNo,
+ cmdLevel, egID, printer);
}
/***------------------------------------------------------------------------------------*/
/*** Uni-Directional Communication Mode */
@@ -327,7 +360,8 @@ EPS_ERR_CODE usbProbePrinterByID (
epsUsbFnc.closePortal(fd);
/*** Create printer info structure */
- ret = CreatePrinterInfo(&dev, "", "", 0, printer);
+ usbInfo.usbProtocol = EPS_USBP_UNI;
+ ret = CreatePrinterInfo(&usbInfo, "", "", "", 0, 0, printer);
} else{
ret = EPS_ERR_PRINTER_NOT_FOUND;
@@ -395,22 +429,24 @@ EPS_ERR_CODE usbStartJob (
goto epsStartJob_END;
}
- /*** Open the command channel */
- retStatus = cbtCommChannelOpen(usbPrintJob->fd, EPS_CBTCHANNEL_CTRL, TRUE);
- if (retStatus != EPS_ERR_NONE) {
- retStatus = cbtCommClose(usbPrintJob->fd);
- retStatus = (EPS_ERR_CODE)EPS_ERR_NOT_OPEN_IO;
- goto epsStartJob_END;
- }
+ if( EPS_IS_CBT ){
+ /*** Open the command channel */
+ retStatus = cbtCommChannelOpen(usbPrintJob->fd, EPS_CBTCHANNEL_CTRL, TRUE);
+ if (retStatus != EPS_ERR_NONE) {
+ retStatus = cbtCommClose(usbPrintJob->fd);
+ retStatus = (EPS_ERR_CODE)EPS_ERR_NOT_OPEN_IO;
+ goto epsStartJob_END;
+ }
- /*** Open Data Channel */
- retStatus = cbtCommChannelOpen(usbPrintJob->fd, EPS_CBTCHANNEL_DATA, TRUE);
- if (retStatus != EPS_ERR_NONE) {
- retStatus = cbtCommChannelClose(usbPrintJob->fd, EPS_CBTCHANNEL_CTRL);
- retStatus = cbtCommClose(usbPrintJob->fd);
- retStatus = (EPS_ERR_CODE)EPS_ERR_PRINTER_ERR_OCCUR/*EPS_ERR_CANNOT_PRINT*/;
- goto epsStartJob_END;
- }
+ /*** Open Data Channel */
+ retStatus = cbtCommChannelOpen(usbPrintJob->fd, EPS_CBTCHANNEL_DATA, TRUE);
+ if (retStatus != EPS_ERR_NONE) {
+ retStatus = cbtCommChannelClose(usbPrintJob->fd, EPS_CBTCHANNEL_CTRL);
+ retStatus = cbtCommClose(usbPrintJob->fd);
+ retStatus = (EPS_ERR_CODE)EPS_ERR_PRINTER_ERR_OCCUR/*EPS_ERR_CANNOT_PRINT*/;
+ goto epsStartJob_END;
+ }
+ }
((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->bCheckDataChannel = FALSE;
/***------------------------------------------------------------------------------------*/
@@ -484,9 +520,9 @@ EPS_ERR_CODE usbRestartJob (
}
/***------------------------------------------------------------------------------------*/
-/*** Bi-Directional Communication Mode */
+/*** Bi-Directional(CBT) Communication Mode */
/***------------------------------------------------------------------------------------*/
- if( EPS_IS_BI_PROTOCOL(printer->protocol) ){
+ if( EPS_IS_BI_PROTOCOL(printer->protocol) && EPS_IS_CBT){
if(EPS_IO_NOT_OPEN == ioDataChState){
/*if( EPS_RESET_SENT == printJob.resetSent ){*/
/* If pre page canceled, Re open data channel */
@@ -498,7 +534,7 @@ EPS_ERR_CODE usbRestartJob (
}
}
/***------------------------------------------------------------------------------------*/
-/*** Uni-Directional Communication Mode */
+/*** END4 or Uni-Directional Communication Mode */
/***------------------------------------------------------------------------------------*/
/* } else{
no operation*/
@@ -535,6 +571,7 @@ EPS_ERR_CODE usbEndJob (
){
EPS_ERR_CODE retStatus = EPS_ERR_NONE; /* Return status of internal calls */
+ const EPS_PRINTER_INN* printer = printJob.printer;
EPS_PRINT_JOB_USB* usbPrintJob = (EPS_PRINT_JOB_USB*)printJob.hProtInfo;
EPS_LOG_FUNCIN;
@@ -543,24 +580,25 @@ EPS_LOG_FUNCIN;
EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED );
}
- switch(printJob.printer->protocol){
- case EPS_COMM_USB_BID:
/***------------------------------------------------------------------------------------*/
-/*** Bi-Directional Communication Mode */
+/*** Bi-Directional(CBT) Communication Mode */
/***------------------------------------------------------------------------------------*/
- /*** Close communication */
- retStatus = cbtCommChannelClose(usbPrintJob->fd, EPS_CBTCHANNEL_DATA);
- retStatus = cbtCommChannelClose(usbPrintJob->fd, EPS_CBTCHANNEL_CTRL);
- retStatus = cbtCommClose(usbPrintJob->fd);
+ if( EPS_IS_BI_PROTOCOL(printer->protocol) ){
+ if( EPS_IS_CBT ){
+ /*** Close communication */
+ retStatus = cbtCommChannelClose(usbPrintJob->fd, EPS_CBTCHANNEL_DATA);
+ retStatus = cbtCommChannelClose(usbPrintJob->fd, EPS_CBTCHANNEL_CTRL);
+ retStatus = cbtCommClose(usbPrintJob->fd);
+ } else{
+ retStatus = ClosePortal( ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol, usbPrintJob->fd );
+ }
if (retStatus != EPS_ERR_NONE) {
retStatus = EPS_ERR_NOT_CLOSE_IO;
}
- break;
-
- case EPS_COMM_USB_UNID:
/***------------------------------------------------------------------------------------*/
-/*** Uni-Directional Communication Mode */
+/*** END4 or Uni-Directional Communication Mode */
/***------------------------------------------------------------------------------------*/
+ } else{
/*** Close Portal */
if (ioOpenUniDirect == EPS_IO_OPEN) {
retStatus = epsUsbFnc.closePortal(usbPrintJob->fd);
@@ -569,10 +607,6 @@ EPS_LOG_FUNCIN;
}
ioOpenUniDirect = EPS_IO_NOT_OPEN;
}
- break;
-
- default:
- retStatus = EPS_ERR_OPR_FAIL;
}
EPS_SAFE_RELEASE( printJob.hProtInfo );
@@ -610,6 +644,7 @@ EPS_ERR_CODE usbWritePrintData (
){
EPS_INT32 retCom;
+ const EPS_PRINTER_INN* printer = printJob.printer;
EPS_PRINT_JOB_USB* usbPrintJob = (EPS_PRINT_JOB_USB*)printJob.hProtInfo;
EPS_LOG_FUNCIN;
@@ -618,7 +653,10 @@ EPS_LOG_FUNCIN;
EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED );
}
- if( EPS_IS_BI_PROTOCOL(printJob.printer->protocol) ){
+/***------------------------------------------------------------------------------------*/
+/*** Bi-Directional(CBT) Communication Mode */
+/***------------------------------------------------------------------------------------*/
+ if( EPS_IS_BI_PROTOCOL(printJob.printer->protocol) && EPS_IS_CBT ){
retCom = cbtCommWriteData(usbPrintJob->fd, EPS_CBTCHANNEL_DATA, Buffer, (EPS_INT32)BuffLen, (EPS_INT32*)sentSize);
if(EPCBT_ERR_NONE == retCom){
EPS_RETURN( EPS_ERR_NONE );
@@ -627,6 +665,10 @@ EPS_LOG_FUNCIN;
}else{
EPS_RETURN( EPS_ERR_COMM_ERROR );
}
+
+/***------------------------------------------------------------------------------------*/
+/*** END4 or Uni-Directional Communication Mode */
+/***------------------------------------------------------------------------------------*/
} else{
retCom = epsUsbFnc.writePortal(usbPrintJob->fd, Buffer, (EPS_INT32)BuffLen, (EPS_INT32*)sentSize);
if(0 == retCom){
@@ -674,6 +716,7 @@ EPS_ERR_CODE usbResetPrinter (
EPS_INT32 lSize;
EPS_UINT8 pResult[EPS_RSREPLY_SIZE];
EPS_PRINT_JOB_USB* usbPrintJob = (EPS_PRINT_JOB_USB*)printJob.hProtInfo;
+ const EPS_PRINTER_INN* printer = printJob.printer;
EPS_UINT8 CBTcmd_rj[] = { 'r', 'j', 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/* E , S , C , P , R , L , i , b */
@@ -685,6 +728,15 @@ EPS_ERR_CODE usbResetPrinter (
EPS_LOG_FUNCIN;
+ if( !EPS_IS_CBT ){
+ Ret = epsUsbFnc.softReset(usbPrintJob->fd);
+ if(0 == Ret){
+ EPS_RETURN( EPS_ERR_NONE );
+ } else{
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+ }
+
/*** Initialize Local Variables */
retBufSize = 0;
memset(pResult, 0, 32);
@@ -780,7 +832,7 @@ EPS_LOG_FUNCIN;
/*******************************************|********************************************/
/* */
-/* Function name: usbGetPMString() */
+/* Function name: usbGetInfo() */
/* */
/* Arguments */
/* --------- */
@@ -802,11 +854,11 @@ EPS_LOG_FUNCIN;
/* Get PM string from usb printer. */
/* */
/*******************************************|********************************************/
-EPS_ERR_CODE usbGetPMString (
+EPS_ERR_CODE usbGetInfo (
const EPS_PRINTER_INN* printer,
EPS_INT32 type,
- EPS_UINT8* pString,
+ EPS_UINT8** pString,
EPS_INT32* bufSize
){
@@ -814,51 +866,45 @@ EPS_ERR_CODE usbGetPMString (
EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
EPS_FILEDSC fd = EPS_INVALID_FILEDSC;
EPS_PRINT_JOB_USB* usbPrintJob = (EPS_PRINT_JOB_USB*)printJob.hProtInfo;
+ EPS_BOOL selfOpened = FALSE;
EPS_LOG_FUNCIN;
- if (ioOpenState == EPS_IO_NOT_OPEN) {
+ if ( EPS_IO_NOT_OPEN == ioOpenState) {
/*** Resolve present port number. And Open the I/O Port for communication */
ret = PortResolution(printer, &fd);
if (ret != EPS_ERR_NONE) {
- cbtCommClose(fd);
+ ClosePortal(((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol, fd);
EPS_RETURN( EPS_ERR_NOT_OPEN_IO );
}
- /*** Open the control channel */
- ret = cbtCommChannelOpen(fd, EPS_CBTCHANNEL_CTRL, TRUE);
- if (ret != EPS_ERR_NONE) {
- cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
- cbtCommClose(fd);
- EPS_RETURN( EPS_ERR_NOT_OPEN_IO );
- }
-
-/*** Get PM from Printer */
- if(1 == type){
- ret = InfoCommand(fd, EPS_CBTCOM_PM, pString, bufSize);
- } else if(2 == type){
- ret = InfoCommand(fd, EPS_CBTCOM_PM2, pString, bufSize);
- } else{
- ret = EPS_ERR_OPR_FAIL;
+ if( EPS_IS_CBT ){
+ /*** Open the control channel */
+ ret = cbtCommChannelOpen(fd, EPS_CBTCHANNEL_CTRL, TRUE);
+ if (ret != EPS_ERR_NONE) {
+ cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
+ ClosePortal(((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol, fd);
+ EPS_RETURN( EPS_ERR_NOT_OPEN_IO );
+ }
}
-
- /* Close Port */
- cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
- cbtCommClose(fd);
- } else{
+ selfOpened = TRUE;
- if( !usbPrintJob ){
- EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED );
+ } else{ /* Job running now */
+ if( !usbPrintJob ){
+ EPS_RETURN( EPS_ERR_OPR_FAIL );
}
+ fd = usbPrintJob->fd;
+ }
/*** Get PM from Printer */
- if(1 == type){
- ret = InfoCommand(usbPrintJob->fd, EPS_CBTCOM_PM, pString, bufSize);
- } else if(2 == type){
- ret = InfoCommand(usbPrintJob->fd, EPS_CBTCOM_PM2, pString, bufSize);
- } else{
- ret = EPS_ERR_OPR_FAIL;
+ ret = InfoCommand(fd, ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol,
+ type, pString, bufSize);
+ if( TRUE == selfOpened ){
+ /* Close Port */
+ if( EPS_IS_CBT ){
+ cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
}
+ ClosePortal(((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol, fd);
}
/*** Return to Caller */
@@ -904,6 +950,7 @@ EPS_ERR_CODE usbGetStatus (
EPS_FILEDSC fd = EPS_INVALID_FILEDSC;
EPS_PRINTER_INN* printer = printJob.printer;
EPS_PRINT_JOB_USB* usbPrintJob = (EPS_PRINT_JOB_USB*)printJob.hProtInfo;
+ EPS_BOOL selfOpend = FALSE;
EPS_LOG_FUNCIN;
@@ -911,85 +958,43 @@ EPS_LOG_FUNCIN;
ret = EPS_ERR_NONE;
memset(pstInfo, -1, sizeof(EPS_STATUS_INFO));
-/*** Get Status Data */
- if (ioOpenState == EPS_IO_NOT_OPEN) {
+ if ( EPS_IO_NOT_OPEN == ioOpenState) {
+ selfOpend = TRUE;
+
/*** Resolve present port number. And Open the I/O Port for communication */
ret = PortResolution(printer, &fd);
if (ret != EPS_ERR_NONE) {
- cbtCommClose(fd);
- EPS_RETURN( EPS_ERR_NOT_OPEN_IO );
- }
-
- /*** Open the control channel */
- ret = cbtCommChannelOpen(fd, EPS_CBTCHANNEL_CTRL, TRUE);
- if (ret != EPS_ERR_NONE) {
- cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
- cbtCommClose(fd);
- EPS_RETURN( EPS_ERR_NOT_OPEN_IO );
- }
-
- /*** Get Printer Status */
- ret = GetBinaryStatus(fd, pstInfo);
- if (ret != EPS_ERR_NONE) {
- cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
- cbtCommClose(fd);
- EPS_RETURN( ret );
+ ret = EPS_ERR_NOT_OPEN_IO;
+ goto usbGetStatus_END;
}
- if(NULL != pIoStatus && NULL != pCancelling){
- /*** Check I/O status */
- *pCancelling = FALSE;
- if(EPS_CAREQ_CANCEL == pstInfo->nCancel
- || (usbPrintJob && TRUE == usbPrintJob->resetRequest)){
- *pIoStatus = FALSE;
- *pCancelling = TRUE;
- if(usbPrintJob){
- /* Because EPS_CAREQ_CANCEL can be acquired only once, it memorizes. */
- usbPrintJob->resetRequest = TRUE;
- }
- } else if(EPS_ST_IDLE == pstInfo->nState){
- if( ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->bCheckDataChannel ){
- /*** Open Data Channel */
- if (cbtCommChannelOpen(fd, EPS_CBTCHANNEL_DATA, FALSE) == EPS_ERR_NONE) {
- ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->bCheckDataChannel = FALSE;
- *pIoStatus = TRUE;
- } else{
- *pIoStatus = FALSE;
- *pCancelling = TRUE;
- }
- cbtCommChannelClose(fd, EPS_CBTCHANNEL_DATA);
- } else{
- *pIoStatus = TRUE;
- }
- } else{
- *pIoStatus = FALSE;
- if( ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->bCheckDataChannel ){
- *pCancelling = TRUE;
- }
+ if( EPS_IS_CBT ){
+ /*** Open the control channel */
+ ret = cbtCommChannelOpen(fd, EPS_CBTCHANNEL_CTRL, TRUE);
+ if (ret != EPS_ERR_NONE) {
+ ret = EPS_ERR_NOT_OPEN_IO;
+ goto usbGetStatus_END;
}
}
- /* Close Port */
- ret = cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
- ret = cbtCommClose(fd);
- if (ret != EPS_ERR_NONE) {
- EPS_RETURN( EPS_ERR_NOT_CLOSE_IO );
- }
-
} else{ /* Job running now */
-
if( !usbPrintJob ){
EPS_RETURN( EPS_ERR_OPR_FAIL );
}
+ fd = usbPrintJob->fd;
+ }
- /*** Get Printer Status */
- ret = GetBinaryStatus(usbPrintJob->fd, pstInfo);
- if (ret != EPS_ERR_NONE) {
- EPS_RETURN( ret );
- }
- if(NULL != pIoStatus && NULL != pCancelling){
- /*** Check I/O status */
+ /*** Get Printer Status */
+ ret = GetBinaryStatus(fd, ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol,
+ printer->egID, pstInfo);
+ if (ret != EPS_ERR_NONE) {
+ goto usbGetStatus_END;
+ }
+
+ if(NULL != pIoStatus && NULL != pCancelling){
+ /*** Check I/O status */
+ if( EPS_IS_CBT ){
*pCancelling = FALSE;
if(EPS_CAREQ_CANCEL == pstInfo->nCancel
|| (usbPrintJob && TRUE == usbPrintJob->resetRequest)){
@@ -999,19 +1004,21 @@ EPS_LOG_FUNCIN;
/* Because EPS_CAREQ_CANCEL can be acquired only once, it memorizes. */
usbPrintJob->resetRequest = TRUE;
}
- } else if(EPS_IO_OPEN == ioDataChState){
+ } else if(EPS_IO_OPEN == ioDataChState && FALSE == selfOpend){
*pIoStatus = TRUE; /* Evidence */
} else if(EPS_ST_IDLE == pstInfo->nState){
if( ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->bCheckDataChannel ){
- /*** Open Data Channel */
- if (cbtCommChannelOpen(usbPrintJob->fd, EPS_CBTCHANNEL_DATA, FALSE) == EPS_ERR_NONE) {
- ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->bCheckDataChannel = FALSE;
- *pIoStatus = TRUE;
- } else{
- *pIoStatus = FALSE;
- *pCancelling = TRUE;
+ if( EPS_IS_CBT ){
+ /*** Open Data Channel */
+ if (cbtCommChannelOpen(fd, EPS_CBTCHANNEL_DATA, FALSE) == EPS_ERR_NONE) {
+ ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->bCheckDataChannel = FALSE;
+ *pIoStatus = TRUE;
+ } else{
+ *pIoStatus = FALSE;
+ *pCancelling = TRUE;
+ }
+ cbtCommChannelClose(fd, EPS_CBTCHANNEL_DATA);
}
- cbtCommChannelClose(usbPrintJob->fd, EPS_CBTCHANNEL_DATA);
} else{
*pIoStatus = TRUE;
}
@@ -1021,9 +1028,23 @@ EPS_LOG_FUNCIN;
*pCancelling = TRUE;
}
}
+
+ } else{
+ *pIoStatus = TRUE; /* Evidence */
+ *pCancelling = FALSE; /* cannot distinguish */
}
- }
-
+ }
+
+usbGetStatus_END:
+ if(selfOpend){
+ /* Close Port */
+ if( EPS_IS_CBT ){
+ ret = cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
+ }
+
+ /*ret = */ClosePortal(((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol, fd);
+ }
+
/*** Return to Caller */
EPS_RETURN( ret );
}
@@ -1060,8 +1081,10 @@ EPS_LOG_FUNCIN;
if( !usbPrintJob ){
EPS_RETURN( EPS_ERR_JOB_NOT_INITIALIZED );
}
-
- ret = GetBinaryStatus(usbPrintJob->fd, pstInfo);
+
+ ret = GetBinaryStatus(usbPrintJob->fd,
+ ((EPS_USB_PRINTER_INFO*)printJob.printer->protocolInfo)->usbProtocol,
+ printJob.printer->egID, pstInfo);
if(EPS_ERR_NONE == ret
&& EPS_CAREQ_CANCEL == pstInfo->nCancel){
usbPrintJob->resetRequest = TRUE;
@@ -1194,6 +1217,39 @@ EPS_LOG_FUNCIN;
EPS_RETURN( EPS_ERR_NONE );
}
+
+EPS_ERR_CODE usbInfoCommand (
+
+ const EPS_PRINTER_INN* printer,
+ EPS_INT32 command,
+ EPS_UINT8** buffer,
+ EPS_INT32* bufSize
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_FILEDSC fd = EPS_INVALID_FILEDSC;
+
+ ret = OpenPortal((EPS_USB_PRINTER_INFO*)printer->protocolInfo, &fd );
+ if( EPS_ERR_NONE == ret ){
+ if( EPS_IS_CBT ){
+ ret = cbtCommChannelOpen(fd, EPS_CBTCHANNEL_CTRL, TRUE);
+ }
+
+ if( EPS_ERR_NONE == ret ){
+ ret = InfoCommand(fd, ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol,
+ command, buffer, bufSize);
+
+ if( EPS_IS_CBT ){
+ cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
+ }
+ }
+
+ ClosePortal(((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol, fd);
+ }
+
+ return ret;
+}
+
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%*/
@@ -1210,6 +1266,8 @@ EPS_LOG_FUNCIN;
/* --------- */
/* Name: Type: Description: */
/* fd EPS_FILEDSC I: file discripter */
+/* usbProtocol EPS_UINT32 I: usb protocol kind */
+/* egID EPS_UINT32 I: printer error group id */
/* pstInfo EPS_STATUS_INFO* O: Printer Status information */
/* */
/* Return value: */
@@ -1222,23 +1280,28 @@ EPS_LOG_FUNCIN;
/*******************************************|********************************************/
static EPS_ERR_CODE GetBinaryStatus (
- EPS_FILEDSC fd,
+ EPS_FILEDSC fd,
+ EPS_UINT32 usbProtocol,
+ EPS_UINT32 egID,
EPS_STATUS_INFO* pstInfo
){
- EPS_INT8 Status[_STATUS_REPLY_BUF];
- EPS_INT32 Size = _STATUS_REPLY_BUF;
+ EPS_UINT8 Status[_STATUS_REPLY_BUF];
+ EPS_INT32 Size = _STATUS_REPLY_BUF;
+ EPS_INT32 ret = 0;
+ EPS_UINT8* pStatus = &Status[0];
EPS_LOG_FUNCIN;
memset(Status, 0x00, _STATUS_REPLY_BUF);
- if (InfoCommand(fd, EPS_CBTCOM_ST, (EPS_UINT8*)Status, &Size) != EPS_ERR_NONE){
- EPS_DBGPRINT(("EPS SER: Get Stat -> CBT Com Failed\r\n"));
- EPS_RETURN( EPS_ERR_COMM_ERROR );
- }
+ ret = InfoCommand(fd, usbProtocol, EPS_CBTCOM_ST, &pStatus, &Size);
+ if( EPS_ERR_NONE != ret ){
+ EPS_DBGPRINT(("EPS SER: Get Stat -> CBT Com Failed\r\n"));
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
- EPS_RETURN( serAnalyzeStatus(Status, pstInfo) );
+ EPS_RETURN( serAnalyzeStatus((EPS_INT8*)Status, egID, pstInfo) );
}
@@ -1264,64 +1327,77 @@ EPS_LOG_FUNCIN;
/* EPS_ERR_PRINTER_NOT_FOUND - Connected printer is not supported */
/* */
/* Description: */
-/* Opens the portal, gets the printer's PM reply, parses it, and stores the data */
-/* in the capabilities structure. */
+/* Opens the portal, gets the printer's DeviceString, parses it. */
/* */
/*******************************************|********************************************/
static EPS_ERR_CODE ProbeESCPR (
- const EPS_USB_DEVICE* dev,
+ EPS_USB_PRINTER_INFO* usbInfo,
EPS_INT8* manufacturer,
EPS_INT8* modelName,
- EPS_INT32* cmdLevel
+ EPS_INT32* cmdLevel,
+ EPS_UINT32* egID
){
/*** Declare Variable Local to Routine */
- EPS_ERR_CODE retStatus;
- EPS_FILEDSC fd;
- EPS_INT8* tmpDeviceIdBuf;
- EPS_INT32 bufSize;
- EPS_BOOL found_dev;
-
+ EPS_ERR_CODE retStatus = EPS_ERR_NONE;
+ EPS_INT32 ret = 0;
+ EPS_FILEDSC fd = EPS_INVALID_FILEDSC;
+ EPS_INT8* tmpDeviceIdBuf = NULL;
+ EPS_INT32 bufSizeOrg = 0;
+ EPS_INT32 bufSize = EPS_DI_MAXSIZE-1;
+ EPS_INT32 found_dev;
+
EPS_LOG_FUNCIN;
/*** Initialize Local Variables */
retStatus = EPS_ERR_NONE;
found_dev = FALSE;
- EPS_DBGPRINT(("PROT=%d / PID=%04X / VID=%04X\n", dev->port, dev->pid, dev->vid))
+ EPS_DBGPRINT(("PROT=%d / PID=%04X / VID=%04X\n", usbInfo->dev.port, usbInfo->dev.pid, usbInfo->dev.vid))
- /* Allocate temp buffer */
- tmpDeviceIdBuf = (EPS_INT8*)EPS_ALLOC(EPS_DI_MAXSIZE);
- if (tmpDeviceIdBuf == NULL) {
- EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
- }
- memset(tmpDeviceIdBuf, 0, EPS_DI_MAXSIZE);
- bufSize = EPS_DI_MAXSIZE;
-
- /*** Get device ID */
- retStatus = cbtCommOpen( dev, &fd );
- if(EPS_ERR_NONE == retStatus ){
- retStatus = cbtCommChannelOpen(fd, EPS_CBTCHANNEL_CTRL, TRUE);
- if (retStatus == EPS_ERR_NONE) {
- retStatus = InfoCommand(fd, EPS_CBTCOM_DI, (EPS_UINT8*)tmpDeviceIdBuf, &bufSize);
- } else{
- retStatus = (EPS_ERR_CODE)EPS_ERR_NOT_OPEN_IO;
+ if ( EPS_IO_OPEN != ioOpenState ) {
+ if ( (fd = epsUsbFnc.openPortal(&usbInfo->dev)) == EPS_INVALID_FILEDSC){
+ EPS_RETURN( EPS_ERR_NOT_OPEN_IO );
}
- cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
} else{
- retStatus = (EPS_ERR_CODE)EPS_ERR_NOT_OPEN_IO;
+ EPS_RETURN( EPS_ERR_2ND_OPEN_IO );
}
- cbtCommClose(fd);
- if (EPS_ERR_NONE == retStatus ) {
- found_dev = serParseDeviceID(tmpDeviceIdBuf, manufacturer, modelName, cmdLevel, NULL);
- if(found_dev == FALSE) {
+ do{
+ bufSizeOrg = bufSize + 1; /* +1=NULL terminate */
+
+ /* Allocate temp buffer */
+ EPS_SAFE_RELEASE(tmpDeviceIdBuf);
+ tmpDeviceIdBuf = (EPS_INT8*)EPS_ALLOC(bufSizeOrg);
+ if (tmpDeviceIdBuf == NULL) {
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ memset(tmpDeviceIdBuf, 0, bufSizeOrg);
+
+ /* Get deviceID string */
+ ret = epsUsbFnc.getDeviceID(fd, tmpDeviceIdBuf, &bufSize);
+ }while(bufSize > bufSizeOrg && 0 != ret);
+
+ if( 0 == ret ){
+ found_dev = (serParseDeviceID(tmpDeviceIdBuf, bufSize, manufacturer, modelName, cmdLevel, NULL, egID) > 0);
+ if(found_dev <= 0) {
retStatus = EPS_ERR_PRINTER_NOT_FOUND;
}
+
+ } else{
+ retStatus = EPS_ERR_COMM_ERROR;
}
- EPS_SAFE_RELEASE(tmpDeviceIdBuf);
+ if( EPS_ERR_NONE == retStatus ){
+ ParseUsbProtocol(tmpDeviceIdBuf, bufSize, &usbInfo->usbProtocol);
+ }
+
+ EPS_SAFE_RELEASE(tmpDeviceIdBuf);
+
+ if ( EPS_IO_OPEN != ioOpenState ) {
+ epsUsbFnc.closePortal(fd);
+ }
EPS_RETURN( retStatus );
}
@@ -1352,10 +1428,12 @@ EPS_LOG_FUNCIN;
/*******************************************|********************************************/
static EPS_ERR_CODE CreatePrinterInfo (
- const EPS_USB_DEVICE* dev,
+ EPS_USB_PRINTER_INFO* usbInfo,
const EPS_INT8* manufacturer,
const EPS_INT8* modelName,
+ const EPS_INT8* serialNo,
EPS_INT32 cmdLevel,
+ EPS_UINT32 egID,
EPS_PRINTER_INN** printer
){
@@ -1382,25 +1460,27 @@ EPS_LOG_FUNCIN;
retStatus = EPS_ERR_MEMORY_ALLOCATION;
goto CreatePrinterInfo_ERROR;
}
- memcpy(&pUsbPrinter->dev, dev, sizeof(pUsbPrinter->dev));
- pUsbPrinter->bCheckDataChannel = FALSE;
+ memcpy(pUsbPrinter, usbInfo, sizeof(EPS_USB_PRINTER_INFO));
(*printer)->protocolInfo = pUsbPrinter;
strcpy( (*printer)->location, EPS_USB_NAME );
strcpy( (*printer)->manufacturerName, manufacturer );
strcpy( (*printer)->modelName, modelName );
+ strcpy( (*printer)->serialNo, serialNo );
(*printer)->protocol = EPS_PROTOCOL_USB;
(*printer)->protocol |= EPS_PRT_DIRECTION(printJob.commMode);
(*printer)->language = EPS_LANG_ESCPR; /* ESC/P-R only via USB */
- switch(cmdLevel){
- case 0: /* Support all. For Uin communication */
- case 2:
+ (*printer)->egID = egID;
+
+ if(0 == cmdLevel){
+ cmdLevel = 0xFFFFFFFF; /* Support all. For Uin communication */
+ }
+ (*printer)->supportFunc |= EPS_SPF_RGBPRINT; /* RGB print */
+ if(cmdLevel & 0x0002){
(*printer)->supportFunc |= EPS_SPF_JPGPRINT; /* Jpeg print */
- case 1:
- (*printer)->supportFunc |= EPS_SPF_RGBPRINT; /* RGB print */
}
- sprintf(usbIDString, EPS_USB_IDPRM_STR, dev->vid, dev->pid, modelName);
+ sprintf(usbIDString, EPS_USB_IDPRM_STR, usbInfo->dev.vid, usbInfo->dev.pid, modelName);
prtSetIdStr(*printer, usbIDString);
CreatePrinterInfo_ERROR:
@@ -1442,12 +1522,8 @@ static EPS_ERR_CODE PortResolution(
/*** Declare Variable Local to Routine */
EPS_ERR_CODE ret = EPS_ERR_NONE; /* Return status of internal calls */
EPS_BOOL bNeedResolve = TRUE;
- EPS_USB_DEVICE dev;
EPS_FILEDSC fdInt = EPS_INVALID_FILEDSC;
- EPS_INT8* tmpDeviceIdBuf;
- EPS_INT32 bufSize;
EPS_INT8 modelName[EPS_NAME_BUFFSIZE]; /* Printer model name */
- EPS_INT8 manufacturer[EPS_NAME_BUFFSIZE]; /* Manufacturer name */
EPS_LOG_FUNCIN;
@@ -1457,61 +1533,37 @@ EPS_LOG_FUNCIN;
EPS_RETURN( EPS_ERR_NEED_BIDIRECT );
}
- /* Allocate temp buffer */
- tmpDeviceIdBuf = (EPS_INT8*)EPS_ALLOC(EPS_DI_MAXSIZE);
- if (tmpDeviceIdBuf == NULL) {
- EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
- }
- memset(tmpDeviceIdBuf, 0, EPS_DI_MAXSIZE);
- bufSize = EPS_DI_MAXSIZE;
-
- memset(&dev, 0, sizeof(dev));
-
- /*** Get device ID */
- ret = cbtCommOpen( (EPS_USB_DEVICE*)printer->protocolInfo, &fdInt );
- if( EPS_ERR_NONE == ret ){
- ret = cbtCommChannelOpen(fdInt, EPS_CBTCHANNEL_CTRL, TRUE);
- if( EPS_ERR_NONE == ret ){
- ret = InfoCommand(fdInt, EPS_CBTCOM_DI, (EPS_UINT8*)tmpDeviceIdBuf, &bufSize);
- cbtCommChannelClose(fdInt, EPS_CBTCHANNEL_CTRL);
- if( EPS_ERR_NONE == ret ){
- /*** Get Printer name */
- memset(manufacturer, 0, sizeof(manufacturer));
- memset(modelName, 0, sizeof(modelName));
- if( serParseDeviceID(tmpDeviceIdBuf, manufacturer, modelName, NULL, NULL) ){
- /*** Printer names compare. */
- if( 0 == strcmp(modelName, printer->modelName) ){
- bNeedResolve = FALSE;
- }
- }
- }
+ /*** Validate this is an Epson ESC/PR Printer */
+ ret = ProbeESCPR((EPS_USB_PRINTER_INFO*)printer->protocolInfo,
+ NULL, modelName, NULL, NULL);
+ if(EPS_ERR_NONE == ret){
+ /*** Printer names compare. */
+ if( 0 == strcmp(modelName, printer->modelName) ){
+ bNeedResolve = FALSE;
}
}
-
+
if(bNeedResolve){
if(EPS_INVALID_FILEDSC != fdInt){
- cbtCommClose(fdInt);
+ ClosePortal( ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol, fdInt);
fdInt = EPS_INVALID_FILEDSC;
}
/* Probe other port */
- ret = ProbePrinterByName(printer->modelName, FALSE, 0, &dev, manufacturer, modelName, NULL);
- if(EPS_ERR_NONE == ret){
- /* Reset printer port */
- memcpy(&((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->dev, &dev,
- sizeof(((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->dev));
-
- ret = cbtCommOpen( (EPS_USB_DEVICE*)printer->protocolInfo, &fdInt );
- }
+ ret = ProbePrinterByName(printer->modelName, FALSE, 0, (EPS_USB_PRINTER_INFO*)printer->protocolInfo,
+ NULL, modelName, NULL, NULL);
}
- EPS_SAFE_RELEASE(tmpDeviceIdBuf);
+ /* open portal */
+ if( EPS_ERR_NONE == ret ){
+ ret = OpenPortal((EPS_USB_PRINTER_INFO*)printer->protocolInfo, &fdInt);
+ }
if( EPS_ERR_NONE == ret ){
*pFd = fdInt;
} else{
if(EPS_INVALID_FILEDSC != fdInt){
- cbtCommClose(fdInt);
+ ClosePortal( ((EPS_USB_PRINTER_INFO*)printer->protocolInfo)->usbProtocol, fdInt);
}
}
@@ -1550,10 +1602,11 @@ static EPS_ERR_CODE ProbePrinterByName (
const EPS_INT8* modelNameTgt,
EPS_BOOL enableBreak,
EPS_UINT32 timeout,
- EPS_USB_DEVICE* dev,
+ EPS_USB_PRINTER_INFO* usbInfo,
EPS_INT8* manufacturer,
EPS_INT8* modelName,
- EPS_INT32* cmdLevel
+ EPS_INT32* cmdLevel,
+ EPS_UINT32* egID
){
/*** Declare Variable Local to Routine */
@@ -1564,10 +1617,10 @@ static EPS_ERR_CODE ProbePrinterByName (
EPS_LOG_FUNCIN;
- *modelName = '\0';
- *manufacturer = '\0';
+ if(NULL != modelName)*modelName = '\0';
+ if(NULL != manufacturer)*manufacturer = '\0';
- fd = epsUsbFnc.findFirst( dev );
+ fd = epsUsbFnc.findFirst( &usbInfo->dev );
if(EPS_INVALID_FILEDSC != fd){
if(epsCmnFnc.getTime){
tmStart = epsCmnFnc.getTime();
@@ -1577,7 +1630,7 @@ EPS_LOG_FUNCIN;
do{
/*** Validate this is an Epson ESC/PR Printer */
- ret = ProbeESCPR(dev, manufacturer, modelName, cmdLevel);
+ ret = ProbeESCPR(usbInfo, manufacturer, modelName, cmdLevel, egID);
if(EPS_ERR_NONE == ret){
if( 0 == strcmp(modelNameTgt, modelName) ){
@@ -1606,7 +1659,7 @@ EPS_LOG_FUNCIN;
epsCmnFnc.unlockSync();
}
}
- }while( epsUsbFnc.findNext( fd, dev ) );
+ }while( epsUsbFnc.findNext( fd, &usbInfo->dev ) );
epsUsbFnc.findClose(fd);
}
@@ -1641,8 +1694,31 @@ EPS_LOG_FUNCIN;
static EPS_ERR_CODE InfoCommand (
EPS_FILEDSC fd,
+ EPS_UINT32 usbProtocol,
+ EPS_INT32 Command,
+ EPS_UINT8** pResult,
+ EPS_INT32* Size
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+
+ EPS_LOG_FUNCIN;
+
+ if(EPS_USBP_CBT == usbProtocol){
+ ret = CbtInfoCommand(fd, Command, pResult, Size);
+ } else /* END4 */ {
+ ret = RmtInfoCommand(fd, Command, pResult, Size);
+ }
+
+ EPS_RETURN( ret );
+}
+
+
+static EPS_ERR_CODE CbtInfoCommand (
+
+ EPS_FILEDSC fd,
EPS_INT32 Command,
- EPS_UINT8* pResult,
+ EPS_UINT8** pResult,
EPS_INT32* Size
){
@@ -1654,6 +1730,14 @@ static EPS_ERR_CODE InfoCommand (
EPS_LOG_FUNCIN;
+ if(NULL == *pResult && 0 == *Size){
+ *pResult = (EPS_UINT8*)EPS_ALLOC(EPS_PM_BASESIZE);
+ if(NULL == *pResult){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+ *Size = EPS_PM_BASESIZE;
+ }
+
switch(Command){
case EPS_CBTCOM_DI:
stCom[0] = 'd'; stCom[1] = 'i'; stCom[4] = 0x01;
@@ -1661,21 +1745,23 @@ static EPS_ERR_CODE InfoCommand (
case EPS_CBTCOM_ST:
stCom[0] = 's'; stCom[1] = 't'; stCom[4] = 0x01;
break;
- case EPS_CBTCOM_CX:
- stCom[0] = 'c'; stCom[1] = 'x'; stCom[4] = 0x01;
- break;
- case EPS_CBTCOM_CSA:
- stCom[0] = 'c'; stCom[1] = 's'; stCom[4] = 0x00;
- break;
- case EPS_CBTCOM_CSB:
- stCom[0] = 'c'; stCom[1] = 's'; stCom[4] = 0x01;
- break;
case EPS_CBTCOM_PM:
stCom[0] = 'p'; stCom[1] = 'm'; stCom[4] = 0x01;
break;
case EPS_CBTCOM_PM2:
stCom[0] = 'p'; stCom[1] = 'm'; stCom[4] = 0x02;
break;
+ case EPS_CBTCOM_PM3:
+ stCom[0] = 'p'; stCom[1] = 'm'; stCom[4] = 0x03;
+ break;
+ case EPS_CBTCOM_CD:
+ stCom[0] = 'c'; stCom[1] = 'd'; stCom[4] = 0x00;
+ break;
+ case EPS_CBTCOM_VI5:
+ stCom[0] = 'v'; stCom[1] = 'i'; stCom[4] = 0x05;
+ break;
+ default:
+ EPS_RETURN( EPS_ERR_OPR_FAIL );
}
Retry = 5;
@@ -1698,9 +1784,11 @@ static EPS_ERR_CODE InfoCommand (
Retry = 5;
lSize = *Size;
do{
- if ((Ret = cbtCommReadData(fd, EPS_CBTCHANNEL_CTRL, (EPS_UINT8 *)pResult, lSize, Size)) != EPCBT_ERR_NONE){
+ if ((Ret = cbtCommReadData(fd, EPS_CBTCHANNEL_CTRL, *pResult, lSize, Size)) != EPCBT_ERR_NONE){
EPS_DBGPRINT(("EPS SER : CBT Command Read Reply Failed [%d]\r\n",Ret));
if (Ret != EPSCBT_ERR_FNCDISABLE && Ret != EPSCBT_ERR_READERROR){
+ EPS_SAFE_RELEASE(*pResult);
+ *Size = 0;
EPS_RETURN( EPS_ERR_COMM_ERROR );
}
}else if (*Size != 0){
@@ -1710,17 +1798,568 @@ static EPS_ERR_CODE InfoCommand (
Retry--;
if (!Retry){
EPS_DBGPRINT(("EPS SER : CBT Command Read Reply Retry Failed \r\n"));
+ EPS_SAFE_RELEASE(*pResult);
+ *Size = 0;
EPS_RETURN( EPS_ERR_COMM_ERROR );
}
serDelayThread(2*_SECOND_, &epsCmnFnc); /* retry command after 2 seconds*/
}while(Retry > 0);
- pResult[*Size] = '\0';
+ if( *Size < 5 || 0 == memcmp(&(*pResult)[3], "NA", 2) ){
+ EPS_SAFE_RELEASE(*pResult);
+ *Size = 0;
+ EPS_RETURN( EPS_ERR_PRINTER_NOT_SUPPORTED );
+ }
+
+ (*pResult)[*Size] = '\0';
+
+ EPS_RETURN( EPS_ERR_NONE );
+}
+
+
+static EPS_ERR_CODE RmtInfoCommand (
+
+ EPS_FILEDSC fd,
+ EPS_INT32 Command,
+ EPS_UINT8** pResult,
+ EPS_INT32* Size
+
+){
+ EPS_UINT8 stCom[27] = {0x1B, 0x28, 0x52, 0x08, 0x00, 0x00, 'R', 'E', 'M', 'O', 'T', 'E', '1',
+ 'P', 'I', 0x06,0x00,0x01, 0x00, 0x00,0x00, 0x00,0x00,
+ 0x1B, 0x00, 0x00, 0x00};
+ const EPS_INT8 *rsp = "@BDC PI\x0D\x0A";
+ EPS_UINT8 rspBuff[EPS_PM_BASESIZE];
+ EPS_INT32 rspSize = sizeof(rspBuff);
+ EPS_INT32 ComSize = sizeof(stCom);
+ EPS_INT32 ret = 0;
+ EPS_INT32 retry = 0;
+ EPS_INT32 packetSize = 0;
+ EPS_INT32 packetNum = 0;
+ EPS_INT32 totalRespSize = 0;
+ EPS_INT32 n = 0;
+ EPS_BOOL rcvResponce = FALSE;
+ EPS_STATUS_INFO stInfo;
+
+ EPS_LOG_FUNCIN;
+
+ if(NULL == *pResult && 0 == *Size){
+ *pResult = (EPS_UINT8*)EPS_ALLOC(EPS_PM_BASESIZE);
+ if(NULL == *pResult){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+ *Size = EPS_PM_BASESIZE;
+ }
+
+ /* step 0: dummy(ST) read */
+ for(retry = 0; retry < EPS_STAT_RETRY; retry++){
+ rspSize = *Size;
+ ret = nd4ReadPortal(fd, *pResult, &rspSize);
+ /*EPS_DUMP(*pResult, rspSize)*/
+ if( EPS_ERR_NONE != ret ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+ if( 0 == memcmp(*pResult, "@BDC ST2\x0D\x0A", 10) ){
+ break;
+ }
+ }
+ if(EPS_CBTCOM_ST == Command){
+ EPS_RETURN( EPS_ERR_NONE );
+ }
+
+ /* check IDLE */
+ ret = serAnalyzeStatus((EPS_INT8*)*pResult, 0, &stInfo);
+ if( EPS_ERR_NONE != ret ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+ if( EPS_ST_IDLE != stInfo.nState ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+
+ /* set command parameter */
+ rspSize = sizeof(rspBuff);
+ stCom[21] = rspSize & 0x000000FF;
+ stCom[22] = (rspSize & 0x0000FF00) >> 8;
+ switch(Command){
+ case EPS_CBTCOM_PM:
+ stCom[18] = 0x80;
+ strcpy((EPS_INT8*)*pResult, "@BDC PM\x0D\x0A");
+ totalRespSize = 9;
+ break;
+ case EPS_CBTCOM_PM2:
+ stCom[18] = 0x81;
+ strcpy((EPS_INT8*)*pResult, "@BDC PM\x0D\x0A");
+ totalRespSize = 9;
+ break;
+ case EPS_CBTCOM_PM3:
+ stCom[18] = 0x82;
+ totalRespSize = 0;
+ break;
+ case EPS_CBTCOM_CD:
+ stCom[18] = 0x00;
+ break;
+ default:
+ EPS_RETURN( EPS_ERR_OPR_FAIL );
+ }
+
+ /* step 1: get reply size */
+ /*EPS_DUMP(stCom, ComSize)*/
+ ret = nd4WritePortal(fd, stCom, &ComSize);
+ if( EPS_ERR_NONE != ret ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+
+ for(retry = 0; retry < EPS_STAT_RETRY; retry++){
+ rspSize = sizeof(rspBuff);
+ ret = nd4ReadPortal(fd, rspBuff, &rspSize);
+ /*EPS_DUMP(rspBuff, rspSize)*/
+
+ if( EPS_ERR_NONE != ret ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+ if( 0 == memcmp(rsp, rspBuff, strlen(rsp)) ){
+ rcvResponce = TRUE;
+ break;
+ }
+ }
+ if( FALSE == rcvResponce){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+ if( 0 == memcmp(&rspBuff[21], "NA", 2) ){
+ EPS_RETURN( EPS_ERR_PRINTER_NOT_SUPPORTED );
+ } else if( rspSize < 24 || 0 == memcmp(&rspBuff[21], "BUSY", 4)){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+
+ packetNum = rspBuff[21] + (rspBuff[22]<<8);
+ packetSize= rspBuff[23] + (rspBuff[24]<<8);
+
+ EPS_MEM_GROW(EPS_UINT8*, *pResult, Size, packetNum*packetSize )
+ if(NULL == *pResult){
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION )
+ }
+
+ /* step 2: send command */
+ for(n = 1; n <= packetNum; n++ ){
+ ComSize = sizeof(stCom);
+ stCom[19] = n & 0x000000FF;
+ stCom[20] = n >> 8;
+
+ /*EPS_DUMP(stCom, ComSize)*/
+ ret = nd4WritePortal(fd, stCom, &ComSize);
+ if( EPS_ERR_NONE != ret ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+
+ for(retry = 0; retry < EPS_STAT_RETRY; retry++){
+ rspSize = sizeof(rspBuff);
+ ret = nd4ReadPortal(fd, rspBuff, &rspSize);
+ /*EPS_DUMP(rspBuff, rspSize)*/
+
+ if( EPS_ERR_NONE != ret ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+ if( 0 == memcmp(rsp, rspBuff, strlen(rsp)) ){
+ rcvResponce = TRUE;
+ break;
+ }
+ }
+ if( 0 == memcmp(&rspBuff[21], "NA", 2) ){
+ EPS_RETURN( EPS_ERR_PRINTER_NOT_SUPPORTED );
+ } else if( 0 == memcmp(&rspBuff[21], "BUSY", 4)){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+
+ rspSize = rspBuff[29] + (rspBuff[30]<<8);
+ if(*Size < rspSize + totalRespSize){
+ EPS_RETURN( EPS_ERR_OPR_FAIL ); /* buffer not enough */
+ }
+
+ memcpy(*pResult+totalRespSize, rspBuff+35, rspSize);
+ totalRespSize += rspSize;
+ }
+ *Size = totalRespSize;
EPS_RETURN( EPS_ERR_NONE );
}
+/*******************************************|********************************************/
+/* */
+/* Function name: nd4WritePortal() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* fd EPS_FILEDSC* I: usb file descriptor */
+/* buff EPS_UINT8* I: write data */
+/* buffSize EPS_INT32* I/O: write data size */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Info command executed successfully */
+/* EPS_ERR_COMM_ERROR - Communication Error */
+/* */
+/* Description: */
+/* Write portal via CBT or END4. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE nd4WritePortal (
+
+ EPS_FILEDSC fd,
+ const EPS_UINT8 *buff,
+ EPS_INT32 *buffSize
+
+){
+ EPS_INT32 ret = 0;
+ EPS_INT32 retry = 0;
+ EPS_INT32 writeSize = 0;
+ EPS_INT32 writeTotal = 0;
+
+ EPS_LOG_FUNCIN;
+
+ for(retry = 0; retry < EPS_STAT_RETRY; retry++){
+ ret = epsUsbFnc.writePortal(fd, buff+writeTotal, *buffSize, &writeSize);
+ if( EPS_ERR_NONE != ret ){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+ writeTotal += writeSize;
+ *buffSize -= writeSize;
+
+ if(0 >= *buffSize){
+ break;
+ }
+ serDelayThread(2*_SECOND_, &epsCmnFnc); /* retry command after 2 seconds*/
+ }
+ *buffSize = writeTotal;
+
+ if(retry >= EPS_STAT_RETRY){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+
+ EPS_RETURN( ret );
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: nd4ReadPortal() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* fd EPS_FILEDSC* I: usb file descriptor */
+/* buff EPS_UINT8* I: read buffer */
+/* buffSize EPS_INT32* I/O: buffer size */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Info command executed successfully */
+/* EPS_ERR_COMM_ERROR - Communication Error */
+/* */
+/* Description: */
+/* Read portal via CBT or END4. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE nd4ReadPortal (
+
+ EPS_FILEDSC fd,
+ EPS_UINT8 *buff,
+ EPS_INT32 *buffSize
+
+){
+ EPS_INT32 ret = 0;
+ EPS_INT32 retry = 0;
+ EPS_INT32 readSize = 0;
+ EPS_INT32 readTotal = 0;
+ EPS_INT32 buffRemain = *buffSize;
+ EPS_UINT8 *dataSizePos = 0;
+ EPS_INT32 dataSize = 0;
+
+ EPS_LOG_FUNCIN;
+
+ for(retry = 0; retry < EPS_STAT_RETRY; ){
+ ret = epsUsbFnc.readPortal(fd, buff+readTotal, buffRemain, &readSize);
+ if( EPS_ERR_NONE != ret ){
+ EPS_DBGPRINT(("read error %d", ret));
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+ if(readSize <= 0){
+ retry++;
+ serDelayThread(500, &epsCmnFnc); /* retry command after 500 milli seconds*/
+ continue;
+ }
+ readTotal += readSize;
+ buffRemain -= readSize;
+
+ if( 0 >= dataSize){
+ /* get data size */
+ if( (dataSizePos = (EPS_UINT8*)strstr((EPS_INT8*)buff, "\x0D\x0A")) != NULL ){
+ if( (dataSizePos-buff) + 4 < readTotal){
+ dataSize = *(dataSizePos+2);
+ dataSize += *(dataSizePos+3) << 8;
+ dataSize += dataSizePos - buff + 4;
+ if(*buffSize < dataSize){
+ EPS_RETURN( EPS_ERR_OPR_FAIL ); /* buffer not enough */
+ }
+ }
+ }
+ }
+
+ if( 0 < dataSize && dataSize <= readTotal){
+ break;
+ }
+ }
+ *buffSize = readTotal;
+
+ if(retry >= EPS_STAT_RETRY){
+ EPS_RETURN( EPS_ERR_COMM_ERROR );
+ }
+
+ EPS_RETURN( ret );
+}
+
+/*******************************************|********************************************/
+/* */
+/* Function name: OpenPortal() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* usbInfo EPS_USB_PRINTER_INFO* I: usb protocol info */
+/* fd EPS_FILEDSC* O: usb file descriptor */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Info command executed successfully */
+/* EPS_ERR_NOT_OPEN_IO - Cannot Open I/O Portal */
+/* */
+/* Description: */
+/* Open portal via CBT or END4. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE OpenPortal (
+
+ EPS_USB_PRINTER_INFO *usbInfo,
+ EPS_FILEDSC *fd
+
+){
+ EPS_INT32 ret = 0;
+
+ EPS_LOG_FUNCIN;
+
+ if(EPS_USBP_CBT == usbInfo->usbProtocol){
+ ret = cbtCommOpen( &usbInfo->dev, fd );
+ } else{
+ *fd = epsUsbFnc.openPortal(&usbInfo->dev);
+ if( EPS_INVALID_FILEDSC == *fd ){
+ ret = EPS_ERR_NOT_OPEN_IO;
+ } else{
+ ioOpenState = EPS_IO_OPEN;
+ }
+ }
+
+ if(0 == ret){
+ EPS_RETURN( EPS_ERR_NONE );
+ } else{
+ EPS_RETURN( EPS_ERR_NOT_OPEN_IO );
+ }
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: ClosePortal() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* usbProtocol EPS_UINT32 I: usb protocol kind */
+/* fd EPS_FILEDSC* I: usb file descriptor */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Info command executed successfully */
+/* EPS_ERR_NOT_CLOSE_IO - Cannot close I/O portal */
+/* */
+/* Description: */
+/* Open portal via CBT or END4. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE ClosePortal (
+
+ EPS_UINT32 usbProtocol,
+ EPS_FILEDSC fd
+
+){
+ EPS_INT32 ret = 0;
+
+ EPS_LOG_FUNCIN;
+
+ if(EPS_USBP_CBT == usbProtocol){
+ ret = cbtCommClose(fd);
+ } else{
+ ret = epsUsbFnc.closePortal(fd);
+ ioOpenState = EPS_IO_NOT_OPEN;
+ }
+
+ if(0 == ret){
+ EPS_RETURN( EPS_ERR_NONE );
+ } else{
+ EPS_RETURN( EPS_ERR_NOT_CLOSE_IO );
+ }
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: ParseUsbProtocol() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* deviceIDString EPS_INT8* I: deviceID string */
+/* strlength EPS_INT32 I: string length */
+/* usbProtocol EPS_UINT32* O: usb protocol kind */
+/* */
+/* Return value: */
+/* N/A */
+/* */
+/* Description: */
+/* Get the epson usb protocol from DeviceID string. */
+/* */
+/*******************************************|********************************************/
+static void ParseUsbProtocol (
+
+ EPS_INT8* deviceIDString,
+ EPS_INT32 strlength,
+ EPS_UINT32* usbProtocol
+
+){
+ EPS_INT8* i = NULL;
+ EPS_INT8* j = NULL;
+ EPS_INT8* k = NULL;
+
+ EPS_LOG_FUNCIN;
+
+ *usbProtocol = EPS_USBP_CBT; /* default */
+
+ if(strlength < 2){
+ EPS_RETURN_VOID;
+ }
+ if(deviceIDString[0] == 0x00 || deviceIDString[1] == 0x00){
+ deviceIDString += 2;
+ }
+
+ if((i = strstr(deviceIDString, "CMD:")) == NULL) {
+ EPS_RETURN_VOID;
+ }
+ i += 4;
+
+ if((j = strstr(i, ";")) == NULL) {
+ EPS_RETURN_VOID;
+ }
+ *j = '\0';
+
+ while( NULL != i ){
+ if((k = strstr(i, ",")) != NULL) {
+ *k = '\0';
+ }
+
+/* if( strncmp(i, "D4", 4) == 0 ){
+ *usbProtocol = EPS_USBP_CBT;
+ break;
+ }
+*/
+ if( strncmp(i, "END4", 4) == 0 ){
+ *usbProtocol = EPS_USBP_ND4;
+ break;
+ }
+
+ if(k){
+ *k = ',';
+ i = k+1;
+ if(i >= j){
+ break;
+ }
+ } else{
+ break;
+ }
+ }
+ if(k)*k = ',';
+
+ *j = ';';
+
+ EPS_RETURN_VOID;
+}
+
+
+/*******************************************|********************************************/
+/* */
+/* Function name: GetSerialNumber() */
+/* */
+/* Arguments */
+/* --------- */
+/* Name: Type: Description: */
+/* usbInfo EPS_USB_PRINTER_INFO* I: usb protocol info */
+/* deviceIDString EPS_INT8* I: deviceID string */
+/* */
+/* Return value: */
+/* EPS_ERR_NONE - Info command executed successfully */
+/* */
+/* Description: */
+/* Get the epson usb protocol from DeviceID string. */
+/* */
+/*******************************************|********************************************/
+static EPS_ERR_CODE GetSerialNumber (
+
+ EPS_USB_PRINTER_INFO *usbInfo,
+ EPS_INT8* serialNo
+
+){
+ EPS_ERR_CODE ret = EPS_ERR_NONE;
+ EPS_FILEDSC fd;
+ EPS_UINT8* tmpBuff = NULL;
+ EPS_INT32 tmpBuffSize = EPS_DI_MAXSIZE;
+
+ EPS_LOG_FUNCIN;
+
+ ret = OpenPortal( usbInfo, &fd );
+ if(EPS_ERR_NONE != ret){
+ EPS_RETURN( ret );
+ }
+
+ tmpBuff = (EPS_INT8*)EPS_ALLOC(tmpBuffSize);
+ if (tmpBuff == NULL) {
+ EPS_RETURN( EPS_ERR_MEMORY_ALLOCATION );
+ }
+ memset(tmpBuff, 0, tmpBuffSize);
+
+ if( EPS_USBP_CBT == usbInfo->usbProtocol ){
+ ret = cbtCommChannelOpen(fd, EPS_CBTCHANNEL_CTRL, TRUE);
+ if (EPS_ERR_NONE == ret ) {
+ ret = InfoCommand(fd, usbInfo->usbProtocol, EPS_CBTCOM_CD, &tmpBuff, &tmpBuffSize);
+ if (EPS_ERR_NONE == ret ) {
+ /*retStatus = */serGetSerialNo((EPS_INT8*)tmpBuff, tmpBuffSize, serialNo);
+ } else{
+ ret = EPS_ERR_NONE; /* ignoure */
+ }
+ } else{
+ ret = (EPS_ERR_CODE)EPS_ERR_NOT_OPEN_IO;
+ }
+
+ cbtCommChannelClose(fd, EPS_CBTCHANNEL_CTRL);
+ } else{
+ ret = RmtInfoCommand(fd, EPS_CBTCOM_ST, &tmpBuff, &tmpBuffSize);
+ if (EPS_ERR_NONE == ret ) {
+ /*retStatus = */serGetSerialNoFormST((EPS_INT8*)tmpBuff, serialNo, EPS_ADDR_BUFFSIZE);
+ } else{
+ ret = EPS_ERR_NONE; /* ignoure */
+ }
+ }
+
+ EPS_SAFE_RELEASE(tmpBuff);
+
+ ClosePortal(usbInfo->usbProtocol, fd);
+
+ EPS_RETURN( ret );
+}
/*___________________________________ epson-usb.c ____________________________________*/
diff --git a/lib/epson-usb.h b/lib/epson-usb.h
index 823677d..7b6067c 100755..100644
--- a/lib/epson-usb.h
+++ b/lib/epson-usb.h
@@ -50,10 +50,11 @@ extern EPS_ERR_CODE usbResetPrinter (void
extern EPS_ERR_CODE usbGetStatus (EPS_STATUS_INFO*, EPS_BOOL*, EPS_BOOL* );
extern EPS_ERR_CODE usbGetJobStatus (EPS_STATUS_INFO* );
-extern EPS_ERR_CODE usbGetPMString (const EPS_PRINTER_INN*, EPS_INT32,
- EPS_UINT8*, EPS_INT32* );
+extern EPS_ERR_CODE usbGetInfo (const EPS_PRINTER_INN*, EPS_INT32,
+ EPS_UINT8**, EPS_INT32* );
extern EPS_ERR_CODE usbMechCommand (EPS_INT32 );
+extern EPS_ERR_CODE usbInfoCommand (const EPS_PRINTER_INN*, EPS_INT32, EPS_UINT8**, EPS_INT32* );
#ifdef __cplusplus
}
diff --git a/lib/escpr_def.h b/lib/escpr_def.h
deleted file mode 100755
index 062a950..0000000
--- a/lib/escpr_def.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/***********************************************************************
- *
- * Copyright (c) 2005 Seiko Epson Corporation.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * File Name: escpr_def.h
- *
- ***********************************************************************/
-
-#ifndef __EPSON_ESCPR_DEF_H__
-#define __EPSON_ESCPR_DEF_H__
-
-#include "escpr_osdep.h"
-
-/*=======================================================================================*/
-/* typedef */
-/*=======================================================================================*/
-
-typedef ESCPR_BYTE4 (* ESCPR_FPSPOOLFUNC)(void* hParam,
- const ESCPR_UBYTE1* pBuf, ESCPR_UBYTE4 cbBuf);
-
-typedef ESCPR_BYTE4 ESCPR_ERR_CODE;
-
-typedef enum _ESCPR_ENDIAN {
- ESCPR_ENDIAN_NOT_TESTED = 0,
- ESCPR_ENDIAN_BIG,
- ESCPR_ENDIAN_LITTLE
-} ESCPR_ENDIAN;
-
-/*=======================================================================================*/
-/* struct */
-/*=======================================================================================*/
-
-typedef struct tagESCPR_RECT{
- ESCPR_BYTE4 left;
- ESCPR_BYTE4 top;
- ESCPR_BYTE4 right;
- ESCPR_BYTE4 bottom;
-}ESCPR_RECT;
-
-typedef struct tagESCPR_BANDBMP{
- ESCPR_UBYTE4 WidthBytes; /* number of bytes in each scan line */
- ESCPR_UBYTE1* Bits; /* pointer to the the bit values for the bitmap */
-}ESCPR_BANDBMP;
-
-typedef struct tagESCPR_OPT{
- ESCPR_BYTE4 nPrnID; /* Printer ID */
- ESCPR_FPSPOOLFUNC fpspoolfunc; /* pointer to spool function */
-}ESCPR_OPT;
-
-
-/*----- Set Print Quality -----*/
-typedef struct tagESCPR_PRINT_QUALITY{
- ESCPR_UBYTE1 MediaTypeID;
- ESCPR_UBYTE1 PrintQuality;
- ESCPR_UBYTE1 ColorMono;
- ESCPR_BYTE1 Brightness;
- ESCPR_BYTE1 Contrast;
- ESCPR_BYTE1 Saturation;
- ESCPR_UBYTE1 ColorPlane;
- ESCPR_UBYTE2 PaletteSize;
- ESCPR_UBYTE1* PaletteData;
-}ESCPR_PRINT_QUALITY;
-
-/*----- Set Print Job -----*/
-typedef struct tagESCPR_PRINT_JOB{
- ESCPR_UBYTE4 PaperWidth;
- ESCPR_UBYTE4 PaperLength;
- ESCPR_BYTE2 TopMargin;
- ESCPR_BYTE2 LeftMargin;
- ESCPR_UBYTE4 PrintableAreaWidth;
- ESCPR_UBYTE4 PrintableAreaLength;
- ESCPR_UBYTE1 InResolution;
- ESCPR_UBYTE1 PrintDirection;
-}ESCPR_PRINT_JOB;
-
-typedef enum tagESCPR_STATUS{
- ESCPR_STATUS_NOT_INITIALIZED,
- ESCPR_STATUS_INITIALIZED
-}ESCPR_STATUS;
-
-typedef struct {
- ESCPR_FPSPOOLFUNC gfpSendData; /* A function pointer for send data function */
-} ESCPR_GLOBALFUNC;
-
-
-/*=======================================================================================*/
-/* define */
-/*=======================================================================================*/
-
-/*=======================================================================================*/
-/* Media Information of Control Command "MI" */
-/*=======================================================================================*/
-/* Media Types */
-#define ESCPR_MTID_PLAIN 0
-#define ESCPR_MTID_360INKJET 1
-#define ESCPR_MTID_IRON 2
-#define ESCPR_MTID_PHOTOINKJET 3
-#define ESCPR_MTID_PHOTOADSHEET 4
-#define ESCPR_MTID_MATTE 5
-#define ESCPR_MTID_PHOTO 6
-#define ESCPR_MTID_PHOTOFILM 7
-#define ESCPR_MTID_MINIPHOTO 8
-#define ESCPR_MTID_OHP 9
-#define ESCPR_MTID_BACKLIGHT 10
-#define ESCPR_MTID_PGPHOTO 11
-#define ESCPR_MTID_PSPHOTO 12
-#define ESCPR_MTID_PLPHOTO 13
-#define ESCPR_MTID_MCGLOSSY 14
-#define ESCPR_MTID_ARCHMATTE 15
-#define ESCPR_MTID_WATERCOLOR 16
-#define ESCPR_MTID_PROGLOSS 17
-#define ESCPR_MTID_MATTEBOARD 18
-#define ESCPR_MTID_PHOTOGLOSS 19
-#define ESCPR_MTID_SEMIPROOF 20
-#define ESCPR_MTID_SUPERFINE2 21
-#define ESCPR_MTID_DSMATTE 22
-#define ESCPR_MTID_CLPHOTO 23
-#define ESCPR_MTID_ECOPHOTO 24
-#define ESCPR_MTID_VELVETFINEART 25
-#define ESCPR_MTID_PROOFSEMI 26
-#define ESCPR_MTID_HAGAKIRECL 27
-#define ESCPR_MTID_HAGAKIINKJET 28
-#define ESCPR_MTID_PHOTOINKJET2 29
-#define ESCPR_MTID_DURABRITE 30
-#define ESCPR_MTID_MATTEMEISHI 31
-#define ESCPR_MTID_HAGAKIATENA 32
-#define ESCPR_MTID_PHOTOALBUM 33
-#define ESCPR_MTID_PHOTOSTAND 34
-#define ESCPR_MTID_RCB 35
-#define ESCPR_MTID_PGPHOTOEG 36
-#define ESCPR_MTID_ENVELOPE 37
-#define ESCPR_MTID_PLATINA 38
-#define ESCPR_MTID_ULTRASMOOTH 39
-#define ESCPR_MTID_CDDVD 91
-#define ESCPR_MTID_CDDVDHIGH 92
-#define ESCPR_MTID_THICKPAPER 47
-#define ESCPR_MTID_PREPRINTED 53
-#define ESCPR_MTID_LETTERHEAD 54
-#define ESCPR_MTID_RECYCLED 55
-#define ESCPR_MTID_COLORPAPER 56
-#define ESCPR_MTID_CLEANING 99
-
-/*=======================================================================================*/
-/* Definition of Parameter for Print Quality */
-/*=======================================================================================*/
-/* PrintQuality */
-#define ESCPR_PQ_DRAFT 0 /* Draft */
-#define ESCPR_PQ_NORMAL 1 /* Normal */
-#define ESCPR_PQ_HIGH 2 /* High */
-
-/* ColorMono */
-#define ESCPR_CM_COLOR 0 /* Color */
-#define ESCPR_CM_MONOCHROME 1 /* Monochrome */
-
-/* Brightness */
-#define ESCPR_BRIGHT_DEF 0 /* Default */
-
-/* Contrast */
-#define ESCPR_CONT_DEF 0 /* Default */
-
-/* Saturation */
-#define ESCPR_SATU_DEF 0 /* Default */
-
-/* ColorPlane */
-#define ESCPR_CP_FULLCOLOR 0 /* Full Color */
-#define ESCPR_CP_256COLOR 1 /* 256 Color */
-
-/*=======================================================================================*/
-/* Definition of Parameter for Print Job */
-/*=======================================================================================*/
-/* InResolution */
-#define ESCPR_IR_3636 0 /* 360 x 360 dpi */
-#define ESCPR_IR_7272 1 /* 720 x 720 dpi */
-#define ESCPR_IR_3030 2 /* 300 x 300 dpi */
-#define ESCPR_IR_6060 3 /* 600 x 600 dpi */
-
-/* PrintDirection */
-#define ESCPR_PD_BIDIREC 0 /* Bi-direction */
-#define ESCPR_PD_UNIDIREC 1 /* Uni-direction */
-
-/*=======================================================================================*/
-/* Definition of Send Data */
-/*=======================================================================================*/
-/* CompMode */
-#define ESCPR_COMP_NO 0 /* Non compression */
-#define ESCPR_COMP_DONE 1 /* Runlength compression */
-
-/*=======================================================================================*/
-/* Definition of End Page */
-/*=======================================================================================*/
-#define ESCPR_END_PAGE 0 /* There is no next page */
-#define ESCPR_NEXT_PAGE 1 /* There is a next page */
-
-/*=======================================================================================*/
-/* Definition of Error Code */
-/*=======================================================================================*/
-#define ESCPR_ERR_NOERROR 0 /* terminated normally */
-#define ESCPR_ERR_NOT_SUPPORT -1 /* parameter aren't be supported. */
-#define ESCPR_ERR_DON_T_PROCESS -2 /* on don't process this situation. */
-#define ESCPR_ERR_CAN_T_FREE_HANDLE -3 /* can't free handle. */
-#define ESCPR_ERR_CAN_T_ALLOC_MEMORY -4 /* can't allocate needed memory. */
-#define ESCPR_ERR_HAPPEN_PROBLEM -10 /* happened any error. */
-#define ESCPR_ERR_NOINBMP -20 /* doesn't get an input bitmap. */
-#define ESCPR_ERR_NOATBMP -21 /* doesn't get an attribute bitmap. */
-#define ESCPR_ERR_CAN_T_LOAD_DLL -30 /* can't load DLL */
-#define ESCPR_ERR_SPOOL_IO -40 /* error with spooling i/o function */
-
-#endif
-
diff --git a/lib/escpr_osdep.h b/lib/escpr_osdep.h
deleted file mode 100755
index 100dcdd..0000000
--- a/lib/escpr_osdep.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/***********************************************************************
- *
- * Copyright (c) 2005-2008 Seiko Epson Corporation.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * File Name: escpr_osdep.h
- *
- ***********************************************************************/
-
-#ifndef __EPSON_ESCPR_OSDEP_H__
-#define __EPSON_ESCPR_OSDEP_H__
-
-#include <stddef.h>
-
-/*=======================================================================================*/
-/* typedef Area */
-/*=======================================================================================*/
-typedef unsigned char ESCPR_UBYTE1;
-typedef unsigned short ESCPR_UBYTE2;
-typedef unsigned int ESCPR_UBYTE4;
-
-typedef char ESCPR_BYTE1;
-typedef short ESCPR_BYTE2;
-typedef int ESCPR_BYTE4;
-
-/* Local time */
-typedef struct _tagESCPR_LOCAL_TIME_ {
- ESCPR_UBYTE2 year;
- ESCPR_UBYTE1 mon;
- ESCPR_UBYTE1 day;
- ESCPR_UBYTE1 hour;
- ESCPR_UBYTE1 min;
- ESCPR_UBYTE1 sec;
-}ESCPR_LOCAL_TIME;
-
-/*=======================================================================================*/
-/* Define Area */
-/*=======================================================================================*/
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef BOOL
-#define BOOL int
-#endif
-
-/*=======================================================================================*/
-/* Global Functions */
-/*=======================================================================================*/
-void ESCPR_Mem_Set(void* Dest, ESCPR_BYTE4 c, size_t Size);
-void ESCPR_Mem_Copy(void* Dest, const void* Src, size_t Size);
-void* ESCPR_Mem_Alloc(size_t MemSize);
-void ESCPR_Mem_Free(void* MemPtr);
-BOOL ESCPR_Mem_Compare(const void *s1, const void *s2, size_t n);
-void ESCPR_GetLocalTime(ESCPR_LOCAL_TIME *epsTime);
-
-#endif