1use libc::{c_int,c_uint,c_char,c_void};
4
5use abilities::CameraAbilities;
6use context::GPContext;
7use file::{CameraFile, CameraFileType};
8use filesys::{CameraFileInfo, CameraStorageInformation};
9use list::CameraList;
10use port::GPPortInfo;
11use widget::CameraWidget;
12
13#[repr(C)]
14pub struct Camera {
15 __private: c_void
16}
17
18#[repr(C)]
19pub struct CameraText {
20 pub text: [c_char; 32*1024],
21}
22
23#[repr(C)]
24pub struct CameraFilePath {
25 pub name: [c_char; 128],
26 pub folder: [c_char; 1024],
27}
28
29#[derive(Debug,PartialEq,Eq,Hash,Clone,Copy)]
30#[repr(C)]
31pub enum CameraCaptureType {
32 GP_CAPTURE_IMAGE = 0,
33 GP_CAPTURE_MOVIE = 1,
34 GP_CAPTURE_SOUND = 2,
35}
36
37pub const GP_CAPTURE_IMAGE: CameraCaptureType = CameraCaptureType::GP_CAPTURE_IMAGE;
38pub const GP_CAPTURE_MOVIE: CameraCaptureType = CameraCaptureType::GP_CAPTURE_MOVIE;
39pub const GP_CAPTURE_SOUND: CameraCaptureType = CameraCaptureType::GP_CAPTURE_SOUND;
40
41#[derive(Debug,PartialEq,Eq,Hash,Clone,Copy)]
42#[repr(C)]
43pub enum CameraEventType {
44 GP_EVENT_UNKNOWN = 0,
45 GP_EVENT_TIMEOUT = 1,
46 GP_EVENT_FILE_ADDED = 2,
47 GP_EVENT_FOLDER_ADDED = 3,
48 GP_EVENT_CAPTURE_COMPLETE = 4,
49}
50
51pub const GP_EVENT_UNKNOWN: CameraEventType = CameraEventType::GP_EVENT_UNKNOWN;
52pub const GP_EVENT_TIMEOUT: CameraEventType = CameraEventType::GP_EVENT_TIMEOUT;
53pub const GP_EVENT_FILE_ADDED: CameraEventType = CameraEventType::GP_EVENT_FILE_ADDED;
54pub const GP_EVENT_FOLDER_ADDED: CameraEventType = CameraEventType::GP_EVENT_FOLDER_ADDED;
55pub const GP_EVENT_CAPTURE_COMPLETE: CameraEventType = CameraEventType::GP_EVENT_CAPTURE_COMPLETE;
56
57pub type CameraTimeoutFunc = extern "C" fn (camera: *mut Camera, context: *mut GPContext) -> c_int;
58pub type CameraTimeoutStartFunc = extern "C" fn (camera: *mut Camera, timeout: c_uint, func: CameraTimeoutFunc, data: *mut c_void) -> c_uint;
59pub type CameraTimeoutStopFunc = extern "C" fn (camera: *mut Camera, id: c_uint, data: *mut c_void);
60
61extern "C" {
62 pub fn gp_camera_new(camera: *mut *mut Camera) -> c_int;
63
64 pub fn gp_camera_set_abilities(camera: *mut Camera, abilities: CameraAbilities) -> c_int;
66 pub fn gp_camera_get_abilities(camera: *mut Camera, abilities: *mut CameraAbilities) -> c_int;
67 pub fn gp_camera_set_port_info(camera: *mut Camera, info: GPPortInfo) -> c_int;
68 pub fn gp_camera_get_port_info(camera: *mut Camera, info: *mut GPPortInfo) -> c_int;
69
70 pub fn gp_camera_get_port_speed(camera: *mut Camera) -> c_int;
72 pub fn gp_camera_set_port_speed(camera: *mut Camera, speed: c_int) -> c_int;
73
74 pub fn gp_camera_autodetect(list: *mut CameraList, context: *mut GPContext) -> c_int;
76 pub fn gp_camera_init(camera: *mut Camera, context: *mut GPContext) -> c_int;
77 pub fn gp_camera_exit(camera: *mut Camera, context: *mut GPContext) -> c_int;
78
79 pub fn gp_camera_ref(camera: *mut Camera) -> c_int;
81 pub fn gp_camera_unref(camera: *mut Camera) -> c_int;
82 pub fn gp_camera_free(camera: *mut Camera) -> c_int;
83 pub fn gp_camera_get_config(camera: *mut Camera, window: *mut *mut CameraWidget, context: *mut GPContext) -> c_int;
84 pub fn gp_camera_set_config(camera: *mut Camera, window: *mut CameraWidget, context: *mut GPContext) -> c_int;
85 pub fn gp_camera_get_summary(camera: *mut Camera, summary: *mut CameraText, context: *mut GPContext) -> c_int;
86 pub fn gp_camera_get_manual(camera: *mut Camera, manual: *mut CameraText, context: *mut GPContext) -> c_int;
87 pub fn gp_camera_get_about(camera: *mut Camera, about: *mut CameraText, context: *mut GPContext) -> c_int;
88 pub fn gp_camera_capture(camera: *mut Camera, capture_type: CameraCaptureType, path: *mut CameraFilePath, context: *mut GPContext) -> c_int;
89 pub fn gp_camera_trigger_capture(camera: *mut Camera, context: *mut GPContext) -> c_int;
90 pub fn gp_camera_capture_preview(camera: *mut Camera, file: *mut CameraFile, context: *mut GPContext) -> c_int;
91 pub fn gp_camera_wait_for_event(camera: *mut Camera, timeout: c_int, eventtype: *mut CameraEventType, eventdata: *mut *mut c_void, context: *mut GPContext) -> c_int;
92 pub fn gp_camera_get_storageinfo(camera: *mut Camera, sifs: *mut *mut CameraStorageInformation, nrofsifs: *mut c_int, context: *mut GPContext) -> c_int;
93
94 pub fn gp_camera_folder_list_files(camera: *mut Camera, folder: *const c_char, list: *mut CameraList, context: *mut GPContext) -> c_int;
96 pub fn gp_camera_folder_list_folders(camera: *mut Camera, folder: *const c_char, list: *mut CameraList, context: *mut GPContext) -> c_int;
97 pub fn gp_camera_folder_delete_all(camera: *mut Camera, folder: *const c_char, context: *mut GPContext) -> c_int;
98 pub fn gp_camera_folder_put_file(camera: *mut Camera, folder: *const c_char, filename: *const c_char, file_type: CameraFileType, file: *mut CameraFile, context: *mut GPContext) -> c_int;
99 pub fn gp_camera_folder_make_dir(camera: *mut Camera, folder: *const c_char, name: *const c_char, context: *mut GPContext) -> c_int;
100 pub fn gp_camera_folder_remove_dir(camera: *mut Camera, folder: *const c_char, name: *const c_char, context: *mut GPContext) -> c_int;
101
102 pub fn gp_camera_file_get_info(camera: *mut Camera, folder: *const c_char, file: *const c_char, info: *mut CameraFileInfo, contest: *mut GPContext) -> c_int;
104 pub fn gp_camera_file_set_info(camera: *mut Camera, folder: *const c_char, file: *const c_char, info: CameraFileInfo, context: *mut GPContext) -> c_int;
105 pub fn gp_camera_file_get(camera: *mut Camera, folder: *const c_char, file: *const c_char, file_type: CameraFileType, camera_file: *mut CameraFile, context: *mut GPContext) -> c_int;
106 pub fn gp_camera_file_read(camera: *mut Camera, folder: *const c_char, file: *const c_char, file_type: CameraFileType, offset: u64, buf: *mut c_char, size: *mut u64, context: *mut GPContext) -> c_int;
107 pub fn gp_camera_file_delete(camera: *mut Camera, folder: *const c_char, file: *const c_char, context: *mut GPContext) -> c_int;
108
109 pub fn gp_camera_set_timeout_funcs(camera: *mut Camera, start_func: CameraTimeoutStartFunc, stop_func: CameraTimeoutStopFunc, data: *mut c_void);
111 pub fn gp_camera_start_timeout(camera: *mut Camera, timeout: c_uint, func: CameraTimeoutFunc) -> c_int;
112 pub fn gp_camera_stop_timeout(camera: *mut Camera, id: c_uint);
113}