source: branches/reyalp-ptp-live/include/platform.h @ 1818

Revision 1818, 21.9 KB checked in by reyalp, 13 months ago (diff)

work in progress live view protocol changes
this is unfinished likely to change in incompatible ways
a540 includes fake variable aspect code for testing

  • 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// converted large macro to function in platform/generic/shooting.c (philmoz July 2011)
19extern int mode_is_video(int);
20#define MODE_IS_VIDEO(m)    mode_is_video(m)
21
22/* propcase ID constants. These are in their own header files for easier sed processing */
23#if CAM_PROPSET == 4
24    #include "propset4.h"
25#elif CAM_PROPSET == 3
26    #include "propset3.h"
27#elif CAM_PROPSET == 2      // most digic3 cameras
28    #include "propset2.h"
29#elif CAM_PROPSET == 1      // most digic2 cameras
30    #include "propset1.h"
31#else
32    #error unknown camera processor
33#endif
34
35#define MIN_DIST                    CAMERA_MIN_DIST     // Defined in camera.h (can be overridden in platform_camera.h)
36#define MAX_DIST                    CAMERA_MAX_DIST     // Defined in camera.h (can be overridden in platform_camera.h)
37#define INFINITY_DIST               0xFFFFFFFF          // Value to send to firmware to select 'infinity' focus
38
39//********************
40//char * get_debug();
41//********************
42
43#define MODE_SCREEN_MASK            0x0C00
44#define MODE_SCREEN_OPENED          0x0400
45#define MODE_SCREEN_ROTATED         0x0800
46
47/* Keyboard repeat and initial delays */
48#define KBD_REPEAT_DELAY  140
49#define KBD_INITIAL_DELAY 300
50
51// Video recording current status constants, see movie_status variable
52#define VIDEO_RECORD_NEVER_STARTED  0 
53#define VIDEO_RECORD_STOPPED        1 
54#define VIDEO_RECORD_IN_PROGRESS    4
55
56//Optical & digital zoom status constants, see zoom_status variable
57#define ZOOM_OPTICAL_MIN            1
58#define ZOOM_OPTICAL_MAX            2
59#define ZOOM_OPTICAL_MEDIUM         3
60#define ZOOM_OPTICAL_IN             4
61#define ZOOM_OPTICAL_OUT            5
62#define ZOOM_OPTICAL_REACHED_MIN    7
63
64#define ZOOM_DIGITAL_MAX            9
65#define ZOOM_DIGITAL_MEDIUM         10
66#define ZOOM_DIGITAL_IN             11
67#define ZOOM_DIGITAL_OUT            12
68#define ZOOM_DIGITAL_REACHED_MAX    13
69
70typedef struct {
71    unsigned short hackmode;   // platform independent mode values from MODE_xxx enum
72    unsigned short canonmode;  // PROPCASE_SHOOTING_MODE value
73} CapturemodeMap;
74
75typedef struct {
76    short id;       // hacks id
77    short prop_id;  // Canons id
78    char name[8];
79    short shutter_dfs_value; // shutter speed to use dark frame substraction
80} ISOTable;
81
82typedef struct {
83    short id;       // hacks id
84    short prop_id;  // Canons id
85    char name[8];
86    long usec;
87} ShutterSpeed;
88
89typedef struct {
90    short id;       // hacks id
91    short prop_id;  // Canons id
92    char name[8];
93} ApertureSize;
94
95typedef struct {
96    short av96;
97    short dav96;
98    short av96_step;
99    short tv96;
100    short dtv96;
101    short tv96_step;
102    short sv96;
103    short dsv96;
104    short sv96_step;
105    short iso;
106    short diso;
107    short iso_step;
108    short subj_dist;
109    short dsubj_dist;
110    short subj_dist_step;
111    short shoot_counter;
112    short type;
113} EXPO_BRACKETING_VALUES;
114
115#define SET_NOW      1
116#define SET_LATER    0
117
118#define SHOW_ALWAYS    1
119#define SHOW_HALF      2
120
121
122typedef struct {
123    short av96;
124    short tv96;
125    short sv96;
126    short subj_dist;
127    short nd_filter;
128} PHOTO_PARAM;
129
130typedef struct {
131    short hyperfocal_valid;
132    short distance_valid;
133    int   hyperfocal_distance_1e3;
134    int   aperture_value;
135    int   focal_length;
136    int   subject_distance;
137    int   near_limit;
138    int   far_limit;
139    int   hyperfocal_distance;
140    int   depth_of_field;
141    int   min_stack_distance;
142} DOF_TYPE;
143
144extern DOF_TYPE dof_values;
145
146typedef struct {
147    short av96;
148    short tv96;
149    short sv96;
150    short iso;
151    short sv96_market;
152    short iso_market;
153    short bv96_measured;
154    short bv96_seted;       //Ev96_internal-Sv96
155    short ev96_seted;       //Tv96+Av96
156    short ev96_measured;    //Bv96+Sv96
157    short dev96;            // Ev96_external-Ev96_internal
158    short dev96_canon;      // Canon OverExposure
159    int b;                  //average scene luminance
160} EXPO_TYPE;
161
162typedef struct {
163    float value;
164    char fraction[10];
165} shutter_speed;
166
167
168/******************************************************************/
169
170int get_focal_length(int zp);
171int get_effective_focal_length(int zp);
172int get_zoom_x(int zp);
173
174/******************************************************************/
175
176long get_tick_count();
177
178void remount_filesystem();
179void mark_filesystem_bootable();
180
181/******************************************************************/
182
183long get_parameter_data(long id, void *buf, long bufsize);
184long set_parameter_data(long id, void *buf, long bufsize);
185
186long get_property_case(long id, void *buf, long bufsize);
187long set_property_case(long id, void *buf, long bufsize);
188
189long get_file_counter();
190long get_exposure_counter();
191long get_file_next_counter();
192#if defined(CAM_DATE_FOLDER_NAMING)
193    void get_target_dir_name(char*);
194#else
195    long get_target_dir_num();
196#endif
197long get_target_file_num();
198
199/******************************************************************/
200
201void kbd_key_press(long key);
202void kbd_key_release(long key);
203void kbd_key_release_all();
204long kbd_is_key_pressed(long key);
205long kbd_is_key_clicked(long key);
206long kbd_get_pressed_key();
207long kbd_get_clicked_key();
208long kbd_get_autoclicked_key();
209void kbd_reset_autoclicked_key();
210long kbd_use_zoom_as_mf();
211long kbd_use_up_down_left_right_as_fast_switch();
212void kbd_set_alt_mode_key_mask(long key);
213int get_usb_power(int edge);
214long get_jogdial_direction(void);
215/******************************************************************/
216
217long vid_is_bitmap_shown();
218void *vid_get_bitmap_fb();
219
220void *vid_get_viewport_fb();
221void *vid_get_viewport_fb_d();
222void *vid_get_viewport_live_fb();
223
224void vid_bitmap_refresh();
225void vid_turn_off_updates();
226void vid_turn_on_updates();
227
228// These define the viewport dimensions both physically and in terms of the CHDK co-ordinate system
229// CHDK works in a 360x240 screen dimension / co-ordinate system
230extern long vid_get_viewport_height();          // Viewport height in CHDK screen pixels
231extern int vid_get_viewport_width();            // Viewport width in CHDK screen pixels
232extern int vid_get_viewport_xoffset();          // X offset of viewport edge relative to the viewport buffer (in CHDK screen pixels)
233extern int vid_get_viewport_yoffset();          // Y offset of viewport top relative to the viewport buffer (in CHDK screen pixels)
234extern int vid_get_viewport_display_xoffset();  // X offset of viewport edge relative to LCD screen (in CHDK screen pixels)
235extern int vid_get_viewport_display_yoffset();  // Y offset of viewport top relative to LCD screen (in CHDK screen pixels)
236extern int vid_get_viewport_byte_width();       // Physical width of viewport row in bytes
237extern int vid_get_viewport_yscale();           // Y multiplier for cameras with 480 pixel high viewports (CHDK code assumes 240)
238extern int vid_get_viewport_image_offset();     // Byte offset from start of viewport memory to first displayed pixel
239extern int vid_get_viewport_row_offset();       // Difference between physical width of viewport and displayed width (in bytes)
240
241
242// PTP Live View functions
243// These functions return actual size/offset in pixels of the viewport and bitmap buffers
244extern int vid_get_viewport_xoffset_proper();           // X Offset (for variable image size)
245extern int vid_get_viewport_yoffset_proper();           // Y Offset (for variable image size)
246extern int vid_get_viewport_display_xoffset_proper();   // X Offset (for variable image size)
247extern int vid_get_viewport_display_yoffset_proper();   // Y Offset (for variable image size)
248extern int vid_get_viewport_width_proper();             // Visible viewport width (for variable image size)
249extern int vid_get_viewport_height_proper();            // Visible viewport height (for variable image size)
250extern int vid_get_viewport_max_width();                // Max visible viewport width in pixels
251extern int vid_get_viewport_max_height();               // Max visible viewport height in pixels
252extern int vid_get_viewport_logical_width();
253extern int vid_get_viewport_logical_height();
254extern int vid_get_viewport_buffer_width_proper();      // Physical viewport buffer width in pixels
255extern int vid_get_palette_type();                      // Palette type (0 - 3)
256extern int vid_get_palette_size();                      // Palette size (in bytes)
257extern int vid_get_aspect_ratio();                      // LCD aspect ratio (0 = 4:3 or 1 = 16:9)
258
259extern void *vid_get_viewport_active_buffer();          // Return active live viewport memory address
260extern void *vid_get_bitmap_active_buffer();            // Return current active bitmap memory address
261extern void *vid_get_bitmap_active_palette();           // Return current palette memory address
262
263#ifdef CAM_LOAD_CUSTOM_COLORS
264// Color palette function
265extern void load_chdk_palette();
266#endif
267/******************************************************************/
268
269void *hook_raw_fptr();
270void *hook_raw_ret_addr();
271char *hook_raw_image_addr();
272char *hook_alt_raw_image_addr();
273long hook_raw_size();
274void hook_raw_install();
275void hook_raw_save_complete();
276
277/******************************************************************/
278
279long lens_get_zoom_pos();
280void lens_set_zoom_pos(long newpos);
281long lens_get_zoom_point();
282void lens_set_zoom_point(long newpt);
283void lens_set_zoom_speed(long newspd); //for S-series
284long lens_get_focus_pos();
285long lens_get_focus_pos_from_lens();
286void lens_set_focus_pos(long newpos);
287long lens_get_target_distance();
288
289/******************************************************************/
290
291int shooting_in_progress();
292int shooting_is_flash();
293int shooting_is_flash_ready();
294short shooting_get_flash_mode();
295
296
297/******************************************************************/
298int shooting_get_user_tv_id();
299#if defined(CAM_DRAW_EXPOSITION)
300    char* shooting_get_tv_str();
301#endif
302short shooting_get_tv96_from_shutter_speed(float t);
303short shooting_get_tv96();
304void shooting_set_tv96(short v, short is_now);
305void shooting_set_tv96_direct(short v, short is_now);
306void shooting_set_shutter_speed_ubasic(int t, short is_now);
307short shooting_get_user_tv96();
308void shooting_set_user_tv96(short v);
309float shooting_get_shutter_speed_from_tv96(short tv);
310float shooting_get_shutter_speed_override_value();
311const char * shooting_get_tv_override_value();
312const char * shooting_get_tv_bracket_value();
313const char * shooting_get_bracket_type();
314void shooting_set_user_tv_by_id(int v);
315void shooting_set_user_tv_by_id_rel(int v);
316const ShutterSpeed *shooting_get_tv_line();
317/******************************************************************/
318short shooting_get_aperture_sizes_table_size();
319short shooting_get_max_aperture_sizes_table_prop_id();
320short shooting_get_aperture_from_av96(short av96);
321int shooting_get_user_av_id();
322#if defined(CAM_DRAW_EXPOSITION)
323    char* shooting_get_av_str();
324#endif
325void shooting_set_user_av_by_id(int v);
326short shooting_get_av96();
327void shooting_set_av96(short v,short is_now);
328void shooting_set_av96_direct(short v, short is_now);
329short shooting_get_user_av96();
330void shooting_set_user_av96(short v);
331void shooting_set_user_av_by_id_rel(int v);
332short shooting_get_real_aperture();
333short shooting_get_min_real_aperture();
334short shooting_get_av96_override_value();
335const char * shooting_get_av_bracket_value();
336void shooting_set_nd_filter_state(short v, short is_now);
337/******************************************************************/
338int shooting_get_day_seconds();
339int shooting_get_tick_count();
340/******************************************************************/
341void shooting_set_prop(int id, int v);
342int shooting_get_prop(int id);
343/******************************************************************/
344extern int circle_of_confusion;
345/******************************************************************/
346extern short shooting_get_is_mode();
347extern short shooting_get_resolution();
348extern short shooting_get_display_mode();
349/******************************************************************/
350extern const int zoom_points;
351int shooting_get_zoom();
352void shooting_set_zoom(int v);
353void shooting_set_zoom_rel(int v);
354void shooting_set_zoom_speed(int v);
355/******************************************************************/
356void shooting_set_focus(int v, short is_now);
357short shooting_get_focus_mode();
358short shooting_get_real_focus_mode();
359short shooting_get_focus_state();
360short shooting_get_focus_ok();
361void shooting_update_dof_values();
362int shooting_get_hyperfocal_distance();
363int shooting_get_hyperfocal_distance_1e3_f(int av, int fl);
364int shooting_get_near_limit_of_acceptable_sharpness();
365int shooting_get_far_limit_of_acceptable_sharpness();
366int shooting_get_depth_of_field();
367int shooting_get_min_stack_distance();
368int shooting_get_subject_distance();
369int shooting_get_subject_distance_override_value();
370int shooting_get_subject_distance_bracket_value();
371int shooting_get_subject_distance_override_koef();
372int shooting_get_lens_to_focal_plane_width();
373short shooting_get_drive_mode();
374short shooting_can_focus();
375short shooting_get_common_focus_mode();
376short shooting_is_infinity_distance();
377/******************************************************************/
378int shooting_get_iso_mode();
379void shooting_set_iso_mode(int v);
380short shooting_get_sv96();
381short shooting_get_svm96();
382short shooting_get_iso_market();
383short shooting_get_iso_real();
384void shooting_set_iso_real(short iso, short is_now);
385//void shooting_set_iso_market(short isom);
386//void shooting_set_iso_real_delta_from_base(short diso);
387void shooting_set_sv96(short sv96, short is_now);
388short shooting_get_iso_override_value();
389short shooting_get_iso_bracket_value();
390/******************************************************************/
391short shooting_get_canon_overexposure_value();
392short shooting_get_bv96();
393int shooting_get_luminance();
394//const char* shooting_get_flash_light_value();
395/******************************************************************/
396int shooting_get_canon_subject_distance();
397int shooting_get_exif_subject_dist();
398/******************************************************************/
399void shooting_expo_param_override();
400void shooting_bracketing(void);
401
402void shooting_video_bitrate_change(int v);
403extern int auto_started;
404void shooting_tv_bracketing();
405void shooting_av_bracketing();
406/******************************************************************/
407// capture mode functions
408// return a CHDK mode enum for a PROPCASE_SHOOTING_MODE value, or 0 if not found
409int shooting_mode_canon2chdk(int canonmode);
410// 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.
411int shooting_mode_chdk2canon(int hackmode);
412// set capture mode from CHDK mode, returns 0 if mode not found or not in rec, otherwise 1
413int shooting_set_mode_chdk(int mode);
414// set capture mode from PROPCASE_SHOOTING_MODE value. return 0 if not in rec or mode is -1, otherwise 1
415int shooting_set_mode_canon(int mode);
416
417// returns 0 if in play, nonzero if rec
418int rec_mode_active(void);
419
420// not used. Right now this is just to preserve code from earlier version of mode_get()
421// in case we want to check play/rec switch state in the future.
422// WARNING: it isn't known if all variants of this check the switch state or some other bit.
423// should return 0 is switch is in play position, non-zero otherwise
424//int rec_switch_state(void);
425
426// swivel screen state.
427#ifdef CAM_SWIVEL_SCREEN
428// 0 not open, non-zero open
429int screen_opened(void);
430// 0 not rotated, non-zero rotated
431int screen_rotated(void);
432#endif
433
434/******************************************************************/
435void clear_values();
436/******************************************************************/
437
438int mode_get();
439
440/******************************************************************/
441
442long stat_get_vbatt();
443int get_ccd_temp();
444int get_optical_temp();
445int get_battery_temp();
446long get_vbatt_min();
447long get_vbatt_max();
448void play_sound(unsigned sound);
449void camera_set_raw(int mode);
450void camera_set_nr(int mode);
451int camera_get_nr();
452int camera_get_script_autostart();
453void camera_set_script_autostart();
454void enter_alt();
455void exit_alt();
456void camera_shutdown_in_a_second(void);
457
458void disable_shutdown();
459void enable_shutdown();
460
461void JogDial_CW(void);
462void JogDial_CCW(void);
463void change_video_tables(int a, int b);
464int get_flash_params_count(void);
465
466/******************************************************************/
467void __attribute__((noreturn)) shutdown();
468void camera_set_led(int led, int state, int bright);
469void debug_led(int state);
470/****************************************/
471extern int canon_menu_active;
472extern char canon_shoot_menu_active;
473extern int recreview_hold;
474
475extern int movie_status;
476unsigned int movie_reset;
477unsigned int GetFreeCardSpaceKb(void);
478unsigned int GetTotalCardSpaceKb(void);
479
480
481
482int swap_partitions(int new_partition);
483unsigned char get_active_partition(void);
484int get_part_type(void);
485int get_part_count(void);
486int is_partition_changed(void);
487void create_partitions(void);
488extern char * camera_jpeg_count_str();
489
490unsigned int GetJpgCount(void);
491unsigned int GetRawCount(void);
492
493void MakeAFScan(void);
494extern int movie_status;
495extern int zoom_status;
496void EnterToCompensationEVF(void);
497void ExitFromCompensationEVF(void);
498
499extern void PutInNdFilter();
500extern void PutOutNdFilter();
501extern long GetCurrentAvValue();
502extern long IsStrobeChargeCompleted();
503extern void SetCurrentCaptureModeType();
504#if CAM_CAN_UNLOCK_OPTICAL_ZOOM_IN_VIDEO
505extern void UnsetZoomForMovie();
506#endif
507#ifdef CAM_AV_OVERRIDE_IRIS_FIX
508extern int MoveIrisWithAv(short*);
509#endif
510#if CAM_EV_IN_VIDEO
511extern void ExpCtrlTool_StartContiAE(int, int);
512extern void ExpCtrlTool_StopContiAE(int, int);
513extern short SetAE_ShutterSpeed(short* tv);
514#endif
515
516void TurnOnBackLight(void);
517void TurnOffBackLight(void);
518
519void wait_until_remote_button_is_released(void);
520short shooting_get_ev_correction1();
521short shooting_get_ev_correction2();
522
523//image_quality_override
524void shooting_set_image_quality(int imq);
525
526int get_ev_video_avail(void);
527void set_ev_video_avail(int);
528int get_ev_video(void);
529void set_ev_video(int);
530//dng related
531// new version to support DNG double buffer
532void reverse_bytes_order2(char* from, char* to, int count);
533// convert old version calls to new version (to minimise code changes)
534#define reverse_bytes_order(start, count)   reverse_bytes_order2(start,start,count)
535void save_ext_for_dng(void);
536void change_ext_to_dng(void);
537void change_ext_to_default(void);
538
539void DoAFLock(void);
540void UnlockAF(void);
541
542void drv_self_hide(void);
543void drv_self_unhide(void);
544
545void  PostLogicalEventForNotPowerType(unsigned event, unsigned unk);
546void  PostLogicalEventToUI(unsigned event, unsigned unk);
547void  SetLogicalEventActive(unsigned event, unsigned state);
548void SetScriptMode(unsigned mode);
549/*
550 call C function with argument list created at runtime.
551 See lib/armutil/callfunc.S for documentation
552*/
553unsigned call_func_ptr(void *func, const unsigned *args, unsigned n_args);
554
555/*
556 reboot, optionally loading a different binary
557 see lib/armutil/reboot.c for documentation
558*/
559int reboot(const char *bootfile);
560
561#define started() debug_led(1)
562#define finished() debug_led(0)
563
564#ifdef CAM_CHDK_PTP
565
566typedef struct {
567    int code;
568    int sess_id;
569    int trans_id;
570    int num_param;
571    int param1;
572    int param2;
573    int param3;
574    int param4;
575    int param5;
576} PTPContainer;
577
578typedef struct {
579    int handle;
580    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
581    int (*recv_data)(int handle, char *buf, int size, int, int); // (0xFF9F5500)
582    int (*send_resp)(int handle, PTPContainer *resp); // (0xFF9F5688)
583    int (*get_data_size)(int handle); // (0xFF9F5830)
584    int (*send_err_resp)(int handle, PTPContainer *resp); // (0xFF9F5784)
585    int unknown1; // ???
586    int (*f2)(); // ??? (0xFF8D5B24)
587    int (*f3)(); // ??? (0xFF8D5B5C)
588    // more??
589} ptp_data;
590
591typedef int (*ptp_handler)(int, ptp_data*, int, int, int, int, int, int, int, int);
592
593int add_ptp_handler(int opcode, ptp_handler handler, int unknown);
594
595void init_chdk_ptp();
596void init_chdk_ptp_task();
597
598typedef struct {
599    unsigned size;
600    unsigned script_id; // id of script message is to/from
601    unsigned type;
602    unsigned subtype;
603    char data[];
604} ptp_script_msg;
605int ptp_script_write_msg(ptp_script_msg *msg);
606ptp_script_msg* ptp_script_read_msg(void);
607ptp_script_msg* ptp_script_create_msg(unsigned type, unsigned subtype, unsigned datasize, const void *data);
608int ptp_script_write_error_msg(unsigned errtype, const char *err);
609
610#endif // CAM_CHDK_PTP
611
612int switch_mode_usb(int mode); // 0 = playback, 1 = record; return indicates success
613                               // N.B.: switch_mode only supported when USB is connected
614
615void ExitTask();
616
617// Data returned from GetMemInfo & GetExMemInfo functions stored in this data structure
618typedef struct {
619    int start_address;
620    int end_address;
621    int total_size;
622    int allocated_size;
623    int allocated_peak;
624    int allocated_count;
625    int free_size;
626    int free_block_max_size;
627    int free_block_count;
628} cam_meminfo;
629
630// Always included for module_inspector
631extern void GetMemInfo(cam_meminfo*);
632extern int GetExMemInfo(cam_meminfo*);
633
634#ifdef OPT_EXMEM_MALLOC
635    extern void exmem_malloc_init(void);
636#endif
637
638#ifdef CAM_TOUCHSCREEN_UI
639extern unsigned short  touch_screen_x, touch_screen_y;
640extern int touch_screen_active;
641#endif
642
643unsigned char SetFileAttributes(const char* fn, unsigned char attr);
644
645#ifdef CAM_HAS_GPS
646    void GPS_UpdateData();
647        extern char * camera_jpeg_current_filename();
648        extern char * camera_jpeg_current_latitude();
649        extern char * camera_jpeg_current_longitude();
650        extern char * camera_jpeg_current_height();
651#endif
652
653// debug logging function - see generic wrappers.c to adjust destination
654// WARNING fixed length buffer
655extern void dbg_printf(char *fmt,...);
656
657//#define DEBUG_LOGGING
658// debug with timestamp
659#ifdef DEBUG_LOGGING
660#define DBGPRINTF(fmt,args...) dbg_printf("%08d DBG:" fmt,get_tick_count(), ##args)
661#else
662#define DBGPRINTF(...)
663#endif
664
665#endif
666
Note: See TracBrowser for help on using the repository browser.