CHDK_DE Vorschauversion  Trunk Rev. 6014
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
main.c-Dateireferenz
#include "camera.h"
#include "lolevel.h"
#include "platform.h"
#include "core.h"
#include "keyboard.h"
#include "stdlib.h"
+ Include-Abhängigkeitsdiagramm für main.c:
+ Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:

gehe zum Quellcode dieser Datei

Funktionen

void boot ()
 
static void core_hook_task_create (__attribute__((unused)) void *tcb)
 
static void core_hook_task_delete (void *tcb)
 
void spytask (long ua, long ub, long uc, long ud, long ue, long uf)
 
static void task_start_hook (long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9)
 
static void remount_filesystem ()
 
static void init_file_modules_hook (long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9)
 
static void capt_seq_hook (long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9)
 
static void physw_hook (long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9)
 
static int my_ncmp (const char *s1, const char *s2, long len)
 
void createHook (void *pNewTcb)
 
void deleteHook (void *pTcb)
 
void startup ()
 

Variablen

long link_bss_start
 
long link_bss_end
 
static int stop_hooking
 
static void(* task_prev )(long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9)
 
static void(* init_file_modules_prev )(long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9)
 

Dokumentation der Funktionen

void boot ( )

Definiert in Zeile 43 der Datei boot.c.

43  {
44 
45  long *canon_data_src = (void*)0xFFEDAC70; // value taken at ROM:FFC00188
46  long *canon_data_dst = (void*)0x1900;
47  long canon_data_len = 0xDF84 - 0x1900; // data_end - data_start 0xDF7C taken at ROM:FFC00138
48  long *canon_bss_start = (void*)0xDF84; // just after data
49  long canon_bss_len = 0xD4F38 - 0xDF84; // d4ec8 taken at ROM:FFC00FB4
50 
51  long i;
52 
53  // enable caches and write buffer...
54  // this is a carryover from old dryos ports, may not be useful
55  asm volatile (
56  "MRC p15, 0, R0,c1,c0\n"
57  "ORR R0, R0, #0x1000\n"
58  "ORR R0, R0, #4\n"
59  "ORR R0, R0, #1\n"
60  "MCR p15, 0, R0,c1,c0\n"
61  :::"r0"
62  );
63 
64  for(i=0;i<canon_data_len/4;i++)
65  canon_data_dst[i]=canon_data_src[i];
66 
67  for(i=0;i<canon_bss_len/4;i++)
68  canon_bss_start[i]=0;
69 
70  asm volatile ("B sub_FFC001A4_my\n");
71 };
static void capt_seq_hook ( long  p0,
long  p1,
long  p2,
long  p3,
long  p4,
long  p5,
long  p6,
long  p7,
long  p8,
long  p9 
)
static

Definiert in Zeile 71 der Datei main.c.

74 {
75  (void)p0; (void)p1; (void)p2; (void)p3; (void)p4; (void)p5; (void)p6; (void)p7; (void)p8; (void)p9;
76  capt_seq_task();
77 }
static void core_hook_task_create ( __attribute__((unused)) void *  tcb)
static

Definiert in Zeile 13 der Datei main.c.

14 {
15 }
static void core_hook_task_delete ( void *  tcb)
static

Definiert in Zeile 17 der Datei main.c.

18 {
19  char *name = (char*)(*(long*)((char*)tcb+0x34));
20  if (strcmp(name,"tInitFileM")==0) core_spytask_can_start();
21 }
void createHook ( void *  pNewTcb)

Definiert in Zeile 110 der Datei main.c.

111 {
112  char *name = (char*)(*(long*)((char*)pNewTcb+0x34));
113  long *entry = (long*)((char*)pNewTcb+0x74);
114 
115  // always hook first task creation
116  // to create SpyProc
117  if (!stop_hooking){
118  task_prev = (void*)(*entry);
119  *entry = (long)task_start_hook;
120  stop_hooking = 1;
121  } else {
122  // hook/replace another tasks
123  if (my_ncmp(name, "tPhySw", 6) == 0){
124  *entry = (long)physw_hook;
125  }
126 
127  if (my_ncmp(name, "tInitFileM", 10) == 0){
128  init_file_modules_prev = (void*)(*entry);
129 #if CAM_MULTIPART
130  *entry = (long)init_file_modules_task;
131 #else
132  *entry = (long)init_file_modules_hook;
133 #endif
134  }
135 
136  if (my_ncmp(name, "tCaptSeqTa", 10) == 0){
137  *entry = (long)capt_seq_hook;
138  }
139 
140 #if CAM_CHDK_HAS_EXT_VIDEO_MENU
141  if (my_ncmp(name, "tMovieReco", 10) == 0){
142  *entry = (long)movie_record_hook;
143  }
144 #endif
145 
146 #if CAM_EXT_TV_RANGE
147  if (my_ncmp(name, "tExpDrvTas", 10) == 0){
148  *entry = (long)exp_drv_task;
149  }
150 #endif
151 
152 #if CAM_HAS_FILEWRITETASK_HOOK
153  if (my_ncmp(name, "tFileWrite", 10) == 0){
154  *entry = (long)filewritetask;
155  }
156 #endif
157 
158 // for cameras that have a "touch control dial" with 'TouchW' task.
159 // some cameras may use a different task name
160 #ifdef HOOK_TOUCHW
161  if (my_ncmp(name, "tTouchW", 7) == 0){
162  *entry = (long)my_touchw_task;
163  }
164 #endif
165 
166  core_hook_task_create(pNewTcb);
167  }
168 }
void deleteHook ( void *  pTcb)

Definiert in Zeile 170 der Datei main.c.

171 {
172  core_hook_task_delete(pTcb);
173 }
static void init_file_modules_hook ( long  p0,
long  p1,
long  p2,
long  p3,
long  p4,
long  p5,
long  p6,
long  p7,
long  p8,
long  p9 
)
static

Definiert in Zeile 61 der Datei main.c.

64 {
66  init_file_modules_prev(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 );
67 }
static int my_ncmp ( const char *  s1,
const char *  s2,
long  len 
)
static

Definiert in Zeile 100 der Datei main.c.

101 {
102  int i;
103  for (i=0;i<len;i++){
104  if (s1[i] != s2[i])
105  return 1;
106  }
107  return 0;
108 }
static void physw_hook ( long  p0,
long  p1,
long  p2,
long  p3,
long  p4,
long  p5,
long  p6,
long  p7,
long  p8,
long  p9 
)
static

Definiert in Zeile 80 der Datei main.c.

83 {
84  (void)p0; (void)p1; (void)p2; (void)p3; (void)p4; (void)p5; (void)p6; (void)p7; (void)p8; (void)p9;
85  mykbd_task();
86 }
static void remount_filesystem ( )
static

Definiert in Zeile 54 der Datei main.c.

55 {
58 }
void spytask ( long  ua,
long  ub,
long  uc,
long  ud,
long  ue,
long  uf 
)

Definiert in Zeile 36 der Datei main.c.

37 {
38  (void)ua; (void)ub; (void)uc; (void)ud; (void)ue; (void)uf;
39  core_spytask();
40 }
void startup ( )

Definiert in Zeile 175 der Datei main.c.

176 {
177  long *bss = &link_bss_start;
178 
179  // sanity check
180  if ((long)&link_bss_end > (MEMISOSTART + MEMISOSIZE)){
181  started();
182  shutdown();
183  }
184 
185  // initialize .bss senment
186  while (bss<&link_bss_end)
187  *bss++ = 0;
188 
189  // fill memory with this magic value so we could see what
190  // parts of memory were or not used
191 #if 0
192  long *ptr;
193  for (ptr=(void*)MEMBASEADDR;((long)ptr)<MEMISOSTART;ptr+=4){
194  ptr[0]=0x55555555;
195  ptr[1]=0x55555555;
196  ptr[2]=0x55555555;
197  ptr[3]=0x55555555;
198  }
199 #endif
200 
201  boot();
202 }
static void task_start_hook ( long  p0,
long  p1,
long  p2,
long  p3,
long  p4,
long  p5,
long  p6,
long  p7,
long  p8,
long  p9 
)
static

Definiert in Zeile 43 der Datei main.c.

46 {
47  _CreateTask("SpyTask", 0x19, 0x2000, spytask, 0);
48 
49  task_prev(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 );
50 }

Variablen-Dokumentation

void(* init_file_modules_prev)(long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9)
static

Definiert in Zeile 30 der Datei main.c.

long link_bss_end
long link_bss_start
int stop_hooking
static

Definiert in Zeile 24 der Datei main.c.

void(* task_prev)(long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9)
static

Definiert in Zeile 26 der Datei main.c.