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.
 
 
 
 
 
 

443 lines
11 KiB

/*++
Copyright (C) 2000 Microsoft Corporation
Module Name:
ptp.cpp
Abstract:
Program for testing the PTP camera library without using WIA
Author:
DavePar
Revision History:
--*/
#include <windows.h>
#include <stddef.h>
#include <tchar.h>
#include <objbase.h>
#include <assert.h>
#include <stdio.h>
#include <usbscan.h>
#include "wiatempl.h"
#include "iso15740.h"
#include "camera.h"
#include "camusb.h"
// Software Tracing goo
// {9A716C69-7A13-437c-B4EC-C6D1CAAFBCD9}
#define WPP_CONTROL_GUIDS \
WPP_DEFINE_CONTROL_GUID(Regular,(9A716C69,7A13,437c,B4EC,C6D1CAAFBCD9), \
WPP_DEFINE_BIT(Entry) \
WPP_DEFINE_BIT(Exit) \
WPP_DEFINE_BIT(Error) \
WPP_DEFINE_BIT(Unusual) \
WPP_DEFINE_BIT(Noise) \
) \
#include <ptp.tmh>
#define MAX_SIZE 255
HRESULT EventCallback(LPVOID pCallbackParam, PPTP_EVENT pEvent)
{
if (pEvent)
printf("EventCallback called, event = 0x%08x\n", pEvent->EventCode);
else
printf("EventCallback initialized\n");
return S_OK;
}
HRESULT DataCallback(LPVOID pCallbackParam, LONG lPercentComplete,
LONG lOffset, LONG lLength, BYTE **ppBuffer, LONG *plBufferSize)
{
printf("DataCallback called, %3d percent complete, %5d bytes transferred\n", lPercentComplete, lLength);
return S_OK;
}
void PrintCommands()
{
printf("Valid commands:\n");
printf(" op <#> - open handle to device named Usbscan<#>\n");
printf(" gd - get DeviceInfo from device\n");
printf(" os - OpenSession\n");
printf(" cs - CloseSession\n");
printf(" gs - GetStorageIDs\n");
printf(" gsi <id> - GetStorageInfo for StoreID <id>\n");
printf(" gon - GetNumObjects\n");
printf(" goh - GetObjectHandles\n");
printf(" goi <h> - GetObjectInfo for ObjectHandle <h>\n");
printf(" go <h> - GetObject for ObjectHandle <h>\n");
printf(" gt <h> - GetThumb for ObjectHandle <h>\n");
printf(" do <h> - DeleteObject for ObjectHandle <h>\n");
printf(" gpd <pc> - GetDevicePropDesc for PropCode <pc>\n");
printf(" rs - ResetDevice\n");
printf(" tp <f> - TakePicture in format <f>\n");
printf(" gds - GetDeviceStatus (only valid for USB)\n");
printf(" ex\n\n");
}
int __cdecl main(int argc, CHAR *argv[], CHAR *envp[])
{
WPP_INIT_TRACING(L"PTPTest");
printf("\nPTP Camera Test Program\n");
printf("Version 0.5\n");
printf("July 28, 2000\n\n");
HRESULT hr = S_OK;
BOOL bSessionOpen = FALSE;
char szCommand[MAX_SIZE];
char *szToken;
char szWhiteSpace[] = " \t";
DoTraceMessage(Noise, "Entering main function\n");
//
// Create an USB camera object
//
CPTPCamera *pCamera = new CUsbCamera;
while (true)
{
printf("Enter command: ");
if (!gets(szCommand))
{
break;
}
printf("\n");
szToken = strtok(szCommand, szWhiteSpace);
if (!szToken)
{
printf("ERROR: Invalid command\n");
PrintCommands();
continue;
}
//
// Interpret command
//
if (strcmp(szToken, "ex") == 0)
{
break;
}
if (strcmp(szToken, "help") == 0 ||
strcmp(szToken, "?") == 0)
{
PrintCommands();
continue;
}
else if (strcmp(szToken, "op") == 0)
{
szToken = strtok(NULL, szWhiteSpace);
if (!szToken)
{
printf("ERROR: Open needs a Usbscan number--look at CreateFileName registry key\n\n");
continue;
}
WCHAR scratch1[MAX_SIZE];
WCHAR scratch2[MAX_SIZE];
mbstowcs(scratch1, szToken, MAX_SIZE);
wcscpy(scratch2, L"\\\\.\\Usbscan");
wcscat(scratch2, scratch1);
printf("Opening device %S\n\n", scratch2);
hr = pCamera->Open(scratch2, EventCallback, DataCallback, NULL);
}
else if (strcmp(szToken, "gd") == 0)
{
CPtpDeviceInfo DeviceInfo;
hr = pCamera->GetDeviceInfo(&DeviceInfo);
}
else if (strcmp(szToken, "os") == 0)
{
ULONG sessionId;
szToken = strtok(NULL, szWhiteSpace);
if (!szToken)
{
printf("ERROR: OpenSession needs a session number\n\n");
continue;
}
sscanf(szToken, "%lu", &sessionId);
if (sessionId == 0)
{
printf("ERROR: OpenSession needs a non-zero session number\n\n");
continue;
}
printf("Opening session %d\n\n", sessionId);
hr = pCamera->OpenSession(sessionId);
if (SUCCEEDED(hr))
bSessionOpen = TRUE;
}
else if (strcmp(szToken, "cs") == 0)
{
printf("Closing session\n\n");
hr = pCamera->CloseSession();
}
else if (strcmp(szToken, "gs") == 0)
{
CArray32 StorageIds;
printf("Getting storage ids\n\n");
hr = pCamera->GetStorageIDs(&StorageIds);
}
else if (strcmp(szToken, "gsi") == 0)
{
ULONG StorageId;
CPtpStorageInfo StorageInfo;
szToken = strtok(NULL, szWhiteSpace);
if (!szToken)
{
printf("ERROR: GetStorageInfo needs a StorageID\n\n");
continue;
}
sscanf(szToken, "%li", &StorageId);
printf("Getting storage info for storage id 0x%08x\n\n", StorageId);
hr = pCamera->GetStorageInfo(StorageId, &StorageInfo);
}
else if (strcmp(szToken, "gon") == 0)
{
UINT NumObjects;
printf("Getting number of objects\n\n");
hr = pCamera->GetNumObjects(PTP_STORAGEID_ALL, PTP_FORMATCODE_ALL, PTP_OBJECTHANDLE_ALL, &NumObjects);
}
else if (strcmp(szToken, "goh") == 0)
{
CArray32 ObjectIds;
printf("Getting object ids\n\n");
hr = pCamera->GetObjectHandles(PTP_STORAGEID_ALL, PTP_FORMATCODE_ALL, PTP_OBJECTHANDLE_ALL, &ObjectIds);
}
else if (strcmp(szToken, "goi") == 0)
{
DWORD ObjectHandle;
CPtpObjectInfo ObjectInfo;
szToken = strtok(NULL, szWhiteSpace);
if (!szToken)
{
printf("ERROR: GetObjectInfo needs an ObjectHandle\n\n");
continue;
}
sscanf(szToken, "%li", &ObjectHandle);
printf("Getting object info for object handle 0x%08x\n\n", ObjectHandle);
hr = pCamera->GetObjectInfo(ObjectHandle, &ObjectInfo);
}
else if (strcmp(szToken, "go") == 0)
{
DWORD ObjectHandle;
szToken = strtok(NULL, szWhiteSpace);
if (!szToken)
{
printf("ERROR: GetObject needs an ObjectHandle\n\n");
continue;
}
sscanf(szToken, "%li", &ObjectHandle);
printf("Getting object for object handle 0x%08x\n\n", ObjectHandle);
UINT BufferSize = 32 * 1024;
BYTE *pBuffer = new BYTE[BufferSize];
if (!pBuffer)
{
printf("ERROR: Couldn't allocate the buffer\n\n");
continue;
}
hr = pCamera->GetObjectData(ObjectHandle, pBuffer, &BufferSize, NULL);
delete []pBuffer;
}
else if (strcmp(szToken, "gt") == 0)
{
DWORD ObjectHandle;
szToken = strtok(NULL, szWhiteSpace);
if (!szToken)
{
printf("ERROR: GetThumb needs an ObjectHandle\n\n");
continue;
}
sscanf(szToken, "%li", &ObjectHandle);
printf("Getting thumbnail for object handle 0x%08x\n\n", ObjectHandle);
UINT BufferSize = 16 * 1024;
BYTE *pBuffer = new BYTE[BufferSize];
if (!pBuffer)
{
printf("ERROR: Couldn't allocate the buffer\n\n");
continue;
}
hr = pCamera->GetThumb(ObjectHandle, pBuffer, &BufferSize);
delete []pBuffer;
}
else if (strcmp(szToken, "do") == 0)
{
DWORD ObjectHandle;
szToken = strtok(NULL, szWhiteSpace);
if (!szToken)
{
printf("ERROR: DeleteObject needs an ObjectHandle\n\n");
continue;
}
sscanf(szToken, "%li", &ObjectHandle);
printf("Deleting object for object handle 0x%08x\n\n", ObjectHandle);
hr = pCamera->DeleteObject(ObjectHandle, PTP_FORMATCODE_NOTUSED);
}
else if (strcmp(szToken, "gpd") == 0)
{
WORD PropCode;
CPtpPropDesc PropDesc;
szToken = strtok(NULL, szWhiteSpace);
if (!szToken)
{
printf("ERROR: GetDevicePropDesc needs a PropCode\n\n");
continue;
}
sscanf(szToken, "%i", &PropCode);
printf("Getting property description for prop code 0x%04x\n\n", PropCode);
hr = pCamera->GetDevicePropDesc(PropCode, &PropDesc);
}
else if (strcmp(szToken, "rs") == 0)
{
printf("Resetting device...\n");
hr = pCamera->ResetDevice();
}
else if (strcmp(szToken, "tp") == 0)
{
WORD Format;
szToken = strtok(NULL, szWhiteSpace);
if (!szToken)
{
printf("ERROR: TakePicture needs a format\n\n");
continue;
}
sscanf(szToken, "%i", &Format);
printf("Taking a picture in format 0x%04x\n\n", Format);
hr = pCamera->InitiateCapture(PTP_STORAGEID_DEFAULT, Format);
}
#ifdef DEADCODE
else if (strcmp(szToken, "gds") == 0)
{
printf("Getting device status\n\n");
USB_PTPDEVICESTATUS Status;
hr = ((CUsbCamera *) pCamera)->GetDeviceStatus(&Status);
}
#endif
else
{
printf("ERROR: Invalid command\n");
PrintCommands();
continue;
}
if (SUCCEEDED(hr))
printf("Success!!\n\n");
else
printf("FAILED\n\n");
} // while (true)
if (bSessionOpen)
{
printf("Closing session\n\n");
hr = pCamera->CloseSession();
if (SUCCEEDED(hr))
printf("Success!!\n\n");
else
printf("FAILED\n\n");
}
WPP_CLEANUP();
return 0;
}