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