CHDK_DE Vorschauversion  Trunk Rev. 5535
 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 "stdlib.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   (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 (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 192 der Datei main.c.

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

Definiert in Zeile 191 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  capt_seq_task();
76 }
static void core_hook_task_create ( 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 97 der Datei main.c.

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

Definiert in Zeile 130 der Datei main.c.

131 {
132  core_hook_task_delete(pTcb);
133 }
int get_effective_focal_length ( int  zp)

Definiert in Zeile 196 der Datei main.c.

196  {
197  return (CF_EFL*get_focal_length(zp))/1000;
198 }
int get_focal_length ( int  zp)

Definiert in Zeile 200 der Datei main.c.

200  {
201  int i;
202 
203  if (zp<fl_tbl[0].zp)
204  return fl_tbl[0].fl;
205  else if (zp>fl_tbl[NUM_FL-1].zp)
206  return fl_tbl[NUM_FL-1].fl;
207  else
208  for (i=1; i<NUM_FL; ++i) {
209  if (zp==fl_tbl[i-1].zp)
210  return fl_tbl[i-1].fl;
211  else if (zp==fl_tbl[i].zp)
212  return fl_tbl[i].fl;
213  else if (zp<fl_tbl[i].zp)
214  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);
215  }
216  return fl_tbl[NUM_FL-1].fl;
217 }
long get_vbatt_max ( )

Definiert in Zeile 175 der Datei main.c.

176 {
177  return 5150;
178 }
long get_vbatt_min ( )

Definiert in Zeile 170 der Datei main.c.

171 {
172  return 4550;
173 }
int get_zoom_x ( int  zp)

Definiert in Zeile 219 der Datei main.c.

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

82 {
84 }
static int my_ncmp ( const char *  s1,
const char *  s2,
long  len 
)
static

Definiert in Zeile 87 der Datei main.c.

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

Definiert in Zeile 234 der Datei main.c.

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

Definiert in Zeile 55 der Datei main.c.

56 {
59 }
int screen_opened ( void  )

Definiert in Zeile 224 der Datei main.c.

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

Definiert in Zeile 229 der Datei main.c.

229  {
230 // mode |= (physw_copy[1] & 0x00000002)?0:MODE_SCREEN_ROTATED;
231  return !(physw_copy[1] & 0x00000002);
232 }
void spytask ( long  ua,
long  ub,
long  uc,
long  ud,
long  ue,
long  uf 
)

Definiert in Zeile 39 der Datei main.c.

40 {
41  core_spytask();
42 }
void startup ( )

Definiert in Zeile 135 der Datei main.c.

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

const int zoom_points = 129

Definiert in Zeile 194 der Datei main.c.

int zp

Definiert in Zeile 181 der Datei main.c.