source: trunk/core/main.c @ 1119

Revision 1119, 3.8 KB checked in by reyalP, 2 years ago (diff)

stidio inline cleanup from philmoz in http://chdk.setepontos.com/index.php?topic=650.msg63691#msg63691

  • Property svn:eol-style set to native
Line 
1#include "platform.h"
2#include "core.h"
3#include "conf.h"
4#include "keyboard.h"
5#include "stdlib.h"
6#include "gui.h"
7#include "histogram.h"
8#include "raw.h"
9#ifdef OPT_EDGEOVERLAY
10    #include "edgeoverlay.h"
11#endif
12static int raw_need_postprocess;
13static volatile int spytask_can_start;
14
15void core_hook_task_create(void *tcb) {
16}
17
18void core_hook_task_delete(void *tcb) {
19    char *name = (char*)(*(long*)((char*)tcb+0x34));
20    if (strcmp(name,"tInitFileM")==0) core_spytask_can_start();
21}
22
23long core_get_noise_reduction_value() {
24    return conf.raw_nr;
25}
26
27void dump_memory() {
28    int fd;
29    static int cnt=1;
30    static char fn[32];
31
32    started();
33    mkdir("A/DCIM");
34    mkdir("A/DCIM/100CANON");
35    sprintf(fn, "A/DCIM/100CANON/CRW_%04d.JPG", cnt++);
36    fd = open(fn, O_WRONLY|O_CREAT, 0777);
37    if (fd) {
38#ifdef CAMERA_ixus65_sd630    // Zero is not readable on ixus65!
39        write(fd, (int*)0xFFFF0000, 4);
40        write(fd, (int*)4, 0x1900-4);
41#else
42        write(fd, (void*)0, 0x1900);
43#endif
44        // TODO actual memory size is larger than 32 MB on many cameras!
45        write(fd, (void*)0x1900, 32*1024*1024-0x1900);
46        close(fd);
47    }
48    vid_bitmap_refresh();
49    finished();
50}
51
52int core_get_free_memory() {
53    int size, l_size, d;
54    char* ptr;
55
56    size = 16;
57    while (1) {
58        ptr= malloc(size);
59        if (ptr) {
60            free(ptr);
61            size <<= 1;
62        } else
63            break;
64    }
65
66    l_size = size;
67    size >>= 1;
68    d=1024;
69    while (d) {
70        ptr = malloc(size);
71        if (ptr) {
72            free(ptr);
73            d = l_size-size;
74            if (d<0) d=-d;
75            l_size = size;
76            size += d>>1;
77        } else {
78            d = size-l_size;
79            if (d<0) d=-d;
80            l_size = size;
81            size -= d>>1;
82        }
83       
84    }
85    return size-1;
86}
87
88static volatile long raw_data_available;
89
90// called from another process
91void core_rawdata_available() {
92    raw_data_available = 1;
93}
94
95void core_spytask_can_start() {
96    spytask_can_start = 1;
97}
98
99void core_spytask() {
100    int cnt = 1;
101    int i=0;
102
103    raw_need_postprocess = 0;
104
105    spytask_can_start=0;
106
107#ifdef OPT_EXMEM_MALLOC
108        exmem_malloc_init();
109#endif
110
111#ifdef CAM_CHDK_PTP
112    init_chdk_ptp_task();
113#endif
114
115    while((i++<400) && !spytask_can_start) msleep(10);
116
117    started();
118    msleep(50);
119    finished();
120    drv_self_unhide();
121
122    conf_restore();
123    gui_init();
124
125#if CAM_CONSOLE_LOG_ENABLED
126    cam_console_init();
127#endif
128
129    mkdir("A/CHDK");
130    mkdir("A/CHDK/FONTS");
131    mkdir("A/CHDK/SYMBOLS");
132    mkdir("A/CHDK/SCRIPTS");
133    mkdir("A/CHDK/LANG");
134    mkdir("A/CHDK/BOOKS");
135    mkdir("A/CHDK/GRIDS");
136#ifdef OPT_CURVES
137    mkdir("A/CHDK/CURVES");
138#endif
139    mkdir("A/CHDK/DATA");
140    mkdir("A/CHDK/LOGS");
141#ifdef OPT_EDGEOVERLAY
142    mkdir("A/CHDK/EDGE");
143#endif
144    auto_started = 0;
145
146#ifdef OPT_SCRIPTING
147    if (conf.script_startup==1) script_autostart();    // remote autostart
148    if (conf.script_startup==2) {
149        conf.script_startup=0;
150        conf_save();
151        script_autostart();
152    }
153#endif
154
155    while (1) {
156        if (raw_data_available) {
157            raw_need_postprocess = raw_savefile();
158            hook_raw_save_complete();
159            raw_data_available = 0;
160            continue;
161        }
162
163        if (state_shooting_progress != SHOOTING_PROGRESS_PROCESSING) {
164            if (((cnt++) & 3) == 0)
165                gui_redraw();
166
167            histogram_process();
168#ifdef OPT_EDGEOVERLAY
169            if(conf.edge_overlay_thresh && conf.edge_overlay_enable) edge_overlay();
170#endif
171        }
172
173        if ((state_shooting_progress == SHOOTING_PROGRESS_PROCESSING) && (!shooting_in_progress())) {
174            state_shooting_progress = SHOOTING_PROGRESS_DONE;
175            if (raw_need_postprocess) raw_postprocess();
176        }
177
178        msleep(20);
179    }
180}
181
182long ftell(FILE *file) {
183    if(!file) return -1;
184    return file->pos;
185}
Note: See TracBrowser for help on using the repository browser.