CHDK_DE Vorschauversion  Trunk Rev. 6014
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
main.c-Dateireferenz
#include "lolevel.h"
#include "platform.h"
#include "core.h"
#include "keyboard.h"
+ Include-Abhängigkeitsdiagramm für main.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define VBATT_DEFAULT_MIN   (3500)
 
#define VBATT_DEFAULT_MAX   (4100)
 
#define NUM_FL   7
 
#define NUM_DATA   3
 
#define CF_EFL   3500
 
#define CF_EFL_DIV   580
 

Funktionen

void boot ()
 
void mykbd_task (long ua, long ub, long uc, long ud, long ue, long uf)
 
void kbd_process_task (long ua, long ub, long uc, long ud, long ue, long uf)
 
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 task_fs (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 movie_record_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 ()
 
long get_vbatt_min ()
 
long get_vbatt_max ()
 
int get_effective_focal_length (int zp)
 
int get_focal_length (int zp)
 
int get_zoom_x (int zp)
 
int rec_mode_active (void)
 

Variablen

long link_bss_start
 
long link_bss_end
 
static int stop_hooking
 
static void(* taskprev )(long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9)
 
static void(* taskfsprev )(long p0, long p1, long p2, long p3, long p4, long p5, long p6, long p7, long p8, long p9)
 
int focus_len_table [NUM_FL *NUM_DATA]
 
const int zoom_points = NUM_FL
 

Makro-Dokumentation

#define CF_EFL   3500

Definiert in Zeile 203 der Datei main.c.

#define CF_EFL_DIV   580

Definiert in Zeile 204 der Datei main.c.

#define NUM_DATA   3

Definiert in Zeile 195 der Datei main.c.

#define NUM_FL   7

Definiert in Zeile 194 der Datei main.c.

#define VBATT_DEFAULT_MAX   (4100)

Definiert in Zeile 2 der Datei main.c.

#define VBATT_DEFAULT_MIN   (3500)

Definiert in Zeile 1 der Datei main.c.

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 72 der Datei main.c.

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

Definiert in Zeile 16 der Datei main.c.

17 {
18 }
static void core_hook_task_delete ( void *  tcb)
static

Definiert in Zeile 20 der Datei main.c.

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

Definiert in Zeile 101 der Datei main.c.

102 {
103  char *name = (char*)(*(long*)((char*)pNewTcb+0x34));
104  long *entry = (long*)((char*)pNewTcb+0x74);
105 
106 
107  // always hook first task creation
108  // to create SpyTask
109  if (!stop_hooking){
110 
111  taskprev = (void*)(*entry);
112  *entry = (long)task_start_hook;
113  stop_hooking = 1;
114 
115  }else{
116 
117  // hook/replace another tasks
118  // Replace the call to "SwitchCheckTask" with our own procedure
119  if (my_ncmp(name, "tSwitchChe", 10) == 0){
120  *entry = (long)mykbd_task;
121  }
122 
123  // Replace the call to "InitFileModules" with our own procedure
124  if (my_ncmp(name, "tInitFileM", 10) == 0){
125  taskfsprev = (void*)(*entry);
126  *entry = (long)task_fs;
127  }
128 
129  // Replace the call to "CaptSeqTask" with our own procedure
130  if (my_ncmp(name, "tCaptSeqTa", 10) == 0){
131  *entry = (long)capt_seq_hook;
132  }
133 
134 
135  if (my_ncmp(name, "tMovieRecT", 10) == 0){
136  *entry = (long)movie_record_hook;
137  }
138 
139  core_hook_task_create(pNewTcb);
140  }
141 }
void deleteHook ( void *  pTcb)

Definiert in Zeile 143 der Datei main.c.

144  {
145  core_hook_task_delete(pTcb);
146  }
int get_effective_focal_length ( int  zp)

Definiert in Zeile 208 der Datei main.c.

208  {
210 }
int get_focal_length ( int  zp)

Definiert in Zeile 212 der Datei main.c.

212  {
213  if (zp < 0) zp = 0;
214  else if (zp >= NUM_FL) zp = NUM_FL-1;
215  return focus_len_table[zp*NUM_DATA];
216 }
long get_vbatt_max ( )

Definiert in Zeile 188 der Datei main.c.

189  {
190  return 4100;
191  }
long get_vbatt_min ( )

Definiert in Zeile 183 der Datei main.c.

184  {
185  return 3500;
186  }
int get_zoom_x ( int  zp)

Definiert in Zeile 218 der Datei main.c.

218  {
219  return get_focal_length(zp)*10/focus_len_table[0];
220 }
void kbd_process_task ( long  ua,
long  ub,
long  uc,
long  ud,
long  ue,
long  uf 
)
static void movie_record_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;
86  }
static int my_ncmp ( const char *  s1,
const char *  s2,
long  len 
)
static

Definiert in Zeile 90 der Datei main.c.

91  {
92  int i;
93  for (i=0;i<len;i++)
94  {
95  if (s1[i] != s2[i])
96  return 1;
97  }
98  return 0;
99  }
void mykbd_task ( long  ua,
long  ub,
long  uc,
long  ud,
long  ue,
long  uf 
)
int rec_mode_active ( void  )

Definiert in Zeile 223 der Datei main.c.

223  {
224 // return ((physw_status[0]&0x03)==0x01) ? 0 : 1;
225  return (playrec_mode==1); //(0 in play, 1 in record, 2 in record review)
226 }
static void remount_filesystem ( )
static

Definiert in Zeile 57 der Datei main.c.

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

Definiert in Zeile 38 der Datei main.c.

39  {
40  (void)ua; (void)ub; (void)uc; (void)ud; (void)ue; (void)uf;
41  core_spytask(); // This is the main CHDK loop
42  }
void startup ( )

Definiert in Zeile 148 der Datei main.c.

149  {
150  long *bss = &link_bss_start;
151 
152  // sanity check
153  if ((long)&link_bss_end > (MEMISOSTART + MEMISOSIZE)) {
154  started();
155  shutdown();
156  }
157 
158  // initialize .bss segment
159  while (bss<&link_bss_end)
160  *bss++ = 0;
161 
162  // fill memory with this magic value so we could see what
163  // parts of memory were or not used
164 
165  // update:
166  // this seems to be required for unknown reason
167  // or else sryproc startup will fail from
168  // time to time...
169 #if 0
170  long *ptr;
171  for (ptr=(void*)MEMBASEADDR;((long)ptr)<MEMISOSTART;ptr+=4)
172  {
173  ptr[0]=0x55555555;
174  ptr[1]=0x55555555;
175  ptr[2]=0x55555555;
176  ptr[3]=0x55555555;
177  }
178 #endif
179 
180  boot();
181  }
static void task_fs ( long  p0,
long  p1,
long  p2,
long  p3,
long  p4,
long  p5,
long  p6,
long  p7,
long  p8,
long  p9 
)
static

Definiert in Zeile 63 der Datei main.c.

66  {
68  taskfsprev(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 );
69  }
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 45 der Datei main.c.

48  {
49  _CreateTask("SpyTask", 0x19, 0x2000, spytask, 0); // First creates the SpyTask, i.e. the main CHDK loop
50 
51  //create our second keypress task
52  _CreateTask("SpyTask2", 0x18, 0x2000, kbd_process_task, 0);
53 
54  taskprev(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 ); // then, whatever was the call intended to be...
55  }

Variablen-Dokumentation

int focus_len_table[NUM_FL *NUM_DATA]
long link_bss_end
long link_bss_start
int stop_hooking
static

Definiert in Zeile 26 der Datei main.c.

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

Definiert in Zeile 32 der Datei main.c.

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

Definiert in Zeile 28 der Datei main.c.

const int zoom_points = NUM_FL

Definiert in Zeile 206 der Datei main.c.