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/i1disp.h |
Initial import of argyll version 1.5.1-8debian/1.5.1-8
Diffstat (limited to 'spectro/i1disp.h')
-rw-r--r-- | spectro/i1disp.h | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/spectro/i1disp.h b/spectro/i1disp.h new file mode 100644 index 0000000..893cad2 --- /dev/null +++ b/spectro/i1disp.h @@ -0,0 +1,172 @@ +#ifndef I1DISP_H + +/* + * Argyll Color Correction System + * + * Gretag i1Display related defines + * + * Author: Graeme W. Gill + * Date: 19/10/2006 + * + * Copyright 2006 - 2013, Graeme W. Gill + * All rights reserved. + * + * 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 i1disp_interp_error() and i1disp_interp_code() in i1disp.c */ +/* if anything of these #defines are added or subtracted */ + +/* Fake Error codes */ +#define I1DISP_INTERNAL_ERROR 0x61 /* Internal software error */ +#define I1DISP_COMS_FAIL 0x62 /* Communication failure */ +#define I1DISP_UNKNOWN_MODEL 0x63 /* Not an i1display */ +#define I1DISP_DATA_PARSE_ERROR 0x64 /* Read data parsing error */ + +/* Real error code */ +#define I1DISP_OK 0x00 + +/* Sub codes for device specific reasoning */ +#define I1DISP_FLOAT_NOT_SET 0x01 +#define I1DISP_NOT_READY 0x02 + +#define I1DISP_BAD_SERIAL_NUMBER 0x03 +#define I1DISP_BAD_LCD_CALIBRATION 0x04 +#define I1DISP_BAD_CRT_CALIBRATION 0x05 +#define I1DISP_EEPROM_WRITE_FAIL 0x06 + +#define I1DISP_UNEXPECTED_RET_SIZE 0x07 +#define I1DISP_UNEXPECTED_RET_VAL 0x08 + +#define I1DISP_BAD_STATUS 0x09 +#define I1DISP_UNKNOWN_VERS_ID 0x10 + +/* Internal errors */ +#define I1DISP_BAD_REG_ADDRESS 0x20 +#define I1DISP_BAD_INT_THRESH 0x21 +#define I1DISP_NO_COMS 0x22 +#define I1DISP_NOT_INITED 0x23 +#define I1DISP_CANT_BLACK_CALIB 0x24 +#define I1DISP_CANT_MEASP_CALIB 0x25 +#define I1DISP_WRONG_DEVICE 0x26 +#define I1DISP_LOCKED 0x27 + + +/* I1DISP communication object */ +struct _i1disp { + INST_OBJ_BASE + + int dtype; /* Device type: 0 = i1D1, 1 = i1D2, 2 = Smile */ + int lite; /* i1D2: 0 = normal, 1 = "Lite" */ + int munki; /* i1D2: 0 = normal, 1 = "Munk" */ + int hpdream; /* i1D2: 0 = normal, 1 = "ObiW" */ + int calmanx2; /* i1D2: 0 = normal, 1 = "CMX2" */ + int chroma4; /* 0 = other, 1 = Sequel Chroma 4 (i1D1 based) */ + inst_mode mode; /* Currently selected mode */ + + inst_opt_type trig; /* Reading trigger mode */ + + /* EEPROM registers */ + /* Number is the register address, and B, S, W, F indicate the type/size */ + int reg0_W; /* Serial number */ + + double reg4_F[9]; /* LCD 3x3 calibration matrix (also known as "user") */ + /* Smile LED backlight */ + int reg50_W; /* Calibration time in secs from January 1, 1970, UTC */ + int reg126_S; /* LCD cal valid/state flag. For the i1disp this is 0xd, */ + /* perhaps meaning that it is the LCD matrix. */ + /* It's set to 7 after storing a user calibration. */ + /* A value of 0xffff or < 7 means that it's invalid */ + /* A value of 2 seems valid for OEM instruments */ + /* (Heidelberg Viewmaker & Lacie Blue Eye) */ + + double reg54_F[9]; /* CRT 3x3 calibration matrix (also known as "factory") */ + /* Smile CCFL backlight */ + int reg90_W; /* CRT cal valid/time flag. 0xffffffff = invalid, */ + /* time in secs from January 1, 1970, UTC */ + + int reg40_S; /* Integration clock perod in nsec reg40S, typically 1000 */ + int reg42_S; /* Int cal. factor denominator, typically 10000 */ + int reg44_S[3]; /* Int cal. factors numerator/100, typically 100 */ + + double clk_prd; /* Master clock period, reg94F, typically 1e-6 */ + + int reg98_W; /* A time value. Date of manufacture ? */ + /* Reg 40-44 write date ? */ + + int reg102_B; /* Not used ? */ + + double reg103_F[3]; /* Dark current calibration values */ + /* Not valid if reg126_S < 0xd ?? */ + + int reg115_B; /* Unknown */ + int reg121_B; /* Device ID character */ + + char reg122_B[5]; /* Unlock string */ + + /* Extra registers for dtype == 1 (Eye-One Display2) */ +// double reg128_F[3]; /* Not used at all */ + double reg144_F[3]; /* Ambient matrix adjustment values */ + /* ??? Default to 1.0 if not set in EEPROM */ + + /* Computed factors and state */ + double iclk_freq; /* Integration clock (from reg40_S), typically 1e6 */ + double clk_freq; /* Measurement clock (from reg94_F), typically 1e6 */ + double rgbadj[3]; /* RGB adjustment values for period meas., typically 1.0 */ + double amb[9]; /* Ambient measurement matrix = ref144[] * average of LCD & CRT */ + + inst_disptypesel *_dtlist; /* Base list */ + inst_disptypesel *dtlist; /* Display Type list */ + int ndtlist; /* Number of valid dtlist entries */ + int icx; /* 0 = LCD, 1 = CRT/CCFL matrix */ + int cbid; /* calibration base ID, 0 if not a base */ + double ccmat[3][3]; /* Colorimeter correction matrix */ + + /* For dtype == 1 (Eye-One Display2) */ + int nmeasprds; /* Number of disp refresh period measurments to average, deflt 5 */ + int refrmode; /* 0 for constant, 1 for refresh display */ + 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 dinttime; /* default integration time = 1.1 seconds */ + double inttime; /* current integration time = 1.0 seconds */ + + int int_clocks; /* Currently set integration time in clocks */ + + /* For dtype == 2 (ColorMunki Smile) */ + char serno[20]; /* Ascii serial number */ + + /* misc */ + int last_com_err; /* Last icoms error code */ + +}; typedef struct _i1disp i1disp; + +/* Constructor */ +extern i1disp *new_i1disp(icoms *icom, instType itype); + + +#define I1DISP_H +#endif /* I1DISP_H */ |