/*
     File:       ICAApplication.h
 
     Contains:   General purpose Image Capture definitions
 
     Version:    QuickTime 7.3
 
     Copyright:  (c) 2007 (c) 2000-2001 by Apple Computer, Inc., all rights reserved.
 
     Bugs?:      For bug reports, consult the following page on
                 the World Wide Web:
 
                     http://developer.apple.com/bugreporter/
 
*/
#ifndef __ICAAPPLICATION__
#define __ICAAPPLICATION__

#ifndef __MACTYPES__
#include <MacTypes.h>
#endif

#ifndef __FILES__
#include <Files.h>
#endif

#ifndef __CFDICTIONARY__
#include <CFDictionary.h>
#endif



#if PRAGMA_ONCE
#pragma once
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if PRAGMA_IMPORT
#pragma import on
#endif

#if PRAGMA_STRUCT_ALIGN
    #pragma options align=mac68k
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(push, 2)
#elif PRAGMA_STRUCT_PACK
    #pragma pack(2)
#endif

typedef struct OpaqueICAObject*         ICAObject;
typedef struct OpaqueICAProperty*       ICAProperty;
typedef struct OpaqueICAConnectionID*   ICAConnectionID;
typedef struct OpaqueICAEventDataCookie*  ICAEventDataCookie;
typedef struct OpaqueICAScannerSessionID*  ICAScannerSessionID;
/*
--------------- Defines --------------- 
*/
/* Error codes (Image Capture range = -9900...-9949)*/
enum {
  kICACommunicationErr          = -9900,
  kICADeviceNotFoundErr         = -9901,
  kICADeviceNotOpenErr          = -9902,
  kICAFileCorruptedErr          = -9903,
  kICAIOPendingErr              = -9904,
  kICAInvalidObjectErr          = -9905,
  kICAInvalidPropertyErr        = -9906,
  kICAIndexOutOfRangeErr        = -9907,
  kICAPropertyTypeNotFoundErr   = -9908
};

/* ICAObject types and subtypes */
enum {
  kICADevice                    = FOUR_CHAR_CODE('icdv'), /* Also creator of device library files */
  kICADeviceCamera              = FOUR_CHAR_CODE('cmra'), /* Also file type of device library files */
  kICADeviceScanner             = FOUR_CHAR_CODE('scan'), /* Also file type of device library files */
  kICADeviceMFP                 = FOUR_CHAR_CODE('mfp '), /* Also file type of device library files */
  kICAList                      = FOUR_CHAR_CODE('objl'),
  kICADirectory                 = FOUR_CHAR_CODE('dire'),
  kICAFile                      = FOUR_CHAR_CODE('file'),
  kICAFileImage                 = FOUR_CHAR_CODE('imag'),
  kICAFileMovie                 = FOUR_CHAR_CODE('moov'),
  kICAFileAudio                 = FOUR_CHAR_CODE('audo'),
  kICAFileFirmware              = FOUR_CHAR_CODE('firm'),
  kICAFileOther                 = FOUR_CHAR_CODE('othe')
};

/* ICAProperties */
enum {
  kICAProperty                  = FOUR_CHAR_CODE('prop'), /* */
                                        /*    file properties */
                                        /* */
                                        /* for images, refer to 'Digital Still Camera Image File Format Standard' Exif Version 2.1 section 2.6.4. and 2.6.5.*/
  kICAPropertyImageWidth        = FOUR_CHAR_CODE('0100'), /* UInt32 */
  kICAPropertyImageHeight       = FOUR_CHAR_CODE('0101'), /* UInt32 */
  kICAPropertyImageBitDepth     = FOUR_CHAR_CODE('0102'), /* UInt32 */
  kICAPropertyImageDPI          = FOUR_CHAR_CODE('011A'), /* UInt32 */
  kICAPropertyImageExposureTime = FOUR_CHAR_CODE('829A'),
  kICAPropertyImageFNumber      = FOUR_CHAR_CODE('829D'),
  kICAPropertyImageDateOriginal = FOUR_CHAR_CODE('9003'), /* null terminated string (YYYYMMDDThhmmss.s) */
  kICAPropertyImageDateDigitized = FOUR_CHAR_CODE('9004'), /* null terminated string (YYYYMMDDThhmmss.s) */
  kICAPropertyImageShutterSpeed = FOUR_CHAR_CODE('9201'), /* */
  kICAPropertyImageAperture     = FOUR_CHAR_CODE('9202'), /* */
  kICAPropertyImageFlash        = FOUR_CHAR_CODE('9209'), /* UInt16*/
  kICAPropertyColorSpace        = FOUR_CHAR_CODE('A001'), /* UInt16*/
  kICAPropertyImageFilename     = FOUR_CHAR_CODE('ifil'), /* null terminated string */
  kICAPropertyImageSize         = FOUR_CHAR_CODE('isiz'), /* UInt32 */
  kICAPropertyImageData         = FOUR_CHAR_CODE('idat'), /* void * */
  kICAPropertyImageThumbnail    = FOUR_CHAR_CODE('thum'), /* void * */
  kICAPropertyColorSyncProfile  = FOUR_CHAR_CODE('prof')
};

/* Messages */
enum {
  kICAMessageConnect            = FOUR_CHAR_CODE('open'),
  kICAMessageDisconnect         = FOUR_CHAR_CODE('clos'),
  kICAMessageReset              = FOUR_CHAR_CODE('rese'),
  kICAMessageCheckDevice        = FOUR_CHAR_CODE('chkd')
};


/* Data type definitions, mapped to AppleEvent types */
enum {
  kICATypeUInt16                = FOUR_CHAR_CODE('ui16'), /* UInt16 */
  kICATypeUInt32                = FOUR_CHAR_CODE('ui32'), /* UInt32 */
  kICATypeUInt64                = FOUR_CHAR_CODE('ui64'), /* UInt64 */
  kICATypeSInt16                = FOUR_CHAR_CODE('si16'), /* SInt16 */
  kICATypeSInt32                = FOUR_CHAR_CODE('si32'), /* SInt32 */
  kICATypeSInt64                = FOUR_CHAR_CODE('si64'), /* SInt64 */
  kICATypeFixed                 = FOUR_CHAR_CODE('sing'), /* typeIEEE32BitFloatingPoint */
  kICATypeBoolean               = FOUR_CHAR_CODE('bool'), /* typeBoolean */
  kICATypeString                = FOUR_CHAR_CODE('TEXT'), /* typeChar */
  kICATypeData                  = FOUR_CHAR_CODE('data'), /* void * */
  kICATypeThumbnail             = FOUR_CHAR_CODE('thum') /* ICAThumbnail*/
};


/* Flags for PropertyInfo flag element */
enum {
  kICAFlagReadWriteAccess       = 1L << 0,
  kICAFlagReadAccess            = 1L << 1
};



/* Notification types (Refer to section 12.4 of PTP spec) */
enum {
  kICAEventCancelTransaction    = FOUR_CHAR_CODE('ecnt'),
  kICAEventObjectAdded          = FOUR_CHAR_CODE('eoba'),
  kICAEventObjectRemoved        = FOUR_CHAR_CODE('eobr'),
  kICAEventStoreAdded           = FOUR_CHAR_CODE('esta'),
  kICAEventStoreRemoved         = FOUR_CHAR_CODE('estr'),
  kICAEventDeviceAdded          = FOUR_CHAR_CODE('edea'),
  kICAEventDeviceRemoved        = FOUR_CHAR_CODE('eder'),
  kICAEventDevicePropChanged    = FOUR_CHAR_CODE('edpc'),
  kICAEventObjectInfoChanged    = FOUR_CHAR_CODE('eoic'),
  kICAEventDeviceInfoChanged    = FOUR_CHAR_CODE('edic'),
  kICAEventRequestObjectTransfer = FOUR_CHAR_CODE('erot'),
  kICAEventStoreFull            = FOUR_CHAR_CODE('estf'),
  kICAEventDeviceReset          = FOUR_CHAR_CODE('edvr'),
  kICAEventStorageInfoChanged   = FOUR_CHAR_CODE('esic'),
  kICAEventCaptureComplete      = FOUR_CHAR_CODE('ecpc'),
  kICAEventUnreportedStatus     = FOUR_CHAR_CODE('eurs')
};


/* Used for partial reads via ICAGetPropertyData */
enum {
  kICAStartAtBeginning          = 0,
  kICAEntireLength              = -1
};

/* ICADownloadFile flags */
enum {
  kDeleteAfterDownload          = 0x00000001,
  kCreateCustomIcon             = 0x00000002,
  kAddMetaDataToFinderComment   = 0x00000004,
  kAdjustCreationDate           = 0x00000008,
  kSetFileTypeAndCreator        = 0x00000010,
  kEmbedColorSyncProfile        = 0x00000020,
  kRotateImage                  = 0x00000040
};

/* extended notification */
enum {
  kExtendedNotificationPB       = FOUR_CHAR_CODE('extd'),
  kMessageGetEventData          = FOUR_CHAR_CODE('mged'),
  kEventClassPTPStandard        = FOUR_CHAR_CODE('PTPs'),
  kEventClassPTPVendor          = FOUR_CHAR_CODE('PTPv')
};

/*
--------------- Structures --------------- 
*/
struct ICAObjectInfo {
  OSType              objectType;             /* i.e. kICAFile*/
  OSType              objectSubtype;          /* i.e. kICAFileImage  */
};
typedef struct ICAObjectInfo            ICAObjectInfo;
 
 
struct ICAPropertyInfo {
  OSType              propertyType;
  OSType              dataType;
  UInt32              dataSize;
  UInt32              dataFlags;
};
typedef struct ICAPropertyInfo          ICAPropertyInfo;
 
 
struct ICAMessage {
  OSType              messageType;            /* <--  i.e. kICAMessageCameraCaptureNewImage */
  UInt32              startByte;              /* <-- */
  void *              dataPtr;                /* <-- */
  UInt32              dataSize;               /* <-- */
  OSType              dataType;               /* <-- */
};
typedef struct ICAMessage               ICAMessage;
 
 
struct ICAThumbnail {
  UInt32              width;
  UInt32              height;
  UInt32              dataSize;
  UInt8               data[1];                /* 8-bit RGB data (RGBRGBRGB...)*/
};
typedef struct ICAThumbnail             ICAThumbnail;
enum {
  kICAPBVersion                 = 0x00010000
};

/* 
--------------- Completion Procs --------------- 
*/
/*
   
   NOTE: the parameter for the completion proc (ICAHeader*) has to be casted to the appropriate type
   e.g. (ICAGetChildCountPB*), ...
   
*/

typedef struct ICAHeader                ICAHeader;
typedef CALLBACK_API_C( void , ICACompletion )(ICAHeader * pb);
/* 
--------------- ICAHeader --------------- 
*/
 
 
struct ICAHeader {
  OSErr               err;                    /* --> */
  UInt32              refcon;                 /* <-- */
};

/*
--------------- Object parameter blocks --------------- 
*/
 
 
struct ICAGetChildCountPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  UInt32              count;                  /* --> */
};
typedef struct ICAGetChildCountPB       ICAGetChildCountPB;
 
 
struct ICAGetNthChildPB {
  ICAHeader           header;
  ICAObject           parentObject;           /* <-- */
  UInt32              index;                  /* <-- zero based */
  ICAObject           childObject;            /* --> */
  ICAObjectInfo       childInfo;              /* --> */
};
typedef struct ICAGetNthChildPB         ICAGetNthChildPB;
 
 
struct ICAGetObjectInfoPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  ICAObjectInfo       objectInfo;             /* --> */
};
typedef struct ICAGetObjectInfoPB       ICAGetObjectInfoPB;
 
 
struct ICAGetParentOfObjectPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  ICAObject           parentObject;           /* --> */
  ICAObjectInfo       parentInfo;             /* --> */
};
typedef struct ICAGetParentOfObjectPB   ICAGetParentOfObjectPB;
 
 
struct ICAGetRootOfObjectPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  ICAObject           rootObject;             /* --> */
  ICAObjectInfo       rootInfo;               /* --> */
};
typedef struct ICAGetRootOfObjectPB     ICAGetRootOfObjectPB;
 
 
struct ICAGetObjectRefConPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  UInt32              objectRefCon;           /* --> */
};
typedef struct ICAGetObjectRefConPB     ICAGetObjectRefConPB;
 
 
struct ICASetObjectRefConPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  UInt32              objectRefCon;           /* <-- */
};
typedef struct ICASetObjectRefConPB     ICASetObjectRefConPB;
/*
--------------- Property parameter blocks --------------- 
*/
 
 
struct ICAGetPropertyCountPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  UInt32              count;                  /* --> */
};
typedef struct ICAGetPropertyCountPB    ICAGetPropertyCountPB;
 
 
struct ICAGetNthPropertyPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  UInt32              index;                  /* <-- zero based */
  ICAProperty         property;               /* --> */
  ICAPropertyInfo     propertyInfo;           /* --> */
};
typedef struct ICAGetNthPropertyPB      ICAGetNthPropertyPB;
 
 
struct ICAGetPropertyByTypePB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  OSType              propertyType;           /* <-- */
  ICAProperty         property;               /* --> */
  ICAPropertyInfo     propertyInfo;           /* --> */
};
typedef struct ICAGetPropertyByTypePB   ICAGetPropertyByTypePB;
 
 
struct ICAGetPropertyInfoPB {
  ICAHeader           header;
  ICAProperty         property;               /* <-- */
  ICAPropertyInfo     propertyInfo;           /* --> */
};
typedef struct ICAGetPropertyInfoPB     ICAGetPropertyInfoPB;
 
 
struct ICAGetPropertyDataPB {
  ICAHeader           header;
  ICAProperty         property;               /* <-- */
  UInt32              startByte;              /* <-- */
  UInt32              requestedSize;          /* <-- */
  void *              dataPtr;                /* <-> */
  UInt32              actualSize;             /* --> */
  OSType              dataType;               /* --> */
};
typedef struct ICAGetPropertyDataPB     ICAGetPropertyDataPB;
 
 
struct ICASetPropertyDataPB {
  ICAHeader           header;
  ICAProperty         property;               /* <-- */
  UInt32              startByte;              /* <-- */
  void *              dataPtr;                /* <-- */
  UInt32              dataSize;               /* <-- */
  OSType              dataType;               /* <-- */
};
typedef struct ICASetPropertyDataPB     ICASetPropertyDataPB;
 
 
struct ICAGetParentOfPropertyPB {
  ICAHeader           header;
  ICAProperty         property;               /* <-- */
  ICAObject           parentObject;           /* --> */
  ICAObjectInfo       parentInfo;             /* --> */
};
typedef struct ICAGetParentOfPropertyPB ICAGetParentOfPropertyPB;
 
 
struct ICAGetRootOfPropertyPB {
  ICAHeader           header;
  ICAProperty         property;               /* <-- */
  ICAObject           rootObject;             /* --> */
  ICAObjectInfo       rootInfo;               /* --> */
};
typedef struct ICAGetRootOfPropertyPB   ICAGetRootOfPropertyPB;
 
 
struct ICAGetPropertyRefConPB {
  ICAHeader           header;
  ICAProperty         property;               /* <-- */
  UInt32              propertyRefCon;         /* --> */
};
typedef struct ICAGetPropertyRefConPB   ICAGetPropertyRefConPB;
 
 
struct ICASetPropertyRefConPB {
  ICAHeader           header;
  ICAProperty         property;               /* <-- */
  UInt32              propertyRefCon;         /* <-- */
};
typedef struct ICASetPropertyRefConPB   ICASetPropertyRefConPB;
/*
--------------- Device parameter blocks --------------- 
*/
 
 
struct ICAGetDeviceListPB {
  ICAHeader           header;
  ICAObject           object;                 /* --> */
};
typedef struct ICAGetDeviceListPB       ICAGetDeviceListPB;
 
 
struct ICAObjectSendMessagePB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  ICAMessage          message;                /* <-- */
  UInt32              result;                 /* --> message specific result*/
};
typedef struct ICAObjectSendMessagePB   ICAObjectSendMessagePB;
 
 
struct ICARegisterEventNotificationPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-> */
  OSType              notifyType;             /* <-> */
  ICACompletion       notifyProc;             /* <-- */
};
typedef struct ICARegisterEventNotificationPB ICARegisterEventNotificationPB;
 
 
struct ICAExtendedRegisterEventNotificationPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-> */
  OSType              extd;                   /* <-- */
  ICACompletion       notifyProc;             /* <-- */

  UInt32              rawEventType;           /* -->*/
  OSType              eventType;              /* <->*/
  OSType              eventClass;             /* -->*/
  UInt32              eventDataSize;          /* -->*/
  ICAEventDataCookie  eventDataCookie;        /* -->*/
  ICAObject           deviceObject;           /* -->*/
};
typedef struct ICAExtendedRegisterEventNotificationPB ICAExtendedRegisterEventNotificationPB;
 
 
struct ICADownloadFilePB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  FSRef *             dirFSRef;               /* <-- */
  UInt32              flags;                  /* <-- */
  OSType              fileType;               /* <-- */
  OSType              fileCreator;            /* <-- */
  Fixed               rotationAngle;          /* <-- */
  FSRef *             fileFSRef;              /* --> can be NULL*/
};
typedef struct ICADownloadFilePB        ICADownloadFilePB;
 
 
struct ICACopyObjectPropertyDictionaryPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  CFDictionaryRef *   theDict;                /* --> */
};
typedef struct ICACopyObjectPropertyDictionaryPB ICACopyObjectPropertyDictionaryPB;
/*
   
   NOTE: for all APIs - pass NULL as completion parameter to make a synchronous call 
   
*/
/*
--------------- Object functions --------------- 
*/

/*
 *  ICAGetChildCount()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetChildCount(
  ICAGetChildCountPB *  pb,
  ICACompletion         completion);      /* can be NULL */


/*
 *  ICAGetNthChild()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetNthChild(
  ICAGetNthChildPB *  pb,
  ICACompletion       completion);      /* can be NULL */


/*
 *  ICAGetObjectInfo()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetObjectInfo(
  ICAGetObjectInfoPB *  pb,
  ICACompletion         completion);      /* can be NULL */


/*
 *  ICAGetParentOfObject()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetParentOfObject(
  ICAGetParentOfObjectPB *  pb,
  ICACompletion             completion);      /* can be NULL */


/*
 *  ICAGetRootOfObject()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetRootOfObject(
  ICAGetRootOfObjectPB *  pb,
  ICACompletion           completion);      /* can be NULL */


/*
 *  ICAGetObjectRefCon()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetObjectRefCon(
  ICAGetObjectRefConPB *  pb,
  ICACompletion           completion);      /* can be NULL */


/*
 *  ICASetObjectRefCon()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICASetObjectRefCon(
  ICASetObjectRefConPB *  pb,
  ICACompletion           completion);      /* can be NULL */



/*
--------------- Property functions --------------- 
*/
/*
 *  ICAGetPropertyCount()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetPropertyCount(
  ICAGetPropertyCountPB *  pb,
  ICACompletion            completion);      /* can be NULL */


/*
 *  ICAGetNthProperty()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetNthProperty(
  ICAGetNthPropertyPB *  pb,
  ICACompletion          completion);      /* can be NULL */


/*
 *  ICAGetPropertyByType()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetPropertyByType(
  ICAGetPropertyByTypePB *  pb,
  ICACompletion             completion);      /* can be NULL */


/*
 *  ICAGetPropertyInfo()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetPropertyInfo(
  ICAGetPropertyInfoPB *  pb,
  ICACompletion           completion);      /* can be NULL */


/*
 *  ICAGetPropertyData()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetPropertyData(
  ICAGetPropertyDataPB *  pb,
  ICACompletion           completion);      /* can be NULL */


/*
 *  ICASetPropertyData()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICASetPropertyData(
  ICASetPropertyDataPB *  pb,
  ICACompletion           completion);      /* can be NULL */


/*
 *  ICAGetParentOfProperty()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetParentOfProperty(
  ICAGetParentOfPropertyPB *  pb,
  ICACompletion               completion);      /* can be NULL */


/*
 *  ICAGetRootOfProperty()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetRootOfProperty(
  ICAGetRootOfPropertyPB *  pb,
  ICACompletion             completion);      /* can be NULL */


/*
 *  ICAGetPropertyRefCon()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetPropertyRefCon(
  ICAGetPropertyRefConPB *  pb,
  ICACompletion             completion);      /* can be NULL */


/*
 *  ICASetPropertyRefCon()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICASetPropertyRefCon(
  ICASetPropertyRefConPB *  pb,
  ICACompletion             completion);      /* can be NULL */



/* 
--------------- Device functions --------------- 
*/
/*
 *  ICAGetDeviceList()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAGetDeviceList(
  ICAGetDeviceListPB *  pb,
  ICACompletion         completion);      /* can be NULL */


/*
 *  ICAObjectSendMessage()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICAObjectSendMessage(
  ICAObjectSendMessagePB *  pb,
  ICACompletion             completion);      /* can be NULL */


/*
 *  ICARegisterEventNotification()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.1 and later
 *    Mac OS X:         in version 10.0 and later
 */
EXTERN_API( OSErr )
ICARegisterEventNotification(
  ICARegisterEventNotificationPB *  pb,
  ICACompletion                     completion);      /* can be NULL */




/* 
------------------------------------------------ 
*/
/*
 *  ICADownloadFile()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.4 and later
 *    Mac OS X:         in version 10.1 and later
 */
EXTERN_API( OSErr )
ICADownloadFile(
  ICADownloadFilePB *  pb,
  ICACompletion        completion);      /* can be NULL */



/*
 *  ICACopyObjectPropertyDictionary()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.4 and later
 *    Mac OS X:         in version 10.1 and later
 */
EXTERN_API( OSErr )
ICACopyObjectPropertyDictionary(
  ICACopyObjectPropertyDictionaryPB *  pb,
  ICACompletion                        completion);      /* can be NULL */



/* 
--- scanner support --------------------------------------------- 
*/
struct ICAScannerOpenSessionPB {
  ICAHeader           header;
  ICAObject           object;                 /* <-- */
  ICAScannerSessionID  sessionID;             /* --> */
};
typedef struct ICAScannerOpenSessionPB  ICAScannerOpenSessionPB;
 
 
struct ICAScannerCloseSessionPB {
  ICAHeader           header;
  ICAScannerSessionID  sessionID;             /* <-- */
};
typedef struct ICAScannerCloseSessionPB ICAScannerCloseSessionPB;
 
 
struct ICAScannerInitializePB {
  ICAHeader           header;
  ICAScannerSessionID  sessionID;             /* <-- */
};
typedef struct ICAScannerInitializePB   ICAScannerInitializePB;
 
 
struct ICAScannerGetParametersPB {
  ICAHeader           header;
  ICAScannerSessionID  sessionID;             /* <-- */
  CFMutableDictionaryRef  theDict;            /* --> */
};
typedef struct ICAScannerGetParametersPB ICAScannerGetParametersPB;
 
 
struct ICAScannerSetParametersPB {
  ICAHeader           header;
  ICAScannerSessionID  sessionID;             /* <-- */
  CFMutableDictionaryRef  theDict;            /* <-> */
};
typedef struct ICAScannerSetParametersPB ICAScannerSetParametersPB;
 
 
struct ICAScannerStatusPB {
  ICAHeader           header;
  ICAScannerSessionID  sessionID;             /* <-- */
  UInt32              status;                 /* --> */
};
typedef struct ICAScannerStatusPB       ICAScannerStatusPB;
 
 
struct ICAScannerStartPB {
  ICAHeader           header;
  ICAScannerSessionID  sessionID;             /* <-- */
};
typedef struct ICAScannerStartPB        ICAScannerStartPB;
 
 
/*
 *  ICAScannerOpenSession()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.6 and later
 *    Mac OS X:         in version 10.1 and later
 */
EXTERN_API( OSErr )
ICAScannerOpenSession(
  ICAScannerOpenSessionPB *  pb,
  ICACompletion              completion);      /* can be NULL */


/*
 *  ICAScannerCloseSession()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.6 and later
 *    Mac OS X:         in version 10.1 and later
 */
EXTERN_API( OSErr )
ICAScannerCloseSession(
  ICAScannerCloseSessionPB *  pb,
  ICACompletion               completion);      /* can be NULL */


/*
 *  ICAScannerInitialize()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.6 and later
 *    Mac OS X:         in version 10.1 and later
 */
EXTERN_API( OSErr )
ICAScannerInitialize(
  ICAScannerInitializePB *  pb,
  ICACompletion             completion);      /* can be NULL */


/*
 *  ICAScannerGetParameters()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.6 and later
 *    Mac OS X:         in version 10.1 and later
 */
EXTERN_API( OSErr )
ICAScannerGetParameters(
  ICAScannerGetParametersPB *  pb,
  ICACompletion                completion);      /* can be NULL */


/*
 *  ICAScannerSetParameters()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.6 and later
 *    Mac OS X:         in version 10.1 and later
 */
EXTERN_API( OSErr )
ICAScannerSetParameters(
  ICAScannerSetParametersPB *  pb,
  ICACompletion                completion);      /* can be NULL */


/*
 *  ICAScannerStatus()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.6 and later
 *    Mac OS X:         in version 10.1 and later
 */
EXTERN_API( OSErr )
ICAScannerStatus(
  ICAScannerStatusPB *  pb,
  ICACompletion         completion);      /* can be NULL */


/*
 *  ICAScannerStart()
 *  
 *  Availability:
 *    Non-Carbon CFM:   not available
 *    CarbonLib:        in CarbonLib 1.6 and later
 *    Mac OS X:         in version 10.1 and later
 */
EXTERN_API( OSErr )
ICAScannerStart(
  ICAScannerStartPB *  pb,
  ICACompletion        completion);      /* can be NULL */



#if PRAGMA_STRUCT_ALIGN
    #pragma options align=reset
#elif PRAGMA_STRUCT_PACKPUSH
    #pragma pack(pop)
#elif PRAGMA_STRUCT_PACK
    #pragma pack()
#endif

#ifdef PRAGMA_IMPORT_OFF
#pragma import off
#elif PRAGMA_IMPORT
#pragma import reset
#endif

#ifdef __cplusplus
}
#endif

#endif /* __ICAAPPLICATION__ */