[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