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   (4550)
 
#define VBATT_DEFAULT_MAX   (5150)
 
#define NUM_FL   (int)(sizeof(fl_tbl)/sizeof(fl_tbl[0]))
 
#define CF_EFL   6000
 

Funktionen

void boot ()
 
void mykbd_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 screen_opened (void)
 
int screen_rotated (void)
 
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)
 
struct {
   int   zp
 
   int   fl
 
fl_tbl []
 
const int zoom_points = 129
 

Makro-Dokumentation

#define CF_EFL   6000

Definiert in Zeile 194 der Datei main.c.

#define NUM_FL   (int)(sizeof(fl_tbl)/sizeof(fl_tbl[0]))

Definiert in Zeile 193 der Datei main.c.

#define VBATT_DEFAULT_MAX   (5150)

Definiert in Zeile 2 der Datei main.c.

#define VBATT_DEFAULT_MIN   (4550)

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

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

Definiert in Zeile 19 der Datei main.c.

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

Definiert in Zeile 99 der Datei main.c.

100 {
101  char *name = (char*)(*(long*)((char*)pNewTcb+0x34));
102  long *entry = (long*)((char*)pNewTcb+0x74);
103 
104  // always hook first task creation
105  // to create SpyProc
106  if (!stop_hooking){
107  taskprev = (void*)(*entry);
108  *entry = (long)task_start_hook;
109  stop_hooking = 1;
110  } else {
111  // hook/replace another tasks
112  if (my_ncmp(name, "tSwitchChe", 10) == 0){
113  *entry = (long)mykbd_task;
114  }
115  if (my_ncmp(name, "tInitFileM", 10) == 0){
116  taskfsprev = (void*)(*entry);
117  *entry = (long)task_fs;
118  }
119 
120  if (my_ncmp(name, "tCaptSeqTa", 10) == 0){
121  *entry = (long)capt_seq_hook;
122  }
123 
124  if (my_ncmp(name, "tMovieRecT", 10) == 0){
125  *entry = (long)movie_record_hook;
126  }
127 
128  core_hook_task_create(pNewTcb);
129  }
130 }
void deleteHook ( void *  pTcb)

Definiert in Zeile 132 der Datei main.c.

133 {
134  core_hook_task_delete(pTcb);
135 }
int get_effective_focal_length ( int  zp)

Definiert in Zeile 198 der Datei main.c.

198  {
199  return (CF_EFL*get_focal_length(zp))/1000;
200 }
int get_focal_length ( int  zp)

Definiert in Zeile 202 der Datei main.c.

202  {
203  int i;
204 
205  if (zp<fl_tbl[0].zp)
206  return fl_tbl[0].fl;
207  else if (zp>fl_tbl[NUM_FL-1].zp)
208  return fl_tbl[NUM_FL-1].fl;
209  else
210  for (i=1; i<NUM_FL; ++i) {
211  if (zp==fl_tbl[i-1].zp)
212  return fl_tbl[i-1].fl;
213  else if (zp==fl_tbl[i].zp)
214  return fl_tbl[i].fl;
215  else if (zp<fl_tbl[i].zp)
216  return fl_tbl[i-1].fl+(zp-fl_tbl[i-1].zp)*(fl_tbl[i].fl-fl_tbl[i-1].fl)/(fl_tbl[i].zp-fl_tbl[i-1].zp);
217  }
218  return fl_tbl[NUM_FL-1].fl;
219 }
long get_vbatt_max ( )

Definiert in Zeile 177 der Datei main.c.

178 {
179  return 5150;
180 }
long get_vbatt_min ( )

Definiert in Zeile 172 der Datei main.c.

173 {
174  return 4550;
175 }
int get_zoom_x ( int  zp)

Definiert in Zeile 221 der Datei main.c.

221  {
222  return get_focal_length(zp)*10/fl_tbl[0].fl;
223 }
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 89 der Datei main.c.

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

Definiert in Zeile 236 der Datei main.c.

236  {
237 // mode = (playrec_mode==1)?MODE_REC:MODE_PLAY;
238  return (playrec_mode==1);
239 }
static void remount_filesystem ( )
static

Definiert in Zeile 55 der Datei main.c.

56 {
59 }
int screen_opened ( void  )

Definiert in Zeile 226 der Datei main.c.

226  {
227 // mode |= (physw_copy[1] & 0x00000001)?0:MODE_SCREEN_OPENED;
228  return !(physw_copy[1] & 0x00000001);
229 }
int screen_rotated ( void  )

Definiert in Zeile 231 der Datei main.c.

231  {
232 // mode |= (physw_copy[1] & 0x00000002)?0:MODE_SCREEN_ROTATED;
233  return !(physw_copy[1] & 0x00000002);
234 }
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();
42 }
void startup ( )

Definiert in Zeile 137 der Datei main.c.

138 {
139  long *bss = &link_bss_start;
140 
141 
142  // sanity check
143  if ((long)&link_bss_end > (MEMISOSTART + MEMISOSIZE)){
144  started();
145  shutdown();
146  }
147 
148  // initialize .bss senment
149  while (bss<&link_bss_end)
150  *bss++ = 0;
151 
152  // fill memory with this magic value so we could see what
153  // parts of memory were or not used
154 
155  // update:
156  // this seems to be required for unknown reason
157  // or else sryproc startup will fail from
158  // time to time...
159 #if 0
160  long *ptr;
161  for (ptr=(void*)MEMBASEADDR;((long)ptr)<MEMISOSTART;ptr+=4){
162  ptr[0]=0x55555555;
163  ptr[1]=0x55555555;
164  ptr[2]=0x55555555;
165  ptr[3]=0x55555555;
166  }
167 #endif
168 
169  boot();
170 }
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 62 der Datei main.c.

65 {
67  taskfsprev(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 );
68 }
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);
50 
51  taskprev(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 );
52 }

Variablen-Dokumentation

int fl

Definiert in Zeile 183 der Datei main.c.

struct { ... } fl_tbl[]
Initialisierung:
= {
{ 0, 6000 },
{ 11, 6400 },
{ 41, 12100 },
{ 64, 21300 },
{ 86, 41600 },
{ 105, 61400 },
{ 128, 72000 },
}
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 = 129

Definiert in Zeile 196 der Datei main.c.

int zp

Definiert in Zeile 183 der Datei main.c.