You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(6) |
Sep
(111) |
Oct
(63) |
Nov
(64) |
Dec
(116) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(49) |
Feb
(27) |
Mar
(136) |
Apr
(59) |
May
(122) |
Jun
(72) |
Jul
(167) |
Aug
(77) |
Sep
(103) |
Oct
(128) |
Nov
(86) |
Dec
(87) |
2002 |
Jan
(150) |
Feb
(111) |
Mar
(112) |
Apr
(139) |
May
(204) |
Jun
(228) |
Jul
(202) |
Aug
(244) |
Sep
(215) |
Oct
(311) |
Nov
(127) |
Dec
(229) |
2003 |
Jan
(252) |
Feb
(119) |
Mar
(163) |
Apr
(166) |
May
(91) |
Jun
(84) |
Jul
(106) |
Aug
(98) |
Sep
(93) |
Oct
(161) |
Nov
(82) |
Dec
(62) |
2004 |
Jan
(58) |
Feb
(44) |
Mar
(56) |
Apr
(67) |
May
(50) |
Jun
(57) |
Jul
(20) |
Aug
(25) |
Sep
(33) |
Oct
(35) |
Nov
(61) |
Dec
(95) |
2005 |
Jan
(61) |
Feb
(31) |
Mar
(17) |
Apr
(10) |
May
(2) |
Jun
(13) |
Jul
(4) |
Aug
(10) |
Sep
(9) |
Oct
(33) |
Nov
(2) |
Dec
(7) |
2006 |
Jan
(11) |
Feb
(3) |
Mar
(3) |
Apr
(8) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2009 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
From: Robert G. B. <rg...@ph...> - 2000-12-31 06:19:13
|
On Sun, 31 Dec 2000, Jarl Friis wrote: > > If anybody needs/wants it, I can contribute a matching "generic > > template" specfile and Makefile that do a gangbusters job of building > > rpm's in userspace. That is, everything is done by make targets -- make > > tgz builds a spec-ready or build-ready whatever.tgz and make rpm builds > > a very nice rpm, all automagically, with version/release numbers defined > > only in the Makefile. > > That sounds really nice, thanks in advance, I am interested. See the attached project-0.1.1.tgz project template. It is an autodescribing "standard project" template except for little things like not using autoconf (which I think of as overkill for simple projects). Read the README and look over the Makefile and specfile. With a little bit of setup you should be able to type: make (to make the binary) make tgz (to make a tarball) make rpm (to make source and binary rpm's) as well as (if you like) make cvs make sync to force checkins and/or checkins followed by an rsync to a foreign cvs tree. As well as sundry other make targets. rgb -- Robert G. Brown http://www.phy.duke.edu/~rgb/ Duke University Dept. of Physics, Box 90305 Durham, N.C. 27708-0305 Phone: 1-919-660-2567 Fax: 919-660-2525 email:rg...@ph... |
From: <pa...@rc...> - 2000-12-31 05:38:20
|
Samuel Spence Saunders wrote: > I have a new HP PSC500. I got and compiled hpoj 0.7 and installed on my > Debian (began as 2.1, now mostly updated) system with kernel 2.2.10. The > hpo and ieee12488print applications work. Anything that uses ptal gives the > following: > ptalProviderLookup(name=<"mlc:mlcpp0">): provider not found! > The port _is_ 0. Any ideas what I may have done or failed to do to cause > this ? Hi, Samuel. It looks like the configure script got confused. Please run "make sterile", re-run the ./configure script, and e-mail me the output of configure, and I'll see if I can figure out what went wrong. David |
From: Samuel S. S. <ssa...@ol...> - 2000-12-31 03:06:11
|
I have a new HP PSC500. I got and compiled hpoj 0.7 and installed on my Debian (began as 2.1, now mostly updated) system with kernel 2.2.10. The hpo and ieee12488print applications work. Anything that uses ptal gives the following: ptalProviderLookup(name=<"mlc:mlcpp0">): provider not found! The port _is_ 0. Any ideas what I may have done or failed to do to cause this ? Samuel -- Samuel Spence Saunders, Ph.D. sau...@gw... ssa...@ol... |
From: Jarl F. <ja...@di...> - 2000-12-31 02:47:14
|
On Sat, 30 Dec 2000, Robert G. Brown wrote: > Actually, RH puts everything in /usr and nothing at all in /usr/local. I learn something every day :-) > If anybody needs/wants it, I can contribute a matching "generic > template" specfile and Makefile that do a gangbusters job of building > rpm's in userspace. That is, everything is done by make targets -- make > tgz builds a spec-ready or build-ready whatever.tgz and make rpm builds > a very nice rpm, all automagically, with version/release numbers defined > only in the Makefile. That sounds really nice, thanks in advance, I am interested. Jarl |
From: Jarl F. <ja...@di...> - 2000-12-31 02:40:34
|
I have ported some of the PML stuff to the ptal API. until now I have ported getValue and setvalue, they are not thoroughly tested, but I can get the LCD lines at least :-) porting xojpanel..??? I was considering if it were best placed in ptal-mlc.c or maybe even a new ptal-mlc-pml.c, currenctly its a mix of pml.c and ptal.c I do not have the time to continue the development in January, but I might do something in February, hope the code is good for soemthing, at least inspiration :-) There are some open question: 1)What are the TWO bytes in the begining of PML values of type String? 2)How are the THREE bytes of errorcode (after the exec_code byte) supposed to be interpreted when such are sent as a reply? Jarl I will include my diff below: diff -N -ru cvshpoj/ptal/Makefile.in hpojexp/ptal/Makefile.in --- cvshpoj/ptal/Makefile.in Mon Dec 18 13:30:24 2000 +++ hpojexp/ptal/Makefile.in Sun Dec 31 04:04:16 2000 @@ -4,19 +4,20 @@ MAJORVER=0 MINORVER=1 +HEADERS=ptal.h ptal-internal.h pml.h SONOVER=libptal.so SOSHORT=$(SONOVER).$(MAJORVER) SOLONG=$(SOSHORT).$(MINORVER) -LIBCOMPS=ptal ptal-hpjd ptal-mlc ptal-providers +LIBCOMPS=pmloidentries pml ptal ptal-hpjd ptal-mlc ptal-providers SOCOMPS=$(addsuffix .o-shared,$(LIBCOMPS)) STCOMPS=$(addsuffix .o,$(LIBCOMPS)) CFLAGS=-O1 -Wall -g @DEFINES_CMDLINE@ @INCLUDE_CMDLINE@ @LIBRARY_CMDLINE@ -%.o-shared : %.c ptal.h ptal-internal.h +%.o-shared : %.c $(HEADERS) $(CC) $(CFLAGS) -fPIC -c -o $@ $< -%.o : %.c ptal.h ptal-internal.h +%.o : %.c $(HEADERS) $(CC) $(CFLAGS) -c -o $@ $< release: $(SOLONG) ptal-connect ptal-printd # ptal.a diff -N -ru cvshpoj/ptal/pml.c hpojexp/ptal/pml.c --- cvshpoj/ptal/pml.c Thu Jan 1 01:00:00 1970 +++ hpojexp/ptal/pml.c Sun Dec 31 03:06:52 2000 @@ -0,0 +1,359 @@ +/** + * \file pmllib.c + * + * PML functions. + * These functions start with the prefix PML. They can be used to deal with PML + * requests and replies in a more comfortable way. One problem with PML request/ + * replies is that you never know when the printer sends data; this is because + * it is possible to enable so-called "traps" on PML objects. This means that + * the printer informs the application if the value of a specific object has + * changed. Therefore, the following functions are divided in two parts: A + * stimulator part and a processor part. + * The stimulator functions can be used to send requests to the printer, but + * these functions do not receive the reply. The application is responsible + * for the reply by using PMLProcess(). PMLProcess reads data from the PML + * socket and decodes this data. If there is currently no data available + * PMLProcess() blocks until data arrives. To make sure that PMLProcess does + * not block, you must use select() to determine if data is ready to be + * processed. + * This has the advantage that you can wait for any file descriptors with the + * select statement, e.g. for X11 events or for keyboard events in a text-only + * environment. When data arrives from the printer, it is first read completely + * into a buffer. Depending on the buffer contents, one of the previously + * registered callback-functions gets called which may then process the data. + * + * @author Andreas Fester + * + */ + +#include <stdio.h> +#include <errno.h> +#include <stdlib.h> +#include <string.h> +#include <linux/ieee12844.h> +#include "pml.h" +#include "ptal-internal.h" + +#define DECODETYPE(p) ((p)[0] & 0xfc) +#define DECODELEN(p) ((((p)[0] & 0x03) << 8) | (p)[1]) +#define ENCODETYPELEN_MSB(t,l) ((t) | (((l) >> 8) & 0x03)) +#define ENCODETYPELEN_LSB(t,l) ((l) & 0xff) + + + +/* + * Decode an OID + * + * @return number of bytes used or negative if the object ID could be decoded, + */ + +int PMLdecodeObject(ptalPmlObject_t *_obj, unsigned char *buffer){ + + int type, len, r; + ptalPmlObject_t obj = 0; + *_obj = (ptalPmlObject_t) malloc(sizeof(struct ptalPmlObject_s)); + if (*_obj == NULL){ + PTAL_LOG_ERROR("%s:%d: No memory",__FILE__, __LINE__, 0,0,0,0); + return -1; + } + obj = *_obj; + + r =0; + type = DECODETYPE(buffer); + len = DECODELEN(buffer); + r+=2; + + + if (type != ObjectIdentifierDataType){ + PTAL_LOG_ERROR("%s:%d: Incorrect type: %2.2X",__FILE__, __LINE__, type,0,0,0); + return -1; + } + + obj->oid = (unsigned char*) calloc(len+1,sizeof(unsigned char)); + if (obj->oid == NULL){ + PTAL_LOG_DEBUG("%s:%d: No memory",__FILE__, __LINE__, 0,0,0,0); + free(obj); + return -1; + } + + memcpy(obj->oid, &(buffer[r]), len); + obj->oid = len; + /* TODO: obj->datatype = ; this must be looked up in a table */ + r+=len; + return r; +} + + +int PMLencodeObject(unsigned char *buffer, const ptalPmlObject_t obj){ + + int r; + + r =0; + buffer[r++] = ENCODETYPELEN_MSB(ObjectIdentifierDataType,obj->oidlength); + buffer[r++] = ENCODETYPELEN_LSB(ObjectIdentifierDataType,obj->oidlength); + + memcpy(&(buffer[r]), obj->oid, obj->oidlength); + r+=obj->oidlength; + return r; +} + + +static int decodeInt(char *p, int len){ + int intVal = 0; + switch (len) + { + case 0: break; + case 4: intVal |= p[3]; + case 3: intVal |= p[2] << 8; + case 2: intVal |= p[1] << 16; + case 1: intVal |= p[0] << 24; + } + /* shift the bits to their appropriate place */ + if (len < 4) + intVal >>= (4 - len) * 8; + + return intVal; +} + + +/* + * Decode a ValidValue + * + * @return the number of bytes read from the buffer: + * negative means error + */ + +int PMLdecodeValue(ptalPmlValue_t *_val, unsigned char *buffer){ + int type, len; + ptalPmlValue_t val = 0; + + *_val = (ptalPmlValue_t) malloc(sizeof(struct ptalPmlValue_s)); + if (*_val == NULL){ + PTAL_LOG_ERROR("%s:%d: No memory",__FILE__, __LINE__, 0,0,0,0); + return -1; + } + val = *_val;//just for convenience + /* get the type and the length from the buffer */ + type = DECODETYPE(buffer); + len = DECODELEN(buffer); + + /* decode the <ValidValue> */ + val->type = type; + + switch(type){ + case CollectionDataType : + val->integer = decodeInt(buffer+2, len); + val->data = 0; + return 2+len; + + case EnumerationDataType : + val->integer = decodeInt(buffer+2, len); + val->data = 0; + return 2+len; + + case SignedIntegerDataType : + val->integer = decodeInt(buffer+2, len); + val->data = 0; + return 2+len; + + case StringDataType : + /*There are two unknow bytes in a stringtype hence start two bytes + later, and subtract two from the len. */ + val->integer = len-2; + val->data = (char*) calloc(val->integer, sizeof(char));//let it be zero terminated. + if (val->data == NULL){ + PTAL_LOG_ERROR("%s:%d: No memory",__FILE__, __LINE__, 0,0,0,0); + return -1; + } + memcpy(val->data, buffer+2+2, val->integer); + return 2+len;//We have skipped the twobytes AND the string. + + case BinaryDataType : + val->integer = len; + val->data = (char*) calloc(val->integer, sizeof(char)); + if (val->data == NULL){ + PTAL_LOG_ERROR("%s:%d: No memory",__FILE__, __LINE__, 0,0,0,0); + return -1; + } + memcpy(val->data, buffer+2, val->integer); + return 2+len; + + case NullValueDataType : + val->integer = 0; + val->data = 0; + return 2; + } + + return NULL; +} + +int PMLencodeValue(unsigned char *buffer, const ptalPmlValue_t val){ + + unsigned int r, datalen; + unsigned char numdata[4]; + + /* calculate length of data */ + switch(val->type){ + case CollectionDataType : + case EnumerationDataType : + case SignedIntegerDataType : + if (val->integer == (val->integer & 0xff)){ + datalen =1; + numdata[0]= val->integer; + }else if (val->integer == (val->integer & 0xffff)){ + datalen =2; + numdata[1]= val->integer >> 8; + }else if (val->integer == (val->integer & 0xffffff)){ + datalen =3; + numdata[2]= val->integer >> 16; + }else if (val->integer == (val->integer & 0xffffffff)){ + datalen =4; + numdata[3]= val->integer >> 24; + }else{ + /*error*/ + } + break; + default: + datalen = val->integer; + break; + } + + r =0; + buffer[r++] = ENCODETYPELEN_MSB(val->type,datalen); + buffer[r++] = ENCODETYPELEN_LSB(val->type,datalen); + + switch(val->type){ + case CollectionDataType : + case EnumerationDataType : + case SignedIntegerDataType : + memcpy(&(buffer[r]), numdata, datalen); + break; + case StringDataType : + r+=2; /* skip the two unknown bytes ?? */ + default: + memcpy(&(buffer[r]), val->data, datalen); + } + + r+=datalen; + return r; +} + + +int PMLdecodeReply(unsigned char *replycode, + unsigned char *exec_out, + ptalPmlError_t *_err, + ptalPmlObject_t *_obj, + ptalPmlValue_t *_val, unsigned char *buffer){ + int used = 0; + int r = 0; + /* read the reply */ + *replycode = buffer[r++]; + /* read the execution outcome */ + *exec_out = buffer[r++]; + if ((*exec_out != ErrorCommandExecutionError) && + (*exec_out != ErrorObjectDoesNotSupportSpecifiedAction) && + (*exec_out != ErrorUnknownObjectIdentifier) && + (*exec_out != ErrorInvalidOrUnsupportedValue) && + (*exec_out != ErrorActionCanNotBePerformedNow) && + (*exec_out != ErrorPastEndOfSupportedObjects) && + (*exec_out != OKNearestLegalValueSubstituted) && + (*exec_out != OKEndOfSupportedObjects) && + (*exec_out != OK)) + { + /* here we handle ErrorUnknownRequest, ErrorBufferOverflow, + * ErrorSyntaxError and all possibly *unknown* errors + */ + /* + if (reply_fct != NULL) + reply_fct(reply, exec_out, NULL, NULL); + return 0; + */ + } + + /* if exec_out is OKEndOfSupportedObjects or OK, then + * we have pairs of <ObjectIdentifier><ValidValue>; + * Otherwise, we have triples of + * <ErrorCode><ObjectIdentifier><ValidValue> + */ + + /* read the object specific error code, if any */ + if ( (*exec_out != OK) && + (*exec_out != OKEndOfSupportedObjects)) + { + /* bypass <ErrorCode> TODO: is this correct?? + * opt + */ + *_err = (ptalPmlError_t) malloc(sizeof(struct ptalPmlValue_s)); + if (*_err == NULL){ + PTAL_LOG_ERROR("%s:%d: No memory",__FILE__, __LINE__, 0,0,0,0); + return -1; + } + + memcpy((*_err)->data, &(buffer[r]),3);/* three UNKNOWN error code bytes */ + r += 3; + } + + /* Decode object id; note that p and n are adjusted + * inside this function + */ + used = PMLdecodeObject(_obj, &(buffer[r])); + if(used < 0){ + return used; + } + r += used; + + /* Decode data; note that p and n are adjusted + * inside this function + */ + used = PMLdecodeValue(_val, &(buffer[r])); + if(used < 0){ + return used; + } + r += used; + return r; +} + +/** + * Converts a PML execution execution outcome into a + * human readable format. + * + * @param code The PML code which represents the execution outcome. + * + * @return A String containing the code in a human readable form. + * + */ +char *PMLExecutionToString(unsigned char code) +{ + switch (code) + { + case OK: return "<OK>"; + case OKEndOfSupportedObjects: return "<OKEndOfSupportedObjects>"; + case OKNearestLegalValueSubstituted: return "<OKNearestLegalValueSubstituted>"; + case ErrorUnknownRequest: return "<ErrorUnknownRequest>"; + case ErrorBufferOverflow: return "<ErrorBufferOverflow>"; + case ErrorCommandExecutionError: return "<ErrorCommandExecutionError>"; + case ErrorUnknownObjectIdentifier: return "<ErrorUnknownObjectIdentifier>"; + case ErrorObjectDoesNotSupportSpecifiedAction: return "<ErrorObjectDoesNotSupportSpecifiedAction>"; + case ErrorInvalidOrUnsupportedValue: return "<ErrorInvalidOrUnsupportedValue>"; + case ErrorPastEndOfSupportedObjects: return "<ErrorPastEndOfSupportedObjects>"; + case ErrorActionCanNotBePerformedNow: return "<ErrorActionCanNotBePerformedNow>"; + case ErrorSyntaxError: return "<ErrorSyntaxError>"; + + default: return (code >= 0x80) ? "<ReservedErrorValue>" : + "<ReservedOKValue>"; + } +} + +/** + * Converts a PML error code into a human readable format. + * + * @param code The PML code which represents the execution outcome. + * + * @return A String containing the code in a human readable form. + * + */ +char *PMLErrorToString(unsigned char code) +{ + return "No message is known for this code"; +} + diff -N -ru cvshpoj/ptal/pml.h hpojexp/ptal/pml.h --- cvshpoj/ptal/pml.h Thu Jan 1 01:00:00 1970 +++ hpojexp/ptal/pml.h Sun Dec 31 03:06:54 2000 @@ -0,0 +1,149 @@ +/* + * $Id: $ + * \file pml.h + * This header file declares the API for the PmlOid object. + */ + + +#ifndef __PTAL_MLC_PML_H__ +#define __PTAL_MLC_PML_H__ + +#include "ptal-internal.h" +/* PML definitions */ + +/* <Request> definitions */ +#define GetRequest 0x00 +#define GetNextRequest 0x01 +#define GetBlockRequest 0x02 +#define GetNextBlockRequest 0x03 +#define SetRequest 0x04 +#define EnableTrapRequest 0x05 +#define DisableTrapRequest 0x06 +#define TrapRequest 0x07 + +/* <Reply> definitions */ +#define GetReply 0x80 +#define GetNextReply 0x81 +#define GetBlockReply 0x82 +#define GetNextBlockReply 0x83 +#define SetReply 0x84 +#define EnableTrapReply 0x85 +#define DisableTrapReply 0x86 +#define TrapReply 0x87 + +/* <ExecutionOutcome> and <ErrorValue> definitions */ +#define OK 0x00 +#define OKEndOfSupportedObjects 0x01 +#define OKNearestLegalValueSubstituted 0x02 + +#define ErrorUnknownRequest 0x80 +#define ErrorBufferOverflow 0x81 +#define ErrorCommandExecutionError 0x82 +#define ErrorUnknownObjectIdentifier 0x83 +#define ErrorObjectDoesNotSupportSpecifiedAction 0x84 +#define ErrorInvalidOrUnsupportedValue 0x85 +#define ErrorPastEndOfSupportedObjects 0x86 +#define ErrorActionCanNotBePerformedNow 0x87 +#define ErrorSyntaxError 0x88 + +/* <DataType> Definitions; NOTE: the *upper* six bits are only used !!! */ +#define ObjectIdentifierDataType 0x00 // 0x00 +#define EnumerationDataType 0x04 // 0x01 +#define SignedIntegerDataType 0x08 // 0x02 +#define RealDataType 0x0C // 0x03 +#define StringDataType 0x10 // 0x04 +#define BinaryDataType 0x14 // 0x05 +#define ErrorCodeDataType 0x18 // 0x06 +#define NullValueDataType 0x1C // 0x07 +#define CollectionDataType 0x20 // 0x08 + +#define Roman8SymbolSet 0x0115; +#define Kana8SymbolSet 0x010b; +#define USUnicodeSymbolSet 0x024e; + + +/* Upload & Download state values for fax, image, configuration, ... */ +#define PML_UPDN_STATE_IDLE 1 +#define PML_UPDN_STATE_REQSTART 2 +#define PML_UPDN_STATE_XFERACTIVE 3 +#define PML_UPDN_STATE_ERRORABORT 4 +#define PML_UPDN_STATE_XFERDONE 5 +#define PML_UPDN_STATE_NEWPAGE 6 +#define PML_UPDN_STATE_DISABLED 7 + +#ifdef __cplusplus +extern "C" { +#endif + + /** + * PML Object identifier. + * + */ + typedef struct _PmlOid{ + /** Length of the object identifier */ + int len; + + /** Object identifier in binary notation */ + char *id; + + /** type of this object */ + int type; +}PmlOid; + +/** + * A named PML Object identifier. + */ +typedef struct _PmlOidEntry{ + PmlOid oid; + char *name; +}PmlOidEntry; + + +/** Values used by: OID_SCAN_COMPRESSION */ +enum { + /** Do not use any compression */ + NO_COMPRESSION = 1, + + /** Use default compression */ + DEFAULT_COMPRESSION = 2, + MH_COMPRESSION = 3, + MR_COMPRESSION = 4, + MMR_COMPRESSION = 5, + JPEG_COMPRESSION = 6 +}; + + /*** Values used by: + OID_SCAN_PIXEL_DATA_TYPE + OID_FAX_PIXEL_DATA_TYPE + OID_COPIER_PIXEL_DATA_TYPE +***/ + enum {BILEVEL_THRESHOLD = 1, + BILEVEL_HALFTONED = 2, + COLOR_3_BIT = 3, // Not used by Fax + GRAYSCALE_16 = 4, // Not used by Fax + GRAYSCALE_64 = 6, // Not used by Fax + GRAYSCALE_128 = 7, // Not used by Fax + GRAYSCALE_256 = 8, // Not used by Fax + COLOR_256 = 9, // Not used by Fax + COLOR_24_BIT = 24}; + + + extern PmlOidEntry OIDs[]; + extern int OIDEntries; + + + int PMLdecodeObject(ptalPmlObject_t *_obj, unsigned char *buffer); + int PMLencodeObject(unsigned char *buffer, const ptalPmlObject_t obj); + int PMLdecodeValue(ptalPmlValue_t *_val, unsigned char *buffer); + int PMLencodeValue(unsigned char *buffer, const ptalPmlValue_t val); + int PMLdecodeReply(unsigned char *replycode, + unsigned char *exec_out, + ptalPmlError_t *_err, + ptalPmlObject_t *_obj, + ptalPmlValue_t *_val, unsigned char *buffer); + +#ifdef __cplusplus +} +#endif + +#endif diff -N -ru cvshpoj/ptal/pmloidentries.c hpojexp/ptal/pmloidentries.c --- cvshpoj/ptal/pmloidentries.c Thu Jan 1 01:00:00 1970 +++ hpojexp/ptal/pmloidentries.c Sun Dec 31 03:06:52 2000 @@ -0,0 +1,258 @@ +#include "pml.h" + +PmlOidEntry OIDs[] = { + +{ {1, "\x00", 0}, "OID_NULL"}, +{ {1, "\x01", 0}, "OID_FIRST"}, +{ {4, "\x01\x01\x03\x02", StringDataType}, "OID_DEV_MODEL_NAME"}, +{ {4, "\x01\x01\x03\x06", StringDataType}, "OID_DEV_FIRMWARE_VERSION"}, +{ {4, "\x01\x01\x02\x11", BinaryDataType}, "OID_DEV_DATE_AND_TIME"}, +{ {4, "\x01\x01\x01\x0f", BinaryDataType}, "OID_DEV_PERMANENT_STORE"}, +{ {4, "\x01\x01\x01\x10", BinaryDataType}, "OID_DEV_TEMPORARY_STORE"}, +{ {4, "\x01\x01\x01\x11", SignedIntegerDataType}, "OID_DEV_DOWNLOAD_TIMEOUT"}, +{ {4, "\x01\x01\x01\x12", SignedIntegerDataType}, "OID_DEV_UPLOAD_TIMEOUT"}, +{ {4, "\x01\x01\x02\x04", CollectionDataType}, "OID_DEV_NOT_IDLE"}, +{ {5, "\x01\x01\x06\x01\x02", SignedIntegerDataType}, "OID_DEV_CANCEL_JOB"}, +{ {4, "\x01\x01\x05\x02", EnumerationDataType}, "OID_DEV_PRINT_INTERNAL_PAGE"}, +{ {5, "\x01\x01\x0b\x01\x02", SignedIntegerDataType}, "OID_DEV_ERROR1_CODE"}, +{ {4, "\x01\x01\x02\x06", EnumerationDataType}, "OID_DEV_CONTINUE"}, +{ {6, "\x01\x01\x06\x02\x01\x01", SignedIntegerDataType}, "OID_DEV_CURRENT_JOB_PARSING_ID"}, +{ {4, "\x01\x01\x02\x15", SignedIntegerDataType}, "OID_DEV_TOTAL_RAM_SIZE"}, +{ {5, "\x01\x04\x01\x04\x14", EnumerationDataType}, "OID_DEV_POWER_DOWN_STATE"}, +{ {4, "\x01\x01\x02\x0b", EnumerationDataType}, "OID_DEV_POWER_ON_RESET"}, +{ {7, "\x01\x01\x02\x14\x02\x01\x01", StringDataType}, "OID_STATUS_MSG_LINE1_PART1"}, +{ {6, "\x01\x01\x02\x14\x03\x01", SignedIntegerDataType}, "OID_STATUS_MSG_LINE1_INDEX"}, +{ {7, "\x01\x01\x02\x14\x02\x02\x01", StringDataType}, "OID_STATUS_MSG_LINE2_PART1"}, +{ {6, "\x01\x01\x02\x14\x03\x02", SignedIntegerDataType}, "OID_STATUS_MSG_LINE2_INDEX"}, +{ {4, "\x01\x01\x02\x27", EnumerationDataType}, "OID_STATUS_DEVICE_STATE"}, +{ {4, "\x01\x01\x02\x1b", EnumerationDataType}, "OID_DEV_REMOTE_DIAGNOSTICS"}, +{ {4, "\x01\x01\x02\x1c", EnumerationDataType}, "OID_DEV_TIME_DISPLAY"}, +{ {4, "\x01\x01\x02\x29", BinaryDataType}, "OID_DEV_KEY_PRESS_LOG"}, +{ {6, "\x01\x01\x06\x03\x01\x01", EnumerationDataType}, "OID_FAXJOB_ACTION"}, +{ {6, "\x01\x01\x06\x03\x01\x02", SignedIntegerDataType}, "OID_FAXJOB_ACTION_ID"}, +{ {6, "\x01\x01\x06\x03\x02\x01", SignedIntegerDataType}, "OID_FAXJOB_DOWNLOAD_ID"}, +{ {6, "\x01\x01\x06\x03\x02\x04", SignedIntegerDataType}, "OID_FAXJOB_UPLOAD_ID"}, +{ {7, "\x01\x01\x06\x03\x03\x09\x01", StringDataType}, "OID_FAXJOB_REMOTE_CSID"}, +{ {6, "\x01\x01\x06\x03\x02\x02", SignedIntegerDataType}, "OID_FAXJOB_RX_ID"}, +{ {7, "\x01\x01\x06\x03\x03\x01\x01", EnumerationDataType}, "OID_FAXJOB_RX_STATUS"}, +{ {7, "\x01\x01\x06\x03\x03\x02\x01", SignedIntegerDataType}, "OID_FAXJOB_RX_ERROR"}, +{ {7, "\x01\x01\x06\x03\x03\x06\x01", SignedIntegerDataType}, "OID_FAXJOB_RX_CURRENT_PAGE"}, +{ {7, "\x01\x01\x06\x03\x03\x07\x01", SignedIntegerDataType}, "OID_FAXJOB_RX_DURATION"}, +{ {6, "\x01\x01\x06\x03\x02\x03", SignedIntegerDataType}, "OID_FAXJOB_TX_ID"}, +{ {6, "\x01\x01\x06\x03\x01\x03", EnumerationDataType}, "OID_FAXJOB_TX_TYPE"}, +{ {7, "\x01\x01\x06\x03\x03\x03\x01", EnumerationDataType}, "OID_FAXJOB_TX_STATUS"}, +{ {7, "\x01\x01\x06\x03\x03\x04\x01", SignedIntegerDataType}, "OID_FAXJOB_TX_ERROR"}, +{ {7, "\x01\x01\x06\x03\x03\x05\x01", SignedIntegerDataType}, "OID_FAXJOB_TX_CURRENT_PAGE"}, +{ {7, "\x01\x01\x06\x03\x03\x08\x01", SignedIntegerDataType}, "OID_FAXJOB_TX_DURATION"}, +{ {5, "\x01\x02\x03\x02\x01", CollectionDataType}, "OID_FAX_NOT_READY_RECEIVE"}, +{ {5, "\x01\x04\x02\x02\x01", CollectionDataType}, "OID_FAX_NOT_READY_SEND"}, +{ {5, "\x01\x03\x07\x01\x06", EnumerationDataType}, "OID_FAX_DOWNLOAD"}, +{ {5, "\x01\x03\x07\x02\x06", SignedIntegerDataType}, "OID_FAX_DOWNLOAD_ERROR"}, +{ {5, "\x01\x03\x07\x02\x01", EnumerationDataType}, "OID_FAX_UPLOAD"}, +{ {5, "\x01\x03\x07\x02\x07", SignedIntegerDataType}, "OID_FAX_UPLOAD_ERROR"}, +{ {4, "\x01\x01\x03\x08", StringDataType}, "OID_FAX_LOCAL_PHONE_NUM"}, +{ {4, "\x01\x01\x03\x09", StringDataType}, "OID_FAX_STATION_NAME"}, +{ {5, "\x01\x03\x07\x01\x12", StringDataType}, "OID_FAX_PSTN_ACCESS_CODE"}, +{ {5, "\x01\x03\x07\x01\x01", SignedIntegerDataType}, "OID_FAX_RX_SCALE"}, +{ {5, "\x01\x03\x07\x01\x13", EnumerationDataType}, "OID_FAX_RX_DISPOSITION"}, +{ {5, "\x01\x03\x07\x01\x14", EnumerationDataType}, "OID_FAX_TX_CONFIRM_STAMPING"}, +{ {5, "\x01\x03\x07\x01\x0a", StringDataType}, "OID_FAX_TX_PHONE_NUMBER"}, +{ {5, "\x01\x03\x07\x01\x02", EnumerationDataType}, "OID_FAX_BEEP_ENABLE"}, +{ {5, "\x01\x03\x07\x01\x03", SignedIntegerDataType}, "OID_FAX_NOISE_VOLUME"}, +{ {5, "\x01\x03\x07\x01\x09", SignedIntegerDataType}, "OID_FAX_COUNTRY"}, +{ {5, "\x01\x03\x07\x01\x0f", StringDataType}, "OID_FAX_MERCURY_NUMBER"}, +{ {5, "\x01\x03\x07\x01\x0b", EnumerationDataType}, "OID_FAX_BLACKLISTED"}, +{ {5, "\x01\x03\x07\x01\x0c", EnumerationDataType}, "OID_FAX_BLACKLIST_DELETE"}, +{ {5, "\x01\x03\x07\x01\x11", EnumerationDataType}, "OID_FAX_FLASH_TYPE"}, +{ {5, "\x01\x03\x07\x01\x10", EnumerationDataType}, "OID_FAX_LINE_TYPE"}, +{ {6, "\x01\x01\x09\x02\x01\x01", EnumerationDataType}, "OID_FAX_ANSWER_MODE"}, +{ {5, "\x01\x03\x07\x01\x08", EnumerationDataType}, "OID_FAX_RING_ENABLE"}, +{ {6, "\x01\x01\x09\x02\x01\x02", SignedIntegerDataType}, "OID_FAX_NUM_RINGS_PICKUP"}, +{ {5, "\x01\x03\x07\x02\x02", SignedIntegerDataType}, "OID_FAX_MIN_RINGS_PICKUP"}, +{ {5, "\x01\x03\x07\x02\x03", SignedIntegerDataType}, "OID_FAX_MAX_RINGS_PICKUP"}, +{ {6, "\x01\x01\x09\x02\x01\x03", CollectionDataType}, "OID_FAX_RING_TYPE_PICKUP"}, +{ {5, "\x01\x03\x07\x01\x04", EnumerationDataType}, "OID_FAX_DISTINCTIVE_RING_DETECT"}, +{ {5, "\x01\x03\x07\x01\x05", EnumerationDataType}, "OID_FAX_BACKUP_RECEPTION"}, +{ {5, "\x01\x03\x07\x01\x07", EnumerationDataType}, "OID_FAX_SILENT_DETECTION"}, +{ {6, "\x01\x01\x09\x01\x01\x01", EnumerationDataType}, "OID_FAX_DIAL_MODE"}, +{ {5, "\x01\x03\x07\x02\x05", SignedIntegerDataType}, "OID_FAX_ADDITIONAL_WAIT"}, +{ {5, "\x01\x03\x07\x01\x0d", SignedIntegerDataType}, "OID_FAX_WHICH_REDIAL"}, +{ {5, "\x01\x03\x07\x01\x0e", SignedIntegerDataType}, "OID_FAX_REDIAL_TIME"}, +{ {5, "\x01\x03\x07\x02\x04", SignedIntegerDataType}, "OID_FAX_MAX_REDIALS"}, +{ {5, "\x01\x03\x07\x03\x01", BinaryDataType}, "OID_FAX_FWD_ENABLE_TIME"}, +{ {5, "\x01\x03\x07\x03\x02", BinaryDataType}, "OID_FAX_FWD_DISABLE_TIME"}, +{ {5, "\x01\x03\x07\x03\x03", StringDataType}, "OID_FAX_FWD_PHONE_NUMBER"}, +{ {5, "\x01\x04\x02\x05\x03", EnumerationDataType}, "OID_FAX_ALLOW_REDIALS"}, +{ {6, "\x01\x01\x09\x01\x01\x02", CollectionDataType}, "OID_FAX_REDIAL"}, +{ {6, "\x01\x01\x06\x04\x01\x01", EnumerationDataType}, "OID_FAX_LOG_ACTION"}, +{ {6, "\x01\x01\x06\x04\x01\x02", EnumerationDataType}, "OID_FAX_LOG_REPORTING"}, +{ {5, "\x01\x04\x02\x01\x02", SignedIntegerDataType}, "OID_FAX_CONTRAST"}, +{ {5, "\x01\x04\x02\x01\x01", BinaryDataType}, "OID_FAX_RESOLUTION"}, +{ {5, "\x01\x04\x02\x01\x03", EnumerationDataType}, "OID_FAX_PIXEL_DATA_TYPE"}, +{ {5, "\x01\x02\x02\x01\x01", SignedIntegerDataType}, "OID_SCAN_CONTRAST"}, +{ {5, "\x01\x02\x02\x01\x02", BinaryDataType}, "OID_SCAN_RESOLUTION"}, +{ {5, "\x01\x02\x02\x01\x03", EnumerationDataType}, "OID_SCAN_PIXEL_DATA_TYPE"}, +{ {5, "\x01\x02\x02\x01\x04", EnumerationDataType}, "OID_SCAN_COMPRESSION"}, +{ {5, "\x01\x02\x02\x01\x05", SignedIntegerDataType}, "OID_SCAN_COMPRESSION_FACTOR"}, +{ {5, "\x01\x02\x02\x01\x06", SignedIntegerDataType}, "OID_SCAN_UPLOAD_ERROR"}, +{ {5, "\x01\x02\x02\x01\x0c", EnumerationDataType}, "OID_SCAN_UPLOAD"}, +{ {5, "\x01\x02\x02\x01\x0d", BinaryDataType}, "OID_SCAN_DITHER_MATRIX"}, +{ {5, "\x01\x02\x02\x02\x01", CollectionDataType}, "OID_SCAN_NOT_READY_SOURCE"}, +{ {5, "\x01\x02\x02\x02\x02", SignedIntegerDataType}, "OID_SCAN_NUM_BRIGHTNESS_LEVELS"}, +{ {5, "\x01\x02\x02\x02\x03", StringDataType}, "OID_SCAN_RESOLUTION_RANGE"}, +{ {4, "\x01\x05\x01\x01", BinaryDataType}, "OID_COPIER_RESOLUTION"}, +{ {4, "\x01\x05\x01\x02", SignedIntegerDataType}, "OID_COPIER_CONTRAST"}, +{ {4, "\x01\x05\x01\x03", EnumerationDataType}, "OID_COPIER_PIXEL_DATA_TYPE"}, +{ {4, "\x01\x05\x01\x04", SignedIntegerDataType}, "OID_COPIER_REDUCTION"}, +{ {4, "\x01\x05\x01\x05", EnumerationDataType}, "OID_COPIER_SCAN_TO_PRINTER"}, +{ {4, "\x01\x05\x01\x06", SignedIntegerDataType}, "OID_COPIER_NUM_COPIES"}, +{ {4, "\x01\x05\x01\x07", EnumerationDataType}, "OID_COPIER_COLLATION"}, +{ {4, "\x01\x05\x02\x01", StringDataType}, "OID_COPIER_ZOOM_RANGE"}, +{ {4, "\x01\x01\x02\x2c", CollectionDataType}, "OID_CFG_STATUS"}, +{ {4, "\x01\x01\x01\x0b", EnumerationDataType}, "OID_CFG_DOWNLOAD"}, +{ {4, "\x01\x01\x02\x2b", SignedIntegerDataType}, "OID_CFG_DOWNLOAD_ERROR"}, +{ {4, "\x01\x01\x01\x0c", EnumerationDataType}, "OID_CFG_DOWNLOAD_DATA_TYPE"}, +{ {4, "\x01\x01\x01\x0d", EnumerationDataType}, "OID_CFG_UPLOAD"}, +{ {4, "\x01\x01\x02\x2d", SignedIntegerDataType}, "OID_CFG_UPLOAD_ERROR"}, +{ {4, "\x01\x01\x01\x0e", EnumerationDataType}, "OID_CFG_UPLOAD_DATA_TYPE"}, +{ {4, "\x01\x01\x05\x04", EnumerationDataType}, "OID_CFG_DELETE_DEMO_PAGES"}, +{ {5, "\x01\x03\x03\x0e\x0a", EnumerationDataType}, "OID_IMAGE_DOWNLOAD"}, +{ {5, "\x01\x03\x03\x0e\x0b", SignedIntegerDataType}, "OID_IMAGE_DOWNLOAD_ERROR"}, +{ {5, "\x01\x02\x02\x01\x07", BinaryDataType}, "OID_COLOR_CORRECTION_MATRIX"}, +{ {4, "\x01\x01\x01\x16", EnumerationDataType}, "OID_DATE_DISPLAY_FORMAT"}, +{ {4, "\x01\x05\x01\x08", EnumerationDataType}, "OID_COLOR_COPY_REQUEST"}, +{ {5, "\x01\x01\x06\x01\x0b", CollectionDataType}, "OID_STATUS_JOBS_ACTIVE"}, +{ {4, "\x01\x01\x02\x36", CollectionDataType}, "OID_STATUS_UI_DIALOGS_ACTIVE"}, +{ {4, "\x01\x01\x02\x37", EnumerationDataType}, "OID_STATUS_UI_CURRENT_CONTEXT"}, +{ {5, "\x01\x02\x02\x01\x0f", SignedIntegerDataType}, "OID_SCAN_SHARPEN_COEFF"}, +{ {5, "\x01\x02\x02\x01\x0e", BinaryDataType}, "OID_SCAN_ABC_THRESHOLDS"}, +{ {4, "\x01\x01\x03\x12", SignedIntegerDataType}, "OID_LIU_ID"}}; + +int OIDEntries = sizeof(OIDs) / sizeof(OIDs[0]); + + +PmlOid *OID_NULL = &OIDs[0].oid; +PmlOid *OID_FIRST = &OIDs[1].oid; +PmlOid *OID_DEV_MODEL_NAME = &OIDs[2].oid; +PmlOid *OID_DEV_FIRMWARE_VERSION = &OIDs[3].oid; +PmlOid *OID_DEV_DATE_AND_TIME = &OIDs[4].oid; +PmlOid *OID_DEV_PERMANENT_STORE = &OIDs[5].oid; +PmlOid *OID_DEV_TEMPORARY_STORE = &OIDs[6].oid; +PmlOid *OID_DEV_DOWNLOAD_TIMEOUT = &OIDs[7].oid; +PmlOid *OID_DEV_UPLOAD_TIMEOUT = &OIDs[8].oid; +PmlOid *OID_DEV_NOT_IDLE = &OIDs[9].oid; +PmlOid *OID_DEV_CANCEL_JOB = &OIDs[10].oid; +PmlOid *OID_DEV_PRINT_INTERNAL_PAGE = &OIDs[11].oid; +PmlOid *OID_DEV_ERROR1_CODE = &OIDs[12].oid; +PmlOid *OID_DEV_CONTINUE = &OIDs[13].oid; +PmlOid *OID_DEV_CURRENT_JOB_PARSING_ID = &OIDs[14].oid; +PmlOid *OID_DEV_TOTAL_RAM_SIZE = &OIDs[15].oid; +PmlOid *OID_DEV_POWER_DOWN_STATE = &OIDs[16].oid; +PmlOid *OID_DEV_POWER_ON_RESET = &OIDs[17].oid; +PmlOid *OID_STATUS_MSG_LINE1_PART1 = &OIDs[18].oid; +PmlOid *OID_STATUS_MSG_LINE1_INDEX = &OIDs[19].oid; +PmlOid *OID_STATUS_MSG_LINE2_PART1 = &OIDs[20].oid; +PmlOid *OID_STATUS_MSG_LINE2_INDEX = &OIDs[21].oid; +PmlOid *OID_STATUS_DEVICE_STATE = &OIDs[22].oid; +PmlOid *OID_DEV_REMOTE_DIAGNOSTICS = &OIDs[23].oid; +PmlOid *OID_DEV_TIME_DISPLAY = &OIDs[24].oid; +PmlOid *OID_DEV_KEY_PRESS_LOG = &OIDs[25].oid; +PmlOid *OID_FAXJOB_ACTION = &OIDs[26].oid; +PmlOid *OID_FAXJOB_ACTION_ID = &OIDs[27].oid; +PmlOid *OID_FAXJOB_DOWNLOAD_ID = &OIDs[28].oid; +PmlOid *OID_FAXJOB_UPLOAD_ID = &OIDs[29].oid; +PmlOid *OID_FAXJOB_REMOTE_CSID = &OIDs[30].oid; +PmlOid *OID_FAXJOB_RX_ID = &OIDs[31].oid; +PmlOid *OID_FAXJOB_RX_STATUS = &OIDs[32].oid; +PmlOid *OID_FAXJOB_RX_ERROR = &OIDs[33].oid; +PmlOid *OID_FAXJOB_RX_CURRENT_PAGE = &OIDs[34].oid; +PmlOid *OID_FAXJOB_RX_DURATION = &OIDs[35].oid; +PmlOid *OID_FAXJOB_TX_ID = &OIDs[36].oid; +PmlOid *OID_FAXJOB_TX_TYPE = &OIDs[37].oid; +PmlOid *OID_FAXJOB_TX_STATUS = &OIDs[38].oid; +PmlOid *OID_FAXJOB_TX_ERROR = &OIDs[39].oid; +PmlOid *OID_FAXJOB_TX_CURRENT_PAGE = &OIDs[40].oid; +PmlOid *OID_FAXJOB_TX_DURATION = &OIDs[41].oid; +PmlOid *OID_FAX_NOT_READY_RECEIVE = &OIDs[42].oid; +PmlOid *OID_FAX_NOT_READY_SEND = &OIDs[43].oid; +PmlOid *OID_FAX_DOWNLOAD = &OIDs[44].oid; +PmlOid *OID_FAX_DOWNLOAD_ERROR = &OIDs[45].oid; +PmlOid *OID_FAX_UPLOAD = &OIDs[46].oid; +PmlOid *OID_FAX_UPLOAD_ERROR = &OIDs[47].oid; +PmlOid *OID_FAX_LOCAL_PHONE_NUM = &OIDs[48].oid; +PmlOid *OID_FAX_STATION_NAME = &OIDs[49].oid; +PmlOid *OID_FAX_PSTN_ACCESS_CODE = &OIDs[50].oid; +PmlOid *OID_FAX_RX_SCALE = &OIDs[51].oid; +PmlOid *OID_FAX_RX_DISPOSITION = &OIDs[52].oid; +PmlOid *OID_FAX_TX_CONFIRM_STAMPING = &OIDs[53].oid; +PmlOid *OID_FAX_TX_PHONE_NUMBER = &OIDs[54].oid; +PmlOid *OID_FAX_BEEP_ENABLE = &OIDs[55].oid; +PmlOid *OID_FAX_NOISE_VOLUME = &OIDs[56].oid; +PmlOid *OID_FAX_COUNTRY = &OIDs[57].oid; +PmlOid *OID_FAX_MERCURY_NUMBER = &OIDs[58].oid; +PmlOid *OID_FAX_BLACKLISTED = &OIDs[59].oid; +PmlOid *OID_FAX_BLACKLIST_DELETE = &OIDs[60].oid; +PmlOid *OID_FAX_FLASH_TYPE = &OIDs[61].oid; +PmlOid *OID_FAX_LINE_TYPE = &OIDs[62].oid; +PmlOid *OID_FAX_ANSWER_MODE = &OIDs[63].oid; +PmlOid *OID_FAX_RING_ENABLE = &OIDs[64].oid; +PmlOid *OID_FAX_NUM_RINGS_PICKUP = &OIDs[65].oid; +PmlOid *OID_FAX_MIN_RINGS_PICKUP = &OIDs[66].oid; +PmlOid *OID_FAX_MAX_RINGS_PICKUP = &OIDs[67].oid; +PmlOid *OID_FAX_RING_TYPE_PICKUP = &OIDs[68].oid; +PmlOid *OID_FAX_DISTINCTIVE_RING_DETECT = &OIDs[69].oid; +PmlOid *OID_FAX_BACKUP_RECEPTION = &OIDs[70].oid; +PmlOid *OID_FAX_SILENT_DETECTION = &OIDs[71].oid; +PmlOid *OID_FAX_DIAL_MODE = &OIDs[72].oid; +PmlOid *OID_FAX_ADDITIONAL_WAIT = &OIDs[73].oid; +PmlOid *OID_FAX_WHICH_REDIAL = &OIDs[74].oid; +PmlOid *OID_FAX_REDIAL_TIME = &OIDs[75].oid; +PmlOid *OID_FAX_MAX_REDIALS = &OIDs[76].oid; +PmlOid *OID_FAX_FWD_ENABLE_TIME = &OIDs[77].oid; +PmlOid *OID_FAX_FWD_DISABLE_TIME = &OIDs[78].oid; +PmlOid *OID_FAX_FWD_PHONE_NUMBER = &OIDs[79].oid; +PmlOid *OID_FAX_ALLOW_REDIALS = &OIDs[80].oid; +PmlOid *OID_FAX_REDIAL = &OIDs[81].oid; +PmlOid *OID_FAX_LOG_ACTION = &OIDs[82].oid; +PmlOid *OID_FAX_LOG_REPORTING = &OIDs[83].oid; +PmlOid *OID_FAX_CONTRAST = &OIDs[84].oid; +PmlOid *OID_FAX_RESOLUTION = &OIDs[85].oid; +PmlOid *OID_FAX_PIXEL_DATA_TYPE = &OIDs[86].oid; +PmlOid *OID_SCAN_CONTRAST = &OIDs[87].oid; +PmlOid *OID_SCAN_RESOLUTION = &OIDs[88].oid; +PmlOid *OID_SCAN_PIXEL_DATA_TYPE = &OIDs[89].oid; +PmlOid *OID_SCAN_COMPRESSION = &OIDs[90].oid; +PmlOid *OID_SCAN_COMPRESSION_FACTOR = &OIDs[91].oid; +PmlOid *OID_SCAN_UPLOAD_ERROR = &OIDs[92].oid; +PmlOid *OID_SCAN_UPLOAD = &OIDs[93].oid; +PmlOid *OID_SCAN_DITHER_MATRIX = &OIDs[94].oid; +PmlOid *OID_SCAN_NOT_READY_SOURCE = &OIDs[95].oid; +PmlOid *OID_SCAN_NUM_BRIGHTNESS_LEVELS = &OIDs[96].oid; +PmlOid *OID_SCAN_RESOLUTION_RANGE = &OIDs[97].oid; +PmlOid *OID_COPIER_RESOLUTION = &OIDs[98].oid; +PmlOid *OID_COPIER_CONTRAST = &OIDs[99].oid; +PmlOid *OID_COPIER_PIXEL_DATA_TYPE = &OIDs[100].oid; +PmlOid *OID_COPIER_REDUCTION = &OIDs[101].oid; +PmlOid *OID_COPIER_SCAN_TO_PRINTER = &OIDs[102].oid; +PmlOid *OID_COPIER_NUM_COPIES = &OIDs[103].oid; +PmlOid *OID_COPIER_COLLATION = &OIDs[104].oid; +PmlOid *OID_COPIER_ZOOM_RANGE = &OIDs[105].oid; +PmlOid *OID_CFG_STATUS = &OIDs[106].oid; +PmlOid *OID_CFG_DOWNLOAD = &OIDs[107].oid; +PmlOid *OID_CFG_DOWNLOAD_ERROR = &OIDs[108].oid; +PmlOid *OID_CFG_DOWNLOAD_DATA_TYPE = &OIDs[109].oid; +PmlOid *OID_CFG_UPLOAD = &OIDs[110].oid; +PmlOid *OID_CFG_UPLOAD_ERROR = &OIDs[111].oid; +PmlOid *OID_CFG_UPLOAD_DATA_TYPE = &OIDs[112].oid; +PmlOid *OID_CFG_DELETE_DEMO_PAGES = &OIDs[113].oid; +PmlOid *OID_IMAGE_DOWNLOAD = &OIDs[114].oid; +PmlOid *OID_IMAGE_DOWNLOAD_ERROR = &OIDs[115].oid; +PmlOid *OID_COLOR_CORRECTION_MATRIX = &OIDs[116].oid; +PmlOid *OID_DATE_DISPLAY_FORMAT = &OIDs[117].oid; +PmlOid *OID_COLOR_COPY_REQUEST = &OIDs[118].oid; +PmlOid *OID_STATUS_JOBS_ACTIVE = &OIDs[119].oid; +PmlOid *OID_STATUS_UI_DIALOGS_ACTIVE = &OIDs[120].oid; +PmlOid *OID_STATUS_UI_CURRENT_CONTEXT = &OIDs[121].oid; +PmlOid *OID_SCAN_SHARPEN_COEFF = &OIDs[122].oid; +PmlOid *OID_SCAN_ABC_THRESHOLDS = &OIDs[123].oid; +PmlOid *OID_LIU_ID = &OIDs[124].oid; diff -N -ru cvshpoj/ptal/ptal-internal.h hpojexp/ptal/ptal-internal.h --- cvshpoj/ptal/ptal-internal.h Sun Nov 19 01:37:45 2000 +++ hpojexp/ptal/ptal-internal.h Sun Dec 31 03:06:54 2000 @@ -22,7 +22,6 @@ #include "ptal.h" - struct ptalProvider_s { char *name; @@ -104,39 +103,38 @@ - ptalDevice_t ptalDeviceAdd(ptalProvider_t provider,char *name,void *cbd); - - - #define PTAL_PML_MAX_VALUE_LEN 1024 #define PTAL_MAX_OID_LEN 32 - struct ptalPmlValue_s { - int type; - int lenValue; - char value[PTAL_PML_MAX_VALUE_LEN+1]; /* null terminated */ - int symbolSet; + int type; + int integer; /* Represents length when strvalue != 0. */ + char *data; /* cannot be nullterminated since it can be BINARY */ }; struct ptalPmlObject_s { - ptalPmlObject_t prev,next; - ptalDevice_t dev; - - char oid[PTAL_MAX_OID_LEN+1]; /* binary, null terminated */ - - int indexLastValue; - struct ptalPmlValue_s value[2]; - - int trapEnabled; - int trapCount; /* trap increments, enable/hasTrapped zeroes */ - ptalPmlObjectEnumerate_f *trapCallback; /* may be 0 even if trapped */ - void *cbd; /* callback data */ + /* private */ + ptalPmlObject_t prev,next; + int indexLastValue;//off what. + /* a semaphore is needed for the open/close feature */ + void *cbd; /* callback data */ + int datatype; + int oidlength; + unsigned char *oid; /* binary */ + + ptalChannel_t chan; + + int trapEnabled; + int trapCount; /* trap => increments, enable/hasTrapped => zeroes */ + ptalPmlObjectEnumerate_f *trapCallback; /* may be 0 even if trapped */ }; +struct ptalPmlError_s { + char data[3]; /* completely unknown of the information */ +}; #endif diff -N -ru cvshpoj/ptal/ptal.c hpojexp/ptal/ptal.c --- cvshpoj/ptal/ptal.c Mon Dec 18 13:28:43 2000 +++ hpojexp/ptal/ptal.c Sun Dec 31 03:06:52 2000 @@ -24,6 +24,7 @@ #include <string.h> #include <errno.h> #include "ptal-internal.h" +#include "pml.h" #define PTAL_FLUSH_LEN_BUFFER 4096 #define PTAL_FLUSH_TIMEOUT_SEC 4 @@ -523,7 +524,6 @@ serviceType,socketID,serviceName); } } - return cbd.chan; } @@ -707,8 +707,8 @@ } PTAL_LOG_DEBUG("ptalChannelRead(chan=0x%8.8X," - "buffer=0x%8.8X,count=%d) returns %d.\n", - (int)chan,(int)buffer,count,r,0,0); + "buffer=0x%8.8X,count=%d) returns %d.\n", + (int)chan,(int)buffer,count,r,0,0); return r; } @@ -872,7 +872,7 @@ r=chan->provider->channelWrite(chan,buffer,count); } else if (chan->fd==PTAL_NO_FD) { - PTAL_LOG_ERROR("ptalChannelRead(chan=0x%8.8X): " + PTAL_LOG_ERROR("ptalChannelWrite(chan=0x%8.8X): " "not open!\n", (int)chan,0,0,0,0,0); r=PTAL_ERROR; @@ -888,32 +888,207 @@ } -ptalPmlObject_t ptalPmlObjectAllocate(ptalDevice_t dev) { - +void ptalPmlObjectDump(ptalPmlObject_t obj,int level) { + fprintf(stderr,"obj=0x%8.8X, prev=0x%8.8X, next=0x%8.8X\n", + (int)obj,(int)obj->prev,(int)obj->next); + fprintf(stderr,"chan=0x%8.8X, prev=0x%8.8X, next=0x%8.8X\n", + (int)obj->chan,(int)obj->chan->prev,(int)obj->chan->next); + fprintf(stderr,"dev=0x%8.8X, provider=0x%8.8X <%s>\n", + (int)obj->chan->dev,(int)obj->chan->provider,obj->chan->provider->name); + fprintf(stderr,"indexLastValue=%d\n", + obj->indexLastValue); + fprintf(stderr,"cbd=0x%8.8X\n", + obj->cbd); + fprintf(stderr,"oid=%s\n", + obj->oid); + fprintf(stderr,"trapEnabled=%d\n", + obj->trapEnabled); + fprintf(stderr,"trapCount=%d\n", + obj->trapCount); + fprintf(stderr,"trapCallback=%d\n", + obj->trapCallback); + fprintf(stderr,"\n"); } -int ptalPmlObjectEnumerate(ptalDevice_t dev, - ptalPmlObjectEnumerate_f callback,void *cbd) { - +/* returns the first ptalPMLObject */ +ptalPmlObject_t ptalPmlObjectAllocate(ptalDevice_t dev, char* objectName) { + /* TODO: find the socket for PML (if any), currently assuming socket + 0x01 for PML communication since that's the one for HP OfficeJet */ + + /* Somehow there should be a list of Objects, but to what shall it + be rooted, the channel? */ + const int pmlSocket = 0x01; + int c; + ptalPmlObject_t obj = 0; + + ptalChannel_t chan = 0; + ptalDebugFlag = 10; + + PTAL_LOG_DEBUG("ptalPmlObjectAllocate(dev=0x%8.8X): starting\n",0,0,0,0,0,0); + + chan = ptalChannelFindOrAllocate(dev, PTAL_STYPE_GENERIC,pmlSocket ,"PML"); + if(!chan){ + PTAL_LOG_ERROR("ptalPmlObjectAllocate(dev=0x%8.8X): ptalChannelFindOrAllocate(dev=0x%8.8X, %d, %d, %s) returns 0\n", + (int)dev,(int)dev,PTAL_STYPE_GENERIC,pmlSocket,"PML",0); + return 0; + } + + /*calloc initialise and zeros the PML OIDs for the channel*/ + obj = (ptalPmlObject_t) calloc(1, sizeof(struct ptalPmlObject_s)); + if(!obj){ + PTAL_LOG_ERROR("ptalPmlObjectAllocate(dev=0x%8.8X): calloc(1, %d) returns 0\n", + (int)dev,(int)sizeof(struct ptalPmlObject_s),0,0,0,0); + return 0; + } + obj->chan = chan; + + /* Find oid by objectName. Linear search ..=:-( : */ + /* I think that the list of OIDs is device dependent */ + for(c = 0 ; c < OIDEntries; c++){ + if(strcmp(OIDs[c].name, objectName) == 0){ + obj->oid = (unsigned char*) calloc(OIDs[c].oid.len, sizeof(unsigned char)); + if(!obj->oid){ + PTAL_LOG_ERROR("ptalPmlObjectAllocate(dev=0x%8.8X): calloc(%d, %d) returns 0", + (int)dev,OIDs[c].oid.len,(int)sizeof(unsigned char),0,0,0); + free(obj); + return 0; + } + memcpy(obj->oid, OIDs[c].oid.id, OIDs[c].oid.len); + obj->oidlength = OIDs[c].oid.len; + obj->datatype = OIDs[c].oid.type; + break; + } + } + if(c == OIDEntries){/*OID by that name not found*/ + free(obj); + return 0; + } + return obj; } int ptalPmlObjectDeallocate(ptalPmlObject_t obj) { - + /* TODO: disconnect the list of PML objects */ + if(obj){ + if(obj->oid){ + free(obj->oid); + } + free(obj); + } } -int ptalPmlObjectSetID(ptalPmlObject_t obj,char *oid,int len) { +int ptalPmlObjectEnumerate(ptalDevice_t dev, + ptalPmlObjectEnumerate_f callback,void *cbd) { } -int ptalPmlObjectGetID(ptalPmlObject_t obj,char *buffer,int maxlen) { +int ptalPmlObjectGetValue(const ptalPmlObject_t obj, ptalPmlValue_t* _val, ptalPmlError_t* _err){ + ptalChannel_t chan; + unsigned char sendbuf[4096]; + unsigned char recvbuf[4096]; + int read, c, replycode, exec_code; + ptalPmlObject_t recvObj = 0; + + chan = ptalChannelFindOrAllocate(obj->chan->dev,PTAL_STYPE_GENERIC,1,"PML"); + ptalChannelSetPacketSizes(chan,4096, 4096); + PTAL_LOG_DEBUG("ptalChannelFindOrAllocate(dev=0x%8.8X," + "type=%d,socket=%d, name=%s) returns 0x%8.8X.\n", + (int)obj->chan->dev,(int)PTAL_STYPE_GENERIC,1,"PML",(int)chan,0); + + sendbuf[0] = GetRequest; + PMLencodeObject(&(sendbuf[1]), obj); + + ptalChannelOpenOrReopen(chan); + ptalChannelWrite(chan, sendbuf, strlen(obj->oid) + 3); + + read = ptalChannelRead(chan, recvbuf, 4096); + /* + fprintf(stderr, "Received: "); + for(c= 0; c < read; c++){ + fprintf(stderr, "%2.2X:", recvbuf[c]); + } + fprintf(stderr, "\n"); + fprintf(stderr, "Received: "); + for(c= 0; c < read; c++){ + fprintf(stderr, "%c", recvbuf[c]); + } + fprintf(stderr, "\n"); + */ + PMLdecodeReply(&replycode, &exec_code, _err, &recvObj, _val, recvbuf); + if(!(0x80 == replycode && 00 == exec_code)){ + fprintf(stderr, PMLExecutionToString(exec_code)); + } + + ptalChannelClose(chan); + return 0; +} + +int ptalPmlObjectSetValue(const ptalPmlObject_t obj, ptalPmlValue_t val, ptalPmlError_t* _err){ + ptalChannel_t chan; + unsigned char sendbuf[4096]; + unsigned char recvbuf[4096]; + int read, c, replycode, exec_code, encoded , r; + ptalPmlObject_t recvObj = 0; + ptalPmlValue_t recvVal = 0; + + if(obj->datatype != val->type){ + PTAL_LOG_ERROR("%s:%d: Invalid datatype in Object.\n",__FILE__,__LINE__,0,0,0,0); + return -1; + } + + chan = ptalChannelFindOrAllocate(obj->chan->dev,PTAL_STYPE_GENERIC,1,"PML"); + ptalChannelSetPacketSizes(chan,4096, 4096); + PTAL_LOG_DEBUG("ptalChannelFindOrAllocate(dev=0x%8.8X," + "type=%d,socket=%d, name=%s) returns 0x%8.8X.\n", + (int)obj->chan->dev,(int)PTAL_STYPE_GENERIC,1,"PML",(int)chan,0); + + r = 0; + sendbuf[0] = SetRequest; + r++; + encoded = PMLencodeObject(&(sendbuf[r]), obj); + if(encoded < 0){ + return encoded; + } + r+= encoded; + encoded = PMLencodeValue(&(sendbuf[r]), val); + if(encoded < 0){ + return encoded; + } + r+= encoded; + + ptalChannelOpenOrReopen(chan); + /* + fprintf(stderr, "Sending: "); + for(c= 0; c < r; c++){ + fprintf(stderr, "%2.2X:", sendbuf[c]); + } + fprintf(stderr, "\n"); + */ + ptalChannelWrite(chan, sendbuf, strlen(obj->oid) + 3); + + read = ptalChannelRead(chan, recvbuf, 4096); + /* + fprintf(stderr, "Received: "); + for(c= 0; c < read; c++){ + fprintf(stderr, "%2.2X:", recvbuf[c]); + } + fprintf(stderr, "\n"); + fprintf(stderr, "Received: "); + for(c= 0; c < read; c++){ + fprintf(stderr, "%c", recvbuf[c]); + } + fprintf(stderr, "\n"); + */ + PMLdecodeReply(&replycode, &exec_code, _err, &recvObj, &recvVal, recvbuf); + if(!(0x80 == replycode && 00 == exec_code)){ + fprintf(stderr, PMLExecutionToString(exec_code)); + } + ptalChannelClose(chan); + return 0; } - /* TODO: PML: -get(oid,pvalue) -set(oid,value) getnext(oid,pnextoid,pvalue) enable trap(oid,callback) disable trap(oid,callback) diff -N -ru cvshpoj/ptal/ptal.h hpojexp/ptal/ptal.h --- cvshpoj/ptal/ptal.h Sun Nov 19 01:37:47 2000 +++ hpojexp/ptal/ptal.h Sun Dec 31 03:06:54 2000 @@ -34,11 +34,16 @@ #define PTAL_MAX_SERVICE_NAME_LEN 40 - -typedef struct ptalProvider_s *ptalProvider_t; -typedef struct ptalDevice_s *ptalDevice_t; -typedef struct ptalChannel_s *ptalChannel_t; +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct ptalProvider_s *ptalProvider_t; +typedef struct ptalDevice_s *ptalDevice_t; +typedef struct ptalChannel_s *ptalChannel_t; typedef struct ptalPmlObject_s *ptalPmlObject_t; +typedef struct ptalPmlValue_s *ptalPmlValue_t; +typedef struct ptalPmlError_s *ptalPmlError_t; typedef int ptalProviderEnumerate_f(char *name,void *cbd); typedef int ptalDeviceEnumerate_f(ptalDevice_t dev,void *cbd); @@ -103,8 +108,8 @@ struct timeval *startTimeout,struct timeval *continueTimeout); int ptalChannelWrite(ptalChannel_t chan,char *buffer,int count); - - - +#ifdef __cplusplus +} +#endif #endif |
From: Robert G. B. <rg...@ph...> - 2000-12-31 01:40:46
|
On Sat, 30 Dec 2000, Jarl Friis wrote: > On Fri, 29 Dec 2000, David Paschal wrote: > > > Hi, Jarl. > > > > Yes, it might be more appropriate to put daemons such as ptal-printd in > > ${prefix}/sbin, particularly as I add more daemons. I'll take a look at > > your attachments later because I can't seem to decode them with the mail > > client I'm using at the moment (not your fault). <deleted> > > Timothy Lee has been working on a RedHat SRPM, so you might want to > > coordinate your efforts with his. I would greatly prefer to post one > > .src.rpm file that works on all RPM-based distributions, but of course > > reality may dictate otherwise. :-) > > from what I can see RPM is not designed for that feature, in the SPEC file > part of the src.rpm you specify where to put files, i.e. SuSE put libs in > /usr/lib/ wheras RedHat puts them in /usr/local/lib Actually, RH puts everything in /usr and nothing at all in /usr/local. It is also straightforward to build a relocatable RPM if nothing in it needs an absolute path. The only tricky part that I can see of an RPM is deciding where to put the kernel modules, which generally need to be built "just" for the kernel they are intended to run under. For the daemon this won't matter, and I agree that it should go in /usr/sbin and not /usr/bin. Or more practically, in ${prefix}/sbin. If anybody needs/wants it, I can contribute a matching "generic template" specfile and Makefile that do a gangbusters job of building rpm's in userspace. That is, everything is done by make targets -- make tgz builds a spec-ready or build-ready whatever.tgz and make rpm builds a very nice rpm, all automagically, with version/release numbers defined only in the Makefile. rgb -- Robert G. Brown http://www.phy.duke.edu/~rgb/ Duke University Dept. of Physics, Box 90305 Durham, N.C. 27708-0305 Phone: 1-919-660-2567 Fax: 919-660-2525 email:rg...@ph... |
From: Carlos P. <cp...@ro...> - 2000-12-30 20:52:29
|
--- Joe Piolunek <joe...@sn...> wrote: > When I use the command 'enscript -2rG', I see results similar to yours. Try > adding " --margins=:::50 " to your print command line. When I used this print >... > enscript -2rG -Pptal-printd --margins=:::50 works well, thanks joe! i thought there may be some setting to calibrate the printable area somehow, across the board for all printing.. thanks! ===== C. Puchol <cp...@ro...> __________________________________________________ Do You Yahoo!? Yahoo! Photos - Share your holiday photos online! http://photos.yahoo.com/ |
From: Jarl F. <ja...@di...> - 2000-12-30 18:28:36
|
Does anyone know anything about the PML error codes that can turnup in request responses? Has it anything to do with the ones found on HP help page: http://www.hp.com/cposupport/multifunction/support_doc/bpu50364.html Jarl |
From: <pa...@rc...> - 2000-12-30 18:14:02
|
Alain wrote: > This was it. The other points were OK. I really haven't thought about a > previous (in this case default) installation of a previous version. Now it > scans all right but since I'm new to scanning I was first amazed at the size > of some 100 Mbytes of a sampled page of regular format, color mode at 600 dpi 600 dpi is overkill for most situations. From what I've heard, 150 dpi is sufficient for photos, and less is fine for text, but your mileage may vary. > Isn't there an interrupt on the parallel port to minimize the load on the > operating system of transfered data while scanning? It would be nice to have > the GUI still flowing nicely while doing 600 dpi scans. There is a varying degree of interrupt support between parallel ports, but it isn't helpful for the ways we're using the parallel port. > It would also be nice to specify a page size while scanning. For instance, > if there's only one 5 x 7 picture in the scanner the scan could stop at x > inches and then close the file appropriately. With both xscanimage and xsane you can set "geometry" options to set the top-left and bottom-right corners of the scan window. If you drag the mouse within the preview window it will draw a rectangle which sets the geometry, although there are a few bugs with this method in xscanimage. > I know I still have a lot to learn about printing with Linux. The printing > system is not entirely clear for me. I think CUPS looks quite OK to use. I'm not familar with CUPS, so I would be interested to hear how it works out for you in conjunction with the hpoj package. David |
From: <pa...@rc...> - 2000-12-30 17:53:00
|
I wrote: > Richard Phillips wrote: > > Thought you may have spotted newbieness of request - I simply wanted a > > text file of ptal's syntax, which is obtained by ptal-printd >& foo.txt, > > of course. > Oh -- silly me! :-) Actually, I think "ptal-printd >foo.txt &" would be > the more correct syntax. Evidently I was still confused when I wrote that! I had forgotten that I had changed ptal-printd to send its messages to standard error rather than standard output, which was what you were getting at. So the syntax you suggested above ("ptal-printd >& foo.txt") is correct after all. Other commands I tried that also work include "ptal-printd &>foo.txt" and "ptal-printd 2>foo.txt" (which is what I typically use). It would only be necessary to include the final ampersand if you want it to start in the background, which isn't needed when running ptal-printd with no parameters, because it exits right away anyway. Sorry about the misinformation! :-) David |
From: <mal...@t-...> - 2000-12-30 14:30:52
|
Hello David, > Also, make sure you didn't already have SANE installed, because Mandrake > includes RPMs for SANE. Issue the command "rpm -qa|grep -i sane". This was it. The other points were OK. I really haven't thought about a previous (in this case default) installation of a previous version. Now it scans all right but since I'm new to scanning I was first amazed at the size of some 100 Mbytes of a sampled page of regular format, color mode at 600 dpi. Isn't there an interrupt on the parallel port to minimize the load on the operating system of transfered data while scanning? It would be nice to have the GUI still flowing nicely while doing 600 dpi scans. It would also be nice to specify a page size while scanning. For instance, if there's only one 5 x 7 picture in the scanner the scan could stop at x inches and then close the file appropriately. I know I still have a lot to learn about printing with Linux. The printing system is not entirely clear for me. I think CUPS looks quite OK to use. Cheers, and thanks for the help, Alain |
From: <pa...@rc...> - 2000-12-30 06:14:24
|
Hi, Daniel. Daniel Gun wrote: > Does the device try to communicate with the computer when it is turned on? > If so, the module could look for this signal and add the device when turned > on. IEEE1284-compliant peripherals power up in compatibility mode with no such peripheral-initiated communication that you suggested. In some cases you might notice a change in the status (peripheral-to-host) lines, but it's not guaranteed since different host and peripheral parallel ports have different pull-up or pull-down resistors. > Windows can handle having the device turned on or off arbitrarily. How is > it done? Windows tries to read the device ID string from the peripheral when it boots and when you invoke the "Add New Hardware" wizard, just as parport_probe does when it is insmoded. I don't think Windows automatically detects hot-plugging of devices on the parallel port the way it does with USB devices. David |
From: <pa...@rc...> - 2000-12-30 06:00:51
|
Joe Piolunek wrote: > RPM's and SRPM's sometimes are a pretty big download. It would be better IMO, > to put any large files on a web page or ftp site (if you have one) for public > download, and then announce it in the list. It would mean less work for > sourceforge's mailservers, and would not require anyone to download a big > file that they may not have a use for. This is only my own preference, of > course. Some people may not mind getting big mail attachments. I would tend to agree. It didn't really bother me personally, because I've gotten rather spoiled with my DSL. :-) However, for the sake of people with slower dialup connections it would be good to refrain from sending large attachments. I'm sure the Sourceforge people would appreciate that too, even though they recently upgraded their servers. (It's good they did, because now I usually get my messages back within a few minutes, as opposed to several hours previously.) Originally the hpoj-devel mailing list was configured to reject postings larger than about 40K, but I removed that limitation because it was blocking legitimate postings (in particular, Burkhard's and Damien's SMP and 2.4 patches from several months ago). I'll keep it that way unless it ends up getting abused at some point. Jarl Friis wrote: > Well, maybe a mailing list shouldn't be filled up with attachments in the > first place, so I've put them on: > http://213.237.48.227/~jarl/hpoj/ > > It may be down (turned off) some days, approx. every 10th to pick a > number, I'll put them somewhere more reliable soon. I just tried it and it doesn't seem to be up (Sat Dec 30 05:21:27 UTC 2000). > from what I can see RPM is not designed for that feature, in the SPEC file > part of the src.rpm you specify where to put files, i.e. SuSE put libs in > /usr/lib/ wheras RedHat puts them in /usr/local/lib I've been running various versions of RedHat for the last 5 years, and they have always put libraries in /usr/lib (or /lib for system-level stuff), even for software which when built directly from source would default to /usr/local/lib. In my experience /usr/local generally seems to be reserved for installing software outside the context of the "official" packaging system on a given distribution. > rename Suggestion: > What about using the name POrTAL (or just 'portal') for the concept now > know as ptal, POrTAL could be for Peripheral Oriented Transport > Abstraction Layer or something else with O, or did you get 'ptal' from > somewhere else? POrTAL is a little bit more pronounceable than ptal. I pronounce "ptal" by saying the letter 'P' and then saying "tal", resulting in a very manageable two-syllable word (in other words, "pea-tal"). So I don't think it's worth the trouble of renaming PTAL (and the API) at this point, but feel free to pronounce it "portal" if it helps you. Speaking of name changes, at some point we might need to figure out a new name for the project itself, since I'm trying to expand beyond just supporting Linux. (I already have a user-mode parallel port driver running on Linux and FreeBSD, which I may make available in the "experimental" section soon if I get a chance to clean it up a bit.) I won't change the "hpoj" abbreviation for the package or Sourceforge project name, but once we've officially achieved cross-platform status, it might be better to call it something besides the "HP OfficeJet driver for Linux" or whatever (and I'm not even consistent about what I call it right now!). We could just say "Unix" instead of "Linux", but there might be some trademark-infringement issues there. Suggestions would be welcome, but they should somehow reflect the fact that it's a driver for HP all-in-one peripherals for non-Windows platforms, and possibly reflect the fact that it's Free software. David |
From: <pa...@rc...> - 2000-12-30 04:53:08
|
Richard Phillips wrote: > Thought you may have spotted newbieness of request - I simply wanted a > text file of ptal's syntax, which is obtained by ptal-printd >& foo.txt, > of course. Oh -- silly me! :-) Actually, I think "ptal-printd >foo.txt &" would be the more correct syntax. David |
From: Jarl F. <ja...@di...> - 2000-12-30 02:48:12
|
On Fri, 29 Dec 2000, David Paschal wrote: > Hi, Jarl. > > Yes, it might be more appropriate to put daemons such as ptal-printd in > ${prefix}/sbin, particularly as I add more daemons. I'll take a look at > your attachments later because I can't seem to decode them with the mail > client I'm using at the moment (not your fault). Well, maybe a mailing list shouldn't be filled up with attachments in the first place, so I've put them on: http://213.237.48.227/~jarl/hpoj/ Notice hpoj is split into the conceptually different parts it contains It may be down (turned off) some days, approx. every 10th to pick a number, I'll put them somewhere more reliable soon. > Timothy Lee has been working on a RedHat SRPM, so you might want to > coordinate your efforts with his. I would greatly prefer to post one > .src.rpm file that works on all RPM-based distributions, but of course > reality may dictate otherwise. :-) from what I can see RPM is not designed for that feature, in the SPEC file part of the src.rpm you specify where to put files, i.e. SuSE put libs in /usr/lib/ wheras RedHat puts them in /usr/local/lib But from one spec-file it shouldn't be a big problem to make the other. rename Suggestion: What about using the name POrTAL (or just 'portal') for the concept now know as ptal, POrTAL could be for Peripheral Oriented Transport Abstraction Layer or something else with O, or did you get 'ptal' from somewhere else? POrTAL is a little bit more pronounceable than ptal. Jarl |
From: Joe P. <joe...@sn...> - 2000-12-30 02:47:52
|
On Friday 29 December 2000 17:40, Jarl Friis wrote: <...> > > Scanning is working just fine with HP OfficeJets at least the G85 > (flatbed) when using hpoj 0.7 and sane 1.04, no patch is needed. Recently > I sent some RPMs for SuSE-7.0, I have later discovered some dep-errs in > the packages, but using --nodeps should do it. I expect to contribute the > new ones, I have also done it for sane 1.0.4 > > Please remind me to mail them in a couple of days if I forget. > > Jarl > Jarl: RPM's and SRPM's sometimes are a pretty big download. It would be better IMO, to put any large files on a web page or ftp site (if you have one) for public download, and then announce it in the list. It would mean less work for sourceforge's mailservers, and would not require anyone to download a big file that they may not have a use for. This is only my own preference, of course. Some people may not mind getting big mail attachments. Thanks. -- Joe Piolunek |
From: Richard <ric...@bt...> - 2000-12-30 02:47:20
|
> Message: 2 > To: hpo...@li... Cc: pa...@rc... Subject: Re: [hpoj-devel] ptal-printd txt file > From: pa...@rc... (David Paschal) > Date: Wed, 27 Dec 2000 14:41:08 -0800 > Reply-To: hpo...@li... Richard Phillips wrote: > >> I want to capture output of ptal-printd (ptal-printd > foo.txt) but >> foo.txt never contains any content, whether running as root or user. >> > Tried variations with cat and lpr but no luck. Not a serious prob - but >> any solutions appreciated. > > Hi, Richard. What exactly are you trying to do here? Normally ptal-printd > doesn't display anything on standard output unless an error occurs. It > just sits around waiting for data to be written to a pipe and then sends it > to the printer. > > David Thought you may have spotted newbieness of request - I simply wanted a text file of ptal's syntax, which is obtained by ptal-printd >& foo.txt, of course. |
From: <pa...@rc...> - 2000-12-29 23:07:34
|
Hi, Jarl. Jarl Friis wrote: > I have downloaded the stable version 0.7, but I consider it relevant to > put the ptal-printd in the sbindir instead of the bindir. I have changed > the Makefile.in, and configure.in, configure accordingly, and made a > diff-file (attacehd) Yes, it might be more appropriate to put daemons such as ptal-printd in ${prefix}/sbin, particularly as I add more daemons. I'll take a look at your attachments later because I can't seem to decode them with the mail client I'm using at the moment (not your fault). > I am also working on a SuSE-7.0-pro RPM. I am also quite new to RPM > building. It install quite allright, but I am very unsure about the > dependancies, so don't trust them (yet). Timothy Lee has been working on a RedHat SRPM, so you might want to coordinate your efforts with his. I would greatly prefer to post one .src.rpm file that works on all RPM-based distributions, but of course reality may dictate otherwise. :-) David |
From: <pa...@rc...> - 2000-12-29 22:45:34
|
Dag Nygren wrote: > I am the one that had problems with SMP and printing > hanging.... > > Downloaded 0.7 and tried again: > > Didn't check scanning yet but I still see ptal-printd > hanging and becoming unkillable (hang in the driver > I presume). > The strange thing is that the first printing usually works.... > > Is there anything I can do to help you (or me) debug this > problem ? Hi, Dag. There are "debug=" options that can be passed to the kernel-mode drivers (see the INSTALL file). To start out, you could try enabling debug output for each one individually and then both together, but chances are there will be so much output that syslog can't keep up. But it's a start, anyway. Also, could you send me print samples (in PostScript format) that cause this problem for you, or URLs of webpages I can try printing to duplicate the problem? I have an SMP box at work, but I wasn't able to lock it up from printing RedHat test pages. David |
From: Jarl F. <ja...@di...> - 2000-12-29 22:42:01
|
On Fri, 29 Dec 2000, David Paschal wrote: > Johan Laagland wrote: > > > > I'd like to scan with the OfficeJet so I downloaded the > > sane sourcecode and applied your patch. > Scanning is not yet supported with the model you have, but it's on my > to-do list. Scanning is working just fine with HP OfficeJets at least the G85 (flatbed) when using hpoj 0.7 and sane 1.04, no patch is needed. Recently I sent some RPMs for SuSE-7.0, I have later discovered some dep-errs in the packages, but using --nodeps should do it. I expect to contribute the new ones, I have also done it for sane 1.0.4 Please remind me to mail them in a couple of days if I forget. Jarl |
From: Joe P. <joe...@sn...> - 2000-12-29 22:37:35
|
On Friday 29 December 2000 05:32, Carlos Puchol wrote: > > hi, i seem to be having trouble when printing some specific > printouts with enscript, which i use a lot. i am using the 0.7 with > the init script on 2.2.16-3smp with great success. thanks > to david and joe and tim, and everyone else for the help! > > i do not get any more overruns as i used to, it seems. > however, i still get this cropping at the bottom of the page. > > if i print this: > > 123456 > 123456 > 123456 > > with nenscript -2rG, the column with the 1 does not show up. > any ideas on how to configure things so that it prints? > (it is a bit tricky when printing code or travel reservations > not to be able to read the first column :-) > Carlos: Many printers can't print close to the bottom of the page. It's caused by the way they are designed. The size of the non-printable area probably varies between printer models. When I use the command 'enscript -2rG', I see results similar to yours. Try adding " --margins=:::50 " to your print command line. When I used this print command - enscript -2rG -Pptal-printd --margins=:::50 there was no loss of text at the bottom of the page. See 'man enscript' for more information. Best to you, Carlos. -- Joe |
From: Jarl F. <ja...@di...> - 2000-12-29 22:36:33
|
I am currently working on adding the PML to the ptal, and I discovered that the PML oids on the web are not the same as in the ojlib/pmloidentries.c the difference are (at least) the two folloing objects: In the code: { {1, "\x00", 0}, "OID_NULL"}, { {1, "\x01", 0}, "OID_FIRST"}, One the WEB (http://hpoj.sourceforge.net/doc/pmlobj.html): Object name Object ID Data type Description OID_FIRST 0 0 First OID There seem to mis one on the web, will somebody with documentation please fix this. Jarl |
From: <pa...@rc...> - 2000-12-29 22:30:46
|
Johan Laagland wrote: > Recently I downloaded the sourcecode hpoj-0.6 for my > HP OfficeJet for working with it under RH Linux 6.2. Hi, Johan. 0.7 was released recently, but I don't think it will fix any of the problems you raised: > Problem 1. > > Printqueue stops and LC panel is frozen dead when printing > more than one job. When killing the xojpanel process > printing resumes normal operation. This is a known problem with the low-level drivers (ieee12844.o). For now the workaround is to kill xojpanel before printing. > Problem 2. > > I'd like to scan with the OfficeJet so I downloaded the > sane sourcecode and applied your patch. Scanning is not yet supported with the model you have, but it's on my to-do list. David |
From: <pa...@rc...> - 2000-12-29 22:30:45
|
Hi, Carl. Carl Baltser Pedersen wrote: > Using the hpo to scan, hpo scan bw, it always ended in a segmentation fault > which annoyed me. "hpo scan" is mainly test code and isn't terribly useful for scanning. > Using gdb, I traced the problem to PMLClose() in pml.c. > > After the PMLUnregisterTrap(), the traps pointer might be NULL because the > trap might have been free'd. > > Adding a test after PMLProcess((), no more segmentation faults appears. > > void PMLClose(void) > { > static trap_t *curtrap; > > /* Unregister all traps */ > while(traps != NULL) > { > PMLUnregisterTrap(traps->oid); > PMLProcess(); > > if( traps == NULL ) <--- Added > break; <--- Added. > curtrap = traps; > traps = traps->next; > free(curtrap); > } > > free(rcv_buf); > MlcCon_close(connection); > delete_MlcCon(connection); > } From a quick look of the code I'm not sure this is really the problem. "traps" is essentially the head pointer in a linked list, and the while loop stops as soon as it reaches the end of the list. I couldn't find any other place where items in the list were freed, but perhaps I missed something. But if it works for you, then great. Am I correct in assuming that this problem only shows up for you when running "hpo scan"? In that case I don't think I will worry about it, because I am in the process of replacing ojlib with PTAL, once I finish adding PML support to PTAL. > Now is the problem to figure out how to use the scanned data. > The 590 is not supported by the current SANE interface(ptal-connect) as far > as I can figure out. For now that's true, but I plan to fix that eventually. Lately I've been concentrating on lower-level I/O issues, which I think will need to be resolved before scanning will work reliably on this class of OfficeJets anyway. > Haven't tried the printing yet as one of the std. HP deskjet drivers > usually works. For now that may be your best bet, but keep an eye out for updates of this project. David |
From: <pa...@rc...> - 2000-12-29 21:56:11
|
Hi, Alain. Alain wrote: > But the real problem is with scanning. I would really like to get it > going. I have downloaded SANE 1.0.4 and followed the instructions in the > SCAN-HOWTO file. One thing that puzzles me is that the SANE docs seems to > mention exclusively SCSI interfaces, which I obviously don't have. SANE tends to have a slight bias towards SCSI, since most of the scanners it supports use SCSI. However, there are several other connection methods supported for specific backends, such as HP. > The err > msg I get is this: > > # scanimage --test > scanimage: no SANE devices found > > So, why is there no SANE device recognized by the system? There are a couple of things we can check here. First of all, when building SANE, check the output of ./configure to make sure it found PTAL (step 7 in SCAN-HOWTO). Also, make sure you edited /usr/local/etc/sane.d/hp.conf so it contains the following two lines (step 13): mlc:mlcpp0 option connect-ptal Also, make sure you didn't already have SANE installed, because Mandrake includes RPMs for SANE. Issue the command "rpm -qa|grep -i sane". I hope this helps. David |