function epsonarmocmd
PARAMETERS lhayreitento
lhayreitento = IIF(PCOUNT()<1,.f.,lhayreitento)
LOCAL lcrepuesta,lnrepFiscal,lnRepPrinter,ldebociclar,lnErrorActual
this.lnlasterror = 0
this.lconread = ""
this.lconwrite = ""
DO WHILE this.OEpson.state = 2 && EFP_S_Busy
ENDDO
this.epsonrespuesta = this.OEpson.sendCommand
ldebociclar = .t.
DO WHILE ldebociclar
loCmd.ok = .t.
IF this.lnlasterror#0
loCmd.ok = .f.
DO case
CASE this.lnlasterror = 1 && EFP_E_ComInUse
loCmd.errorimpresora = 1
loCmd.textoerrorimpresora = "NO SE PUDO ABRIR EL PUERTO"
loCmd.Cmderrorimpresora = ""
CASE this.lnLastError = 2 && EFP_E_InvalidCom
loCmd.errorimpresora = 2
loCmd.textoerrorimpresora = "PUERTO COM "+STR(loCmd.puerto,1)+": DESCONOCIDO"
loCmd.Cmderrorimpresora = ""
CASE this.lnLastError = 7 && EFP_E_MaxDataLengthReached
loCmd.errorfiscal = 7
loCmd.textoerrorfiscal = "ERROR EN PARAMETROS"
loCmd.Cmderrorfiscal = lOCmd.TipoCmd+" "+loCmd.textocrudo
CASE this.lnlastError = 8 && EFP_E_InvalidDataInField
loCmd.errorfiscal = 8
loCmd.textoerrorfiscal = "CARACTER NO SOPORTADO POR EL CORRIENTE PROTOCOLO"
loCmd.Cmderrorfiscal = lOCmd.TipoCmd+" "+loCmd.textocrudo
CASE this.lnlastError = 10 && EFP_E_WriteError
loCmd.errorimpresora = 10
loCmd.textoerrorimpresora = "IMPRESORA DESCONECTADA O FUERA DE LINEA"
loCmd.Cmderrorimpresora = ""
CASE this.lnlastError = 12 && EFP_E_NackReceived
loCmd.errorimpresora = 12
loCmd.textoerrorimpresora = "ERROR EN CONSISTENCIA DE DATOS"
loCmd.Cmderrorimpresora = lOCmd.TipoCmd+" "+loCmd.textocrudo
ENDCASE
this.epsonrespuesta = this.manejaerrorepson("LASTERROR",.F.)
EXIT
ENDIF
lnrepFiscal = this.OEpson.fiscalStatus
lnrepPrinter = this.OEpson.printerStatus
lcrepuesta = GetErrorFiscal(ABS(lnRepFiscal),ABS(lnRepPrinter))
IF !lhayreitento OR (lnrepFiscal>=0 AND lnrepPrinter >=0) OR LEN(TRIM(lcrepuesta))=0
EXIT
ENDIF
loCmd.ok = .f.
DO case
* avisar error desconocido
CASE LEFT(lcrepuesta,2)="-1"
loCmd.errorimpresora = -1
loCmd.textoerrorimpresora = "ERROR DE IMPRESORA DESCONOCIDO"
loCmd.Cmderrorimpresora = lOCmd.TipoCmd+" "+loCmd.textocrudo
this.epsonrespuesta = this.manejaerrorepson("STATUSPRINTER",.F.)
EXIT
CASE LEFT(lcrepuesta,2)="-2"
loCmd.errorfiscal = -2
loCmd.textoerrorfiscal = "ERROR FISCAL DESCONOCIDO"
loCmd.Cmderrorfiscal = lOCmd.TipoCmd+" "+loCmd.textocrudo
this.epsonrespuesta = this.manejaerrorepson("STATUSFISCAL",.F.)
EXIT
* avisar error impresor fiscal
CASE LEFT(lcrepuesta,1)="P"
loCmd.errorimpresora = VAL(SUBSTR(lcrepuesta,2,2))
loCmd.textoerrorimpresora = UPPER(SUBSTR(lcrepuesta,5))
loCmd.Cmderrorimpresora = lOCmd.TipoCmd+" "+loCmd.textocrudo
lnErrorActual = loCmd.errorimpresora
* si 4 (IMPRESORA FUERA DE LINEA), lo manejo como falta de papel ya que el fiscal grabo el nro
IF loCmd.errorimpresora=4 AND LEFT(UPPER(lOCmd.TipoCmd),17)='CERRARCOMPROBANTE'
loCmd.errorimpresora=5
ENDIF
IF loCmd.errorimpresora=5 OR loCmd.errorimpresora=6
loCmd.textoerrorimpresora = ""
loCmd.Cmderrorimpresora = ""
ENDIF
ldebociclar = IIF(strzero(loCmd.errorimpresora,2)$"05-06",.t.,.f.) && 5,6 falta papel
ldebociclar = this.manejaerrorepson("STATUSPRINTER",ldebociclar)
this.epsonrespuesta = ldebociclar
locmd.ok = this.epsonrespuesta &&.t.
ldebociclar = .f. &&IIF(lnErrorActual=4 and LEFT(UPPER(lOCmd.TipoCmd),17)='CERRARCOMPROBANTE',.f.,ldebociclar)
* avisar error memoria fiscal
CASE LEFT(lcrepuesta,1)="F"
loCmd.errorfiscal = VAL(SUBSTR(lcrepuesta,2,2))
loCmd.textoerrorfiscal = UPPER(SUBSTR(lcrepuesta,5))
loCmd.Cmderrorfiscal = lOCmd.TipoCmd+" "+loCmd.textocrudo
ldebociclar = this.manejaerrorepson("STATUSFISCAL",.F.)
this.epsonrespuesta = ldebociclar
ENDCASE
ENDDO
RETURN this.epsonrespuesta