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.
349 lines
14 KiB
349 lines
14 KiB
/*******************************************************************************
|
|
*
|
|
* (C) COPYRIGHT 2001, MICROSOFT CORP.
|
|
*
|
|
* TITLE: Root.cpp
|
|
*
|
|
* VERSION: 1.0
|
|
*
|
|
* DATE: 15 Nov, 2000
|
|
*
|
|
* DESCRIPTION:
|
|
* This file implements the helper methods for IWiaMiniDrv for the root item.
|
|
*
|
|
*******************************************************************************/
|
|
|
|
#include "pch.h"
|
|
|
|
/**************************************************************************\
|
|
* BuildRootItemProperties
|
|
*
|
|
* Create the properties for the root item.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* pWiasContext - WIA service context
|
|
*
|
|
\**************************************************************************/
|
|
|
|
HRESULT
|
|
CWiaCameraDevice::BuildRootItemProperties(
|
|
BYTE *pWiasContext
|
|
)
|
|
{
|
|
CWiaLogProc WIAS_LOGPROC(m_pIWiaLog,
|
|
WIALOG_NO_RESOURCE_ID,
|
|
WIALOG_LEVEL1,
|
|
"CWiaCameraDevice::BuildRootItemProperties");
|
|
|
|
HRESULT hr = S_OK;
|
|
|
|
//
|
|
// Create a WIA property list and allocate enough space for all
|
|
// the properties created below
|
|
//
|
|
CWiauPropertyList RootProps;
|
|
|
|
hr = RootProps.Init(50);
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
WIAS_LERROR(m_pIWiaLog,WIALOG_NO_RESOURCE_ID,("BuildRootItemProperties, initializing property list failed"));
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
// These are the WHQL required properties for cameras:
|
|
//
|
|
INT index;
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_IPA_ACCESS_RIGHTS, WIA_IPA_ACCESS_RIGHTS_STR,
|
|
WIA_PROP_READ, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, (LONG) WIA_ITEM_READ | WIA_ITEM_WRITE);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPA_FIRMWARE_VERSION, WIA_DPA_FIRMWARE_VERSION_STR,
|
|
WIA_PROP_READ, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, m_DeviceInfo.FirmwareVersion);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_PICTURES_TAKEN, WIA_DPC_PICTURES_TAKEN_STR,
|
|
WIA_PROP_READ, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, m_DeviceInfo.PicturesTaken);
|
|
|
|
#ifdef COUNT_PIC_REMAINING
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_PICTURES_REMAINING, WIA_DPC_PICTURES_REMAINING_STR,
|
|
WIA_PROP_READ, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, m_DeviceInfo.PicturesRemaining);
|
|
#endif
|
|
|
|
//
|
|
// These are WHQL optional properties
|
|
//
|
|
|
|
#if DEADCODE
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPA_DEVICE_TIME, WIA_DPA_DEVICE_TIME_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, &m_DeviceInfo.Time);
|
|
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_EXPOSURE_MODE, WIA_DPC_EXPOSURE_MODE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.ExposureMode);
|
|
FakeCamera_SetValidValues(index, pRootProperties);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_EXPOSURE_COMP, WIA_DPC_EXPOSURE_COMP_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.ExposureComp);
|
|
FakeCamera_SetValidValues(index, pRootProperties);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_EXPOSURE_TIME, WIA_DPC_EXPOSURE_TIME_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.ExposureTime);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_FNUMBER, WIA_DPC_FNUMBER_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.FNumber);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_FLASH_MODE, WIA_DPC_FLASH_MODE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.FlashMode);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_FOCUS_MODE, WIA_DPC_FOCUS_MODE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.FocusMode);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_PAN_POSITION, WIA_DPC_PAN_POSITION_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.PanPosition);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_TILT_POSITION, WIA_DPC_TILT_POSITION_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.TiltPosition);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_TIMER_MODE, WIA_DPC_TIMER_MODE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.TimerMode);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_TIMER_VALUE, WIA_DPC_TIMER_VALUE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.TimerValue);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_POWER_MODE, WIA_DPC_POWER_MODE_STR,
|
|
WIA_PROP_READ, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.PowerMode);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_BATTERY_STATUS, WIA_DPC_BATTERY_STATUS_STR,
|
|
WIA_PROP_READ, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.BatteryStatus);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_THUMB_WIDTH, WIA_DPC_THUMB_WIDTH_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.ThumbWidth);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_THUMB_HEIGHT, WIA_DPC_THUMB_HEIGHT_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.ThumbHeight);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_PICT_WIDTH, WIA_DPC_PICT_WIDTH_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.PictWidth);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_PICT_HEIGHT, WIA_DPC_PICT_HEIGHT_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.PictHeight);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_COMPRESSION_SETTING, WIA_DPC_COMPRESSION_SETTING_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.CompressionSetting);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_TIMELAPSE_INTERVAL, WIA_DPC_TIMELAPSE_INTERVAL_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.TimelapseInterval);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_BURST_INTERVAL, WIA_DPC_BURST_INTERVAL_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.BurstInterval);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_BURST_NUMBER, WIA_DPC_BURST_NUMBER_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.BurstNumber);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_EFFECT_MODE, WIA_DPC_EFFECT_MODE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.EffectMode);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_DIGITAL_ZOOM, WIA_DPC_DIGITAL_ZOOM_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.DigitalZoom);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_SHARPNESS, WIA_DPC_SHARPNESS_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.Sharpness);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_CONTRAST, WIA_DPC_CONTRAST_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.Constrast);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_CAPTURE_MODE, WIA_DPC_CAPTURE_MODE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.CaptureMode);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_CAPTURE_DELAY, WIA_DPC_CAPTURE_DELAY_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.CaptureDelay);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_EXPOSURE_INDEX, WIA_DPC_EXPOSURE_INDEX_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.ExposureIndex);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_EXPOSURE_METERING_MODE, WIA_DPC_EXPOSURE_METERING_MODE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.ExposureMeteringMode);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_FOCUS_METERING_MODE, WIA_DPC_FOCUS_METERING_MODE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.FocusMeteringMode);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_FOCUS_DISTANCE, WIA_DPC_FOCUS_DISTANCE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.FocusDistance);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_FOCAL_LENGTH, WIA_DPC_FOCAL_LENGTH_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.FocalLength);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_RGBGAIN, WIA_DPC_RGBGAIN_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.RGBGain);
|
|
|
|
hr = RootProps.DefineProperty(&index, WIA_DPC_WHITE_BALANCE, WIA_DPC_WHITE_BALANCE_STR,
|
|
WIA_PROP_RW, WIA_PROP_NONE);
|
|
if (FAILED(hr)) goto failure;
|
|
RootProps.SetCurrentValue(index, CameraStats.WhiteBalance);
|
|
|
|
#endif // DEADCODE
|
|
|
|
//
|
|
// TODO: Add other optional properties that your device supports here
|
|
//
|
|
|
|
|
|
// Last step: send all the properties to WIA
|
|
|
|
hr = RootProps.SendToWia(pWiasContext);
|
|
if (FAILED(hr))
|
|
{
|
|
WIAS_LERROR(m_pIWiaLog,WIALOG_NO_RESOURCE_ID,("BuildRootItemProperties, SendToWia failed"));
|
|
}
|
|
|
|
return hr;
|
|
|
|
//
|
|
// Any failures from DefineProperty will end up here
|
|
//
|
|
failure:
|
|
WIAS_LERROR(m_pIWiaLog,WIALOG_NO_RESOURCE_ID,("BuildRootItemProperties, DefineProperty failed"));
|
|
return hr;
|
|
}
|
|
|
|
/**************************************************************************\
|
|
* ReadRootItemProperties
|
|
*
|
|
* Update the properties for the root item.
|
|
*
|
|
* Arguments:
|
|
*
|
|
* pWiasContext - WIA service context
|
|
*
|
|
\**************************************************************************/
|
|
|
|
HRESULT
|
|
CWiaCameraDevice::ReadRootItemProperties(
|
|
BYTE *pWiasContext,
|
|
LONG NumPropSpecs,
|
|
const PROPSPEC *pPropSpecs
|
|
)
|
|
{
|
|
CWiaLogProc WIAS_LOGPROC(m_pIWiaLog,
|
|
WIALOG_NO_RESOURCE_ID,
|
|
WIALOG_LEVEL1,
|
|
"CWiaCameraDevice::ReadRootItemProperties");
|
|
HRESULT hr = S_OK;
|
|
|
|
if (!NumPropSpecs || !pPropSpecs)
|
|
{
|
|
WIAS_LERROR(m_pIWiaLog,WIALOG_NO_RESOURCE_ID,("ReadRootItemProperties, invalid arg"));
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
//
|
|
// Loop through all of the PropSpecs
|
|
//
|
|
for (int count = 0; count < NumPropSpecs; count++)
|
|
{
|
|
PROPID propId = pPropSpecs[count].propid;
|
|
|
|
switch (propId)
|
|
{
|
|
case WIA_DPC_PICTURES_TAKEN:
|
|
hr = wiasWritePropLong(pWiasContext, WIA_DPC_PICTURES_TAKEN, m_DeviceInfo.PicturesTaken);
|
|
break;
|
|
|
|
#ifdef COUNT_PIC_REMAINING
|
|
case WIA_DPC_PICTURES_REMAINING:
|
|
hr = wiasWritePropLong(pWiasContext, WIA_DPC_PICTURES_REMAINING, m_DeviceInfo.PicturesRemaining);
|
|
break;
|
|
#endif
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
WIAS_LERROR(m_pIWiaLog,WIALOG_NO_RESOURCE_ID,("ReadRootItemProperties, wiasWritePropLong failed 0x%08x", propId));
|
|
WIAS_LHRESULT(m_pIWiaLog, hr);
|
|
return hr;
|
|
}
|
|
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|