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

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define STATUS   int
 
#define BOOL   int
 
#define OK   0
 
#define ERROR   (-1)
 
#define SEM_Q_FIFO   0x0
 
#define SEM_Q_PRIORITY   0x1
 
#define SEM_DELETE_SAFE   0x4
 
#define SEM_INVERSION_SAFE   0x8
 
#define SEM_OPTION_MASK   (SEM_Q_FIFO|SEM_Q_PRIORITY|SEM_DELETE_SAFE|SEM_INVERSION_SAFE)
 
#define NO_WAIT   0
 
#define WAIT_FOREVER   (-1)
 

Typdefinitionen

typedef int SEM_ID
 

Aufzählungen

enum  SEM_B_STATE { SEM_EMPTY =0, SEM_FULL =1, SEM_EMPTY =0, SEM_FULL =1 }
 

Funktionen

SEM_ID _semBCreate (int options, SEM_B_STATE initialState)
 
long __attribute__ ((naked))
 
void __attribute__ ((noinline))
 
long __attribute__ ((naked, noinline))
 *-------------------------------------------------------------------— Mehr ...
 
long my_kbd_read_keys (long x)
 
void kbd_process_task ()
 

Variablen

long kbd_new_state [3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }
 
long kbd_prev_state [3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }
 
long kbd_mod_state [3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }
 
KeyMap keymap []
 
SEM_ID semBinary
 
static int kbd_data_process_request_data =0
 

Makro-Dokumentation

#define BOOL   int

Definiert in Zeile 34 der Datei kbd.c.

#define ERROR   (-1)

Definiert in Zeile 36 der Datei kbd.c.

#define NO_WAIT   0

Definiert in Zeile 44 der Datei kbd.c.

#define OK   0

Definiert in Zeile 35 der Datei kbd.c.

#define SEM_DELETE_SAFE   0x4

Definiert in Zeile 40 der Datei kbd.c.

#define SEM_INVERSION_SAFE   0x8

Definiert in Zeile 41 der Datei kbd.c.

Definiert in Zeile 42 der Datei kbd.c.

#define SEM_Q_FIFO   0x0

Definiert in Zeile 38 der Datei kbd.c.

#define SEM_Q_PRIORITY   0x1

Definiert in Zeile 39 der Datei kbd.c.

#define STATUS   int

Definiert in Zeile 33 der Datei kbd.c.

#define WAIT_FOREVER   (-1)

Definiert in Zeile 45 der Datei kbd.c.

Dokumentation der benutzerdefinierten Typen

typedef int SEM_ID

Definiert in Zeile 54 der Datei kbd.c.

Dokumentation der Aufzählungstypen

Aufzählungswerte
SEM_EMPTY 
SEM_FULL 
SEM_EMPTY 
SEM_FULL 

Definiert in Zeile 47 der Datei kbd.c.

47  {
48 
49  SEM_EMPTY =0,
50  SEM_FULL =1
51 
52 } SEM_B_STATE;

Dokumentation der Funktionen

long __attribute__ ( (naked)  )

Definiert in Zeile 63 der Datei kbd.c.

79  {
80  asm volatile
81  (
82  "STMFD SP!, {R4-R8,LR}\n"
83  "LDR R3, =0x20F8\n"
84  "SUB SP, SP, #8\n"
85  "LDR R2, [R3]\n"
86  "CMP R2, #2\n"
87  "BNE loc_FF830870\n"
88  "LDR R6, =0x11A48\n"
89  "MOV R8, SP\n"
90  "ADD R7, SP, #0x20-0x1C\n"
91 
92  "loc_FF83075C:\n"
93  "MOV R0, R8\n"
94  "BL _GetSystemTime\n"
95  "LDR R1, =wrap_kbd_p1_f\n" // (0xff8308e8)Replaced call to my own function...
96  "LDR R0, [SP,#0x20-0x20]\n"
97  "MOV R3, R7\n"
98  "ADD R0, R0, #0xA\n"
99  "MOV R2, R1\n"
100  "BL _SetTimerWhen\n"
101  "CMP R0, #0x15\n"
102  "MVN R3, R0\n"
103  "ANDNE R0, R3, #1\n"
104  "MOVEQ R0, #1\n"
105  "CMP R0, #0\n"
106  "BNE loc_FF8307A8\n"
107  "MOV R2, #0x1F0\n"
108  "LDR R0, =0xFF8306F4\n" //aError_tHtimer1
109  "LDR R1, =0xFF830000\n" //=aPhyswmngr_c
110  "ADD R2, R2, #2\n"
111  "BL sub_FF814C10\n"
112 
113  "loc_FF8307A8:\n"
114  "LDR R3, =0x11AA0\n"
115  "LDR R4, =0x11728\n"
116  "LDR R5, =0x11A60\n"
117  "LDR R0, [R3]\n"
118  "MOV R1, #0\n"
119  "BL _TakeSemaphore\n"
120  "LDR R2, [R4,#8]\n"
121  "LDR R3, [R5,#0x2C]\n"
122  "TST R2, R3\n"
123  "BEQ loc_FF8307E0\n"
124  "LDR R0, =0x119A8\n"
125  "LDR R1, [R6,#0xC]\n"
126  "BL sub_FF830C5C\n"
127  "LDR R2, [R4,#8]\n"
128 
129  "loc_FF8307E0:\n"
130  "LDR R3, [R5,#0x20]\n"
131  "TST R2, R3\n"
132  "BEQ loc_FF8307F8\n"
133  "LDR R0, =0x11958\n"
134  "LDR R1, [R6,#8]\n"
135  "BL sub_FF830C5C\n"
136 
137  "loc_FF8307F8:\n"
138  "LDR R0, [R4,#4]\n"
139  "LDR R3, [R5,#0x10]\n"
140  "TST R0, R3\n"
141  "BEQ loc_FF830818\n"
142  "LDR R0, =0x11908\n"
143  "LDR R1, [R6,#4]\n"
144  "BL sub_FF830D10\n"
145  "LDR R0, [R4,#4]\n"
146 
147  "loc_FF830818:\n"
148  "LDR R1, [R5,#4]\n"
149  "LDR R2, [R4,#8]\n"
150  "LDR R3, [R5,#8]\n"
151  "AND R1, R0, R1\n"
152  "AND R2, R2, R3\n"
153  "ORRS R1, R1, R2\n"
154  "BEQ loc_FF830844\n"
155  "LDR R0, =0x118b8\n"
156  "LDR R1, [R6]\n"
157  "BL sub_FF830C5C\n"
158  "LDR R0, [R4,#4]\n"
159 
160  "loc_FF830844:\n"
161  "LDR R3, [R5,#0x34]\n"
162  "TST R0, R3\n"
163  "BEQ loc_FF83085C\n"
164  "LDR R0, =0x119f8\n"
165  "LDR R1, [R6,#0x10]\n"
166  "BL sub_FF830C5C\n"
167 
168  "loc_FF83085C:\n"
169  "BL sub_FF8310C8\n"
170  "LDR R3, =0x20F8\n"
171  "LDR R2, [R3]\n"
172  "CMP R2, #2\n"
173  "BEQ loc_FF83075C\n"
174 
175  "loc_FF830870:\n"
176  "LDR R3, =0x11A9C\n"
177  "LDR R1, =0x20F8\n"
178  "MOV R2, #3\n"
179  "LDR R0, [R3]\n"
180  "STR R2, [R1]\n"
181  "BL sub_FF823144\n"
182  "BL _ExitTask\n"
183  "ADD SP, SP, #8\n"
184  "LDMFD SP!, {R4-R8,PC}\n"
185  );
186  }//ixus30 ok
void __attribute__ ( (noinline)  )

Definiert in Zeile 189 der Datei kbd.c.

191  {
192  (void)ua; (void)ub; (void)uc; (void)ud; (void)ue; (void)uf;
193 
194  //create semaphore, empty = not available
196  //lock until 2nd rtask frees it
197  //_TakeSemaphore(semBinary,WAIT_FOREVER);
198 
199  mykbd_task_proceed();
200 
201  _ExitTask();
202  }
long __attribute__ ( (naked, noinline)  )

*-------------------------------------------------------------------—

!!

Definiert in Zeile 206 der Datei kbd.c.

207  {
208  // kbd_prev_state[0] = kbd_new_state[0];
210  // kbd_prev_state[2] = kbd_new_state[2];
211 
212  asm volatile
213  (
214  "STMFD SP!, {R4,R5,LR}\n" //@ff8308e8
215  "LDR R3, =0x20F4\n"
216  "SUB SP, SP, #8\n"
217  "LDR R2, [R3]\n"
218  "CMP R2, #1\n"
219  "BEQ loc_FF830914\n"
220  "MOV R2, #0x210\n"
221  "LDR R0, =0xFF8308D0\n"
222  "LDR R1, =0xFF830000\n"
223  "ADD R2, R2, #3\n"
224  "BL sub_FF814C10\n"
225 
226  "loc_FF830914:\n"
227  "LDR R1, =0x2108\n"
228  "LDR R2, [R1]\n"
229  "ADD R3, R2, #0x32\n"
230  "BIC R4, R3, #0xFF000000\n"
231  "BIC R4, R4, #0xF00000\n"
232  "CMP R2, R4\n"
233  "BCS loc_FF830954\n"
234  "MOV R5, R1\n"
235 
236  "loc_FF830934:\n"
237  "BL _GetCurrentMachineTime\n"
238  "CMP R0, R4\n"
239  "BCS loc_FF830984\n"
240  "BL _GetCurrentMachineTime\n"
241  "LDR R3, [R5]\n"
242  "CMP R3, R0\n"
243  "BCC loc_FF830934\n"
244  "B loc_FF830984\n"
245 
246  "loc_FF830954:\n"
247  "LDR R2, =0x2108\n"
248  "LDR R3, [R2]\n"
249  "CMP R3, R4\n"
250  "BLS loc_FF830984\n"
251  "MOV R5, R2\n"
252 
253  "loc_FF830968:\n"
254  "BL _GetCurrentMachineTime\n"
255  "CMP R0, R4\n"
256  "BCC loc_FF830968\n"
257  "BL _GetCurrentMachineTime\n"
258  "LDR R3, [R5]\n"
259  "CMP R3, R0\n"
260  "BCC loc_FF830968\n"
261 
262  "loc_FF830984:\n"
263  "LDR R4, =0x11728\n"
264  "MOV R0, R4\n"
265  "BL platformsub_kbd_fetch_data_my\n" // (sub_ff830e90) Replaced to a call to my own function..
266  "BL sub_FF830AB4\n"
267  "BL sub_FF830B1C\n"
268  "LDR R3, =0x20F4\n"
269  "MOV R2, #0\n"
270  "STR R2, [R3]\n"
271  "BL sub_FF83103C\n"
272  "LDR R3, [R4]\n"
273  "CMP R3, #0\n"
274  "BNE loc_FF8309CC\n"
275  "LDR R3, [R4,#4]\n"
276  "CMP R3, #0\n"
277  "BNE loc_FF8309CC\n"
278  "LDR R3, [R4,#8]\n"
279  "CMP R3, #0\n"
280  "BEQ loc_FF830A0C\n"
281 
282  "loc_FF8309CC:\n"
283  "LDR R3, =0x11728\n" // Address of key structure physw_status[]
284  "ADD R1, R3, #0xC\n"
285  "LDMIA R1, {R1,R12}\n"
286  "LDR R2, [R3,#0x14]\n"
287  "LDMIA R3, {R0,LR}\n"
288  "LDR R4, [R3,#8]\n"
289  "LDR R5, =0x11AA0\n"
290  "EOR R1, R1, R0\n"
291  "EOR R12, R12, LR\n"
292  "EOR R2, R2, R4\n"
293  "LDR R0, [R5]\n"
294  "STR R2, [R3,#0x14]\n"
295  "STR R1, [R3,#0xC]\n"
296  "STR R12, [R3,#0x10]\n"
297  "BL sub_FF823144\n"
298  "B loc_FF830A54\n"
299 
300  "loc_FF830A0C:\n"
301  "CMP R0, #1\n"
302  "BEQ loc_FF830A24\n"
303  "LDR R3, =0x20F8\n"
304  "LDR R2, [R3]\n"
305  "CMP R2, #2\n"
306  "BEQ loc_FF830A34\n"
307 
308  "loc_FF830A24:\n"
309  "LDR R3, =0x11AA0\n"
310  "LDR R0, [R3]\n"
311  "BL sub_FF823144\n"
312  "B loc_FF830A54\n"
313 
314  "loc_FF830A34:\n"
315  "MOV R0, SP\n"
316  "BL _GetSystemTime\n"
317  "LDR R1, =wrap_kbd_p1_f\n" // Replaced with a call to my own function ---------------------------------------------------------------------
318  "LDR R0, [SP,#0x14-0x14]\n"
319  "MOV R2, R1\n"
320  "ADD R0, R0, #0xA\n"
321  "ADD R3, SP, #0x14-0x10\n"
322  "BL _SetTimerWhen\n"
323 
324  "loc_FF830A54:\n"
325  "ADD SP, SP, #8\n"
326  "LDMFD SP!, {R4,R5,PC}\n"
327  );
328  return 0; // shut up the compiler
329 }
SEM_ID _semBCreate ( int  options,
SEM_B_STATE  initialState 
)
void kbd_process_task ( )

Definiert in Zeile 454 der Datei kbd.c.

455 {
456  while(1){
457  //try to get semaphore
458  //volatile long *p; p=(void*) 0xc02200E4; *p=0x46;
460  //*p=0x0;
461 
462  //process data & store result
463  kbd_data_process_request_data = kbd_process(); //kbd_process_copy();
464 
465  //give semaphore
466  //volatile long *p2; p2=(void*) 0xc02200E0; *p2=0x46;
468  //*p2=0x0;
469 
470  //sleep to allow other task to grab it
471  msleep(10);
472  }
473 }
long my_kbd_read_keys ( long  x)

Definiert in Zeile 332 der Datei kbd.c.

332  {
333  kbd_new_state[1]=x & 0xFFFF;
334 
335  //give semaphore away
337  //this should allow other tasks to grab it: (maybe not necessary)
338  msleep(0);
339 
340  //take semaphore again
342  //*p2=0;
343 
344  //data is now in kbd_data_process_request_data :)
345 
346  //if (kbd_process_copy() == 0)
348  return x;
349  }else{
350  return (kbd_new_state[1]&~KEYS_MASK1) | (kbd_mod_state[1] & KEYS_MASK1);
351  }
352 
353 }

Variablen-Dokumentation

int kbd_data_process_request_data =0
static

Definiert in Zeile 60 der Datei kbd.c.

long kbd_mod_state[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }

Definiert in Zeile 10 der Datei kbd.c.

long kbd_new_state[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }

Definiert in Zeile 8 der Datei kbd.c.

long kbd_prev_state[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }

Definiert in Zeile 9 der Datei kbd.c.

KeyMap keymap[]
Initialisierung:
= {
{1, KEY_UP , 0x00000020 },
{1, KEY_DOWN , 0x00000040 },
{1, KEY_LEFT , 0x00000080 },
{1, KEY_RIGHT , 0x00000100 },
{1, KEY_SET , 0x00000200 },
{1, KEY_SHOOT_FULL , 0x00000006 },
{1, KEY_SHOOT_FULL_ONLY , 0x00000004 },
{1, KEY_SHOOT_HALF , 0x00000002 },
{1, KEY_ZOOM_IN , 0x00000008 },
{1, KEY_ZOOM_OUT , 0x00000010 },
{1, KEY_MENU , 0x00000400 },
{1, KEY_DISPLAY , 0x00000800 },
{1, KEY_PRINT , 0x00002000 },
{0, 0, 0 }
}

Definiert in Zeile 12 der Datei kbd.c.

SEM_ID semBinary

Definiert in Zeile 58 der Datei kbd.c.