source: trunk/core/conf.c @ 1796

Revision 1796, 43.0 KB checked in by philmoz, 2 years ago (diff)

Update for DNG handling:

  • Change DNG version to 1.3.0.0
  • Add opcodes for bad pixel removal instead of generating badpixel.bin and mapping out bad pixels in the camera
  • Comment out badpixel.bin related code.
  • Property svn:eol-style set to native
Line 
1#include "platform.h"
2#include "keyboard.h"
3#include "conf.h"
4#include "histogram.h"
5#include "font.h"
6#include "camera.h"
7#include "raw.h"
8#include "modules.h"
9#include "module_load.h"
10#include "gui_draw.h"
11#include "gui_osd.h"
12#include "gui_grid.h"
13#include "gui_lang.h"
14#include "core.h"
15#include "stdlib.h"
16#include "script.h"
17
18
19//-------------------------------------------------------------------
20#define CONF_FILE  "A/CHDK/CCHDK2.CFG"
21#define CONF_MAGICK_VALUE   (0x33204741)
22
23//-------------------------------------------------------------------
24Conf conf = { MAKE_API_VERSION(2,0) };
25
26int state_shooting_progress = SHOOTING_PROGRESS_NONE;
27int state_save_raw_nth_only;
28int auto_started;
29
30// reyalp: putting these in conf, since the conf values are lookups for them
31// prefixes and extentions available for raw images (index with conf.raw_prefix etc)
32const char* img_prefixes[NUM_IMG_PREFIXES]={ "IMG_", "CRW_", "SND_" /*, "AUT_", "ETC_","SDR_", "MVI_", "MRK_"*/};
33const char* img_exts[NUM_IMG_EXTS]={ ".JPG", ".CRW", ".CR2", ".THM", ".WAV"/*, ".AVI", ".MRK"*/};
34
35//-------------------------------------------------------------------
36static int def_batt_volts_max, def_batt_volts_min;
37
38static void conf_change_script_file();
39static void conf_change_font_cp();
40static void conf_change_menu_rbf_file();
41static void conf_change_menu_symbol_rbf_file();
42static void conf_change_alt_mode_button();
43static void conf_change_video_bitrate();
44static void conf_change_dng_ext();
45static void conf_change_autoiso();
46extern void cb_autoiso_menu_change(unsigned int item);
47
48void camera_set_raw(int mode)
49{
50    conf.save_raw = mode;
51}
52
53void camera_set_nr(int mode)
54{
55    // "Auto", "Off", "On"
56    conf.raw_nr = mode;
57}
58int camera_get_script_autostart()
59{   
60    // 1 = Autostarted
61    return auto_started;
62}
63
64
65void camera_set_script_autostart(int state)
66{   
67    // 1 = Autostarted
68    auto_started = state;
69}
70
71
72int camera_get_nr()
73{
74    // "Auto", "Off", "On"
75    return conf.raw_nr;
76}
77
78
79void clear_values()
80{       
81    if (conf.platformid != PLATFORMID) // the following config entries will be resetted if you switch the camera using the same cfg
82    {
83    conf.raw_cache = 0;
84#if ZOOM_OVERRIDE
85    conf.zoom_override_value = 0;
86#endif
87    conf.fast_ev = 0;
88    conf.fast_movie_control = 0;
89    conf.fast_movie_quality_control = 0;
90    conf.zoom_scale = 100;
91    conf.platformid = PLATFORMID;
92    conf.flash_video_override = 0;
93    }
94
95    if (conf.clear_override)
96    {
97        conf.av_override_value=0;
98        conf.tv_override_koef=0;
99        conf.subj_dist_override_koef=0;
100        conf.iso_override_koef=0;
101        conf.nd_filter_state=0;
102    }
103#if ZOOM_OVERRIDE
104    if (conf.clear_zoom_override)
105    {
106        conf.zoom_override = 0;
107    }
108#endif
109    if (conf.clear_bracket)
110    {
111        conf.av_bracket_value=0;
112        conf.tv_bracket_value=0;
113        conf.iso_bracket_koef=0;
114        conf.subj_dist_bracket_koef=0;
115    }
116    if (conf.clear_video)
117    {
118        conf.video_mode = 0;
119#if CAM_CHDK_HAS_EXT_VIDEO_TIME
120        conf.ext_video_time=0;
121#endif
122        conf.video_quality = VIDEO_DEFAULT_QUALITY;
123        conf.video_bitrate = VIDEO_DEFAULT_BITRATE;
124        shooting_video_bitrate_change(conf.video_bitrate);
125    }
126    //conf.edge_overlay_pano = 0; // reset it because otherwise this feature cant be used at startup (when buffer is empty) - needs workaround other than this!
127}
128
129static const ConfInfo conf_info[] = {
130/* !!! Do NOT change ID for items defined already! Append a new one at the end! !!! */
131    CONF_INFO(  1, conf.show_osd,               CONF_DEF_VALUE, i:1, NULL),
132    CONF_INFO(  2, conf.save_raw,               CONF_DEF_VALUE, i:0, conf_change_dng),
133    CONF_INFO(  3, conf.script_shoot_delay,     CONF_DEF_VALUE, i:0, NULL),
134    CONF_INFO(  4, conf.show_histo,             CONF_DEF_VALUE, i:0, NULL),
135    CONF_INFO(  5, conf.script_vars,            CONF_INT_PTR,   i:0, NULL),
136    CONF_INFO(  6, conf.script_param_set,       CONF_DEF_VALUE, i:0, NULL),
137    CONF_INFO(  7, conf.show_dof,               CONF_DEF_VALUE, i:DOF_DONT_SHOW, NULL),
138    CONF_INFO(  8, conf.batt_volts_max,         CONF_VALUE_PTR, ptr:&def_batt_volts_max, NULL),
139    CONF_INFO(  9, conf.batt_volts_min,         CONF_VALUE_PTR, ptr:&def_batt_volts_min, NULL),
140    CONF_INFO( 10, conf.batt_step_25,           CONF_DEF_VALUE, i:1, NULL),
141    CONF_INFO( 11, conf.batt_perc_show,         CONF_DEF_VALUE, i:1, NULL),
142    CONF_INFO( 12, conf.batt_volts_show,        CONF_DEF_VALUE, i:0, NULL),
143    CONF_INFO( 13, conf.batt_icon_show,         CONF_DEF_VALUE, i:1, NULL),
144    CONF_INFO( 14, conf.show_state,             CONF_DEF_VALUE, i:1, NULL),
145    CONF_INFO( 15, conf.show_values,            CONF_DEF_VALUE, i:0, NULL),
146    CONF_INFO( 16, conf.show_overexp,           CONF_DEF_VALUE, i:1, NULL),
147    CONF_INFO( 17, conf.histo_mode,             CONF_DEF_VALUE, i:0, NULL),
148    CONF_INFO( 18, conf.histo_auto_ajust,       CONF_DEF_VALUE, i:1, NULL),
149    CONF_INFO( 19, conf.histo_ignore_boundary,  CONF_DEF_VALUE, i:4, NULL),
150    CONF_INFO( 20, conf.histo_layout,           CONF_DEF_VALUE, i:0, NULL),
151    CONF_INFO2( 21, conf.histo_pos,             CONF_OSD_POS,   45,CAM_SCREEN_HEIGHT-HISTO_HEIGHT-40),
152    CONF_INFO2( 22, conf.dof_pos,               CONF_OSD_POS,   90,45),
153    CONF_INFO2( 23, conf.batt_icon_pos,         CONF_OSD_POS,   178,0),
154    CONF_INFO2( 24, conf.batt_txt_pos,          CONF_OSD_POS,   178,FONT_HEIGHT),
155    CONF_INFO2( 25, conf.mode_state_pos,        CONF_OSD_POS,   35,0),
156    CONF_INFO2( 26, conf.values_pos,            CONF_OSD_POS,   CAM_SCREEN_WIDTH-9*FONT_WIDTH,30),
157    CONF_INFO( 27, conf.histo_color,            CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_BG, COLOR_WHITE), NULL),
158    CONF_INFO( 28, conf.osd_color,              CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_BG, COLOR_FG), NULL),
159//    CONF_INFO( 29, conf.batt_icon_color,        CONF_DEF_VALUE, cl:COLOR_WHITE, NULL),
160    CONF_INFO( 30, conf.menu_color,             CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_BG, COLOR_FG), NULL),
161//    CONF_INFO( 31, conf.reader_color,           CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_GREY, COLOR_WHITE), NULL),    // moved to text reader module
162    CONF_INFO( 32, conf.ricoh_ca1_mode,         CONF_DEF_VALUE, i:0, NULL),
163    CONF_INFO( 33, conf.flashlight,             CONF_DEF_VALUE, i:0, NULL),
164    //CONF_INFO( 34, conf.ns_enable_memdump,      CONF_DEF_VALUE, i:0, NULL),                                       // ?????
165    CONF_INFO( 34, conf.debug_shortcut_action,  CONF_DEF_VALUE, i:0, NULL), // backwards compatible
166    CONF_INFO( 35, conf.raw_in_dir,             CONF_DEF_VALUE, i:0, NULL),
167    CONF_INFO( 36, conf.raw_prefix,             CONF_DEF_VALUE, i:RAW_PREFIX_CRW, NULL),
168    CONF_INFO( 37, conf.raw_ext,                CONF_DEF_VALUE, i:DEFAULT_RAW_EXT, NULL),
169    //CONF_INFO( 38, conf.reader_file,            CONF_CHAR_PTR,   ptr:"A/CHDK/BOOKS/README.TXT", NULL),            // moved to text reader module
170    //CONF_INFO( 39, conf.reader_pos,             CONF_DEF_VALUE, i:0, NULL),                                       // moved to text reader module
171    //CONF_INFO( 40, conf.sokoban_level,          CONF_DEF_VALUE, i:0, NULL),                                       // moved to sokoban module
172    CONF_INFO( 41, conf.show_clock,             CONF_DEF_VALUE, i:2, NULL),
173    CONF_INFO2( 42, conf.clock_pos,             CONF_OSD_POS,   CAM_SCREEN_WIDTH-5*FONT_WIDTH-2,0),
174    //CONF_INFO( 43, conf.reader_autoscroll,      CONF_DEF_VALUE, i:0, NULL),                                       // moved to text reader module
175    //CONF_INFO( 44, conf.reader_autoscroll_delay,CONF_DEF_VALUE, i:5, NULL),                                       // moved to text reader module
176    //CONF_INFO( 45, conf.reader_rbf_file,        CONF_CHAR_PTR,   ptr:"", NULL),                                   // moved to text reader module
177    //CONF_INFO( 46, conf.reader_codepage,        CONF_DEF_VALUE, i:FONT_CP_WIN, NULL),                             // moved to text reader module
178    CONF_INFO( 47, conf.splash_show,            CONF_DEF_VALUE, i:1, NULL),
179    CONF_INFO( 48, conf.histo_color2,           CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_RED, COLOR_WHITE), NULL),
180    CONF_INFO( 49, conf.zebra_draw,             CONF_DEF_VALUE, i:0, NULL),
181    //CONF_INFO( 50, conf.zebra_mode,             CONF_DEF_VALUE, i:ZEBRA_MODE_BLINKED_2, NULL),                    // moved to zebra module
182    //CONF_INFO( 51, conf.zebra_restore_screen,   CONF_DEF_VALUE, i:1, NULL),                                       // moved to zebra module
183    //CONF_INFO( 52, conf.zebra_restore_osd,      CONF_DEF_VALUE, i:1, NULL),                                       // moved to zebra module
184    //CONF_INFO( 53, conf.zebra_over,             CONF_DEF_VALUE, i:1, NULL),                                       // moved to zebra module
185    //CONF_INFO( 54, conf.zebra_under,            CONF_DEF_VALUE, i:0, NULL),                                       // moved to zebra module
186    //CONF_INFO( 55, conf.zebra_color,            CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_RED, COLOR_RED), NULL),       // moved to zebra module
187    //CONF_INFO( 56, conf.zebra_draw_osd,         CONF_DEF_VALUE, i:ZEBRA_DRAW_HISTO, NULL),                        // moved to zebra module
188    CONF_INFO( 57, conf.user_menu_as_root,      CONF_DEF_VALUE, i:0, NULL),
189    CONF_INFO( 58, conf.zoom_value,             CONF_DEF_VALUE, i:ZOOM_SHOW_X, NULL),
190    CONF_INFO( 59, conf.use_zoom_mf,            CONF_DEF_VALUE, i:0, NULL),
191    CONF_INFO( 60, conf.raw_save_first_only,    CONF_DEF_VALUE, i:0, NULL),
192    //CONF_INFO( 61, conf.reader_wrap_by_words,   CONF_DEF_VALUE, i:1, NULL),                                       // moved to text reader module
193    CONF_INFO( 62, conf.menu_symbol_enable,     CONF_DEF_VALUE, i:1, NULL),
194    CONF_INFO( 63, conf.alt_mode_button,        CONF_DEF_VALUE, i:KEY_PRINT, conf_change_alt_mode_button),
195    CONF_INFO( 64, conf.lang_file,              CONF_CHAR_PTR,   ptr:"", NULL),
196#if defined(VER_CHDK)
197    CONF_INFO( 65, conf.font_cp,                    CONF_DEF_VALUE,     i:FONT_CP_WIN_1251, conf_change_font_cp),
198#else   // CHDK-DE
199    CONF_INFO( 65, conf.font_cp,                    CONF_DEF_VALUE,     i:FONT_CP_WIN_1252, conf_change_font_cp),
200#endif
201    CONF_INFO( 66, conf.menu_rbf_file,          CONF_CHAR_PTR,   ptr:"", conf_change_menu_rbf_file),
202    CONF_INFO( 67, conf.alt_prevent_shutdown,   CONF_DEF_VALUE, i:ALT_PREVENT_SHUTDOWN_ALT, conf_update_prevent_shutdown),
203    CONF_INFO( 68, conf.show_grid_lines,        CONF_DEF_VALUE, i:0, NULL),
204    //CONF_INFO( 69, conf.grid_lines_file,        CONF_CHAR_PTR,   ptr:"", NULL),                                   // moved to grid module
205    CONF_INFO( 70, conf.raw_nr,                 CONF_DEF_VALUE, i:NOISE_REDUCTION_AUTO_CANON, NULL),
206    //CONF_INFO( 71, conf.grid_force_color,       CONF_DEF_VALUE, i:0, NULL),                                       // moved to grid module
207    //CONF_INFO( 72, conf.grid_color,             CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_BG, COLOR_FG), NULL),         // moved to grid module
208
209    CONF_INFO( 80, conf.dof_subj_dist_as_near_limit,CONF_DEF_VALUE,     i:0, NULL),
210    CONF_INFO( 81, conf.dof_use_exif_subj_dist,     CONF_DEF_VALUE,     i:0, NULL),
211    CONF_INFO( 82, conf.dof_subj_dist_in_misc,      CONF_DEF_VALUE,     i:1, NULL),
212    CONF_INFO( 83, conf.dof_near_limit_in_misc,     CONF_DEF_VALUE,     i:1, NULL),
213    CONF_INFO( 84, conf.dof_far_limit_in_misc,      CONF_DEF_VALUE,     i:1, NULL),
214    CONF_INFO( 85, conf.dof_hyperfocal_in_misc,     CONF_DEF_VALUE,     i:1, NULL),
215    CONF_INFO( 86, conf.dof_depth_in_misc,          CONF_DEF_VALUE,     i:0, NULL),
216
217    CONF_INFO( 87, conf.values_show_in_review,      CONF_DEF_VALUE,     i:0, NULL),
218    CONF_INFO( 88, conf.values_show_zoom,           CONF_DEF_VALUE,     i:1, NULL),
219    CONF_INFO( 89, conf.values_show_real_aperture,  CONF_DEF_VALUE,     i:0, NULL),
220    CONF_INFO( 90, conf.values_show_real_iso,       CONF_DEF_VALUE,     i:1, NULL),
221    CONF_INFO( 91, conf.values_show_market_iso,     CONF_DEF_VALUE,     i:0, NULL),
222    CONF_INFO( 92, conf.values_show_iso_only_in_autoiso_mode, CONF_DEF_VALUE, i:0, NULL),
223    CONF_INFO( 93, conf.values_show_ev_seted,       CONF_DEF_VALUE,     i:0, NULL),
224    CONF_INFO( 94, conf.values_show_ev_measured,    CONF_DEF_VALUE,     i:0, NULL),
225    CONF_INFO( 95, conf.values_show_bv_measured,    CONF_DEF_VALUE,     i:0, NULL),
226    CONF_INFO( 96, conf.values_show_bv_seted,       CONF_DEF_VALUE,     i:0, NULL),
227    CONF_INFO( 97, conf.values_show_overexposure,   CONF_DEF_VALUE,     i:0, NULL),
228    CONF_INFO( 98, conf.values_show_luminance,      CONF_DEF_VALUE,     i:0, NULL),
229
230    CONF_INFO( 99, conf.video_mode,                 CONF_DEF_VALUE,     i:0, NULL),
231    CONF_INFO(100, conf.video_quality,              CONF_DEF_VALUE,     i:VIDEO_DEFAULT_QUALITY,NULL),
232    CONF_INFO(101, conf.video_bitrate,              CONF_DEF_VALUE,     i:VIDEO_DEFAULT_BITRATE, conf_change_video_bitrate),
233   
234    CONF_INFO(102, conf.tv_override_value,          CONF_DEF_VALUE,     i:0, NULL),
235    CONF_INFO(103, conf.tv_override_koef,           CONF_DEF_VALUE,     i:0, NULL),
236
237    CONF_INFO(104, conf.av_override_value,          CONF_DEF_VALUE,     i:0, NULL),
238    CONF_INFO(105, conf.iso_override_value,         CONF_DEF_VALUE,     i:0, NULL),
239    CONF_INFO(106, conf.iso_override_koef,          CONF_DEF_VALUE,     i:0, NULL),
240   
241    CONF_INFO(107, conf.subj_dist_override_value,   CONF_DEF_VALUE,     i:0, NULL),
242    CONF_INFO(108, conf.subj_dist_override_koef,    CONF_DEF_VALUE,     i:0, NULL),
243   
244    CONF_INFO(109, conf.tv_bracket_value,           CONF_DEF_VALUE,     i:0, NULL),
245    CONF_INFO(110, conf.av_bracket_value,           CONF_DEF_VALUE,     i:0, NULL),
246    CONF_INFO(111, conf.iso_bracket_value,          CONF_DEF_VALUE,     i:0, NULL),
247    CONF_INFO(112, conf.iso_bracket_koef,           CONF_DEF_VALUE,     i:0, NULL),
248    CONF_INFO(113, conf.subj_dist_bracket_value,    CONF_DEF_VALUE,     i:0, NULL),
249    CONF_INFO(114, conf.subj_dist_bracket_koef,     CONF_DEF_VALUE,     i:0, NULL),
250    CONF_INFO(115, conf.bracket_type,               CONF_DEF_VALUE,     i:0, NULL),
251
252//    CONF_INFO(116, conf.recalc_exposure,            CONF_DEF_VALUE,     i:0, NULL),
253//    CONF_INFO(117, conf.tv_exposure_order,          CONF_DEF_VALUE,     i:2, NULL),
254//    CONF_INFO(118, conf.av_exposure_order,          CONF_DEF_VALUE,     i:1, NULL),
255//    CONF_INFO(119, conf.iso_exposure_order,         CONF_DEF_VALUE,     i:3, NULL),
256
257    CONF_INFO(120, conf.script_startup,             CONF_DEF_VALUE,     i:0, NULL),
258    CONF_INFO(121, conf.remote_enable,              CONF_DEF_VALUE,     i:0, NULL),
259   
260    CONF_INFO(122, conf.values_show_canon_overexposure, CONF_DEF_VALUE, i:0, NULL),
261    CONF_INFO(123, conf.clear_override,             CONF_DEF_VALUE,     i:1, NULL),
262   
263    CONF_INFO(124, conf.show_osd_in_review,         CONF_DEF_VALUE,     i:0, NULL),
264   
265//    CONF_INFO(125, conf.dof_dist_from_lens,         CONF_DEF_VALUE,     i:0, NULL),
266   
267    CONF_INFO(126, conf.clear_bracket,              CONF_DEF_VALUE,     i:1, NULL),
268    //CONF_INFO(127, conf.zebra_multichannel,         CONF_DEF_VALUE,     i:0, NULL),                               // moved to zebra module
269   
270    CONF_INFO(128, conf.nd_filter_state,            CONF_DEF_VALUE,     i:0, NULL),
271    CONF_INFO(129, conf.histo_show_ev_grid,         CONF_DEF_VALUE,     i:0, NULL),
272   
273    CONF_INFO(130, conf.osd_color_warn,             CONF_DEF_VALUE,     cl:MAKE_COLOR(COLOR_BG, COLOR_RED), NULL),
274    CONF_INFO(131, conf.space_color,                CONF_DEF_VALUE,     cl:MAKE_COLOR(COLOR_BG, COLOR_FG), NULL),
275    CONF_INFO(132, conf.space_icon_show,            CONF_DEF_VALUE,     i:0, NULL),
276    CONF_INFO2(133, conf.space_icon_pos,            CONF_OSD_POS,       CAM_SCREEN_WIDTH-100,0),
277    CONF_INFO(134, conf.space_perc_show,            CONF_DEF_VALUE,     i:0, NULL),
278    CONF_INFO(135, conf.space_mb_show,              CONF_DEF_VALUE,     i:1, NULL),
279    CONF_INFO2(136, conf.space_txt_pos,             CONF_OSD_POS,       128,0),
280    CONF_INFO(137, conf.show_remaining_raw,         CONF_DEF_VALUE,     i:1, NULL),
281    CONF_INFO2(138, conf.mode_raw_pos,              CONF_OSD_POS,       CAM_SCREEN_WIDTH-7*FONT_WIDTH-2,CAM_SCREEN_HEIGHT-3*FONT_HEIGHT-2),
282    CONF_INFO(139, conf.show_raw_state,             CONF_DEF_VALUE,     i:1, NULL),
283   
284    CONF_INFO(140, conf.show_values_in_video,       CONF_DEF_VALUE,     i:0, NULL),
285    CONF_INFO(141, conf.tv_enum_type,               CONF_DEF_VALUE,     i:1, NULL),
286
287    CONF_INFO(142, conf.user_menu_enable,       CONF_DEF_VALUE, i:0, NULL),
288    CONF_INFO(143, conf.user_menu_vars,         CONF_INT_PTR,   i:0, NULL),
289    CONF_INFO(144, conf.zoom_scale,             CONF_DEF_VALUE, i:100, NULL),
290    CONF_INFO(145, conf.space_bar_show,         CONF_DEF_VALUE, i:1, NULL),
291    CONF_INFO(146, conf.space_bar_size,         CONF_DEF_VALUE, i:1, NULL),
292    CONF_INFO2(147, conf.space_ver_pos,         CONF_OSD_POS,   CAM_SCREEN_WIDTH-7,0),
293    CONF_INFO2(148, conf.space_hor_pos,         CONF_OSD_POS,   0,CAM_SCREEN_HEIGHT-7),   
294    CONF_INFO(149, conf.space_bar_width,        CONF_DEF_VALUE, i:2, NULL),
295    CONF_INFO(150, conf.space_perc_warn,        CONF_DEF_VALUE, i:10, NULL),
296    CONF_INFO(151, conf.space_mb_warn,          CONF_DEF_VALUE, i:20, NULL),
297    CONF_INFO(152, conf.space_warn_type,        CONF_DEF_VALUE, i:0, NULL),
298    CONF_INFO(153, conf.remaining_raw_treshold, CONF_DEF_VALUE, i:0, NULL),
299    CONF_INFO(154, conf.unlock_optical_zoom_for_video, CONF_DEF_VALUE, i:1, NULL),
300    CONF_INFO(155, conf.clock_format,           CONF_DEF_VALUE, i:0, NULL),
301    CONF_INFO(156, conf.clock_indicator,        CONF_DEF_VALUE, i:0, NULL),
302    CONF_INFO(157, conf.clock_halfpress,        CONF_DEF_VALUE, i:1, NULL),
303   
304    CONF_INFO(158, conf.autoiso_enable,             CONF_DEF_VALUE,     i:1, NULL),
305    CONF_INFO(159, conf.autoiso_shutter_enum,       CONF_DEF_VALUE,     i:5, NULL), // 5='1/125'
306    CONF_INFO(160, conf.autoiso_user_factor,        CONF_DEF_VALUE,     i:5, NULL),
307    CONF_INFO(161, conf.autoiso_is_factor,          CONF_DEF_VALUE,     i:2, NULL),
308    CONF_INFO(162, conf.autoiso_max_iso_hi,         CONF_DEF_VALUE,     i:55, NULL),
309    CONF_INFO(163, conf.autoiso_max_iso_auto,       CONF_DEF_VALUE,     i:32, NULL),
310    CONF_INFO(164, conf.autoiso_min_iso,            CONF_DEF_VALUE,     i:8, NULL),
311
312    CONF_INFO(165, conf.menu_title_color,           CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_WHITE, COLOR_BLACK), NULL),
313    CONF_INFO(166, conf.menu_cursor_color,          CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_SELECTED_BG, COLOR_SELECTED_FG), NULL),
314    CONF_INFO(167, conf.menu_center,                CONF_DEF_VALUE, i:1, NULL),
315    CONF_INFO(168, conf.mute_on_zoom,               CONF_DEF_VALUE, i:0, NULL),
316    CONF_INFO(169, conf.bad_pixel_removal,          CONF_DEF_VALUE, i:0, NULL),
317    CONF_INFO(170, conf.video_af_key,               CONF_DEF_VALUE, i:0, NULL),
318    CONF_INFO(171, conf.osd_color_override,         CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_BG, COLOR_RED), NULL),
319    CONF_INFO(172, conf.override_disable,           CONF_DEF_VALUE, i:2, NULL),
320    CONF_INFO(173, conf.override_disable_all,       CONF_DEF_VALUE, i:1, NULL),
321    CONF_INFO(174, conf.hide_osd,                   CONF_DEF_VALUE, i:1, NULL),
322    CONF_INFO(175, conf.save_raw_in_video,          CONF_DEF_VALUE, i:1, NULL),
323    CONF_INFO(176, conf.show_movie_time,            CONF_DEF_VALUE, i:3, NULL),
324    CONF_INFO(177, conf.show_movie_refresh,         CONF_DEF_VALUE, i:1, NULL),
325    CONF_INFO2(178, conf.mode_video_pos,            CONF_OSD_POS,   CAM_SCREEN_WIDTH-25*FONT_WIDTH-2,CAM_SCREEN_HEIGHT-6*FONT_HEIGHT-2),
326    CONF_INFO(179, conf.clear_video,                CONF_DEF_VALUE, i:0, NULL),
327    CONF_INFO(180, conf.fast_ev,                    CONF_DEF_VALUE, i:0, NULL),
328    CONF_INFO(181, conf.fast_ev_step,               CONF_DEF_VALUE, i:1, NULL),
329    CONF_INFO2(182, conf.mode_ev_pos,               CONF_OSD_POS,   CAM_SCREEN_WIDTH-40*FONT_WIDTH-2,CAM_SCREEN_HEIGHT-8*FONT_HEIGHT-2),
330    CONF_INFO(183, conf.menu_symbol_rbf_file,       CONF_CHAR_PTR,   ptr:DEFAULT_SYMBOL_FILE, conf_change_menu_symbol_rbf_file),
331    CONF_INFO(184, conf.menu_symbol_color,          CONF_DEF_VALUE, cl:MAKE_COLOR(COLOR_BG, COLOR_FG), NULL),
332#ifdef OPT_CURVES
333    CONF_INFO(185, conf.curve_file,                 CONF_CHAR_PTR,      ptr:"", NULL),
334    CONF_INFO(186, conf.curve_enable,               CONF_DEF_VALUE,     i:0, NULL),
335#endif
336    CONF_INFO(187, conf.edge_overlay_enable,        CONF_DEF_VALUE, i:0, NULL),
337    CONF_INFO(188, conf.edge_overlay_thresh,        CONF_DEF_VALUE, i:60, NULL),
338    //CONF_INFO(189, conf.edge_overlay_color,         CONF_DEF_VALUE, cl:0x66, NULL),                                   // moved to edge overlay module
339    CONF_INFO(190, conf.synch_enable,               CONF_DEF_VALUE, i:0, NULL),
340    CONF_INFO(191, conf.synch_delay_enable,         CONF_DEF_VALUE, i:0, NULL),
341    CONF_INFO(192, conf.synch_delay_value,          CONF_DEF_VALUE, i:100, NULL),
342    //CONF_INFO(193, conf.synch_delay_coarse_value,   CONF_DEF_VALUE, i:0, NULL),                                     // obsolete - no longer used
343    CONF_INFO(194, conf.script_file,                CONF_CHAR_PTR,   ptr:"", conf_change_script_file),
344    CONF_INFO(195, conf.mem_view_addr_init,         CONF_DEF_VALUE, i:0x1000, NULL),
345    CONF_INFO(196, conf.save_raw_in_sports,         CONF_DEF_VALUE, i:0, NULL),
346    CONF_INFO(197, conf.save_raw_in_burst,          CONF_DEF_VALUE, i:0, NULL),
347    CONF_INFO(198, conf.save_raw_in_ev_bracketing,  CONF_DEF_VALUE, i:0, NULL),
348    CONF_INFO(199, conf.save_raw_in_timer,          CONF_DEF_VALUE, i:0, NULL),
349    CONF_INFO(200, conf.raw_exceptions_warn,        CONF_DEF_VALUE, i:1, NULL),
350    CONF_INFO(201, conf.menu_select_first_entry,    CONF_DEF_VALUE, i:1, NULL),
351    CONF_INFO(202, conf.fast_movie_control,         CONF_DEF_VALUE, i:0, NULL),
352    CONF_INFO(203, conf.show_temp,                  CONF_DEF_VALUE, i:1, NULL),
353    CONF_INFO2(204, conf.temp_pos,                  CONF_OSD_POS,   CAM_SCREEN_WIDTH-9*FONT_WIDTH-2,FONT_HEIGHT),
354    CONF_INFO(205, conf.fast_movie_quality_control, CONF_DEF_VALUE, i:1, NULL),
355    CONF_INFO(206, conf.remote_zoom_enable,         CONF_DEF_VALUE, i:0, NULL),
356    CONF_INFO(207, conf.zoom_timeout,               CONF_DEF_VALUE, i:5, NULL),
357        CONF_INFO(208, conf.start_sound,                CONF_DEF_VALUE, i:0, NULL),
358    CONF_INFO(209, conf.sub_batch_prefix,           CONF_DEF_VALUE, i:RAW_PREFIX_SND, NULL), // SND_
359    CONF_INFO(210, conf.sub_batch_ext,              CONF_DEF_VALUE, i:DEFAULT_RAW_EXT, NULL), // .CRW
360//    CONF_INFO(211, conf.sub_in_dark_value,          CONF_DEF_VALUE, i:30, NULL),
361//    CONF_INFO(212, conf.sub_out_dark_value,         CONF_DEF_VALUE, i:0, NULL),
362        CONF_INFO(213, conf.debug_display,              CONF_DEF_VALUE, i:0, NULL),
363        CONF_INFO(214, conf.script_param_save,          CONF_DEF_VALUE, i:1, NULL),
364    CONF_INFO2(215, conf.ev_video_pos,              CONF_OSD_POS,   18,80),
365#if ZOOM_OVERRIDE
366    CONF_INFO(216, conf.zoom_override_value,        CONF_DEF_VALUE,     i:0, NULL),
367    CONF_INFO(217, conf.zoom_override,              CONF_DEF_VALUE,     i:0, NULL),
368    CONF_INFO(218, conf.clear_zoom_override,        CONF_DEF_VALUE,     i:1, NULL),
369#endif
370    CONF_INFO(219, conf.bracketing_add_raw_suffix,  CONF_DEF_VALUE, i:0, NULL),                 
371    CONF_INFO(220, conf.temperature_unit,           CONF_DEF_VALUE, i:0, NULL),
372//    CONF_INFO(221, conf.clear_zoom_override,        CONF_DEF_VALUE, i:1, NULL),                       
373    //CONF_INFO(222, conf.edge_overlay_play,          CONF_DEF_VALUE, i:0, NULL),               // moved to edge overlay module
374    CONF_INFO(223, conf.edge_overlay_pano,          CONF_DEF_VALUE, i:0, NULL),
375    //CONF_INFO(224, conf.edge_overlay_zoom,          CONF_DEF_VALUE, i:1, NULL),               // moved to edge overlay module
376    CONF_INFO(225, conf.raw_cache,                  CONF_DEF_VALUE, i:0, NULL),
377    CONF_INFO(226, conf.dng_raw,                    CONF_DEF_VALUE, i:0, conf_change_dng),
378    CONF_INFO(227, conf.flash_sync_curtain,         CONF_DEF_VALUE, i:0, NULL),
379    CONF_INFO(228, conf.raw_timer,                  CONF_DEF_VALUE, i:0, NULL),
380    CONF_INFO(229, conf.platformid,                 CONF_DEF_VALUE, i:PLATFORMID, NULL),
381    CONF_INFO(230, conf.save_raw_in_edgeoverlay,    CONF_DEF_VALUE, i:0, NULL),
382    CONF_INFO(231, conf.save_raw_in_auto,           CONF_DEF_VALUE, i:0, NULL),
383    CONF_INFO(232, conf.flash_video_override,       CONF_DEF_VALUE, i:0, NULL),
384    CONF_INFO(233, conf.flash_video_override_power, CONF_DEF_VALUE, i:0, NULL),
385    CONF_INFO(234, conf.raw_dng_ext,                CONF_DEF_VALUE, i:0, NULL),
386    CONF_INFO(235, conf.dng_usb_ext,                CONF_DEF_VALUE, i:0, conf_change_dng_ext),
387    CONF_INFO(236, conf.flash_manual_override,      CONF_DEF_VALUE, i:0, NULL),
388    CONF_INFO(237, conf.fast_image_quality,         CONF_DEF_VALUE, i:3, NULL),
389        CONF_INFO(238, conf.debug_lua_restart_on_error, CONF_DEF_VALUE, i:0, NULL),
390        CONF_INFO(239, conf.debug_propcase_page,        CONF_DEF_VALUE, i:0, NULL),
391        CONF_INFO(240, conf.debug_misc_vals_show,       CONF_DEF_VALUE, i:0, NULL),
392        //CONF_INFO(241, conf.edge_overlay_filter,        CONF_DEF_VALUE, i:0, NULL),               // moved to edge overlay module
393        //CONF_INFO(242, conf.edge_overlay_show,          CONF_DEF_VALUE, i:0, NULL),               // moved to edge overlay module
394    //CONF_INFO(243, conf.edge_overlay_pano_overlap,  CONF_DEF_VALUE, i:30, NULL),              // moved to edge overlay module
395
396    // Touch screen U/I overrides
397    CONF_INFO(244, conf.touchscreen_disable_video_controls,     CONF_DEF_VALUE, i:0, NULL),
398    CONF_INFO(245, conf.touchscreen_disable_shortcut_controls,  CONF_DEF_VALUE, i:0, NULL),
399
400    // USB Icon enable & position
401    CONF_INFO(246, conf.usb_info_enable,            CONF_DEF_VALUE, i:0, NULL),
402    CONF_INFO2(247, conf.usb_info_pos,              CONF_OSD_POS,   95,0),
403
404        // new USB remote stuff
405        CONF_INFO(248, conf.remote_switch_type,         CONF_DEF_VALUE, i:0, NULL),
406        CONF_INFO(249, conf.remote_control_mode,        CONF_DEF_VALUE, i:0, NULL),
407
408        CONF_INFO(250, conf.remote_enable_scripts,      CONF_DEF_VALUE, i:0, NULL),
409
410    CONF_INFO(251, conf.show_partition_nr,          CONF_DEF_VALUE,     i:0, NULL),
411    CONF_INFO(252, conf.ext_video_time,             CONF_DEF_VALUE,     i:0, NULL),
412#ifdef CAM_HAS_GPS
413    // GPS
414    CONF_INFO(253, conf.gps_record,                 CONF_DEF_VALUE,     i:0, NULL),
415    CONF_INFO(254, conf.gps_navi_show,              CONF_DEF_VALUE,     i:0, NULL),
416    CONF_INFO(255, conf.gps_kompass_show,           CONF_DEF_VALUE,     i:0, NULL),
417    CONF_INFO(256, conf.gps_coordinates_show,       CONF_DEF_VALUE,     i:0, NULL),
418    CONF_INFO(257, conf.gps_height_show,            CONF_DEF_VALUE,     i:0, NULL),
419    CONF_INFO(258, conf.gps_waypoint_save,          CONF_DEF_VALUE,     i:0, NULL),
420    CONF_INFO(259, conf.gps_track_time,             CONF_DEF_VALUE,     i:1, NULL),
421    CONF_INFO(260, conf.gps_kompass_hide,           CONF_DEF_VALUE,     i:0, NULL),
422
423    CONF_INFO(261, conf.gps_wait_for_signal,        CONF_DEF_VALUE,     i:300, NULL),
424    CONF_INFO(262, conf.gps_kompass_time,           CONF_DEF_VALUE,     i:1, NULL),
425    CONF_INFO(263, conf.gps_navi_time,              CONF_DEF_VALUE,     i:1, NULL),
426    CONF_INFO(264, conf.gps_wait_for_signal_time,   CONF_DEF_VALUE,     i:5, NULL),
427    CONF_INFO(265, conf.gps_kompass_smooth,         CONF_DEF_VALUE,     i:7, NULL),
428    CONF_INFO(266, conf.gps_batt,                   CONF_DEF_VALUE,     i:25, NULL),
429    CONF_INFO(267, conf.gps_countdown,              CONF_DEF_VALUE,     i:0, NULL),
430    CONF_INFO(268, conf.gps_2D_3D_fix,              CONF_DEF_VALUE,     i:2, NULL),
431    CONF_INFO(269, conf.gps_countdown_blink,        CONF_DEF_VALUE,     i:1, NULL),
432   
433    CONF_INFO(270, conf.gps_rec_play_set,           CONF_DEF_VALUE,     i:0, NULL),
434    CONF_INFO(271, conf.gps_play_dark_set,          CONF_DEF_VALUE,     i:0, NULL),
435    CONF_INFO(272, conf.gps_rec_play_time,          CONF_DEF_VALUE,     i:30, NULL),
436    CONF_INFO(273, conf.gps_play_dark_time,         CONF_DEF_VALUE,     i:45, NULL),
437
438    CONF_INFO(274, conf.gps_rec_play_set_1,         CONF_DEF_VALUE,     i:0, NULL),
439    CONF_INFO(275, conf.gps_play_dark_set_1,        CONF_DEF_VALUE,     i:0, NULL),
440    CONF_INFO(276, conf.gps_rec_play_time_1,        CONF_DEF_VALUE,     i:10, NULL),
441    CONF_INFO(277, conf.gps_play_dark_time_1,       CONF_DEF_VALUE,     i:15, NULL),
442    CONF_INFO(278, conf.gps_show_symbol,            CONF_DEF_VALUE,     i:0, NULL),
443    CONF_INFO(279, conf.gps_batt_warn,              CONF_DEF_VALUE,     i:0, NULL),
444    CONF_INFO(270, conf.gps_track_symbol,           CONF_DEF_VALUE,     i:0, NULL),
445    CONF_INFO(280, conf.gps_test_timezone,          CONF_DEF_VALUE,     i:0, NULL),
446    CONF_INFO(281, conf.gps_beep_warn,              CONF_DEF_VALUE,     i:0, NULL),
447    CONF_INFO(282, conf.gps_on_off,                 CONF_DEF_VALUE,     i:0, NULL),
448#endif
449
450    // AutoISO2
451    CONF_INFO(283, conf.autoiso2_shutter_enum,      CONF_DEF_VALUE,     i:6, NULL), // 6='1/20'
452    CONF_INFO(284, conf.autoiso2_max_iso_auto,      CONF_DEF_VALUE,     i:60, NULL),
453    CONF_INFO(285, conf.autoiso2_over,              CONF_DEF_VALUE,     i:1, NULL),
454    CONF_INFO(286, conf.overexp_threshold,          CONF_DEF_VALUE,     i:5, NULL),
455    CONF_INFO(287, conf.overexp_ev_enum,            CONF_DEF_VALUE,     i:3, conf_change_autoiso),
456    };
457#define CONF_NUM (sizeof(conf_info)/sizeof(conf_info[0]))
458
459// Since only a few of the ConfInfo entries have a 'func' it saves space to not store the function addresses in the ConfInfo struct
460void conf_info_func(unsigned short id)
461{
462    switch (id)
463    {
464    case  63: conf_change_alt_mode_button(); break;
465    case  64: gui_lang_init(); break;
466    case  65: conf_change_font_cp(); break;
467    case  66: conf_change_menu_rbf_file(); break;
468    case  67: conf_update_prevent_shutdown(); break;
469    case 101: conf_change_video_bitrate(); break;
470    case 143: user_menu_restore(); break;
471    case 183: conf_change_menu_symbol_rbf_file(); break;
472    case 194: conf_change_script_file(); break;
473    case 2:
474    case 226: conf_change_dng(); break;
475    case 235: conf_change_dng_ext(); break;
476    case 284: conf_change_autoiso(); break;
477    }
478}
479
480//-------------------------------------------------------------------
481
482static void conf_change_font_cp() {
483    font_init();
484    font_set(conf.font_cp);
485}
486
487static void conf_change_script_file() {
488#ifdef OPT_SCRIPTING
489    script_load(conf.script_file, 2);
490#endif
491}
492
493
494static void conf_change_menu_rbf_file() {
495    rbf_load_from_file(conf.menu_rbf_file, FONT_CP_WIN);
496}
497
498static void conf_change_menu_symbol_rbf_file() {
499    if(!rbf_load_symbol(conf.menu_symbol_rbf_file)) conf.menu_symbol_enable=0;      //AKA
500}
501
502static void conf_change_alt_mode_button() {
503#if CAM_ADJUSTABLE_ALT_BUTTON
504    kbd_set_alt_mode_key_mask(conf.alt_mode_button);
505#else
506    conf.alt_mode_button = KEY_PRINT;
507#endif
508}
509
510static void conf_change_video_bitrate() {
511    shooting_video_bitrate_change(conf.video_bitrate);
512 }
513
514void conf_change_dng(void){
515#if DNG_SUPPORT
516 if (conf.save_raw && conf.dng_raw) {
517        if ( !module_dng_load(LIBDNG_OWNED_BY_RAW) )
518                return;
519    //if (!libdng->badpixel_list_loaded_b()) libdng->load_bad_pixels_list_b("A/CHDK/badpixel.bin");
520    //if (!libdng->badpixel_list_loaded_b()) conf.dng_raw=0;
521 }
522 else if ( libdng && libdng->load_bad_pixels_list_b ) {
523    //libdng->load_bad_pixels_list_b(0);        //unload badpixel.bin
524        module_dng_unload(LIBDNG_OWNED_BY_RAW);
525 }
526#endif
527}
528
529void conf_change_dng_ext(void){
530#if defined (DNG_EXT_FROM)
531 save_ext_for_dng();
532 if (conf.dng_usb_ext) change_ext_to_dng(); else change_ext_to_default();
533#endif
534}
535
536void conf_change_autoiso()
537{
538  // Use menu callback ( some required enum declaration are isolated there)
539  cb_autoiso_menu_change(-1);
540}
541
542/*
543update the prevent display off/prevent shutdown based on current state
544doesn't really belong in conf but not clear where else it should go
545*/
546void conf_update_prevent_shutdown(void) {
547    if(conf.alt_prevent_shutdown == ALT_PREVENT_SHUTDOWN_ALWAYS
548        || (conf.alt_prevent_shutdown == ALT_PREVENT_SHUTDOWN_ALT && gui_get_mode() != GUI_MODE_NONE)
549        || (conf.alt_prevent_shutdown == ALT_PREVENT_SHUTDOWN_ALT_SCRIPT && state_kbd_script_run)) {
550        disable_shutdown();
551    } else {
552        enable_shutdown();
553    }
554}
555
556//-------------------------------------------------------------------
557static void conf_init_defaults() {
558    // init some defaults values
559    def_batt_volts_max = get_vbatt_max();
560    def_batt_volts_min = get_vbatt_min();
561}
562
563//-------------------------------------------------------------------
564void config_load_defaults(const ConfInfo *confinfo, int conf_num, void (*info_func)(unsigned short id))
565{
566    register int i;
567
568    for (i=0; i<conf_num; ++i) {
569        switch (confinfo[i].type) {
570            case CONF_OSD_POS:
571            case CONF_DEF_VALUE:
572                memcpy(confinfo[i].var, &(confinfo[i].i), confinfo[i].size);
573                break;
574            case CONF_INT_PTR:
575                memset(confinfo[i].var, 0, confinfo[i].size);
576                break;
577            case CONF_VALUE_PTR:
578            case CONF_CHAR_PTR:
579                memcpy(confinfo[i].var, confinfo[i].ptr, confinfo[i].size);
580                break;
581        }
582        if (info_func) info_func(confinfo[i].id);
583    }
584}
585
586void conf_load_defaults()
587{
588    config_load_defaults(&conf_info[0], CONF_NUM, conf_info_func);
589}
590
591//-------------------------------------------------------------------
592
593// Structure for saved conf info (allows for changes to ConfInfo without affecting saved configurations
594typedef struct
595{
596    unsigned short id;
597    unsigned short size;
598} ConfInfoSave;
599
600void config_save(const ConfInfo *conf_info, char *filename, int conf_num)
601{
602    static const long t=CONF_MAGICK_VALUE;
603    register int i;
604   
605    int size = sizeof(t) + conf_num * sizeof(ConfInfoSave);
606    for (i=0; i<conf_num; i++) size += conf_info[i].size;
607
608    char *buf = umalloc(size);
609    char *p = buf;
610
611    int fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0777);
612    if (fd >= 0)
613    {
614        memcpy(p, &t, sizeof(t));
615        p += sizeof(t);
616        for (i=0; i<conf_num; ++i)
617        {
618            ((ConfInfoSave*)p)->id   = conf_info[i].id;
619            ((ConfInfoSave*)p)->size = conf_info[i].size;
620            p += sizeof(ConfInfoSave);
621            memcpy(p, conf_info[i].var, conf_info[i].size);
622            // Clear out unused space after string config item value
623            if ((conf_info[i].size == CONF_STR_LEN) && (strlen(conf_info[i].var) < CONF_STR_LEN))
624                memset(p+strlen(conf_info[i].var), 0, CONF_STR_LEN-strlen(conf_info[i].var));
625            p += conf_info[i].size;
626        }
627
628        write(fd, buf, p-buf);
629        close(fd);
630    }
631    ufree(buf);
632}
633
634void conf_save()
635{
636    config_save(&conf_info[0], CONF_FILE, CONF_NUM);
637}
638
639//-------------------------------------------------------------------
640void config_restore(const ConfInfo *confinfo, char *filename, int conf_num, void (*info_func)(unsigned short id))
641{
642    int fd, rcnt, i;
643    unsigned short id, size;
644    char *buf;
645    int offs, old_ver;
646    struct stat st;
647
648    config_load_defaults(confinfo, conf_num, info_func);
649
650    if( stat(filename,&st) != 0 || st.st_size < sizeof(int))
651        return;
652
653    if(!(buf=umalloc(st.st_size)))
654        return;
655
656    fd = open(filename, O_RDONLY, 0777);
657    if( fd < 0 ) {
658        ufree(buf);
659        return;
660    }
661   
662    rcnt = read(fd,buf,st.st_size);
663    close(fd);
664    // read magick value
665    if (*(int *)buf!=CONF_MAGICK_VALUE || rcnt != st.st_size) {
666        ufree(buf);
667        return;
668    }
669
670    offs=sizeof(int);
671    while (1) {
672        if (offs + sizeof(short) > rcnt)
673            break;
674        id=*((short *)(buf + offs));
675        offs += sizeof(short);
676
677        if (offs + sizeof(short) > rcnt)
678            break;
679        size=*((short *)(buf + offs));
680        offs += sizeof(short);
681
682        for (i=0; i<conf_num; ++i) {
683            if (confinfo[i].id==id && confinfo[i].size==size) {
684                if (offs + size <= rcnt) {
685                   memcpy(confinfo[i].var, buf+offs, size);
686                   if (info_func) info_func(confinfo[i].id);
687                }
688                break;
689            }
690        }
691
692        offs += size;
693    }
694    ufree(buf);
695    // clear any "clear on restart" values
696    clear_values();
697#if CAM_CHDK_HAS_EXT_VIDEO_TIME
698    conf.ext_video_time=0;
699#endif
700}
701
702void conf_restore()
703{
704    conf_init_defaults();
705    config_restore(&conf_info[0], CONF_FILE, CONF_NUM, conf_info_func);
706}
707
708//-------------------------------------------------------------------
709int conf_getValue(unsigned short id, tConfigVal* configVal) {
710    unsigned short i;
711    int ret = CONF_EMPTY;
712    OSD_pos* pos;
713   
714    if( id==0 ) {
715        configVal->numb = 0;
716        for( i=0; i<CONF_NUM; ++i ) if( configVal->numb<conf_info[i].id ) configVal->numb = conf_info[i].id;
717        ret = CONF_VALUE;
718    } else {
719        for( i=0; i<CONF_NUM; ++i ) {
720            if( conf_info[i].id==id ) {
721                switch( conf_info[i].type ) {
722                    case CONF_VALUE:
723                    case CONF_VALUE_PTR:
724                        switch( conf_info[i].size ) {
725                            case sizeof(int):
726                                configVal->numb = *(int*)conf_info[i].var;
727                                ret = CONF_VALUE;
728                            break;
729                            case sizeof(short):
730                                configVal->numb = *(short*)conf_info[i].var;
731                                ret = CONF_VALUE;
732                            break;
733                            case sizeof(char):
734                                configVal->numb = *(char*)conf_info[i].var;
735                                ret = CONF_VALUE;
736                            break;
737                        }
738                        configVal->pInt = (int*)conf_info[i].var;
739                    break;
740                    case CONF_INT_PTR:
741                        configVal->numb = conf_info[i].size/sizeof(int);
742                        configVal->pInt = (int*)conf_info[i].var;
743                        ret = CONF_INT_PTR;
744                    break;
745                    case CONF_CHAR_PTR:
746                        configVal->str = conf_info[i].var;
747                        ret = CONF_CHAR_PTR;
748                    break;
749                    case CONF_OSD_POS:
750                        pos = (OSD_pos*)conf_info[i].var;
751                        configVal->pos.x = pos->x;
752                        configVal->pos.y = pos->y;
753                        ret = CONF_OSD_POS;
754                        configVal->pInt = (int*)conf_info[i].var;
755                    break;
756                }
757                break;
758            }
759        }
760    }
761    return ret;
762}
763
764//-------------------------------------------------------------------
765int conf_setValue(unsigned short id, tConfigVal configVal) {
766    unsigned short i;
767    int ret = CONF_EMPTY, len, len2;
768    OSD_pos* pos;
769   
770    for( i=0; i<CONF_NUM; ++i ) {
771        if( conf_info[i].id==id ) {
772            switch( conf_info[i].type ) {
773                case CONF_VALUE:
774                case CONF_VALUE_PTR:
775                    if( configVal.isNumb ) {
776                        switch( conf_info[i].size ) {
777                            case sizeof(int):
778                                *(int*)conf_info[i].var = (int)configVal.numb;
779                                ret = CONF_VALUE;
780                            break;
781                            case sizeof(short):
782                                *(short*)conf_info[i].var = (short)configVal.numb;
783                                ret = CONF_VALUE;
784                            break;
785                            case sizeof(char):
786                                *(char*)conf_info[i].var = (char)configVal.numb;
787                                ret = CONF_VALUE;
788                            break;
789                        }
790                    }
791                break;
792                case CONF_INT_PTR:
793                    if( configVal.isPInt ) {
794                        len = conf_info[i].size;
795                        len2 = configVal.numb*sizeof(int);
796                        if( len2<len ) len = len2;
797                        memcpy(conf_info[i].var, configVal.pInt, len);
798                        ret = CONF_INT_PTR;
799                    }
800                break;
801                case CONF_CHAR_PTR:
802                    if( configVal.isStr ) {
803                        len = strlen(configVal.str);
804                        if( len>0 && len<CONF_STR_LEN) {
805                            strncpy(conf_info[i].var, configVal.str ,len+1);
806                        }
807                        ret = CONF_CHAR_PTR;
808                    }
809                break;
810                case CONF_OSD_POS:
811                    if( configVal.isPos ) {
812                        pos = (OSD_pos*)conf_info[i].var;
813                        pos->x = configVal.pos.x;
814                        pos->y = configVal.pos.y;
815                        ret = CONF_OSD_POS;
816                    }
817                break;
818            }
819            break;
820        }
821    }
822    if( ret!=CONF_EMPTY ) {
823        conf_save();
824    }
825    return ret;
826}
827
828//-------------------------------------------------------------------
829// Common code extracted from raw.c (raw_savefile) and gui_osd.c (gui_osd_draw_raw_info)
830// returns 0 if RAW save is disabled due to mode settings, etc, return 1 if RAW save OK
831int is_raw_enabled()
832{
833    int m = mode_get() & MODE_SHOOTING_MASK;
834
835    // NOTE: the conf.save_raw_in variables are negative logic
836    //       1 = disable saving raw in this mode, 0 = allow saving raw
837    //       variables should be named conf.disable_save_raw_in_XXX
838
839    return !(   // Return false if any of these tests are true
840        ((movie_status > 1) && conf.save_raw_in_video) ||                                   // True is movie mode and save_raw_in_video is disabled
841#ifdef CAM_DISABLE_RAW_IN_LOW_LIGHT_MODE
842        (shooting_get_resolution()==7) ||                                                   // True if shooting resolution is 'low light'
843#endif
844#if defined(CAM_DISABLE_RAW_IN_HQ_BURST)
845        (m == MODE_SCN_HIGHSPEED_BURST) ||                                                  // True if HQ Burst mode (SX40HS corrupts JPEG images if RAW enabled in this mode)
846#endif
847#if defined(CAM_DISABLE_RAW_IN_HANDHELD_NIGHT_SCN)
848        (m == MODE_NIGHT_SCENE) ||                                                          // True if HandHeld Night Scene (SX40HS corrupts JPEG images if RAW enabled in this mode)
849#endif
850        (shooting_get_resolution()==5) ||                                                   // True if shooting resolution is ??? (what is mode 5)
851        ((m==MODE_SPORTS) && conf.save_raw_in_sports) ||                                    // True if sports mode and save_raw_in_sports is disabled
852        ((m==MODE_AUTO) && conf.save_raw_in_auto) ||                                        // True if auto mode and save_raw_in_auto is disabled
853        (conf.edge_overlay_enable && conf.save_raw_in_edgeoverlay) ||                       // True if edge overlay on and save_raw_in_edgeoverlay is disabled
854        ((shooting_get_drive_mode()==1) && conf.save_raw_in_burst && !(m==MODE_SPORTS)) ||  // True if drive mode is continuous and save_raw_in_burst is disabled and not sports mode
855        ((shooting_get_drive_mode()>=2) && conf.save_raw_in_timer) ||                       // True if drive mode is timer and save_raw_in_timer is disabled
856        ((shooting_get_prop(PROPCASE_BRACKET_MODE)==1) && conf.save_raw_in_ev_bracketing)   // True if bracketing enabled and save_raw_in_ev_bracketing is disabled
857    );
858}
859
860//-------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.