summaryrefslogtreecommitdiff
path: root/spectro/inst.h
diff options
context:
space:
mode:
Diffstat (limited to 'spectro/inst.h')
-rwxr-xr-x[-rw-r--r--]spectro/inst.h81
1 files changed, 56 insertions, 25 deletions
diff --git a/spectro/inst.h b/spectro/inst.h
index a4184d4..00dd9b3 100644..100755
--- a/spectro/inst.h
+++ b/spectro/inst.h
@@ -308,13 +308,15 @@ typedef enum {
inst2_has_scan_toll = 0x00004000, /* Instrument will honour modified scan tollerance */
inst2_no_feedback = 0x00008000, /* Instrument doesn't give any user feedback */
+ inst2_opt_calibs = 0x00010000, /* Instrument has optional calibrations */
+
inst2_has_leds = 0x00200000, /* Instrument has some user viewable indicator LEDs */
inst2_has_target = 0x00400000, /* Instrument has aiming target */
inst2_has_sensmode = 0x00800000, /* Instrument can report it's sensors mode */
inst2_has_battery = 0x01000000, /* Instrument is battery powered */
- inst2_disptype = 0x02000000, /* Has a display type selector */
+ inst2_disptype = 0x02000000, /* Has a display/calibration type selector */
/* (ie. get_disptypesel(), set_disptype */
inst2_ccmx = 0x04000000, /* Colorimeter Correction Matrix capability */
@@ -361,9 +363,10 @@ typedef enum {
inst_dtflags_mtx = 0x0001, /* matrix read from instrument */
inst_dtflags_ccss = 0x0002, /* ccss file */
inst_dtflags_ccmx = 0x0004, /* ccmx file */
- inst_dtflags_wr = 0x0010, /* Writable slot */
- inst_dtflags_ld = 0x0020, /* mtx/ccss/ccmx is loaded */
- inst_dtflags_default = 0x1000, /* Dafault calibration to use */
+ inst_dtflags_custom = 0x0010, /* custom (i.e. not built in or OEM) */
+ inst_dtflags_wr = 0x0020, /* Writable slot */
+ inst_dtflags_ld = 0x0040, /* mtx/ccss/ccmx is loaded */
+ inst_dtflags_default = 0x1000, /* Default calibration to use */
inst_dtflags_end = 0x8000 /* end marker */
} inst_dtflags;
@@ -462,7 +465,10 @@ typedef enum {
inst_opt_set_target_state = 0x001C, /* Set the aiming target state 0 = off, 1 == on, 2 = toggle [int] */
inst_opt_get_min_int_time = 0x001D, /* Get the minimum integration time [*double time] */
- inst_opt_set_min_int_time = 0x001E /* Set the minimum integration time [double time] */
+ inst_opt_set_min_int_time = 0x001E, /* Set the minimum integration time [double time] */
+
+ inst_opt_opt_calibs_valid = 0x001F, /* Are optional calibrations valid [*int valid] */
+ inst_opt_clear_opt_calibs = 0x0020 /* Clear all optional calibrations. */
} inst_opt_type;
@@ -488,6 +494,7 @@ typedef enum {
/* Type of calibration needed/available/requested - corresponds to capabilities */
/* [ inst_calt_trans_vwhite is "variable" white transmission calibration, needed */
/* where transmission mode is being emulated. ] */
+/* Remember to update calt2str() */
typedef enum {
/* Response to needs_calibration() */
inst_calt_none = 0x00000000, /* No calibration or unknown */
@@ -504,13 +511,14 @@ typedef enum {
/* Specific type of calibration - corresponds to capabilities */
inst_calt_wavelength = 0x00000010, /* Wavelength calibration using refl. cal. surface */
inst_calt_ref_white = 0x00000020, /* Reflective white/emissive dark calibration */
- inst_calt_ref_dark = 0x00000040, /* Reflective dark calibration (in dark) */
- inst_calt_emis_offset = 0x00000080, /* Emissive offset/black calibration (dark surface) */
- inst_calt_emis_ratio = 0x00000100, /* Emissive ratio calibration */
- inst_calt_em_dark = 0x00000200, /* Emissive dark calibration (in dark) */
- inst_calt_trans_white = 0x00000400, /* Transmissive white reference calibration */
- inst_calt_trans_vwhite = 0x00000800, /* Transmissive variable white reference calibration */
- inst_calt_trans_dark = 0x00001000, /* Transmissive dark reference calibration */
+ inst_calt_ref_dark = 0x00000040, /* Reflective dark calibration (light trap) */
+ inst_calt_ref_dark_gl = 0x00000080, /* Reflective gloss calibration (black gloss surface) */
+ inst_calt_emis_offset = 0x00000100, /* Emissive offset/black calibration (dark surface) */
+ inst_calt_emis_ratio = 0x00000200, /* Emissive ratio calibration */
+ inst_calt_em_dark = 0x00000400, /* Emissive dark calibration (in dark) */
+ inst_calt_trans_white = 0x00000800, /* Transmissive white reference calibration */
+ inst_calt_trans_vwhite = 0x00001000, /* Transmissive variable white reference calibration */
+ inst_calt_trans_dark = 0x00002000, /* Transmissive dark reference calibration */
inst_calt_n_dfrble_mask = 0x0000fff0, /* Mask of non-deferrable calibrations */
@@ -526,6 +534,9 @@ typedef enum {
} inst_cal_type;
+/* Return a description of the first calibration type */
+char *calt2str(inst_cal_type calt);
+
/* Calibration conditions. */
/* This is how the instrument communicates to the calling program */
/* about how to facilitate a calibration, or what it's current measurement */
@@ -549,13 +560,14 @@ typedef enum {
/* to be on the correct reference for the software triggered cal. */
inst_calc_man_ref_white = 0x00000010, /* place instrument on reflective white reference */
inst_calc_man_ref_whitek = 0x00000020, /* click instrument on reflective white reference */
- inst_calc_man_ref_dark = 0x00000030, /* place instrument in dark, not close to anything */
- inst_calc_man_em_dark = 0x00000040, /* place cap on instrument, put on dark surface or white ref. */
- inst_calc_man_am_dark = 0x00000050, /* Place cap over ambient sensor (wl calib capable) */
- inst_calc_man_cal_smode = 0x00000060, /* Put instrument sensor in calibration position */
-
- inst_calc_man_trans_white = 0x00000070, /* place instrument on transmissive white reference */
- inst_calc_man_trans_dark = 0x00000080, /* place instrument on transmissive dark reference */
+ inst_calc_man_ref_dark = 0x00000030, /* place instrument on light trap */
+ inst_calc_man_dark_gloss = 0x00000040, /* place instrument on gloss black reference */
+ inst_calc_man_em_dark = 0x00000050, /* place cap on instrument, put on dark surface or white ref. */
+ inst_calc_man_am_dark = 0x00000060, /* Place cap over ambient sensor (wl calib capable) */
+ inst_calc_man_cal_smode = 0x00000070, /* Put instrument sensor in calibration position */
+
+ inst_calc_man_trans_white = 0x00000080, /* place instrument on transmissive white reference */
+ inst_calc_man_trans_dark = 0x00000090, /* place instrument on transmissive dark reference */
inst_calc_man_man_mask = 0x000000F0, /* user configured calibration mask */
inst_calc_emis_white = 0x00000100, /* Provide a white test patch */
@@ -567,7 +579,12 @@ typedef enum {
inst_calc_emis_mask = 0x00000F00, /* Emmissive/display provided reference patch */
inst_calc_change_filter = 0x00010000, /* Filter needs changing on device - see id[] */
- inst_calc_message = 0x00020000 /* Issue a message. - see id[] */
+ inst_calc_message = 0x00020000, /* Issue a message. - see id[] */
+
+ inst_calc_cond_mask = 0x0fffffff, /* Mask for conditions (i.e. remove flags) */
+
+ inst_calc_optional_flag = 0x80000000 /* Flag indicating calibration can be skipped */
+
} inst_cal_cond;
/* Clamping state */
@@ -600,6 +617,8 @@ typedef enum {
inst_conf_ambient
} inst_config;
+# define EXRA_INST_OBJ
+
/* Off-line pending readings available (status) */
#define CALIDLEN 200 /* Maxumum length of calibration tile ID string */
@@ -610,6 +629,7 @@ typedef enum {
/* after initialisation. */
#define INST_OBJ_BASE \
\
+ EXRA_INST_OBJ \
a1log *log; /* Pointer to debug & error logging class */ \
instType itype; /* Instrument type determined by driver */ \
icoms *icom; /* Instrument coms object */ \
@@ -691,7 +711,8 @@ typedef enum {
int allconfig, /* nz to return list for all configs, not just current. */ \
int recreate); /* nz to re-check for new ccmx & ccss files */ \
\
- /* Set the display type. index is into the inst_disptypesel[] returned */ \
+ /* Set the display type or calibration mode. */ \
+ /* index is into the inst_disptypesel[] returned */ \
/* returned by get_disptypesel(). clears col_cor_mat() and */ \
/* col_cal_spec_set(). */ \
inst_code (*set_disptype)( \
@@ -699,9 +720,10 @@ typedef enum {
int index); \
\
/* Get the disptech and other corresponding info for the current */ \
- /* selected display type. Returns disptype_unknown by default. */ \
- /* Because refrmode can be overridden, it may not match the refrmode */ \
- /* of the dtech. (Pointers may be NULL if not needed) */ \
+ /* selected display type or calibration mode. Returns disptype_unknown */ \
+ /* by default. Because refrmode can be overridden, it may not */ \
+ /* match the refrmode of the dtech. */ \
+ /* (Pointers may be NULL if not needed) */ \
inst_code (*get_disptechi)( \
struct _inst *p, \
disptech *dtech, \
@@ -863,7 +885,7 @@ typedef enum {
/* to determine the required calibration types and conditions. */ \
/* (The corresponding calibration types will be used & returned. */ \
\
- /* If no error is returned to the first call to calibrate() with */ \
+ /* If no error is returned to the first call to calibrate() */ \
/* then the instrument was capable of calibrating without user or */ \
/* application intervention. If on the other hand calibrate() returns */ \
/* inst_cal_setup, then the appropriate action indicated by the value */ \
@@ -875,6 +897,13 @@ typedef enum {
/* calibration to be performed. calibrate() returns inst_ok when no */ \
/* more calibrations remain. */ \
\
+ /* If the calc has the inst_calc_optional_flag flag set, */ \
+ /* then the user should be offered the option of skipping the */ \
+ /* calibration. If they decide to skip it, return a calc with */ \
+ /* inst_calc_optional_flag set, and if they want to proceed, */ \
+ /* make sure the inst_calc_optional_flag is cleared in the returned */ \
+ /* calc. */ \
+ \
/* DOESN'T use the trigger mode */ \
/* Return inst_unsupported if *calt is not appropriate, */ \
/* inst_cal_setup if *calc is not appropriate. */ \
@@ -1067,6 +1096,7 @@ typedef struct {
int cc_cbid; /* Calibration display type base ID required */
int refr; /* Refresh mode flag */
char *sel; /* UI selector characters (may be NULL) */
+ int oem; /* nz if oem origin */
double mat[3][3]; /* The matrix values */
} iccmx;
@@ -1089,6 +1119,7 @@ typedef struct {
disptech dtech; /* Display Technology enumeration (optional if disp) */
int refr; /* Refresh mode flag */
char *sel; /* UI selector characters (may be NULL) */
+ int oem; /* nz if oem origin */
xspect *sets; /* Set of sample spectra */
int no_sets; /* Number on set */
} iccss;