/*++ Copyright (c) 1997-1998 Microsoft Corporation Module Name: digita.h Abstract: FlashPoint Digita command language Notes: Non-portable, for use with Win32 environment. CDP == Camera Device Protocol Structure types , defined in this file are used to fill protocol buffer. It is important to keep packing option set to single byte setting. Author: Vlad Sadovsky (VladS) 11/13/1998 Environment: User Mode - Win32 Revision History: 11/13/1998 VladS Created --*/ #if !defined( _DIGITA_H_ ) #define _DIGITA_H_ #if _MSC_VER > 1000 #pragma once #endif #ifndef RC_INVOKED #include #endif // RC_INVOKED // // Include files // #include // // Local definitions // #define INT16 short #define UINT16 unsigned short typedef INT32 TINT32 ; typedef UINT32 TUINT32 ; typedef INT16 TINT16; typedef UINT16 TUINT16; typedef UINT32 TBITFLAGS; typedef BYTE TPName[4]; typedef BYTE TDOSName[16]; typedef BYTE TString[32]; // // Big-endian <-> little-endian Macro DEFINITIONS // // Camera software expects big-endian representation of numbers, so when we send // integers from x86 to it, we need to do a swap. Same applies to all integers // we receive from camera // #if defined(_X86_) || defined(_IA64_) #define LB8(b) (b) #define BL8(b) LB8(b) #define LB16(w) (((INT16)(HIBYTE(w))) | ((LOBYTE(w) << 8) & 0xFF00)) #define BL16(w) LB16(w) #define LB32(l) (((INT32)(LB16(HIWORD(l)))) | ((INT32)(LB16(LOWORD(l))) << 16)) #define BL32(l) LB32(l) #else #define LB8(b) (b) #define BL8(b) (b) #define LB16(w) (w) #define BL16(w) (w) #define LB32(l) (l) #define BL32(l) (l) #endif // // Protocol definitions // typedef struct { ULONG ulLength; // Length of the structure minus length of this field BYTE bVersion; // the version of the CDP packet CHAR cReserved[3]; // reserved SHORT shCommand; // the command SHORT shResult; // the result code } TCDPHeader; typedef struct { TCDPHeader sCDPHeader; // the header fields of the camera device protocol BYTE bData[1]; // this is the start of the data to be sent with the message } TCDP; // // Definitions // typedef enum { VTUInt = 1, VTInt = 2, VTFixed = 3, VTBool = 4, VTBitFlags = 5, VTPname = 6, VTDOSName = 7, VTString = 8, VTUIList = 9 } TValueType; typedef struct { TPName Name; TValueType Type; union { UINT fUInt; INT fInt; UINT fFixed; BOOL fBool; UINT fBitFlags; TPName fPName; TDOSName fDOSName; TString fString; } Data; //PNameValue } PNameTypeValueStruct; // // Protocol command ranges // #define CDP_CMN_HOST2CAM_MIN 0x0000 #define CDP_CMN_HOST2CAM_MAX 0x5fff #define CDP_PROD_HOST2CAM_MIN 0x6000 #define CDP_PROD_HOST2CAM_MAX 0x6FFF #define CDP_TEST_HOST2CAM_MIN 0x7000 #define CDP_TEST_HOST2CAM_MAX 0x7FFF #define CDP_RESRV_HOST2CAM_MIN 0x8000 #define CDP_RESRV_HOST2CAM_MAX 0xFFFF // // Protocol command values // typedef enum { kCDPGetProductInfo = 0x0001, kCDPGetImageSpecifications = 0x0002, kCDPGetCameraStatus = 0x0003, kCDPSetProductInfo = 0x0005, kCDPGetCameraCapabilities = 0x0010, kCDPGetCameraState = 0x0011, kCDPSetCameraState = 0x0012, kCDPGetCameraDefaults = 0x0013, kCDPSetCameraDefaults = 0x0014, kCDPRestoreCameraStates = 0x0015, kCDPGetSceneAnalysis = 0x0018, kCDPGetPowerMode = 0x0019, kCDPSetPowerMode = 0x001a, kCDPGetS1Mode = 0x001d, kCDPSetS1Mode = 0x001e, kCDPStartCapture = 0x0030, kCDPGetFileList = 0x0040, kCDPGetNewFileList = 0x0041, kCDPGetFileData = 0x0042, kCDPEraseFile = 0x0043, kCDPGetStorageStatus = 0x0044, kCDPSetFileData = 0x0047, kCDPGetFileTag = 0x0048, kCDPSetUserFileTag = 0x0049, kCDPGetClock = 0x0070, kCDPSetClock = 0x0071, kCDPGetError = 0x0078, kCDPGetInterfaceTimeout = 0x0090, kCDPSetInterfaceTimeout = 0x0091, } TCDPHostToCameraNewCommands; typedef enum { kCHNoErr = 0x0000 } TCHCommonErrorCodes; // // Properties names for product info // // Nb: defined as 4 byte-long packed string , always in lowercase // #define PI_FIRMWARE (UINT32)'fwc' #define PI_PRODUCTTYPEINFO (UINT32)'pti' #define PI_IPC (UINT32)'ipc' #define PI_CARV (UINT32)'carv' // // Public functions and types // // // GetImageSpecifications // typedef struct { // CCD Specifications TUINT32 CCDPattern; TUINT32 CCDPixelsHorz; TUINT32 CCDPixelsVert; TUINT32 CCDRingPixelsHorz; TUINT32 CCDRingPixelsVert; TUINT32 BadColumns; TUINT32 BadPixels; // Thumbnail specifications TUINT32 ThumbnailType; TUINT32 ThumbnailPixelsHorz; TUINT32 ThumbnailPixelsVert; TUINT32 ThumbnailFileSize; // Screennail specifications TUINT32 ScreennailType; TUINT32 ScreennailPixelsHorz; TUINT32 ScreennailPixelsVert; // Focus zone specifications TUINT32 FocusZoneType; TUINT32 FocusZoneNumHorz; TUINT32 FocusZoneNumVert; TUINT32 FocusZoneOriginHorz; TUINT32 FocusZoneOriginVert; TUINT32 FocusZoneSizeHorz; TUINT32 FocusZoneSizeVert; // Exposure zone specifications TUINT32 ExposureZoneType; TUINT32 ExposureZoneNumHorz; TUINT32 ExposureZoneNumVert; TUINT32 ExposureZoneOriginHorz; TUINT32 ExposureZoneOriginVert; TUINT32 ExposureZoneSizeHorz; TUINT32 ExposureZoneSizeVert; } TImageSpecifications; // // GetError // typedef struct { TUINT32 Date; TUINT32 Time; TINT32 ErrorCode; TString ErrorDescription; } TErrorData; // // GetCameraState // // // GetFileList // typedef enum { kFSDriveRAM = 1 , // internal RAM disk kFSDriveRemovable = 2 // removable disk } TDriveType; typedef struct { TUINT32 DriveNo; TString PathName; TDOSName DOSName; } TFileNameStruct; typedef struct { TUINT32 DriveNo; TString PathName; TDOSName DOSName; TUINT32 FileLength; TBITFLAGS FileStatus; } TFileItem; typedef struct { TUINT32 Offset; // Starting relative position of requested data TUINT32 Length; // Byte count of requested data TUINT32 FileSize; // Total size of the file } TPartialTag; typedef struct { TUINT32 DataSize; // Length of data returned TUINT32 Height; // Height in pixels TUINT32 Width; // Width in pixels TUINT32 Type; // Format of the data BYTE Data[1]; // Actual data } TThumbnailData; #ifndef RC_INVOKED #include #endif // RC_INVOKED #endif // _DIGITA_H_