//////////////////////////////////////////////////////////////////////
// File - CPIA.H
//
// Library for accessing the CPIA USB Web Cameras devices using
// WinDrive library.
//
// Copyrights (c) Jungo Ltd. 2000
// Written by Nir Borenshtein
//////////////////////////////////////////////////////////////////////
#ifndef _CAMERA_H_
#define _CAMERA_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "windrvr.h"
typedef struct CAMERA_STRUCT
{
HANDLE hWD;
WD_USB_DEVICE_INFO deviceInfo;
DWORD hDevice;
} CAMERA_STRUCT;
typedef struct CAMERA_STRUCT *CAMERA_HANDLE;
// Device state codes
#define LO_POWER_STATE 2
#define HI_POWER_STATE 3
#define SUSPEND_STATE 4
// Indicates which bit is used for each module on error report
#define CPIA 0
#define SYSTEM 1
#define INT_CTRL 2
#define PROCESS 3
#define USB_COM 4
#define VP_CTRL 5
#define CAPTURE 6
#define DEBUG 7
// Frame configuration
typedef enum
{
QCIF = 0, // QCIF(176x144) pixels
CIF = 1 // CIF(352x288) pixels
} FRAME_TYPE;
#define QCIF_ROW_NUM 144
#define QCIF_COL_NUM 176
#define QCIF_BUFFER_SIZE (67 + QCIF_ROW_NUM * QCIF_COL_NUM * 2 + QCIF_ROW_NUM * 3)
#define QCIF_BYTES_IN_LINE 353
#define CIF_ROW_NUM 288
#define CIF_COL_NUM 352
#define CIF_BUFFER_SIZE (67 + CIF_ROW_NUM * CIF_COL_NUM * 2 + CIF_ROW_NUM * 3)
#define CIF_BYTES_IN_LINE 705
// SubSample format
typedef enum
{
SS_420 = 0,
SS_422 = 1
} SUB_SAMPLE;
// Color parameters
#define BRIGHTNESS 50 // 0 to 100
#define CONTRAST 50 // 0 to 100
#define SATURATION 50 // 0 to 100
typedef struct
{
FRAME_TYPE frameType;
DWORD dwBuffSize;
DWORD dwBytesInLine;
int frameColNum;
int frameRowNum;
SUB_SAMPLE subSample;
int uniqueId;
} FRAME_INFO;
// CPIA function declaretion
BOOL GrabFrame(PVOID pBuffer, FRAME_INFO frameInfo, BOOL first_time, BOOL last_time);
void GotoLoPower(CAMERA_HANDLE hCAMERA);
void GotoSuspend(CAMERA_HANDLE hCAMERA);
BOOL IsCamHiPwr(CAMERA_HANDLE hCAMERA);
void PrintErrMsg(BYTE rslt, char *errStr);
BOOL IsCmdOrFatalError(CAMERA_HANDLE hCAMERA);
DWORD SetSetupPacket(PVOID pBuffer, DWORD dwBytes, char *strVal);
int SetHexChar(int ch);
BOOL ConvertYUV2RGB(PVOID pYCrCb_Buffer, BYTE *pBGR_Buffer, FRAME_INFO frameInfo);
void YUV2RGB_Calc(BYTE Y, BYTE Cb, BYTE Cr, PBYTE buffer);
BYTE CheckRGBVal(double val);
void StoreFrameOnFile(PVOID pBuffer, DWORD dwBytes, char *fileName);
// WinDrive function and constant declaretion for CPIA devices
enum { CAMERA_DEFAULT_VENDOR_ID = 0x0553 };
enum { CAMERA_DEFAULT_PRODUCT_ID = 0x0002 };
enum { CAMERA_DEFAULT_CONFIG = 0 };
enum { CAMERA_DEFAULT_INTERFACE = 1 };
enum { CAMERA_DEFAULT_ALTERNATE = 3 };
// This string is set to an error message, if one occurs
extern CHAR CAMERA_ErrorString[];
DWORD CAMERA_CountDevices (DWORD dwVendorID, DWORD dwProductID);
CAMERA_HANDLE CAMERA_Open(DWORD uniqueId, DWORD configIndex, DWORD dwInterface, DWORD dwAlternate);
void CAMERA_Close(CAMERA_HANDLE hCAMERA);
void CAMERA_GetDeviceInfo(CAMERA_HANDLE hCAMERA, WD_USB_DEVICE_INFO *pDevInfo);
DWORD CAMERA_ReadPipe00(CAMERA_HANDLE hCAMERA, PVOID pBuffer, DWORD dwSize, CHAR setupPacket[8]);
DWORD CAMERA_WritePipe00(CAMERA_HANDLE hCAMERA, PVOID pBuffer, DWORD dwSize, CHAR setupPacket[8]);
BOOL CAMERA_ReadPipe81(CAMERA_HANDLE hCAMERA, PVOID pBuffer, DWORD dwSize, DWORD *pdwTransfered);
CAMERA_HANDLE CAMERA_LocateAndOpenDevice(DWORD uniqueId);
#ifdef __cplusplus
}
#endif
#endif