[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lprng
Subject:    Re: LPRng: HP/JetDirect status messages
From:       Patrick Powell <papowell () astart ! com>
Date:       2002-04-24 20:28:59
[Download RAW message or body]

Mr. Rob Joyce gets the
  'Wish I had read his email sooner that before I read the email sooner'
award.

I just implemented a similar fix BEFORE I read his email.  Would have
saved me a bit of work... Sigh...

Thanks Rob!

Patrick

> From lprng@astart2.astart.com Wed Apr 17 17:02:59 2002
> Date: Wed, 17 Apr 2002 19:20:23 -0400
> From: Rob Joyce <robjoyce@EE.Princeton.EDU>
> To: lprng@lprng.com
> Subject: Re: LPRng: HP/JetDirect status messages
> 
> Fixed now, I believe.
> 
> The problem is that the LaserJet 2100 was sending error messages like:
> 
> @PJL USTATUS TIMED
> CODE=41900
> ...
> 
> and a comment in ifhp.c implies that the second line "may" be a value for
> the variable at the end of the first.  I'm not a PJL expert, nor have I
> looked at the PJL documentation, but it seems to me a reasonable
> assumption that if the second line has an "=", it's not a value.  (Please
> correct me if I'm wrong!)
> 
> In our case, I fixed this by moving the eq_line check up a bit, so that
> the second line gets processed on its own in addition to being appended
> to the first:
> 
> *** ifhp.c.orig    Wed Apr 17 19:13:47 2002
> --- ifhp.c      Wed Apr 17 18:51:09 2002
> ***************
> *** 733,738 ****
> --- 733,739 ----
> * last entry may be a variable name and the next
> * line a value for it.  We need to append to the variable value
> */
> +       eq_line = safestrchr( str, '=' );
> pjlline = !safestrncasecmp( str, "@PJL",4);
> if( pjlvar ){
> if( !pjlline && !ISNULL(str) ){
> ***************
> *** 755,761 ****
> SAFEFREE(pjlstatus); pjlstatus = 0;
> pjlinfo = 0;
> }
> !               if( !pjlline ) goto done;
> }
> 
> if( (ps_str = safestrstr( str,"%%[" )) ){
> --- 756,762 ----
> SAFEFREE(pjlstatus); pjlstatus = 0;
> pjlinfo = 0;
> }
> !               if( (!pjlline) && (!eq_line) ) goto done;
> }
> 
> if( (ps_str = safestrstr( str,"%%[" )) ){
> ***************
> *** 766,772 ****
> c = cval(s);
> *s = 0;
> }
> -       eq_line = safestrchr( str, '=' );
> if( s ) *s = c;
> 
> /* now we check for xx=value entries */
> 
> 
> _Rob
> 
> 
> 
> On April 15th, Rob Joyce wrote:
> 
> > Sorry to be a pain about status messages...
> > 
> > If, say, the paper runs out in the middle of a job on an HP JetDirect
> > printer, lpq reports only
> > 
> > Status: processing 'dfA688printserver', size 136, format 'f', IF filter 'ifhp' at \
> >                 19:12:51.441
> > Filter_status: getting end using 'pjl job/eoj' at 19:13:03.961
> > 
> > ...is there any way to have LPRng report the real printer error via lpq?
> > tcpdump says the printer is indeed periodically sending
> > @PJL.USTATUS.TIMED..CODE=41900..DISPLAY="TRAY.EMPTY"..ONLINE=FALSE (where
> > the "." characters are just placeholders).
> > 
> > lpd_printcap entry:
> > 
> > scribe
> > 	:server
> > 	:oh=printserver
> > 	:filter=/usr/local/libexec/filters/ifhp
> > 	:sd=/var/spool/lpd/%P
> > 	:lf=/var/spool/lpd/%P/log
> > 	:mx=0
> > 	:mc=0
> > 	:lp=scribe-pr%9100
> > 	:ifhp=model=hp2100
> > 
> > Thanks for any insight,
> > _Rob
> > 
> > 
> > debug=4 excerpt:
> > 
> > Filter_status: Read_status_timeout: timeout 296, count 69 at 19:54:12.774
> > Filter_status: Read_status_timeout: read count 69, '@PJL USTATUS TIMED^M
> > Filter_status: CODE=41900^M
> > Filter_status: DISPLAY="TRAY EMPTY"^M
> > Filter_status: ONLINE=FALSE^M
> > Filter_status: ^L' at 19:54:12.774
> > Filter_status: Put_inbuf_len: buffer '@PJL USTATUS TIMED^M
> > Filter_status: CODE=41900^M
> > Filter_status: DISPLAY="TRAY EMPTY"^M
> > Filter_status: ONLINE=FALSE^M
> > Filter_status: ^L' at 19:54:12.774
> > Filter_status: Get_inbuf_str: found '@PJL USTATUS TIMED' at 19:54:12.775
> > Filter_status: Pr_status: start str '@PJL USTATUS TIMED', pjlvar '<NULL>', \
> >                 pjlstatus '<NULL>' at 19:54:12.775
> > Filter_status: Pr_status: doing PJL status on '@PJL USTATUS TIMED' at \
> >                 19:54:12.775
> > Filter_status: Pr_status: PJL var 'timed' at 19:54:12.775
> > Filter_status: Get_inbuf_str: found 'CODE=41900' at 19:54:12.776
> > Filter_status: Pr_status: start str 'CODE=41900', pjlvar 'timed', pjlstatus \
> >                 '<NULL>' at 19:54:12.776
> > Filter_status: Pr_status: PJL var 'timed' append '<NULL>' + 'CODE=41900' at \
> >                 19:54:12.776
> > Filter_status: Pr_status: pjlinfo '0', setting PJL var 'timed' to 'CODE=41900' at \
> >                 19:54:12.776
> > Filter_status: Get_inbuf_str: found 'DISPLAY="TRAY EMPTY"' at 19:54:12.777
> > Filter_status: Pr_status: start str 'DISPLAY="TRAY EMPTY"', pjlvar '<NULL>', \
> >                 pjlstatus '<NULL>' at 19:54:12.777
> > Filter_status: Check_device_status: 'DISPLAY="TRAY EMPTY"' at 19:54:12.777
> > Filter_status: Check_device_status: key 'DISPLAY', value '"TRAY EMPTY"' at \
> >                 19:54:12.777
> > Filter_status: Get_inbuf_str: found 'ONLINE=FALSE' at 19:54:12.778
> > Filter_status: Pr_status: start str 'ONLINE=FALSE', pjlvar '<NULL>', pjlstatus \
> >                 '<NULL>' at 19:54:12.778
> > Filter_status: Check_device_status: 'ONLINE=FALSE' at 19:54:12.778
> > Filter_status: Check_device_status: key 'ONLINE', value 'FALSE' at 19:54:12.778
> > Filter_status: Get_inbuf_str: found '' at 19:54:12.779
> > Filter_status: Pr_status: start str '', pjlvar '<NULL>', pjlstatus '<NULL>' at \
> >                 19:54:12.779
> > Filter_status: Get_inbuf_str: final '' at 19:54:12.779
> > Filter_status: Do_waitend: len 0 at 19:54:12.779
> > Filter_status: Do_waitend - Devstatus - OBJ_T_HASH len 9 at 19:54:12.779
> > Filter_status:  [0] HASH key 'device'  - OBJ_T_STR 'CODE=41900' at 19:54:12.780
> > Filter_status:  [1] HASH key 'display'  - OBJ_T_STR '"TRAY EMPTY"' at \
> >                 19:54:12.780
> > Filter_status:  [2] HASH key 'echo'  - OBJ_T_STR '23206@2002-04-15-19-53-56.583' \
> >                 at 19:54:12.780
> > Filter_status:  [3] HASH key 'id'  - OBJ_T_STR '"HP LaserJet 2100 Series"' at \
> >                 19:54:12.780
> > Filter_status:  [4] HASH key 'job'  - OBJ_T_STR 'START' at 19:54:12.781
> > Filter_status:  [5] HASH key 'name'  - OBJ_T_STR '"19-53-58.164 PID 23206"' at \
> >                 19:54:12.781
> > Filter_status:  [6] HASH key 'online'  - OBJ_T_STR 'FALSE' at 19:54:12.781
> > Filter_status:  [7] HASH key 'pagecount'  - OBJ_T_STR '82703' at 19:54:12.781
> > Filter_status:  [8] HASH key 'timed'  - OBJ_T_STR 'CODE=41900' at 19:54:12.782
> > Filter_status: Do_waitend: job 'START', name '"19-53-58.164 PID 23206"', result \
> >                 '<NULL>', endname '19-53-58.164 PID 23206' at 19:54:12.782
> > Filter_status: Do_waitend: echo '23206@2002-04-15-19-53-56.583', want \
> >                 '19-53-58.164 PID 23206' at 19:54:12.782
> > Filter_status: Do_waitend: waitend '0' at 19:54:12.782
> > Filter_status: Do_waitend: Outlen 0 '' at 19:54:12.782
> > 
> > 
> 
> 
> 
> -----------------------------------------------------------------------------
> YOU MUST BE A LIST MEMBER IN ORDER TO POST TO THE LPRNG MAILING LIST
> The address you post from MUST be your subscription address
> 
> If you need help, send email to majordomo@lprng.com (or lprng-requests
> or lprng-digest-requests) with the word 'help' in the body.  For the impatient,
> to subscribe to a list with name LIST,  send mail to majordomo@lprng.com
> with:                           | example:
> subscribe LIST <mailaddr>       |  subscribe lprng-digest myname@host.org
> unsubscribe LIST <mailaddr>     |  unsubscribe lprng myname@host.org
> 
> If you have major problems,  send email to papowell@astart.com with the word
> LPRNGLIST in the SUBJECT line.
> -----------------------------------------------------------------------------
> 

-----------------------------------------------------------------------------
YOU MUST BE A LIST MEMBER IN ORDER TO POST TO THE LPRNG MAILING LIST
The address you post from MUST be your subscription address

If you need help, send email to majordomo@lprng.com (or lprng-requests
or lprng-digest-requests) with the word 'help' in the body.  For the impatient,
to subscribe to a list with name LIST,  send mail to majordomo@lprng.com
with:                           | example:
subscribe LIST <mailaddr>       |  subscribe lprng-digest myname@host.org
unsubscribe LIST <mailaddr>     |  unsubscribe lprng myname@host.org

If you have major problems,  send email to papowell@astart.com with the word
LPRNGLIST in the SUBJECT line.
-----------------------------------------------------------------------------


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic