1 
2 #ifndef DISPTYPES_H
3 
4  /* Standardized display types for use with libinst */
5 
6 /*
7  * Argyll Color Correction System
8  *
9  * Author: Graeme W. Gill
10  * Date:   14/5/2014
11  *
12  * Copyright 2014 Graeme W. Gill
13  * All rights reserved.
14  *
15  * This material is licenced under the GNU GENERAL PUBLIC LICENSE Version 2 or later :-
16  * see the License2.txt file for licencing details.
17  *
18  */
19 
20 #ifdef __cplusplus
21 	extern "C" {
22 #endif
23 
24 /* See <http://www.tftcentral.co.uk/> for some numbers on response times */
25 
26 /* These are intended to be conservative numbers for 90% transition times */
27 /* The settling model will compute the time necessary for a 0.1 dE error */
28 /* from this using an exponenial decay model. */
29 
30 #define DISPTECH_WORST_RISE 0.100
31 #define DISPTECH_WORST_FALL 0.250
32 
33 #define DISPTECH_CRT_RISE 0.040
34 #define DISPTECH_CRT_FALL 0.250
35 
36 #define DISPTECH_LCD_RISE 0.100
37 #define DISPTECH_LCD_FALL 0.050
38 
39 #define DISPTECH_LED_RISE 0.001
40 #define DISPTECH_LED_FALL 0.001
41 
42 #define DISPTECH_DLP_RISE 0.002
43 #define DISPTECH_DLP_FALL 0.002
44 
45 /* Type of display technology */
46 typedef enum {
47 
48 	disptech_unknown            = 0x0000,		/* Unknown dislay type */
49 
50 	disptech_none               = 0x0001,		/* display type is inaplicable (ie. ambient) */
51 
52 	disptech_crt                = 0x1000,		/* Generic CRT */
53 
54 	disptech_plasma             = 0x2000,		/* Generic Plasma */
55 
56 	disptech_lcd                = 0x3000,		/* Generic LCD */
57 
58 	disptech_lcd_ccfl           = 0x3100,		/* LCD with CCFL */
59 	disptech_lcd_ccfl_ips       = 0x3110,		/* IPS LCD with CCFL */
60 	disptech_lcd_ccfl_vpa       = 0x3120,		/* VPA LCD with CCFL */
61 	disptech_lcd_ccfl_tft       = 0x3130,		/* TFT LCD with CCFL */
62 
63 	disptech_lcd_ccfl_wg        = 0x3200,		/* Wide gamut LCD with CCFL */
64 	disptech_lcd_ccfl_wg_ips    = 0x3210,		/* IPS wide gamut LCD with CCFL */
65 	disptech_lcd_ccfl_wg_vpa    = 0x3220,		/* VPA wide gamut LCD with CCFL */
66 	disptech_lcd_ccfl_wg_tft    = 0x3230,		/* TFT wide gamut LCD with CCFL */
67 
68 	disptech_lcd_wled           = 0x3300,		/* LCD with white LED */
69 	disptech_lcd_wled_ips       = 0x3310,		/* IPS LCD with white LED */
70 	disptech_lcd_wled_vpa       = 0x3320,		/* VPA LCD with white LED */
71 	disptech_lcd_wled_tft       = 0x3330,		/* TFT LCD with white LED */
72 
73 	disptech_lcd_rgbled         = 0x3400,		/* LCD with RGB LED */
74 	disptech_lcd_rgbled_ips     = 0x3410,		/* IPS LCD with RGB LED */
75 	disptech_lcd_rgbled_vpa     = 0x3420,		/* VPA LCD with RGB LED */
76 	disptech_lcd_rgbled_tft     = 0x3430,		/* TFT LCD with RGB LED */
77 
78 	disptech_lcd_rgledp         = 0x3500,		/* IPS LCD with RG LED + Phosphor */
79 	disptech_lcd_rgledp_ips     = 0x3510,		/* IPS LCD with RG LED + Phosphor */
80 	disptech_lcd_rgledp_vpa     = 0x3520,		/* VPA LCD with RG LED + Phosphor */
81 	disptech_lcd_rgledp_tft     = 0x3530,		/* TFT LCD with RG LED + Phosphor */
82 
83 	disptech_oled               = 0x4000,		/* Organic LED */
84 	disptech_amoled             = 0x4010,		/* Active Matrix Organic LED */
85 
86 	disptech_dlp                = 0x5000,		/* Generic Digital Light Processing projector */
87 	disptech_dlp_rgb            = 0x5010,		/* DLP projector with RGB filter */
88 	disptech_dlp_rgbw           = 0x5020,		/* DLP projector with RGBW filter */
89 	disptech_dlp_rgbcmy         = 0x5030,		/* DLP projector with RGBCMY filter */
90 
91 	disptech_end                = 0xffffffff	/* List end marker */
92 
93 } disptech;
94 
95 #ifdef __cplusplus
96 	}
97 #endif
98 
99 /* Information defined by instrument type */
100 struct _disptech_info {
101 
102 	disptech dtech;			/* Enumeration */
103 
104 	char *strid;			/* String ID */
105 	char *desc;				/* Desciption and identification string */
106 
107 	int  refr;				/* Refresh mode flag */
108 
109 	double rise_time;		/* rise time to 90% in seconds */
110 	double fall_time;		/* fall time to 90% in seconds */
111 
112 	char *sel;				/* Default command line selector (may be NULL) */
113 
114   /* Private: */
115 
116 	char lsel[10];			/* Unique list selector for ui */
117 	char isel[10];			/* Candidate selectors */
118 
119 }; typedef struct _disptech_info disptech_info;
120 
121 
122 /* Given the enum id, return the matching disptech_info entry */
123 /* Return the disptech_unknown entry if not matched */
124 disptech_info *disptech_get_id(disptech id);
125 
126 /* Given the string id, return the matching disptech_info entry */
127 /* Return the disptech_unknown entry if not matched */
128 disptech_info *disptech_get_strid(char *strid);
129 
130 /* Return the display tech list with unique lsel lectors */
131 disptech_info *disptech_get_list();
132 
133 /* Locate the display list item that matches the given selector. */
134 /* Return NULL if not found */
135 disptech_info *disptech_select(disptech_info *list, char c);
136 
137 /* - - - - - - - - - - - */
138 
139 /* utility function, used by disptech_get_list & inst_creat_disptype_list()  */
140 /* See disptechs.c for parameter description. */
141 void disptechs_set_sel(int flag, int ix, char *osel, char *isel, char *usels, int *k, char *asels);
142 
143 /* - - - - - - - - - - */
144 /* Display settling time model */
145 
146 double disp_settle_time(double *orgb, double *nrgb, double rise, double fall, double dE);
147 
148 
149 #define DISPTYPES_H
150 #endif /* DISPTYPES_H */
151 
152