//+---------------------------------------------------------------------------- // // File: kodak.h // // Module: // // Synopsis: // // Copyright (C) 1999 Microsoft Corporation. All rights reserved. // // Author: sgasch // // Created 5 Jun 1999 // //+---------------------------------------------------------------------------- #ifndef _KODAK #define _KODAK #include "camera.h" #include "global.h" #include "serial.h" // // Status codes // #define DC210_COMMAND_COMPLETE 0x00 #define DC210_COMMAND_ACK 0xD1 #define DC210_CORRECT_PACKET 0xD2 #define DC210_COMMAND_NAK 0xE1 #define DC210_ILLEGAL_PACKET 0xE3 #define DC210_BUSY 0xF0 #define DC210_ABORT 0xE4 // // Packet codes // #define DC210_NORMAL_PACKET 0x01 #define DC210_FINAL_PACKET 0x80 #define DC210_ABORT_PACKET 0xFF #define DC210_NORMAL_RECEIVE_PACKET 0x01 // // Commands // #define DC210_SET_RESOLUTION 0x36 #define DC210_SET_FORMAT 0x37 #define DC210_SET_SPEED 0x41 #define DC210_PICTURE_DOWNLOAD 0x64 #define DC210_PICTURE_INFO 0x65 #define DC210_PICTURE_THUMBNAIL 0x66 #define DC210_SET_FLASH 0x72 #define DC210_SET_COMPRESSION 0x71 #define DC210_SET_SHUTTER_DELAY 0x74 #define DC210_SET_ZOOM 0x78 #define DC210_TAKE_PICTURE 0x7C #define DC210_ERASE 0x7B #define DC210_INITIALIZE 0x7E #define DC210_STATUS 0x7F #define DC210_RESET 0x8A #define DC210_FORMAT_MEMORY_CARD 0x95 typedef enum { battery_unknown, battery_full, battery_low, battery_empty } DC210_BATTERY_STATE; typedef enum { zoom_unknown, zoom_fully_zoomed, zoom_3, zoom_2, zoom_1, zoom_wideangle, zoom_closeup } DC210_ZOOM_STATE; typedef enum { compression_unknown, compression_none, compression_low, compression_medium, compression_high } DC210_COMPRESSION_STATE; typedef enum { flash_unknown, flash_auto, flash_fill, flash_off, flash_auto_redeye, flash_fill_redeye } DC210_FLASH_STATE; typedef enum { format_unknown, format_raw, format_jpeg, format_flashpix } DC210_FILE_FORMAT; #define DC210_MEMORY_CARD_INSERTED 0x40 #define DC210_MEMORY_CARD_WRITE_PROTECTED 0x20 #define DC210_MEMORY_CARD_ILLEGAL 0x10 #define DC210_MEMORY_CARD_FORMATTED 0x08 #define DC210_MEMORY_CARD_OPENED 0x04 class CKodakDC210 : public CCamera { friend class CKodakDC210Photo; public: CKodakDC210(char *szDevice, int iSpeed); ~CKodakDC210(void); bool Initialize(void); bool SetSpeed(int iBps); bool TakePicture(void); bool GetRawStatusData(BYTE *pData); bool GetFirmwareVersion(int *piMajor, int *piMinor); bool GetRomVersion(int *piMajor, int *piMinor); bool GetBatteryStatus(DC210_BATTERY_STATE *pState); bool IsAdapterAttached(bool *pfAttached); bool GetClock(int *piCameraClock); bool GetZoomState(DC210_ZOOM_STATE *pZoom); bool SetZoomState(DC210_ZOOM_STATE eZoom); bool GetResolution(int *piWidth, int *piHeight); bool IsFlashCharged(bool *pfCharged); bool GetFlashState(DC210_FLASH_STATE *pState); bool SetFlashState(bool fState); bool SetFlashState(DC210_FLASH_STATE eState); bool GetCompressionState(DC210_COMPRESSION_STATE *pState); bool SetCompressionState(DC210_COMPRESSION_STATE eCompression); bool IsUsingJpeg(bool *pfJPEG); bool IsUsingFlashPix(bool *pfFlashPix); bool GetPictureFormat(DC210_FILE_FORMAT *eFormat); bool SetPictureFormat(DC210_FILE_FORMAT eFormat); bool GetLifetimePictureCount(int *piPictures); bool GetLifetimeFlashCount(int *piFlashes); bool IsTimerOn(bool *pfTimer); bool IsMemoryCardInserted(bool *pfInserted); bool IsMemoryCardWriteProtected(bool *pfInserted); bool IsMemoryCardIllegal(bool *pfInserted); bool IsMemoryCardFormatted(bool *pfInserted); bool IsMemoryCardOpened(bool *pfInserted); bool GetMemoryCardBitvector(BYTE *pbBitv); bool IsUsingNTSC(bool *pfNTSC); bool IsUsingPAL(bool *pfPAL); bool GetNumberPictures(int *piNum); bool GetRemainingPicturesLowCompression(int *piNum); bool GetRemainingPicturesMedCompression(int *piNum); bool GetRemainingPicturesHighCompression(int *piNum); bool GetMemoryCardVolumeLabel(char *szLabel); bool GetIdString(char *szId); bool GetTimeValue(int *piClock); bool GetTimeString(char *pszTime); bool GetTimeMinutes(int *piMin); bool GetTimeHours(int *piHrs); bool GetTimeSeconds(int *piSec); bool GetTimeMonth(int *piMon); bool GetTimeDay(int *piDay); bool GetTimeYear(int *piYear); bool EraseAllPictures(void); bool SetResolution(int iWidth, int iHeight); bool Reset(void); bool ToggleShutterDelay(BOOL fEnable); bool SetExposureCompensationValue(float floatValue); bool FormatMemoryCard(void); bool SetIdString(char *szId); private: bool CommandComplete(void); bool GetAck(void); bool SendCommand(int bCommand, BYTE arg1, BYTE arg2, BYTE arg3, BYTE arg4); bool ReadPacket(BYTE *buf, int iPacketSize); bool SendPacket(BYTE bControl, BYTE *buf, int iLength); bool ComputeChecksum(BYTE *pbChecksum, BYTE *buf, int iSize); bool RefreshProperties(void); CSerialPort *_pSerialPort; bool _fInitialized; int _iMaxAttempts; BYTE _bRawStatusData[256]; }; #endif // _KODAK