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 "kbd_common.h"
#include "touchscreen.h"
#include "levent.h"
#include "gui.h"
#include "gui_draw.h"
#include "gui_osd.h"
#include "font.h"
+ Include-Abhängigkeitsdiagramm für kbd.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define TS_KEY_TOGGLE_RAW   200
 
#define TS_KEY_TOGGLE_ZEBRA   201
 
#define TS_KEY_TOGGLE_HISTO   202
 
#define TS_KEY_TOGGLE_OSD   203
 
#define TS_KEY_TOGGLE_OVRD   204
 
#define TS_KEY_TOGGLE_EDGE   205
 
#define TS_KEY_PLAYBACK   214
 
#define TS_KEY_POWER   215
 
#define TS_XL   0
 
#define TS_XR   422
 
#define TS_W   58
 
#define TS_YT   0
 
#define TS_H   48
 
#define LB(x, n, s)   TS_XL+x*TS_W, TS_YT+n*TS_H, TS_XL+(x+1)*TS_W-1, TS_YT+n*TS_H+TS_H-1, s
 
#define RB(x, n, s)   TS_XR-x*TS_W, TS_YT+n*TS_H, TS_XR-(x-1)*TS_W-1, TS_YT+n*TS_H+TS_H-1, s
 
#define MODE_VID   0x400
 

Funktionen

void _GetKbdState (long *)
 
const char * gui_on_off_enum (int change, int arg)
 
const char * gui_histo_show_enum (int change, int arg)
 
const char * gui_override_disable_enum (int change, int arg)
 
static int is_button_displayed (int b, int guiMode, int camMode)
 
static int is_button_active (int b, int guiMode, int camMode)
 
int show_virtual_buttons ()
 
int chdk_process_touch ()
 
static int draw_test_pixel (coord x, coord y, color c)
 
void virtual_buttons ()
 
int ts_process_touch ()
 
int get_usb_bit ()
 
void kbd_fetch_data (long *dst)
 
void my_kbd_read_keys ()
 
long __attribute__ ((naked, noinline))
 *-------------------------------------------------------------------— Mehr ...
 

Variablen

long kbd_new_state [4] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }
 
long kbd_prev_state [4] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }
 
long kbd_mod_state [4] = { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }
 
static long touch_panel_state
 
KeyMap keymap []
 
int redraw_buttons = 1
 

Makro-Dokumentation

#define LB (   x,
  n,
  s 
)    TS_XL+x*TS_W, TS_YT+n*TS_H, TS_XL+(x+1)*TS_W-1, TS_YT+n*TS_H+TS_H-1, s

Definiert in Zeile 56 der Datei kbd.c.

#define MODE_VID   0x400

Definiert in Zeile 63 der Datei kbd.c.

#define RB (   x,
  n,
  s 
)    TS_XR-x*TS_W, TS_YT+n*TS_H, TS_XR-(x-1)*TS_W-1, TS_YT+n*TS_H+TS_H-1, s

Definiert in Zeile 57 der Datei kbd.c.

#define TS_H   48

Definiert in Zeile 55 der Datei kbd.c.

#define TS_KEY_PLAYBACK   214

Definiert in Zeile 48 der Datei kbd.c.

#define TS_KEY_POWER   215

Definiert in Zeile 49 der Datei kbd.c.

#define TS_KEY_TOGGLE_EDGE   205

Definiert in Zeile 47 der Datei kbd.c.

#define TS_KEY_TOGGLE_HISTO   202

Definiert in Zeile 44 der Datei kbd.c.

#define TS_KEY_TOGGLE_OSD   203

Definiert in Zeile 45 der Datei kbd.c.

#define TS_KEY_TOGGLE_OVRD   204

Definiert in Zeile 46 der Datei kbd.c.

#define TS_KEY_TOGGLE_RAW   200

Definiert in Zeile 42 der Datei kbd.c.

#define TS_KEY_TOGGLE_ZEBRA   201

Definiert in Zeile 43 der Datei kbd.c.

#define TS_W   58

Definiert in Zeile 53 der Datei kbd.c.

#define TS_XL   0

Definiert in Zeile 51 der Datei kbd.c.

#define TS_XR   422

Definiert in Zeile 52 der Datei kbd.c.

#define TS_YT   0

Definiert in Zeile 54 der Datei kbd.c.

Dokumentation der Funktionen

long __attribute__ ( (naked, noinline)  )

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

!!

IS_ERROR( hSoundHandle )

IS_ERROR( RetCode )

IS_ERROR( RetCode )

IS_ERROR( RetCode )

IS_ERROR( RetCode )

Definiert in Zeile 341 der Datei kbd.c.

342 {
343  asm volatile(
344  "STMFD SP!, {R1-R7,LR}\n"
345  "MOV R5, #0\n"
346  //"BL _kbd_read_keys \n"
347  "BL my_kbd_read_keys\n"
348  "B _kbd_p1_f_cont\n"
349  );
350  return 0; // shut up the compiler
351 }
void _GetKbdState ( long *  )
int chdk_process_touch ( )

Definiert in Zeile 152 der Datei kbd.c.

153 {
154  //ts_check_cnt++;
155 
156  // If in canon menu, let the firmware have all the touch events.
157  if (!show_virtual_buttons()) return 0;
158 
160 
161  // Touch co-ordinate
162  unsigned int tx = ((touch_screen_x & 0x7FFF) >> 5) ^ 0x3FF;
163  unsigned int ty = ((touch_screen_y & 0x7FFF) >> 5) ^ 0x3FF;
164  // Screen co-ordinate
165  int sx = ((tx - 40) * 480) / 954;
166  int sy = ((ty - 60) * 240) / 900;
167  if (conf.rotate_osd)
168  {
169  sx = 480 - sx;
170  sy = 240 - sy;
171  }
172 
173  // Search for CHDK on screen buttons matching co-ordinate
174  int i;
175  for (i=0; keymap[i].hackkey; i++)
176  {
177  if ((sx >= keymap[i].x1) && (sx < keymap[i].x2) && (sy >= keymap[i].y1) && (sy < keymap[i].y2) && is_button_active(i,camera_info.state.gui_mode,camMode))
178  {
180  }
181  }
182 
183  // Check if menu touched
184  int mk = gui_touch_process(sx, sy);
185  if (mk != 0)
186  {
187  for (i=0; keymap[i].hackkey; i++)
188  {
189  if ((keymap[i].hackkey == mk) && is_button_active(i,camera_info.state.gui_mode,camMode))
190  {
192  }
193  }
194  }
195 
196  // If in alt mode (or about to enter alt mode) block event from firmware
197  return !camera_info.state.gui_mode_none || (((touch_panel_state & 1) == 0) && ((kbd_mod_state[3] & 1) != 0));
198 }
static int draw_test_pixel ( coord  x,
coord  y,
color  c 
)
static

Definiert in Zeile 203 der Datei kbd.c.

204 {
205  extern char* bitmap_buffer[];
206  extern int active_bitmap_buffer;
207  if (conf.rotate_osd)
208  return (bitmap_buffer[active_bitmap_buffer][(240-y) * camera_screen.buffer_width + ASPECT_XCORRECTION(480-x) - 1] == c);
209  else
210  return (bitmap_buffer[active_bitmap_buffer][y * camera_screen.buffer_width + ASPECT_XCORRECTION(x)] == c);
211 }
int get_usb_bit ( )

Definiert in Zeile 305 der Datei kbd.c.

306 {
307  long usb_physw[3];
308  usb_physw[USB_IDX] = 0;
309  _kbd_read_keys_r2(usb_physw);
310  return(( usb_physw[USB_IDX] & USB_MASK)==USB_MASK) ;
311 }
const char* gui_histo_show_enum ( int  change,
int  arg 
)
const char* gui_on_off_enum ( int  change,
int  arg 
)
const char* gui_override_disable_enum ( int  change,
int  arg 
)
static int is_button_active ( int  b,
int  guiMode,
int  camMode 
)
static

Definiert in Zeile 139 der Datei kbd.c.

140 {
141  return (is_button_displayed(b, guiMode, camMode) && keymap[b].canonkey);
142 }
static int is_button_displayed ( int  b,
int  guiMode,
int  camMode 
)
static

Definiert in Zeile 128 der Datei kbd.c.

129 {
130  return (
131  (keymap[b].grp == 3) &&
132  (guiMode >= keymap[b].min_gui_mode) &&
133  (guiMode <= keymap[b].max_gui_mode) &&
134  (camMode & keymap[b].cam_mode_mask) &&
135  ((keymap[b].conf_disable == 0) || (*keymap[b].conf_disable == 0))
136  );
137 }
void kbd_fetch_data ( long *  dst)

Definiert in Zeile 313 der Datei kbd.c.

314 {
315  _GetKbdState(dst);
317 
318  static int was_active = 0;
319 
320  if (touch_screen_active == 2) // Touch screen activated?
321  {
322  was_active = 1; // Record activated, wait until released
323  }
324  else if (was_active)
325  {
326  kbd_new_state[3] = touch_panel_state; // Use virtual button state
327  was_active = 0;
328  }
329  else
330  {
331  kbd_new_state[3] = touch_panel_state = 0xFFFFFFFF; // Clear out virtual button state
332  }
333 }
void my_kbd_read_keys ( )

Definiert in Zeile 335 der Datei kbd.c.

336 {
339 }
int show_virtual_buttons ( )

Definiert in Zeile 144 der Datei kbd.c.

145 {
146  extern char canon_play_menu_active;
147  return (canon_menu_active==(int)&canon_menu_active-4) && (canon_shoot_menu_active==0) && (canon_play_menu_active == 0);
148 }
int ts_process_touch ( )

Definiert in Zeile 273 der Datei kbd.c.

274 {
275  int rv = 0, i;
276 
277  if (touch_panel_state != (long)0xFFFFFFFF)
278  {
280 
281  //ts_proc_cnt++;
282 
283  for (i=0; keymap[i].hackkey; i++)
284  {
285  if (is_button_active(i, camera_info.state.gui_mode, camMode))
286  {
287  if (kbd_is_key_clicked(keymap[i].hackkey))
288  {
289  if (keymap[i].conf_val && keymap[i].chg_val)
290  {
291  keymap[i].chg_val(1,(int)keymap[i].conf_val);
292  rv = keymap[i].redraw & 1;
293  }
294  if (keymap[i].redraw & 2) redraw_buttons = 1;
295  }
296  }
297  }
298  }
299 
300  return rv;
301 }
void virtual_buttons ( )

Definiert in Zeile 213 der Datei kbd.c.

214 {
215  char buf[30];
216 
217  // If shooting or in any Canon menus then don't display any CHDK buttons
219 
220  // Check if border of CHDK button is corrupted, force redraw if so
222 
223  if (redraw_buttons)
224  {
225  //ts_redraw_cnt++;
226 
227  int i, x1, y1, x2, y2, sc, xo, yo;
229 
230  color c1 = MAKE_COLOR(COLOR_GREY_DK_TRANS, COLOR_WHITE);
232 
233  for (i=0; keymap[i].hackkey; i++)
234  {
235  if (is_button_displayed(i, camera_info.state.gui_mode, camMode) && keymap[i].nm)
236  {
237  x1 = keymap[i].x1;
238  x2 = keymap[i].x2;
239  y1 = keymap[i].y1;
240  y2 = keymap[i].y2;
241  sc = keymap[i].sc;
242  yo = (sc == 1) ? 16 : 8;
243 
244  twoColors cl = c1;
245  if (camera_info.state.gui_mode && (keymap[i].hackkey == KEY_PRINT)) cl = c2;
246  if (keymap[i].conf_val && *keymap[i].conf_val) cl = c2;
247 
249 
250  if (keymap[i].conf_val && keymap[i].chg_val)
251  {
252  yo -= 9;
253  strcpy(buf,(char*)keymap[i].chg_val(0,(int)keymap[i].conf_val));
254  buf[6] = 0;
255  xo = (58 - strlen(buf)*FONT_WIDTH*sc) / 2;
256  draw_string(x1+xo, y1+yo+18, buf, cl);
257  }
258  else if (keymap[i].nm2)
259  {
260  yo -= 9;
261  xo = (58 - strlen(keymap[i].nm2)*FONT_WIDTH*sc) / 2;
262  draw_string(x1+xo, y1+yo+18, keymap[i].nm2, cl);
263  }
264  xo = (58 - strlen(keymap[i].nm)*FONT_WIDTH*sc) / 2;
265  draw_string_scaled(x1+xo, y1+yo, keymap[i].nm, cl, sc, sc);
266  }
267  }
268  }
269 
270  redraw_buttons = 0;
271 }

Variablen-Dokumentation

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

Definiert in Zeile 20 der Datei kbd.c.

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

Definiert in Zeile 18 der Datei kbd.c.

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

Definiert in Zeile 19 der Datei kbd.c.

KeyMap keymap[]

Definiert in Zeile 82 der Datei kbd.c.

int redraw_buttons = 1

Definiert in Zeile 200 der Datei kbd.c.

long touch_panel_state
static

Definiert in Zeile 21 der Datei kbd.c.