source: trunk/include/platform.h @ 1017

Revision 1017, 17.4 KB checked in by reyalP, 2 years ago (diff)

sx30 and g12 updates from philmoz in http://chdk.setepontos.com/index.php?topic=650.msg59119#msg59119

  • 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
15/* capture mode constants. These are in their own header for easier sed processing*/
16#include "modelist.h"
17
18// this is nasty, but not as nasty as checking each of the flags all over the place
19#define MODE_IS_VIDEO(m)   (((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_STD || \
20                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_SPEED ||  \
21                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_COMPACT || \
22                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_MY_COLORS || \
23                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_COLOR_ACCENT || \
24                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_COLOR_SWAP || \
25                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_TIME_LAPSE || \
26                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_PORTRAIT || \
27                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_NIGHT || \
28                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_INDOOR || \
29                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_FOLIAGE || \
30                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_SNOW  || \
31                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_BEACH || \
32                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_AQUARIUM || \
33                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_SUPER_MACRO || \
34                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_STITCH || \
35                            ((m)&MODE_SHOOTING_MASK)==MODE_VIDEO_MANUAL)
36
37/* propcase ID constants. These are in their own header files for easier sed processing */
38#if CAM_PROPSET == 4
39    #include "propset4.h"
40#elif CAM_PROPSET == 3
41    #include "propset3.h"
42#elif CAM_PROPSET == 2    // most digic3 cameras
43    #include "propset2.h"
44#elif CAM_PROPSET == 1    // most digic2 cameras
45    #include "propset1.h"
46#else
47    #error unknown camera processor
48#endif
49
50#define MAX_DIST 65535
51
52//********************
53//char * get_debug();
54//********************
55
56#define MODE_SCREEN_MASK        0x0C00
57#define MODE_SCREEN_OPENED      0x0400
58#define MODE_SCREEN_ROTATED     0x0800
59#define AS_SIZE (sizeof(aperture_sizes_table)/sizeof(aperture_sizes_table[0]))
60#define ASID_MIN (aperture_sizes_table[0].id)
61#define ASID_MAX (aperture_sizes_table[AS_SIZE-1].id)
62
63/* Keyboard repeat and initial delays */
64#define KBD_REPEAT_DELAY  140
65#define KBD_INITIAL_DELAY 300
66
67// Video recording current status constants, see movie_status variable
68#define VIDEO_RECORD_NEVER_STARTED    0
69#define VIDEO_RECORD_STOPPED          1
70#define VIDEO_RECORD_IN_PROGRESS      4
71
72//Optical & digital zoom status constants, see zoom_status variable
73#define ZOOM_OPTICAL_MIN              1
74#define ZOOM_OPTICAL_MAX              2
75#define ZOOM_OPTICAL_MEDIUM           3
76#define ZOOM_OPTICAL_IN               4
77#define ZOOM_OPTICAL_OUT              5
78#define ZOOM_OPTICAL_REACHED_MIN      7
79
80#define ZOOM_DIGITAL_MAX              9
81#define ZOOM_DIGITAL_MEDIUM           10
82#define ZOOM_DIGITAL_IN               11
83#define ZOOM_DIGITAL_OUT              12
84#define ZOOM_DIGITAL_REACHED_MAX      13
85
86typedef struct {
87    int hackmode; // platform independent mode values from MODE_xxx enum
88    int canonmode; // PROPCASE_SHOOTING_MODE value
89} CapturemodeMap;
90
91typedef struct {
92    short id; // hacks id
93    short prop_id; // Canons id
94    char name[8];
95    short shutter_dfs_value; // shutter speed to use dark frame substraction
96} ISOTable;
97
98typedef struct {
99    short id; // hacks id
100    short prop_id; // Canons id
101    char name[8];
102    long usec;
103} ShutterSpeed;
104
105typedef struct {
106    short id; // hacks id
107    short prop_id; // Canons id
108    char name[8];
109} ApertureSize;
110
111typedef struct {
112    short av96;
113    short dav96;
114    short av96_step;
115    short tv96;
116    short dtv96;
117    short tv96_step;
118    short sv96;
119    short dsv96;
120    short sv96_step;
121    short iso;
122    short diso;
123    short iso_step;
124    short subj_dist;
125    short dsubj_dist;
126    short subj_dist_step;
127    short shoot_counter;
128    short type;
129} EXPO_BRACKETING_VALUES;
130
131#define SET_NOW      1
132#define SET_LATER    0
133
134#define SHOW_ALWAYS    1
135#define SHOW_HALF      2
136
137typedef struct {
138    short av96;
139    short tv96;
140    short sv96;
141    short subj_dist;
142    short nd_filter;
143} PHOTO_PARAM;
144
145typedef struct {
146    int    subject_distance;
147    int     near_limit;
148    int     far_limit;
149    int     hyperfocal_distance;
150    int     depth_of_field;
151    int     lens_to_focal_plane_width;
152} DOF_TYPE;
153
154typedef struct {
155    short av96;
156    short tv96;
157    short sv96;
158    short iso;
159    short sv96_market;
160    short iso_market;
161    short bv96_measured;
162    short bv96_seted;//Ev96_internal-Sv96
163    short ev96_seted; //Tv96+Av96
164    short ev96_measured; //Bv96+Sv96
165    short dev96;// Ev96_external-Ev96_internal
166    short dev96_canon;// Canon OverExposure
167    int b; //average scene luminance
168} EXPO_TYPE;
169
170typedef struct {
171    float value;
172    char fraction[10];
173} shutter_speed;
174
175
176/******************************************************************/
177
178int get_focal_length(int zp);
179int get_effective_focal_length(int zp);
180int get_zoom_x(int zp);
181
182/******************************************************************/
183
184long get_tick_count();
185
186void remount_filesystem();
187void mark_filesystem_bootable();
188
189/******************************************************************/
190
191long get_parameter_data(long id, void *buf, long bufsize);
192long set_parameter_data(long id, void *buf, long bufsize);
193
194long get_property_case(long id, void *buf, long bufsize);
195long set_property_case(long id, void *buf, long bufsize);
196
197long get_file_counter();
198long get_exposure_counter();
199long get_file_next_counter();
200#if defined(CAM_DATE_FOLDER_NAMING)
201void get_target_dir_name(char*);
202#else
203long get_target_dir_num();
204#endif
205long get_target_file_num();
206
207/******************************************************************/
208
209void kbd_key_press(long key);
210void kbd_key_release(long key);
211void kbd_key_release_all();
212long kbd_is_key_pressed(long key);
213long kbd_is_key_clicked(long key);
214long kbd_get_pressed_key();
215long kbd_get_clicked_key();
216long kbd_get_autoclicked_key();
217void kbd_reset_autoclicked_key();
218long kbd_use_zoom_as_mf();
219long kbd_use_up_down_left_right_as_fast_switch();
220void kbd_set_alt_mode_key_mask(long key);
221int get_usb_power(int edge);
222long get_jogdial_direction(void);
223/******************************************************************/
224
225long vid_is_bitmap_shown();
226void *vid_get_bitmap_fb();
227long vid_get_bitmap_screen_width();
228long vid_get_bitmap_screen_height();
229long vid_get_bitmap_buffer_width();
230long vid_get_bitmap_buffer_height();
231void *vid_get_viewport_fb();
232void *vid_get_viewport_fb_d();
233void *vid_get_viewport_live_fb();
234void vid_bitmap_refresh();
235long vid_get_viewport_height();
236int vid_get_viewport_width();
237int vid_get_viewport_buffer_width();
238int vid_get_viewport_xoffset();
239int vid_get_viewport_yoffset();
240void vid_turn_off_updates();
241void vid_turn_on_updates();
242
243/******************************************************************/
244
245void *hook_raw_fptr();
246void *hook_raw_ret_addr();
247char *hook_raw_image_addr();
248char *hook_alt_raw_image_addr();
249long hook_raw_size();
250void hook_raw_install();
251void hook_raw_save_complete();
252
253/******************************************************************/
254
255long lens_get_zoom_pos();
256void lens_set_zoom_pos(long newpos);
257long lens_get_zoom_point();
258void lens_set_zoom_point(long newpt);
259void lens_set_zoom_speed(long newspd); //for S-series
260long lens_get_focus_pos();
261long lens_get_focus_pos_from_lens();
262void lens_set_focus_pos(long newpos);
263long lens_get_target_distance();
264
265/******************************************************************/
266
267int shooting_in_progress();
268int shooting_is_flash();
269int shooting_is_flash_ready();
270short shooting_get_flash_mode();
271
272
273/******************************************************************/
274int shooting_get_user_tv_id();
275char* shooting_get_tv_str();
276short shooting_get_tv96_from_shutter_speed(float t);
277short shooting_get_tv96();
278void shooting_set_tv96(short v, short is_now);
279void shooting_set_tv96_direct(short v, short is_now);
280void shooting_set_shutter_speed_ubasic(int t, short is_now);
281short shooting_get_user_tv96();
282void shooting_set_user_tv96(short v);
283float shooting_get_shutter_speed_from_tv96(short tv);
284float shooting_get_shutter_speed_override_value();
285const char * shooting_get_tv_override_value();
286const char * shooting_get_tv_bracket_value();
287const char * shooting_get_bracket_type();
288void shooting_set_user_tv_by_id(int v);
289void shooting_set_user_tv_by_id_rel(int v);
290const ShutterSpeed *shooting_get_tv_line();
291/******************************************************************/
292short shooting_get_aperture_sizes_table_size();
293short shooting_get_aperture_sizes_table_prop_id(short i);
294short shooting_get_max_aperture_sizes_table_prop_id();
295short shooting_get_aperture_from_av96(short av96);
296int shooting_get_user_av_id();
297char* shooting_get_av_str();
298void shooting_set_user_av_by_id(int v);
299short shooting_get_av96();
300void shooting_set_av96(short v,short is_now);
301void shooting_set_av96_direct(short v, short is_now);
302short shooting_get_user_av96();
303void shooting_set_user_av96(short v);
304void shooting_set_user_av_by_id_rel(int v);
305short shooting_get_real_aperture();
306short shooting_get_min_real_aperture();
307short shooting_get_av96_override_value();
308const char * shooting_get_av_bracket_value();
309void shooting_set_nd_filter_state(short v, short is_now);
310/******************************************************************/
311int shooting_get_day_seconds();
312int shooting_get_tick_count();
313/******************************************************************/
314void shooting_set_prop(int id, int v);
315int shooting_get_prop(int id);
316/******************************************************************/
317extern int circle_of_confusion;
318/******************************************************************/
319extern const int zoom_points;
320int shooting_get_zoom();
321void shooting_set_zoom(int v);
322void shooting_set_zoom_rel(int v);
323void shooting_set_zoom_speed(int v);
324/******************************************************************/
325int shooting_get_focus();
326void shooting_set_focus(int v, short is_now);
327short shooting_get_focus_mode();
328int shooting_get_hyperfocal_distance();
329int shooting_get_hyperfocal_distance_f(int av, int fl);
330int shooting_get_near_limit_of_acceptable_sharpness();
331int shooting_get_far_limit_of_acceptable_sharpness();
332int shooting_get_depth_of_field();
333int shooting_get_subject_distance();
334int shooting_get_subject_distance_override_value();
335int shooting_get_subject_distance_bracket_value();
336int shooting_get_subject_distance_override_koef();
337int shooting_get_lens_to_focal_plane_width();
338short shooting_get_drive_mode();
339short shooting_can_focus();
340short shooting_get_common_focus_mode();
341/******************************************************************/
342int shooting_get_iso_mode();
343void shooting_set_iso_mode(int v);
344short shooting_get_sv96();
345short shooting_get_svm96();
346short shooting_get_iso_market();
347short shooting_get_iso_real();
348void shooting_set_iso_real(short iso, short is_now);
349//void shooting_set_iso_market(short isom);
350//void shooting_set_iso_real_delta_from_base(short diso);
351void shooting_set_sv96(short sv96, short is_now);
352short shooting_get_iso_override_value();
353short shooting_get_iso_bracket_value();
354/******************************************************************/
355short shooting_get_canon_overexposure_value();
356short shooting_get_bv96();
357int shooting_get_luminance();
358//const char* shooting_get_flash_light_value();
359/******************************************************************/
360int shooting_get_canon_subject_distance();
361int shooting_get_exif_subject_dist();
362/******************************************************************/
363void shooting_expo_param_override();
364void shooting_bracketing(void);
365
366void shooting_video_bitrate_change(int v);
367extern int auto_started;
368void shooting_tv_bracketing();
369void shooting_av_bracketing();
370void shooting_iso_bracketing();
371/******************************************************************/
372// capture mode functions
373// return a CHDK mode enum for a PROPCASE_SHOOTING_MODE value, or 0 if not found
374int shooting_mode_canon2chdk(int canonmode);
375// return a PROPCASE_SHOOTING_MODE value for a CHDK mode enum value, or -1 if not found. 0 is a valid mode on some cameras.
376int shooting_mode_chdk2canon(int hackmode);
377// set capture mode from CHDK mode, returns 0 if mode not found or not in rec, otherwise 1
378int shooting_set_mode_chdk(int mode);
379// set capture mode from PROPCASE_SHOOTING_MODE value. return 0 if not in rec or mode is -1, otherwise 1
380int shooting_set_mode_canon(int mode);
381
382// returns 0 if in play, nonzero if rec
383int rec_mode_active(void);
384
385// not used. Right now this is just to preserve code from earlier version of mode_get()
386// in case we want to check play/rec switch state in the future.
387// WARNING: it isn't known if all variants of this check the switch state or some other bit.
388// should return 0 is switch is in play position, non-zero otherwise
389//int rec_switch_state(void);
390
391// swivel screen state.
392#ifdef CAM_SWIVEL_SCREEN
393// 0 not open, non-zero open
394int screen_opened(void);
395// 0 not rotated, non-zero rotated
396int screen_rotated(void);
397#endif
398
399/******************************************************************/
400void clear_values();
401/******************************************************************/
402
403int mode_get();
404
405/******************************************************************/
406
407long stat_get_vbatt();
408int get_ccd_temp();
409int get_optical_temp();
410int get_battery_temp();
411long get_vbatt_min();
412long get_vbatt_max();
413void play_sound(unsigned sound);
414void camera_set_raw(int mode);
415void camera_set_nr(int mode);
416int camera_get_nr();
417int camera_get_script_autostart();
418void camera_set_script_autostart();
419void exit_alt();
420void camera_shutdown_in_a_second(void);
421
422void disable_shutdown();
423void enable_shutdown();
424
425void JogDial_CW(void);
426void JogDial_CCW(void);
427void change_video_tables(int a, int b);
428int get_flash_params_count(void);
429
430/******************************************************************/
431void __attribute__((noreturn)) shutdown();
432void camera_set_led(int led, int state, int bright);
433void debug_led(int state);
434/****************************************/
435extern int canon_menu_active;
436extern char canon_shoot_menu_active;
437extern int recreview_hold;
438
439extern int movie_status;
440unsigned int movie_reset;
441unsigned int GetFreeCardSpaceKb(void);
442unsigned int GetTotalCardSpaceKb(void);
443
444void swap_partitions(void);
445int get_part_count(void);
446void create_partitions(void);
447extern char * camera_jpeg_count_str();
448
449unsigned int GetJpgCount(void);
450unsigned int GetRawCount(void);
451
452void MakeAFScan(void);
453extern int movie_status;
454extern int zoom_status;
455void EnterToCompensationEVF(void);
456void ExitFromCompensationEVF(void);
457
458void TurnOnBackLight(void);
459void TurnOffBackLight(void);
460
461void wait_until_remote_button_is_released(void);
462short shooting_get_ev_correction1();
463
464//image_quality_override
465void shooting_set_image_quality(int imq);
466
467int get_ev_video_avail(void);
468void set_ev_video_avail(int);
469int get_ev_video(void);
470void set_ev_video(int);
471//dng related
472// new version to support DNG double buffer
473void reverse_bytes_order2(char* from, char* to, int count);
474// convert old version calls to new version (to minimise code changes)
475#define reverse_bytes_order(start, count)       reverse_bytes_order2(start,start,count)
476void save_ext_for_dng(void);
477void change_ext_to_dng(void);
478void change_ext_to_default(void);
479
480void DoAFLock(void);
481void UnlockAF(void);
482
483void drv_self_hide(void);
484void drv_self_unhide(void);
485
486void  PostLogicalEventForNotPowerType(unsigned event, unsigned unk);
487void  PostLogicalEventToUI(unsigned event, unsigned unk);
488void  SetLogicalEventActive(unsigned event, unsigned state);
489void SetScriptMode(unsigned mode);
490
491/*
492 call C function with argument list created at runtime.
493 See lib/armutil/callfunc.S for documentation
494*/
495unsigned call_func_ptr(void *func, const unsigned *args, unsigned n_args);
496
497/*
498 reboot, optionally loading a different binary
499 see lib/armutil/reboot.c for documentation
500*/
501int reboot(const char *bootfile);
502
503#define started() debug_led(1)
504#define finished() debug_led(0)
505
506
507#ifdef CAM_CHDK_PTP
508
509typedef struct {
510    int code;
511    int sess_id;
512    int trans_id;
513    int num_param;
514    int param1;
515    int param2;
516    int param3;
517    int param4;
518    int param5;
519} PTPContainer;
520
521typedef struct {
522    int handle;
523    int (*send_data)(int handle, const char *buf, int part_size, int total_size, int, int, int); // (0xFF9F525C), total_size should be 0 except for the first call
524    int (*recv_data)(int handle, char *buf, int size, int, int); // (0xFF9F5500)
525    int (*send_resp)(int handle, PTPContainer *resp); // (0xFF9F5688)
526    int (*get_data_size)(int handle); // (0xFF9F5830)
527    int (*send_err_resp)(int handle, PTPContainer *resp); // (0xFF9F5784)
528    int unknown1; // ???
529    int (*f2)(); // ??? (0xFF8D5B24)
530    int (*f3)(); // ??? (0xFF8D5B5C)
531    // more??
532} ptp_data;
533
534typedef int (*ptp_handler)(int, ptp_data*, int, int, int, int, int, int, int, int);
535
536int add_ptp_handler(int opcode, ptp_handler handler, int unknown);
537
538void init_chdk_ptp();
539void init_chdk_ptp_task();
540
541#endif // CAM_CHDK_PTP
542
543int switch_mode_usb(int mode); // 0 = playback, 1 = record; return indicates success
544                               // N.B.: switch_mode only supported when USB is connected
545
546void ExitTask();
547
548#ifdef OPT_EXMEM_MALLOC
549void exmem_malloc_init(void);
550#endif
551
552#endif
Note: See TracBrowser for help on using the repository browser.