This source file includes following definitions.
- schedule_memdump
- dump_memory
- core_get_free_memory
- core_rawdata_available
- core_spytask_can_start
- script_autostart
- core_spytask
1 #include "platform.h"
2 #include "core.h"
3 #include "conf.h"
4 #include "gui.h"
5 #include "gui_draw.h"
6 #include "histogram.h"
7 #include "raw.h"
8 #include "console.h"
9 #include "shooting.h"
10
11 #include "edgeoverlay.h"
12 #include "module_load.h"
13
14 #ifdef CAM_HAS_GPS
15 #include "gps.h"
16 #endif
17
18 #include "kbd_common.h"
19
20
21
22 static char osd_buf[50];
23
24
25
26 volatile int chdk_started_flag=0;
27
28 int no_modules_flag;
29
30 static volatile int spytask_can_start;
31
32 static unsigned int memdmptick = 0;
33 volatile int memdmp_delay = 0;
34
35 void schedule_memdump()
36 {
37 memdmptick = get_tick_count() + memdmp_delay * 1000;
38 }
39
40 void dump_memory()
41 {
42 int fd;
43 static int cnt=1;
44 static char fn[32];
45
46
47 if (conf.memdmp_size == 0) conf.memdmp_size = (unsigned int)camera_info.maxramaddr + 1;
48
49 if ((unsigned int)conf.memdmp_start > (unsigned int)camera_info.maxramaddr)
50 conf.memdmp_start = 0;
51 if ( (unsigned int)conf.memdmp_start + (unsigned int)conf.memdmp_size > ((unsigned int)camera_info.maxramaddr+1) )
52 conf.memdmp_size = (unsigned int)camera_info.maxramaddr + 1 - (unsigned int)conf.memdmp_start;
53
54 started();
55
56 if ( !is_video_recording() ) {
57 mkdir("A/DCIM");
58 mkdir("A/DCIM/100CANON");
59 fd = -1;
60 do {
61 sprintf(fn, "A/DCIM/100CANON/CRW_%04d.JPG", cnt++);
62 if (stat(fn,0) != 0) {
63 fd = open(fn, O_WRONLY|O_CREAT, 0777);
64 break;
65 }
66 } while(cnt<9999);
67 if (fd>=0) {
68 if ( conf.memdmp_start == 0 ) {
69 long val0 = *((long*)(0|CAM_UNCACHED_BIT));
70 write(fd, &val0, 4);
71 if (conf.memdmp_size > 4) {
72 write(fd, (void*)4, conf.memdmp_size - 4);
73 }
74 }
75 else {
76 write(fd, (void*)conf.memdmp_start, conf.memdmp_size);
77 }
78 close(fd);
79 }
80 vid_bitmap_refresh();
81 }
82 finished();
83 }
84
85 int core_get_free_memory()
86 {
87 cam_meminfo camera_meminfo;
88 GetCombinedMemInfo(&camera_meminfo);
89 return camera_meminfo.free_block_max_size;
90 }
91
92 static volatile long raw_data_available;
93
94
95 void core_rawdata_available()
96 {
97 raw_data_available = 1;
98 }
99
100 void core_spytask_can_start() {
101 spytask_can_start = 1;
102 }
103
104
105 void script_autostart()
106 {
107
108 enter_alt(0);
109
110 gui_activate_alt_mode();
111
112 script_start_gui( 1 );
113 }
114
115 void core_spytask()
116 {
117 int cnt = 1;
118 int i=0;
119 #ifdef CAM_HAS_GPS
120 int gps_delay_timer = 200 ;
121 int gps_state = -1 ;
122 #endif
123 #if (OPT_DISABLE_CAM_ERROR)
124 extern void DisableCamError();
125 int dce_cnt=0;
126 int dce_prevmode=0;
127 int dce_nowmode;
128 #endif
129
130 parse_version(&chdk_version, BUILD_NUMBER, BUILD_SVNREV);
131
132
133 camera_info_init();
134
135 spytask_can_start=0;
136
137 #if !defined(CAM_DRYOS)
138
139
140 extern void canon_malloc_init(void);
141 canon_malloc_init();
142 #endif
143
144 extern void aram_malloc_init(void);
145 aram_malloc_init();
146
147 extern void exmem_malloc_init(void);
148 exmem_malloc_init();
149
150 #ifdef CAM_CHDK_PTP
151 extern void init_chdk_ptp_task();
152 init_chdk_ptp_task();
153 #endif
154
155 while((i++<1000) && !spytask_can_start) msleep(10);
156
157 started();
158 msleep(50);
159 finished();
160
161 #if !CAM_DRYOS
162 drv_self_unhide();
163 #endif
164
165 conf_restore();
166
167 extern void gui_init();
168 gui_init();
169
170 #if CAM_CONSOLE_LOG_ENABLED
171 extern void cam_console_init();
172 cam_console_init();
173 #endif
174
175 static char *chdk_dirs[] =
176 {
177 "A/CHDK",
178 "A/CHDK/FONTS",
179 "A/CHDK/SYMBOLS",
180 "A/CHDK/SCRIPTS",
181 "A/CHDK/LANG",
182 "A/CHDK/BOOKS",
183 "A/CHDK/MODULES",
184 "A/CHDK/MODULES/CFG",
185 "A/CHDK/GRIDS",
186 "A/CHDK/CURVES",
187 "A/CHDK/DATA",
188 "A/CHDK/LOGS",
189 "A/CHDK/EDGE",
190 };
191 for (i = 0; i < (int)(sizeof(chdk_dirs) / sizeof(char*)); i++)
192 mkdir_if_not_exist(chdk_dirs[i]);
193
194 no_modules_flag = stat("A/CHDK/MODULES/FSELECT.FLT",0) ? 1 : 0 ;
195
196
197
198 long t1, t2;
199 t2 = time(0);
200 do
201 {
202 t1 = t2;
203 camera_info.tick_count_offset = get_tick_count();
204 t2 = time(0);
205 msleep(10);
206 } while (t1 != t2);
207 camera_info.tick_count_offset = camera_info.tick_count_offset % 1000;
208
209
210 if (conf.script_startup==SCRIPT_AUTOSTART_ALWAYS)
211 {
212 script_autostart();
213 }
214 else if (conf.script_startup==SCRIPT_AUTOSTART_ONCE)
215 {
216 conf.script_startup=SCRIPT_AUTOSTART_NONE;
217 conf_save();
218 script_autostart();
219 }
220
221 shooting_init();
222
223
224 #ifdef HDMI_HPD_FLAG
225 if(get_hdmi_hpd_physw_mod()) {
226 draw_suspend(3000);
227 }
228 #endif
229
230 if(conf.check_firmware_crc) {
231 module_run("fwcrc.flt");
232 }
233
234 while (1)
235 {
236
237 mode_get();
238
239 #ifdef CAM_CLEAN_OVERLAY
240 extern void handle_clean_overlay();
241 handle_clean_overlay();
242 #endif
243
244 #ifdef CAM_UNLOCK_ANALOG_AV_IN_REC
245 extern void handle_analog_av_in_rec();
246 handle_analog_av_in_rec();
247 #endif
248
249 #ifdef CAM_REMOTE_HDMI_POWER_OVERRIDE
250 extern void update_hdmi_power_override(void);
251 update_hdmi_power_override();
252 #endif
253
254 extern void set_palette();
255 set_palette();
256
257 #if (OPT_DISABLE_CAM_ERROR)
258 dce_nowmode = camera_info.state.mode_play;
259 if (dce_prevmode==dce_nowmode)
260 {
261 dce_cnt++;
262 }
263 else
264 {
265 dce_cnt=0;
266 }
267 if (dce_cnt==100)
268 {
269 DisableCamError();
270 }
271 dce_prevmode=dce_nowmode;
272 #endif
273
274 if ( memdmptick && ((unsigned)get_tick_count() >= memdmptick) )
275 {
276 memdmptick = 0;
277 dump_memory();
278 }
279
280 #ifdef CAM_HAS_GPS
281 if ( --gps_delay_timer == 0 )
282 {
283 gps_delay_timer = 50 ;
284 if ( gps_state != (int)conf.gps_on_off )
285 {
286 gps_state = (int)conf.gps_on_off ;
287 init_gps_startup(!gps_state) ;
288 }
289 }
290 #endif
291
292
293 gui_activate_alt_mode();
294
295 #ifdef CAM_LOAD_CUSTOM_COLORS
296
297 extern void load_chdk_palette();
298 load_chdk_palette();
299 #endif
300
301 if (raw_data_available)
302 {
303 raw_process();
304 extern void hook_raw_save_complete();
305 hook_raw_save_complete();
306 raw_data_available = 0;
307 #ifdef CAM_HAS_GPS
308 if (((int)conf.gps_on_off == 1) && ((int)conf.gps_waypoint_save == 1)) gps_waypoint();
309 #endif
310 #if defined(CAM_CALC_BLACK_LEVEL)
311
312 camera_sensor.black_level = CAM_BLACK_LEVEL;
313 #endif
314 continue;
315 }
316
317 if ((camera_info.state.state_shooting_progress != SHOOTING_PROGRESS_PROCESSING) || recreview_hold)
318 {
319 if (((cnt++) & 3) == 0)
320 gui_redraw();
321 }
322
323 if (camera_info.state.state_shooting_progress != SHOOTING_PROGRESS_PROCESSING)
324 {
325 if (conf.show_histo)
326 libhisto->histogram_process();
327
328 if ((camera_info.state.gui_mode_none || camera_info.state.gui_mode_alt) && conf.edge_overlay_thresh && conf.edge_overlay_enable)
329 {
330
331 if (chdk_started_flag)
332 {
333 libedgeovr->edge_overlay();
334 }
335 }
336 }
337
338 if ((camera_info.state.state_shooting_progress == SHOOTING_PROGRESS_PROCESSING) && (!shooting_in_progress()))
339 {
340 camera_info.state.state_shooting_progress = SHOOTING_PROGRESS_DONE;
341 }
342
343 i = 0;
344
345 #ifdef DEBUG_PRINT_TO_LCD
346 sprintf(osd_buf, "%d", cnt );
347 draw_txt_string(1, i++, osd_buf, user_color(conf.osd_color));
348 #endif
349 #if defined(OPT_FILEIO_STATS)
350 sprintf(osd_buf, "%3d %3d %3d %3d %3d %3d %3d %4d",
351 camera_info.fileio_stats.fileio_semaphore_errors, camera_info.fileio_stats.close_badfile_count,
352 camera_info.fileio_stats.write_badfile_count, camera_info.fileio_stats.open_count,
353 camera_info.fileio_stats.close_count, camera_info.fileio_stats.open_fail_count,
354 camera_info.fileio_stats.close_fail_count, camera_info.fileio_stats.max_semaphore_timeout);
355 draw_txt_string(1, i++, osd_buf,user_color( conf.osd_color));
356 #endif
357
358 if (camera_info.perf.md_af_tuning)
359 {
360 sprintf(osd_buf, "MD last %-4d min %-4d max %-4d avg %-4d",
361 camera_info.perf.af_led.last, camera_info.perf.af_led.min, camera_info.perf.af_led.max,
362 (camera_info.perf.af_led.count>0)?camera_info.perf.af_led.sum/camera_info.perf.af_led.count:0);
363 draw_txt_string(1, i++, osd_buf, user_color(conf.osd_color));
364 }
365
366
367 module_tick_unloader();
368
369 msleep(20);
370 chdk_started_flag=1;
371 }
372 }