source: trunk/include/platform.h @ 826

Revision 826, 15.3 KB checked in by reyalp, 4 years ago (diff)

First part of mode override support. See http://chdk.kernreaktor.org/mantis/view.php?id=64
+ support for posting logical events, and other event fuctions in lua
+ script support for setting mode to play or rec. Note, get_mode will currently return incorrect values on many cameras if the mode is set this way, which will affect both script and some CHDK functions. This will be addressed in a future version.
+ logical event related entry point SetLogicalEventActive? for all cameras except ixus40_sd300
+ logical event related entry points SetScriptMode?, PostLogicalEventForNotPowerType?, PostLogicalEventToUI for all cameras
+ entry SetCurrentCaptureModeType? for all cameras except ixus40_sd300 ixus50_sd400 (might be right, unsure). This will be used to support capture mode overrides in a future version, not currently exposed.
+ playrec_mode variable for all cameras except ixus40_sd300 ixus50_sd400. This will allow mode_get in future version to return the right result on cameras that depended on the physw_status bits of the mod/rec hardware switch
+ to tools:

  • generic dump access code dumputil.c, dumputil.h
  • find_levent.c finds and optionally dumps levent table
  • find_eventproc.c very dumb/simple search for name/pointer pairs, useful for eventprocs that are too small for finsig These are not added to "make all" in tools, because they are not needed in the normal build process. Use the executable name or "make extras" in tools.

Except as noted above, all the entry points and addresses have been verified with at least a superficial check

New firmware function descriptions:
See comments in lowlevel.h
See: http://chdk.setepontos.com/index.php/topic,3228.msg42218.html#msg42218 for more detail on SetLogicalEventActive? and SetScriptMode?

New firmware variable descriptions:
levent_table: see description in levent.h
playrec_mode: see description in lowlevel.h

New script functions: see comments in core/luascript.c or http://chdk.setepontos.com/index.php/topic,3228.msg42842.html#msg42842

  • Property svn:eol-style set to native
Line 
1#ifndef PLATFORM_H
2#define PLATFORM_H
3
4#include "camera.h"
5
6#define SSID_INVALID (-32767)
7#define ASID_INVALID (-32767)
8
9#define MODE_MASK               0x0300
10#define MODE_REC                0x0100
11#define MODE_PLAY               0x0200
12
13#define MODE_SHOOTING_MASK      0x00FF
14
15enum {
16MODE_AUTO               =1,
17MODE_P                  ,
18MODE_TV                 ,
19MODE_AV                 ,
20MODE_M                  ,
21MODE_PORTRAIT           ,
22MODE_NIGHT              ,
23MODE_LANDSCAPE          ,
24MODE_VIDEO_STD          ,
25MODE_VIDEO_SPEED        ,
26MODE_VIDEO_COMPACT      ,
27MODE_VIDEO_MY_COLORS    ,
28MODE_VIDEO_COLOR_ACCENT ,
29MODE_VIDEO_COLOR_SWAP   ,
30MODE_STITCH             ,
31MODE_MY_COLORS          ,
32MODE_SCN_WATER          ,
33MODE_SCN_NIGHT          ,
34MODE_SCN_CHILD          ,
35MODE_SCN_PARTY          ,
36MODE_SCN_GRASS          ,
37MODE_SCN_SNOW           ,
38MODE_SCN_BEACH          ,
39MODE_SCN_FIREWORK       ,
40MODE_SCN_COLOR_ACCENT   ,
41MODE_SCN_COLOR_SWAP     ,
42MODE_VIDEO_HIRES        ,
43MODE_SCN_AQUARIUM       ,
44MODE_COLOR_ACCENT       ,
45MODE_SCN_NIGHT1         ,
46MODE_SCN_ISO_3200       ,
47MODE_SCN_SPORT          ,
48MODE_SCN_KIDS_PETS      ,
49MODE_INDOOR             ,
50MODE_KIDS_PETS          ,
51MODE_NIGHT_SNAPSHOT     ,
52MODE_DIGITAL_MACRO      ,
53MODE_SCN_FOLIAGE        ,
54MODE_VIDEO_TIME_LAPSE   ,
55MODE_SCN_INDOOR         ,
56MODE_SCN_PORTRAIT       ,
57MODE_SUPER_MACRO        ,
58MODE_VIDEO_PORTRAIT     ,
59MODE_VIDEO_NIGHT        ,
60MODE_VIDEO_INDOOR       ,
61MODE_VIDEO_FOLIAGE      ,
62MODE_VIDEO_SNOW         ,
63MODE_VIDEO_BEACH        ,
64MODE_VIDEO_AQUARIUM     ,
65MODE_VIDEO_SUPER_MACRO  ,
66MODE_VIDEO_STITCH       ,
67MODE_VIDEO_MANUAL       ,
68MODE_SPORTS             ,
69MODE_QUICK                          ,
70MODE_SCN_SUNSET         ,
71MODE_SCN_UNDERWATER     ,
72MODE_EASY               ,
73MODE_SCN_DIGITAL_MACRO  ,
74MODE_SCN_STITCH         ,
75};
76
77// this is nasty, but not as nasty as checking each of the flags all over the place
78#define MODE_IS_VIDEO(m)   (((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_STD || \
79                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_SPEED ||  \
80                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_COMPACT || \
81                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_MY_COLORS || \
82                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_COLOR_ACCENT || \
83                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_COLOR_SWAP || \
84                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_TIME_LAPSE || \
85                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_PORTRAIT || \
86                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_NIGHT || \
87                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_INDOOR || \
88                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_FOLIAGE || \
89                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_SNOW  || \
90                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_BEACH || \
91                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_AQUARIUM || \
92                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_SUPER_MACRO || \
93                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_STITCH || \
94                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_MANUAL)
95#if CAM_PROPSET == 2     // most digic3 cameras
96 #include "propset2.h"
97#elif CAM_PROPSET == 1   // most digic2 cameras
98 #include "propset1.h"
99#else
100 #error unknown camera processor
101#endif
102
103
104#define MAX_DIST 65535
105
106//********************
107//char * get_debug();
108//********************
109
110#define MODE_SCREEN_MASK        0x0C00
111#define MODE_SCREEN_OPENED      0x0400
112#define MODE_SCREEN_ROTATED     0x0800
113#define AS_SIZE (sizeof(aperture_sizes_table)/sizeof(aperture_sizes_table[0]))
114#define ASID_MIN (aperture_sizes_table[0].id)
115#define ASID_MAX (aperture_sizes_table[AS_SIZE-1].id)
116
117/* Keyboard repeat and initial delays */
118#define KBD_REPEAT_DELAY  140
119#define KBD_INITIAL_DELAY 300
120
121// Video recording current status constants, see movie_status variable
122#define VIDEO_RECORD_NEVER_STARTED 0 
123#define VIDEO_RECORD_STOPPED 1 
124#define VIDEO_RECORD_IN_PROGRESS 4
125
126//Optical & digital zoom status constants, see zoom_status variable
127#define ZOOM_OPTICAL_MIN         1
128#define ZOOM_OPTICAL_MAX         2
129#define ZOOM_OPTICAL_MEDIUM      3
130#define ZOOM_OPTICAL_IN          4
131#define ZOOM_OPTICAL_OUT         5
132#define ZOOM_OPTICAL_REACHED_MIN 7
133
134#define ZOOM_DIGITAL_MAX         9
135#define ZOOM_DIGITAL_MEDIUM      10
136#define ZOOM_DIGITAL_IN          11
137#define ZOOM_DIGITAL_OUT         12
138#define ZOOM_DIGITAL_REACHED_MAX 13
139
140typedef struct {
141    short id; // hacks id
142    short prop_id; // Canons id
143    char name[8];
144    short shutter_dfs_value; // shutter speed to use dark frame substraction
145} ISOTable;
146
147typedef struct {
148    short id; // hacks id
149    short prop_id; // Canons id
150    char name[8];
151    long usec;
152} ShutterSpeed;
153
154typedef struct {
155    short id; // hacks id
156    short prop_id; // Canons id
157    char name[8];
158} ApertureSize;
159
160typedef struct {
161    short av96;
162    short dav96;
163    short av96_step;
164    short tv96;
165    short dtv96;
166    short tv96_step;
167    short sv96;
168    short dsv96;
169    short sv96_step;
170    short iso;
171    short diso;
172    short iso_step;
173    short subj_dist;
174    short dsubj_dist;
175    short subj_dist_step;
176    short shoot_counter;
177    short type;
178} EXPO_BRACKETING_VALUES;
179
180#define SET_NOW      1
181#define SET_LATER    0
182
183#define SHOW_ALWAYS    1
184#define SHOW_HALF      2
185
186
187typedef struct {
188    short av96;
189    short tv96;
190    short sv96;
191    short subj_dist;
192    short nd_filter;
193} PHOTO_PARAM;
194
195typedef struct {
196    int    subject_distance;
197    int     near_limit;
198    int     far_limit;
199    int     hyperfocal_distance;
200    int     depth_of_field;
201    int     lens_to_focal_plane_width;
202} DOF_TYPE;
203
204typedef struct {
205    short av96;
206    short tv96;
207    short sv96;
208    short iso;
209    short sv96_market;
210    short iso_market;
211    short bv96_measured;
212    short bv96_seted;//Ev96_internal-Sv96
213    short ev96_seted; //Tv96+Av96
214    short ev96_measured; //Bv96+Sv96
215    short dev96;// Ev96_external-Ev96_internal
216    short dev96_canon;// Canon OverExposure
217    int b; //average scene luminance
218} EXPO_TYPE;
219
220typedef struct {
221    float value;
222    char fraction[10];
223} shutter_speed;
224
225
226/******************************************************************/
227
228int get_focal_length(int zp);
229int get_effective_focal_length(int zp);
230int get_zoom_x(int zp);
231
232/******************************************************************/
233
234long get_tick_count();
235
236void remount_filesystem();
237void mark_filesystem_bootable();
238
239/******************************************************************/
240
241long get_parameter_data(long id, void *buf, long bufsize);
242long set_parameter_data(long id, void *buf, long bufsize);
243
244long get_property_case(long id, void *buf, long bufsize);
245long set_property_case(long id, void *buf, long bufsize);
246
247long get_file_counter();
248long get_exposure_counter();
249long get_file_next_counter();
250long get_target_dir_num();
251long get_target_file_num();
252
253/******************************************************************/
254
255void kbd_key_press(long key);
256void kbd_key_release(long key);
257void kbd_key_release_all();
258long kbd_is_key_pressed(long key);
259long kbd_is_key_clicked(long key);
260long kbd_get_pressed_key();
261long kbd_get_clicked_key();
262long kbd_get_autoclicked_key();
263void kbd_reset_autoclicked_key();
264long kbd_use_zoom_as_mf();
265long kbd_use_up_down_left_right_as_fast_switch();
266void kbd_set_alt_mode_key_mask(long key);
267int get_usb_power(int edge);
268long get_jogdial_direction(void);
269/******************************************************************/
270
271long vid_is_bitmap_shown();
272void *vid_get_bitmap_fb();
273long vid_get_bitmap_screen_width();
274long vid_get_bitmap_screen_height();
275long vid_get_bitmap_buffer_width();
276long vid_get_bitmap_buffer_height();
277void *vid_get_viewport_fb();
278void *vid_get_viewport_fb_d();
279void *vid_get_viewport_live_fb();
280void vid_bitmap_refresh();
281long vid_get_viewport_height();
282int vid_get_viewport_width();
283void vid_turn_off_updates();
284void vid_turn_on_updates();
285
286/******************************************************************/
287
288void *hook_raw_fptr();
289void *hook_raw_ret_addr();
290char *hook_raw_image_addr();
291long hook_raw_size();
292void hook_raw_install();
293void hook_raw_save_complete();
294
295/******************************************************************/
296
297long lens_get_zoom_pos();
298void lens_set_zoom_pos(long newpos);
299long lens_get_zoom_point();
300void lens_set_zoom_point(long newpt);
301void lens_set_zoom_speed(long newspd); //for S-series
302long lens_get_focus_pos();
303long lens_get_focus_pos_from_lense();
304void lens_set_focus_pos(long newpos);
305long lens_get_target_distance();
306
307/******************************************************************/
308
309int shooting_in_progress();
310int shooting_is_flash();
311int shooting_is_flash_ready();
312short shooting_get_flash_mode();
313
314
315/******************************************************************/
316int shooting_get_user_tv_id();
317char* shooting_get_tv_str();
318short shooting_get_tv96_from_shutter_speed(float t);
319short shooting_get_tv96();
320void shooting_set_tv96(short v, short is_now);
321void shooting_set_tv96_direct(short v, short is_now);
322void shooting_set_shutter_speed_ubasic(int t, short is_now);
323short shooting_get_user_tv96();
324void shooting_set_user_tv96(short v);
325float shooting_get_shutter_speed_from_tv96(short tv);
326float shooting_get_shutter_speed_override_value();
327const char * shooting_get_tv_override_value();
328const char * shooting_get_tv_bracket_value();
329const char * shooting_get_bracket_type();
330void shooting_set_user_tv_by_id(int v);
331void shooting_set_user_tv_by_id_rel(int v);
332const ShutterSpeed *shooting_get_tv_line();
333/******************************************************************/
334short shooting_get_aperture_sizes_table_size();
335short shooting_get_aperture_sizes_table_prop_id(short i);
336short shooting_get_max_aperture_sizes_table_prop_id();
337short shooting_get_aperture_from_av96(short av96);
338int shooting_get_user_av_id();
339char* shooting_get_av_str();
340void shooting_set_user_av_by_id(int v);
341short shooting_get_av96();
342void shooting_set_av96(short v,short is_now);
343void shooting_set_av96_direct(short v, short is_now);
344short shooting_get_user_av96();
345void shooting_set_user_av96(short v);
346void shooting_set_user_av_by_id_rel(int v);
347short shooting_get_real_aperture();
348short shooting_get_min_real_aperture();
349short shooting_get_av96_override_value();
350const char * shooting_get_av_bracket_value();
351void shooting_set_nd_filter_state(short v, short is_now);
352/******************************************************************/
353int shooting_get_day_seconds();
354int shooting_get_tick_count();
355/******************************************************************/
356void shooting_set_prop(int id, int v);
357int shooting_get_prop(int id);
358/******************************************************************/
359extern int circle_of_confusion;
360/******************************************************************/
361extern const int zoom_points;
362int shooting_get_zoom();
363void shooting_set_zoom(int v);
364void shooting_set_zoom_rel(int v);
365void shooting_set_zoom_speed(int v);
366/******************************************************************/
367int shooting_get_focus();
368void shooting_set_focus(int v, short is_now);
369short shooting_get_focus_mode();
370int shooting_get_hyperfocal_distance();
371int shooting_get_hyperfocal_distance_f(int av, int fl);
372int shooting_get_near_limit_of_acceptable_sharpness();
373int shooting_get_far_limit_of_acceptable_sharpness();
374int shooting_get_depth_of_field();
375int shooting_get_subject_distance();
376int shooting_get_subject_distance_override_value();
377int shooting_get_subject_distance_bracket_value();
378int shooting_get_subject_distance_override_koef();
379int shooting_get_lens_to_focal_plane_width();
380short shooting_get_drive_mode();
381short shooting_can_focus();
382short shooting_get_common_focus_mode();
383/******************************************************************/
384int shooting_get_iso_mode();
385void shooting_set_iso_mode(int v);
386short shooting_get_sv96();
387short shooting_get_svm96();
388short shooting_get_iso_market();
389short shooting_get_iso_real();
390void shooting_set_iso_real(short iso, short is_now);
391//void shooting_set_iso_market(short isom);
392//void shooting_set_iso_real_delta_from_base(short diso);
393void shooting_set_sv96(short sv96, short is_now);
394short shooting_get_iso_override_value();
395short shooting_get_iso_bracket_value();
396/******************************************************************/
397short shooting_get_canon_overexposure_value();
398short shooting_get_bv96();
399int shooting_get_luminance();
400//const char* shooting_get_flash_light_value();
401/******************************************************************/
402int shooting_get_canon_subject_distance();
403int shooting_get_exif_subject_dist();
404/******************************************************************/
405void shooting_expo_param_override();
406void shooting_bracketing(void);
407
408void shooting_video_bitrate_change(int v);
409extern int auto_started;
410void shooting_tv_bracketing();
411void shooting_av_bracketing();
412void shooting_iso_bracketing();
413/******************************************************************/
414void clear_values();
415/******************************************************************/
416
417
418int mode_get();
419
420/******************************************************************/
421
422long stat_get_vbatt();
423int get_ccd_temp();
424int get_optical_temp();
425int get_battery_temp();
426long get_vbatt_min();
427long get_vbatt_max();
428void play_sound(unsigned sound);
429void ubasic_camera_set_raw(int mode);
430void ubasic_camera_set_nr(int mode);
431int ubasic_camera_get_nr();
432int ubasic_camera_script_autostart();
433void ubasic_camera_set_script_autostart();
434void exit_alt();
435void camera_shutdown_in_a_second(void);
436
437void disable_shutdown();
438void enable_shutdown();
439
440void JogDial_CW(void);
441void JogDial_CCW(void);
442void change_video_tables(int a, int b);
443int get_flash_params_count(void);
444
445/******************************************************************/
446void __attribute__((noreturn)) shutdown();
447void ubasic_set_led(int led, int state, int bright);
448void debug_led(int state);
449/****************************************/
450extern int canon_menu_active; 
451extern char canon_shoot_menu_active; 
452extern int recreview_hold;
453
454extern int movie_status;
455unsigned int movie_reset;
456unsigned int GetFreeCardSpaceKb(void);
457unsigned int GetTotalCardSpaceKb(void);
458
459
460
461void swap_partitions(void);
462int get_part_count(void);
463void create_partitions(void);
464extern char * camera_jpeg_count_str();
465
466unsigned int GetJpgCount(void);
467unsigned int GetRawCount(void);
468
469void MakeAFScan(void);
470extern int movie_status;
471extern int zoom_status;
472void EnterToCompensationEVF(void);
473void ExitFromCompensationEVF(void);
474
475void TurnOnBackLight(void);
476void TurnOffBackLight(void);
477
478void wait_until_remote_button_is_released(void);
479short shooting_get_ev_correction1();
480
481//image_quality_override
482void shooting_set_image_quality(int imq);
483
484int get_ev_video_avail(void);
485void set_ev_video_avail(int);
486int get_ev_video(void);
487void set_ev_video(int);
488//dng related
489void reverse_bytes_order(char* start, int count);
490void save_ext_for_dng(void);
491void change_ext_to_dng(void);
492void change_ext_to_default(void);
493
494void DoAFLock(void);
495void UnlockAF(void);
496
497void drv_self_hide(void);
498void drv_self_unhide(void);
499
500void  PostLogicalEventForNotPowerType(unsigned event, unsigned unk);
501void  PostLogicalEventToUI(unsigned event, unsigned unk);
502void  SetLogicalEventActive(unsigned event, unsigned state);
503void SetScriptMode(unsigned mode);
504void SetCurrentCaptureModeType(unsigned mode);
505
506#define started() debug_led(1)
507#define finished() debug_led(0)
508
509#endif
Note: See TracBrowser for help on using the repository browser.