Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

318 lines
11 KiB

// devprop.cpp : Implementation of CDeviceProperty
#include "pch.h"
#include "wiafb.h"
#include "devprop.h"
/////////////////////////////////////////////////////////////////////////////
// CDeviceProperty
STDMETHODIMP CDeviceProperty::SetCurrentValue(LONG lValueID, VARIANT Value)
{
switch(lValueID){
case XRESOLUTION_ID:
m_pScannerSettings->CurrentXResolution = Value.lVal;
break;
case YRESOLUTION_ID:
m_pScannerSettings->CurrentYResolution = Value.lVal;
break;
case XPOS_ID:
m_pScannerSettings->CurrentXPos = Value.lVal;
break;
case YPOS_ID:
m_pScannerSettings->CurrentYPos = Value.lVal;
break;
case XEXT_ID:
m_pScannerSettings->CurrentXExtent = Value.lVal;
break;
case YEXT_ID:
m_pScannerSettings->CurrentYExtent = Value.lVal;
break;
case BRIGHTNESS_ID:
m_pScannerSettings->CurrentBrightness = Value.lVal;
break;
case CONTRAST_ID:
m_pScannerSettings->CurrentContrast = Value.lVal;
break;
case DATA_TYPE_ID:
m_pScannerSettings->CurrentDataType = (LONG)Value.iVal;
break;
case BIT_DEPTH_ID:
m_pScannerSettings->CurrentBitDepth = (LONG)Value.iVal;
break;
case NEGATIVE_ID:
m_pScannerSettings->bNegative = (BOOL)Value.boolVal;
break;
case PIXEL_PACKING_ID:
m_pScannerSettings->RawPixelPackingOrder = (LONG)Value.iVal;
break;
case PIXEL_FORMAT_ID:
m_pScannerSettings->RawPixelFormat = (LONG)Value.iVal;
break;
case DATA_ALIGN_ID:
m_pScannerSettings->RawDataAlignment = (LONG)Value.iVal;
break;
case BED_WIDTH_ID:
m_pScannerSettings->BedWidth = Value.lVal;
break;
case BED_HEIGHT_ID:
m_pScannerSettings->BedHeight = Value.lVal;
break;
case XOPTICAL_ID:
m_pScannerSettings->XOpticalResolution = Value.lVal;
break;
case YOPTICAL_ID:
m_pScannerSettings->YOpticalResolution = Value.lVal;
break;
case ADF_ID:
m_pScannerSettings->ADFSupport = Value.lVal;
break;
case TPA_ID:
m_pScannerSettings->TPASupport = Value.lVal;
break;
case ADF_WIDTH_ID:
m_pScannerSettings->FeederWidth = Value.lVal;
break;
case ADF_HEIGHT_ID:
m_pScannerSettings->FeederHeight = Value.lVal;
break;
case ADF_VJUSTIFY_ID:
m_pScannerSettings->VFeederJustification = Value.lVal;
break;
case ADF_HJUSTIFY_ID:
m_pScannerSettings->HFeederJustification = Value.lVal;
break;
case ADF_MAX_PAGES_ID:
m_pScannerSettings->MaxADFPageCapacity = Value.lVal;
break;
case FIRMWARE_VER_ID:
//lstrcpy(m_pScannerSettings->FirmwareVersion,Value.cVal);
break;
default:
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CDeviceProperty::GetCurrentValue(LONG lValueID, VARIANT *pvValue)
{
// default to LONG type
pvValue->vt = VT_I4;
switch(lValueID){
case XRESOLUTION_ID:
pvValue->lVal = m_pScannerSettings->CurrentXResolution;
break;
case YRESOLUTION_ID:
pvValue->lVal = m_pScannerSettings->CurrentYResolution;
break;
case XPOS_ID:
pvValue->lVal = m_pScannerSettings->CurrentXPos;
break;
case YPOS_ID:
pvValue->lVal = m_pScannerSettings->CurrentYPos;
break;
case XEXT_ID:
pvValue->lVal = m_pScannerSettings->CurrentXExtent;
break;
case YEXT_ID:
pvValue->lVal = m_pScannerSettings->CurrentYExtent;
break;
case BRIGHTNESS_ID:
pvValue->lVal = m_pScannerSettings->CurrentBrightness;
break;
case CONTRAST_ID:
pvValue->lVal = m_pScannerSettings->CurrentContrast;
break;
case DATA_TYPE_ID:
pvValue->vt = VT_I2;
pvValue->iVal = (INT)m_pScannerSettings->CurrentDataType;
break;
case BIT_DEPTH_ID:
pvValue->vt = VT_I2;
pvValue->iVal = (INT)m_pScannerSettings->CurrentBitDepth;
break;
case NEGATIVE_ID:
pvValue->lVal = (LONG)m_pScannerSettings->bNegative;
break;
case PIXEL_PACKING_ID:
pvValue->lVal = m_pScannerSettings->RawPixelPackingOrder;
break;
case PIXEL_FORMAT_ID:
pvValue->lVal = m_pScannerSettings->RawPixelFormat;
break;
case DATA_ALIGN_ID:
pvValue->lVal = m_pScannerSettings->RawDataAlignment;
break;
case BED_WIDTH_ID:
pvValue->lVal = m_pScannerSettings->BedWidth;
break;
case BED_HEIGHT_ID:
pvValue->lVal = m_pScannerSettings->BedHeight;
break;
case XOPTICAL_ID:
pvValue->lVal = m_pScannerSettings->XOpticalResolution;
break;
case YOPTICAL_ID:
pvValue->lVal = m_pScannerSettings->YOpticalResolution;
break;
case ADF_ID:
pvValue->lVal = m_pScannerSettings->ADFSupport;
break;
case TPA_ID:
pvValue->lVal = m_pScannerSettings->TPASupport;
break;
case ADF_WIDTH_ID:
pvValue->lVal = m_pScannerSettings->FeederWidth;
break;
case ADF_HEIGHT_ID:
pvValue->lVal = m_pScannerSettings->FeederHeight;
break;
case ADF_VJUSTIFY_ID:
pvValue->lVal = m_pScannerSettings->VFeederJustification;
break;
case ADF_HJUSTIFY_ID:
pvValue->lVal = m_pScannerSettings->HFeederJustification;
break;
case ADF_MAX_PAGES_ID:
pvValue->lVal = m_pScannerSettings->MaxADFPageCapacity;
break;
case FIRMWARE_VER_ID:
//lstrcpy(m_pScannerSettings->FirmwareVersion,Value.cVal);
break;
default:
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CDeviceProperty::SetValidRange(LONG lValueID, LONG lMin, LONG lMax, LONG lNom, LONG lInc)
{
switch(lValueID){
case XRESOLUTION_ID:
m_pScannerSettings->XSupportedResolutionsRange.lMax = lMax;
m_pScannerSettings->XSupportedResolutionsRange.lMin = lMin;
m_pScannerSettings->XSupportedResolutionsRange.lNom = lNom;
m_pScannerSettings->XSupportedResolutionsRange.lStep = lInc;
break;
case YRESOLUTION_ID:
m_pScannerSettings->YSupportedResolutionsRange.lMax = lMax;
m_pScannerSettings->YSupportedResolutionsRange.lMin = lMin;
m_pScannerSettings->YSupportedResolutionsRange.lNom = lNom;
m_pScannerSettings->YSupportedResolutionsRange.lStep = lInc;
break;
case XPOS_ID:
m_pScannerSettings->XPosRange.lMax = lMax;
m_pScannerSettings->XPosRange.lMin = lMin;
m_pScannerSettings->XPosRange.lNom = lNom;
m_pScannerSettings->XPosRange.lStep = lInc;
break;
case YPOS_ID:
m_pScannerSettings->YPosRange.lMax = lMax;
m_pScannerSettings->YPosRange.lMin = lMin;
m_pScannerSettings->YPosRange.lNom = lNom;
m_pScannerSettings->YPosRange.lStep = lInc;
break;
case XEXT_ID:
m_pScannerSettings->XExtentsRange.lMax = lMax;
m_pScannerSettings->XExtentsRange.lMin = lMin;
m_pScannerSettings->XExtentsRange.lNom = lNom;
m_pScannerSettings->XExtentsRange.lStep = lInc;
break;
case YEXT_ID:
m_pScannerSettings->YExtentsRange.lMax = lMax;
m_pScannerSettings->YExtentsRange.lMin = lMin;
m_pScannerSettings->YExtentsRange.lNom = lNom;
m_pScannerSettings->YExtentsRange.lStep = lInc;
break;
case BRIGHTNESS_ID:
m_pScannerSettings->BrightnessRange.lMax = lMax;
m_pScannerSettings->BrightnessRange.lMin = lMin;
m_pScannerSettings->BrightnessRange.lNom = lNom;
m_pScannerSettings->BrightnessRange.lStep = lInc;
break;
case CONTRAST_ID:
m_pScannerSettings->ContrastRange.lMax = lMax;
m_pScannerSettings->ContrastRange.lMin = lMin;
m_pScannerSettings->ContrastRange.lNom = lNom;
m_pScannerSettings->ContrastRange.lStep = lInc;
break;
default:
return E_FAIL;
}
return S_OK;
}
STDMETHODIMP CDeviceProperty::SetValidList(LONG lValueID, VARIANT Value)
{
HRESULT hr = S_OK;
INT iNumValues = 0;
INT index = 1;
LONG lLBound = 0;
LONG lUBound = 0;
VARIANT *pVariant = NULL;
//
// incoming, array of VARIANTS:
// use Value to get actual VARIANT Array
//
VARIANTARG *pVariantArg = Value.pvarVal;
if(SafeArrayGetDim(pVariantArg->parray) != 1){
return E_INVALIDARG;
}
//
// get upper bounds of array
//
hr = SafeArrayGetUBound(pVariantArg->parray, 1, (long *)&lUBound);
hr = SafeArrayAccessData(pVariantArg->parray, (void**)&pVariant);
if (SUCCEEDED(hr)) {
iNumValues = lUBound + 1;
switch (lValueID) {
case XRESOLUTION_ID:
m_pScannerSettings->XSupportedResolutionsList = (PLONG)LocalAlloc(LPTR,(sizeof(LONG) * iNumValues));
if (m_pScannerSettings->XSupportedResolutionsList) {
m_pScannerSettings->XSupportedResolutionsList[0] = iNumValues;
for (index = 0; index < iNumValues; index++) {
m_pScannerSettings->XSupportedResolutionsList[index+1] = pVariant[index].iVal;
}
}
break;
case YRESOLUTION_ID:
m_pScannerSettings->YSupportedResolutionsList = (PLONG)LocalAlloc(LPTR,(sizeof(LONG) * iNumValues));
if (m_pScannerSettings->YSupportedResolutionsList) {
m_pScannerSettings->YSupportedResolutionsList[0] = iNumValues;
for (index = 0; index < iNumValues; index++) {
m_pScannerSettings->YSupportedResolutionsList[index+1] = pVariant[index].iVal;
}
}
break;
case DATA_TYPE_ID:
m_pScannerSettings->SupportedDataTypesList = (PLONG)LocalAlloc(LPTR,(sizeof(LONG) * iNumValues));
if (m_pScannerSettings->SupportedDataTypesList) {
m_pScannerSettings->SupportedDataTypesList[0] = iNumValues;
for (index = 0; index < iNumValues; index++) {
m_pScannerSettings->SupportedDataTypesList[index+1] = pVariant[index].iVal;
}
}
break;
default:
hr = E_FAIL;
break;
}
SafeArrayUnaccessData(pVariantArg->parray);
}
return hr;
}
STDMETHODIMP CDeviceProperty::TestCall()
{
::MessageBox(NULL,TEXT("Test CALL"),TEXT("Test CALL"),MB_OK);
return S_OK;
}