266 lines
6.9 KiB
C++
266 lines
6.9 KiB
C++
#include "mcromgr.h"
|
|
|
|
extern VOID Trace(LPCTSTR format,...);
|
|
|
|
CMicroDriver::CMicroDriver(HANDLE hDevice, PSCANINFO pScanInfo)
|
|
{
|
|
m_hDevice = hDevice;
|
|
m_pScanInfo = pScanInfo;
|
|
m_DeviceState = STARTUP_STATE;
|
|
}
|
|
|
|
CMicroDriver::~CMicroDriver()
|
|
{
|
|
|
|
}
|
|
|
|
HRESULT CMicroDriver::_Scan(PSCANINFO pScanInfo, LONG lPhase, PBYTE pBuffer, LONG lLength, LONG *plReceived)
|
|
{
|
|
return E_FAIL;
|
|
}
|
|
|
|
HRESULT CMicroDriver::InitializeScanner()
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CMicroDriver::InitScannerDefaults(PSCANINFO pScanInfo)
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
|
|
pScanInfo->ADF = 0;
|
|
pScanInfo->TPA = 0;
|
|
pScanInfo->Endorser = 0;
|
|
pScanInfo->RawDataFormat = WIA_PACKED_PIXEL;
|
|
pScanInfo->RawPixelOrder = WIA_ORDER_BGR;
|
|
pScanInfo->bNeedDataAlignment = TRUE;
|
|
pScanInfo->SupportedCompressionType = 0;
|
|
pScanInfo->SupportedDataTypes = SUPPORT_BW|SUPPORT_GRAYSCALE|SUPPORT_COLOR;
|
|
|
|
LONG WidthPixels = 0;
|
|
LONG HeightPixels = 0;
|
|
LONG CurrentXResolution = 300;
|
|
LONG CurrentYResolution = 300;
|
|
|
|
//InquireNumber(SL_PIXELS_PER_LINE, SL_HI, &WidthPixels);
|
|
//InquireNumber(SL_LINES_PER_SCAN, SL_HI, &HeightPixels);
|
|
//InquireNumber(SL_X_RESOLUTION, SL_NOM, &XRes);
|
|
//InquireNumber(SL_Y_RESOLUTION, SL_NOM, &YRes);
|
|
|
|
pScanInfo->BedWidth = 8500; //(WidthPixels * 1000) / CurrentXResolution; // 1000's of an inch (WIA compatible unit)
|
|
pScanInfo->BedHeight = 11693; //(HeightPixels * 1000) / CurrentYResolution; // 1000's of an inch (WIA compatible unit)
|
|
|
|
pScanInfo->OpticalXResolution = 300;
|
|
pScanInfo->OpticalYResolution = 300;
|
|
|
|
pScanInfo->IntensityRange.lMin = -127;
|
|
pScanInfo->IntensityRange.lMax = 127;
|
|
pScanInfo->IntensityRange.lStep = 1;
|
|
|
|
pScanInfo->ContrastRange.lMin = -127;
|
|
pScanInfo->ContrastRange.lMax = 127;
|
|
pScanInfo->ContrastRange.lStep = 1;
|
|
|
|
/*pScanInfo->ResolutionRange.lMin = 12;
|
|
pScanInfo->ResolutionRange.lMax = 1200;
|
|
pScanInfo->ResolutionRange.lStep = 1;
|
|
*/
|
|
|
|
// Scanner settings
|
|
pScanInfo->Intensity = 32;
|
|
pScanInfo->Contrast = 12;
|
|
|
|
pScanInfo->Xresolution = CurrentXResolution;
|
|
pScanInfo->Yresolution = CurrentYResolution;
|
|
|
|
pScanInfo->Window.xPos = 0;
|
|
pScanInfo->Window.yPos = 0;
|
|
pScanInfo->Window.xExtent = (pScanInfo->Xresolution * pScanInfo->BedWidth)/1000;
|
|
pScanInfo->Window.yExtent = (pScanInfo->Yresolution * pScanInfo->BedHeight)/1000;
|
|
|
|
// Scanner options
|
|
pScanInfo->DitherPattern = 0;
|
|
pScanInfo->Negative = 0;
|
|
pScanInfo->Mirror = 0;
|
|
pScanInfo->AutoBack = 0;
|
|
pScanInfo->ColorDitherPattern = 0;
|
|
pScanInfo->ToneMap = 0;
|
|
pScanInfo->Compression = 0;
|
|
|
|
// Image Info
|
|
pScanInfo->DataType = WIA_DATA_GRAYSCALE;
|
|
pScanInfo->WidthPixels = (pScanInfo->Window.xExtent)-(pScanInfo->Window.xPos);
|
|
|
|
switch(pScanInfo->DataType) {
|
|
case WIA_DATA_THRESHOLD:
|
|
pScanInfo->PixelBits = 1;
|
|
break;
|
|
case WIA_DATA_COLOR:
|
|
pScanInfo->PixelBits = 24;
|
|
break;
|
|
case WIA_DATA_GRAYSCALE:
|
|
default:
|
|
pScanInfo->PixelBits = 8;
|
|
break;
|
|
}
|
|
|
|
pScanInfo->WidthBytes = pScanInfo->Window.xExtent * (pScanInfo->PixelBits/8);
|
|
pScanInfo->Lines = pScanInfo->Window.yExtent;
|
|
|
|
hr = S_OK;
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CMicroDriver::SetScannerSettings(PSCANINFO pScanInfo)
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
|
|
if(pScanInfo->DataType == WIA_DATA_THRESHOLD) {
|
|
pScanInfo->PixelBits = 1;
|
|
pScanInfo->WidthBytes = (pScanInfo->Window.xExtent) * (pScanInfo->PixelBits/7);
|
|
}
|
|
else if(pScanInfo->DataType == WIA_DATA_GRAYSCALE) {
|
|
pScanInfo->PixelBits = 8;
|
|
pScanInfo->WidthBytes = (pScanInfo->Window.xExtent) * (pScanInfo->PixelBits/7);
|
|
}
|
|
else {
|
|
pScanInfo->PixelBits = 24;
|
|
pScanInfo->WidthBytes = (pScanInfo->Window.xExtent) * (pScanInfo->PixelBits/7);
|
|
}
|
|
|
|
#ifdef DEBUG
|
|
Trace(TEXT("ScanInfo"));
|
|
Trace(TEXT("x res = %d"),pScanInfo->Xresolution);
|
|
Trace(TEXT("y res = %d"),pScanInfo->Yresolution);
|
|
Trace(TEXT("bpp = %d"),pScanInfo->PixelBits);
|
|
Trace(TEXT("xpos = %d"),pScanInfo->Window.xPos);
|
|
Trace(TEXT("ypos = %d"),pScanInfo->Window.yPos);
|
|
Trace(TEXT("xext = %d"),pScanInfo->Window.xExtent);
|
|
Trace(TEXT("yext = %d"),pScanInfo->Window.yExtent);
|
|
#endif
|
|
|
|
//
|
|
// send values to scanner
|
|
//
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CMicroDriver::CheckButtonStatus(PVAL pValue)
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
|
|
/*
|
|
BYTE ReadBuffer[100];
|
|
ZeroMemory( ReadBuffer, sizeof( ReadBuffer ));
|
|
|
|
GetButtonPress(ReadBuffer);
|
|
|
|
switch (ReadBuffer[8]) {
|
|
case '1':
|
|
pValue->pGuid = (GUID*) &guidScanButton;
|
|
Trace(TEXT("Scan Button Pressed!"));
|
|
break;
|
|
default:
|
|
pValue->pGuid = (GUID*) &GUID_NULL;
|
|
break;
|
|
}
|
|
*/
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CMicroDriver::GetInterruptEvent(PVAL pValue)
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CMicroDriver::GetButtonCount()
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CMicroDriver::ErrorToMicroError(LONG lError)
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
|
|
switch (lError) {
|
|
case 0:
|
|
default:
|
|
break;
|
|
}
|
|
return E_FAIL;
|
|
|
|
|
|
return hr;
|
|
}
|
|
|
|
HANDLE CMicroDriver::GetID()
|
|
{
|
|
return m_hDevice;
|
|
}
|
|
|
|
LONG CMicroDriver::CurState()
|
|
{
|
|
return m_DeviceState;
|
|
}
|
|
|
|
LONG CMicroDriver::NextState()
|
|
{
|
|
switch (m_DeviceState) {
|
|
case STARTUP_STATE:
|
|
m_DeviceState = DEVICE_INIT_STATE;
|
|
break;
|
|
case DEVICE_INIT_STATE:
|
|
m_DeviceState = WRITE_STATE;
|
|
break;
|
|
case WRITE_STATE:
|
|
m_DeviceState = VERIFY_STATE;
|
|
break;
|
|
case VERIFY_STATE:
|
|
case ACQUIRE_STATE:
|
|
default:
|
|
m_DeviceState = ACQUIRE_STATE;
|
|
break;
|
|
}
|
|
return m_DeviceState;
|
|
}
|
|
|
|
LONG CMicroDriver::PrevState()
|
|
{
|
|
switch (m_DeviceState) {
|
|
case STARTUP_STATE:
|
|
case DEVICE_INIT_STATE:
|
|
m_DeviceState = STARTUP_STATE;
|
|
break;
|
|
case WRITE_STATE:
|
|
m_DeviceState = DEVICE_INIT_STATE;
|
|
break;
|
|
case VERIFY_STATE:
|
|
m_DeviceState = WRITE_STATE;
|
|
break;
|
|
case ACQUIRE_STATE:
|
|
default:
|
|
m_DeviceState = VERIFY_STATE;
|
|
break;
|
|
}
|
|
return m_DeviceState;
|
|
}
|
|
|
|
LONG CMicroDriver::SetState(LONG NewDeviceState)
|
|
{
|
|
if(NewDeviceState < STARTUP_STATE)
|
|
m_DeviceState = STARTUP_STATE;
|
|
|
|
else if (NewDeviceState > ACQUIRE_STATE)
|
|
m_DeviceState = ACQUIRE_STATE;
|
|
else
|
|
m_DeviceState = NewDeviceState;
|
|
|
|
return m_DeviceState;
|
|
}
|