[3rdParty] Photometrics: Added SDK files for PVCAM 3.1.9.1 svn/git-svn
authorlwalder <lwalder@2c67d6c2-4361-4cd7-bd83-1149b1926c9b>
Fri, 8 Apr 2016 09:54:10 +0000 (09:54 +0000)
committerlwalder <lwalder@2c67d6c2-4361-4cd7-bd83-1149b1926c9b>
Fri, 8 Apr 2016 09:54:10 +0000 (09:54 +0000)
git-svn-id: https://valelab.ucsf.edu/svn/3rdpartypublic@177 2c67d6c2-4361-4cd7-bd83-1149b1926c9b

Photometrics/PVCAM/SDK/Headers/master.h
Photometrics/PVCAM/SDK/Headers/pvcam.h
Photometrics/PVCAM/SDK/Libs/Win32/pvcam32.lib
Photometrics/PVCAM/SDK/Libs/x64/pvcam64.lib

index e9599dd..120d762 100644 (file)
-/*****************************************************************************/\r
-/*        Copyright (C) Roper Scientific, Inc. 2007 All rights reserved.     */\r
-/*****************************************************************************/\r
+/******************************************************************************/\r
+/* Copyright (C) Roper Scientific, Inc. All rights reserved.                  */\r
+/******************************************************************************/\r
+\r
 #ifndef _MASTER_H\r
 #define _MASTER_H\r
 \r
-#if defined  __cplusplus\r
-\r
-// BORLAND   C++\r
-\r
-#define PV_C_PLUS_PLUS\r
-\r
-#elif defined  __cplusplus__\r
-\r
-// MICROSOFT C++   This allows us to insert the proper compiler flags,\r
-//                 in PVCAM.H for example, to cope properly with C++ definitions.\r
-\r
-#define PV_C_PLUS_PLUS\r
-\r
+/*\r
+This allows us to insert the proper compiler flags, in pvcam.h for example,\r
+to cope properly with C++ definitions.\r
+*/\r
+#if defined(__cplusplus)\r
+  /* BORLAND C++ and GCC */\r
+  #define PV_C_PLUS_PLUS\r
+#elif defined(__cplusplus__)\r
+  /* MICROSOFT C++ */\r
+  #define PV_C_PLUS_PLUS\r
 #endif\r
 \r
-#if defined  _MSC_VER\r
-\r
-// MICROSOFT C++   VS 2005 wants to use safe string\r
-// functions - we have to turn this off for now.\r
-\r
-#pragma message("Disabling String Safe Warnings")\r
-#pragma warning(disable : 4996)\r
-\r
+/******************************************************************************/\r
+/* Platform-specific defined like calling conventions, etc.                   */\r
+/******************************************************************************/\r
+\r
+#if defined(_WIN32) || defined(_WIN64)\r
+  #define PV_DECL __stdcall\r
+  #define DEPRECATED __declspec(deprecated)\r
+#elif defined(__linux__)\r
+  #define PV_DECL\r
+  #define DEPRECATED __attribute__((deprecated))\r
+#elif defined(__APPLE__)\r
+  #error TODO: Declare PV_DECL calling convention\r
+  #error TODO: Declare DEPRECATED definition\r
 #endif\r
 \r
-\r
-/**************************** Calling Conventions ****************************/\r
-#define PV_DECL __stdcall\r
-\r
-#define PV_PTR_DECL  *\r
-\r
-/******************************** PVCAM Types ********************************/\r
-enum { PV_FAIL, PV_OK };\r
-\r
-typedef unsigned short rs_bool, PV_PTR_DECL  rs_bool_ptr;\r
-typedef char                    PV_PTR_DECL  char_ptr;\r
-typedef signed char    int8,    PV_PTR_DECL  int8_ptr;\r
-typedef unsigned char  uns8,    PV_PTR_DECL  uns8_ptr;\r
-typedef short          int16,   PV_PTR_DECL  int16_ptr;\r
-typedef unsigned short uns16,   PV_PTR_DECL  uns16_ptr;\r
-typedef long           int32,   PV_PTR_DECL  int32_ptr;\r
-typedef unsigned long  uns32,   PV_PTR_DECL  uns32_ptr;\r
-typedef double         flt64,   PV_PTR_DECL  flt64_ptr;\r
-typedef void                    PV_PTR_DECL  void_ptr;\r
-typedef void_ptr                PV_PTR_DECL  void_ptr_ptr;\r
+/******************************************************************************/\r
+/* PVCAM types                                                                */\r
+/******************************************************************************/\r
+\r
+/** General error codes usually returned from functions as rs_bool value. */\r
+enum\r
+{\r
+    PV_FAIL = 0,\r
+    PV_OK\r
+};\r
+\r
+typedef unsigned short rs_bool;\r
+typedef signed char    int8;\r
+typedef unsigned char  uns8;\r
+typedef short          int16;\r
+typedef unsigned short uns16;\r
+typedef int            int32;\r
+typedef unsigned int   uns32;\r
+typedef float          flt32;\r
+typedef double         flt64;\r
 \r
 #if defined(_MSC_VER)\r
-typedef unsigned __int64 ulong64, PV_PTR_DECL ulong64_ptr;\r
-typedef signed __int64 long64, PV_PTR_DECL long64_ptr;\r
+  typedef unsigned __int64   ulong64;\r
+  typedef signed   __int64   long64;\r
 #else\r
-typedef unsigned long long ulong64, PV_PTR_DECL ulong64_ptr;;\r
-typedef signed long long long64, PV_PTR_DECL long64_ptr;\r
+  typedef unsigned long long ulong64;\r
+  typedef signed   long long long64;\r
 #endif\r
 \r
-typedef const rs_bool PV_PTR_DECL rs_bool_const_ptr;\r
-typedef const char    PV_PTR_DECL char_const_ptr;\r
-typedef const int8    PV_PTR_DECL int8_const_ptr;\r
-typedef const uns8    PV_PTR_DECL uns8_const_ptr;\r
-typedef const int16   PV_PTR_DECL int16_const_ptr;\r
-typedef const uns16   PV_PTR_DECL uns16_const_ptr;\r
-typedef const int32   PV_PTR_DECL int32_const_ptr;\r
-typedef const uns32   PV_PTR_DECL uns32_const_ptr;\r
-typedef const flt64   PV_PTR_DECL flt64_const_ptr;\r
-\r
-/****************************** PVCAM Constants ******************************/\r
+/**\r
+@defgroup grp_pm_deprecated Deprecated PVCAM symbols\r
+*/\r
+\r
+/**\r
+@defgroup grp_pm_deprecated_typedefs Deprecated PVCAM types\r
+@ingroup grp_pm_deprecated\r
+These types are included for compatibility reasons.\r
+@{\r
+*/\r
+\r
+#define PV_PTR_DECL     *\r
+\r
+typedef void*           void_ptr;\r
+typedef void**          void_ptr_ptr;\r
+\r
+typedef rs_bool*        rs_bool_ptr;\r
+typedef char*           char_ptr;\r
+typedef int8*           int8_ptr;\r
+typedef uns8*           uns8_ptr;\r
+typedef int16*          int16_ptr;\r
+typedef uns16*          uns16_ptr;\r
+typedef int32*          int32_ptr;\r
+typedef uns32*          uns32_ptr;\r
+typedef flt32*          flt32_ptr;\r
+typedef flt64*          flt64_ptr;\r
+typedef ulong64*        ulong64_ptr;\r
+typedef long64*         long64_ptr;\r
+\r
+typedef const rs_bool*  rs_bool_const_ptr;\r
+typedef const char*     char_const_ptr;\r
+typedef const int8*     int8_const_ptr;\r
+typedef const uns8*     uns8_const_ptr;\r
+typedef const int16*    int16_const_ptr;\r
+typedef const uns16*    uns16_const_ptr;\r
+typedef const int32*    int32_const_ptr;\r
+typedef const uns32*    uns32_const_ptr;\r
+typedef const flt32*    flt32_const_ptr;\r
+typedef const flt64*    flt64_const_ptr;\r
+typedef const ulong64*  ulong64_const_ptr;\r
+typedef const long64*   long64_const_ptr;\r
+\r
+/** @} */ /* grp_pm_deprecated_typedefs */\r
+\r
+/**\r
+@defgroup grp_pm_deprecated_params Deprecated PVCAM parameters\r
+@ingroup grp_pm_deprecated\r
+These parameters are included for compatibility reasons.\r
+*/\r
+\r
+/**\r
+@defgroup grp_pm_deprecated_functions Deprecated PVCAM functions\r
+@ingroup grp_pm_deprecated\r
+These functions are included for compatibility reasons.\r
+*/\r
+\r
+/******************************************************************************/\r
+/* PVCAM constants                                                            */\r
+/******************************************************************************/\r
+\r
 #ifndef FALSE\r
-#define FALSE  PV_FAIL      /* FALSE == 0                                  */\r
+    #define FALSE  PV_FAIL  /* FALSE == 0 */\r
 #endif\r
 \r
 #ifndef TRUE\r
-#define TRUE   PV_OK        /* TRUE  == 1                                  */\r
+    #define TRUE   PV_OK    /* TRUE == 1 */\r
 #endif\r
 \r
-#define CAM_NAME_LEN     32 /* Max length of a cam name (includes null term) */\r
-#define PARAM_NAME_LEN   32 /* Max length of a pp param                                                 */\r
-\r
-/************************ PVCAM-Specific Definitions *************************/\r
-#define MAX_CAM          16 /* Maximum number of cameras on this system.     */\r
-\r
 #endif /* _MASTER_H */\r
index 7af3954..01882d5 100644 (file)
@@ -1,14 +1,52 @@
-/******************************************************************************\r
-   Copyright (C) Roper Scientific, Inc. 1990-2012. All rights reserved.\r
-******************************************************************************/\r
+/******************************************************************************/\r
+/* Copyright (C) Roper Scientific, Inc. All rights reserved.                  */\r
+/******************************************************************************/\r
 \r
 #ifndef _PVCAM_H\r
 #define _PVCAM_H\r
-/*********************** Constant & Type Definitions *************************/\r
 \r
-/************************ Class 2: Data types ********************************/\r
-\r
-/* GUID for FRAME_INFO structure */\r
+/******************************************************************************/\r
+/* Constants                                                                  */\r
+/******************************************************************************/\r
+\r
+/** Maximum number of cameras on this system. */\r
+#define MAX_CAM                16\r
+\r
+/******************************************************************************/\r
+/* Name/ID sizes                                                              */\r
+/******************************************************************************/\r
+\r
+/** Maximum length of a camera name. */\r
+#define CAM_NAME_LEN           32   /**< Includes space for null terminator. */\r
+/** Maximum length of a post-processing parameter/feature name. */\r
+/** Use MAX_PP_NAME_LEN instead. */\r
+#define PARAM_NAME_LEN         32   /**< Includes space for null terminator. */\r
+/** Maximum length of an error message. */\r
+#define ERROR_MSG_LEN         255   /**< Includes space for null terminator. */\r
+/** Maximum length of a sensor chip name. */\r
+#define CCD_NAME_LEN           17   /**< Includes space for null terminator. */\r
+/** Maximum length of a camera serial number string. */\r
+#define MAX_ALPHA_SER_NUM_LEN  32   /**< Includes space for null terminator. */\r
+/** Maximum length of a post-processing parameter/feature name. */\r
+#define MAX_PP_NAME_LEN        32   /**< Includes space for null terminator. */\r
+/** Maximum length of a system name. */\r
+#define MAX_SYSTEM_NAME_LEN    32   /**< Includes space for null terminator. */\r
+/** Maximum length of a vendor name. */\r
+#define MAX_VENDOR_NAME_LEN    32   /**< Includes space for null terminator. */\r
+/** Maximum length of a product name. */\r
+#define MAX_PRODUCT_NAME_LEN   32   /**< Includes space for null terminator. */\r
+/** Maximum length of a product name. */\r
+#define MAX_CAM_PART_NUM_LEN   32   /**< Includes space for null terminator. */\r
+/** Maximum length of a gain name. */\r
+#define MAX_GAIN_NAME_LEN      32   /**< Includes space for null terminator. */\r
+\r
+/******************************************************************************/\r
+/* Data types                                                                 */\r
+/******************************************************************************/\r
+\r
+/**\r
+GUID for #FRAME_INFO structure.\r
+*/\r
 typedef struct _TAG_PVCAM_FRAME_INFO_GUID\r
 {\r
     uns32 f1;\r
@@ -16,309 +54,461 @@ typedef struct _TAG_PVCAM_FRAME_INFO_GUID
     uns16 f3;\r
     uns8  f4[8];\r
 }\r
-PVCAM_FRAME_INFO_GUID, PV_PTR_DECL PPVCAM_FRAME_INFO_GUID;\r
+PVCAM_FRAME_INFO_GUID;\r
 \r
-/* FRAME_INFO currently holding the sequential frame number and timestamp */\r
+/**\r
+Structure used to uniquely identify frames in the camera.\r
+*/\r
 typedef struct _TAG_FRAME_INFO\r
 {\r
     PVCAM_FRAME_INFO_GUID FrameInfoGUID;\r
     int16 hCam;\r
-    int32 FrameNr; \r
+    int32 FrameNr;\r
     long64 TimeStamp;\r
     int32 ReadoutTime;\r
     long64 TimeStampBOF;\r
 }\r
-FRAME_INFO, PV_PTR_DECL PFRAME_INFO;\r
+FRAME_INFO;\r
 \r
-/********************** Class 0: Open Camera Modes ***************************/\r
-/*\r
-  Function: pl_cam_open()\r
+/**\r
+The modes under which the camera can be open.\r
+Used with the function pl_cam_open().\r
+Treated as int16 type.\r
 */\r
-typedef enum\r
+typedef enum PL_OPEN_MODES\r
 {\r
     OPEN_EXCLUSIVE\r
 }\r
 PL_OPEN_MODES;\r
 \r
-/************************ Class 1: Error message size ************************/\r
-#define ERROR_MSG_LEN  255      /* No error message will be longer than this */\r
-\r
-/*********************** Class 2: Cooling type flags *************************/\r
-/* used with the PARAM_COOLING_MODE parameter id.\r
+/**\r
+Used with the #PARAM_COOLING_MODE parameter ID.\r
+Treated as int32 type.\r
 */\r
-typedef enum\r
+typedef enum PL_COOL_MODES\r
 {\r
-    NORMAL_COOL, CRYO_COOL\r
+    NORMAL_COOL,\r
+    CRYO_COOL\r
 }\r
 PL_COOL_MODES;\r
 \r
-/************************** Class 2: Name/ID sizes ***************************/\r
-#define CCD_NAME_LEN  17           /* Includes space for the null terminator */\r
-#define MAX_ALPHA_SER_NUM_LEN 32   /* Includes space for the null terminator */\r
-#define MAX_PP_NAME_LEN 32\r
-\r
-/*********************** Class 2: MPP capability flags ***********************/\r
-/* used with the PARAM_MPP_CAPABLE parameter id.                             */\r
-typedef enum\r
+/**\r
+Used with the #PARAM_MPP_CAPABLE parameter ID.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_MPP_MODES\r
 {\r
-    MPP_UNKNOWN, MPP_ALWAYS_OFF, MPP_ALWAYS_ON, MPP_SELECTABLE\r
+    MPP_UNKNOWN,\r
+    MPP_ALWAYS_OFF,\r
+    MPP_ALWAYS_ON,\r
+    MPP_SELECTABLE\r
 }\r
 PL_MPP_MODES;\r
 \r
-/************************** Class 2: Shutter flags ***************************/\r
-/* used with the PARAM_SHTR_STATUS parameter id.\r
+/**\r
+Used with the #PARAM_SHTR_STATUS parameter ID.\r
+Treated as int32 type.\r
 */\r
-typedef enum\r
+typedef enum PL_SHTR_MODES\r
 {\r
-    SHTR_FAULT, SHTR_OPENING, SHTR_OPEN, SHTR_CLOSING, SHTR_CLOSED,\r
+    SHTR_FAULT,\r
+    SHTR_OPENING,\r
+    SHTR_OPEN,\r
+    SHTR_CLOSING,\r
+    SHTR_CLOSED,\r
     SHTR_UNKNOWN\r
 }\r
 PL_SHTR_MODES;\r
 \r
-/************************ Class 2: Pmode constants ***************************/\r
-/* used with the PARAM_PMODE parameter id.                                   */\r
-typedef enum\r
+/**\r
+Used with the #PARAM_PMODE parameter ID.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_PMODES\r
 {\r
-    PMODE_NORMAL, PMODE_FT, PMODE_MPP, PMODE_FT_MPP,\r
-    PMODE_ALT_NORMAL, PMODE_ALT_FT, PMODE_ALT_MPP, PMODE_ALT_FT_MPP,\r
-    PMODE_INTERLINE\r
+    PMODE_NORMAL,\r
+    PMODE_FT,\r
+    PMODE_MPP,\r
+    PMODE_FT_MPP,\r
+    PMODE_ALT_NORMAL,\r
+    PMODE_ALT_FT,\r
+    PMODE_ALT_MPP,\r
+    PMODE_ALT_FT_MPP\r
 }\r
 PL_PMODES;\r
 \r
-/************************ Class 2: Color support constants *******************/\r
-/* used with the PARAM_COLOR_MODE parameter id.                              */\r
-typedef enum\r
+/**\r
+Used with the #PARAM_COLOR_MODE parameter ID.\r
+Treated as int32 type (but should not exceed a value of 255 due to md_frame_header.colorMask)\r
+*/\r
+typedef enum PL_COLOR_MODES\r
 {\r
-    COLOR_NONE, COLOR_RGGB = 2\r
+    COLOR_NONE     = 0, /**< No color mask */\r
+    COLOR_RESERVED = 1, /**< Reserved, do not use */\r
+    COLOR_RGGB     = 2,\r
+    COLOR_GRBG,\r
+    COLOR_GBRG,\r
+    COLOR_BGGR,\r
 }\r
 PL_COLOR_MODES;\r
 \r
-/************************ Class 2: Attribute IDs *****************************/\r
-/*\r
-  Function: pl_get_param()\r
+/**\r
+Used with the function pl_get_param().\r
+Treated as int16 type.\r
 */\r
-typedef enum\r
+typedef enum PL_PARAM_ATTRIBUTES\r
 {\r
-    ATTR_CURRENT, ATTR_COUNT, ATTR_TYPE, ATTR_MIN, ATTR_MAX, ATTR_DEFAULT,\r
-    ATTR_INCREMENT, ATTR_ACCESS, ATTR_AVAIL\r
+    ATTR_CURRENT,\r
+    ATTR_COUNT,\r
+    ATTR_TYPE,\r
+    ATTR_MIN,\r
+    ATTR_MAX,\r
+    ATTR_DEFAULT,\r
+    ATTR_INCREMENT,\r
+    ATTR_ACCESS,\r
+    ATTR_AVAIL\r
 }\r
 PL_PARAM_ATTRIBUTES;\r
 \r
-/************************ Class 2: Access types ******************************/\r
-/*\r
-  Function: pl_get_param( ATTR_ACCESS )\r
+/**\r
+Used with the function pl_get_param() and #ATTR_ACCESS.\r
+Treated as uns16 type.\r
 */\r
-typedef enum\r
+typedef enum PL_PARAM_ACCESS\r
 {\r
-    ACC_ERROR, ACC_READ_ONLY, ACC_READ_WRITE, ACC_EXIST_CHECK_ONLY,\r
+    ACC_READ_ONLY = 1,\r
+    ACC_READ_WRITE,\r
+    ACC_EXIST_CHECK_ONLY,\r
     ACC_WRITE_ONLY\r
 }\r
 PL_PARAM_ACCESS;\r
-/* This enum is used by the access Attribute */\r
 \r
-/************************ Class 2: I/O types *********************************/\r
-/* used with the PARAM_IO_TYPE parameter id.                                 */\r
-typedef enum\r
+/**\r
+Used with the #PARAM_IO_TYPE parameter ID.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_IO_TYPE\r
 {\r
-    IO_TYPE_TTL, IO_TYPE_DAC\r
+    IO_TYPE_TTL,\r
+    IO_TYPE_DAC\r
 }\r
 PL_IO_TYPE;\r
 \r
-/************************ Class 2: I/O direction flags ***********************/\r
-/* used with the PARAM_IO_DIRECTION parameter id.                            */\r
-typedef enum\r
+/**\r
+Used with the #PARAM_IO_DIRECTION parameter ID.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_IO_DIRECTION\r
 {\r
-    IO_DIR_INPUT, IO_DIR_OUTPUT, IO_DIR_INPUT_OUTPUT\r
+    IO_DIR_INPUT,\r
+    IO_DIR_OUTPUT,\r
+    IO_DIR_INPUT_OUTPUT\r
 }\r
 PL_IO_DIRECTION;\r
 \r
-/************************ Class 2: I/O port attributes ***********************/\r
-typedef enum\r
-{\r
-    IO_ATTR_DIR_FIXED, IO_ATTR_DIR_VARIABLE_ALWAYS_READ\r
-}\r
-PL_IO_ACCESS;\r
-\r
-\r
-/************************ Class 2: Readout Port ******************************/\r
-/* used with the PARAM_READOUT_PORT parameter id.                            */\r
-typedef enum\r
+/**\r
+Used with the #PARAM_READOUT_PORT parameter ID.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_READOUT_PORTS\r
 {\r
-    READOUT_PORT_MULT_GAIN = 0,\r
-    READOUT_PORT_NORMAL,\r
-    READOUT_PORT_LOW_NOISE,\r
-    READOUT_PORT_HIGH_CAP,\r
-    /* deprecated */\r
-    READOUT_PORT1 = 0,\r
-    READOUT_PORT2 = 1\r
+    READOUT_PORT_0 = 0,\r
+    READOUT_PORT_1\r
 }\r
 PL_READOUT_PORTS;\r
 \r
-/************************ Class 2: Clearing mode flags ***********************/\r
-/* used with the PARAM_CLEAR_MODE parameter id.                              */\r
-typedef enum\r
+/**\r
+Used with the #PARAM_CLEAR_MODE parameter ID.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_CLEAR_MODES\r
 {\r
-    CLEAR_NEVER, CLEAR_PRE_EXPOSURE, CLEAR_PRE_SEQUENCE, CLEAR_POST_SEQUENCE,\r
-    CLEAR_PRE_POST_SEQUENCE, CLEAR_PRE_EXPOSURE_POST_SEQ, MAX_CLEAR_MODE\r
+    CLEAR_NEVER,\r
+    CLEAR_PRE_EXPOSURE,\r
+    CLEAR_PRE_SEQUENCE,\r
+    CLEAR_POST_SEQUENCE,\r
+    CLEAR_PRE_POST_SEQUENCE,\r
+    CLEAR_PRE_EXPOSURE_POST_SEQ,\r
+    MAX_CLEAR_MODE\r
 }\r
 PL_CLEAR_MODES;\r
 \r
-/************************ Class 2: Shutter mode flags ************************/\r
-/*\r
-  Function: pl_set_param ( PARAM_SHTR_OPEN_MODE )\r
+/**\r
+Used with the #PARAM_SHTR_OPEN_MODE parameter ID.\r
+Treated as int32 type.\r
 */\r
-typedef enum\r
+typedef enum PL_SHTR_OPEN_MODES\r
 {\r
-    OPEN_NEVER, OPEN_PRE_EXPOSURE, OPEN_PRE_SEQUENCE, OPEN_PRE_TRIGGER,\r
+    OPEN_NEVER,\r
+    OPEN_PRE_EXPOSURE,\r
+    OPEN_PRE_SEQUENCE,\r
+    OPEN_PRE_TRIGGER,\r
     OPEN_NO_CHANGE\r
 }\r
 PL_SHTR_OPEN_MODES;\r
 \r
-/************************ Class 2: Exposure mode flags ***********************/\r
-/* used with the PARAM_EXPOSURE_MODE parameter id.\r
-  Functions: pl_exp_setup_cont()\r
-             pl_exp_setup_seq()\r
-\r
+/**\r
+Used with the #PARAM_EXPOSURE_MODE parameter ID.\r
+Treated as int32 type.\r
+Used with the functions pl_exp_setup_cont() and pl_exp_setup_seq().\r
+Treated as int16 type.\r
 */\r
-typedef enum\r
+typedef enum PL_EXPOSURE_MODES\r
 {\r
-    TIMED_MODE, STROBED_MODE, BULB_MODE, TRIGGER_FIRST_MODE, FLASH_MODE,\r
-    VARIABLE_TIMED_MODE, INT_STROBE_MODE,\r
-    MAX_EXPOSE_MODE\r
+    /* Classic EXPOSURE modes, the MAX */\r
+    TIMED_MODE,\r
+    STROBED_MODE,\r
+    BULB_MODE,\r
+    TRIGGER_FIRST_MODE,\r
+    FLASH_MODE,\r
+    VARIABLE_TIMED_MODE,\r
+    INT_STROBE_MODE,\r
+    MAX_EXPOSE_MODE = 7,\r
+\r
+    /*\r
+    Extended EXPOSURE modes used with #PARAM_EXPOSURE_MODE when\r
+    camera dynamically reports it's capabilities.\r
+    The "7" in each of these calculations comes from previous\r
+    definition of #MAX_EXPOSE_MODE when this file was defined.\r
+    */\r
+    EXT_TRIG_INTERNAL = (7 + 0) << 8,\r
+    EXT_TRIG_TRIG_FIRST = (7 + 1) << 8,\r
+    EXT_TRIG_EDGE_RISING  = (7 + 2) << 8\r
 }\r
 PL_EXPOSURE_MODES;\r
 \r
-/**************** Class 2: Post Processing Feature Identifiers ****************/\r
-/* used with the PARAM_PP_FEAT_ID parameter id.                              */\r
+/**\r
+Used with the #PARAM_EXPOSE_OUT_MODE parameter ID.\r
+Build the values for the expose out modes that are "ORed" with the trigger\r
+modes when setting up the script.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_EXPOSE_OUT_MODES\r
+{\r
+    EXPOSE_OUT_FIRST_ROW = 0, /**< Follows first row. */\r
+    EXPOSE_OUT_ALL_ROWS,      /**< Exposure bottom row starts integrating, to when first row begins reading out. */\r
+    EXPOSE_OUT_ANY_ROW,       /**< from first row exposing to last last row reading out. */\r
+    MAX_EXPOSE_OUT_MODE\r
+}\r
+PL_EXPOSE_OUT_MODES;\r
+\r
+/**\r
+Used with the #PARAM_FAN_SPEED_SETPOINT parameter ID.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_FAN_SPEEDS\r
+{\r
+    FAN_SPEED_HIGH, /**< Maximum speed, the default state. */\r
+    FAN_SPEED_MEDIUM,\r
+    FAN_SPEED_LOW,\r
+    FAN_SPEED_OFF /**< Fan is turned off. */\r
+}\r
+PL_FAN_SPEEDS;\r
 \r
-typedef enum\r
+/**\r
+Used with the #PARAM_TRIGTAB_SIGNAL parameter ID.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_TRIGTAB_SIGNALS\r
+{\r
+    PL_TRIGTAB_SIGNAL_EXPOSE_OUT\r
+}\r
+PL_TRIGTAB_SIGNALS;\r
+\r
+/**\r
+Used with the #PARAM_PP_FEAT_ID parameter ID.\r
+Treated as uns16 type.\r
+*/\r
+typedef enum PP_FEATURE_IDS\r
 {\r
     PP_FEATURE_RING_FUNCTION,\r
-    PP_FEATURE_BIAS, \r
+    PP_FEATURE_BIAS,\r
     PP_FEATURE_BERT,\r
     PP_FEATURE_QUANT_VIEW,\r
     PP_FEATURE_BLACK_LOCK,\r
     PP_FEATURE_TOP_LOCK,\r
     PP_FEATURE_VARI_BIT,\r
-    PP_FEATURE_DESPECKLE_HIGH,\r
-    PP_FEATURE_DESPECKLE_LOW,\r
+    PP_FEATURE_RESERVED,            /**< Should not be used at any time moving forward. */\r
+    PP_FEATURE_DESPECKLE_BRIGHT_HIGH,\r
+    PP_FEATURE_DESPECKLE_DARK_LOW,\r
+    PP_FEATURE_DEFECTIVE_PIXEL_CORRECTION,\r
+    PP_FEATURE_DYNAMIC_DARK_FRAME_CORRECTION,\r
+    PP_FEATURE_HIGH_DYNAMIC_RANGE,\r
+    PP_FEATURE_DESPECKLE_BRIGHT_LOW,\r
+    PP_FEATURE_DENOISING,\r
     PP_FEATURE_MAX\r
 }\r
 PP_FEATURE_IDS;\r
 \r
-/**************** Class 2: Post Processing Module Identifiers ****************/\r
-/* used with the PARAM_PP_PARAM_ID parameter id.                             */\r
-\r
+/**\r
+Used with the #PARAM_PP_PARAM_ID parameter ID.\r
+*/\r
 #define PP_MAX_PARAMETERS_PER_FEATURE   10\r
 \r
-typedef enum\r
+/**\r
+Used with the #PARAM_PP_PARAM_ID parameter ID.\r
+Treated as uns16 type.\r
+*/\r
+typedef enum PP_PARAMETER_IDS\r
 {\r
-    PP_PARAMETER_RF_FUNCTION         = (PP_FEATURE_RING_FUNCTION * PP_MAX_PARAMETERS_PER_FEATURE),\r
-    PP_FEATURE_BIAS_ENABLED          = (PP_FEATURE_BIAS * PP_MAX_PARAMETERS_PER_FEATURE), \r
-    PP_FEATURE_BIAS_LEVEL, \r
-    PP_FEATURE_BERT_ENABLED          = (PP_FEATURE_BERT * PP_MAX_PARAMETERS_PER_FEATURE), \r
+    PP_PARAMETER_RF_FUNCTION                            = (PP_FEATURE_RING_FUNCTION * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_BIAS_ENABLED                             = (PP_FEATURE_BIAS * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_BIAS_LEVEL,\r
+    PP_FEATURE_BERT_ENABLED                             = (PP_FEATURE_BERT * PP_MAX_PARAMETERS_PER_FEATURE),\r
     PP_FEATURE_BERT_THRESHOLD,\r
-    PP_FEATURE_QUANT_VIEW_ENABLED    = (PP_FEATURE_QUANT_VIEW * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_QUANT_VIEW_ENABLED                       = (PP_FEATURE_QUANT_VIEW * PP_MAX_PARAMETERS_PER_FEATURE),\r
     PP_FEATURE_QUANT_VIEW_E,\r
-    PP_FEATURE_BLACK_LOCK_ENABLED    = (PP_FEATURE_BLACK_LOCK * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_BLACK_LOCK_ENABLED                       = (PP_FEATURE_BLACK_LOCK * PP_MAX_PARAMETERS_PER_FEATURE),\r
     PP_FEATURE_BLACK_LOCK_BLACK_CLIP,\r
-    PP_FEATURE_TOP_LOCK_ENABLED      = (PP_FEATURE_TOP_LOCK * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_TOP_LOCK_ENABLED                         = (PP_FEATURE_TOP_LOCK * PP_MAX_PARAMETERS_PER_FEATURE),\r
     PP_FEATURE_TOP_LOCK_WHITE_CLIP,\r
-    PP_FEATURE_VARI_BIT_ENABLED      = (PP_FEATURE_VARI_BIT * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_VARI_BIT_ENABLED                         = (PP_FEATURE_VARI_BIT * PP_MAX_PARAMETERS_PER_FEATURE),\r
     PP_FEATURE_VARI_BIT_BIT_DEPTH,\r
+    PP_FEATURE_DESPECKLE_BRIGHT_HIGH_ENABLED            = (PP_FEATURE_DESPECKLE_BRIGHT_HIGH * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_DESPECKLE_BRIGHT_HIGH_THRESHOLD,\r
+    PP_FEATURE_DESPECKLE_BRIGHT_HIGH_MIN_ADU_AFFECTED,\r
+    PP_FEATURE_DESPECKLE_DARK_LOW_ENABLED               = (PP_FEATURE_DESPECKLE_DARK_LOW * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_DESPECKLE_DARK_LOW_THRESHOLD,\r
+    PP_FEATURE_DESPECKLE_DARK_LOW_MAX_ADU_AFFECTED,\r
+    PP_FEATURE_DEFECTIVE_PIXEL_CORRECTION_ENABLED       = (PP_FEATURE_DEFECTIVE_PIXEL_CORRECTION * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_DYNAMIC_DARK_FRAME_CORRECTION_ENABLED    = (PP_FEATURE_DYNAMIC_DARK_FRAME_CORRECTION * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_HIGH_DYNAMIC_RANGE_ENABLED               = (PP_FEATURE_HIGH_DYNAMIC_RANGE * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_DESPECKLE_BRIGHT_LOW_ENABLED             = (PP_FEATURE_DESPECKLE_BRIGHT_LOW * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_DESPECKLE_BRIGHT_LOW_THRESHOLD,\r
+    PP_FEATURE_DESPECKLE_BRIGHT_LOW_MAX_ADU_AFFECTED,\r
+    PP_FEATURE_DENOISING_ENABLED                        = (PP_FEATURE_DENOISING * PP_MAX_PARAMETERS_PER_FEATURE),\r
+    PP_FEATURE_DENOISING_NO_OF_ITERATIONS,\r
+    PP_FEATURE_DENOISING_GAIN,\r
+    PP_FEATURE_DENOISING_OFFSET,\r
+    PP_FEATURE_DENOISING_LAMBDA,\r
     PP_PARAMETER_ID_MAX\r
 }\r
 PP_PARAMETER_IDS;\r
 \r
-/**************** Class 2: S.M.A.R.T Streaming  ****************/\r
-/* used with the PARAM_PP_PARAM_ID parameter id.                             */\r
-typedef struct\r
+/**\r
+Used with the #PARAM_SMART_STREAM_EXP_PARAMS and #PARAM_SMART_STREAM_DLY_PARAMS\r
+parameter IDs and pl_create_smart_stream_struct() and\r
+pl_release_smart_stream_struct() functions.\r
+*/\r
+typedef struct smart_stream_type\r
 {\r
-    uns16     entries;         /* The number of entries in the array         */\r
-    uns32_ptr params;          /* The actual S.M.A.R.T. stream parameters    */\r
+    uns16   entries;    /**< The number of entries in the array. */\r
+    uns32*  params;     /**< The actual S.M.A.R.T. stream parameters. */\r
 }\r
-smart_stream_type, PV_PTR_DECL smart_stream_type_ptr;\r
+smart_stream_type;\r
 \r
-/********************** Class 2: S.M.A.R.T Streaming Modes *******************/\r
-typedef enum\r
+/**\r
+Used with the #PARAM_SMART_STREAM_MODE parameter ID.\r
+Treated as uns16 type.\r
+*/\r
+typedef enum PL_SMT_MODES\r
 {\r
     SMTMODE_ARBITRARY_ALL = 0,\r
     SMTMODE_MAX\r
 }\r
 PL_SMT_MODES;\r
 \r
-/********************** Class 3: Readout status flags ************************/\r
+/**\r
+Used with the functions pl_exp_check_status(), and pl_exp_check_cont_status()\r
+and pl_exp_check_cont_status_ex().\r
+Treated as int16 type.\r
+*/\r
 /*\r
-  Function: pl_exp_check_status()\r
-\r
-    if NEWDATARDY or NEWDATAFIXED     READOUT_COMPLETE\r
-    else if RUNNING                   ACQUISITION_IN_PROGRESS\r
-    else if INITIALIZED or DONEDCOK   READOUT_NOT_ACTIVE\r
-    else                              READOUT_FAILED\r
-\r
+if NEWDATARDY or NEWDATAFIXED     READOUT_COMPLETE\r
+else if RUNNING                   ACQUISITION_IN_PROGRESS\r
+else if INITIALIZED or DONEDCOK   READOUT_NOT_ACTIVE\r
+else                              READOUT_FAILED\r
 */\r
-typedef enum\r
+typedef enum PL_IMAGE_STATUSES\r
 {\r
     READOUT_NOT_ACTIVE,\r
     EXPOSURE_IN_PROGRESS,\r
     READOUT_IN_PROGRESS,\r
-    READOUT_COMPLETE,                   /* Means frame available for a circular buffer acq */\r
-    FRAME_AVAILABLE = READOUT_COMPLETE, /* New camera status indicating at least one frame is available */\r
+    READOUT_COMPLETE,                   /**< Means frame available for a circular buffer acq. */\r
+    FRAME_AVAILABLE = READOUT_COMPLETE, /**< New camera status indicating at least one frame is available. */\r
     READOUT_FAILED,\r
     ACQUISITION_IN_PROGRESS,\r
     MAX_CAMERA_STATUS\r
 }\r
 PL_IMAGE_STATUSES;\r
 \r
-/********************** Class 3: Abort Exposure flags ************************/\r
-/*\r
-  Function: pl_exp_abort()\r
+/**\r
+Used with the function pl_exp_abort().\r
+Treated as int16 type.\r
 */\r
-typedef enum\r
+typedef enum PL_CCS_ABORT_MODES\r
 {\r
-    CCS_NO_CHANGE = 0, CCS_HALT, CCS_HALT_CLOSE_SHTR, CCS_CLEAR,\r
-    CCS_CLEAR_CLOSE_SHTR, CCS_OPEN_SHTR, CCS_CLEAR_OPEN_SHTR\r
+    CCS_NO_CHANGE = 0,\r
+    CCS_HALT,\r
+    CCS_HALT_CLOSE_SHTR,\r
+    CCS_CLEAR,\r
+    CCS_CLEAR_CLOSE_SHTR,\r
+    CCS_OPEN_SHTR,\r
+    CCS_CLEAR_OPEN_SHTR\r
 }\r
 PL_CCS_ABORT_MODES;\r
 \r
-/************************ Class 3: EOF/BOF constants *************************/\r
-/* used with the PARAM_BOF_EOF_ENABLE parameter id.                          */\r
-typedef enum\r
+/**\r
+Used with the #PARAM_BOF_EOF_ENABLE parameter ID.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_IRQ_MODES\r
 {\r
-    NO_FRAME_IRQS = 0, BEGIN_FRAME_IRQS, END_FRAME_IRQS, BEGIN_END_FRAME_IRQS\r
+    NO_FRAME_IRQS = 0,\r
+    BEGIN_FRAME_IRQS,\r
+    END_FRAME_IRQS,\r
+    BEGIN_END_FRAME_IRQS\r
 }\r
 PL_IRQ_MODES;\r
 \r
-/************************ Class 3: Continuous Mode constants *****************/\r
-/*\r
-  Function: pl_exp_setup_cont()\r
+/**\r
+Used with the function pl_exp_setup_cont().\r
+Treated as int16 type.\r
 */\r
-typedef enum\r
+typedef enum PL_CIRC_MODES\r
 {\r
-    CIRC_NONE = 0, CIRC_OVERWRITE, CIRC_NO_OVERWRITE\r
+    CIRC_NONE = 0,\r
+    CIRC_OVERWRITE,\r
+    CIRC_NO_OVERWRITE\r
 }\r
 PL_CIRC_MODES;\r
 \r
-/************************ Class 3: Fast Exposure Resolution constants ********/\r
-/* used with the PARAM_EXP_RES parameter id.                                 */\r
-typedef enum\r
+/**\r
+Used with the #PARAM_EXP_RES parameter ID.\r
+Treated as int32 type.\r
+*/\r
+typedef enum PL_EXP_RES_MODES\r
 {\r
-    EXP_RES_ONE_MILLISEC = 0, EXP_RES_ONE_MICROSEC, EXP_RES_ONE_SEC\r
+    EXP_RES_ONE_MILLISEC = 0,\r
+    EXP_RES_ONE_MICROSEC,\r
+    EXP_RES_ONE_SEC\r
 }\r
 PL_EXP_RES_MODES;\r
 \r
-/************************ Class 3: I/O Script Locations **********************/\r
-typedef enum\r
+/**\r
+Used with the function pl_io_script_control().\r
+Treated as uns32 type.\r
+*/\r
+typedef enum PL_SRC_MODES\r
 {\r
-    SCR_PRE_OPEN_SHTR = 0, SCR_POST_OPEN_SHTR, SCR_PRE_FLASH, SCR_POST_FLASH,\r
-    SCR_PRE_INTEGRATE, SCR_POST_INTEGRATE, SCR_PRE_READOUT, SCR_POST_READOUT,\r
-    SCR_PRE_CLOSE_SHTR, SCR_POST_CLOSE_SHTR\r
+    SCR_PRE_OPEN_SHTR = 0,\r
+    SCR_POST_OPEN_SHTR,\r
+    SCR_PRE_FLASH,\r
+    SCR_POST_FLASH,\r
+    SCR_PRE_INTEGRATE,\r
+    SCR_POST_INTEGRATE,\r
+    SCR_PRE_READOUT,\r
+    SCR_POST_READOUT,\r
+    SCR_PRE_CLOSE_SHTR,\r
+    SCR_POST_CLOSE_SHTR\r
 }\r
 PL_SRC_MODES;\r
 \r
-/************************ Class 3: Callback constants *************************/\r
-\r
-typedef enum\r
+/**\r
+Used with the functions pl_cam_register_callback*() and pl_cam_deregister_callback().\r
+Used directly as an enum type without casting to any integral type.\r
+*/\r
+typedef enum PL_CALLBACK_EVENT\r
 {\r
     PL_CALLBACK_BOF = 0,\r
     PL_CALLBACK_EOF,\r
@@ -329,38 +519,27 @@ typedef enum
 }\r
 PL_CALLBACK_EVENT;\r
 \r
-/************************* Class 3: Region Definition ************************/\r
-typedef struct\r
+typedef struct rgn_type\r
 {\r
-    uns16 s1;                     /* First pixel in the serial register */\r
-    uns16 s2;                     /* Last pixel in the serial register */\r
-    uns16 sbin;                   /* Serial binning for this region */\r
-    uns16 p1;                     /* First row in the parallel register */\r
-    uns16 p2;                     /* Last row in the parallel register */\r
-    uns16 pbin;                   /* Parallel binning for this region */\r
+    uns16 s1;   /**< First pixel in the serial register. */\r
+    uns16 s2;   /**< Last pixel in the serial register. */\r
+    uns16 sbin; /**< Serial binning for this region. */\r
+    uns16 p1;   /**< First row in the parallel register. */\r
+    uns16 p2;   /**< Last row in the parallel register. */\r
+    uns16 pbin; /**< Parallel binning for this region. */\r
 }\r
-rgn_type, PV_PTR_DECL rgn_ptr;\r
-typedef const rgn_type PV_PTR_DECL rgn_const_ptr;\r
+rgn_type;\r
 \r
-/********************** Class 4: Buffer bit depth flags **********************/\r
-typedef enum\r
-{\r
-    PRECISION_INT8 = 0, PRECISION_UNS8, PRECISION_INT16, PRECISION_UNS16,\r
-    PRECISION_INT32, PRECISION_UNS32\r
-}\r
-PL_PRECISION_MODES;\r
-\r
-/********************** Unsupported types ************************************/\r
 typedef struct io_struct\r
 {\r
-    uns16 io_port;                        /* I/O port address                  */\r
-    uns32 io_type;                        /* I/O port type (TTL, DAC, etc.)    */\r
-    flt64 state;                          /* Desired output state for the port */\r
-    struct io_struct PV_PTR_DECL next;    /* Linked list pointer               */\r
+    uns16 io_port;          /**< I/O port address. */\r
+    uns32 io_type;          /**< I/O port type (TTL, DAC, etc.) */\r
+    flt64 state;            /**< Desired output state for the port. */\r
+    struct io_struct* next; /**< Linked list pointer.*/\r
 }\r
-io_entry, PV_PTR_DECL io_entry_ptr;\r
+io_entry;\r
 \r
-typedef struct\r
+typedef struct io_list\r
 {\r
     io_entry pre_open;\r
     io_entry post_open;\r
@@ -373,76 +552,317 @@ typedef struct
     io_entry pre_close;\r
     io_entry post_close;\r
 }\r
-io_list, PV_PTR_DECL io_list_ptr, PV_PTR_DECL PV_PTR_DECL io_list_ptr_ptr;\r
-\r
-typedef struct\r
-{\r
-    uns16 shutter_close_delay; /* # of milliseconds for the shutter to close   */\r
-    uns16 shutter_open_delay;  /* # of milliseconds for the shutter to open    */\r
-    uns16 rows;                /* Parallel size of the CCD active area         */\r
-    uns16 cols;                /* Serial size of the CCD active area           */\r
-    uns16 prescan;             /* Serial pixels before the active area         */\r
-    uns16 postscan;            /* Serial pixels after the active area          */\r
-    uns16 premask;             /* Parallel rows before the active area         */\r
-    uns16 postmask;            /* Parallel rows after the active area          */\r
-    uns16 preflash;            /* # of milliseconds to flash the diode ring    */\r
-    uns16 clear_count;         /* # of times to clear the CCD before exposure  */\r
-    uns16 preamp_delay;        /* # of milliseconds for the preamp to settle   */\r
-    rs_bool mpp_selectable;    /* Indicates MPP mode can be selected           */\r
-    rs_bool frame_selectable;  /* Indicates frame transfer can be selected     */\r
-    int16 do_clear;            /* Clear: Never, Each Exposure, Each Sequence   */\r
-    int16 open_shutter;        /* Open: Never, Each Exposure, Each Sequence    */\r
-    rs_bool mpp_mode;          /* Enable or disable MPP mode                   */\r
-    rs_bool frame_transfer;    /* Enable or disable frame transfer operation   */\r
-    rs_bool alt_mode;          /* Enable or disable Alternate Parallel mode    */\r
-    uns32 exp_res;             /* Exposure resolution                          */\r
-    io_list_ptr io_hdr;        /* Pointer to list of I/O script control cmds   */\r
-}\r
-active_camera_type, PV_PTR_DECL active_camera_ptr;\r
-\r
-/************************* SINGLE-BYTE MACROS ********************************/\r
-/* These will pull out a single uns8 from either a two-uns8 integer quantity,*/\r
-/* or a four-uns8 integer quantity.  They ARE NOT machine specific.  The     */\r
-/* software using them is responsible for handling the interface requirements*/\r
-/* of the NGC camera, which expects the high uns8 first, then the lower bytes*/\r
-/* in order.  There are several macros:                                      */\r
-/*                                                                           */\r
-/*   ??16_BYTE extract one of two bytes from a two-uns8 integer input        */\r
-/*   VAL_UNS16 produces a two-uns8 integer value from high & low uns8 input  */\r
-/*   ??32_BYTE extracts one of four bytes from a four-uns8 integer input     */\r
-/*   VAL_UNS32 produces a four-uns8 integer value from 4 input bytes         */\r
-\r
-#define MS16_BYTE(two_byte_value) ((uns8) ((two_byte_value) >> 8))\r
-#define LS16_BYTE(two_byte_value) ((uns8) (two_byte_value))\r
-\r
-#define VAL_UNS16(ms_byte,ls_byte) ( (uns16)(((uns16)((uns8)(ms_byte))<<8) |\\r
-                                             ((uns16)((uns8)(ls_byte)))) )\r
-\r
-#define MS32_BYTE(four_byte_val) ((uns8) ((four_byte_val) >> 24))\r
-#define MH32_BYTE(four_byte_val) ((uns8) ((four_byte_val) >> 16))\r
-#define ML32_BYTE(four_byte_val) ((uns8) ((four_byte_val) >> 8))\r
-#define LS32_BYTE(four_byte_val) ((uns8) (four_byte_val))\r
+io_list;\r
+\r
+typedef struct active_camera_type\r
+{\r
+    uns16       shutter_close_delay; /**< Number of milliseconds for the shutter to close. */\r
+    uns16       shutter_open_delay;  /**< Number of milliseconds for the shutter to open. */\r
+    uns16       rows;                /**< Parallel size of the sensor active area. */\r
+    uns16       cols;                /**< Serial size of the sensor active area. */\r
+    uns16       prescan;             /**< Serial pixels before the active area. */\r
+    uns16       postscan;            /**< Serial pixels after the active area. */\r
+    uns16       premask;             /**< Parallel rows before the active area. */\r
+    uns16       postmask;            /**< Parallel rows after the active area. */\r
+    uns16       preflash;            /**< Number of milliseconds to flash the diode ring. */\r
+    uns16       clear_count;         /**< Number of times to clear the sensor before exposure. */\r
+    uns16       preamp_delay;        /**< Number of milliseconds for the preamp to settle. */\r
+    rs_bool     mpp_selectable;      /**< Indicates MPP mode can be selected. */\r
+    rs_bool     frame_selectable;    /**< Indicates frame transfer can be selected. */\r
+    int16       do_clear;            /**< Clear: Never, Each Exposure, Each Sequence. */\r
+    int16       open_shutter;        /**< Open: Never, Each Exposure, Each Sequence. */\r
+    rs_bool     mpp_mode;            /**< Enable or disable MPP mode. */\r
+    rs_bool     frame_transfer;      /**< Enable or disable frame transfer operation. */\r
+    rs_bool     alt_mode;            /**< Enable or disable Alternate Parallel mode. */\r
+    uns32       exp_res;             /**< Exposure resolution. */\r
+    io_list*    io_hdr;              /**< Pointer to list of I/O script control commands. */\r
+}\r
+active_camera_type;\r
+\r
+/******************************************************************************/\r
+/* Start of Frame Metadata Types                                              */\r
+/******************************************************************************/\r
+\r
+/******************************************************************************/\r
+/* Data headers and camera shared types                                       */\r
+\r
+/**\r
+Used in #md_frame_header structure.\r
+Treated as uns8 type.\r
+*/\r
+typedef enum PL_MD_FRAME_FLAGS\r
+{\r
+    PL_MD_FRAME_FLAG_ROI_TS_SUPPORTED = 0x01, /**< check this bit before using the timestampBOR and timestampEOR */\r
+    PL_MD_FRAME_FLAG_UNUSED_2         = 0x02,\r
+    PL_MD_FRAME_FLAG_UNUSED_3         = 0x04,\r
+    PL_MD_FRAME_FLAG_UNUSED_4         = 0x10,\r
+    PL_MD_FRAME_FLAG_UNUSED_5         = 0x20,\r
+    PL_MD_FRAME_FLAG_UNUSED_6         = 0x40,\r
+    PL_MD_FRAME_FLAG_UNUSED_7         = 0x80\r
+}\r
+PL_MD_FRAME_FLAGS;\r
+\r
+/**\r
+Used in #md_frame_roi_header structure.\r
+Treated as uns8 type.\r
+*/\r
+typedef enum PL_MD_ROI_FLAGS\r
+{\r
+    PL_MD_ROI_FLAG_INVALID   = 0x01, /**< ROI is invalid (centroid unavailable). */\r
+    PL_MD_ROI_FLAG_UNUSED_2  = 0x02,\r
+    PL_MD_ROI_FLAG_UNUSED_3  = 0x04,\r
+    PL_MD_ROI_FLAG_UNUSED_4  = 0x10,\r
+    PL_MD_ROI_FLAG_UNUSED_5  = 0x20,\r
+    PL_MD_ROI_FLAG_UNUSED_6  = 0x40,\r
+    PL_MD_ROI_FLAG_UNUSED_7  = 0x80\r
+}\r
+PL_MD_ROI_FLAGS;\r
+\r
+/**\r
+The signature is located in the first 4 bytes of the frame header. The signature\r
+is checked before any metadata-related operations are executed on the buffer.\r
+*/\r
+#define PL_MD_FRAME_SIGNATURE 5328208\r
+\r
+/*\r
+The structures are shared beween platforms, thus we must ensure that no\r
+compiler will apply different struct alignment.\r
+*/\r
+#pragma pack(push)\r
+#pragma pack(1)\r
+\r
+/**\r
+This is a frame header that is located before each frame. The size of this\r
+structure must remain constant. The structure is generated by the camera\r
+and should be 16-byte aligned.\r
+*/\r
+typedef struct md_frame_header\r
+{                                 /* TOTAL: 48 bytes */\r
+    uns32       signature;        /* 4B (see the signature definition) */\r
+    uns8        version;          /* 1B (must be 1 in the first release) */\r
+\r
+    uns32       frameNr;          /* 4B (1-based, reset with each acquisition) */\r
+    uns16       roiCount;         /* 2B (Number of ROIs in the frame, at least 1) */\r
+\r
+    /* The final timestamp = timestampBOF * timestampResNs (in nano-seconds) */\r
+    uns32       timestampBOF;     /* 4B (depends on resolution) */\r
+    uns32       timestampEOF;     /* 4B (depends on resolution) */\r
+    uns32       timestampResNs;   /* 4B (1=1ns, 1000=1us, 5000000=5ms, ...) */\r
+\r
+    /* The final exposure time = exposureTime * exposureTimeResNs (nano-seconds) */\r
+    uns32       exposureTime;     /* 4B (depends on resolution) */\r
+    uns32       exposureTimeResNs;/* 4B (1=1ns, 1000=1us, 5000000=5ms, ...) */\r
+\r
+    /* ROI timestamp resolution is stored here, no need to transfer with each ROI */\r
+    uns32       roiTimestampResNs;/* 4B ROI timestamps resolution */\r
+\r
+    uns8        bitDepth;         /* 1B (must be 10, 13, 14, 16, etc) */\r
+    uns8        colorMask;        /* 1B (corresponds to PL_COLOR_MODES) */\r
+    uns8        flags;            /* 1B Frame flags */\r
+    uns16       extendedMdSize;   /* 2B (must be 0 or actual ext md data size) */\r
+    uns8        _reserved[8];\r
+}\r
+md_frame_header;\r
+\r
+/**\r
+This is a ROI header that is located before every ROI data. The size of this\r
+structure must remain constant. The structure is genereated by the camera\r
+and should be 16-byte aligned.\r
+*/\r
+typedef struct md_frame_roi_header\r
+{                              /* TOTAL: 32 bytes */\r
+    uns16    roiNr;            /* 2B (1-based, reset with each frame) */\r
+\r
+    /* The final timestamp = timestampBOR * roiTimestampResNs */\r
+    uns32    timestampBOR;     /* 4B (depends on RoiTimestampResNs) */\r
+    uns32    timestampEOR;     /* 4B (depends on RoiTimestampResNs) */\r
 \r
+    rgn_type roi;              /* 12B (ROI coordinates and binning) */\r
+\r
+    uns8     flags;            /* 1B ROI flags */\r
+    uns16    extendedMdSize;   /* 2B (must be 0 or actual ext md data size in bytes) */\r
+    uns8    _reserved[7];\r
+}\r
+md_frame_roi_header;\r
+\r
+#pragma pack(pop)\r
+\r
+/******************************************************************************/\r
+/* Extended metadata related structures                                       */\r
+\r
+/**\r
+Maximum number of extended metadata tags supported.\r
+*/\r
+#define PL_MD_EXT_TAGS_MAX_SUPPORTED 255\r
+\r
+/**\r
+Available extended metadata tags.\r
+Currently there are no extended metadata available.\r
+Used in #md_ext_item_info structure.\r
+Used directly as an enum type without casting to any integral type.\r
+*/\r
+typedef enum PL_MD_EXT_TAGS\r
+{\r
+    PL_MD_EXT_TAG_MAX = 0\r
+}\r
+PL_MD_EXT_TAGS;\r
+\r
+/**\r
+This structure describes the extended metadata TAG. This information is\r
+retrieved from an internal table. User need this to correctly read and\r
+display the extended metadata value.\r
+*/\r
+typedef struct md_ext_item_info\r
+{\r
+    PL_MD_EXT_TAGS tag;\r
+    uns16          type;\r
+    uns16          size;\r
+    const char*    name;\r
+}\r
+md_ext_item_info;\r
+\r
+/**\r
+An extended metadata item together with its value. The user will retrieve a\r
+collection of these items.\r
+*/\r
+typedef struct md_ext_item\r
+{\r
+    md_ext_item_info*  tagInfo;\r
+    void*              value;\r
+}\r
+md_ext_item;\r
+\r
+/**\r
+A collection of decoded extended metadata.\r
+*/\r
+typedef struct md_ext_item_collection\r
+{\r
+    md_ext_item     list[PL_MD_EXT_TAGS_MAX_SUPPORTED];\r
+    md_ext_item*    map[PL_MD_EXT_TAGS_MAX_SUPPORTED];\r
+    uns16           count;\r
+}\r
+md_ext_item_collection;\r
+\r
+/**\r
+This is a helper structure that is used to decode the md_frame_roi_header. Since\r
+the header cannot contain any pointers PVCAM will calculate all information\r
+using offsets from frame & ROI headers.\r
+The structure must be created using the pl_md_create_frame_struct() function.\r
+Please note the structure keeps only pointers to data residing in the image\r
+buffer. Once the buffer is deleted the contents of the structure become invalid.\r
+*/\r
+typedef struct md_frame_roi\r
+{\r
+    md_frame_roi_header*    header;         /**< Points directly to the header within the buffer. */\r
+    void*                   data;           /**< Points to the ROI image data. */\r
+    uns32                   dataSize;       /**< Size of the ROI image data in bytes. */\r
+    void*                   extMdData;      /**< Points directly to ext/ MD data within the buffer. */\r
+    uns16                   extMdDataSize;  /**< Size of the ext. MD buffer. */\r
+}\r
+md_frame_roi;\r
+\r
+/**\r
+This is a helper structure that is used to decode the md_frame_header. Since\r
+the header cannot contain any pointers we need to calculate all information\r
+using only offsets.\r
+Please note the structure keeps only pointers to data residing in the image\r
+buffer. Once the buffer is deleted the contents of the structure become invalid.\r
+*/\r
+typedef struct md_frame\r
+{\r
+    md_frame_header*     header;       /**< Points directly to the header withing the buffer. */\r
+    void*                extMdData;    /**< Points directly to ext/ MD data within the buffer. */\r
+    uns16                extMdDataSize;/**< Size of the ext. MD buffer in bytes. */\r
+    rgn_type             impliedRoi;   /**< Implied ROI calculated during decoding. */\r
+\r
+    md_frame_roi*        roiArray;     /**< An array of ROI descriptors. */\r
+    uns16                roiCapacity;  /**< Number of ROIs the structure can hold. */\r
+    uns16                roiCount;     /**< Number of ROIs found during decoding. */\r
+}\r
+md_frame;\r
+\r
+/******************************************************************************/\r
+/*End of Frame Metadata Types                                                 */\r
+/******************************************************************************/\r
+\r
+/******************************************************************************/\r
+/**\r
+@addtogroup grp_pm_deprecated_typedefs\r
+@{\r
+*/\r
+\r
+typedef PVCAM_FRAME_INFO_GUID*  PPVCAM_FRAME_INFO_GUID;\r
+typedef FRAME_INFO*             PFRAME_INFO;\r
+typedef smart_stream_type*      smart_stream_type_ptr;\r
+typedef rgn_type*               rgn_ptr;\r
+typedef const rgn_type*         rgn_const_ptr;\r
+typedef io_entry*               io_entry_ptr;\r
+typedef io_list*                io_list_ptr;\r
+typedef io_list**               io_list_ptr_ptr;\r
+typedef active_camera_type*     active_camera_ptr;\r
+\r
+/** @} */ /* grp_pm_deprecated_typedefs */\r
+\r
+/******************************************************************************/\r
+/**\r
+@defgroup grp_single_byte_macros Single-byte macros\r
+\r
+These will pull out a single uns8 from either a two-uns8 integer quantity,\r
+or a four-uns8 integer quantity and vice versa.\r
+\r
+They ARE NOT machine specific.\r
+\r
+The software using them is responsible for handling the interface requirements\r
+of the NGC camera, which expects the high uns8 first, then the lower bytes\r
+in order.  There are several macros.\r
+\r
+@{\r
+*/\r
+\r
+/** Extracts the most significant byte from a two-uns8 integer input. */\r
+#define MS16_BYTE(two_byte_value) ( (uns8)((two_byte_value) >> 8) )\r
+/** Extracts the least significant byte from a two-uns8 integer input. */\r
+#define LS16_BYTE(two_byte_value) ( (uns8)((two_byte_value) >> 0) )\r
+\r
+/** Extracts the most significant byte from a four-uns8 integer input. */\r
+#define MS32_BYTE(four_byte_value) ( (uns8)((four_byte_value) >> 24) )\r
+/** Extracts the middle-high significant byte from a four-uns8 integer input. */\r
+#define MH32_BYTE(four_byte_value) ( (uns8)((four_byte_value) >> 16) )\r
+/** Extracts the middle-low significant byte from a four-uns8 integer input. */\r
+#define ML32_BYTE(four_byte_value) ( (uns8)((four_byte_value) >>  8) )\r
+/** Extracts the least significant byte from a four-uns8 integer input. */\r
+#define LS32_BYTE(four_byte_value) ( (uns8)((four_byte_value) >>  0) )\r
+\r
+/** Produces a two-uns8 integer value from high & low uns8 input. */\r
+#define VAL_UNS16(ms_byte,ls_byte) (\\r
+    ((uns16)((uns8)(ms_byte)) << 8) |\\r
+    ((uns16)((uns8)(ls_byte)) << 0) )\r
+\r
+/** Produces a four-uns8 integer value from 4 input bytes. */\r
 #define VAL_UNS32(ms_byte,mh_byte,ml_byte,ls_byte) (\\r
-  ((uns32)((uns8)(ms_byte))<<24) |\\r
-  ((uns32)((uns8)(mh_byte))<<16) |\\r
-  ((uns32)((uns8)(ml_byte))<<8)  |\\r
-  ((uns32)((uns8)(ls_byte)) ) )\r
+    ((uns32)((uns8)(ms_byte)) << 24) |\\r
+    ((uns32)((uns8)(mh_byte)) << 16) |\\r
+    ((uns32)((uns8)(ml_byte)) <<  8) |\\r
+    ((uns32)((uns8)(ls_byte)) <<  0) )\r
 \r
-#if defined  _MSC_VER\r
+/** @} */ /* grp_single_byte_macros */\r
 \r
-/***************** Content which is needed to communicate **********************/\r
-/***************** with the PVCAM DLLs *****************************************/\r
+/******************************************************************************/\r
+/* Content which is needed to communicate with the PVCAM DLLs */\r
 \r
 typedef int16 pm_script_hook (int16 hcam,\r
                               uns16 exp_total,\r
                               uns16 rgn_total,\r
-                              rgn_const_ptr rgn_array,\r
+                              const rgn_type* rgn_array,\r
                               int16 mode,\r
                               uns32 exposure_time,\r
-                              uns32_ptr pixels, active_camera_ptr);\r
+                              uns32* pixels,\r
+                              active_camera_type* active_camera);\r
 \r
-/* Data type used by pl_get_param with attribute type (ATTR_TYPE).           */\r
+/**\r
+Data type used by pl_get_param() with #ATTR_TYPE.\r
+@{\r
+*/\r
 #define TYPE_INT16                  1\r
 #define TYPE_INT32                  2\r
 #define TYPE_FLT64                  4\r
@@ -459,20 +879,22 @@ typedef int16 pm_script_hook (int16 hcam,
 #define TYPE_INT64                 16\r
 #define TYPE_SMART_STREAM_TYPE     17\r
 #define TYPE_SMART_STREAM_TYPE_PTR 18\r
+#define TYPE_FLT32                 19\r
+/** @} */\r
 \r
+/*\r
+Defines for classes.\r
+*/\r
+#define CLASS0      0          /* Camera Communications */\r
+#define CLASS2      2          /* Configuration/Setup */\r
+#define CLASS3      3          /* Data Acuisition */\r
 \r
-/* defines for classes                                                       */\r
-#define CLASS0      0          /* Camera Communications                      */\r
-#define CLASS2      2          /* Configuration/Setup                        */\r
-#define CLASS3      3          /* Data Acuisition                            */\r
-#define CLASS93     93         /* Fast frame operations (PIV/ACCUM/Kinetics) */\r
-/************************ Parameter IDs **************************************/\r
-/* Format: TTCCxxxx, where TT = Data type, CC = Class, xxxx = ID number      */\r
-\r
-\r
-/* DEVICE DRIVER PARAMETERS (CLASS 0) */\r
+/******************************************************************************/\r
+/* Start of parameter ID definitions.                                         */\r
+/* Format: TTCCxxxx, where TT = Data type, CC = Class, xxxx = ID number       */\r
+/******************************************************************************/\r
 \r
-/*  Class 0 (next available index for class zero = 6) */\r
+/* DEVICE DRIVER PARAMETERS */\r
 \r
 #define PARAM_DD_INFO_LENGTH        ((CLASS0<<16) + (TYPE_INT16<<24) + 1)\r
 #define PARAM_DD_VERSION            ((CLASS0<<16) + (TYPE_UNS16<<24) + 2)\r
@@ -480,26 +902,33 @@ typedef int16 pm_script_hook (int16 hcam,
 #define PARAM_DD_TIMEOUT            ((CLASS0<<16) + (TYPE_UNS16<<24) + 4)\r
 #define PARAM_DD_INFO               ((CLASS0<<16) + (TYPE_CHAR_PTR<<24) + 5)\r
 \r
-/* Camera Parameters Class 2 variables */\r
+/* CONFIGURATION AND SETUP PARAMETERS */\r
 \r
-/* Class 2 (next available index for class two = 544) */\r
+/* Sensor skip parameters */\r
 \r
-/* CCD skip parameters                                                       */\r
-\r
-/* ADC offset setting.                                                       */\r
+/** ADC offset setting. */\r
 #define PARAM_ADC_OFFSET            ((CLASS2<<16) + (TYPE_INT16<<24)     + 195)\r
-/* CCD chip name.    */\r
+/** Sensor chip name. */\r
 #define PARAM_CHIP_NAME             ((CLASS2<<16) + (TYPE_CHAR_PTR<<24)  + 129)\r
+/** Camera system name. */\r
+#define PARAM_SYSTEM_NAME           ((CLASS2<<16) + (TYPE_CHAR_PTR<<24)  + 130)\r
+/** Camera vendor name. */\r
+#define PARAM_VENDOR_NAME           ((CLASS2<<16) + (TYPE_CHAR_PTR<<24)  + 131)\r
+/** Camera product name. */\r
+#define PARAM_PRODUCT_NAME          ((CLASS2<<16) + (TYPE_CHAR_PTR<<24)  + 132)\r
+/** Camera part number. */\r
+#define PARAM_CAMERA_PART_NUMBER    ((CLASS2<<16) + (TYPE_CHAR_PTR<<24)  + 133)\r
 \r
 #define PARAM_COOLING_MODE          ((CLASS2<<16) + (TYPE_ENUM<<24)      + 214)\r
 #define PARAM_PREAMP_DELAY          ((CLASS2<<16) + (TYPE_UNS16<<24)     + 502)\r
 #define PARAM_COLOR_MODE            ((CLASS2<<16) + (TYPE_ENUM<<24)      + 504)\r
 #define PARAM_MPP_CAPABLE           ((CLASS2<<16) + (TYPE_ENUM<<24)      + 224)\r
 #define PARAM_PREAMP_OFF_CONTROL    ((CLASS2<<16) + (TYPE_UNS32<<24)     + 507)\r
-#define PARAM_SERIAL_NUM            ((CLASS2<<16) + (TYPE_UNS16<<24)     + 508)\r
+#pragma message("PARAM_SERIAL_NUM has been removed because it is not supported.  Compilation will fail with apps that use this parameter, but execution will continue to work until the next release (at that point, execution will start to throw an error).  Please contact support with any concerns.")\r
+\r
+/* Sensor dimensions and physical characteristics */\r
 \r
-/* CCD Dimensions and physical characteristics                               */\r
-/* pre and post dummies of CCD.                                              */\r
+/* Pre and post dummies of sensor. */\r
 #define PARAM_PREMASK               ((CLASS2<<16) + (TYPE_UNS16<<24)     +  53)\r
 #define PARAM_PRESCAN               ((CLASS2<<16) + (TYPE_UNS16<<24)     +  55)\r
 #define PARAM_POSTMASK              ((CLASS2<<16) + (TYPE_UNS16<<24)     +  54)\r
@@ -510,97 +939,90 @@ typedef int16 pm_script_hook (int16 hcam,
 #define PARAM_PIX_SER_SIZE          ((CLASS2<<16) + (TYPE_UNS16<<24)     +  62)\r
 #define PARAM_SUMMING_WELL          ((CLASS2<<16) + (TYPE_BOOLEAN<<24)   + 505)\r
 #define PARAM_FWELL_CAPACITY        ((CLASS2<<16) + (TYPE_UNS32<<24)     + 506)\r
-/* Y dimension of active area of CCD chip */\r
+/** Y dimension of active area of sensor chip. */\r
 #define PARAM_PAR_SIZE              ((CLASS2<<16) + (TYPE_UNS16<<24)     +  57)\r
-/* X dimension of active area of CCD chip */\r
+/** X dimension of active area of sensor chip. */\r
 #define PARAM_SER_SIZE              ((CLASS2<<16) + (TYPE_UNS16<<24)     +  58)\r
-/* X dimension of active area of CCD chip */\r
 #define PARAM_ACCUM_CAPABLE         ((CLASS2<<16) + (TYPE_BOOLEAN<<24)   + 538)\r
 #define PARAM_FLASH_DWNLD_CAPABLE   ((CLASS2<<16) + (TYPE_BOOLEAN<<24)   + 539)\r
 \r
 /* General parameters */\r
 \r
-/* Readout time of current ROI, in ms */\r
+/** Readout time of current ROI in milliseconds. */\r
 #define PARAM_READOUT_TIME          ((CLASS2<<16) + (TYPE_FLT64<<24)     + 179)\r
 \r
-/* CAMERA PARAMETERS (CLASS 2) */\r
-#define PARAM_CLEAR_CYCLES          ((CLASS2<<16) + (TYPE_UNS16<<24)     + 97)\r
+/* CAMERA PARAMETERS */\r
+#define PARAM_CLEAR_CYCLES          ((CLASS2<<16) + (TYPE_UNS16<<24)     +  97)\r
 #define PARAM_CLEAR_MODE            ((CLASS2<<16) + (TYPE_ENUM<<24)      + 523)\r
 #define PARAM_FRAME_CAPABLE         ((CLASS2<<16) + (TYPE_BOOLEAN<<24)   + 509)\r
 #define PARAM_PMODE                 ((CLASS2<<16) + (TYPE_ENUM <<24)     + 524)\r
-#define PARAM_CCS_STATUS            ((CLASS2<<16) + (TYPE_INT16<<24)     + 510)\r
+#pragma message("PARAM_CCS_STATUS has been removed because it is not supported.  Compilation will fail with apps that use this parameter, but execution will continue to work until the next release (at that point, execution will start to throw an error).  Please contact support with any concerns.")\r
 \r
-/* This is the actual temperature of the detector. This is only a get, not a */\r
-/* set                                                                       */\r
+/* These are the temperature parameters for the detector. */\r
 #define PARAM_TEMP                  ((CLASS2<<16) + (TYPE_INT16<<24)     + 525)\r
-/* This is the desired temperature to set. */\r
 #define PARAM_TEMP_SETPOINT         ((CLASS2<<16) + (TYPE_INT16<<24)     + 526)\r
+\r
+/* These are the parameters used for firmware version retrieval. */\r
 #define PARAM_CAM_FW_VERSION        ((CLASS2<<16) + (TYPE_UNS16<<24)     + 532)\r
 #define PARAM_HEAD_SER_NUM_ALPHA    ((CLASS2<<16) + (TYPE_CHAR_PTR<<24)  + 533)\r
 #define PARAM_PCI_FW_VERSION        ((CLASS2<<16) + (TYPE_UNS16<<24)     + 534)\r
-#define PARAM_CAM_FW_FULL_VERSION   ((CLASS2<<16) + (TYPE_CHAR_PTR<<24)  + 534)\r
+#pragma message("PARAM_CAM_FW_FULL_VERSION has been removed because it is not supported.  Compilation will fail with apps that use this parameter, but execution will continue to work until the next release (at that point, execution will start to throw an error).  Please contact support with any concerns.")\r
+#define PARAM_FAN_SPEED_SETPOINT    ((CLASS2<<16) + (TYPE_ENUM<<24)      + 710)\r
 \r
-/* Exsposure mode, timed strobed etc, etc */\r
+/* Exposure mode, timed strobed etc, etc. */\r
 #define PARAM_EXPOSURE_MODE         ((CLASS2<<16) + (TYPE_ENUM<<24)      + 535)\r
 #define PARAM_EXPOSE_OUT_MODE       ((CLASS2<<16) + (TYPE_ENUM<<24)      + 560)\r
 \r
-/* SPEED TABLE PARAMETERS (CLASS 2) */\r
-\r
+/* SPEED TABLE PARAMETERS */\r
 #define PARAM_BIT_DEPTH             ((CLASS2<<16) + (TYPE_INT16<<24)     + 511)\r
 #define PARAM_GAIN_INDEX            ((CLASS2<<16) + (TYPE_INT16<<24)     + 512)\r
 #define PARAM_SPDTAB_INDEX          ((CLASS2<<16) + (TYPE_INT16<<24)     + 513)\r
-/* define which port (amplifier on shift register) to use. */\r
+#define PARAM_GAIN_NAME             ((CLASS2<<16) + (TYPE_CHAR_PTR<<24)  + 514)\r
 #define PARAM_READOUT_PORT          ((CLASS2<<16) + (TYPE_ENUM<<24)      + 247)\r
 #define PARAM_PIX_TIME              ((CLASS2<<16) + (TYPE_UNS16<<24)     + 516)\r
 \r
-/* SHUTTER PARAMETERS (CLASS 2) */\r
-\r
+/* SHUTTER PARAMETERS */\r
 #define PARAM_SHTR_CLOSE_DELAY      ((CLASS2<<16) + (TYPE_UNS16<<24)     + 519)\r
 #define PARAM_SHTR_OPEN_DELAY       ((CLASS2<<16) + (TYPE_UNS16<<24)     + 520)\r
 #define PARAM_SHTR_OPEN_MODE        ((CLASS2<<16) + (TYPE_ENUM <<24)     + 521)\r
 #define PARAM_SHTR_STATUS           ((CLASS2<<16) + (TYPE_ENUM <<24)     + 522)\r
-#define PARAM_SHTR_CLOSE_DELAY_UNIT ((CLASS2<<16) + (TYPE_ENUM <<24)     + 543)  /* use enum TIME_UNITS to specify the unit */\r
-\r
-\r
-/* I/O PARAMETERS (CLASS 2) */\r
 \r
+/* I/O PARAMETERS */\r
 #define PARAM_IO_ADDR               ((CLASS2<<16) + (TYPE_UNS16<<24)     + 527)\r
 #define PARAM_IO_TYPE               ((CLASS2<<16) + (TYPE_ENUM<<24)      + 528)\r
 #define PARAM_IO_DIRECTION          ((CLASS2<<16) + (TYPE_ENUM<<24)      + 529)\r
 #define PARAM_IO_STATE              ((CLASS2<<16) + (TYPE_FLT64<<24)     + 530)\r
 #define PARAM_IO_BITDEPTH           ((CLASS2<<16) + (TYPE_UNS16<<24)     + 531)\r
 \r
-/* GAIN MULTIPLIER PARAMETERS (CLASS 2) */\r
-\r
+/* GAIN MULTIPLIER PARAMETERS */\r
 #define PARAM_GAIN_MULT_FACTOR      ((CLASS2<<16) + (TYPE_UNS16<<24)     + 537)\r
 #define PARAM_GAIN_MULT_ENABLE      ((CLASS2<<16) + (TYPE_BOOLEAN<<24)   + 541)\r
 \r
-/*  POST PROCESSING PARAMETERS (CLASS 2) */\r
-#define PARAM_PP_FEAT_NAME          ((CLASS2<<16) + (TYPE_CHAR_PTR<<24)    +  542)\r
+/* POST PROCESSING PARAMETERS */\r
+#define PARAM_PP_FEAT_NAME          ((CLASS2<<16) + (TYPE_CHAR_PTR<<24) +  542)\r
 #define PARAM_PP_INDEX              ((CLASS2<<16) + (TYPE_INT16<<24)    +  543)\r
-#define PARAM_ACTUAL_GAIN           ((CLASS2<<16) + (TYPE_UNS16<<24)    +  544)\r
+#define PARAM_ACTUAL_GAIN           ((CLASS2<<16) + (TYPE_UNS16<<24)     + 544)\r
 #define PARAM_PP_PARAM_INDEX        ((CLASS2<<16) + (TYPE_INT16<<24)    +  545)\r
-#define PARAM_PP_PARAM_NAME         ((CLASS2<<16) + (TYPE_CHAR_PTR<<24)    +  546)\r
+#define PARAM_PP_PARAM_NAME         ((CLASS2<<16) + (TYPE_CHAR_PTR<<24) +  546)\r
 #define PARAM_PP_PARAM              ((CLASS2<<16) + (TYPE_UNS32<<24)    +  547)\r
-#define PARAM_READ_NOISE            ((CLASS2<<16) + (TYPE_UNS16<<24)    +  548)\r
+#define PARAM_READ_NOISE            ((CLASS2<<16) + (TYPE_UNS16<<24)     + 548)\r
 #define PARAM_PP_FEAT_ID            ((CLASS2<<16) + (TYPE_UNS16<<24)    +  549)\r
 #define PARAM_PP_PARAM_ID           ((CLASS2<<16) + (TYPE_UNS16<<24)    +  550)\r
 \r
-\r
-/*  S.M.A.R.T. STREAMING PARAMETERS (CLASS 2) */\r
-#define PARAM_SMART_STREAM_MODE_ENABLED     ((CLASS2<<16) + (TYPE_BOOLEAN<<24)    +  700)\r
+/* S.M.A.R.T. STREAMING PARAMETERS */\r
+#define PARAM_SMART_STREAM_MODE_ENABLED     ((CLASS2<<16) + (TYPE_BOOLEAN<<24)  +  700)\r
 #define PARAM_SMART_STREAM_MODE             ((CLASS2<<16) + (TYPE_UNS16<<24)    +  701)\r
-#define PARAM_SMART_STREAM_EXP_PARAMS       ((CLASS2<<16) + (TYPE_VOID_PTR<<24)    +  702)\r
-#define PARAM_SMART_STREAM_DLY_PARAMS       ((CLASS2<<16) + (TYPE_VOID_PTR<<24)    +  703)\r
+#define PARAM_SMART_STREAM_EXP_PARAMS       ((CLASS2<<16) + (TYPE_VOID_PTR<<24) +  702)\r
+#define PARAM_SMART_STREAM_DLY_PARAMS       ((CLASS2<<16) + (TYPE_VOID_PTR<<24) +  703)\r
 \r
-/* Digital image correction parameters (CLASS 2) */\r
-#define PARAM_COLUMN_CORRECTION_STATE        ((CLASS2<<16) + (TYPE_BOOLEAN<<24)    +  704)\r
+/* DATA AQUISITION PARAMETERS */\r
 \r
-/* ACQUISITION PARAMETERS (CLASS 3) */\r
+/* ACQUISITION PARAMETERS */\r
 #define PARAM_EXP_TIME              ((CLASS3<<16) + (TYPE_UNS16<<24)     +   1)\r
 #define PARAM_EXP_RES               ((CLASS3<<16) + (TYPE_ENUM<<24)      +   2)\r
-#define PARAM_EXP_MIN_TIME          ((CLASS3<<16) + (TYPE_FLT64<<24)     +   3)\r
+#pragma message("PARAM_EXP_MIN_TIME has been removed because it is not supported.  Compilation will fail with apps that use this parameter, but execution will continue to work until the next release (at that point, execution will start to throw an error).  Please contact support with any concerns.")\r
 #define PARAM_EXP_RES_INDEX         ((CLASS3<<16) + (TYPE_UNS16<<24)     +   4)\r
+#define PARAM_EXPOSURE_TIME         ((CLASS3<<16) + (TYPE_UNS64<<24)     +   8)\r
 \r
 /* PARAMETERS FOR  BEGIN and END of FRAME Interrupts */\r
 #define PARAM_BOF_EOF_ENABLE        ((CLASS3<<16) + (TYPE_ENUM<<24)      +   5)\r
@@ -609,10 +1031,35 @@ typedef int16 pm_script_hook (int16 hcam,
 \r
 /* Test to see if hardware/software can perform circular buffer */\r
 #define PARAM_CIRC_BUFFER           ((CLASS3<<16) + (TYPE_BOOLEAN<<24)   + 299)\r
+#define PARAM_FRAME_BUFFER_SIZE     ((CLASS3<<16) + (TYPE_UNS64<<24)     + 300)\r
+\r
+/* Supported binning reported by camera */\r
+#define PARAM_BINNING_SER           ((CLASS3<<16) + (TYPE_ENUM<<24)      + 165)\r
+#define PARAM_BINNING_PAR           ((CLASS3<<16) + (TYPE_ENUM<<24)      + 166)\r
+\r
+#pragma message("PARAM_CURRENT_PVTIME has been removed because it is not supported.  Compilation will fail with apps that use this parameter, but execution will continue to work until the next release (at that point, execution will start to throw an error).  Please contact support with any concerns.")\r
 \r
-#define PARAM_CURRENT_PVTIME        ((CLASS3<<16) + (TYPE_INT16<<24)     + 167)\r
+/* Parameters related to multiple ROIs and Centroids */\r
+#define PARAM_METADATA_ENABLED      ((CLASS3<<16) + (TYPE_BOOLEAN<<24)   + 168)\r
+#define PARAM_ROI_COUNT             ((CLASS3<<16) + (TYPE_UNS16  <<24)   + 169)\r
+#define PARAM_CENTROIDS_ENABLED     ((CLASS3<<16) + (TYPE_BOOLEAN<<24)   + 170)\r
+#define PARAM_CENTROIDS_RADIUS      ((CLASS3<<16) + (TYPE_UNS16  <<24)   + 171)\r
+#define PARAM_CENTROIDS_COUNT       ((CLASS3<<16) + (TYPE_UNS16  <<24)   + 172)\r
+\r
+/* Parameters related to triggering table */\r
+#define PARAM_TRIGTAB_SIGNAL        ((CLASS3<<16) + (TYPE_ENUM<<24)      + 180)\r
+#define PARAM_LAST_MUXED_SIGNAL     ((CLASS3<<16) + (TYPE_UNS8<<24)      + 181)\r
+\r
+/******************************************************************************/\r
+/* End of parameter ID definitions.                                           */\r
+/******************************************************************************/\r
+\r
+/******************************************************************************/\r
+/* Start of function prototypes.                                              */\r
+/******************************************************************************/\r
+\r
+#ifndef PV_EMBEDDED\r
 \r
-/**************************** Function Prototypes ****************************/\r
 #ifdef PV_C_PLUS_PLUS\r
 extern "C"\r
 {\r
@@ -621,7 +1068,7 @@ extern "C"
     /*****************************************************************************/\r
     /*****************************************************************************/\r
     /*                                                                           */\r
-    /*             Class 0: Camera Communications Function Prototypes            */\r
+    /*                 Camera Communications Function Prototypes                 */\r
     /*                                                                           */\r
     /*****************************************************************************/\r
     /*****************************************************************************/\r
@@ -639,7 +1086,7 @@ extern "C"
     /*                     rrrr = Minor #, and TTTT = Trivial #                  */\r
     /*****************************************************************************/\r
 \r
-    rs_bool PV_DECL pl_pvcam_get_ver (uns16_ptr pvcam_version);\r
+    rs_bool PV_DECL pl_pvcam_get_ver (uns16* pvcam_version);\r
     rs_bool PV_DECL pl_pvcam_init (void);\r
     rs_bool PV_DECL pl_pvcam_uninit (void);\r
 \r
@@ -651,23 +1098,37 @@ extern "C"
     /* o_mode            Mode to open the camera in (must be OPEN_EXCLUSIVE)     */\r
     /*****************************************************************************/\r
 \r
-    rs_bool PV_DECL pl_cam_check (int16 hcam);\r
+    /**\r
+    @addtogroup grp_pm_deprecated_functions\r
+    @{\r
+    */\r
+    DEPRECATED rs_bool PV_DECL pl_cam_check (int16 hcam);\r
+    /** @} */\r
     rs_bool PV_DECL pl_cam_close (int16 hcam);\r
-    rs_bool PV_DECL pl_cam_get_name (int16 cam_num, char_ptr camera_name);\r
-    rs_bool PV_DECL pl_cam_get_total (int16_ptr totl_cams);\r
-    rs_bool PV_DECL pl_cam_open (char_ptr camera_name, int16_ptr hcam,\r
-                                 int16 o_mode);\r
+    rs_bool PV_DECL pl_cam_get_name (int16 cam_num, char* camera_name);\r
+    rs_bool PV_DECL pl_cam_get_total (int16* totl_cams);\r
+    rs_bool PV_DECL pl_cam_open (char* camera_name, int16* hcam, int16 o_mode);\r
 \r
-    rs_bool PV_DECL pl_cam_register_callback (int16 hcam, PL_CALLBACK_EVENT CallbackEvent, void *Callback);\r
-    rs_bool PV_DECL pl_cam_register_callback_ex (int16 hcam, PL_CALLBACK_EVENT CallbackEvent, void *Callback, void *Context);\r
-    rs_bool PV_DECL pl_cam_register_callback_ex2(int16 hcam, PL_CALLBACK_EVENT CallbackEvent, void *Callback);\r
-    rs_bool PV_DECL pl_cam_register_callback_ex3(int16 hcam, PL_CALLBACK_EVENT CallbackEvent, void *Callback, void *Context);\r
-    rs_bool PV_DECL pl_cam_deregister_callback (int16 hcam, PL_CALLBACK_EVENT CallbackEvent);\r
+    /*****************************************************************************/\r
+    /* callback_event    Callback event to register for (see PL_CALLBACK_EVENT)  */\r
+    /* callback          Callback function pointer                               */\r
+    /* contex            Pointer to custom user contex                           */\r
+    /*****************************************************************************/\r
+\r
+    rs_bool PV_DECL pl_cam_register_callback (int16 hcam, int32 callback_event,\r
+                                              void* callback);\r
+    rs_bool PV_DECL pl_cam_register_callback_ex (int16 hcam, int32 callback_event,\r
+                                                 void* callback, void* context);\r
+    rs_bool PV_DECL pl_cam_register_callback_ex2 (int16 hcam, int32 callback_event,\r
+                                                 void* callback);\r
+    rs_bool PV_DECL pl_cam_register_callback_ex3 (int16 hcam, int32 callback_event,\r
+                                                 void* callback, void* context);\r
+    rs_bool PV_DECL pl_cam_deregister_callback (int16 hcam, int32 callback_event);\r
 \r
     /*****************************************************************************/\r
     /*****************************************************************************/\r
     /*                                                                           */\r
-    /*                Class 1: Error Reporting Function Prototypes               */\r
+    /*                     Error Reporting Function Prototypes                   */\r
     /*                                                                           */\r
     /*****************************************************************************/\r
     /*****************************************************************************/\r
@@ -680,13 +1141,13 @@ extern "C"
     /*****************************************************************************/\r
 \r
     int16   PV_DECL pl_error_code (void);\r
-    rs_bool PV_DECL pl_error_message (int16 err_code, char_ptr msg);\r
+    rs_bool PV_DECL pl_error_message (int16 err_code, char* msg);\r
 \r
 \r
     /*****************************************************************************/\r
     /*****************************************************************************/\r
     /*                                                                           */\r
-    /*              Class 2: Configuration/Setup Function Prototypes             */\r
+    /*                   Configuration/Setup Function Prototypes                 */\r
     /*                                                                           */\r
     /*****************************************************************************/\r
     /*****************************************************************************/\r
@@ -703,31 +1164,29 @@ extern "C"
     /*****************************************************************************/\r
 \r
     rs_bool PV_DECL pl_get_param (int16 hcam, uns32 param_id,\r
-                                  int16 param_attribute, void_ptr param_value);\r
+                                  int16 param_attribute, void* param_value);\r
     rs_bool PV_DECL pl_set_param (int16 hcam, uns32 param_id,\r
-                                  void_ptr param_value);\r
+                                  void* param_value);\r
     rs_bool PV_DECL pl_get_enum_param (int16 hcam, uns32 param_id, uns32 index,\r
-                                       int32_ptr value, char_ptr desc,\r
+                                       int32* value, char* desc,\r
                                        uns32 length);\r
     rs_bool PV_DECL pl_enum_str_length (int16 hcam, uns32 param_id, uns32 index,\r
-                                        uns32_ptr length);\r
+                                        uns32* length);\r
     rs_bool PV_DECL pl_pp_reset (int16 hcam);\r
 \r
-    rs_bool PV_DECL pl_create_smart_stream_struct(smart_stream_type_ptr *array,\r
-            uns16 entries);\r
-\r
-    rs_bool PV_DECL pl_release_smart_stream_struct(smart_stream_type_ptr *array);\r
-\r
-    rs_bool PV_DECL pl_create_frame_info_struct(PFRAME_INFO * new_frame);\r
+    rs_bool PV_DECL pl_create_smart_stream_struct(smart_stream_type** array,\r
+                                                  uns16 entries);\r
 \r
-    rs_bool PV_DECL pl_release_frame_info_struct(PFRAME_INFO frame_to_delete);\r
+    rs_bool PV_DECL pl_release_smart_stream_struct(smart_stream_type** array);\r
 \r
+    rs_bool PV_DECL pl_create_frame_info_struct(FRAME_INFO** new_frame);\r
 \r
+    rs_bool PV_DECL pl_release_frame_info_struct(FRAME_INFO* frame_to_delete);\r
 \r
     /*****************************************************************************/\r
     /*****************************************************************************/\r
     /*                                                                           */\r
-    /*               Class 3: Data Acquisition Function Prototypes               */\r
+    /*                   Data Acquisition Function Prototypes                    */\r
     /*                                                                           */\r
     /*****************************************************************************/\r
     /*****************************************************************************/\r
@@ -766,34 +1225,32 @@ extern "C"
     /* tlimit            Time in milliseconds to wait for a transfer             */\r
     /*****************************************************************************/\r
 \r
-    rs_bool PV_DECL pl_exp_init_seq (void);\r
-    rs_bool PV_DECL pl_exp_uninit_seq (void);\r
     rs_bool PV_DECL pl_exp_setup_seq (int16 hcam, uns16 exp_total,\r
-                                      uns16 rgn_total, rgn_const_ptr rgn_array,\r
+                                      uns16 rgn_total, const rgn_type* rgn_array,\r
                                       int16 exp_mode, uns32 exposure_time,\r
-                                      uns32_ptr exp_bytes);\r
-    rs_bool PV_DECL pl_exp_start_seq (int16 hcam, void_ptr pixel_stream);\r
+                                      uns32* exp_bytes);\r
+    rs_bool PV_DECL pl_exp_start_seq (int16 hcam, void* pixel_stream);\r
     rs_bool PV_DECL pl_exp_setup_cont (int16 hcam, uns16 rgn_total,\r
-                                       rgn_const_ptr rgn_array, int16 exp_mode,\r
-                                       uns32 exposure_time, uns32_ptr exp_bytes,\r
+                                       const rgn_type* rgn_array, int16 exp_mode,\r
+                                       uns32 exposure_time, uns32* exp_bytes,\r
                                        int16 buffer_mode);\r
-    rs_bool PV_DECL pl_exp_start_cont (int16 hcam, void_ptr pixel_stream,\r
-                                       uns32 size);\r
-    rs_bool PV_DECL pl_exp_check_status (int16 hcam, int16_ptr status,\r
-                                         uns32_ptr bytes_arrived);\r
-    rs_bool PV_DECL pl_exp_check_cont_status (int16 hcam, int16_ptr status,\r
-            uns32_ptr bytes_arrived,\r
-            uns32_ptr buffer_cnt);\r
-    rs_bool PV_DECL pl_exp_check_cont_status_ex (int16 hcam, int16_ptr status, uns32_ptr byte_cnt, uns32_ptr buffer_cnt, PFRAME_INFO pFrameInfo);\r
-    rs_bool PV_DECL pl_exp_get_latest_frame (int16 hcam, void_ptr_ptr frame);\r
-    rs_bool PV_DECL pl_exp_get_latest_frame_ex (int16 hcam, void_ptr_ptr frame, PFRAME_INFO pFrameInfo);\r
-    rs_bool PV_DECL pl_exp_get_oldest_frame (int16 hcam, void_ptr_ptr frame);\r
-    rs_bool PV_DECL pl_exp_get_oldest_frame_ex (int16 hcam, void_ptr_ptr frame, PFRAME_INFO pFrameInfo);\r
+    rs_bool PV_DECL pl_exp_start_cont (int16 hcam, void* pixel_stream, uns32 size);\r
+    rs_bool PV_DECL pl_exp_check_status (int16 hcam, int16* status, uns32* bytes_arrived);\r
+    rs_bool PV_DECL pl_exp_check_cont_status (int16 hcam, int16* status,\r
+                                              uns32* bytes_arrived, uns32* buffer_cnt);\r
+    rs_bool PV_DECL pl_exp_check_cont_status_ex (int16 hcam, int16* status,\r
+                                                 uns32* byte_cnt, uns32* buffer_cnt,\r
+                                                 FRAME_INFO* pFrameInfo);\r
+    rs_bool PV_DECL pl_exp_get_latest_frame (int16 hcam, void** frame);\r
+    rs_bool PV_DECL pl_exp_get_latest_frame_ex (int16 hcam, void** frame,\r
+                                                FRAME_INFO* pFrameInfo);\r
+    rs_bool PV_DECL pl_exp_get_oldest_frame (int16 hcam, void** frame);\r
+    rs_bool PV_DECL pl_exp_get_oldest_frame_ex (int16 hcam, void** frame,\r
+                                                FRAME_INFO* pFrameInfo);\r
     rs_bool PV_DECL pl_exp_unlock_oldest_frame (int16 hcam);\r
     rs_bool PV_DECL pl_exp_stop_cont (int16 hcam, int16 cam_state);\r
     rs_bool PV_DECL pl_exp_abort (int16 hcam, int16 cam_state);\r
-    rs_bool PV_DECL pl_exp_finish_seq (int16 hcam, void_ptr pixel_stream,\r
-                                       int16 hbuf);\r
+    rs_bool PV_DECL pl_exp_finish_seq (int16 hcam, void* pixel_stream, int16 hbuf);\r
 \r
     /*****************************************************************************/\r
     /* addr              Specifies which I/O address to control                  */\r
@@ -805,218 +1262,316 @@ extern "C"
     rs_bool PV_DECL pl_io_clear_script_control (int16 hcam);\r
 \r
     /*****************************************************************************/\r
-    /* The following functions are obsolete and their corresponding PARAM_       */\r
-    /* parameters should be used with pl_get_param(), pl_set_param(),            */\r
-    /* pl_get_enum_param(), and pl_enum_str_length()                             */\r
-    /*****************************************************************************/\r
-\r
-    rs_bool PV_DECL pl_dd_get_info (int16 hcam, int16 bytes, char_ptr text);\r
+    /**\r
+    @addtogroup grp_pm_deprecated_functions\r
+    Most of the functions are obsolete and their corresponding PARAM_\r
+    parameters should be used with pl_get_param(), pl_set_param(),\r
+    pl_get_enum_param() and pl_enum_str_length().\r
+    @{\r
+    */\r
+    \r
+    DEPRECATED rs_bool PV_DECL pl_exp_init_seq (void);\r
+    DEPRECATED rs_bool PV_DECL pl_exp_uninit_seq (void);\r
+    DEPRECATED rs_bool PV_DECL pl_dd_get_info (int16 hcam, int16 bytes, char* text);\r
     /* Use PARAM_DD_INFO                                              */\r
-    rs_bool PV_DECL pl_dd_get_info_length (int16 hcam, int16_ptr bytes);\r
+    DEPRECATED rs_bool PV_DECL pl_dd_get_info_length (int16 hcam, int16* bytes);\r
     /* Use PARAM_DD_INFO_LENGTH                                       */\r
-    rs_bool PV_DECL pl_dd_get_ver (int16 hcam, uns16_ptr dd_version);\r
+    DEPRECATED rs_bool PV_DECL pl_dd_get_ver (int16 hcam, uns16* dd_version);\r
     /* Use PARAM_DD_VERSION                                           */\r
-    rs_bool PV_DECL pl_dd_get_retries (int16 hcam, uns16_ptr max_retries);\r
-    rs_bool PV_DECL pl_dd_set_retries (int16 hcam, uns16 max_retries);\r
+    DEPRECATED rs_bool PV_DECL pl_dd_get_retries (int16 hcam, uns16* max_retries);\r
+    DEPRECATED rs_bool PV_DECL pl_dd_set_retries (int16 hcam, uns16 max_retries);\r
     /* Use PARAM_DD_RETRIES                                           */\r
-    rs_bool PV_DECL pl_dd_get_timeout (int16 hcam, uns16_ptr m_sec);\r
-    rs_bool PV_DECL pl_dd_set_timeout (int16 hcam, uns16 m_sec);\r
+    DEPRECATED rs_bool PV_DECL pl_dd_get_timeout (int16 hcam, uns16* m_sec);\r
+    DEPRECATED rs_bool PV_DECL pl_dd_set_timeout (int16 hcam, uns16 m_sec);\r
     /* Use PARAM_DD_TIMEOUT                                           */\r
-    rs_bool PV_DECL pl_ccd_get_adc_offset (int16 hcam, int16_ptr offset);\r
-    rs_bool PV_DECL pl_ccd_set_adc_offset (int16 hcam, int16 offset);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_adc_offset (int16 hcam, int16* offset);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_set_adc_offset (int16 hcam, int16 offset);\r
     /* Use PARAM_ADC_OFFSET                                           */\r
-    rs_bool PV_DECL pl_ccd_get_chip_name (int16 hcam, char_ptr chip_name);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_chip_name (int16 hcam, char* chip_name);\r
     /* Use PARAM_CHIP_NAME                                            */\r
-    rs_bool PV_DECL pl_ccd_get_clear_cycles (int16 hcam, uns16_ptr clear_cycles);\r
-    rs_bool PV_DECL pl_ccd_set_clear_cycles (int16 hcam, uns16 clr_cycles);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_clear_cycles (int16 hcam, uns16* clear_cycles);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_set_clear_cycles (int16 hcam, uns16 clr_cycles);\r
     /* Use PARAM_CLEAR_CYCLES                                         */\r
-    rs_bool PV_DECL pl_ccd_get_clear_mode (int16 hcam, int16_ptr clear_mode);\r
-    rs_bool PV_DECL pl_ccd_set_clear_mode (int16 hcam, int16 ccd_clear);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_clear_mode (int16 hcam, int16* clear_mode);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_set_clear_mode (int16 hcam, int16 ccd_clear);\r
     /* Use PARAM_CLEAR_MODE                                           */\r
-    rs_bool PV_DECL pl_ccd_get_color_mode (int16 hcam, uns16_ptr color_mode);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_color_mode (int16 hcam, uns16* color_mode);\r
     /* Use PARAM_COLOR_MODE                                           */\r
-    rs_bool PV_DECL pl_ccd_get_cooling_mode (int16 hcam, int16_ptr cooling);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_cooling_mode (int16 hcam, int16* cooling);\r
     /* Use PARAM_COOLING_MODE                                         */\r
-    rs_bool PV_DECL pl_ccd_get_frame_capable (int16 hcam,\r
-            rs_bool_ptr frame_capable);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_frame_capable (int16 hcam, rs_bool* frame_capable);\r
     /* Use PARAM_FRAME_CAPABLE                                        */\r
-    rs_bool PV_DECL pl_ccd_get_fwell_capacity (int16 hcam,\r
-            uns32_ptr fwell_capacity);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_fwell_capacity (int16 hcam, uns32* fwell_capacity);\r
     /* Use PARAM_FWELL_CAPACITY                                       */\r
-    rs_bool PV_DECL pl_ccd_get_mpp_capable (int16 hcam, int16_ptr mpp_capable);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_mpp_capable (int16 hcam, int16* mpp_capable);\r
     /* Use PARAM_MPP_CAPABLE                                          */\r
-    rs_bool PV_DECL pl_ccd_get_preamp_dly (int16 hcam, uns16_ptr preamp_dly);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_preamp_dly (int16 hcam, uns16* preamp_dly);\r
     /* Use PARAM_PREAMP_DELAY                                         */\r
-    rs_bool PV_DECL pl_ccd_get_preamp_off_control (int16 hcam,\r
-            uns32_ptr preamp_off_control);\r
-    rs_bool PV_DECL pl_ccd_set_preamp_off_control (int16 hcam,\r
-            uns32 preamp_off_control);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_preamp_off_control (int16 hcam,\r
+                                                              uns32* preamp_off_control);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_set_preamp_off_control (int16 hcam,\r
+                                                              uns32 preamp_off_control);\r
     /* Use PARAM_PREAMP_OFF_CONTROL                                   */\r
-    rs_bool PV_DECL pl_ccd_get_preflash (int16 hcam, uns16_ptr pre_flash);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_preflash (int16 hcam, uns16* pre_flash);\r
     /* Use PARAM_PREFLASH                                             */\r
-    rs_bool PV_DECL pl_ccd_get_pmode (int16 hcam, int16_ptr pmode);\r
-    rs_bool PV_DECL pl_ccd_set_pmode (int16 hcam, int16 pmode);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_pmode (int16 hcam, int16* pmode);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_set_pmode (int16 hcam, int16 pmode);\r
     /* Use PARAM_PMODE                                                */\r
-    rs_bool PV_DECL pl_ccd_get_premask (int16 hcam, uns16_ptr pre_mask);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_premask (int16 hcam, uns16* pre_mask);\r
     /* Use PARAM_PREMASK                                              */\r
-    rs_bool PV_DECL pl_ccd_get_prescan (int16 hcam, uns16_ptr prescan);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_prescan (int16 hcam, uns16* prescan);\r
     /* Use PARAM_PRESCAN                                              */\r
-    rs_bool PV_DECL pl_ccd_get_postmask (int16 hcam, uns16_ptr post_mask);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_postmask (int16 hcam, uns16* post_mask);\r
     /* Use PARAM_POSTMASK                                             */\r
-    rs_bool PV_DECL pl_ccd_get_postscan (int16 hcam, uns16_ptr postscan);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_postscan (int16 hcam, uns16* postscan);\r
     /* Use PARAM_POSTSCAN                                             */\r
-    rs_bool PV_DECL pl_ccd_get_par_size (int16 hcam, uns16_ptr par_size);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_par_size (int16 hcam, uns16* par_size);\r
     /* Use PARAM_PAR_SIZE                                             */\r
-    rs_bool PV_DECL pl_ccd_get_ser_size (int16 hcam, uns16_ptr ser_size);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_ser_size (int16 hcam, uns16* ser_size);\r
     /* Use PARAM_SER_SIZE                                             */\r
-    rs_bool PV_DECL pl_ccd_get_serial_num (int16 hcam, uns16_ptr serial_num);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_serial_num (int16 hcam, uns16* serial_num);\r
     /* Use PARAM_SERIAL_NUM                                           */\r
-    rs_bool PV_DECL pl_ccs_get_status (int16 hcam, int16_ptr ccs_status);\r
+    DEPRECATED rs_bool PV_DECL pl_ccs_get_status (int16 hcam, int16* ccs_status);\r
     /* Use PARAM_CCS_STATUS                                           */\r
-    rs_bool PV_DECL pl_ccd_get_summing_well (int16 hcam,\r
-            rs_bool_ptr s_well_exists);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_summing_well (int16 hcam, rs_bool* s_well_exists);\r
     /* Use PARAM_SUMMING_WELL                                         */\r
-    rs_bool PV_DECL pl_ccd_get_tmp (int16 hcam, int16_ptr cur_tmp);\r
-    rs_bool PV_DECL pl_ccd_get_tmp_range (int16 hcam, int16_ptr tmp_hi_val,\r
-                                          int16_ptr tmp_lo_val);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_tmp (int16 hcam, int16* cur_tmp);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_tmp_range (int16 hcam, int16* tmp_hi_val,\r
+                                                     int16* tmp_lo_val);\r
     /* Use PARAM_TEMP                                                 */\r
-    rs_bool PV_DECL pl_ccd_get_tmp_setpoint (int16 hcam, int16_ptr tmp_setpoint);\r
-    rs_bool PV_DECL pl_ccd_set_tmp_setpoint (int16 hcam, int16 tmp_setpoint);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_tmp_setpoint (int16 hcam, int16* tmp_setpoint);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_set_tmp_setpoint (int16 hcam, int16 tmp_setpoint);\r
     /* Use PARAM_TEMP_SETPOINT                                        */\r
-    rs_bool PV_DECL pl_ccd_set_readout_port (int16 , int16 );\r
-    rs_bool PV_DECL pl_ccd_get_pix_par_dist (int16 hcam, uns16_ptr pix_par_dist);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_set_readout_port (int16 , int16 );\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_pix_par_dist (int16 hcam, uns16* pix_par_dist);\r
     /* Use PARAM_PIX_PAR_DIST                                         */\r
-    rs_bool PV_DECL pl_ccd_get_pix_par_size (int16 hcam, uns16_ptr pix_par_size);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_pix_par_size (int16 hcam, uns16* pix_par_size);\r
     /* Use PARAM_PIX_PAR_SIZE                                         */\r
-    rs_bool PV_DECL pl_ccd_get_pix_ser_dist (int16 hcam, uns16_ptr pix_ser_dist);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_pix_ser_dist (int16 hcam, uns16* pix_ser_dist);\r
     /* Use PARAM_PIX_SER_DIST                                         */\r
-    rs_bool PV_DECL pl_ccd_get_pix_ser_size (int16 hcam, uns16_ptr pix_ser_size);\r
+    DEPRECATED rs_bool PV_DECL pl_ccd_get_pix_ser_size (int16 hcam, uns16* pix_ser_size);\r
     /* Use PARAM_PIX_SER_SIZE                                         */\r
-    rs_bool PV_DECL pl_spdtab_get_bits (int16 hcam, int16_ptr spdtab_bits);\r
+    DEPRECATED rs_bool PV_DECL pl_spdtab_get_bits (int16 hcam, int16* spdtab_bits);\r
     /* Use PARAM_BIT_DEPTH                                            */\r
-    rs_bool PV_DECL pl_spdtab_get_gain (int16 hcam, int16_ptr spdtab_gain);\r
-    rs_bool PV_DECL pl_spdtab_set_gain (int16 hcam, int16 spdtab_gain);\r
-    rs_bool PV_DECL pl_spdtab_get_max_gain (int16 hcam,\r
-                                            int16_ptr spdtab_max_gain);\r
+    DEPRECATED rs_bool PV_DECL pl_spdtab_get_gain (int16 hcam, int16* spdtab_gain);\r
+    DEPRECATED rs_bool PV_DECL pl_spdtab_set_gain (int16 hcam, int16 spdtab_gain);\r
+    DEPRECATED rs_bool PV_DECL pl_spdtab_get_max_gain (int16 hcam,\r
+                                                       int16* spdtab_max_gain);\r
     /* Use PARAM_GAIN_INDEX                                           */\r
-    rs_bool PV_DECL pl_spdtab_get_num (int16 hcam, int16_ptr spdtab_num);\r
-    rs_bool PV_DECL pl_spdtab_set_num (int16 hcam, int16 spdtab_num);\r
+    DEPRECATED rs_bool PV_DECL pl_spdtab_get_num (int16 hcam, int16* spdtab_num);\r
+    DEPRECATED rs_bool PV_DECL pl_spdtab_set_num (int16 hcam, int16 spdtab_num);\r
     /* Use PARAM_SPDTAB_INDEX                                         */\r
-    rs_bool PV_DECL pl_spdtab_get_entries (int16 hcam, int16_ptr spdtab_entries);\r
+    DEPRECATED rs_bool PV_DECL pl_spdtab_get_entries (int16 hcam, int16* spdtab_entries);\r
     /* Use PARAM_SPDTAB_INDEX (ATTR_MAX)                              */\r
-    rs_bool PV_DECL pl_spdtab_get_port (int16 hcam, int16_ptr spdtab_port);\r
-    rs_bool PV_DECL pl_spdtab_get_port_total (int16 hcam, int16_ptr total_ports);\r
+    DEPRECATED rs_bool PV_DECL pl_spdtab_get_port (int16 hcam, int16* spdtab_port);\r
+    DEPRECATED rs_bool PV_DECL pl_spdtab_get_port_total (int16 hcam, int16* total_ports);\r
     /* Use PARAM_READOUT_PORT                                         */\r
-    rs_bool PV_DECL pl_spdtab_get_time (int16 hcam, uns16_ptr spdtab_time);\r
+    DEPRECATED rs_bool PV_DECL pl_spdtab_get_time (int16 hcam, uns16* spdtab_time);\r
     /* Use PARAM_PIX_TIME                                             */\r
-    rs_bool PV_DECL pl_shtr_get_close_dly (int16 hcam, uns16_ptr shtr_close_dly);\r
-    rs_bool PV_DECL pl_shtr_set_close_dly (int16 hcam, uns16 shtr_close_dly);\r
+    DEPRECATED rs_bool PV_DECL pl_shtr_get_close_dly (int16 hcam, uns16* shtr_close_dly);\r
+    DEPRECATED rs_bool PV_DECL pl_shtr_set_close_dly (int16 hcam, uns16 shtr_close_dly);\r
     /* Use PARAM_SHTR_CLOSE_DELAY                                     */\r
-    rs_bool PV_DECL pl_shtr_get_open_dly (int16 hcam, uns16_ptr shtr_open_dly);\r
-    rs_bool PV_DECL pl_shtr_set_open_dly (int16 hcam, uns16 shtr_open_dly);\r
+    DEPRECATED rs_bool PV_DECL pl_shtr_get_open_dly (int16 hcam, uns16* shtr_open_dly);\r
+    DEPRECATED rs_bool PV_DECL pl_shtr_set_open_dly (int16 hcam, uns16 shtr_open_dly);\r
     /* Use PARAM_SHTR_OPEN_DELAY                                      */\r
-    rs_bool PV_DECL pl_shtr_get_open_mode (int16 hcam, int16_ptr shtr_open_mode);\r
-    rs_bool PV_DECL pl_shtr_set_open_mode (int16 hcam, int16 shtr_open_mode);\r
+    DEPRECATED rs_bool PV_DECL pl_shtr_get_open_mode (int16 hcam, int16* shtr_open_mode);\r
+    DEPRECATED rs_bool PV_DECL pl_shtr_set_open_mode (int16 hcam, int16 shtr_open_mode);\r
     /* Use PARAM_SHTR_OPEN_MODE                                       */\r
-    rs_bool PV_DECL pl_shtr_get_status (int16 hcam, int16_ptr shtr_status);\r
+    DEPRECATED rs_bool PV_DECL pl_shtr_get_status (int16 hcam, int16* shtr_status);\r
     /* Use PARAM_SHTR_STATUS                                          */\r
-    rs_bool PV_DECL pl_exp_get_time_seq (int16 hcam, uns16_ptr exp_time);\r
-    rs_bool PV_DECL pl_exp_set_time_seq (int16 hcam, uns16 exp_time);\r
+    DEPRECATED rs_bool PV_DECL pl_exp_get_time_seq (int16 hcam, uns16* exp_time);\r
+    DEPRECATED rs_bool PV_DECL pl_exp_set_time_seq (int16 hcam, uns16 exp_time);\r
     /* Use PARAM_EXP_TIME                                             */\r
-    rs_bool PV_DECL pl_exp_check_progress (int16 hcam, int16_ptr status,\r
-                                           uns32_ptr bytes_arrived);\r
+    DEPRECATED rs_bool PV_DECL pl_exp_check_progress (int16 hcam, int16* status,\r
+                                                      uns32* bytes_arrived);\r
     /* Use pl_exp_check_status or pl_exp_check_cont_status */\r
 \r
+    DEPRECATED rs_bool PV_DECL pl_exp_set_cont_mode (int16 hcam, int16 mode);\r
+    DEPRECATED rs_bool PV_DECL pl_subsys_do_diag (int16 hcam, uns8 subsys_id,\r
+                                                  uns16* err_code);\r
+    DEPRECATED rs_bool PV_DECL pl_subsys_get_id (int16 hcam, uns8 subsys_id,\r
+                                                 uns16* part_num, uns8* revision);\r
+    DEPRECATED rs_bool PV_DECL pl_subsys_get_name (int16 hcam, uns8 subsys_id,\r
+                                                   char* subsys_name);\r
+    DEPRECATED rs_bool PV_DECL pl_exp_get_driver_buffer (int16 hcam,\r
+                                                         void** pixel_stream,\r
+                                                         uns32* byte_cnt);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_init (void);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_uninit (void);\r
+\r
+    DEPRECATED rs_bool PV_DECL pl_buf_alloc (int16* hbuf, int16 exp_total,\r
+                                             int16 bit_depth, int16 rgn_total,\r
+                                             const rgn_type* rgn_array);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_exp_date (int16 hbuf, int16 exp_num,\r
+                                                    int16* year, uns8* month,\r
+                                                    uns8* day, uns8* hour,\r
+                                                    uns8* min, uns8* sec,\r
+                                                    uns16* msec);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_set_exp_date (int16 hbuf, int16 exp_num, int16 year,\r
+                                                    uns8 month, uns8 day, uns8 hour,\r
+                                                    uns8 min, uns8 sec, uns16 msec);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_exp_time (int16 hbuf, int16 exp_num,\r
+                                                    uns32* exp_msec);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_exp_total (int16 hbuf, int16* total_exps);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_img_bin (int16 himg, int16* ibin, int16* jbin);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_img_handle (int16 hbuf, int16 exp_num,\r
+                                                      int16 img_num, int16* himg);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_img_ofs (int16 himg, int16* s_ofs, int16* p_ofs);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_img_ptr (int16 himg, void** img_addr);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_img_size (int16 himg, int16* x_size, int16* y_size);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_img_total (int16 hbuf, int16* totl_imgs);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_size (int16 hbuf, int32* buf_size);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_free (int16 hbuf);\r
+    DEPRECATED rs_bool PV_DECL pl_buf_get_bits (int16 hbuf, int16* bit_depth);\r
+    DEPRECATED rs_bool PV_DECL pl_exp_unravel (int16 hcam, uns16 exposure,\r
+                                               void* pixel_stream, uns16 rgn_total,\r
+                                               const rgn_type* rgn_array,\r
+                                               uns16** array_list);\r
+    DEPRECATED rs_bool PV_DECL pl_exp_wait_start_xfer (int16 hcam, uns32 tlimit);\r
+    DEPRECATED rs_bool PV_DECL pl_exp_wait_end_xfer (int16 hcam, uns32 tlimit);\r
+\r
+    DEPRECATED rs_bool PV_DECL pv_cam_get_ccs_mem (int16 hcam, uns16* size);\r
+    DEPRECATED rs_bool PV_DECL pv_cam_send_debug (int16 hcam, char* debug_str,\r
+                                                  uns16 reply_len, char* reply_str);\r
+    DEPRECATED rs_bool PV_DECL pv_cam_write_read (int16 hcam, uns8 c_class, uns16 write_bytes,\r
+                                                  uns8* write_array, uns8* read_array);\r
+    DEPRECATED rs_bool PV_DECL pv_dd_active (int16 hcam, void* pixel_stream);\r
+    DEPRECATED rs_bool PV_DECL pv_exp_get_bytes (int16 hcam, uns32* exp_bytes);\r
+    DEPRECATED rs_bool PV_DECL pv_exp_get_script (int16 hcam, rs_bool* script_valid);\r
+    DEPRECATED rs_bool PV_DECL pv_exp_get_status (int16 hcam, int16* status,\r
+                                                  uns32* byte_cnt, uns32* frame_cnt);\r
+    DEPRECATED rs_bool PV_DECL pv_exp_set_bytes (int16 hcam, uns32 frame_count,\r
+                                                 uns32 seq_bytes, void* pixel_stream);\r
+    DEPRECATED rs_bool PV_DECL pv_exp_set_script (int16 hcam, rs_bool script_valid);\r
+    DEPRECATED rs_bool PV_DECL pv_set_error_code (int16 omode,int16 err_code);\r
+    DEPRECATED rs_bool PV_DECL pv_cam_do_reads (int16 hcam);\r
+    DEPRECATED rs_bool PV_DECL pv_free (void* block, int16 heap);\r
+    DEPRECATED void*   PV_DECL pv_malloc (uns32 size, int16 heap);\r
+    DEPRECATED void*   PV_DECL pv_realloc (void* block, uns32 size, int16 heap);\r
+    DEPRECATED rs_bool PV_DECL pv_script_set_hook (pm_script_hook* pfn);\r
+    DEPRECATED rs_bool PV_DECL pv_ccd_get_accum_capable (int16 hcam, rs_bool* accum_capable);\r
+    DEPRECATED rs_bool PV_DECL pv_exp_get_frames (int16 hcam, uns32* exp_frames);\r
+    DEPRECATED rs_bool PV_DECL pv_exp_set_frames (int16 hcam, uns32 exp_frames);\r
+    DEPRECATED rs_bool PV_DECL pv_exp_set_no_readout_timeout (int16 hcam);\r
+    DEPRECATED rs_bool PV_DECL pv_exp_reset_no_readout_timeout (int16 hcam);\r
+    DEPRECATED rs_bool PV_DECL pm_cam_write_read (int16 hcam, uns8 c_class, uns16 write_bytes,\r
+                                                  uns8* write_array, uns8* read_array);\r
+    DEPRECATED rs_bool PV_DECL pl_ddi_get_ver (uns16* ddi_version);\r
+    DEPRECATED rs_bool PV_DECL pl_cam_get_diags (int16 hcam);\r
+\r
+    /** @} */ /* grp_pm_deprecated_functions */\r
+\r
+    /*****************************************************************************/\r
+    /*****************************************************************************/\r
+    /*                                                                           */\r
+    /*                         Frame metadata functions                          */\r
+    /*                                                                           */\r
     /*****************************************************************************/\r
-    /* Other functions that should not be used.  They are included for           */\r
-    /* compatibility reasons.                                                    */\r
-    /*****************************************************************************/\r
-    rs_bool PV_DECL pl_exp_set_cont_mode (int16 hcam, int16 mode);\r
-    rs_bool PV_DECL pl_subsys_do_diag (int16 hcam, uns8 subsys_id,\r
-                                       uns16_ptr err_code);\r
-    rs_bool PV_DECL pl_subsys_get_id (int16 hcam, uns8 subsys_id,\r
-                                      uns16_ptr part_num, uns8_ptr revision);\r
-    rs_bool PV_DECL pl_subsys_get_name (int16 hcam, uns8 subsys_id,\r
-                                        char_ptr subsys_name);\r
-    rs_bool PV_DECL pl_exp_get_driver_buffer (int16 hcam,\r
-                                              void_ptr_ptr pixel_stream,\r
-                                              uns32_ptr byte_cnt);\r
-    rs_bool PV_DECL pl_buf_init (void);\r
-    rs_bool PV_DECL pl_buf_uninit (void);\r
-\r
-    rs_bool PV_DECL pl_buf_alloc (int16_ptr hbuf, int16 exp_total,\r
-                                  int16 bit_depth, int16 rgn_total,\r
-                                  rgn_const_ptr rgn_array);\r
-    rs_bool PV_DECL pl_buf_get_exp_date (int16 hbuf, int16 exp_num,\r
-                                         int16_ptr year, uns8_ptr month,\r
-                                         uns8_ptr day, uns8_ptr hour,\r
-                                         uns8_ptr min, uns8_ptr sec,\r
-                                         uns16_ptr msec);\r
-    rs_bool PV_DECL pl_buf_set_exp_date (int16 hbuf, int16 exp_num, int16 year,\r
-                                         uns8 month, uns8 day, uns8 hour,\r
-                                         uns8 min, uns8 sec, uns16 msec);\r
-    rs_bool PV_DECL pl_buf_get_exp_time (int16 hbuf, int16 exp_num,\r
-                                         uns32_ptr exp_msec);\r
-    rs_bool PV_DECL pl_buf_get_exp_total (int16 hbuf, int16_ptr total_exps);\r
-    rs_bool PV_DECL pl_buf_get_img_bin (int16 himg, int16_ptr ibin,\r
-                                        int16_ptr jbin);\r
-    rs_bool PV_DECL pl_buf_get_img_handle (int16 hbuf, int16 exp_num,\r
-                                           int16 img_num, int16_ptr himg);\r
-    rs_bool PV_DECL pl_buf_get_img_ofs (int16 himg, int16_ptr s_ofs,\r
-                                        int16_ptr p_ofs);\r
-    rs_bool PV_DECL pl_buf_get_img_ptr (int16 himg, void_ptr_ptr img_addr);\r
-    rs_bool PV_DECL pl_buf_get_img_size (int16 himg, int16_ptr x_size,\r
-                                         int16_ptr y_size);\r
-    rs_bool PV_DECL pl_buf_get_img_total (int16 hbuf, int16_ptr totl_imgs);\r
-    rs_bool PV_DECL pl_buf_get_size (int16 hbuf, int32_ptr buf_size);\r
-    rs_bool PV_DECL pl_buf_free (int16 hbuf);\r
-    rs_bool PV_DECL pl_buf_get_bits (int16 hbuf, int16_ptr bit_depth);\r
-    rs_bool PV_DECL pl_exp_unravel (int16 hcam, uns16 exposure,\r
-                                    void_ptr pixel_stream, uns16 rgn_total,\r
-                                    rgn_const_ptr rgn_array,\r
-                                    uns16_ptr * array_list);\r
-    rs_bool PV_DECL pl_exp_wait_start_xfer (int16 hcam, uns32 tlimit);\r
-    rs_bool PV_DECL pl_exp_wait_end_xfer (int16 hcam, uns32 tlimit);\r
-\r
-       rs_bool PV_DECL pv_cam_get_ccs_mem (int16 hcam, uns16_ptr size);\r
-    rs_bool PV_DECL pv_cam_send_debug (int16 hcam, char_ptr debug_str,\r
-                                       uns16 reply_len, char_ptr reply_str);\r
-    rs_bool PV_DECL pv_cam_write_read (int16 hcam, uns8 c_class, uns16 write_bytes,\r
-                                       uns8_ptr write_array, uns8_ptr read_array);\r
-    rs_bool PV_DECL pv_dd_active (int16 hcam, void_ptr pixel_stream);\r
-    rs_bool PV_DECL pv_exp_get_bytes (int16 hcam, uns32_ptr exp_bytes);\r
-    rs_bool PV_DECL pv_exp_get_script (int16 hcam, rs_bool_ptr script_valid);\r
-    rs_bool PV_DECL pv_exp_get_status (int16 hcam, int16_ptr status,\r
-                                       uns32_ptr byte_cnt, uns32_ptr frame_cnt);\r
-    rs_bool PV_DECL pv_exp_set_bytes (int16 hcam, uns32 frame_count,\r
-                                      uns32 seq_bytes, void_ptr pixel_stream);\r
-    rs_bool PV_DECL pv_exp_set_script (int16 hcam, rs_bool script_valid);\r
-    rs_bool PV_DECL pv_set_error_code (int16 omode,int16 err_code);\r
-    rs_bool PV_DECL pv_cam_do_reads (int16 hcam);\r
-    rs_bool  PV_DECL pv_free (void_ptr block, int16 heap);\r
-    void_ptr PV_DECL pv_malloc (uns32 size, int16 heap);\r
-    void_ptr PV_DECL pv_realloc(void_ptr block, uns32 size, int16 heap);\r
-    rs_bool PV_DECL pv_script_set_hook (pm_script_hook PV_PTR_DECL pfn);\r
-    rs_bool PV_DECL pv_ccd_get_accum_capable (int16 hcam,\r
-                                              rs_bool_ptr accum_capable);\r
-    rs_bool PV_DECL pv_exp_get_frames (int16 hcam, uns32_ptr exp_frames);\r
-    rs_bool PV_DECL pv_exp_set_frames (int16 hcam, uns32 exp_frames);\r
-    rs_bool PV_DECL pv_exp_set_no_readout_timeout (int16 hcam);\r
-    rs_bool PV_DECL pv_exp_reset_no_readout_timeout (int16 hcam);\r
-    rs_bool PV_DECL pm_cam_write_read (int16 hcam, uns8 c_class, uns16 write_bytes,\r
-                                       uns8_ptr write_array, uns8_ptr read_array);\r
-    rs_bool PV_DECL pl_ddi_get_ver (uns16_ptr ddi_version);\r
-    rs_bool PV_DECL pl_cam_get_diags (int16 hcam);\r
-\r
-    /*****************************************************************************/\r
-    /* End of function definitions.                                              */\r
     /*****************************************************************************/\r
 \r
+    /**\r
+    Decodes all the raw frame buffer metadata into a friendly structure.\r
+    @param pDstFrame A pre-allocated helper structure that will be filled with\r
+                     information from the given raw buffer.\r
+    @param pSrcBuf A raw frame buffer as retrieved from PVCAM\r
+    @param srcBufSize The size of the raw frame buffer\r
+    @return #PV_FAIL in case of failure.\r
+    */\r
+    rs_bool PV_DECL pl_md_frame_decode (md_frame* pDstFrame, void* pSrcBuf, uns32 srcBufSize);\r
+\r
+    /**\r
+    Optional function that recomposes a multi-ROI frame into a displayable image buffer.\r
+    Every ROI will be copied into its appropriate location in the provided buffer.\r
+    Please note that the function will subtract the Implied ROI position from each ROI\r
+    position which essentially moves the entire Implied ROI to a [0, 0] position.\r
+    Use the Offset arguments to shift all ROIs back to desired positions if needed.\r
+    If you use the Implied ROI position for offset arguments the frame will be recomposed\r
+    as it appears on the full frame.\r
+    The caller is responsible for black-filling the input buffer. Usually this function\r
+    is called during live/preview mode where the destination buffer is re-used. If the\r
+    ROIs do move during acquisition it is essential to black-fill the destination buffer\r
+    before calling this function. This is not needed if the ROIs do not move.\r
+    If the ROIs move during live mode it is also recommended to use the offset arguments\r
+    and recompose the ROI to a full frame - with moving ROIs the implied ROI may change\r
+    with each frame and this may cause undesired ROI "twitching" in the displayable image.\r
+\r
+    @param pDstBuf An output buffer, the buffer must be at least the size of the implied\r
+                   ROI that is calculated during the frame decoding process. The buffer\r
+                   must be of type uns16. If offset is set the buffer must be large\r
+                   enough to allow the entire implied ROI to be shifted.\r
+    @param offX    Offset in the destination buffer, in pixels. If 0 the Implied\r
+                   ROI will be shifted to position 0 in the target buffer.\r
+                   Use (ImpliedRoi.s1 / ImplierRoi.sbin) as offset value to\r
+                   disable the shift and keep the ROIs in their absolute positions.\r
+    @param offY    Offset in the destination buffer, in pixels. If 0 the Implied\r
+                   ROI will be shifted to position 0 in the target buffer.\r
+                   Use (ImpliedRoi.p1 / ImplierRoi.pbin) as offset value to\r
+                   disable the shift and keep the ROIs in their absolute positions.\r
+    @param dstWidth  Width, in pixels of the destination image buffer. The buffer\r
+                     must be large enough to hold the entire Implied ROI, including\r
+                     the offsets (if used).\r
+    @param dstHeight Height, in pixels of the destination image buffer.\r
+    @param pSrcFrame A helper structure, previously decoded using the frame\r
+                     decoding function.\r
+    @return #PV_FAIL in case of failure.\r
+    */\r
+    rs_bool PV_DECL pl_md_frame_recompose (void* pDstBuf, uns16 offX, uns16 offY,\r
+                                           uns16 dstWidth, uns16 dstHeight,\r
+                                           md_frame* pSrcFrame);\r
+\r
+    /**\r
+    This method creates an empty md_frame structure for known number of ROIs.\r
+    Use this method to prepare and pre-allocate one structure before starting\r
+    continous acquisition. Once callback arrives fill the structure with\r
+    pl_md_frame_decode() and display the metadata.\r
+    Release the structure when not needed.\r
+    @param pFrame a pointer to frame helper structure address where the structure\r
+                  will be allocated.\r
+    @param roiCount Number of ROIs the structure should be prepared for.\r
+    @return #PV_FAIL in case of failure.\r
+    */\r
+    rs_bool PV_DECL pl_md_create_frame_struct_cont (md_frame** pFrame, uns16 roiCount);\r
+\r
+    /**\r
+    This method creates an empty md_frame structure from an existing buffer.\r
+    Use this method when loading buffers from disk or when performance is not\r
+    critical. Do not forget to release the structure when not needed.\r
+    For continous acquisition where the number or ROIs is known it is recommended\r
+    to use the other provided method to avoid frequent memory allocation.\r
+    @param pFrame A pointer address where the newly created structure will be stored.\r
+    @param pSrcBuf A raw frame data pointer as returned from the camera\r
+    @param srcBufSize Size of the raw frame data buffer\r
+    @return #PV_FAIL in case of failure\r
+    */\r
+    rs_bool PV_DECL pl_md_create_frame_struct (md_frame** pFrame, void* pSrcBuf,\r
+                                               uns32 srcBufSize);\r
+\r
+    /**\r
+    Releases the md_frame struct\r
+    @param pFrame a pointer to the previously allocated structure\r
+    */\r
+    rs_bool PV_DECL pl_md_release_frame_struct (md_frame* pFrame);\r
+\r
+    /**\r
+    Reads all the extended metadata from the given ext. metadata buffer.\r
+    @param pOutput A pre-allocated structure that will be filled with metadata\r
+    @param pExtMdPtr A pointer to the ext. MD buffer, this can be obtained from\r
+                    the md_frame and md_frame_roi structures.\r
+    @param extMdSize Size of the ext. MD buffer, also retrievable from the helper\r
+                     structures.\r
+    @return #PV_FAIL in case the metadata cannot be decoded.\r
+    */\r
+    rs_bool PV_DECL pl_md_read_extended (md_ext_item_collection* pOutput, void* pExtMdPtr,\r
+                                         uns32 extMdSize);\r
 \r
 #ifdef PV_C_PLUS_PLUS\r
 };\r
 #endif\r
 \r
-#endif\r
+#endif /* PV_EMBEDDED */\r
+\r
+/******************************************************************************/\r
+/* End of function prototypes.                                                */\r
+/******************************************************************************/\r
 \r
 #endif /* _PVCAM_H */\r
index 8cf79a5..12a0ad2 100644 (file)
Binary files a/Photometrics/PVCAM/SDK/Libs/Win32/pvcam32.lib and b/Photometrics/PVCAM/SDK/Libs/Win32/pvcam32.lib differ
index f65eaec..224126d 100644 (file)
Binary files a/Photometrics/PVCAM/SDK/Libs/x64/pvcam64.lib and b/Photometrics/PVCAM/SDK/Libs/x64/pvcam64.lib differ