diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-09-01 13:56:46 +0200 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2014-09-01 13:56:46 +0200 |
commit | 22f703cab05b7cd368f4de9e03991b7664dc5022 (patch) | |
tree | 6f4d50beaa42328e24b1c6b56b6ec059e4ef21a5 /spectro/i1d3.h |
Initial import of argyll version 1.5.1-8debian/1.5.1-8
Diffstat (limited to 'spectro/i1d3.h')
-rw-r--r-- | spectro/i1d3.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/spectro/i1d3.h b/spectro/i1d3.h new file mode 100644 index 0000000..96de478 --- /dev/null +++ b/spectro/i1d3.h @@ -0,0 +1,161 @@ +#ifndef I1D3_H + +/* + * Argyll Color Correction System + * + * X-Rite i1d3 related defines + * + * Author: Graeme W. Gill + * Date: 7/10/2007 + * + * Copyright 2006 - 2013, Graeme W. Gill + * All rights reserved. + * + * (Based on huey.h) + * + * This material is licenced under the GNU GENERAL PUBLIC LICENSE Version 2 or later :- + * see the License2.txt file for licencing details. + */ + +/* + If you make use of the instrument driver code here, please note + that it is the author(s) of the code who take responsibility + for its operation. Any problems or queries regarding driving + instruments with the Argyll drivers, should be directed to + the Argyll's author(s), and not to any other party. + + If there is some instrument feature or function that you + would like supported here, it is recommended that you + contact Argyll's author(s) first, rather than attempt to + modify the software yourself, if you don't have firm knowledge + of the instrument communicate protocols. There is a chance + that an instrument could be damaged by an incautious command + sequence, and the instrument companies generally cannot and + will not support developers that they have not qualified + and agreed to support. + */ + +#include "inst.h" + +/* Note: update huey_interp_error() and huey_interp_code() in huey.c */ +/* if anything of these #defines are added or subtracted */ + +/* Fake Error codes */ +#define I1D3_INTERNAL_ERROR 0x61 /* Internal software error */ +#define I1D3_COMS_FAIL 0x62 /* Communication failure */ +#define I1D3_UNKNOWN_MODEL 0x63 /* Not an i1d3 */ +#define I1D3_DATA_PARSE_ERROR 0x64 /* Read data parsing error */ + +/* Real error code */ +#define I1D3_OK 0x00 + +#define I1D3_UNKNOWN_UNLOCK 0x01 +#define I1D3_UNLOCK_FAIL 0x02 +#define I1D3_BAD_EX_CHSUM 0x03 + +#define I1D3_SPOS_EMIS 0x05 /* Needs to be in emsissive configuration */ +#define I1D3_SPOS_AMB 0x06 /* Needs to be in ambient configuration */ + +#define I1D3_TOO_FEW_CALIBSAMP 0x10 + +#define I1D3_BAD_WR_LENGTH 0x11 +#define I1D3_BAD_RD_LENGTH 0x12 +#define I1D3_BAD_RET_STAT 0x13 +#define I1D3_BAD_RET_CMD 0x14 +#define I1D3_NOT_INITED 0x15 + +/* Internal errors */ +#define I1D3_BAD_MEM_ADDRESS 0x20 +#define I1D3_BAD_MEM_LENGTH 0x21 +#define I1D3_INT_CIECONVFAIL 0x22 +#define I1D3_INT_MATINV_FAIL 0x23 +#define I1D3_BAD_LED_MODE 0x24 +#define I1D3_NO_COMS 0x25 +#define I1D3_BAD_STATUS 0x26 +#define I1D3_INT_THREADFAILED 0x27 + +/* Sub-type of instrument */ +typedef enum { + i1d3_disppro = 0, /* i1 DisplayPro */ + i1d3_munkdisp = 1, /* ColorMunki Display */ + i1d3_oem = 2, /* OEM */ + i1d3_nec_ssp = 3, /* NEC SpectraSensor Pro */ + i1d3_quato_sh3 = 4 /* Quato Silver Haze 3 */ +} i1d3_dtype; + +/* Measurement mode */ +typedef enum { + i1d3_adaptive = 0, /* Frequency over fixed period then adaptive period measurement */ + i1d3_frequency = 1, /* Frequency over fixed period measurement */ + i1d3_period = 2 /* Adaptive period measurement */ +} i1d3_mmode; + +/* I1D3 communication object */ +struct _i1d3 { + INST_OBJ_BASE + + amutex lock; /* Command lock */ + + /* Modes */ + inst_mode mode; /* Currently selected mode */ + inst_opt_type trig; /* Reading trigger mode */ + + /* Information and EEPROM values */ + i1d3_dtype dtype; /* Base type of instrument, ie i1d3_disppro or i1d3_munkdisp */ + i1d3_dtype stype; /* Sub type of instrument, ie. any of i1d3_dtype. */ + /* (Only accurate if it needed unlocking). */ + int status; /* 0 if status is ok (not sure what this is) */ + char serial_no[21]; /* "I1-11.A-01.100999.02" or "CM-11.A-01.100999.02" */ + char prod_name[32]; /* "i1Display3 " or "ColorMunki Display" */ + int prod_type; /* 16 bit product type number. i1d3_disppro = 0x0001, */ + /* i1d3_munkdisp = 0x0002 */ + char firm_ver[32]; /* Firmwar version string. ie. "v1.0 " */ + char firm_date[32]; /* Firmwar date string. ie. "11Jan11" */ + + /* Calibration information */ + ORD64 cal_date; /* Calibration date */ + xspect sens[3]; /* RGB Sensor spectral sensitivities in Hz per mW/nm */ + xspect ambi[3]; /* RGB Sensor with ambient filter spectral sensitivities */ + + double black[3]; /* Black level to subtract */ + double emis_cal[3][3]; /* Current emssion calibration matrix */ + double ambi_cal[3][3]; /* Current ambient calibration matrix */ + + inst_disptypesel *dtlist; /* Display Type list */ + int ndtlist; /* Number of valid dtlist entries */ + int icx; /* Internal calibration matrix index, 11 = Raw */ + int cbid; /* calibration base ID, 0 if not a base */ + int refrmode; /* nz if in refresh display mode/double int. time */ + double ccmat[3][3]; /* Optional colorimeter correction matrix */ + icxObserverType obType; /* ccss observer to use */ + xspect custObserver[3]; /* Custom ccss observer to use */ + + /* Computed factors and state */ + int rrset; /* Flag, nz if the refresh rate has been determined */ + double refperiod; /* if > 0.0 in refmode, target int time quantization */ + double refrate; /* Measured refresh rate in Hz */ + int refrvalid; /* nz if refrate is valid */ + double clk_freq; /* Clock frequency (12Mhz) */ + double dinttime; /* default integration time = 0.2 seconds */ + double inttime; /* current integration time = 0.2 seconds */ + + double transblend; /* Blend between fixed and adaptive integration */ + /* at low light levels */ + + /* Other state */ + int led_state; /* : Current LED on/off state */ + double led_period, led_on_time_prop, led_trans_time_prop; /* Pulse state */ + + athread *th; /* Diffuser position monitoring thread */ + volatile int th_term; /* nz to terminate thread */ + volatile int th_termed; /* nz when thread terminated */ + int dpos; /* Diffuser position, 0 = display, 1 = ambient */ + +}; typedef struct _i1d3 i1d3; + +/* Constructor */ +extern i1d3 *new_i1d3(icoms *icom, instType itype); + + +#define I1D3_H +#endif /* I1D3_H */ |