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

#define CF_EFL_DIV   580

Definiert in Zeile 205 der Datei main.c.

#define NUM_DATA   3

Definiert in Zeile 196 der Datei main.c.

#define NUM_FL   7

Definiert in Zeile 195 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 74 der Datei main.c.

77  {
78  (void)p0; (void)p1; (void)p2; (void)p3; (void)p4; (void)p5; (void)p6; (void)p7; (void)p8; (void)p9;
79  capt_seq_task();
80  }
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 103 der Datei main.c.

104 {
105  char *name = (char*)(*(long*)((char*)pNewTcb+0x34));
106  long *entry = (long*)((char*)pNewTcb+0x74);
107 
108  //volatile long *p; p=(void*) 0xc02200E0; *p=0x46; //debug led
109 
110  // always hook first task creation
111  // to create SpyTask
112  if (!stop_hooking){
113  taskprev = (void*)(*entry);
114  *entry = (long)task_start_hook;
115  stop_hooking = 1;
116  }else{
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  if (my_ncmp(name, "tMovieRecT", 10) == 0){
135  *entry = (long)movie_record_hook;
136  }
137 
138 core_hook_task_create(pNewTcb);
139 }
140  }
void deleteHook ( void *  pTcb)

Definiert in Zeile 142 der Datei main.c.

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

Definiert in Zeile 209 der Datei main.c.

209  {
211 }
int get_focal_length ( int  zp)

Definiert in Zeile 213 der Datei main.c.

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

Definiert in Zeile 189 der Datei main.c.

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

Definiert in Zeile 184 der Datei main.c.

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

Definiert in Zeile 219 der Datei main.c.

219  {
220  return get_focal_length(zp)*10/focus_len_table[0];
221 }
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 82 der Datei main.c.

85  {
86  (void)p0; (void)p1; (void)p2; (void)p3; (void)p4; (void)p5; (void)p6; (void)p7; (void)p8; (void)p9;
88  }
static int my_ncmp ( const char *  s1,
const char *  s2,
long  len 
)
static

Definiert in Zeile 92 der Datei main.c.

93  {
94  int i;
95  for (i=0;i<len;i++)
96  {
97  if (s1[i] != s2[i])
98  return 1;
99  }
100  return 0;
101  }
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 58 der Datei main.c.

59 {
62 }
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 147 der Datei main.c.

148  {
149  long *bss = &link_bss_start;
150 
151  //volatile long *p; p=(void*) 0xc02200E0; *p=0x46; //debug led
152 
153  // sanity check
154  if ((long)&link_bss_end > (MEMISOSTART + MEMISOSIZE)) {
155  started();
156  shutdown();
157  }
158 
159  // initialize .bss segment
160  while (bss<&link_bss_end)
161  *bss++ = 0;
162 
163  // fill memory with this magic value so we could see what
164  // parts of memory were or not used
165 
166  // update:
167  // this seems to be required for unknown reason
168  // or else sryproc startup will fail from
169  // time to time...
170 #if 0
171  long *ptr;
172  for (ptr=(void*)MEMBASEADDR;((long)ptr)<MEMISOSTART;ptr+=4)
173  {
174  ptr[0]=0x55555555;
175  ptr[1]=0x55555555;
176  ptr[2]=0x55555555;
177  ptr[3]=0x55555555;
178  }
179 #endif
180 
181  boot();
182  }
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 65 der Datei main.c.

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