294 lines
7.2 KiB
C++
294 lines
7.2 KiB
C++
/***************************************************************************
|
|
*
|
|
* File Name: mon_qp.cpp
|
|
*
|
|
* Copyright (C) 1993-1996 Hewlett-Packard Company.
|
|
* All rights reserved.
|
|
*
|
|
* 11311 Chinden Blvd.
|
|
* Boise, Idaho 83714
|
|
*
|
|
* This is a part of the HP JetAdmin Printer Utility
|
|
*
|
|
* This source code is only intended as a supplement for support and
|
|
* localization of HP JetAdmin by 3rd party Operating System vendors.
|
|
* Modification of source code cannot be made without the express written
|
|
* consent of Hewlett-Packard.
|
|
*
|
|
*
|
|
* Description:
|
|
*
|
|
* Author: Name
|
|
*
|
|
*
|
|
* Modification history:
|
|
*
|
|
* date initials change description
|
|
*
|
|
* mm-dd-yy MJB
|
|
*
|
|
* 01-18-96 JLH Unicode changes (TRACE statements only)
|
|
*
|
|
*
|
|
*
|
|
*
|
|
***************************************************************************/
|
|
|
|
//---------------------------------------------------------------------------
|
|
// $Header: W:/projects/shaqii/vcs/mon/mon_qp.cpv 2.1 19 Sep 1994 11:09:28 RICHARD $
|
|
// File: mon_qp.cpp
|
|
//
|
|
// Copyright (C) Hewlett-Packard Company 1993. All Rights Reserved.
|
|
// Copying or other reproduction of this material is prohibited without
|
|
// the prior written consent of Hewlett-Packard Company.
|
|
//
|
|
// What: Print Monitor Module containing the interface for the QP
|
|
//
|
|
// Author: Sylvan Butler (sdb) Start: Jul 22 93
|
|
//
|
|
// Notes:
|
|
//
|
|
// History:
|
|
//
|
|
// $Log: W:/projects/shaqii/vcs/mon/mon_qp.cpv $
|
|
//
|
|
// Rev 2.1 19 Sep 1994 11:09:28 RICHARD
|
|
// Deleted the port name parameter to the YieldToStatusWindow function.
|
|
//
|
|
// Rev 2.0 23 Aug 1994 13:54:10 RICHARD
|
|
// Changed references of "FAR *" to type definitons of LP...
|
|
// Changed references of HANDLE to PORTHANDLE
|
|
//
|
|
// Rev 1.10 11 Nov 1993 11:08:00 SYLVAN
|
|
// Added validity checking for DisplayStatus to pass correct port names
|
|
//
|
|
// Rev 1.9 08 Nov 1993 17:38:16 SYLVAN
|
|
// added comments, made PollReduction really work this time :)
|
|
//
|
|
// Rev 1.8 03 Nov 1993 17:25:54 SYLVAN
|
|
// Changed parameter to Yield...
|
|
//
|
|
// Rev 1.7 02 Nov 1993 16:46:46 SYLVAN
|
|
// Added YieldToStatus Window
|
|
//
|
|
// Rev 1.6 17 Sep 1993 11:22:58 SYLVAN
|
|
// Port not paused after EOJ
|
|
//
|
|
// Rev 1.5 15 Sep 1993 11:46:32 SYLVAN
|
|
// Added MonQP_Init for .ini entry for WritePollRate interval
|
|
// Use GetBiDiTicks instead of Windows function
|
|
//
|
|
// Rev 1.4 14 Sep 1993 10:52:32 SYLVAN
|
|
// Added algorithm choices for poll reduction
|
|
//
|
|
// Rev 1.3 31 Aug 1993 15:09:28 SYLVAN
|
|
// several, see history section
|
|
//
|
|
// Rev 1.2 16 Aug 1993 11:50:48 SYLVAN
|
|
// fix keywords in header (case sensitive)
|
|
//
|
|
// Who When What
|
|
// --- --------- ----
|
|
// sdb Jul 22 93 Module created by extraction from smon.cpp
|
|
// sdb Jul 29 93 Changed to use WritePort call
|
|
// sdb Aug 4 93 Added PJL output to Begin/End job, qualified it
|
|
// sdb Aug 5 93 Null terminate stored job name
|
|
// sdb Aug 20 93 Added check for job in ValidHandle
|
|
// sdb Aug 30 93 Added hack to prevent polling for ustatus in Write
|
|
// sdb Sep 7 93 Added alternate poll reduction algorithm
|
|
// Fixed multiple printer interaction bug in Aug 30 hack
|
|
// sdb Sep 15 93 Changed alternate poll algo not to use Win GetTicks...
|
|
// sdb Sep 17 93 Not paused after EOJ
|
|
//---------------------------------------------------------------------------
|
|
|
|
#include <pch_c.h>
|
|
|
|
#include <trace.h>
|
|
#include <comdef.h>
|
|
#include <smonx.h>
|
|
|
|
#include "smon.h"
|
|
|
|
#define BEGIN_JOB_TIMEOUT 5000
|
|
|
|
static DWORD PollRate = 0;
|
|
|
|
//---------------------------------------------------------------------------
|
|
// shared functions
|
|
//---------------------------------------------------------------------------
|
|
|
|
void MonQP_Init(void)
|
|
{
|
|
PollRate = 2000;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// local functions
|
|
//---------------------------------------------------------------------------
|
|
|
|
#define ValidHandle(n) ( \
|
|
hPort > 0 && \
|
|
hPort <= MAXSPCB && \
|
|
SPCBTable[hPort].DeviceState.bJobPresent && \
|
|
(SPCBTable[hPort].bPortOwner & PORT_OWN_QP) \
|
|
)
|
|
|
|
//---------------------------------------------------------------------------
|
|
// interface functions for the QP
|
|
//---------------------------------------------------------------------------
|
|
|
|
PORTHANDLE BeginJob(HPERIPHERAL hPeripheral,LPTSTR lpszPortName,
|
|
LPTSTR lpszJobName)
|
|
{
|
|
int hPort;
|
|
PSPCB pSPCB;
|
|
|
|
TRACE0(TEXT("--BeginJob\r\n"));
|
|
|
|
hPort = FindHandle(lpszPortName);
|
|
if (!hPort)
|
|
{
|
|
TRACE0(TEXT("--BeginJob: Bad parameter\r\n"));
|
|
return(QP_BEGIN_JOB_FAIL);
|
|
}
|
|
|
|
pSPCB = &SPCBTable[hPort];
|
|
|
|
if (pSPCB->DeviceState.bJobPresent)
|
|
{
|
|
TRACE1(TEXT("--BeginJob: Prior job (%s)\r\n"),pSPCB->DeviceState.szJobName);
|
|
return(QP_BEGIN_JOB_FAIL);
|
|
}
|
|
|
|
if (!EnterCritSem0(BEGIN_JOB_TIMEOUT))
|
|
{
|
|
return(QP_BEGIN_JOB_FAIL);
|
|
}
|
|
|
|
// open the port
|
|
if (OpenPort(hPeripheral,PORT_OWN_QP,pSPCB))
|
|
{
|
|
TRACE0(TEXT("--BeginJob: OpenPort failed\r\n"));
|
|
return(QP_BEGIN_JOB_FAIL);
|
|
}
|
|
|
|
LeaveCritSem0();
|
|
|
|
if ( lpszJobName )
|
|
{
|
|
_tcsncpy(pSPCB->DeviceState.szJobName,lpszJobName,sizeof(pSPCB->DeviceState.szJobName));
|
|
pSPCB->DeviceState.szJobName[sizeof(pSPCB->DeviceState.szJobName) - 1] = '\0';
|
|
}
|
|
else
|
|
pSPCB->DeviceState.szJobName[0] = '\0';
|
|
pSPCB->DeviceState.bJobPresent = TRUE;
|
|
pSPCB->DeviceState.nJobPage = 0;
|
|
|
|
return(hPort);
|
|
}
|
|
|
|
int WriteJob(PORTHANDLE hPort,LPCVOID lpvBuf,int cbBufLen,LPINT lpcbWrite)
|
|
{
|
|
PSPCB pSPCB;
|
|
int rv;
|
|
|
|
TRACE0(TEXT("--WriteJob\r\n"));
|
|
|
|
if (!ValidHandle(hPort))
|
|
{
|
|
return(QP_BAD_PARAMETER);
|
|
}
|
|
|
|
pSPCB = &SPCBTable[hPort];
|
|
|
|
rv = (int) WritePort(lpvBuf,cbBufLen,lpcbWrite,pSPCB);
|
|
|
|
TRACE3(TEXT("--Poll@%8u,Last = %8u,Curr = %8u\r\n"),PollRate,pSPCB->nTimeAtLastPoll,
|
|
GetTickCount());
|
|
|
|
// read device status ?
|
|
if (pSPCB->bTwoWay)
|
|
{
|
|
if (PollRate != 0 && GetTickCount() - pSPCB->nTimeAtLastPoll > PollRate)
|
|
{
|
|
PJLGetMessage(pSPCB,NULL,NULL);
|
|
pSPCB->nTimeAtLastPoll = GetTickCount();
|
|
}
|
|
else
|
|
TRACE1(TEXT("--WriteJob: Skip Poll %s\r\n"),pSPCB->szPortName);
|
|
}
|
|
|
|
#ifndef WIN32
|
|
switch (rv)
|
|
{
|
|
case RC_SUCCESS:
|
|
rv = QP_PORT_OK;
|
|
break;
|
|
case RC_CE_PTO:
|
|
rv = QP_PORT_BUSY;
|
|
break;
|
|
default:
|
|
rv = QP_PORT_ERROR;
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
return(rv);
|
|
}
|
|
|
|
int EndJob(PORTHANDLE hPort)
|
|
{
|
|
PSPCB pSPCB;
|
|
|
|
TRACE0(TEXT("--EndJob\r\n"));
|
|
|
|
if (!ValidHandle(hPort))
|
|
{
|
|
return(QP_BAD_PARAMETER);
|
|
}
|
|
|
|
pSPCB = &SPCBTable[hPort];
|
|
|
|
pSPCB->DeviceState.bJobPresent = FALSE;
|
|
pSPCB->DeviceState.bManualPaused = FALSE;
|
|
|
|
// close the port
|
|
if (ClosePort(PORT_OWN_QP,pSPCB))
|
|
{
|
|
TRACE0(TEXT("--ClosePort failed\r\n"));
|
|
return(QP_FAIL);
|
|
}
|
|
|
|
return(QP_SUCCESS);
|
|
}
|
|
|
|
int JobPause(PORTHANDLE hPort)
|
|
{
|
|
TRACE0(TEXT("--JobPause\r\n"));
|
|
|
|
if (!ValidHandle(hPort))
|
|
{
|
|
TRACE0(TEXT("--Bad parameter\r\n"));
|
|
return(QP_BAD_PARAMETER);
|
|
}
|
|
|
|
SPCBTable[hPort].DeviceState.bManualPaused = TRUE;
|
|
|
|
return(QP_SUCCESS);
|
|
}
|
|
|
|
int JobResume(PORTHANDLE hPort)
|
|
{
|
|
TRACE0(TEXT("--JobResume\r\n"));
|
|
|
|
if (!ValidHandle(hPort))
|
|
{
|
|
TRACE0(TEXT("--Bad parameter\r\n"));
|
|
return(QP_BAD_PARAMETER);
|
|
}
|
|
|
|
SPCBTable[hPort].DeviceState.bManualPaused = FALSE;
|
|
|
|
return(QP_SUCCESS);
|
|
}
|