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

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define PARAM_FILE_COUNTER   0x2A
 
#define LED_PR   0xc0220088
 
#define LED_BRIGHTNESS   200
 
#define LED_GREEN   4
 
#define LED_YELLOW   5
 
#define LED_ORANGE   7
 
#define LED_BLUE   8
 
#define LED_AF_BEAM   9
 
#define LED_TIMER   10
 

Funktionen

void _sub_FF821D04 (long mem, long *data)
 
long _GetPropertyCase_orig (long opt_id, void *buf, long bufsize)
 
long _SetPropertyCase_orig (long opt_id, void *buf, long bufsize)
 
void _SetAFBeamBrightness (long val)
 
void _SetAFBeamOff ()
 
unsigned long _time_orig (unsigned long *timer)
 
unsigned long _time (__attribute__((unused)) unsigned long *timer)
 
void set_shooting_status (long l)
 
long _GetPropertyCase (long cse, void *ptr, long len)
 
long _SetPropertyCase (long cse, void *ptr, long len)
 
void shutdown ()
 
void dummy_nop ()
 
static void led_on (const int led, const int brightness)
 
static void led_off (const int led)
 
void debug_led (int state)
 
int get_flash_params_count (void)
 
void set_led (int led, int state)
 
void camera_set_led (int led, int state, int bright)
 
short get_uiprop_value (unsigned long id)
 

Variablen

static unsigned long bootuptime = 0
 
volatile long shooting_status_ =0
 

Makro-Dokumentation

#define LED_AF_BEAM   9

Definiert in Zeile 157 der Datei lib.c.

#define LED_BLUE   8

Definiert in Zeile 156 der Datei lib.c.

#define LED_BRIGHTNESS   200

Definiert in Zeile 152 der Datei lib.c.

#define LED_GREEN   4

Definiert in Zeile 153 der Datei lib.c.

#define LED_ORANGE   7

Definiert in Zeile 155 der Datei lib.c.

#define LED_PR   0xc0220088

Definiert in Zeile 151 der Datei lib.c.

#define LED_TIMER   10

Definiert in Zeile 158 der Datei lib.c.

#define LED_YELLOW   5

Definiert in Zeile 154 der Datei lib.c.

#define PARAM_FILE_COUNTER   0x2A

Definiert in Zeile 4 der Datei lib.c.

Dokumentation der Funktionen

long _GetPropertyCase ( long  cse,
void *  ptr,
long  len 
)

Definiert in Zeile 92 der Datei lib.c.

92  {
93  if (cse == PROPCASE_SHOOTING){
94  if (len==sizeof(long)){
95  *(long*)ptr = shooting_status_;
96  }else if (len==sizeof(short)){
97  *(short*)ptr = shooting_status_;
98  }else{
99  //??? FIXME
100  }
101  }else{
102  return _GetPropertyCase_orig(cse, ptr, len);
103  }
104  return 0;
105 }
long _GetPropertyCase_orig ( long  opt_id,
void *  buf,
long  bufsize 
)
void _SetAFBeamBrightness ( long  val)
void _SetAFBeamOff ( )
long _SetPropertyCase ( long  cse,
void *  ptr,
long  len 
)

Definiert in Zeile 107 der Datei lib.c.

107  {
108 /*
109 PROPCASE_SV_MARKET, PROPCASE_SV, PROPCASE_DELTA_SV -> lower ISO values cause crash
110 */
111  if (cse == PROPCASE_SHOOTING){
112  //do nothing
113  return 0;
114  }else{
115  return _SetPropertyCase_orig(cse, ptr, len);
116  }
117 }
long _SetPropertyCase_orig ( long  opt_id,
void *  buf,
long  bufsize 
)
void _sub_FF821D04 ( long  mem,
long *  data 
)
unsigned long _time ( __attribute__((unused)) unsigned long *  timer)

Definiert in Zeile 15 der Datei lib.c.

15  {
16 /*
17 the original "time" function doesn't seem to work correctly
18 chdk's clock display runs at around 1/7 speed with it (the display is only correct right after bootup)
19 this hack provides a replacement using GetSystemTime (which incements every 1ms, I guess),
20 but it will be off by a few seconds.
21 There might be a fault in this chdk port somewhere...
22 */
23 unsigned long timer2; //unsigned long *timer will be NULL when called from chdk
24  _GetSystemTime((long*)&timer2);
25  if (bootuptime == 0) {
26  bootuptime = _time_orig((unsigned long*)0)-(timer2)/1000;
27  }
28  return bootuptime+(timer2)/1000;
29 }
unsigned long _time_orig ( unsigned long *  timer)
void camera_set_led ( int  led,
int  state,
int  bright 
)

Definiert in Zeile 249 der Datei lib.c.

250 {
251  if (state) {
252  if (bright > LED_BRIGHTNESS) bright = LED_BRIGHTNESS;
253  if (led == 6) {
254  led_on(4, bright);
255  led_on(5, bright);
256  } else
257  led_on(led, bright);
258  }
259  else
260  if (led == 6) {
261  led_off(4);
262  led_off(5);
263  } else
264  led_off(led);
265 }
void debug_led ( int  state)

Definiert in Zeile 230 der Datei lib.c.

231 {
232  if (state)
234  else
235  led_off(LED_BLUE);
236 }
void dummy_nop ( )

Definiert in Zeile 147 der Datei lib.c.

147  {
148 }
int get_flash_params_count ( void  )

Definiert in Zeile 238 der Datei lib.c.

238  {
239  return 70;
240 }
short get_uiprop_value ( unsigned long  id)

Definiert in Zeile 267 der Datei lib.c.

268 {
269  // avoid asserts: return 0 if id is above limit
270  if (id >= (unsigned)uiprop_count)
271  return 0;
272  return _PTM_GetCurrentItem(id);
273 }
static void led_off ( const int  led)
static

Definiert in Zeile 208 der Datei lib.c.

209 {
210  if (led < 4 || led > 10 || led == 6) return;
211 
212  volatile long *p;
213  switch(led){
214  case (LED_GREEN) : p=(void*)0xc02200D8; break;
215  case (LED_ORANGE): p=(void*)0xc02200DC; break;
216  case (LED_YELLOW): p=(void*)0xc02200E0; break;
217  case (LED_BLUE) : p=(void*)0xc02200E4; break;
218  case (LED_AF_BEAM): p=(void*)0xc02200EC; break;
219  default: return;
220  }
221 
222  if (led == LED_AF_BEAM){
223  _SetAFBeamOff();
224  }else{
225  *p=0x44;
226  }
227 
228 }
static void led_on ( const int  led,
const int  brightness 
)
static

Definiert in Zeile 175 der Datei lib.c.

176 {
177  if (led < 4 || led > 10 || led == 6) return;
178  //on sd400 the led stuff works like this:
179  //led_addr = led_table + (led * 0x40)
180  //
181  //if (mem(led_addr) == 0){
182  // mem(led_addr + 4) = 0x46; //=ON
183  //}else if (mem(led_addr) == 1){
184  // af_led_sub(led_addr)
185  //}
186  //
187  //ok on sd300 something like ledUniqueOn doesnt seem
188  //to exist. so build our own lib:
189 
190  volatile long *p;
191  switch(led){
192  case (LED_GREEN) : p=(void*)0xc02200D8; break;
193  case (LED_ORANGE): p=(void*)0xc02200DC; break;
194  case (LED_YELLOW): p=(void*)0xc02200E0; break;
195  case (LED_BLUE) : p=(void*)0xc02200E4; break;
196  case (LED_AF_BEAM): p=(void*)0xc02200EC; break;
197  default: return;
198  }
199 
200  if (led == LED_AF_BEAM){
202  }else{
203  *p=0x46;
204  }
205 }
void set_led ( int  led,
int  state 
)

Definiert in Zeile 242 der Datei lib.c.

243 {
244  if (state)
245  led_on(led, LED_BRIGHTNESS);
246  else
247  led_off(led);
248 }
void set_shooting_status ( long  l)

Definiert in Zeile 45 der Datei lib.c.

45  {
46 // if (shbufi<100){
47 // if (shbuf[shbufi] != l){
48 // shbufi++;
49 // shbuf[shbufi] = l;
50 // }
51 // }
52 
53  //shooting_status_=l;
54  //return;
55  switch(l){
56  case(0x0):
57  //picture mode: focussing
59  break;
60  case(0x1):
61  //picture mode: charge flash & do snapshot
63  break;
64  case(0x2):
65  //picture mode: maybe stitch assist related
67  break;
68  case(0x3):
69  //picture mode: idle
71  break;
72  case(0x6):
73  //video mode: focus & rec
75  break;
76  case(0x7):
77  //video mode: idle
79  break;
80  case (0xb):
81  //idle in play mode ?!
83  break;
84 
85  default:
87  break;
88  }
89 }
void shutdown ( )

Definiert in Zeile 119 der Datei lib.c.

120 {
121  volatile long *p = (void*)0xc022002c;
122 
123  asm(
124  "MRS R1, CPSR\n"
125  "AND R0, R1, #0x80\n"
126  "ORR R1, R1, #0x80\n"
127  "MSR CPSR_cf, R1\n"
128  :::"r1","r0");
129 
130  *p = 0x46;
131 
132  while(1);
133 }

Variablen-Dokumentation

unsigned long bootuptime = 0
static

Definiert in Zeile 13 der Datei lib.c.

volatile long shooting_status_ =0

Definiert in Zeile 40 der Datei lib.c.