This source file includes following definitions.
- get_hdmi_hpd_physw_mod
- get_analog_av_physw_mod
- kbd_force_analog_av
- usb_power_status_override
- get_usb_bit_physw_mod
- get_usb_bit_physw_mod
- kbd_update_key_state
- kbd_update_physw_bits
- get_usb_bit
- kbd_key_press
- kbd_key_release
- kbd_key_release_all
- kbd_is_key_pressed
- kbd_is_key_clicked
- kbd_get_pressed_key
- kbd_get_clicked_key
- kbd_use_zoom_as_mf
- kbd_use_zoom_as_mf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 #include "platform.h"
79 #include "core.h"
80 #include "keyboard.h"
81 #include "kbd_common.h"
82 #include "conf.h"
83 #include "usb_remote.h"
84
85 #include "gui_draw.h"
86
87
88 #include "levent.h"
89
90
91
92 #ifndef KBD_CUSTOM_ALL
93 extern long physw_status[3];
94 extern int forced_usb_port;
95
96
97 int get_hdmi_hpd_physw_mod(void)
98 {
99 #ifdef HDMI_HPD_FLAG
100 if(!(physw_status[HDMI_HPD_IDX] & HDMI_HPD_FLAG)) {
101 return 1;
102 }
103 #endif
104 return 0;
105 }
106
107
108 int get_analog_av_physw_mod(void)
109 {
110 #ifdef ANALOG_AV_FLAG
111 if(!(physw_status[ANALOG_AV_IDX] & ANALOG_AV_FLAG)) {
112 return 1;
113 }
114 #endif
115 return 0;
116 }
117
118 #ifdef ANALOG_AV_FLAG
119 int forced_analog_av;
120 long prev_analog_av_state;
121 #endif
122
123 int kbd_force_analog_av(int state)
124 {
125 #ifdef ANALOG_AV_FLAG
126 forced_analog_av = state;
127 return 1;
128 #else
129 (void)state;
130 return 0;
131 #endif
132 }
133
134 #ifdef KBD_USB_OVERRIDE_FUNC
135
136 static int usb_status_mod;
137
138 int usb_power_status_override(int status){
139 int r;
140 if (forced_usb_port) {
141 r = status | USB_MASK;
142 } else if (conf.remote_enable) {
143 r = status &~USB_MASK;
144 } else {
145 r = status;
146 }
147 usb_status_mod = (r & USB_MASK)?1:0;
148 return r;
149 }
150
151
152 int get_usb_bit_physw_mod(void)
153 {
154 return usb_status_mod;
155 }
156
157 #else
158 int get_usb_bit_physw_mod(void)
159 {
160 if(physw_status[USB_IDX] & USB_MASK) {
161 return 1;
162 }
163 return 0;
164 }
165 #endif
166
167 #ifndef KBD_CUSTOM_UPDATE_KEY_STATE
168
169 #ifdef CAM_HAS_GPS
170 int gps_key_trap=0 ;
171 #endif
172
173
174
175
176
177 long kbd_update_key_state(void)
178 {
179 kbd_prev_state[0] = kbd_new_state[0];
180 kbd_prev_state[1] = kbd_new_state[1];
181 kbd_prev_state[2] = kbd_new_state[2];
182
183 #ifdef CAM_TOUCHSCREEN_UI
184 kbd_prev_state[3] = kbd_new_state[3];
185 #endif
186
187
188 kbd_fetch_data(kbd_new_state);
189
190 #ifdef CAM_HAS_GPS
191 if (gps_key_trap > 0)
192 {
193 if (kbd_get_pressed_key() == gps_key_trap)
194 {
195 kbd_key_release(gps_key_trap);
196 kbd_key_press(0);
197 gps_key_trap = -1;
198 msleep(1000);
199 }
200 }
201 #endif
202
203 long status = kbd_process();
204 if (status == 0){
205
206 physw_status[0] = kbd_new_state[0];
207 physw_status[1] = kbd_new_state[1];
208 physw_status[2] = kbd_new_state[2];
209
210 #ifdef CAM_HAS_JOGDIAL
211 jogdial_control(0);
212 #endif
213 } else {
214
215
216 physw_status[0] = (kbd_new_state[0] & (~KEYS_MASK0)) | (kbd_mod_state[0] & KEYS_MASK0);
217
218 physw_status[1] = (kbd_new_state[1] & (~KEYS_MASK1)) | (kbd_mod_state[1] & KEYS_MASK1);
219
220 physw_status[2] = (kbd_new_state[2] & (~KEYS_MASK2)) | (kbd_mod_state[2] & KEYS_MASK2);
221
222 #ifdef CAM_HAS_JOGDIAL
223 if ((jogdial_stopped==0) && !camera_info.state.state_kbd_script_run) {
224 jogdial_control(1);
225 get_jogdial_direction();
226 }
227 else if (jogdial_stopped && camera_info.state.state_kbd_script_run) {
228 jogdial_control(0);
229 }
230 #endif
231 }
232 return status;
233 }
234 #endif
235
236 #ifndef KBD_CUSTOM_UPDATE_PHYSW_BITS
237 void kbd_update_physw_bits(void)
238 {
239 if (conf.remote_enable) {
240 #ifdef CAM_REMOTE_MULTICHANNEL
241 switch(conf.remote_input_channel)
242 {
243 case REMOTE_INPUT_USB:
244 physw_status[USB_IDX] = physw_status[USB_IDX] & ~(USB_MASK);
245 break;
246 #ifdef CAM_REMOTE_HDMI_HPD
247 case REMOTE_INPUT_HDMI_HPD:
248 physw_status[HDMI_HPD_IDX] |= HDMI_HPD_FLAG;
249 break;
250 #endif
251 #ifdef CAM_REMOTE_ANALOG_AV
252 case REMOTE_INPUT_ANALOG_AV:
253 physw_status[ANALOG_AV_IDX] |= ANALOG_AV_FLAG;
254 break;
255 #endif
256 }
257 #else
258 physw_status[USB_IDX] = physw_status[USB_IDX] & ~(USB_MASK);
259 #endif
260 }
261
262 if (forced_usb_port) {
263 physw_status[USB_IDX] = physw_status[USB_IDX] | USB_MASK;
264 }
265 #ifdef ANALOG_AV_FLAG
266
267 if (forced_analog_av == 1) {
268 physw_status[ANALOG_AV_IDX] &= ~(ANALOG_AV_FLAG);
269 } else if(forced_analog_av == 2) {
270 physw_status[ANALOG_AV_IDX] |= ANALOG_AV_FLAG;
271 }
272
273
274 static long prev_analog_av_state = 0;
275 long new_analog_av_state = get_analog_av_physw_mod();
276 if(new_analog_av_state != prev_analog_av_state) {
277 draw_suspend(1000);
278 prev_analog_av_state = new_analog_av_state;
279 }
280 #endif
281
282 #ifndef KBD_SKIP_READONLY_BIT
283 physw_status[SD_READONLY_IDX] = physw_status[SD_READONLY_IDX] & ~SD_READONLY_FLAG;
284 #endif
285
286
287 #ifdef SD_DOOR_OVERRIDE
288 physw_status[SD_DOOR_IDX] |= SD_DOOR_FLAG;
289 #endif
290
291 #ifdef OPT_RUN_WITH_BATT_COVER_OPEN
292 physw_status[BATTCOVER_IDX] = physw_status[BATTCOVER_IDX] | BATTCOVER_FLAG;
293 #endif
294
295 #ifdef CAM_HOTSHOE_OVERRIDE
296 if (conf.hotshoe_override == 1) {
297 physw_status[HOTSHOE_IDX] = physw_status[HOTSHOE_IDX] & ~HOTSHOE_FLAG;
298 } else if (conf.hotshoe_override == 2) {
299 physw_status[HOTSHOE_IDX] = physw_status[HOTSHOE_IDX] | HOTSHOE_FLAG;
300 }
301 #endif
302 }
303 #endif
304
305
306
307 #ifdef USB_MMIO
308 int get_usb_bit()
309 {
310 volatile int *mmio = (void*)USB_MMIO;
311 return(( *mmio & USB_MASK)==USB_MASK);
312 }
313 #endif
314
315 #ifdef KBD_SIMULATE_VIDEO_KEY
316 static int is_video_key_pressed = 0;
317 #endif
318
319 void kbd_key_press(long key)
320 {
321 #ifdef KBD_SIMULATE_VIDEO_KEY
322 if (key == KEY_VIDEO && !is_video_key_pressed)
323 {
324
325 PostLogicalEventToUI(levent_id_for_name("PressMovieButton"),0);
326 is_video_key_pressed = 1;
327
328 return;
329 }
330 #endif
331 int i;
332 for (i=0;keymap[i].hackkey;i++){
333 if (keymap[i].hackkey == key){
334 kbd_mod_state[keymap[i].grp] &= ~keymap[i].canonkey;
335 return;
336 }
337 }
338 }
339
340 void kbd_key_release(long key)
341 {
342 #ifdef KBD_SIMULATE_VIDEO_KEY
343 if (key == KEY_VIDEO && is_video_key_pressed)
344 {
345 PostLogicalEventToUI(levent_id_for_name("UnpressMovieButton"),0);
346 is_video_key_pressed = 0;
347 return;
348 }
349 #endif
350 int i;
351 for (i=0;keymap[i].hackkey;i++){
352 if (keymap[i].hackkey == key){
353 kbd_mod_state[keymap[i].grp] |= keymap[i].canonkey;
354 return;
355 }
356 }
357 }
358
359 void kbd_key_release_all()
360 {
361 kbd_mod_state[0] |= KEYS_MASK0;
362 kbd_mod_state[1] |= KEYS_MASK1;
363 kbd_mod_state[2] |= KEYS_MASK2;
364
365 #ifdef CAM_TOUCHSCREEN_UI
366 kbd_mod_state[3] |= 0xFFFFFFFF;
367 #endif
368 }
369
370 long kbd_is_key_pressed(long key)
371 {
372 int i;
373 for (i=0;keymap[i].hackkey;i++){
374 if (keymap[i].hackkey == key){
375 return ((kbd_new_state[keymap[i].grp] & keymap[i].canonkey) == 0) ? 1:0;
376 }
377 }
378 return 0;
379 }
380
381 long kbd_is_key_clicked(long key)
382 {
383 int i;
384 for (i=0;keymap[i].hackkey;i++){
385 if (keymap[i].hackkey == key){
386 return ((kbd_prev_state[keymap[i].grp] & keymap[i].canonkey) != 0) &&
387 ((kbd_new_state[keymap[i].grp] & keymap[i].canonkey) == 0);
388 }
389 }
390 return 0;
391 }
392
393 long kbd_get_pressed_key()
394 {
395 int i;
396 for (i=0;keymap[i].hackkey;i++){
397 if ((kbd_new_state[keymap[i].grp] & keymap[i].canonkey) == 0){
398 return keymap[i].hackkey;
399 }
400 }
401 return 0;
402 }
403
404 long kbd_get_clicked_key()
405 {
406 int i;
407 for (i=0;keymap[i].hackkey;i++){
408 if (((kbd_prev_state[keymap[i].grp] & keymap[i].canonkey) != 0) &&
409 ((kbd_new_state[keymap[i].grp] & keymap[i].canonkey) == 0)){
410 return keymap[i].hackkey;
411 }
412 }
413 return 0;
414 }
415
416 #ifdef CAM_USE_ZOOM_FOR_MF
417
418 #ifdef KBD_ZOOM_FOR_MF_USE_MF_KEY
419 long kbd_use_zoom_as_mf() {
420 static long zoom_key_pressed = 0;
421
422 if (kbd_is_key_pressed(KEY_ZOOM_IN) && kbd_is_key_pressed(KEY_MF) && camera_info.state.mode_rec) {
423 if (shooting_get_focus_mode()) {
424 kbd_key_release_all();
425 kbd_key_press(KEY_MF);
426 kbd_key_press(KEY_UP);
427 zoom_key_pressed = KEY_ZOOM_IN;
428 return 1;
429 }
430 } else {
431 if (zoom_key_pressed==KEY_ZOOM_IN) {
432 kbd_key_release(KEY_UP);
433 zoom_key_pressed = 0;
434 return 1;
435 }
436 }
437 if (kbd_is_key_pressed(KEY_ZOOM_OUT) && kbd_is_key_pressed(KEY_MF) && camera_info.state.mode_rec) {
438 if (shooting_get_focus_mode()) {
439 kbd_key_release_all();
440 kbd_key_press(KEY_MF);
441 kbd_key_press(KEY_DOWN);
442 zoom_key_pressed = KEY_ZOOM_OUT;
443 return 1;
444 }
445 } else {
446 if (zoom_key_pressed==KEY_ZOOM_OUT) {
447 kbd_key_release(KEY_DOWN);
448 zoom_key_pressed = 0;
449 return 1;
450 }
451 }
452 return 0;
453 }
454 #else
455 long kbd_use_zoom_as_mf() {
456 static long zoom_key_pressed = 0;
457
458 if (kbd_is_key_pressed(KEY_ZOOM_IN) && camera_info.state.mode_rec) {
459 if (shooting_get_focus_mode()) {
460 kbd_key_release_all();
461 kbd_key_press(KEY_RIGHT);
462 zoom_key_pressed = KEY_ZOOM_IN;
463 return 1;
464 }
465 } else {
466 if (zoom_key_pressed==KEY_ZOOM_IN) {
467 kbd_key_release(KEY_RIGHT);
468 zoom_key_pressed = 0;
469 return 1;
470 }
471 }
472 if (kbd_is_key_pressed(KEY_ZOOM_OUT) && camera_info.state.mode_rec) {
473 if (shooting_get_focus_mode()) {
474 kbd_key_release_all();
475 kbd_key_press(KEY_LEFT);
476 zoom_key_pressed = KEY_ZOOM_OUT;
477 return 1;
478 }
479 } else {
480 if (zoom_key_pressed==KEY_ZOOM_OUT) {
481 kbd_key_release(KEY_LEFT);
482 zoom_key_pressed = 0;
483 return 1;
484 }
485 }
486 return 0;
487 }
488 #endif
489 #endif
490 #endif